X-GUI CLIENT FOR BLOOKET

NOT PATCHED ANYMORE, THE BEST GUI ON THE WEB! ADVANCED ANTIBAN AND TONS OF FEATURES {CHEAT} {HACK} {CLIENT}

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name         X-GUI CLIENT FOR BLOOKET
// @namespace    http://tampermonkey.net/
// @version      6.70x
// @description  NOT PATCHED ANYMORE, THE BEST GUI ON THE WEB! ADVANCED ANTIBAN AND TONS OF FEATURES {CHEAT} {HACK} {CLIENT}
// @author       Tony-the-best
// @run-at       document-end
// @match        *://*.blooket.com/*
// @match        *://blooket.com/*
// @license      APGL-3.0
// @icon         https://i.ibb.co/LhDtzNd1/icon512.png
// @grant       GM_getResourceText
// @grant       GM_addStyle
// @require     https://cdn.jsdelivr.net/npm/sweetalert2@11
// ==/UserScript==







/*!
* sweetalert2 v11.26.17
* Released under the MIT License.
*/
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).Sweetalert2=t()}(this,function(){"use strict";function e(e,t,n){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:n;throw new TypeError("Private element is not present on this object")}function t(t,n){return t.get(e(t,n))}function n(e,t,n){(function(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")})(e,t),t.set(e,n)}const o={},i=e=>new Promise(t=>{if(!e)return t();const n=window.scrollX,i=window.scrollY;o.restoreFocusTimeout=setTimeout(()=>{o.previousActiveElement instanceof HTMLElement?(o.previousActiveElement.focus(),o.previousActiveElement=null):document.body&&document.body.focus(),t()},100),window.scrollTo(n,i)}),s="swal2-",r=["container","shown","height-auto","iosfix","popup","modal","no-backdrop","no-transition","toast","toast-shown","show","hide","close","title","html-container","actions","confirm","deny","cancel","footer","icon","icon-content","image","input","file","range","select","radio","checkbox","label","textarea","inputerror","input-label","validation-message","progress-steps","active-progress-step","progress-step","progress-step-line","loader","loading","styled","top","top-start","top-end","top-left","top-right","center","center-start","center-end","center-left","center-right","bottom","bottom-start","bottom-end","bottom-left","bottom-right","grow-row","grow-column","grow-fullscreen","rtl","timer-progress-bar","timer-progress-bar-container","scrollbar-measure","icon-success","icon-warning","icon-info","icon-question","icon-error","draggable","dragging"].reduce((e,t)=>(e[t]=s+t,e),{}),a=["success","warning","info","question","error"].reduce((e,t)=>(e[t]=s+t,e),{}),l="SweetAlert2:",c=e=>e.charAt(0).toUpperCase()+e.slice(1),u=e=>{console.warn(`${l} ${"object"==typeof e?e.join(" "):e}`)},d=e=>{console.error(`${l} ${e}`)},p=[],m=(e,t=null)=>{var n;n=`"${e}" is deprecated and will be removed in the next major release.${t?` Use "${t}" instead.`:""}`,p.includes(n)||(p.push(n),u(n))},h=e=>"function"==typeof e?e():e,g=e=>e&&"function"==typeof e.toPromise,f=e=>g(e)?e.toPromise():Promise.resolve(e),b=e=>e&&Promise.resolve(e)===e,y=()=>document.body.querySelector(`.${r.container}`),v=e=>{const t=y();return t?t.querySelector(e):null},w=e=>v(`.${e}`),C=()=>w(r.popup),A=()=>w(r.icon),E=()=>w(r.title),k=()=>w(r["html-container"]),B=()=>w(r.image),$=()=>w(r["progress-steps"]),L=()=>w(r["validation-message"]),P=()=>v(`.${r.actions} .${r.confirm}`),x=()=>v(`.${r.actions} .${r.cancel}`),T=()=>v(`.${r.actions} .${r.deny}`),S=()=>v(`.${r.loader}`),O=()=>w(r.actions),M=()=>w(r.footer),j=()=>w(r["timer-progress-bar"]),H=()=>w(r.close),I=()=>{const e=C();if(!e)return[];const t=e.querySelectorAll('[tabindex]:not([tabindex="-1"]):not([tabindex="0"])'),n=Array.from(t).sort((e,t)=>{const n=parseInt(e.getAttribute("tabindex")||"0"),o=parseInt(t.getAttribute("tabindex")||"0");return n>o?1:n<o?-1:0}),o=e.querySelectorAll('\n  a[href],\n  area[href],\n  input:not([disabled]),\n  select:not([disabled]),\n  textarea:not([disabled]),\n  button:not([disabled]),\n  iframe,\n  object,\n  embed,\n  [tabindex="0"],\n  [contenteditable],\n  audio[controls],\n  video[controls],\n  summary\n'),i=Array.from(o).filter(e=>"-1"!==e.getAttribute("tabindex"));return[...new Set(n.concat(i))].filter(e=>ee(e))},D=()=>N(document.body,r.shown)&&!N(document.body,r["toast-shown"])&&!N(document.body,r["no-backdrop"]),V=()=>{const e=C();return!!e&&N(e,r.toast)},q=(e,t)=>{if(e.textContent="",t){const n=(new DOMParser).parseFromString(t,"text/html"),o=n.querySelector("head");o&&Array.from(o.childNodes).forEach(t=>{e.appendChild(t)});const i=n.querySelector("body");i&&Array.from(i.childNodes).forEach(t=>{t instanceof HTMLVideoElement||t instanceof HTMLAudioElement?e.appendChild(t.cloneNode(!0)):e.appendChild(t)})}},N=(e,t)=>{if(!t)return!1;const n=t.split(/\s+/);for(let t=0;t<n.length;t++)if(!e.classList.contains(n[t]))return!1;return!0},_=(e,t,n)=>{if(((e,t)=>{Array.from(e.classList).forEach(n=>{Object.values(r).includes(n)||Object.values(a).includes(n)||Object.values(t.showClass||{}).includes(n)||e.classList.remove(n)})})(e,t),!t.customClass)return;const o=t.customClass[n];o&&("string"==typeof o||o.forEach?z(e,o):u(`Invalid type of customClass.${n}! Expected string or iterable object, got "${typeof o}"`))},R=(e,t)=>{if(!t)return null;switch(t){case"select":case"textarea":case"file":return e.querySelector(`.${r.popup} > .${r[t]}`);case"checkbox":return e.querySelector(`.${r.popup} > .${r.checkbox} input`);case"radio":return e.querySelector(`.${r.popup} > .${r.radio} input:checked`)||e.querySelector(`.${r.popup} > .${r.radio} input:first-child`);case"range":return e.querySelector(`.${r.popup} > .${r.range} input`);default:return e.querySelector(`.${r.popup} > .${r.input}`)}},F=e=>{if(e.focus(),"file"!==e.type){const t=e.value;e.value="",e.value=t}},U=(e,t,n)=>{e&&t&&("string"==typeof t&&(t=t.split(/\s+/).filter(Boolean)),t.forEach(t=>{Array.isArray(e)?e.forEach(e=>{n?e.classList.add(t):e.classList.remove(t)}):n?e.classList.add(t):e.classList.remove(t)}))},z=(e,t)=>{U(e,t,!0)},W=(e,t)=>{U(e,t,!1)},K=(e,t)=>{const n=Array.from(e.children);for(let e=0;e<n.length;e++){const o=n[e];if(o instanceof HTMLElement&&N(o,t))return o}},Y=(e,t,n)=>{n===`${parseInt(`${n}`)}`&&(n=parseInt(n)),n||0===parseInt(`${n}`)?e.style.setProperty(t,"number"==typeof n?`${n}px`:n):e.style.removeProperty(t)},X=(e,t="flex")=>{e&&(e.style.display=t)},Z=e=>{e&&(e.style.display="none")},J=(e,t="block")=>{e&&new MutationObserver(()=>{Q(e,e.innerHTML,t)}).observe(e,{childList:!0,subtree:!0})},G=(e,t,n,o)=>{const i=e.querySelector(t);i&&i.style.setProperty(n,o)},Q=(e,t,n="flex")=>{t?X(e,n):Z(e)},ee=e=>Boolean(e&&(e.offsetWidth||e.offsetHeight||e.getClientRects().length)),te=e=>Boolean(e.scrollHeight>e.clientHeight),ne=e=>{const t=window.getComputedStyle(e),n=parseFloat(t.getPropertyValue("animation-duration")||"0"),o=parseFloat(t.getPropertyValue("transition-duration")||"0");return n>0||o>0},oe=(e,t=!1)=>{const n=j();n&&ee(n)&&(t&&(n.style.transition="none",n.style.width="100%"),setTimeout(()=>{n.style.transition=`width ${e/1e3}s linear`,n.style.width="0%"},10))},ie=`\n <div aria-labelledby="${r.title}" aria-describedby="${r["html-container"]}" class="${r.popup}" tabindex="-1">\n   <button type="button" class="${r.close}"></button>\n   <ul class="${r["progress-steps"]}"></ul>\n   <div class="${r.icon}"></div>\n   <img class="${r.image}" />\n   <h2 class="${r.title}" id="${r.title}"></h2>\n   <div class="${r["html-container"]}" id="${r["html-container"]}"></div>\n   <input class="${r.input}" id="${r.input}" />\n   <input type="file" class="${r.file}" />\n   <div class="${r.range}">\n     <input type="range" />\n     <output></output>\n   </div>\n   <select class="${r.select}" id="${r.select}"></select>\n   <div class="${r.radio}"></div>\n   <label class="${r.checkbox}">\n     <input type="checkbox" id="${r.checkbox}" />\n     <span class="${r.label}"></span>\n   </label>\n   <textarea class="${r.textarea}" id="${r.textarea}"></textarea>\n   <div class="${r["validation-message"]}" id="${r["validation-message"]}"></div>\n   <div class="${r.actions}">\n     <div class="${r.loader}"></div>\n     <button type="button" class="${r.confirm}"></button>\n     <button type="button" class="${r.deny}"></button>\n     <button type="button" class="${r.cancel}"></button>\n   </div>\n   <div class="${r.footer}"></div>\n   <div class="${r["timer-progress-bar-container"]}">\n     <div class="${r["timer-progress-bar"]}"></div>\n   </div>\n </div>\n`.replace(/(^|\n)\s*/g,""),se=()=>{o.currentInstance&&o.currentInstance.resetValidationMessage()},re=e=>{const t=(()=>{const e=y();return!!e&&(e.remove(),W([document.documentElement,document.body],[r["no-backdrop"],r["toast-shown"],r["has-column"]]),!0)})();if("undefined"==typeof window||"undefined"==typeof document)return void d("SweetAlert2 requires document to initialize");const n=document.createElement("div");n.className=r.container,t&&z(n,r["no-transition"]),q(n,ie),n.dataset.swal2Theme=e.theme;const i=(e=>{if("string"==typeof e){const t=document.querySelector(e);if(!t)throw new Error(`Target element "${e}" not found`);return t}return e})(e.target||"body");i.appendChild(n),e.topLayer&&(n.setAttribute("popover",""),n.showPopover()),(e=>{const t=C();t&&(t.setAttribute("role",e.toast?"alert":"dialog"),t.setAttribute("aria-live",e.toast?"polite":"assertive"),e.toast||t.setAttribute("aria-modal","true"))})(e),(e=>{"rtl"===window.getComputedStyle(e).direction&&(z(y(),r.rtl),o.isRTL=!0)})(i),(()=>{const e=C();if(!e)return;const t=K(e,r.input),n=K(e,r.file),o=e.querySelector(`.${r.range} input`),i=e.querySelector(`.${r.range} output`),s=K(e,r.select),a=e.querySelector(`.${r.checkbox} input`),l=K(e,r.textarea);t&&(t.oninput=se),n&&(n.onchange=se),s&&(s.onchange=se),a&&(a.onchange=se),l&&(l.oninput=se),o&&i&&(o.oninput=()=>{se(),i.value=o.value},o.onchange=()=>{se(),i.value=o.value})})()},ae=(e,t)=>{e instanceof HTMLElement?t.appendChild(e):"object"==typeof e?le(e,t):e&&q(t,e)},le=(e,t)=>{"jquery"in e?ce(t,e):q(t,e.toString())},ce=(e,t)=>{if(e.textContent="",0 in t)for(let n=0;n in t;n++)e.appendChild(t[n].cloneNode(!0));else e.appendChild(t.cloneNode(!0))},ue=(e,t)=>{const n=O(),o=S();n&&o&&(t.showConfirmButton||t.showDenyButton||t.showCancelButton?X(n):Z(n),_(n,t,"actions"),function(e,t,n){const o=P(),i=T(),s=x();if(!o||!i||!s)return;pe(o,"confirm",n),pe(i,"deny",n),pe(s,"cancel",n),function(e,t,n,o){if(!o.buttonsStyling)return void W([e,t,n],r.styled);z([e,t,n],r.styled),o.confirmButtonColor&&e.style.setProperty("--swal2-confirm-button-background-color",o.confirmButtonColor);o.denyButtonColor&&t.style.setProperty("--swal2-deny-button-background-color",o.denyButtonColor);o.cancelButtonColor&&n.style.setProperty("--swal2-cancel-button-background-color",o.cancelButtonColor);de(e),de(t),de(n)}(o,i,s,n),n.reverseButtons&&(n.toast?(e.insertBefore(s,o),e.insertBefore(i,o)):(e.insertBefore(s,t),e.insertBefore(i,t),e.insertBefore(o,t)))}(n,o,t),q(o,t.loaderHtml||""),_(o,t,"loader"))};function de(e){const t=window.getComputedStyle(e);if(t.getPropertyValue("--swal2-action-button-focus-box-shadow"))return;const n=t.backgroundColor.replace(/rgba?\((\d+), (\d+), (\d+).*/,"rgba($1, $2, $3, 0.5)");e.style.setProperty("--swal2-action-button-focus-box-shadow",t.getPropertyValue("--swal2-outline").replace(/ rgba\(.*/,` ${n}`))}function pe(e,t,n){const o=c(t);Q(e,n[`show${o}Button`],"inline-block"),q(e,n[`${t}ButtonText`]||""),e.setAttribute("aria-label",n[`${t}ButtonAriaLabel`]||""),e.className=r[t],_(e,n,`${t}Button`)}const me=(e,t)=>{const n=y();n&&(!function(e,t){"string"==typeof t?e.style.background=t:t||z([document.documentElement,document.body],r["no-backdrop"])}(n,t.backdrop),function(e,t){if(!t)return;t in r?z(e,r[t]):(u('The "position" parameter is not valid, defaulting to "center"'),z(e,r.center))}(n,t.position),function(e,t){if(!t)return;z(e,r[`grow-${t}`])}(n,t.grow),_(n,t,"container"))};var he={innerParams:new WeakMap,domCache:new WeakMap};const ge=["input","file","range","select","radio","checkbox","textarea"],fe=e=>{if(!e.input)return;if(!Ee[e.input])return void d(`Unexpected type of input! Expected ${Object.keys(Ee).join(" | ")}, got "${e.input}"`);const t=Ce(e.input);if(!t)return;const n=Ee[e.input](t,e);X(t),e.inputAutoFocus&&setTimeout(()=>{F(n)})},be=(e,t)=>{const n=C();if(!n)return;const o=R(n,e);if(o){(e=>{for(let t=0;t<e.attributes.length;t++){const n=e.attributes[t].name;["id","type","value","style"].includes(n)||e.removeAttribute(n)}})(o);for(const e in t)o.setAttribute(e,t[e])}},ye=e=>{if(!e.input)return;const t=Ce(e.input);t&&_(t,e,"input")},ve=(e,t)=>{!e.placeholder&&t.inputPlaceholder&&(e.placeholder=t.inputPlaceholder)},we=(e,t,n)=>{if(n.inputLabel){const o=document.createElement("label"),i=r["input-label"];o.setAttribute("for",e.id),o.className=i,"object"==typeof n.customClass&&z(o,n.customClass.inputLabel),o.innerText=n.inputLabel,t.insertAdjacentElement("beforebegin",o)}},Ce=e=>{const t=C();if(t)return K(t,r[e]||r.input)},Ae=(e,t)=>{["string","number"].includes(typeof t)?e.value=`${t}`:b(t)||u(`Unexpected type of inputValue! Expected "string", "number" or "Promise", got "${typeof t}"`)},Ee={};Ee.text=Ee.email=Ee.password=Ee.number=Ee.tel=Ee.url=Ee.search=Ee.date=Ee["datetime-local"]=Ee.time=Ee.week=Ee.month=(e,t)=>{const n=e;return Ae(n,t.inputValue),we(n,n,t),ve(n,t),n.type=t.input,n},Ee.file=(e,t)=>{const n=e;return we(n,n,t),ve(n,t),n},Ee.range=(e,t)=>{const n=e,o=n.querySelector("input"),i=n.querySelector("output");return o&&(Ae(o,t.inputValue),o.type=t.input,we(o,e,t)),i&&Ae(i,t.inputValue),e},Ee.select=(e,t)=>{const n=e;if(n.textContent="",t.inputPlaceholder){const e=document.createElement("option");q(e,t.inputPlaceholder),e.value="",e.disabled=!0,e.selected=!0,n.appendChild(e)}return we(n,n,t),n},Ee.radio=e=>(e.textContent="",e),Ee.checkbox=(e,t)=>{const n=C();if(!n)throw new Error("Popup not found");const o=R(n,"checkbox");if(!o)throw new Error("Checkbox input not found");o.value="1",o.checked=Boolean(t.inputValue);const i=e.querySelector("span");if(i){const e=t.inputPlaceholder||t.inputLabel;e&&q(i,e)}return o},Ee.textarea=(e,t)=>{const n=e;Ae(n,t.inputValue),ve(n,t),we(n,n,t);return setTimeout(()=>{if("MutationObserver"in window){const e=C();if(!e)return;const o=parseInt(window.getComputedStyle(e).width);new MutationObserver(()=>{if(!document.body.contains(n))return;const e=n.offsetWidth+(i=n,parseInt(window.getComputedStyle(i).marginLeft)+parseInt(window.getComputedStyle(i).marginRight));var i;const s=C();s&&(e>o?s.style.width=`${e}px`:Y(s,"width",t.width))}).observe(n,{attributes:!0,attributeFilter:["style"]})}}),n};const ke=(e,t)=>{const n=k();n&&(J(n),_(n,t,"htmlContainer"),t.html?(ae(t.html,n),X(n,"block")):t.text?(n.textContent=t.text,X(n,"block")):Z(n),((e,t)=>{const n=C();if(!n)return;const o=he.innerParams.get(e),i=!o||t.input!==o.input;ge.forEach(e=>{const o=K(n,r[e]);o&&(be(e,t.inputAttributes),o.className=r[e],i&&Z(o))}),t.input&&(i&&fe(t),ye(t))})(e,t))},Be=(e,t)=>{for(const[n,o]of Object.entries(a))t.icon!==n&&W(e,o);z(e,t.icon&&a[t.icon]),Pe(e,t),$e(),_(e,t,"icon")},$e=()=>{const e=C();if(!e)return;const t=window.getComputedStyle(e).getPropertyValue("background-color"),n=e.querySelectorAll("[class^=swal2-success-circular-line], .swal2-success-fix");for(let e=0;e<n.length;e++)n[e].style.backgroundColor=t},Le=(e,t)=>{if(!t.icon&&!t.iconHtml)return;let n=e.innerHTML,o="";if(t.iconHtml)o=xe(t.iconHtml);else if("success"===t.icon)o=(e=>`\n  ${e.animation?'<div class="swal2-success-circular-line-left"></div>':""}\n  <span class="swal2-success-line-tip"></span> <span class="swal2-success-line-long"></span>\n  <div class="swal2-success-ring"></div>\n  ${e.animation?'<div class="swal2-success-fix"></div>':""}\n  ${e.animation?'<div class="swal2-success-circular-line-right"></div>':""}\n`)(t),n=n.replace(/ style=".*?"/g,"");else if("error"===t.icon)o='\n  <span class="swal2-x-mark">\n    <span class="swal2-x-mark-line-left"></span>\n    <span class="swal2-x-mark-line-right"></span>\n  </span>\n';else if(t.icon){o=xe({question:"?",warning:"!",info:"i"}[t.icon])}n.trim()!==o.trim()&&q(e,o)},Pe=(e,t)=>{if(t.iconColor){e.style.color=t.iconColor,e.style.borderColor=t.iconColor;for(const n of[".swal2-success-line-tip",".swal2-success-line-long",".swal2-x-mark-line-left",".swal2-x-mark-line-right"])G(e,n,"background-color",t.iconColor);G(e,".swal2-success-ring","border-color",t.iconColor)}},xe=e=>`<div class="${r["icon-content"]}">${e}</div>`;let Te=!1,Se=0,Oe=0,Me=0,je=0;const He=e=>{const t=C();if(!t)return;const n=A();if(e.target===t||n&&n.contains(e.target)){Te=!0;const n=Ve(e);Se=n.clientX,Oe=n.clientY,Me=parseInt(t.style.insetInlineStart)||0,je=parseInt(t.style.insetBlockStart)||0,z(t,"swal2-dragging")}},Ie=e=>{const t=C();if(t&&Te){let{clientX:n,clientY:i}=Ve(e);const s=n-Se;t.style.insetInlineStart=`${Me+(o.isRTL?-s:s)}px`,t.style.insetBlockStart=`${je+(i-Oe)}px`}},De=()=>{const e=C();Te=!1,W(e,"swal2-dragging")},Ve=e=>{let t=0,n=0;return e.type.startsWith("mouse")?(t=e.clientX,n=e.clientY):e.type.startsWith("touch")&&(t=e.touches[0].clientX,n=e.touches[0].clientY),{clientX:t,clientY:n}},qe=(e,t)=>{const n=y(),o=C();if(n&&o){if(t.toast){Y(n,"width",t.width),o.style.width="100%";const e=S();e&&o.insertBefore(e,A())}else Y(o,"width",t.width);Y(o,"padding",t.padding),t.color&&(o.style.color=t.color),t.background&&(o.style.background=t.background),Z(L()),Ne(o,t),t.draggable&&!t.toast?(z(o,r.draggable),(e=>{e.addEventListener("mousedown",He),document.body.addEventListener("mousemove",Ie),e.addEventListener("mouseup",De),e.addEventListener("touchstart",He),document.body.addEventListener("touchmove",Ie),e.addEventListener("touchend",De)})(o)):(W(o,r.draggable),(e=>{e.removeEventListener("mousedown",He),document.body.removeEventListener("mousemove",Ie),e.removeEventListener("mouseup",De),e.removeEventListener("touchstart",He),document.body.removeEventListener("touchmove",Ie),e.removeEventListener("touchend",De)})(o))}},Ne=(e,t)=>{const n=t.showClass||{};e.className=`${r.popup} ${ee(e)?n.popup:""}`,t.toast?(z([document.documentElement,document.body],r["toast-shown"]),z(e,r.toast)):z(e,r.modal),_(e,t,"popup"),"string"==typeof t.customClass&&z(e,t.customClass),t.icon&&z(e,r[`icon-${t.icon}`])},_e=e=>{const t=document.createElement("li");return z(t,r["progress-step"]),q(t,e),t},Re=e=>{const t=document.createElement("li");return z(t,r["progress-step-line"]),e.progressStepsDistance&&Y(t,"width",e.progressStepsDistance),t},Fe=(e,t)=>{var n;qe(0,t),me(0,t),((e,t)=>{const n=$();if(!n)return;const{progressSteps:o,currentProgressStep:i}=t;o&&0!==o.length&&void 0!==i?(X(n),n.textContent="",i>=o.length&&u("Invalid currentProgressStep parameter, it should be less than progressSteps.length (currentProgressStep like JS arrays starts from 0)"),o.forEach((e,s)=>{const a=_e(e);if(n.appendChild(a),s===i&&z(a,r["active-progress-step"]),s!==o.length-1){const e=Re(t);n.appendChild(e)}})):Z(n)})(0,t),((e,t)=>{const n=he.innerParams.get(e),o=A();if(!o)return;if(n&&t.icon===n.icon)return Le(o,t),void Be(o,t);if(!t.icon&&!t.iconHtml)return void Z(o);if(t.icon&&-1===Object.keys(a).indexOf(t.icon))return d(`Unknown icon! Expected "success", "error", "warning", "info" or "question", got "${t.icon}"`),void Z(o);X(o),Le(o,t),Be(o,t),z(o,t.showClass&&t.showClass.icon),window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change",$e)})(e,t),((e,t)=>{const n=B();n&&(t.imageUrl?(X(n,""),n.setAttribute("src",t.imageUrl),n.setAttribute("alt",t.imageAlt||""),Y(n,"width",t.imageWidth),Y(n,"height",t.imageHeight),n.className=r.image,_(n,t,"image")):Z(n))})(0,t),((e,t)=>{const n=E();n&&(J(n),Q(n,Boolean(t.title||t.titleText),"block"),t.title&&ae(t.title,n),t.titleText&&(n.innerText=t.titleText),_(n,t,"title"))})(0,t),((e,t)=>{const n=H();n&&(q(n,t.closeButtonHtml||""),_(n,t,"closeButton"),Q(n,t.showCloseButton),n.setAttribute("aria-label",t.closeButtonAriaLabel||""))})(0,t),ke(e,t),ue(0,t),((e,t)=>{const n=M();n&&(J(n),Q(n,Boolean(t.footer),"block"),t.footer&&ae(t.footer,n),_(n,t,"footer"))})(0,t);const i=C();"function"==typeof t.didRender&&i&&t.didRender(i),null===(n=o.eventEmitter)||void 0===n||n.emit("didRender",i)},Ue=()=>{var e;return null===(e=P())||void 0===e?void 0:e.click()},ze=Object.freeze({cancel:"cancel",backdrop:"backdrop",close:"close",esc:"esc",timer:"timer"}),We=e=>{if(e.keydownTarget&&e.keydownHandlerAdded&&e.keydownHandler){const t=e.keydownHandler;e.keydownTarget.removeEventListener("keydown",t,{capture:e.keydownListenerCapture}),e.keydownHandlerAdded=!1}},Ke=(e,t)=>{var n;const o=I();if(o.length)return-2===(e+=t)&&(e=o.length-1),e===o.length?e=0:-1===e&&(e=o.length-1),void o[e].focus();null===(n=C())||void 0===n||n.focus()},Ye=["ArrowRight","ArrowDown"],Xe=["ArrowLeft","ArrowUp"],Ze=(e,t,n)=>{e&&(t.isComposing||229===t.keyCode||(e.stopKeydownPropagation&&t.stopPropagation(),"Enter"===t.key?Je(t,e):"Tab"===t.key?Ge(t):[...Ye,...Xe].includes(t.key)?Qe(t.key):"Escape"===t.key&&et(t,e,n)))},Je=(e,t)=>{if(!h(t.allowEnterKey))return;const n=C();if(!n||!t.input)return;const o=R(n,t.input);if(e.target&&o&&e.target instanceof HTMLElement&&e.target.outerHTML===o.outerHTML){if(["textarea","file"].includes(t.input))return;Ue(),e.preventDefault()}},Ge=e=>{const t=e.target,n=I();let o=-1;for(let e=0;e<n.length;e++)if(t===n[e]){o=e;break}e.shiftKey?Ke(o,-1):Ke(o,1),e.stopPropagation(),e.preventDefault()},Qe=e=>{const t=O(),n=P(),o=T(),i=x();if(!(t&&n&&o&&i))return;const s=[n,o,i];if(document.activeElement instanceof HTMLElement&&!s.includes(document.activeElement))return;const r=Ye.includes(e)?"nextElementSibling":"previousElementSibling";let a=document.activeElement;if(a){for(let e=0;e<t.children.length;e++){if(a=a[r],!a)return;if(a instanceof HTMLButtonElement&&ee(a))break}a instanceof HTMLButtonElement&&a.focus()}},et=(e,t,n)=>{e.preventDefault(),h(t.allowEscapeKey)&&n(ze.esc)};var tt={swalPromiseResolve:new WeakMap,swalPromiseReject:new WeakMap};const nt=()=>{Array.from(document.body.children).forEach(e=>{e.hasAttribute("data-previous-aria-hidden")?(e.setAttribute("aria-hidden",e.getAttribute("data-previous-aria-hidden")||""),e.removeAttribute("data-previous-aria-hidden")):e.removeAttribute("aria-hidden")})},ot="undefined"!=typeof window&&Boolean(window.GestureEvent),it=()=>{const e=y();if(!e)return;let t;e.ontouchstart=e=>{t=st(e)},e.ontouchmove=e=>{t&&(e.preventDefault(),e.stopPropagation())}},st=e=>{const t=e.target,n=y(),o=k();return!(!n||!o)&&(!rt(e)&&!at(e)&&(t===n||!(te(n)||!(t instanceof HTMLElement)||((e,t)=>{let n=e;for(;n&&n!==t;){if(te(n))return!0;n=n.parentElement}return!1})(t,o)||"INPUT"===t.tagName||"TEXTAREA"===t.tagName||te(o)&&o.contains(t))))},rt=e=>Boolean(e.touches&&e.touches.length&&"stylus"===e.touches[0].touchType),at=e=>e.touches&&e.touches.length>1;let lt=null;const ct=e=>{null===lt&&(document.body.scrollHeight>window.innerHeight||"scroll"===e)&&(lt=parseInt(window.getComputedStyle(document.body).getPropertyValue("padding-right")),document.body.style.paddingRight=`${lt+(()=>{const e=document.createElement("div");e.className=r["scrollbar-measure"],document.body.appendChild(e);const t=e.getBoundingClientRect().width-e.clientWidth;return document.body.removeChild(e),t})()}px`)};function ut(e,t,n,s){V()?yt(e,s):(i(n).then(()=>yt(e,s)),We(o)),ot?(t.setAttribute("style","display:none !important"),t.removeAttribute("class"),t.innerHTML=""):t.remove(),D()&&(null!==lt&&(document.body.style.paddingRight=`${lt}px`,lt=null),(()=>{if(N(document.body,r.iosfix)){const e=parseInt(document.body.style.top,10);W(document.body,r.iosfix),document.body.style.top="",document.body.scrollTop=-1*e}})(),nt()),W([document.documentElement,document.body],[r.shown,r["height-auto"],r["no-backdrop"],r["toast-shown"]])}function dt(e){e=gt(e);const t=tt.swalPromiseResolve.get(this),n=pt(this);this.isAwaitingPromise?e.isDismissed||(ht(this),t(e)):n&&t(e)}const pt=e=>{const t=C();if(!t)return!1;const n=he.innerParams.get(e);if(!n||N(t,n.hideClass.popup))return!1;W(t,n.showClass.popup),z(t,n.hideClass.popup);const o=y();return W(o,n.showClass.backdrop),z(o,n.hideClass.backdrop),ft(e,t,n),!0};function mt(e){const t=tt.swalPromiseReject.get(this);ht(this),t&&t(e)}const ht=e=>{e.isAwaitingPromise&&(delete e.isAwaitingPromise,he.innerParams.get(e)||e._destroy())},gt=e=>void 0===e?{isConfirmed:!1,isDenied:!1,isDismissed:!0}:Object.assign({isConfirmed:!1,isDenied:!1,isDismissed:!1},e),ft=(e,t,n)=>{var i;const s=y(),r=ne(t);"function"==typeof n.willClose&&n.willClose(t),null===(i=o.eventEmitter)||void 0===i||i.emit("willClose",t),r&&s?bt(e,t,s,Boolean(n.returnFocus),n.didClose):s&&ut(e,s,Boolean(n.returnFocus),n.didClose)},bt=(e,t,n,i,s)=>{o.swalCloseEventFinishedCallback=ut.bind(null,e,n,i,s);const r=function(e){var n;e.target===t&&(null===(n=o.swalCloseEventFinishedCallback)||void 0===n||n.call(o),delete o.swalCloseEventFinishedCallback,t.removeEventListener("animationend",r),t.removeEventListener("transitionend",r))};t.addEventListener("animationend",r),t.addEventListener("transitionend",r)},yt=(e,t)=>{setTimeout(()=>{var n;"function"==typeof t&&t.bind(e.params)(),null===(n=o.eventEmitter)||void 0===n||n.emit("didClose"),e._destroy&&e._destroy()})},vt=e=>{let t=C();if(t||new Qn,t=C(),!t)return;const n=S();V()?Z(A()):wt(t,e),X(n),t.setAttribute("data-loading","true"),t.setAttribute("aria-busy","true"),t.focus()},wt=(e,t)=>{const n=O(),o=S();n&&o&&(!t&&ee(P())&&(t=P()),X(n),t&&(Z(t),o.setAttribute("data-button-to-replace",t.className),n.insertBefore(o,t)),z([e,n],r.loading))},Ct=e=>e.checked?1:0,At=e=>e.checked?e.value:null,Et=e=>e.files&&e.files.length?null!==e.getAttribute("multiple")?e.files:e.files[0]:null,kt=(e,t)=>{const n=C();if(!n)return;const o=e=>{"select"===t.input?function(e,t,n){const o=K(e,r.select);if(!o)return;const i=(e,t,o)=>{const i=document.createElement("option");i.value=o,q(i,t),i.selected=Lt(o,n.inputValue),e.appendChild(i)};t.forEach(e=>{const t=e[0],n=e[1];if(Array.isArray(n)){const e=document.createElement("optgroup");e.label=t,e.disabled=!1,o.appendChild(e),n.forEach(t=>i(e,t[1],t[0]))}else i(o,n,t)}),o.focus()}(n,$t(e),t):"radio"===t.input&&function(e,t,n){const o=K(e,r.radio);if(!o)return;t.forEach(e=>{const t=e[0],i=e[1],s=document.createElement("input"),a=document.createElement("label");s.type="radio",s.name=r.radio,s.value=t,Lt(t,n.inputValue)&&(s.checked=!0);const l=document.createElement("span");q(l,i),l.className=r.label,a.appendChild(s),a.appendChild(l),o.appendChild(a)});const i=o.querySelectorAll("input");i.length&&i[0].focus()}(n,$t(e),t)};g(t.inputOptions)||b(t.inputOptions)?(vt(P()),f(t.inputOptions).then(t=>{e.hideLoading(),o(t)})):"object"==typeof t.inputOptions?o(t.inputOptions):d("Unexpected type of inputOptions! Expected object, Map or Promise, got "+typeof t.inputOptions)},Bt=(e,t)=>{const n=e.getInput();n&&(Z(n),f(t.inputValue).then(o=>{n.value="number"===t.input?`${parseFloat(o)||0}`:`${o}`,X(n),n.focus(),e.hideLoading()}).catch(t=>{d(`Error in inputValue promise: ${t}`),n.value="",X(n),n.focus(),e.hideLoading()}))};const $t=e=>{const t=[];return e instanceof Map?e.forEach((e,n)=>{let o=e;"object"==typeof o&&(o=$t(o)),t.push([n,o])}):Object.keys(e).forEach(n=>{let o=e[n];"object"==typeof o&&(o=$t(o)),t.push([n,o])}),t},Lt=(e,t)=>Boolean(t)&&null!=t&&t.toString()===e.toString(),Pt=(e,t)=>{const n=he.innerParams.get(e);if(!n.input)return void d(`The "input" parameter is needed to be set when using returnInputValueOn${c(t)}`);const o=e.getInput(),i=((e,t)=>{const n=e.getInput();if(!n)return null;switch(t.input){case"checkbox":return Ct(n);case"radio":return At(n);case"file":return Et(n);default:return t.inputAutoTrim?n.value.trim():n.value}})(e,n);n.inputValidator?xt(e,i,t):o&&!o.checkValidity()?(e.enableButtons(),e.showValidationMessage(n.validationMessage||o.validationMessage)):"deny"===t?Tt(e,i):Mt(e,i)},xt=(e,t,n)=>{const o=he.innerParams.get(e);e.disableInput();Promise.resolve().then(()=>f(o.inputValidator(t,o.validationMessage))).then(o=>{e.enableButtons(),e.enableInput(),o?e.showValidationMessage(o):"deny"===n?Tt(e,t):Mt(e,t)})},Tt=(e,t)=>{const n=he.innerParams.get(e);if(n.showLoaderOnDeny&&vt(T()),n.preDeny){e.isAwaitingPromise=!0;Promise.resolve().then(()=>f(n.preDeny(t,n.validationMessage))).then(n=>{!1===n?(e.hideLoading(),ht(e)):e.close({isDenied:!0,value:void 0===n?t:n})}).catch(t=>Ot(e,t))}else e.close({isDenied:!0,value:t})},St=(e,t)=>{e.close({isConfirmed:!0,value:t})},Ot=(e,t)=>{e.rejectPromise(t)},Mt=(e,t)=>{const n=he.innerParams.get(e);if(n.showLoaderOnConfirm&&vt(),n.preConfirm){e.resetValidationMessage(),e.isAwaitingPromise=!0;Promise.resolve().then(()=>f(n.preConfirm(t,n.validationMessage))).then(n=>{ee(L())||!1===n?(e.hideLoading(),ht(e)):St(e,void 0===n?t:n)}).catch(t=>Ot(e,t))}else St(e,t)};function jt(){const e=he.innerParams.get(this);if(!e)return;const t=he.domCache.get(this);Z(t.loader),V()?e.icon&&X(A()):Ht(t),W([t.popup,t.actions],r.loading),t.popup.removeAttribute("aria-busy"),t.popup.removeAttribute("data-loading"),t.confirmButton.disabled=!1,t.denyButton.disabled=!1,t.cancelButton.disabled=!1}const Ht=e=>{const t=e.loader.getAttribute("data-button-to-replace"),n=t?e.popup.getElementsByClassName(t):[];n.length?X(n[0],"inline-block"):ee(P())||ee(T())||ee(x())||Z(e.actions)};function It(){const e=he.innerParams.get(this),t=he.domCache.get(this);return t?R(t.popup,e.input):null}function Dt(e,t,n){const o=he.domCache.get(e);t.forEach(e=>{o[e].disabled=n})}function Vt(e,t){const n=C();if(n&&e)if("radio"===e.type){const e=n.querySelectorAll(`[name="${r.radio}"]`);for(let n=0;n<e.length;n++)e[n].disabled=t}else e.disabled=t}function qt(){Dt(this,["confirmButton","denyButton","cancelButton"],!1)}function Nt(){Dt(this,["confirmButton","denyButton","cancelButton"],!0)}function _t(){Vt(this.getInput(),!1)}function Rt(){Vt(this.getInput(),!0)}function Ft(e){const t=he.domCache.get(this),n=he.innerParams.get(this);q(t.validationMessage,e),t.validationMessage.className=r["validation-message"],n.customClass&&n.customClass.validationMessage&&z(t.validationMessage,n.customClass.validationMessage),X(t.validationMessage);const o=this.getInput();o&&(o.setAttribute("aria-invalid","true"),o.setAttribute("aria-describedby",r["validation-message"]),F(o),z(o,r.inputerror))}function Ut(){const e=he.domCache.get(this);e.validationMessage&&Z(e.validationMessage);const t=this.getInput();t&&(t.removeAttribute("aria-invalid"),t.removeAttribute("aria-describedby"),W(t,r.inputerror))}const zt={title:"",titleText:"",text:"",html:"",footer:"",icon:void 0,iconColor:void 0,iconHtml:void 0,template:void 0,toast:!1,draggable:!1,animation:!0,theme:"light",showClass:{popup:"swal2-show",backdrop:"swal2-backdrop-show",icon:"swal2-icon-show"},hideClass:{popup:"swal2-hide",backdrop:"swal2-backdrop-hide",icon:"swal2-icon-hide"},customClass:{},target:"body",color:void 0,backdrop:!0,heightAuto:!0,allowOutsideClick:!0,allowEscapeKey:!0,allowEnterKey:!0,stopKeydownPropagation:!0,keydownListenerCapture:!1,showConfirmButton:!0,showDenyButton:!1,showCancelButton:!1,preConfirm:void 0,preDeny:void 0,confirmButtonText:"OK",confirmButtonAriaLabel:"",confirmButtonColor:void 0,denyButtonText:"No",denyButtonAriaLabel:"",denyButtonColor:void 0,cancelButtonText:"Cancel",cancelButtonAriaLabel:"",cancelButtonColor:void 0,buttonsStyling:!0,reverseButtons:!1,focusConfirm:!0,focusDeny:!1,focusCancel:!1,returnFocus:!0,showCloseButton:!1,closeButtonHtml:"&times;",closeButtonAriaLabel:"Close this dialog",loaderHtml:"",showLoaderOnConfirm:!1,showLoaderOnDeny:!1,imageUrl:void 0,imageWidth:void 0,imageHeight:void 0,imageAlt:"",timer:void 0,timerProgressBar:!1,width:void 0,padding:void 0,background:void 0,input:void 0,inputPlaceholder:"",inputLabel:"",inputValue:"",inputOptions:{},inputAutoFocus:!0,inputAutoTrim:!0,inputAttributes:{},inputValidator:void 0,returnInputValueOnDeny:!1,validationMessage:void 0,grow:!1,position:"center",progressSteps:[],currentProgressStep:void 0,progressStepsDistance:void 0,willOpen:void 0,didOpen:void 0,didRender:void 0,willClose:void 0,didClose:void 0,didDestroy:void 0,scrollbarPadding:!0,topLayer:!1},Wt=["allowEscapeKey","allowOutsideClick","background","buttonsStyling","cancelButtonAriaLabel","cancelButtonColor","cancelButtonText","closeButtonAriaLabel","closeButtonHtml","color","confirmButtonAriaLabel","confirmButtonColor","confirmButtonText","currentProgressStep","customClass","denyButtonAriaLabel","denyButtonColor","denyButtonText","didClose","didDestroy","draggable","footer","hideClass","html","icon","iconColor","iconHtml","imageAlt","imageHeight","imageUrl","imageWidth","preConfirm","preDeny","progressSteps","returnFocus","reverseButtons","showCancelButton","showCloseButton","showConfirmButton","showDenyButton","text","title","titleText","theme","willClose"],Kt={allowEnterKey:void 0},Yt=["allowOutsideClick","allowEnterKey","backdrop","draggable","focusConfirm","focusDeny","focusCancel","returnFocus","heightAuto","keydownListenerCapture"],Xt=e=>Object.prototype.hasOwnProperty.call(zt,e),Zt=e=>-1!==Wt.indexOf(e),Jt=e=>Kt[e],Gt=e=>{Xt(e)||u(`Unknown parameter "${e}"`)},Qt=e=>{Yt.includes(e)&&u(`The parameter "${e}" is incompatible with toasts`)},en=e=>{const t=Jt(e);t&&m(e,t)},tn=e=>{!1===e.backdrop&&e.allowOutsideClick&&u('"allowOutsideClick" parameter requires `backdrop` parameter to be set to `true`'),e.theme&&!["light","dark","auto","minimal","borderless","bootstrap-4","bootstrap-4-light","bootstrap-4-dark","bootstrap-5","bootstrap-5-light","bootstrap-5-dark","material-ui","material-ui-light","material-ui-dark","embed-iframe","bulma","bulma-light","bulma-dark"].includes(e.theme)&&u(`Invalid theme "${e.theme}"`);for(const t in e)Gt(t),e.toast&&Qt(t),en(t)};function nn(e){const t=y(),n=C(),o=he.innerParams.get(this);if(!n||N(n,o.hideClass.popup))return void u("You're trying to update the closed or closing popup, that won't work. Use the update() method in preConfirm parameter or show a new popup.");const i=on(e),s=Object.assign({},o,i);tn(s),t&&(t.dataset.swal2Theme=s.theme),Fe(this,s),he.innerParams.set(this,s),Object.defineProperties(this,{params:{value:Object.assign({},this.params,e),writable:!1,enumerable:!0}})}const on=e=>{const t={};return Object.keys(e).forEach(n=>{if(Zt(n)){const o=e;t[n]=o[n]}else u(`Invalid parameter to update: ${n}`)}),t};function sn(){var e;const t=he.domCache.get(this),n=he.innerParams.get(this);n?(t.popup&&o.swalCloseEventFinishedCallback&&(o.swalCloseEventFinishedCallback(),delete o.swalCloseEventFinishedCallback),"function"==typeof n.didDestroy&&n.didDestroy(),null===(e=o.eventEmitter)||void 0===e||e.emit("didDestroy"),rn(this)):an(this)}const rn=e=>{an(e),delete e.params,delete o.keydownHandler,delete o.keydownTarget,delete o.currentInstance},an=e=>{e.isAwaitingPromise?(ln(he,e),e.isAwaitingPromise=!0):(ln(tt,e),ln(he,e),delete e.isAwaitingPromise,delete e.disableButtons,delete e.enableButtons,delete e.getInput,delete e.disableInput,delete e.enableInput,delete e.hideLoading,delete e.disableLoading,delete e.showValidationMessage,delete e.resetValidationMessage,delete e.close,delete e.closePopup,delete e.closeModal,delete e.closeToast,delete e.rejectPromise,delete e.update,delete e._destroy)},ln=(e,t)=>{for(const n in e)e[n].delete(t)};var cn=Object.freeze({__proto__:null,_destroy:sn,close:dt,closeModal:dt,closePopup:dt,closeToast:dt,disableButtons:Nt,disableInput:Rt,disableLoading:jt,enableButtons:qt,enableInput:_t,getInput:It,handleAwaitingPromise:ht,hideLoading:jt,rejectPromise:mt,resetValidationMessage:Ut,showValidationMessage:Ft,update:nn});const un=(e,t,n)=>{t.popup.onclick=()=>{e&&(dn(e)||e.timer||e.input)||n(ze.close)}},dn=e=>Boolean(e.showConfirmButton||e.showDenyButton||e.showCancelButton||e.showCloseButton);let pn=!1;const mn=e=>{e.popup.onmousedown=()=>{e.container.onmouseup=function(t){e.container.onmouseup=()=>{},t.target===e.container&&(pn=!0)}}},hn=e=>{e.container.onmousedown=t=>{t.target===e.container&&t.preventDefault(),e.popup.onmouseup=function(t){e.popup.onmouseup=()=>{},(t.target===e.popup||t.target instanceof HTMLElement&&e.popup.contains(t.target))&&(pn=!0)}}},gn=(e,t,n)=>{t.container.onclick=o=>{pn?pn=!1:o.target===t.container&&h(e.allowOutsideClick)&&n(ze.backdrop)}},fn=e=>e instanceof Element||(e=>"object"==typeof e&&e.jquery)(e);const bn=()=>{if(o.timeout)return(()=>{const e=j();if(!e)return;const t=parseInt(window.getComputedStyle(e).width);e.style.removeProperty("transition"),e.style.width="100%";const n=t/parseInt(window.getComputedStyle(e).width)*100;e.style.width=`${n}%`})(),o.timeout.stop()},yn=()=>{if(o.timeout){const e=o.timeout.start();return oe(e),e}};let vn=!1;const wn={};const Cn=e=>{for(let t=e.target;t&&t!==document;t=t.parentNode)for(const e in wn){const n=t.getAttribute&&t.getAttribute(e);if(n)return void wn[e].fire({template:n})}};o.eventEmitter=new class{constructor(){this.events={}}_getHandlersByEventName(e){return void 0===this.events[e]&&(this.events[e]=[]),this.events[e]}on(e,t){const n=this._getHandlersByEventName(e);n.includes(t)||n.push(t)}once(e,t){const n=(...o)=>{this.removeListener(e,n),t.apply(this,o)};this.on(e,n)}emit(e,...t){this._getHandlersByEventName(e).forEach(e=>{try{e.apply(this,t)}catch(e){console.error(e)}})}removeListener(e,t){const n=this._getHandlersByEventName(e),o=n.indexOf(t);o>-1&&n.splice(o,1)}removeAllListeners(e){void 0!==this.events[e]&&(this.events[e].length=0)}reset(){this.events={}}};var An=Object.freeze({__proto__:null,argsToParams:e=>{const t={};return"object"!=typeof e[0]||fn(e[0])?["title","html","icon"].forEach((n,o)=>{const i=e[o];"string"==typeof i||fn(i)?t[n]=i:void 0!==i&&d(`Unexpected type of ${n}! Expected "string" or "Element", got ${typeof i}`)}):Object.assign(t,e[0]),t},bindClickHandler:function(e="data-swal-template"){wn[e]=this,vn||(document.body.addEventListener("click",Cn),vn=!0)},clickCancel:()=>{var e;return null===(e=x())||void 0===e?void 0:e.click()},clickConfirm:Ue,clickDeny:()=>{var e;return null===(e=T())||void 0===e?void 0:e.click()},enableLoading:vt,fire:function(...e){return new this(...e)},getActions:O,getCancelButton:x,getCloseButton:H,getConfirmButton:P,getContainer:y,getDenyButton:T,getFocusableElements:I,getFooter:M,getHtmlContainer:k,getIcon:A,getIconContent:()=>w(r["icon-content"]),getImage:B,getInputLabel:()=>w(r["input-label"]),getLoader:S,getPopup:C,getProgressSteps:$,getTimerLeft:()=>o.timeout&&o.timeout.getTimerLeft(),getTimerProgressBar:j,getTitle:E,getValidationMessage:L,increaseTimer:e=>{if(o.timeout){const t=o.timeout.increase(e);return oe(t,!0),t}},isDeprecatedParameter:Jt,isLoading:()=>{const e=C();return!!e&&e.hasAttribute("data-loading")},isTimerRunning:()=>Boolean(o.timeout&&o.timeout.isRunning()),isUpdatableParameter:Zt,isValidParameter:Xt,isVisible:()=>ee(C()),mixin:function(e){return class extends(this){_main(t,n){return super._main(t,Object.assign({},e,n))}}},off:(e,t)=>{o.eventEmitter&&(e?t?o.eventEmitter.removeListener(e,t):o.eventEmitter.removeAllListeners(e):o.eventEmitter.reset())},on:(e,t)=>{o.eventEmitter&&o.eventEmitter.on(e,t)},once:(e,t)=>{o.eventEmitter&&o.eventEmitter.once(e,t)},resumeTimer:yn,showLoading:vt,stopTimer:bn,toggleTimer:()=>{const e=o.timeout;return e&&(e.running?bn():yn())}});class En{constructor(e,t){this.callback=e,this.remaining=t,this.running=!1,this.start()}start(){return this.running||(this.running=!0,this.started=new Date,this.id=setTimeout(this.callback,this.remaining)),this.remaining}stop(){return this.started&&this.running&&(this.running=!1,clearTimeout(this.id),this.remaining-=(new Date).getTime()-this.started.getTime()),this.remaining}increase(e){const t=this.running;return t&&this.stop(),this.remaining+=e,t&&this.start(),this.remaining}getTimerLeft(){return this.running&&(this.stop(),this.start()),this.remaining}isRunning(){return this.running}}const kn=["swal-title","swal-html","swal-footer"],Bn=e=>{const t={};return Array.from(e.querySelectorAll("swal-param")).forEach(e=>{Mn(e,["name","value"]);const n=e.getAttribute("name"),o=e.getAttribute("value");n&&o&&(t[n]=n in zt&&"boolean"==typeof zt[n]?"false"!==o:n in zt&&"object"==typeof zt[n]?JSON.parse(o):o)}),t},$n=e=>{const t={};return Array.from(e.querySelectorAll("swal-function-param")).forEach(e=>{const n=e.getAttribute("name"),o=e.getAttribute("value");n&&o&&(t[n]=new Function(`return ${o}`)())}),t},Ln=e=>{const t={};return Array.from(e.querySelectorAll("swal-button")).forEach(e=>{Mn(e,["type","color","aria-label"]);const n=e.getAttribute("type");if(n&&["confirm","cancel","deny"].includes(n)){if(t[`${n}ButtonText`]=e.innerHTML,t[`show${c(n)}Button`]=!0,e.hasAttribute("color")){const o=e.getAttribute("color");null!==o&&(t[`${n}ButtonColor`]=o)}if(e.hasAttribute("aria-label")){const o=e.getAttribute("aria-label");null!==o&&(t[`${n}ButtonAriaLabel`]=o)}}}),t},Pn=e=>{const t={},n=e.querySelector("swal-image");return n&&(Mn(n,["src","width","height","alt"]),n.hasAttribute("src")&&(t.imageUrl=n.getAttribute("src")||void 0),n.hasAttribute("width")&&(t.imageWidth=n.getAttribute("width")||void 0),n.hasAttribute("height")&&(t.imageHeight=n.getAttribute("height")||void 0),n.hasAttribute("alt")&&(t.imageAlt=n.getAttribute("alt")||void 0)),t},xn=e=>{const t={},n=e.querySelector("swal-icon");return n&&(Mn(n,["type","color"]),n.hasAttribute("type")&&(t.icon=n.getAttribute("type")),n.hasAttribute("color")&&(t.iconColor=n.getAttribute("color")),t.iconHtml=n.innerHTML),t},Tn=e=>{const t={},n=e.querySelector("swal-input");n&&(Mn(n,["type","label","placeholder","value"]),t.input=n.getAttribute("type")||"text",n.hasAttribute("label")&&(t.inputLabel=n.getAttribute("label")),n.hasAttribute("placeholder")&&(t.inputPlaceholder=n.getAttribute("placeholder")),n.hasAttribute("value")&&(t.inputValue=n.getAttribute("value")));const o=Array.from(e.querySelectorAll("swal-input-option"));return o.length&&(t.inputOptions={},o.forEach(e=>{Mn(e,["value"]);const n=e.getAttribute("value");if(!n)return;const o=e.innerHTML;t.inputOptions[n]=o})),t},Sn=(e,t)=>{const n={};for(const o in t){const i=t[o],s=e.querySelector(i);s&&(Mn(s,[]),n[i.replace(/^swal-/,"")]=s.innerHTML.trim())}return n},On=e=>{const t=kn.concat(["swal-param","swal-function-param","swal-button","swal-image","swal-icon","swal-input","swal-input-option"]);Array.from(e.children).forEach(e=>{const n=e.tagName.toLowerCase();t.includes(n)||u(`Unrecognized element <${n}>`)})},Mn=(e,t)=>{Array.from(e.attributes).forEach(n=>{-1===t.indexOf(n.name)&&u([`Unrecognized attribute "${n.name}" on <${e.tagName.toLowerCase()}>.`,""+(t.length?`Allowed attributes are: ${t.join(", ")}`:"To set the value, use HTML within the element.")])})},jn=e=>{var t,n;const i=y(),s=C();if(!i||!s)return;"function"==typeof e.willOpen&&e.willOpen(s),null===(t=o.eventEmitter)||void 0===t||t.emit("willOpen",s);const r=window.getComputedStyle(document.body).overflowY;if(Vn(i,s,e),setTimeout(()=>{In(i,s)},10),D()&&(Dn(i,void 0!==e.scrollbarPadding&&e.scrollbarPadding,r),(()=>{const e=y();Array.from(document.body.children).forEach(t=>{t.contains(e)||(t.hasAttribute("aria-hidden")&&t.setAttribute("data-previous-aria-hidden",t.getAttribute("aria-hidden")||""),t.setAttribute("aria-hidden","true"))})})()),V()||o.previousActiveElement||(o.previousActiveElement=document.activeElement),"function"==typeof e.didOpen){const t=e.didOpen;setTimeout(()=>t(s))}null===(n=o.eventEmitter)||void 0===n||n.emit("didOpen",s)},Hn=e=>{const t=C();if(!t||e.target!==t)return;const n=y();n&&(t.removeEventListener("animationend",Hn),t.removeEventListener("transitionend",Hn),n.style.overflowY="auto",W(n,r["no-transition"]))},In=(e,t)=>{ne(t)?(e.style.overflowY="hidden",t.addEventListener("animationend",Hn),t.addEventListener("transitionend",Hn)):e.style.overflowY="auto"},Dn=(e,t,n)=>{(()=>{if(ot&&!N(document.body,r.iosfix)){const e=document.body.scrollTop;document.body.style.top=-1*e+"px",z(document.body,r.iosfix),it()}})(),t&&"hidden"!==n&&ct(n),setTimeout(()=>{e.scrollTop=0})},Vn=(e,t,n)=>{var o;null!==(o=n.showClass)&&void 0!==o&&o.backdrop&&z(e,n.showClass.backdrop),n.animation?(t.style.setProperty("opacity","0","important"),X(t,"grid"),setTimeout(()=>{var e;null!==(e=n.showClass)&&void 0!==e&&e.popup&&z(t,n.showClass.popup),t.style.removeProperty("opacity")},10)):X(t,"grid"),z([document.documentElement,document.body],r.shown),n.heightAuto&&n.backdrop&&!n.toast&&z([document.documentElement,document.body],r["height-auto"])};var qn=(e,t)=>/^[a-zA-Z0-9.+_'-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9-]+$/.test(e)?Promise.resolve():Promise.resolve(t||"Invalid email address"),Nn=(e,t)=>/^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-z]{2,63}\b([-a-zA-Z0-9@:%_+.~#?&/=]*)$/.test(e)?Promise.resolve():Promise.resolve(t||"Invalid URL");function _n(e){!function(e){e.inputValidator||("email"===e.input&&(e.inputValidator=qn),"url"===e.input&&(e.inputValidator=Nn))}(e),e.showLoaderOnConfirm&&!e.preConfirm&&u("showLoaderOnConfirm is set to true, but preConfirm is not defined.\nshowLoaderOnConfirm should be used together with preConfirm, see usage example:\nhttps://sweetalert2.github.io/#ajax-request"),function(e){(!e.target||"string"==typeof e.target&&!document.querySelector(e.target)||"string"!=typeof e.target&&!e.target.appendChild)&&(u('Target parameter is not valid, defaulting to "body"'),e.target="body")}(e),"string"==typeof e.title&&(e.title=e.title.split("\n").join("<br />")),re(e)}let Rn;var Fn=new WeakMap;class Un{constructor(...t){if(n(this,Fn,Promise.resolve({isConfirmed:!1,isDenied:!1,isDismissed:!0})),"undefined"==typeof window)return;Rn=this;const o=Object.freeze(this.constructor.argsToParams(t));var i,s,r;this.params=o,this.isAwaitingPromise=!1,i=Fn,s=this,r=this._main(Rn.params),i.set(e(i,s),r)}_main(e,t={}){if(tn(Object.assign({},t,e)),o.currentInstance){const e=tt.swalPromiseResolve.get(o.currentInstance),{isAwaitingPromise:t}=o.currentInstance;o.currentInstance._destroy(),t||e({isDismissed:!0}),D()&&nt()}o.currentInstance=Rn;const n=Wn(e,t);_n(n),Object.freeze(n),o.timeout&&(o.timeout.stop(),delete o.timeout),clearTimeout(o.restoreFocusTimeout);const i=Kn(Rn);return Fe(Rn,n),he.innerParams.set(Rn,n),zn(Rn,i,n)}then(e){return t(Fn,this).then(e)}finally(e){return t(Fn,this).finally(e)}}const zn=(e,t,n)=>new Promise((i,s)=>{const r=t=>{e.close({isDismissed:!0,dismiss:t,isConfirmed:!1,isDenied:!1})};tt.swalPromiseResolve.set(e,i),tt.swalPromiseReject.set(e,s),t.confirmButton.onclick=()=>{(e=>{const t=he.innerParams.get(e);e.disableButtons(),t.input?Pt(e,"confirm"):Mt(e,!0)})(e)},t.denyButton.onclick=()=>{(e=>{const t=he.innerParams.get(e);e.disableButtons(),t.returnInputValueOnDeny?Pt(e,"deny"):Tt(e,!1)})(e)},t.cancelButton.onclick=()=>{((e,t)=>{e.disableButtons(),t(ze.cancel)})(e,r)},t.closeButton.onclick=()=>{r(ze.close)},((e,t,n)=>{e.toast?un(e,t,n):(mn(t),hn(t),gn(e,t,n))})(n,t,r),((e,t,n)=>{if(We(e),!t.toast){const o=e=>Ze(t,e,n);e.keydownHandler=o;const i=t.keydownListenerCapture?window:C();if(i){e.keydownTarget=i,e.keydownListenerCapture=t.keydownListenerCapture;const n=o;e.keydownTarget.addEventListener("keydown",n,{capture:e.keydownListenerCapture}),e.keydownHandlerAdded=!0}}})(o,n,r),((e,t)=>{"select"===t.input||"radio"===t.input?kt(e,t):["text","email","number","tel","textarea"].some(e=>e===t.input)&&(g(t.inputValue)||b(t.inputValue))&&(vt(P()),Bt(e,t))})(e,n),jn(n),Yn(o,n,r),Xn(t,n),setTimeout(()=>{t.container.scrollTop=0})}),Wn=(e,t)=>{const n=(e=>{const t="string"==typeof e.template?document.querySelector(e.template):e.template;if(!t)return{};const n=t.content;return On(n),Object.assign(Bn(n),$n(n),Ln(n),Pn(n),xn(n),Tn(n),Sn(n,kn))})(e),o=Object.assign({},zt,t,n,e);return o.showClass=Object.assign({},zt.showClass,o.showClass),o.hideClass=Object.assign({},zt.hideClass,o.hideClass),!1===o.animation&&(o.showClass={backdrop:"swal2-noanimation"},o.hideClass={}),o},Kn=e=>{const t={popup:C(),container:y(),actions:O(),confirmButton:P(),denyButton:T(),cancelButton:x(),loader:S(),closeButton:H(),validationMessage:L(),progressSteps:$()};return he.domCache.set(e,t),t},Yn=(e,t,n)=>{const o=j();Z(o),t.timer&&(e.timeout=new En(()=>{n("timer"),delete e.timeout},t.timer),t.timerProgressBar&&o&&(X(o),_(o,t,"timerProgressBar"),setTimeout(()=>{e.timeout&&e.timeout.running&&oe(t.timer)})))},Xn=(e,t)=>{if(!t.toast)return h(t.allowEnterKey)?void(Zn(e)||Jn(e,t)||Ke(-1,1)):(m("allowEnterKey"),void Gn())},Zn=e=>{const t=Array.from(e.popup.querySelectorAll("[autofocus]"));for(const e of t)if(e instanceof HTMLElement&&ee(e))return e.focus(),!0;return!1},Jn=(e,t)=>t.focusDeny&&ee(e.denyButton)?(e.denyButton.focus(),!0):t.focusCancel&&ee(e.cancelButton)?(e.cancelButton.focus(),!0):!(!t.focusConfirm||!ee(e.confirmButton))&&(e.confirmButton.focus(),!0),Gn=()=>{document.activeElement instanceof HTMLElement&&"function"==typeof document.activeElement.blur&&document.activeElement.blur()};Un.prototype.disableButtons=Nt,Un.prototype.enableButtons=qt,Un.prototype.getInput=It,Un.prototype.disableInput=Rt,Un.prototype.enableInput=_t,Un.prototype.hideLoading=jt,Un.prototype.disableLoading=jt,Un.prototype.showValidationMessage=Ft,Un.prototype.resetValidationMessage=Ut,Un.prototype.close=dt,Un.prototype.closePopup=dt,Un.prototype.closeModal=dt,Un.prototype.closeToast=dt,Un.prototype.rejectPromise=mt,Un.prototype.update=nn,Un.prototype._destroy=sn,Object.assign(Un,An),Object.keys(cn).forEach(e=>{Un[e]=function(...t){if(Rn&&Rn[e])return Rn[e](...t)}}),Un.DismissReason=ze,Un.version="11.26.17";const Qn=Un;return Qn.default=Qn,Qn}),void 0!==this&&this.Sweetalert2&&(this.swal=this.sweetAlert=this.Swal=this.SweetAlert=this.Sweetalert2);
"undefined"!=typeof document&&function(e,t){var n=e.createElement("style");if(e.getElementsByTagName("head")[0].appendChild(n),n.styleSheet)n.styleSheet.disabled||(n.styleSheet.cssText=t);else try{n.innerHTML=t}catch(e){n.innerText=t}}(document,":root{--swal2-outline: 0 0 0 3px rgba(100, 150, 200, 0.5);--swal2-container-padding: 0.625em;--swal2-backdrop: rgba(0, 0, 0, 0.4);--swal2-backdrop-transition: background-color 0.15s;--swal2-width: 32em;--swal2-padding: 0 0 1.25em;--swal2-border: none;--swal2-border-radius: 0.3125rem;--swal2-background: white;--swal2-color: #545454;--swal2-show-animation: swal2-show 0.3s;--swal2-hide-animation: swal2-hide 0.15s forwards;--swal2-icon-zoom: 1;--swal2-icon-animations: true;--swal2-title-padding: 0.8em 1em 0;--swal2-html-container-padding: 1em 1.6em 0.3em;--swal2-input-border: 1px solid #d9d9d9;--swal2-input-border-radius: 0.1875em;--swal2-input-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.06), 0 0 0 3px transparent;--swal2-input-background: transparent;--swal2-input-transition: border-color 0.2s, box-shadow 0.2s;--swal2-input-hover-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.06), 0 0 0 3px transparent;--swal2-input-focus-border: 1px solid #b4dbed;--swal2-input-focus-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.06), 0 0 0 3px rgba(100, 150, 200, 0.5);--swal2-progress-step-background: #add8e6;--swal2-validation-message-background: #f0f0f0;--swal2-validation-message-color: #666;--swal2-footer-border-color: #eee;--swal2-footer-background: transparent;--swal2-footer-color: inherit;--swal2-timer-progress-bar-background: rgba(0, 0, 0, 0.3);--swal2-close-button-position: initial;--swal2-close-button-inset: auto;--swal2-close-button-font-size: 2.5em;--swal2-close-button-color: #ccc;--swal2-close-button-transition: color 0.2s, box-shadow 0.2s;--swal2-close-button-outline: initial;--swal2-close-button-box-shadow: inset 0 0 0 3px transparent;--swal2-close-button-focus-box-shadow: inset var(--swal2-outline);--swal2-close-button-hover-transform: none;--swal2-actions-justify-content: center;--swal2-actions-width: auto;--swal2-actions-margin: 1.25em auto 0;--swal2-actions-padding: 0;--swal2-actions-border-radius: 0;--swal2-actions-background: transparent;--swal2-action-button-transition: background-color 0.2s, box-shadow 0.2s;--swal2-action-button-hover: black 10%;--swal2-action-button-active: black 10%;--swal2-confirm-button-box-shadow: none;--swal2-confirm-button-border-radius: 0.25em;--swal2-confirm-button-background-color: #7066e0;--swal2-confirm-button-color: #fff;--swal2-deny-button-box-shadow: none;--swal2-deny-button-border-radius: 0.25em;--swal2-deny-button-background-color: #dc3741;--swal2-deny-button-color: #fff;--swal2-cancel-button-box-shadow: none;--swal2-cancel-button-border-radius: 0.25em;--swal2-cancel-button-background-color: #6e7881;--swal2-cancel-button-color: #fff;--swal2-toast-show-animation: swal2-toast-show 0.5s;--swal2-toast-hide-animation: swal2-toast-hide 0.1s forwards;--swal2-toast-border: none;--swal2-toast-box-shadow: 0 0 1px hsl(0deg 0% 0% / 0.075), 0 1px 2px hsl(0deg 0% 0% / 0.075), 1px 2px 4px hsl(0deg 0% 0% / 0.075), 1px 3px 8px hsl(0deg 0% 0% / 0.075), 2px 4px 16px hsl(0deg 0% 0% / 0.075)}[data-swal2-theme=dark]{--swal2-dark-theme-black: #19191a;--swal2-dark-theme-white: #e1e1e1;--swal2-background: var(--swal2-dark-theme-black);--swal2-color: var(--swal2-dark-theme-white);--swal2-footer-border-color: #555;--swal2-input-background: color-mix(in srgb, var(--swal2-dark-theme-black), var(--swal2-dark-theme-white) 10%);--swal2-validation-message-background: color-mix( in srgb, var(--swal2-dark-theme-black), var(--swal2-dark-theme-white) 10% );--swal2-validation-message-color: var(--swal2-dark-theme-white);--swal2-timer-progress-bar-background: rgba(255, 255, 255, 0.7)}@media(prefers-color-scheme: dark){[data-swal2-theme=auto]{--swal2-dark-theme-black: #19191a;--swal2-dark-theme-white: #e1e1e1;--swal2-background: var(--swal2-dark-theme-black);--swal2-color: var(--swal2-dark-theme-white);--swal2-footer-border-color: #555;--swal2-input-background: color-mix(in srgb, var(--swal2-dark-theme-black), var(--swal2-dark-theme-white) 10%);--swal2-validation-message-background: color-mix( in srgb, var(--swal2-dark-theme-black), var(--swal2-dark-theme-white) 10% );--swal2-validation-message-color: var(--swal2-dark-theme-white);--swal2-timer-progress-bar-background: rgba(255, 255, 255, 0.7)}}body.swal2-shown:not(.swal2-no-backdrop,.swal2-toast-shown){overflow:hidden}body.swal2-height-auto{height:auto !important}body.swal2-no-backdrop .swal2-container{background-color:rgba(0,0,0,0) !important;pointer-events:none}body.swal2-no-backdrop .swal2-container .swal2-popup{pointer-events:all}body.swal2-no-backdrop .swal2-container .swal2-modal{box-shadow:0 0 10px var(--swal2-backdrop)}body.swal2-toast-shown .swal2-container{box-sizing:border-box;width:360px;max-width:100%;background-color:rgba(0,0,0,0);pointer-events:none}body.swal2-toast-shown .swal2-container.swal2-top{inset:0 auto auto 50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-top-end,body.swal2-toast-shown .swal2-container.swal2-top-right{inset:0 0 auto auto}body.swal2-toast-shown .swal2-container.swal2-top-start,body.swal2-toast-shown .swal2-container.swal2-top-left{inset:0 auto auto 0}body.swal2-toast-shown .swal2-container.swal2-center-start,body.swal2-toast-shown .swal2-container.swal2-center-left{inset:50% auto auto 0;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-center{inset:50% auto auto 50%;transform:translate(-50%, -50%)}body.swal2-toast-shown .swal2-container.swal2-center-end,body.swal2-toast-shown .swal2-container.swal2-center-right{inset:50% 0 auto auto;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-start,body.swal2-toast-shown .swal2-container.swal2-bottom-left{inset:auto auto 0 0}body.swal2-toast-shown .swal2-container.swal2-bottom{inset:auto auto 0 50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-end,body.swal2-toast-shown .swal2-container.swal2-bottom-right{inset:auto 0 0 auto}@media print{body.swal2-shown:not(.swal2-no-backdrop,.swal2-toast-shown){overflow-y:scroll !important}body.swal2-shown:not(.swal2-no-backdrop,.swal2-toast-shown)>[aria-hidden=true]{display:none}body.swal2-shown:not(.swal2-no-backdrop,.swal2-toast-shown) .swal2-container{position:static !important}}div:where(.swal2-container){display:grid;position:fixed;z-index:1060;inset:0;box-sizing:border-box;grid-template-areas:\"top-start     top            top-end\" \"center-start  center         center-end\" \"bottom-start  bottom-center  bottom-end\";grid-template-rows:minmax(min-content, auto) minmax(min-content, auto) minmax(min-content, auto);height:100%;padding:var(--swal2-container-padding);overflow-x:hidden;transition:var(--swal2-backdrop-transition);-webkit-overflow-scrolling:touch}div:where(.swal2-container).swal2-backdrop-show,div:where(.swal2-container).swal2-noanimation{background:var(--swal2-backdrop)}div:where(.swal2-container).swal2-backdrop-hide{background:rgba(0,0,0,0) !important}div:where(.swal2-container).swal2-top-start,div:where(.swal2-container).swal2-center-start,div:where(.swal2-container).swal2-bottom-start{grid-template-columns:minmax(0, 1fr) auto auto}div:where(.swal2-container).swal2-top,div:where(.swal2-container).swal2-center,div:where(.swal2-container).swal2-bottom{grid-template-columns:auto minmax(0, 1fr) auto}div:where(.swal2-container).swal2-top-end,div:where(.swal2-container).swal2-center-end,div:where(.swal2-container).swal2-bottom-end{grid-template-columns:auto auto minmax(0, 1fr)}div:where(.swal2-container).swal2-top-start>.swal2-popup{align-self:start}div:where(.swal2-container).swal2-top>.swal2-popup{grid-column:2;place-self:start center}div:where(.swal2-container).swal2-top-end>.swal2-popup,div:where(.swal2-container).swal2-top-right>.swal2-popup{grid-column:3;place-self:start end}div:where(.swal2-container).swal2-center-start>.swal2-popup,div:where(.swal2-container).swal2-center-left>.swal2-popup{grid-row:2;align-self:center}div:where(.swal2-container).swal2-center>.swal2-popup{grid-column:2;grid-row:2;place-self:center center}div:where(.swal2-container).swal2-center-end>.swal2-popup,div:where(.swal2-container).swal2-center-right>.swal2-popup{grid-column:3;grid-row:2;place-self:center end}div:where(.swal2-container).swal2-bottom-start>.swal2-popup,div:where(.swal2-container).swal2-bottom-left>.swal2-popup{grid-column:1;grid-row:3;align-self:end}div:where(.swal2-container).swal2-bottom>.swal2-popup{grid-column:2;grid-row:3;place-self:end center}div:where(.swal2-container).swal2-bottom-end>.swal2-popup,div:where(.swal2-container).swal2-bottom-right>.swal2-popup{grid-column:3;grid-row:3;place-self:end end}div:where(.swal2-container).swal2-grow-row>.swal2-popup,div:where(.swal2-container).swal2-grow-fullscreen>.swal2-popup{grid-column:1/4;width:100%}div:where(.swal2-container).swal2-grow-column>.swal2-popup,div:where(.swal2-container).swal2-grow-fullscreen>.swal2-popup{grid-row:1/4;align-self:stretch}div:where(.swal2-container).swal2-no-transition{transition:none !important}div:where(.swal2-container)[popover]{width:auto;border:0}div:where(.swal2-container) div:where(.swal2-popup){display:none;position:relative;box-sizing:border-box;grid-template-columns:minmax(0, 100%);width:var(--swal2-width);max-width:100%;padding:var(--swal2-padding);border:var(--swal2-border);border-radius:var(--swal2-border-radius);background:var(--swal2-background);color:var(--swal2-color);font-family:inherit;font-size:1rem;container-name:swal2-popup}div:where(.swal2-container) div:where(.swal2-popup):focus{outline:none}div:where(.swal2-container) div:where(.swal2-popup).swal2-loading{overflow-y:hidden}div:where(.swal2-container) div:where(.swal2-popup).swal2-draggable{cursor:grab}div:where(.swal2-container) div:where(.swal2-popup).swal2-draggable div:where(.swal2-icon){cursor:grab}div:where(.swal2-container) div:where(.swal2-popup).swal2-dragging{cursor:grabbing}div:where(.swal2-container) div:where(.swal2-popup).swal2-dragging div:where(.swal2-icon){cursor:grabbing}div:where(.swal2-container) h2:where(.swal2-title){position:relative;max-width:100%;margin:0;padding:var(--swal2-title-padding);color:inherit;font-size:1.875em;font-weight:600;text-align:center;text-transform:none;overflow-wrap:break-word;cursor:initial}div:where(.swal2-container) div:where(.swal2-actions){display:flex;z-index:1;box-sizing:border-box;flex-wrap:wrap;align-items:center;justify-content:var(--swal2-actions-justify-content);width:var(--swal2-actions-width);margin:var(--swal2-actions-margin);padding:var(--swal2-actions-padding);border-radius:var(--swal2-actions-border-radius);background:var(--swal2-actions-background)}div:where(.swal2-container) div:where(.swal2-loader){display:none;align-items:center;justify-content:center;width:2.2em;height:2.2em;margin:0 1.875em;animation:swal2-rotate-loading 1.5s linear 0s infinite normal;border-width:.25em;border-style:solid;border-radius:100%;border-color:#2778c4 rgba(0,0,0,0) #2778c4 rgba(0,0,0,0)}div:where(.swal2-container) button:where(.swal2-styled){margin:.3125em;padding:.625em 1.1em;transition:var(--swal2-action-button-transition);border:none;box-shadow:0 0 0 3px rgba(0,0,0,0);font-weight:500}div:where(.swal2-container) button:where(.swal2-styled):not([disabled]){cursor:pointer}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-confirm){border-radius:var(--swal2-confirm-button-border-radius);background:initial;background-color:var(--swal2-confirm-button-background-color);box-shadow:var(--swal2-confirm-button-box-shadow);color:var(--swal2-confirm-button-color);font-size:1em}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-confirm):hover{background-color:color-mix(in srgb, var(--swal2-confirm-button-background-color), var(--swal2-action-button-hover))}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-confirm):active{background-color:color-mix(in srgb, var(--swal2-confirm-button-background-color), var(--swal2-action-button-active))}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-deny){border-radius:var(--swal2-deny-button-border-radius);background:initial;background-color:var(--swal2-deny-button-background-color);box-shadow:var(--swal2-deny-button-box-shadow);color:var(--swal2-deny-button-color);font-size:1em}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-deny):hover{background-color:color-mix(in srgb, var(--swal2-deny-button-background-color), var(--swal2-action-button-hover))}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-deny):active{background-color:color-mix(in srgb, var(--swal2-deny-button-background-color), var(--swal2-action-button-active))}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-cancel){border-radius:var(--swal2-cancel-button-border-radius);background:initial;background-color:var(--swal2-cancel-button-background-color);box-shadow:var(--swal2-cancel-button-box-shadow);color:var(--swal2-cancel-button-color);font-size:1em}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-cancel):hover{background-color:color-mix(in srgb, var(--swal2-cancel-button-background-color), var(--swal2-action-button-hover))}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-cancel):active{background-color:color-mix(in srgb, var(--swal2-cancel-button-background-color), var(--swal2-action-button-active))}div:where(.swal2-container) button:where(.swal2-styled):focus-visible{outline:none;box-shadow:var(--swal2-action-button-focus-box-shadow)}div:where(.swal2-container) button:where(.swal2-styled)[disabled]:not(.swal2-loading){opacity:.4}div:where(.swal2-container) button:where(.swal2-styled)::-moz-focus-inner{border:0}div:where(.swal2-container) div:where(.swal2-footer){margin:1em 0 0;padding:1em 1em 0;border-top:1px solid var(--swal2-footer-border-color);background:var(--swal2-footer-background);color:var(--swal2-footer-color);font-size:1em;text-align:center;cursor:initial}div:where(.swal2-container) .swal2-timer-progress-bar-container{position:absolute;right:0;bottom:0;left:0;grid-column:auto !important;overflow:hidden;border-bottom-right-radius:var(--swal2-border-radius);border-bottom-left-radius:var(--swal2-border-radius)}div:where(.swal2-container) div:where(.swal2-timer-progress-bar){width:100%;height:.25em;background:var(--swal2-timer-progress-bar-background)}div:where(.swal2-container) img:where(.swal2-image){max-width:100%;margin:2em auto 1em;cursor:initial}div:where(.swal2-container) button:where(.swal2-close){position:var(--swal2-close-button-position);inset:var(--swal2-close-button-inset);z-index:2;align-items:center;justify-content:center;width:1.2em;height:1.2em;margin-top:0;margin-right:0;margin-bottom:-1.2em;padding:0;overflow:hidden;transition:var(--swal2-close-button-transition);border:none;border-radius:var(--swal2-border-radius);outline:var(--swal2-close-button-outline);background:rgba(0,0,0,0);color:var(--swal2-close-button-color);font-family:monospace;font-size:var(--swal2-close-button-font-size);cursor:pointer;justify-self:end}div:where(.swal2-container) button:where(.swal2-close):hover{transform:var(--swal2-close-button-hover-transform);background:rgba(0,0,0,0);color:#f27474}div:where(.swal2-container) button:where(.swal2-close):focus-visible{outline:none;box-shadow:var(--swal2-close-button-focus-box-shadow)}div:where(.swal2-container) button:where(.swal2-close)::-moz-focus-inner{border:0}div:where(.swal2-container) div:where(.swal2-html-container){z-index:1;justify-content:center;margin:0;padding:var(--swal2-html-container-padding);overflow:auto;color:inherit;font-size:1.125em;font-weight:normal;line-height:normal;text-align:center;overflow-wrap:break-word;word-break:break-word;cursor:initial}div:where(.swal2-container) input:where(.swal2-input),div:where(.swal2-container) input:where(.swal2-file),div:where(.swal2-container) textarea:where(.swal2-textarea),div:where(.swal2-container) select:where(.swal2-select),div:where(.swal2-container) div:where(.swal2-radio),div:where(.swal2-container) label:where(.swal2-checkbox){margin:1em 2em 3px}div:where(.swal2-container) input:where(.swal2-input),div:where(.swal2-container) input:where(.swal2-file),div:where(.swal2-container) textarea:where(.swal2-textarea){box-sizing:border-box;width:auto;transition:var(--swal2-input-transition);border:var(--swal2-input-border);border-radius:var(--swal2-input-border-radius);background:var(--swal2-input-background);box-shadow:var(--swal2-input-box-shadow);color:inherit;font-size:1.125em}div:where(.swal2-container) input:where(.swal2-input).swal2-inputerror,div:where(.swal2-container) input:where(.swal2-file).swal2-inputerror,div:where(.swal2-container) textarea:where(.swal2-textarea).swal2-inputerror{border-color:#f27474 !important;box-shadow:0 0 2px #f27474 !important}div:where(.swal2-container) input:where(.swal2-input):hover,div:where(.swal2-container) input:where(.swal2-file):hover,div:where(.swal2-container) textarea:where(.swal2-textarea):hover{box-shadow:var(--swal2-input-hover-box-shadow)}div:where(.swal2-container) input:where(.swal2-input):focus,div:where(.swal2-container) input:where(.swal2-file):focus,div:where(.swal2-container) textarea:where(.swal2-textarea):focus{border:var(--swal2-input-focus-border);outline:none;box-shadow:var(--swal2-input-focus-box-shadow)}div:where(.swal2-container) input:where(.swal2-input)::placeholder,div:where(.swal2-container) input:where(.swal2-file)::placeholder,div:where(.swal2-container) textarea:where(.swal2-textarea)::placeholder{color:#ccc}div:where(.swal2-container) .swal2-range{margin:1em 2em 3px;background:var(--swal2-background)}div:where(.swal2-container) .swal2-range input{width:80%}div:where(.swal2-container) .swal2-range output{width:20%;color:inherit;font-weight:600;text-align:center}div:where(.swal2-container) .swal2-range input,div:where(.swal2-container) .swal2-range output{height:2.625em;padding:0;font-size:1.125em;line-height:2.625em}div:where(.swal2-container) .swal2-input{height:2.625em;padding:0 .75em}div:where(.swal2-container) .swal2-file{width:75%;margin-right:auto;margin-left:auto;background:var(--swal2-input-background);font-size:1.125em}div:where(.swal2-container) .swal2-textarea{height:6.75em;padding:.75em}div:where(.swal2-container) .swal2-select{min-width:50%;max-width:100%;padding:.375em .625em;background:var(--swal2-input-background);color:inherit;font-size:1.125em}div:where(.swal2-container) .swal2-radio,div:where(.swal2-container) .swal2-checkbox{align-items:center;justify-content:center;background:var(--swal2-background);color:inherit}div:where(.swal2-container) .swal2-radio label,div:where(.swal2-container) .swal2-checkbox label{margin:0 .6em;font-size:1.125em}div:where(.swal2-container) .swal2-radio input,div:where(.swal2-container) .swal2-checkbox input{flex-shrink:0;margin:0 .4em}div:where(.swal2-container) label:where(.swal2-input-label){display:flex;justify-content:center;margin:1em auto 0}div:where(.swal2-container) div:where(.swal2-validation-message){align-items:center;justify-content:center;margin:1em 0 0;padding:.625em;overflow:hidden;background:var(--swal2-validation-message-background);color:var(--swal2-validation-message-color);font-size:1em;font-weight:300}div:where(.swal2-container) div:where(.swal2-validation-message)::before{content:\"!\";display:inline-block;width:1.5em;min-width:1.5em;height:1.5em;margin:0 .625em;border-radius:50%;background-color:#f27474;color:#fff;font-weight:600;line-height:1.5em;text-align:center}div:where(.swal2-container) .swal2-progress-steps{flex-wrap:wrap;align-items:center;max-width:100%;margin:1.25em auto;padding:0;background:rgba(0,0,0,0);font-weight:600}div:where(.swal2-container) .swal2-progress-steps li{display:inline-block;position:relative}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step{z-index:20;flex-shrink:0;width:2em;height:2em;border-radius:2em;background:#2778c4;color:#fff;line-height:2em;text-align:center}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step.swal2-active-progress-step{background:#2778c4}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step{background:var(--swal2-progress-step-background);color:#fff}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step-line{background:var(--swal2-progress-step-background)}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step-line{z-index:10;flex-shrink:0;width:2.5em;height:.4em;margin:0 -1px;background:#2778c4}div:where(.swal2-icon){position:relative;box-sizing:content-box;justify-content:center;width:5em;height:5em;margin:2.5em auto .6em;zoom:var(--swal2-icon-zoom);border:.25em solid rgba(0,0,0,0);border-radius:50%;border-color:#000;font-family:inherit;line-height:5em;cursor:default;user-select:none}div:where(.swal2-icon) .swal2-icon-content{display:flex;align-items:center;font-size:3.75em}div:where(.swal2-icon).swal2-error{border-color:#f27474;color:#f27474}div:where(.swal2-icon).swal2-error .swal2-x-mark{position:relative;flex-grow:1}div:where(.swal2-icon).swal2-error [class^=swal2-x-mark-line]{display:block;position:absolute;top:2.3125em;width:2.9375em;height:.3125em;border-radius:.125em;background-color:#f27474}div:where(.swal2-icon).swal2-error [class^=swal2-x-mark-line][class$=left]{left:1.0625em;transform:rotate(45deg)}div:where(.swal2-icon).swal2-error [class^=swal2-x-mark-line][class$=right]{right:1em;transform:rotate(-45deg)}@container swal2-popup style(--swal2-icon-animations:true){div:where(.swal2-icon).swal2-error.swal2-icon-show{animation:swal2-animate-error-icon .5s}div:where(.swal2-icon).swal2-error.swal2-icon-show .swal2-x-mark{animation:swal2-animate-error-x-mark .5s}}div:where(.swal2-icon).swal2-warning{border-color:#f8bb86;color:#f8bb86}@container swal2-popup style(--swal2-icon-animations:true){div:where(.swal2-icon).swal2-warning.swal2-icon-show{animation:swal2-animate-error-icon .5s}div:where(.swal2-icon).swal2-warning.swal2-icon-show .swal2-icon-content{animation:swal2-animate-i-mark .5s}}div:where(.swal2-icon).swal2-info{border-color:#3fc3ee;color:#3fc3ee}@container swal2-popup style(--swal2-icon-animations:true){div:where(.swal2-icon).swal2-info.swal2-icon-show{animation:swal2-animate-error-icon .5s}div:where(.swal2-icon).swal2-info.swal2-icon-show .swal2-icon-content{animation:swal2-animate-i-mark .8s}}div:where(.swal2-icon).swal2-question{border-color:#87adbd;color:#87adbd}@container swal2-popup style(--swal2-icon-animations:true){div:where(.swal2-icon).swal2-question.swal2-icon-show{animation:swal2-animate-error-icon .5s}div:where(.swal2-icon).swal2-question.swal2-icon-show .swal2-icon-content{animation:swal2-animate-question-mark .8s}}div:where(.swal2-icon).swal2-success{border-color:#a5dc86;color:#a5dc86}div:where(.swal2-icon).swal2-success [class^=swal2-success-circular-line]{position:absolute;width:3.75em;height:7.5em;border-radius:50%}div:where(.swal2-icon).swal2-success [class^=swal2-success-circular-line][class$=left]{top:-0.4375em;left:-2.0635em;transform:rotate(-45deg);transform-origin:3.75em 3.75em;border-radius:7.5em 0 0 7.5em}div:where(.swal2-icon).swal2-success [class^=swal2-success-circular-line][class$=right]{top:-0.6875em;left:1.875em;transform:rotate(-45deg);transform-origin:0 3.75em;border-radius:0 7.5em 7.5em 0}div:where(.swal2-icon).swal2-success .swal2-success-ring{position:absolute;z-index:2;top:-0.25em;left:-0.25em;box-sizing:content-box;width:100%;height:100%;border:.25em solid rgba(165,220,134,.3);border-radius:50%}div:where(.swal2-icon).swal2-success .swal2-success-fix{position:absolute;z-index:1;top:.5em;left:1.625em;width:.4375em;height:5.625em;transform:rotate(-45deg)}div:where(.swal2-icon).swal2-success [class^=swal2-success-line]{display:block;position:absolute;z-index:2;height:.3125em;border-radius:.125em;background-color:#a5dc86}div:where(.swal2-icon).swal2-success [class^=swal2-success-line][class$=tip]{top:2.875em;left:.8125em;width:1.5625em;transform:rotate(45deg)}div:where(.swal2-icon).swal2-success [class^=swal2-success-line][class$=long]{top:2.375em;right:.5em;width:2.9375em;transform:rotate(-45deg)}@container swal2-popup style(--swal2-icon-animations:true){div:where(.swal2-icon).swal2-success.swal2-icon-show .swal2-success-line-tip{animation:swal2-animate-success-line-tip .75s}div:where(.swal2-icon).swal2-success.swal2-icon-show .swal2-success-line-long{animation:swal2-animate-success-line-long .75s}div:where(.swal2-icon).swal2-success.swal2-icon-show .swal2-success-circular-line-right{animation:swal2-rotate-success-circular-line 4.25s ease-in}}[class^=swal2]{-webkit-tap-highlight-color:rgba(0,0,0,0)}.swal2-show{animation:var(--swal2-show-animation)}.swal2-hide{animation:var(--swal2-hide-animation)}.swal2-noanimation{transition:none}.swal2-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}.swal2-rtl .swal2-close{margin-right:initial;margin-left:0}.swal2-rtl .swal2-timer-progress-bar{right:0;left:auto}.swal2-toast{box-sizing:border-box;grid-column:1/4 !important;grid-row:1/4 !important;grid-template-columns:min-content auto min-content;padding:1em;overflow-y:hidden;border:var(--swal2-toast-border);background:var(--swal2-background);box-shadow:var(--swal2-toast-box-shadow);pointer-events:all}.swal2-toast>*{grid-column:2}.swal2-toast h2:where(.swal2-title){margin:.5em 1em;padding:0;font-size:1em;text-align:initial}.swal2-toast .swal2-loading{justify-content:center}.swal2-toast input:where(.swal2-input){height:2em;margin:.5em;font-size:1em}.swal2-toast .swal2-validation-message{font-size:1em}.swal2-toast div:where(.swal2-footer){margin:.5em 0 0;padding:.5em 0 0;font-size:.8em}.swal2-toast button:where(.swal2-close){grid-column:3/3;grid-row:1/99;align-self:center;width:.8em;height:.8em;margin:0;font-size:2em}.swal2-toast div:where(.swal2-html-container){margin:.5em 1em;padding:0;overflow:initial;font-size:1em;text-align:initial}.swal2-toast div:where(.swal2-html-container):empty{padding:0}.swal2-toast .swal2-loader{grid-column:1;grid-row:1/99;align-self:center;width:2em;height:2em;margin:.25em}.swal2-toast .swal2-icon{grid-column:1;grid-row:1/99;align-self:center;width:2em;min-width:2em;height:2em;margin:0 .5em 0 0}.swal2-toast .swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:1.8em;font-weight:bold}.swal2-toast .swal2-icon.swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line]{top:.875em;width:1.375em}.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:.3125em}.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:.3125em}.swal2-toast div:where(.swal2-actions){justify-content:flex-start;height:auto;margin:0;margin-top:.5em;padding:0 .5em}.swal2-toast button:where(.swal2-styled){margin:.25em .5em;padding:.4em .6em;font-size:1em}.swal2-toast .swal2-success{border-color:#a5dc86}.swal2-toast .swal2-success [class^=swal2-success-circular-line]{position:absolute;width:1.6em;height:3em;border-radius:50%}.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=left]{top:-0.8em;left:-0.5em;transform:rotate(-45deg);transform-origin:2em 2em;border-radius:4em 0 0 4em}.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=right]{top:-0.25em;left:.9375em;transform-origin:0 1.5em;border-radius:0 4em 4em 0}.swal2-toast .swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-toast .swal2-success .swal2-success-fix{top:0;left:.4375em;width:.4375em;height:2.6875em}.swal2-toast .swal2-success [class^=swal2-success-line]{height:.3125em}.swal2-toast .swal2-success [class^=swal2-success-line][class$=tip]{top:1.125em;left:.1875em;width:.75em}.swal2-toast .swal2-success [class^=swal2-success-line][class$=long]{top:.9375em;right:.1875em;width:1.375em}@container swal2-popup style(--swal2-icon-animations:true){.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-tip{animation:swal2-toast-animate-success-line-tip .75s}.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-long{animation:swal2-toast-animate-success-line-long .75s}}.swal2-toast.swal2-show{animation:var(--swal2-toast-show-animation)}.swal2-toast.swal2-hide{animation:var(--swal2-toast-hide-animation)}@keyframes swal2-show{0%{transform:translate3d(0, -50px, 0) scale(0.9);opacity:0}100%{transform:translate3d(0, 0, 0) scale(1);opacity:1}}@keyframes swal2-hide{0%{transform:translate3d(0, 0, 0) scale(1);opacity:1}100%{transform:translate3d(0, -50px, 0) scale(0.9);opacity:0}}@keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-0.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.8125em;width:1.5625em}}@keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(0.4);opacity:0}50%{margin-top:1.625em;transform:scale(0.4);opacity:0}80%{margin-top:-0.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0deg);opacity:1}}@keyframes swal2-rotate-loading{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}@keyframes swal2-animate-question-mark{0%{transform:rotateY(-360deg)}100%{transform:rotateY(0)}}@keyframes swal2-animate-i-mark{0%{transform:rotateZ(45deg);opacity:0}25%{transform:rotateZ(-25deg);opacity:.4}50%{transform:rotateZ(15deg);opacity:.8}75%{transform:rotateZ(-5deg);opacity:1}100%{transform:rotateX(0);opacity:1}}@keyframes swal2-toast-show{0%{transform:translateY(-0.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(0.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0deg)}}@keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-0.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}");



/**
 * @license AGPL-3.0
 * Blooket Cheats
 * Copyright (C) 2023-present 05Konz/Xullys/redhorse26/landsedge/Tony-the-best
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as published
 * by the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 * Source: TAKEN DOWN! * EMAIL: [email protected]
 * Source: https://github.com/xgui-client/X-GUI-BLOOKET-CLIENT/ * EMAIL [email protected]

*/

/* THE UPDATE CHECKER IS ADDED DURING COMMIT PREP, THERE MAY BE REDUNDANT CODE, DO NOT TOUCH */

console.log("%c X-GUI CLIENT LOADED! ENJOY! %c\n Created by Xullys on GitHub", "color: #0bc2cf; font-size: 3rem", "color: #8000ff; font-size: 1rem");
console.log("%c gui.js", "color: #0bc2cf; font-size: 1rem");
console.log("%c Star the GitHub repo! %c https://github.com/xgui-client/X-GUI-BLOOKET-CLIENT", "color: #ffd000; font-size: 1rem", "color: #8000ff; font-size: 1rem");

(() => {
    let iframe = document.querySelector("iframe");
    if (!iframe) {
        iframe = document.createElement("iframe");
        iframe.style.display = "none";
        document.body.append(iframe);

    }
    /* By CryptoDude3 */
    if (window.fetch.call.toString() == 'function call() { [native code] }') {
        const call = window.fetch.call;
        window.fetch.call = function() {
            if (!arguments[1].includes("s.blooket.com/rc")) return call.apply(this, arguments);
        }
    }
    const timeProcessed = 1747005941679;
    let latestProcess = -1;
    const cheat = (async () => {
        const versionName = "6.70x";
        const gui = document.createElement("div");
        Object.assign(gui.style, {
            top: window.innerHeight / 2 - 250 + "px",
            left: innerWidth / 2 - 400 + "px",
        });
        const variables = {
            "--highlight": "#8A2BE2",
            "--highlight2": "#4B0082",
            "--background": "#0B0B1E",
            "--background2": "#151534",
            "--textColor": "#E0E0FF",
            "--textColor2": "#9A8CFF",
            "--toggleOff": "#2C273F",
            "--toggleOn": "#5FA3FF",
        };

        let settings,
            settingsKey = "KGUI.BenIsASillyGoose";
        const Settings = {
            data: null,
            setItem(k, v) {
                k.split(".").reduce((obj, k, i, a) => (++i == a.length && (obj[k] = v), k in obj ? obj[k] : (obj[k] = {})), this.data);
                localStorage.setItem(settingsKey, JSON.stringify(this.data));
                return v;
            },
            deleteItem(k) {
                k.split(".").reduce((obj, k, i, a) => (++i == a.length && delete obj[k], obj[k]), this.data);
                localStorage.setItem(settingsKey, JSON.stringify(this.data));
                return this.data;
            },
            setData(v) {
                this.data = v;
                localStorage.setItem(settingsKey, JSON.stringify(this.data));
            },
        };
        const defaultHideKey = {
            ctrl: true,
            shift: false,
            alt: false,
            key: "e"
        };
        const defaultCloseKey = {
            ctrl: true,
            shift: false,
            alt: false,
            key: "x"
        };

        for (const variable in variables) gui.style.setProperty(variable, variables[variable]);
        try {
            Settings.data = JSON.parse(localStorage.getItem(settingsKey) || "{}");
        } catch {
            localStorage.setItem(settingsKey, "{}");
            Settings.data = {};
        } finally {
            for (const variable in Settings.data.theme || {}) gui.style.setProperty("--" + variable, Settings.data.theme[variable]);
            Settings.data.hideKey ??= defaultHideKey;
            Settings.data.closeKey ??= defaultCloseKey;
        }

        const CookieHelper = {
            setCookie: (name, value, days = 365) => {
                const date = new Date();
                date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
                const expires = "expires=" + date.toUTCString();
                document.cookie = `${name}=${encodeURIComponent(JSON.stringify(value))}; domain=.blooket.com; ${expires};path=/`;
            },
            getCookie: (name) => {
                const nameEQ = name + "=";
                const cookies = document.cookie.split(';');
                for (let cookie of cookies) {
                    cookie = cookie.trim();
                    if (cookie.indexOf(nameEQ) === 0) {
                        try {
                            return JSON.parse(decodeURIComponent(cookie.substring(nameEQ.length)));
                        } catch {
                            return null;
                        }
                    }
                }
                return null;
            }
        };

        const styles = document.createElement("style");
        const classes = {},
            datasets = {};
        styles.innerHTML =

            "@import url('https://fonts.googleapis.com/css?family=Titan+One');\n@import url('https://fonts.googleapis.com/css?family=Nunito');" +
            `.bigTextContainer,.version{align-items:center;user-select:none}.cheatsList>div,.settingsPage>div{padding:5px 10px}.gamemode,.gui,.leaderboardList,.sidebar{box-sizing:border-box}.controls>div,.credit,.pathText,.runCheat,.sidebarPath,.version{user-select:none}.noScroll::-webkit-scrollbar{display:none}.noScroll{-ms-overflow-style:none;scrollbar-width:none}.gui {
  position: fixed;
  z-index: 100;
  background: var(--background);
  height: 500px;
  width: 800px;
  color: #fff;
  padding-left: 50px;
  font-size: 16px;

  /* clean corners */
  border-radius: 20px;
  overflow: hidden; /* hides overlapping sidebar edges */

  /* strobing purple edge */
  box-shadow: 0 0 15px var(--highlight);
  animation: edgePulse 2s ease-in-out infinite;
}

/* add a wrapper to keep glow around full rounded border */
.gui::after {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: 20px;
  border: 2px solid var(--highlight);
  pointer-events: none; /* lets you click through it */
  animation: edgePulse 2s ease-in-out infinite;
}

/* animate border glow */
@keyframes edgePulse {
  0% {
    border-color: var(--highlight);
    box-shadow: 0 0 10px var(--highlight);
  }
  50% {
    border-color: var(--highlight2);
    box-shadow: 0 0 25px var(--highlight2);
  }
  100% {
    border-color: var(--highlight);
    box-shadow: 0 0 10px var(--highlight);
  }
}
button,
.runCheat,
.cheatToggle,
.toggleTrigger,
.controls > div,
.searchbarButton {
    border-radius: 12px !important;
}

.controls,.credit,.gamemodesList,.guiContent,.guiTopBar,.sidebar,.sidebarShadow,.version{position:absolute}.sidebarShadow{inset:0;background:#000;opacity:0%;pointer-events:none;transition:.2s;z-index:9}.controls>div,.guiContent,.sidebar,select[data-type] option{background:var(--background2)}.sidebarShadow:has(~ .sidebar:hover){opacity:40%}.credit{bottom:0;left:0;right:0;height:0;transition:.1s;overflow:hidden;text-align:center}.sidebar {
  top: 0;
  left: 0;
  height: 100%;
  width: 50px;

  /* ORIGINAL POSITIONING */
  position: absolute;
  z-index: 10;

  /* visuals */
  background: var(--background2);
  box-sizing: border-box;
  padding-bottom: 30px;

  /* animation */
  transition: width .2s .1s;

  /* COLLAPSED */
  overflow-x: hidden;
  overflow-y: hidden;
}

/* EXPANDED */
.sidebar:hover {
  width: 200px;
  overflow-y: auto;
}

/* Chrome scrollbar */
.sidebar::-webkit-scrollbar {
  width: 0;
}

.sidebar:hover::-webkit-scrollbar {
  width: 6px;
}

.sidebar:hover::-webkit-scrollbar-thumb {
  background: rgba(255, 255, 255, 0.25);
  border-radius: 6px;
}

.sidebar:hover{width:200px;transition-delay:0s}.sidebar:hover>.credit{height:25px;transition:.4s 0.2s}.guiContent{inset:20px;left:70px;top:40px;z-index:1;padding-top:32px}.guiTopBar{z-index:1;top:0;left:50px;right:0;height:25px}.version{top:0;left:0;margin-inline:10px;color:#888;font-size:.9em;letter-spacing:.5px;height:100%;display:flex}.controls{top:0;right:0;display:grid;grid-template-columns:1fr 1fr 1fr;height:25px;width:122px;gap:1px;border:1px solid var(--background);z-index:2}.controls>div{display:grid;place-items:center;font-weight:100}.closeControl{transition:.1s}.closeControl:hover{background:red}.creditsPage,.gamemodesPage,.searchPage{position:absolute;inset:0;top:32px}.gamemodesList{display:grid;gap:0 30px;padding-inline:30px;margin-top:0;padding-top:15px;margin-bottom:0;grid-template-columns:1fr 1fr;overflow-y:scroll;inset:0}.leaderboardPage,.logsPage{inset:10px;position:absolute}.pathText{position:absolute;top:40px;left:70px;right:20px;z-index:3;padding:7px 10px;height:22px}.clearLogsButton,.refreshControl{z-index:5;place-items:center;cursor:pointer}.leaderboardPage{top:42px}.leaderboardList{list-style:none;margin:0;padding:20px 40px 10px;height:100%;overflow:scroll;font-size:1.5em}.logsPage{top:37px;background:#000d;border-radius:2.5px}.logMessages{list-style:none;margin:10px;padding:0;display:flex;flex-direction:column-reverse;overflow-y:scroll;word-wrap:break-word;position:absolute;inset:0}.clearLogsButton{position:absolute;top:5px;right:5px;width:25px;height:25px;display:grid;scale:-1 1 1;transition:.2s}.searchbarHolder{display:flex;outline:2px solid var(--highlight);margin:10px 20px;height:30px;font-size:2em}.searchbarInput{outline:0;border:none;background:0 0;color:#fff;flex:1;font-size:.5em;font-family:Nunito;padding-inline:5px}.gamemode,.settingsPage>div{border-radius:2.5px;background:var(--background)}.searchbarButton{color:#fff;font-size:.6em;aspect-ratio:1/1;height:30px;display:grid;place-items:center;cursor:pointer}.bigText,.bigTextContainer{height:50px;width:200px;font-family:Titan One}.searchResults{position:absolute;inset:0;top:45px;padding-inline:20px;overflow-y:scroll}.favoritesPage,.settingsPage{inset:0;top:32px;overflow-y:scroll;position:absolute}.noResult{margin:20px 10px;font-size:.85em}.clearLogsButton:hover,.licenseMessage{font-size:1.25em}.favoritesPage{padding-block:10px;padding-inline:20px}.licenseMessage{font-weight:900;padding-inline:20px;margin-top:10px}.copyrightTag{font-size:.7em;font-weight:200;position:absolute;bottom:0;left:0;padding:5px 8px}.codingCredits,.creditLinks,.uploadDates{list-style:none;padding-inline:20px;margin-block:16px}.settingsPage{padding:10px;display:flex;flex-direction:column;gap:10px}.sidebarPaths{display:flex;flex-direction:column;width:200px}.bigTextContainer{display:flex;font-size:2em;margin-block:10px;transition:font-size .2s .1s,margin-block .2s .1s}.bigText{display:flex;align-items:center;justify-content:center}.refreshControl{position:absolute;top:45px;right:25px;width:25px;height:25px;display:grid}.gamemode{width:100%;height:200px;margin-bottom:30px;cursor:pointer;display:flex;justify-content:center;align-items:center;padding-top:10px;position:relative;overflow:hidden;padding-bottom:35px;transition:.4s}.contentPage,.gamemode>div{position:absolute;bottom:0}.gamemode:hover{box-shadow:0 0 10px var(--highlight);transition:.2s}.gamemode>img{width:85%;max-width:100%;max-height:100%}.gamemode>div{left:0;right:0;height:25px;background:var(--highlight);display:flex;justify-content:center;align-items:center;box-shadow:0 -5px 5px #0004;font-weight:800;font-size:1.1em;transition:.25s}.contentPage{inset-inline:0;top:35px}.cheatsList{display:flex;flex-direction:column;height:100%;overflow-y:scroll;padding-inline:10px}.cheatToggle,.cheatToggle>.toggleTrigger,.runCheat{height:35px;border-radius:2.5px}.cheatsList>div{display:grid;margin-bottom:10px;position:relative;background:var(--background);border-radius:2.5px}.cheatInfo,.cheatInputs,.cheatName,.cheatTop,.logMessage>span,.runCheat,.sidebarPath,.sidebarPath>i{display:flex}.cheatInfo{flex-direction:column;flex:1}.cheatName{font-size:1.5em;font-weight:700}.cheatDescription{font-size:.8em;margin-right:25px}.runCheat{--buttonColor:var(--highlight);width:20%;background:var(--buttonColor);margin-block:auto;cursor:pointer;align-items:center;justify-content:center;font-weight:800;transition:.5s;color:#fff!important}.runCheat:hover{box-shadow:0 0 10px 0 var(--buttonColor);transition:.3s}.runCheat:active{box-shadow:0 0 0 0 var(--buttonColor);transition:50ms}.cheatInputs{margin:5px 0 5px 5px;flex-direction:column;gap:5px}.searchResult,.standing{margin-bottom:10px;transition:.2s}.creditsPage>ul>li>strong,.logMessage img,.standingBlook{margin-right:5px}.cheatInputs>div{display:flex;flex-direction:row;font-size:.8rem;color:var(--highlight);font-weight:700;align-items:center}.cheatInputs>div>span{flex:1}.cheatToggle{width:20%;background:var(--highlight2);margin-block:auto;cursor:pointer;position:relative}.cheatToggle>.toggleTrigger{width:45px;position:absolute;top:0;left:0;background:var(--highlight);pointer-events:none;transition:left .2s,box-shadow .5s;z-index:1}.cheatToggle:hover>.toggleTrigger{box-shadow:0 0 10px 0 var(--highlight);transition:left .2s,box-shadow .2s}.toggleTrigger.active{left:calc(100% - 45px)}.toggleColor{position:absolute;inset:10px 20px;background:rgb(from var(--toggleOff) r g b / 25%);border-radius:2.5px;transition:.2s}.toggleTrigger.active+.toggleColor{background:rgb(from var(--toggleOn) r g b / 25%)}input[data-type],select[data-type]{width:20%;height:25px;outline:0;border:2px solid var(--highlight);box-sizing:border-box;background:0 0;color:#fff;font-size:.9em;padding-left:5px;font-family:Nunito;border-radius:2px;font-weight:800}.logo,.sidebarPath>i{width:50px;height:50px}select[data-type]{-webkit-appearance:none;-moz-appearance:none;text-indent:1px;text-overflow:''}input::placeholder{color:rgb(from var(--textColor) r g b / 50%)}input[data-type]::-webkit-inner-spin-button,input[data-type]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}input[data-type][type=number]{-moz-appearance:textfield}select[data-type] option{border-radius:0}select[data-type]::-ms-expand{display:none}.sidebarPath{align-items:center;cursor:pointer;transition:.2s 0.1s}.searchResult:hover,.sidebarPath:hover{color:var(--highlight);text-shadow:0 0 5px var(--highlight)}.sidebarPath>i{justify-content:center;align-items:center;font-size:1.5em}.sidebarPath>span{padding-left:5px}.sidebar:hover .sidebarPath{padding-left:20px;transition-delay:0s}.logo{left:0;transition:left .2s .1s;display:grid;place-items:center;min-width:50px;position:absolute}.sidebar:hover .logo{left:28px;transition:left .2s}.bigText{margin-top:-150px;transition:margin-top .1s}.sidebar:hover .bigText{margin-top:0;transition:margin-top .4s 0.1s}.sidebar:hover .bigTextContainer{font-size:2.5em;margin-block:20px;transition:font-size .2s,margin-block .2s}/* === Glowing title effect === */
.bigText {
  text-shadow: 0 0 10px var(--highlight), 0 0 20px var(--highlight2);
  animation: glowPulse 2s ease-in-out infinite alternate;
}
@keyframes glowPulse {
  from { text-shadow: 0 0 10px var(--highlight); }
  to { text-shadow: 0 0 25px var(--highlight2), 0 0 40px var(--highlight); }
}
/* === Search animation effects === */
@keyframes slideInLeft {
  from {
    opacity: 0;
    transform: translateX(-30px);
  }
  to {
    opacity: 1;
    transform: translateX(0);
  }
}
@keyframes slideOutRight {
  from {
    opacity: 1;
    transform: translateX(0);
  }
  to {
    opacity: 0;
    transform: translateX(30px);
  }
}
@keyframes fadeIn {
  from { opacity: 0; }
  to { opacity: 1; }
}
@keyframes fadeOut {
  from { opacity: 1; }
  to { opacity: 0; }
}
/* === GUI fade animations === */
@keyframes guiFadeIn {
  from {
    opacity: 0;
    transform: scale(0.95);
  }
  to {
    opacity: 1;
    transform: scale(1);
  }
}
@keyframes guiFadeOut {
  from {
    opacity: 1;
    transform: scale(1);
  }
  to {
    opacity: 0;
    transform: scale(0.95);
  }
}
/* === Page transition animations === */
@keyframes pageIn {
  from {
    opacity: 0;
    transform: translateY(10px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}
.gui {
  animation: guiFadeIn 0.3s ease-out;
}
.gui.hiding {
  animation: guiFadeOut 0.3s ease-out;
}
.creditsPage>ul>li>span{color:var(--textColor2);font-weight:800}.creditsPage>ul>li i{margin-inline:2px;line-height:1}.creditsPage a{color:var(--highlight);text-decoration:none}.creditsPage a:hover,.pathPage:hover{text-decoration:underline}.warning{color:var(--highlight2);font-size:.85em}.searchResult{cursor:pointer}.searchResultName{font-weight:800}.searchResultDescription{font-size:.8em}.searchResultSeparator{font-size:1.5em;font-weight:800;margin-block:10px;cursor:pointer;transition:.2s;border-bottom:2px solid #fff;padding-inline:5px;filter:drop-shadow(0px 0px 0px var(--highlight))}.searchResultSeparator:hover{color:var(--highlight);border-bottom:2px solid var(--highlight);filter:drop-shadow(0px 0px 2.5px var(--highlight))}.toggleCheat{--buttonColor:var(--toggleOff)}.toggleCheat.active{--buttonColor:var(--toggleOn)}.logMessage img{height:1em;align-self:center}.standing{display:flex;font-weight:800;align-items:center;position:relative;padding:5px 10px 5px 50px;border-radius:2.5px;background:var(--highlight2)}.standing:before{content:attr(data-place) ".";margin-right:10px}.standing::after{content:attr(data-value);flex:1;text-align:right;font-weight:100}.standing:hover{background:var(--standingColor);box-shadow:0 0 7.5px var(--standingColor)}.standingBlook{height:1.25em;align-self:center;position:absolute;left:10px}.favoriteButton,.favoriteButton>i{transition:.2s;display:grid;place-items:center;width:32px;height:32px}.favoriteButton{font-size:.8em;padding-left:5px;cursor:pointer}.favoriteButton:hover{color:#ff0}.favoriteButton>i{position:absolute;scale:0;transform-origin:50% 55%}.favoriteButton>i.filled{scale:1}.pathPage{cursor:pointer;color:var(--highlight)}[data-favorited=false],[data-favorites="0"]{display:none}
        [data-mode][data-name][data-description] {}`
            .replace(/\.([^0-9][\w-]+)/gm, (x, y) => "." + (classes[y] ??= randString(10)))
            .replace(/data-(\w+)/gm, (x, y) => "data-" + (datasets[y] ??= randString(10)));

        gui.className = classes.gui;


        gui.append(styles);

        function roundGamemodeBoxes() {
            // Select only the gamemode tiles via the obfuscated class name
            const gamemodes = gui.querySelectorAll("." + classes.gamemode);

            gamemodes.forEach(tile => {
                tile.style.borderRadius = "15px"; // clean rounded edges
                tile.style.overflow = "hidden"; // keeps images clipped cleanly
            });
        }
        // delay ensures elements exist
        setTimeout(roundGamemodeBoxes, 50);


        const sidebarShadow = document.createElement("div");
        sidebarShadow.className = classes.sidebarShadow;

        gui.appendChild(sidebarShadow);
        const credit = document.createElement("div");
        credit.className = classes.credit;


        const sidebar = document.createElement("div");
        sidebar.className = classes.sidebar;

        sidebar.append(credit);
        const guiContent = document.createElement("div");
        guiContent.className = classes.guiContent;

        const guiTopBar = document.createElement("div");
        guiTopBar.className = classes.guiTopBar;
        guiTopBar.style.cursor = "grab"; // Make it clear the top bar is draggable
        dragElement(guiTopBar, gui); // Allow dragging from the entire top bar

        const version = document.createElement("span");
        version.className = classes.version;
        version.innerText = "Tony-the-best - X-GUI " + versionName;
        guiTopBar.append(version);

        const style = document.createElement("style");
        style.textContent = `
.xgui-i {
  width: 16px;
  height: 16px;
  display: inline-block;
  background-repeat: no-repeat;
  background-position: center;
  background-size: 16px 16px;
  pointer-events: none;
}

/* MOVE <--> */
.xgui-move {
  background-image: url("data:image/svg+xml;utf8,\
<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='white'>\
<path d='M4 12l4-4v3h8V8l4 4-4 4v-3H8v3z'/>\
</svg>");
}

/* MINUS */
.xgui-min {
  background-image: url(\"data:image/svg+xml;utf8,\
<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='white'>\
<rect x='4' y='11' width='16' height='2'/>\
</svg>\");
}

/* FULLSCREEN */
.xgui-full {
  background-image: url(\"data:image/svg+xml;utf8,\
<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='white'>\
<path d='M4 4h6v2H6v4H4V4zm10 0h6v6h-2V6h-4V4zm6 10v6h-6v-2h4v-4h2zm-16 6h6v-2H6v-4H4v6z'/>\
</svg>\");
}

/* CLOSE X */
.xgui-close {
  background-image: url(\"data:image/svg+xml;utf8,\
<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' stroke='white' stroke-width='2' fill='none'>\
<line x1='4' y1='4' x2='20' y2='20'/>\
<line x1='20' y1='4' x2='4' y2='20'/>\
</svg>\");
}
`;
        document.head.appendChild(style);




        const controls = document.createElement("div");
        controls.className = classes.controls;

        // MOVE
        const moveControl = document.createElement("div");
        moveControl.style.cursor = "grab";
        moveControl.innerHTML = `<i class="xgui-i xgui-move"></i>`;
        dragElement(moveControl, gui);

        // MINIMIZE
        const minimizeControl = document.createElement("div");
        minimizeControl.minimized = false;
        let hideAnimation = false;

        function setMinIcon(min) {
            minimizeControl.innerHTML =
                `<i class="xgui-i ${min ? "xgui-min" : "xgui-full"}"></i>`;
        }
        setMinIcon(true);

        minimizeControl.onclick = () => {
            if (hideAnimation) return;
            hideAnimation = true;

            const hidden = minimizeControl.minimized;
            setMinIcon(hidden);

            gui.animate(
                [{
                        width: hidden ? "122px" : "800px",
                        height: hidden ? "27px" : "500px",
                        left: gui.style.left
                    },
                    {
                        width: hidden ? "800px" : "122px",
                        height: hidden ? "500px" : "27px",
                        left: `${parseInt(gui.style.left) + (hidden ? -678 : 678)}px`
                    }
                ], {
                    duration: 200,
                    easing: "ease"
                }
            );

            gui.style.width = hidden ? "800px" : "122px";
            gui.style.height = hidden ? "500px" : "27px";

            setTimeout(() => {
                for (const child of gui.children) {
                    if (child === controls) continue;
                    if (hidden) child.style.display = child._display;
                    else {
                        child._display = child.style.display;
                        child.style.display = "none";
                    }
                }
                hideAnimation = false;
            }, hidden ? 200 : 0);

            gui.style.left = `${parseInt(gui.style.left) + (hidden ? -678 : 678)}px`;
            minimizeControl.minimized = !hidden;
        };

        // CLOSE
        const closeControl = document.createElement("div");
        closeControl.innerHTML = `<i class="xgui-i xgui-close"></i>`;
        closeControl.onclick = () => {
            // Check if animations are enabled
            const animationsEnabled = getCookieValue("animationsEnabled");
            
            if (animationsEnabled) {
                // Add fade out animation before closing
                const animationDuration = 0.3; // 300ms
                gui.style.animation = `guiFadeOut ${animationDuration}s ease-out forwards`;
                gui.style.pointerEvents = 'none'; // Prevent interaction during animation
                setTimeout(() => {
                    gui.remove();
                }, animationDuration * 1000);
            } else {
                // No animation, immediately close
                gui.remove();
            }
        };

        // APPEND
        controls.append(moveControl, minimizeControl, closeControl);
        gui.appendChild(controls);




        // ======= PERSISTENCE =======
        const PERSIST_KEY = "xgui_state_v4";
        const SHIFT = 678; // minimize offset

        function saveGUIState() {
            try {
                if (gui.dataset.mobileMode === "true") return; // skip in mobile mode
                const rect = gui.getBoundingClientRect();
                const isMin = minimizeControl.minimized;
                let left = parseInt(gui.style.left) || rect.left;
                let top = parseInt(gui.style.top) || rect.top;
                if (isMin) left -= SHIFT;
                const state = {
                    left,
                    top,
                    minimized: isMin
                };
                document.cookie = PERSIST_KEY + "=" + encodeURIComponent(JSON.stringify(state)) + "; path=/; domain=.blooket.com; expires=Tue, 19 Jan 2038 03:14:07 GMT";
            } catch {}
        }

        function loadGUIState() {
            try {
                if (gui.dataset.mobileMode === "true") return {}; // skip in mobile mode
                const m = document.cookie.match(new RegExp(PERSIST_KEY + "=([^;]+)"));
                return m ? JSON.parse(decodeURIComponent(m[1])) : {};
            } catch {
                return {};
            }
        }

        // Restore position and minimized state
        (async function restoreGUI() {
            while (!gui || !minimizeControl || !moveControl || gui.children.length < 2) {
                await new Promise(r => setTimeout(r, 25));
            }

            if (gui.dataset.mobileMode === "true") return; // skip in mobile mode

            const s = loadGUIState();
            if (s.left || s.top) {
                gui.style.width = "800px";
                gui.style.height = "500px";
                gui.style.left = s.left + "px";
                gui.style.top = s.top + "px";
                await new Promise(r => setTimeout(r, 20));
                if (s.minimized) minimizeControl.onclick(); // trigger minimize animation
            }
        })();

        // Save after drag
        document.addEventListener("pointerup", () => {
            if (gui.dataset.mobileMode === "true") return;
            setTimeout(saveGUIState, 30);
        });
        // Save before unload
        window.addEventListener("beforeunload", () => {
            if (gui.dataset.mobileMode === "true") return;
            saveGUIState();
        });



        const gamemodesPage = document.createElement("div");
        gamemodesPage.className = classes.gamemodesPage;

        const gamemodesList = document.createElement("div");
        gamemodesList.className = classes.noScroll + " " + classes.gamemodesList;

        const path = [
            ["Gamemodes", gamemodesPage]
        ];

        // Global animation settings
        window.xguiAnimationsEnabled = true; // Default to true
        const getCookieValue = (name) => {
            const cookieValue = getCookie(name);
            return cookieValue === null ? true : cookieValue === "true";
        };
        // Check if animations are enabled from cookie
        setTimeout(() => {
            window.xguiAnimationsEnabled = getCookieValue("animationsEnabled");
        }, 10);

        const pathText = document.createElement("div");
        pathText.className = classes.pathText;

        path.createPage = function(name, index, current) {
            const page = document.createElement("span");

            page.innerText = name;
            if (!current) page.className = classes.pathPage;
            page.onclick = () => this.goto(index);
            return page;
        };
        path.updatePath = function() {
            pathText.innerHTML = "";
            pathText.append(this.createPage(this[0][0], 0, this.length == 1));
            for (let i = 1; i < this.length; i++) {
                pathText.append(" > ");
                pathText.append(this.createPage(this[i][0], i, this.length - 1 == i));
            }
            guiContent.innerHTML = "";
            const newPage = this[this.length - 1][1];
            guiContent.append(newPage);
            // Add page transition animation if enabled
            if (window.xguiAnimationsEnabled && newPage) {
                newPage.style.animation = "pageIn 0.3s ease-out";
            } else if (newPage) {
                // Clear animation if disabled
                newPage.style.animation = "none";
            }
            this[this.length - 1][1]?.onPath?.();
        };
        path.push = function(key, page) {
            Array.prototype.push.call(this, [key, page]);
            this.updatePath();
            return this.length;
        };

        path.goto = function(index) {
            while (this.length - 1 > index) this.pop();
            this.updatePath();
        };

        path.sidebar = function(key, page) {
            while (this.length > 0) this.pop();
            return this.push(key, page);
        };

        const leaderboardPage = document.createElement("div");
        leaderboardPage.className = classes.leaderboardPage;

        const leaderboardList = document.createElement("ul");
        leaderboardList.className = classes.noScroll + " " + classes.leaderboardList;

        leaderboardPage.append(leaderboardList);

        const logsPage = document.createElement("div");
        logsPage.className = classes.logsPage;

        const logMessages = document.createElement("ul");
        logMessages.className = classes.noScroll + " " + classes.logMessages;

        const clearLogsButton = document.createElement("div");
        clearLogsButton.className = classes.clearLogsButton;
        clearLogsButton.innerHTML = `<i class="fas fa-ban" style="line-height: 1"></i>`;

        logsPage.append(logMessages, clearLogsButton);

        let leaderboardPath;
        const Logs = {
            connection: null,
            standings: [],
            data: {},
            gamemodeData: {
                gold: {
                    sort: "g",
                },
                hack: {
                    sort: "cr",
                },
                fish: {
                    sort: "w",
                },
                pirate: {
                    sort: "d",
                },
                defense2: {
                    sort: "d",
                },
                brawl: {
                    sort: "xp",
                    upgrades: {
                        egg: "Rapid Eggs",
                        nut: "Crazy Acorns",
                        slime: "Bouncing Slime",
                        jesterBall: "Juggling Spheres",
                        horseshoe: "Revolving Horseshoes",
                        shell: "Rebounding Shell",
                        pizza: "Boomerang Pizza",
                        banana: "Curving Banana",
                        arrow: "Speeding Arrows",
                        peacock: "Peacock Feathers",
                        bone: "Whirling Bones",
                        bee: "Buzzing Bees",
                        bubble: "Booming Bubbles",
                        card: "Slicing Cards",
                        laser: "Rapid-fire Lasers",
                        darkEnergy: "Dark Energy",
                        syrup: "Sticky Syrup",
                        birdFeather: "Flying Feathers",
                    },
                },
                dino: {
                    sort: "f",
                },
                royale: {
                    sort: "e",
                },
                defense: {
                    sort: "d",
                },
                cafe: {
                    sort: "ca",
                },
                factory: {
                    sort: "ca",
                    glitches: {
                        lb: "Lunch Break",
                        as: "Ad Spam",
                        e37: "Error 37",
                        nt: "Night Time",
                        lo: "#LOL",
                        j: "Jokester",
                        sm: "Slow Mo",
                        dp: "Dance Party",
                        v: "Vortex",
                        r: "Reverse",
                        f: "Flip",
                        m: "Micro"
                    },
                },
                racing: {
                    sort: "pr",
                },
                rush: {
                    sort: "bs",
                },
                classic: {
                    sort: "p",
                },
                tower: {},
                kingdom: {},
                toy: {
                    sort: "t",
                    sabotages: {
                        c: "Oh Canada",
                        b: "Blizzard",
                        f: "Fog Spell",
                        d: "Dark & Dusk",
                        w: "Howling Wind",
                        g: "Gift Time!",
                        t: "TREES",
                        s: "Snow Plow",
                        fr: "Use The Force"
                    },
                },
            },
            exponents: ["⁰", "¹", "²", "³", "⁴", "⁵", "⁶", "⁷", "⁸", "⁹"],
            formatNumber(input) {
                const [number, exponent] = (input = parseFloat(input)).toLocaleString(undefined, {
                    notation: "engineering"
                }).toLowerCase().split("e");
                if (exponent < 15) return number + ["", "k", "M", "B", "T"][exponent / 3];
                const [num, exp] = input.toLocaleString(undefined, {
                    notation: "scientific"
                }).toLowerCase().split("e");
                return num + " \xd7 10" + exp.split("").reduce((a, b) => a + Logs.exponents[b], "");
            },
            leaderboardCache: {},
            createStandingElement(name) {
                const element = document.createElement("li");
                element.className = classes.standing;
                element.innerText = name;
                const blook = document.createElement("img");
                blook.className = classes.standingBlook;
                element.prepend(blook);
                return (Logs.leaderboardCache[name] = element);
            },
            setLeaderboard(standings) {
                if (standings.length > 0) leaderboardPath.style.display = "flex";
                leaderboardList.innerHTML = "";
                let place = 1;
                let blookInfo;
                for (let i = 0; i < standings.length; i++) {
                    const standing = standings[i];
                    const standingEl = Logs.leaderboardCache[standing.name] || Logs.createStandingElement(standing.name);
                    standingEl.firstChild.src = (blookInfo = Logs.blookData[Logs.data[standing.name]?.b || "Black"]).url;
                    standingEl.style.setProperty("--standingColor", blookInfo.color);
                    standingEl.dataset[datasets.value] = Logs.formatNumber(standing.value);
                    if (standings[i - 1]?.value != standings[i].value) place = i + 1;
                    standingEl.dataset[datasets.place] = place;
                    leaderboardList.append(standingEl);
                }
            },
            blookData: null,
            fetchBlooks() {
                return (
                    Logs.blookData ??
                    new Promise((r) => {
                        var i = document.createElement("iframe");
                        i.style.display = "none";
                        var s = document.createElement("script");
                        s.type = "module";
                        s.src = document.querySelector("script[src*='ac.blooket.com']").src + "?" + Date.now();
                        const a = document.createElement("div");
                        a.id = "app";
                        let blooks = {};
                        document.body.appendChild(i);
                        let finish;
                        i.contentWindow.Object.prototype.hasOwnProperty.call = function(a, b) {
                            if (a[b]?.rarity && a in blooks == false) Object.assign(blooks, a);
                            finish ??= setTimeout(() => {
                                document.body.removeChild(i);
                                r((Logs.blookData = blooks));
                            });
                            return Object.prototype.hasOwnProperty.call(a, b);
                        };
                        i.contentDocument.body.appendChild(a);
                        i.contentDocument.body.appendChild(s);
                    })
                );
            },
            async connect() {
                try {
                    const stateNode = getStateNode();
                    if (!stateNode?.props?.liveGameController?._liveGameCode) return false;
                    Logs.connection = await stateNode.props.liveGameController.getDatabaseRef("c");
                    if (!Logs.connection) return false;
                    await Logs.fetchBlooks();
                    const gamemode = Logs.getGamemode();
                    Logs.connection.on("value", (snapshot) => {
                        const players = snapshot.val() || {};
                        let added;
                        if (!players || !(added = Logs.diffObjects(Logs.data, players))) return;
                        Logs.data = players;
                        if (Logs.gamemodeData[gamemode].sort) {
                            Logs.standings = Object.entries(players)
                                .map(([name, data]) => ({
                                    name,
                                    blook: data.b,
                                    value: data[Logs.gamemodeData[gamemode].sort] || 0
                                }))
                                .sort((a, b) => b.value - a.value);
                            Logs.setLeaderboard(Logs.standings);
                        }
                        try {
                            let addedPlayer;
                            switch (gamemode) {
                                case "brawl":
                                    for (const player in added) {
                                        if (!(addedPlayer = added[player]).up) continue;
                                        const upgrade = addedPlayer.up.split(":");
                                        if (upgrade.length == 2 && upgrade[0] in Logs.gamemodeData.brawl.upgrades) Logs.addAlert(player, `upgraded ${Logs.gamemodeData.brawl.upgrades[upgrade[0]]} to level ${upgrade[1]}`);
                                    }
                                    break;
                                case "gold":
                                    for (const player in added) {
                                        if (!(addedPlayer = added[player]).tat) continue;
                                        const [tat, amount] = addedPlayer.tat.split(":");
                                        if (amount == "swap") Logs.addAlert(player, `just swapped ${document.querySelector("[src*='assets/candy']") ? "candy" : "gold"} with ${tat}`);
                                        else Logs.addAlert(player, `just took ${Logs.formatNumber(parseInt(amount))} ${document.querySelector("[src*='assets/candy']") ? "candy" : "gold"} from ${tat}`);
                                    }
                                    break;
                                case "toy":
                                    for (const player in added) {
                                        if ((addedPlayer = added[player]).s) Logs.addAlert(player, `sabotaged with "${Logs.gamemodeData.toy.sabotages[addedPlayer.s]}"`);
                                        else if (addedPlayer.tat) {
                                            const [tat, amount] = addedPlayer.tat.split(":");
                                            if (amount == "swap") Logs.addAlert(player, `just swapped toys with ${tat}`);
                                            else Logs.addAlert(player, `just took ${Logs.formatNumber(parseInt(amount))} toy${amount == 1 ? "" : "s"} from ${tat}`);
                                        }
                                    }
                                    break;
                                case "hack":
                                    for (const player in added) {
                                        if (!(addedPlayer = added[player]).tat) continue;
                                        const [tat, amount] = addedPlayer.tat.split(":");
                                        Logs.addAlert(player, `just took ${Logs.formatNumber(parseInt(amount))} crypto from ${tat}`);
                                    }
                                    break;
                                case "pirate":
                                    for (const player in added) {
                                        if (!(addedPlayer = added[player]).tat) continue;
                                        const [tat, amount] = addedPlayer.tat.split(":");
                                        Logs.addAlert(player, `just took ${Logs.formatNumber(parseInt(amount))} doubloons from ${tat}`);
                                    }
                                    break;
                                case "defense2":
                                    for (const player in added) {
                                        if (!(addedPlayer = added[player]).r) continue;
                                        Logs.addAlert(player, `just completed Round ${addedPlayer.r}!`);
                                    }
                                    break;
                                case "fishing":
                                    for (const player in added) {
                                        if ((addedPlayer = added[player]).f == "Frenzy") Logs.addAlert(player, `just started a frenzy`);
                                        else if (addedPlayer.s) Logs.addAlert(player, `just sent a ${addedPlayer.f} distraction`);
                                    }
                                    break;
                                case "dino":
                                    for (const player in added) {
                                        if (!(addedPlayer = added[player]).tat) continue;
                                        const [tat, caught] = addedPlayer.tat.split(":");
                                        if (caught == "true") Logs.addAlert(player, `just caught ${tat} CHEATING!`);
                                        else Logs.addAlert(player, `investigated ${tat}`);
                                    }
                                    break;
                                case "cafe":
                                    for (const player in added) {
                                        if (!(addedPlayer = added[player]).up) continue;
                                        const [upgrade, level] = addedPlayer.up.split(":");
                                        if (level) Logs.addAlert(player, `upgraded ${upgrade} to level ${level}`);
                                    }
                                    break;
                                case "factory":
                                    for (const player in added) {
                                        if ((addedPlayer = added[player]).g) Logs.addAlert(player, `activated the ${Logs.gamemodeData.factory.glitches[addedPlayer.g]} glitch!`);
                                        else if (addedPlayer.s) {
                                            const [amount, synergy] = addedPlayer.s.split("-");
                                            Logs.addAlert(player, `has a ${amount} ${synergy} synergy!`);
                                        } else if (addedPlayer.t) Logs.addAlert(player, `now has 10 Blooks!`);
                                    }
                                    break;
                            }
                        } catch (e) {
                            console.error(e);
                            Logs.addLog("Error adding an alert", "red");
                        }
                    });
                    return true;
                } catch (e) {
                    console.warn(e);
                    return false;
                }
            },
            diffObjects(obj1, obj2) {
                const changed = {};

                for (const key in obj1) {
                    if (!(key in obj2)) continue;
                    if (typeof obj1[key] === "object" && typeof obj2[key] === "object") {
                        const recChanged = Logs.diffObjects(obj1[key], obj2[key]);
                        if (recChanged && Object.keys(recChanged).length !== 0) changed[key] = recChanged;
                    } else if (JSON.stringify(obj1[key]) !== JSON.stringify(obj2[key])) changed[key] = obj2[key];
                }

                for (const key in obj2)
                    if (!(key in obj1)) changed[key] = obj2[key];

                if (Object.keys(changed).length == 0) return null;
                return changed;
            },
            getGamemode() {
                const gamemode = getStateNode().props?.client?.type;
                if (typeof gamemode == "string") return gamemode.toLowerCase();
                switch (window.location.pathname) {
                    case "/play/gold":
                    case "/play/gold/final":
                    case "/gold/play/landing":
                        return "gold";
                    case "/play/hack":
                    case "/play/hack/final":
                    case "/hack/play/landing":
                        return "hack";
                    case "/play/fishing":
                    case "/play/fishing/final":
                    case "/fish/play/landing":
                        return "fish";
                    case "/play/pirate":
                    case "/play/pirate/final":
                    case "/pirate/play/landing":
                        return "pirate";
                    case "/play/defense2/load":
                    case "/play/defense2":
                    case "/play/defense2/final":
                    case "/defense2/play/landing":
                        return "defense2";
                    case "/play/brawl/start":
                    case "/play/brawl/settings":
                    case "/play/brawl":
                    case "/play/brawl/final":
                    case "/brawl/play/landing":
                        return "brawl";
                    case "/play/dino":
                    case "/play/dino/final":
                    case "/dino/play/landing":
                        return "dino";
                    case "/play/battle-royale/match/preview":
                    case "/play/battle-royale/question":
                    case "/play/battle-royale/answer/sent":
                    case "/play/battle-royale/answer/result":
                    case "/play/battle-royale/match/result":
                    case "/play/battle-royale/final":
                    case "/royale/play/landing":
                        return "royale";
                    case "/defense/load":
                    case "/defense":
                    case "/defense/final":
                    case "/defense/play/landing":
                        return "defense";
                    case "/cafe/load":
                    case "/cafe":
                    case "/cafe/shop":
                    case "/cafe/final":
                    case "/cafe/play/landing":
                        return "cafe";
                    case "/play/factory":
                    case "/play/factory/settings":
                    case "/play/factory/start":
                    case "/play/factory/final":
                    case "/factory/play/landing":
                        return "factory";
                    case "/play/racing":
                    case "/play/racing/final":
                    case "/racing/play/landing":
                        return "racing";
                    case "/play/rush":
                    case "/play/rush/final":
                    case "/rush/play/landing":
                        return "rush";
                    case "/play/classic/get-ready":
                    case "/play/classic/question":
                    case "/play/classic/answer/sent":
                    case "/play/classic/answer/result":
                    case "/play/classic/standings":
                    case "/play/classic/final":
                    case "/classic/play/landing":
                        return "classic";
                    case "/tower/load":
                    case "/tower/start":
                    case "/tower/map":
                    case "/tower/battle":
                    case "/tower/rest":
                    case "/tower/risk":
                    case "/tower/shop":
                    case "/tower/victory":
                    case "/tower/final":
                    case "/tower/play/landing":
                        return "tower";
                    case "/kingdom/start":
                    case "/kingdom":
                    case "/kingdom/final":
                    case "/kingdom/play/landing":
                        return "kingdom";
                    case "/play/toy":
                    case "/play/toy/final":
                    case "/toy/play/landing":
                        return "toy";
                }
                return "";
            },
            sanitizer: document.createElement("div"),
            sanitizeText(text) {
                Logs.sanitizer.textContent = text;
                return Logs.sanitizer.innerHTML;
            },
            addAlert(name, message) {
                const element = document.createElement("li");
                element.className = classes.logMessage;
                const span = document.createElement("span");
                Logs.lastLog.setTime(Date.now());
                span.innerHTML = `<strong>${Logs.sanitizeText(name)}</strong>&nbsp;${Logs.sanitizeText(message)}<span style="opacity: 50%; flex: 1; text-align: right;">${parseTime(Logs.lastLog)}</span>`;
                let blook;
                if ((blook = Logs.blookData?.[Logs.data[name].b])) {
                    const img = document.createElement("img");
                    img.src = blook.url;
                    span.prepend(img);
                }
                element.append(span);
                logMessages.prepend(element);
            },
            lastLog: new Date(),
            addLog(message, color) {
                const element = document.createElement("li");
                element.className = classes.logMessage;
                const span = document.createElement("span");
                if (color) span.style.color = color;
                span.style.display = "flex";
                Logs.lastLog.setTime(Date.now());
                span.innerHTML = "[LOG] " + Logs.sanitizeText(message) + `<span style="opacity: 50%; flex: 1; text-align: right;">${parseTime(Logs.lastLog)}</span>`;
                element.append(span);
                logMessages.prepend(element);
            },
            interval: null,
        };

        if (window.location.host != "dashboard.blooket.com" && window.location.host != "blooket.com") Logs.interval = setInterval(() => Logs.connect().then((connected) => connected && clearInterval(Logs.interval)), 5000);

        clearLogsButton.onclick = () => {
            clearLogsButton.animate([{
                rotate: "0deg"
            }, {
                rotate: "360deg"
            }], {
                duration: 750,
                easing: "ease"
            });
            logMessages.innerHTML = "";
            Logs.addLog("Cleared Logs");
        };

        // Helper function to create a function from user code
        // Handles various input formats: function declarations, arrow functions, IIFEs, or raw code
        function createFunctionFromCode(code, ...params) {
            try {
                // Trim the code
                code = code.trim();
                
                // Check if it's an IIFE (Immediately Invoked Function Expression)
                // Pattern: (function(...) {...})() or ((...) => {...})() or (() => {...})()
                const iifePattern = /^\(.*\)\(\);?$/s;
                if (iifePattern.test(code)) {
                    // Wrap the IIFE in a function that will execute it when called
                    // This allows us to store the IIFE and run it later
                    return new Function(code);
                }
                
                // Check if it's a complete function definition (function(...) { ... })
                if (code.startsWith('function')) {
                    // Extract the function by evaluating it
                    // Wrap in parentheses to make it an expression
                    return eval(`(${code})`);
                }
                
                // Check if it's an arrow function
                if (code.includes('=>')) {
                    // Wrap in parentheses to make it an expression
                    return eval(`(${code})`);
                }
                
                // Otherwise, treat it as a function body
                // If params are provided, use them
                if (params.length > 0) {
                    return new Function(...params, code);
                } else {
                    return new Function(code);
                }
            } catch (error) {
                console.error('Error creating function from code:', error);
                console.error('Code:', code);
                // Return a no-op function on error
                return function() {
                    console.error('Failed to execute custom module due to syntax error');
                };
            }
        }

        const cheats = {
            global: {
                img: "https://ac.blooket.com/dashclassic/assets/Blooket-M6jYh_hk.png",
                name: "Global",
                cheats: [{
                        name: "Auto Answer",
                        description: "Toggles auto answer on",
                        type: "toggle",
                        enabled: false,
                        data: null,
                        run: function() {
                            if (!this.enabled) {
                                this.enabled = true;
                                this.data = setInterval(() => {
                                    const stateNode = getStateNode();
                                    const Question = stateNode.state.question || stateNode.props.client.question;
                                    if (stateNode.state.question.qType != "typing") {
                                        if (stateNode.state.stage != "feedback" && !stateNode.state.feedback) {
                                            let ind;
                                            for (ind = 0; ind < Question.answers.length; ind++) {
                                                let found = false;
                                                for (let j = 0; j < Question.correctAnswers.length; j++)
                                                    if (Question.answers[ind] == Question.correctAnswers[j]) {
                                                        found = true;
                                                        break;
                                                    }
                                                if (found) break;
                                            }
                                            document.querySelectorAll("[class*='answerContainer']")[ind].click();
                                        } else document.querySelector("[class*='feedback'], [id*='feedback']").firstChild.click();
                                    } else Object.values(document.querySelector("[class*='typingAnswerWrapper']"))[1].children._owner.stateNode.sendAnswer(Question.answers[0]);
                                }, 50);
                            } else {
                                this.enabled = false;
                                clearInterval(this.data);
                                this.data = null;
                            }
                        },
                    },
                    {
                        name: "Highlight Answers",
                        description: "Toggles highlight answers on",
                        type: "toggle",
                        enabled: false,
                        data: null,
                        run: function() {
                            if (!this.enabled) {
                                this.enabled = true;
                                this.data = setInterval(() => {
                                    const stateNode = getStateNode();
                                    const Question = stateNode.state.question || stateNode.props.client.question;
                                    let ind = 0;
                                    while (ind < Question.answers.length) {
                                        let found = false;
                                        for (let j = 0; j < Question.correctAnswers.length; j++)
                                            if (Question.answers[ind] == Question.correctAnswers[j]) {
                                                found = true;
                                                break;
                                            }
                                        ind++;
                                        document.querySelector("[class*='answersHolder'] :nth-child(" + ind + ") > div").style.backgroundColor = found ? "rgb(0, 207, 119)" : "rgb(189, 15, 38)";
                                    }
                                }, 50);
                            } else {
                                this.enabled = false;
                                clearInterval(this.data);
                                this.data = null;
                            }
                        },
                    },
                    {
                        name: "Subtle Highlight Answers",
                        description: "Toggles subtle highlight answers on",
                        type: "toggle",
                        enabled: false,
                        data: null,
                        run: function() {
                            if (!this.enabled) {
                                this.enabled = true;
                                this.data = setInterval(() => {
                                    const stateNode = getStateNode();
                                    const Question = stateNode.state.question || stateNode.props.client.question;
                                    let ind = 0;
                                    while (ind < Question.answers.length) {
                                        let j = 0;
                                        let found = false;
                                        while (j < Question.correctAnswers.length) {
                                            if (Question.answers[ind] == Question.correctAnswers[j]) {
                                                found = true;
                                                break;
                                            }
                                            j++;
                                        }
                                        ind++;
                                        if (found) document.querySelector("[class*='answersHolder'] :nth-child(" + ind + ") > div").style.boxShadow = "unset";
                                    }
                                }, 50);
                            } else {
                                this.enabled = false;
                                clearInterval(this.data);
                                this.data = null;
                            }
                        },
                    }, {
                        name: "Learn Auto Answer",
                        description: "Toggles Learn Auto Answer on. This version works in the modes that auto answer doesnt work in, but can only learn answers if you've seen them before.",
                        type: "toggle",
                        enabled: false,
                        data: null,
                        run: function() {
                            if (!this.enabled) {
                                this.enabled = true;
                                (() => {
                                    console.log("🧠 Learn Auto Answer v3.3\n");

                                    if (!window.answerDatabase) {
                                        window.answerDatabase = {};
                                    }

                                    function autoContinue() {
                                        const feedbackContainer = document.querySelector('[class*="feedbackContainer"]');
                                        const feedbackText = document.querySelector('[class*="feedbackText"]');
                                        const isFeedback = feedbackContainer || (feedbackText && feedbackText.offsetParent !== null);

                                        if (isFeedback) {
                                            if (feedbackContainer) feedbackContainer.click();
                                            else document.body.click();

                                            const event = new KeyboardEvent('keydown', {
                                                key: 'Enter', code: 'Enter', keyCode: 13, which: 13, bubbles: true
                                            });
                                            document.dispatchEvent(event);
                                        }
                                    }

                                    function learn() {
                                        const wrappers = document.querySelectorAll('[class*="questionWrapper"]');

                                        wrappers.forEach(wrapper => {
                                            const questionTextEl = wrapper.querySelector('[class*="questionText"]');
                                            if (!questionTextEl) return;

                                            let questionMedia = wrapper.querySelector('[class*="questionImage"]');
                                            let qMediaSrc = questionMedia ? questionMedia.src : "none";

                                            let questionMath = wrapper.querySelector('[class*="mq-selectable"]');
                                            let qMathText = questionMath ? questionMath.innerText.trim() : "none";

                                            const question = questionTextEl.textContent.trim() + " " + qMediaSrc + " " + qMathText;

                                            const correctBtn = Array.from(wrapper.querySelectorAll('[class*="answerButton"]')).find(btn =>
                                                btn.innerHTML.includes('fa-check') ||
                                                (btn.style.backgroundColor && btn.style.backgroundColor.includes('rgb(139, 220, 111)')) ||
                                                (btn.querySelector('[class*="answerFront"]') && btn.querySelector('[class*="answerFront"]').style.backgroundColor.includes('rgb(139, 220, 111)'))
                                            );

                                            if (correctBtn) {
                                                const textEl = correctBtn.querySelector('[class*="answerText"]');
                                                const mathEl = correctBtn.querySelector('[class*="mq-selectable"]');

                                                const answer = textEl ? textEl.textContent.trim() : (mathEl ? mathEl.innerText.trim() : null);

                                                if (answer && !window.answerDatabase[question]) {
                                                    window.answerDatabase[question] = [answer];
                                                    console.log(`✓ Learned (MC): "${question}" → "${answer}"`);
                                                }
                                            }

                                            const rawTypingEls = Array.from(wrapper.querySelectorAll('[class*="typingFeedbackAnswer"]'));
                                            const realTypingAnswers = rawTypingEls.filter(el => {
                                                const cls = el.getAttribute('class') || "";
                                                return !cls.includes('Answers') && !cls.includes('Icon');
                                            });

                                            if (realTypingAnswers.length > 0) {
                                                const answer = realTypingAnswers[0].textContent.trim();
                                                if (!window.answerDatabase[question]) {
                                                    window.answerDatabase[question] = [answer];
                                                    console.log(`✓ Learned (Typing): "${question}" → "${answer}"`);
                                                }
                                            }
                                        });
                                    }

                                    function answer() {
                                        const wrappers = document.querySelectorAll('[class*="questionWrapper"]');
                                        if (wrappers.length === 0) return;

                                        let activeWrapper = wrappers[wrappers.length - 1];
                                        const questionTextEl = activeWrapper.querySelector('[class*="questionText"]');
                                        if (!questionTextEl) return;

                                        let questionMedia = activeWrapper.querySelector('[class*="questionImage"]');
                                        let qMediaSrc = questionMedia ? questionMedia.src : "none";
                                        let questionMath = activeWrapper.querySelector('[class*="mq-selectable"]');
                                        let qMathText = questionMath ? questionMath.innerText.trim() : "none";

                                        const question = questionTextEl.textContent.trim() + " " + qMediaSrc + " " + qMathText;

                                        if (window.answerDatabase[question]) {
                                            const knownAnswer = window.answerDatabase[question][0];

                                            const buttons = activeWrapper.querySelectorAll('[class*="answerButton"]');
                                            for (const btn of buttons) {
                                                const textEl = btn.querySelector('[class*="answerText"]');
                                                const mathEl = btn.querySelector('[class*="mq-selectable"]');
                                                const btnText = textEl ? textEl.textContent.trim() : (mathEl ? mathEl.innerText.trim() : "");

                                                if (btnText === knownAnswer && !btn.className.includes('Disabled')) {
                                                    console.log(`🎯 Answering (MC): "${question}"`);
                                                    btn.click();
                                                    return;
                                                }
                                            }

                                            const input = activeWrapper.querySelector('input[class*="typingAnswerInput"]');
                                            if (input && !input.disabled) {
                                                if (input.value !== knownAnswer) {
                                                    console.log(`🎯 Typing: "${knownAnswer}"`);
                                                    const setter = Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype, "value").set;
                                                    setter.call(input, knownAnswer);
                                                    input.dispatchEvent(new Event('input', { bubbles: true }));
                                                    input.dispatchEvent(new Event('change', { bubbles: true }));
                                                }

                                                const submitBtn = activeWrapper.querySelector('button[class*="typingAnswerButton"]');
                                                if (submitBtn && (!submitBtn._lastClick || Date.now() - submitBtn._lastClick > 200)) {
                                                    submitBtn.click();
                                                    submitBtn._lastClick = Date.now();
                                                }
                                            }
                                        }
                                    }

                                    this.data = setInterval(() => {
                                        autoContinue();
                                        learn();
                                        answer();
                                    }, 50);

                                    console.log("✅ Script Active.");
                                })();
                            } else {
                                this.enabled = false;
                                clearInterval(this.data);
                                this.data = null;
                            }
                        },
                    }, {
                        name: "Learn Highlight Answer",
                        description: "Toggles Learn Highlight Answer on. This version works in the modes that highlight answers doesnt work in, but can only learn answers if you've seen them before.",
                        type: "toggle",
                        enabled: false,
                        data: null,
                        run: function() {
                            if (!this.enabled) {
                                this.enabled = true;
                                (() => {
                                    console.log("🎨 Highlight Answers Active (Green = Correct, Red = Wrong)\n");

                                    if (!window.answerDatabase) {
                                        window.answerDatabase = {};
                                    }

                                    function autoContinue() {
                                        const feedbackContainer = document.querySelector('[class*="feedbackContainer"]');
                                        const feedbackText = document.querySelector('[class*="feedbackText"]');

                                        const isFeedback = feedbackContainer ||
                                                        (feedbackText && feedbackText.offsetParent !== null);

                                        if (isFeedback) {
                                            if (feedbackContainer) {
                                                feedbackContainer.click();
                                            } else {
                                                document.body.click();
                                            }

                                            const event = new KeyboardEvent('keydown', {
                                                key: 'Enter',
                                                code: 'Enter',
                                                keyCode: 13,
                                                which: 13,
                                                bubbles: true
                                            });
                                            document.dispatchEvent(event);
                                        }
                                    }

                                    function learn() {
                                        const wrappers = document.querySelectorAll('[class*="questionWrapper"]');

                                        wrappers.forEach(wrapper => {
                                            const questionTextEl = wrapper.querySelector('[class*="questionText"]');
                                            if (!questionTextEl) return;

                                            let questionMedia = wrapper.querySelector('[class*="questionImage"]');
                                            let qMediaSrc = questionMedia ? questionMedia.src : "none";

                                            let questionMath = wrapper.querySelector('[class*="mq-selectable"]');
                                            let qMathText = questionMath ? questionMath.innerText.trim() : "none";

                                            const question = questionTextEl.textContent.trim() + " " + qMediaSrc + " " + qMathText;

                                            const correctBtn = Array.from(wrapper.querySelectorAll('[class*="answerButton"]')).find(btn =>
                                                btn.innerHTML.includes('fa-check') ||
                                                (btn.style.backgroundColor && btn.style.backgroundColor.includes('rgb(139, 220, 111)')) ||
                                                (btn.querySelector('[class*="answerFront"]') && btn.querySelector('[class*="answerFront"]').style.backgroundColor.includes('rgb(139, 220, 111)'))
                                            );

                                            if (correctBtn) {
                                                const textEl = correctBtn.querySelector('[class*="answerText"]');
                                                const mathEl = correctBtn.querySelector('[class*="mq-selectable"]');

                                                const answer = textEl ? textEl.textContent.trim() : (mathEl ? mathEl.innerText.trim() : null);

                                                if (answer && !window.answerDatabase[question]) {
                                                    window.answerDatabase[question] = [answer];
                                                    console.log(`✓ Learned (MC): "${question}" → "${answer}"`);
                                                }
                                            }

                                            const rawTypingEls = Array.from(wrapper.querySelectorAll('[class*="typingFeedbackAnswer"]'));
                                            const realTypingAnswers = rawTypingEls.filter(el => {
                                                const cls = el.getAttribute('class') || "";
                                                return !cls.includes('Answers') && !cls.includes('Icon');
                                            });

                                            if (realTypingAnswers.length > 0) {
                                                const answer = realTypingAnswers[0].textContent.trim();
                                                if (!window.answerDatabase[question]) {
                                                    window.answerDatabase[question] = [answer];
                                                    console.log(`✓ Learned (Typing): "${question}" → "${answer}"`);
                                                }
                                            }
                                        });
                                    }

                                    function highlight() {
                                        const wrappers = document.querySelectorAll('[class*="questionWrapper"]');
                                        if (wrappers.length === 0) return;

                                        const activeWrapper = wrappers[wrappers.length - 1];

                                        if (activeWrapper.className.includes('slideOut')) return;

                                        const questionTextEl = activeWrapper.querySelector('[class*="questionText"]');
                                        if (!questionTextEl) return;

                                        let questionMedia = activeWrapper.querySelector('[class*="questionImage"]');
                                        let qMediaSrc = questionMedia ? questionMedia.src : "none";
                                        let questionMath = activeWrapper.querySelector('[class*="mq-selectable"]');
                                        let qMathText = questionMath ? questionMath.innerText.trim() : "none";

                                        const question = questionTextEl.textContent.trim() + " " + qMediaSrc + " " + qMathText;

                                        if (window.answerDatabase[question]) {
                                            const knownAnswer = window.answerDatabase[question][0];

                                            const buttons = activeWrapper.querySelectorAll('[class*="answerButton"]');
                                            if (buttons.length > 0) {
                                                buttons.forEach(btn => {
                                                    const textEl = btn.querySelector('[class*="answerText"]');
                                                    const mathEl = btn.querySelector('[class*="mq-selectable"]');
                                                    const btnText = textEl ? textEl.textContent.trim() : (mathEl ? mathEl.innerText.trim() : "");

                                                    const front = btn.querySelector('[class*="answerFront"]');
                                                    const back = btn.querySelector('[class*="answerBack"]');

                                                    const correctColor = '#00ff00';
                                                    const wrongColor = '#ff0000';

                                                    if (btnText === knownAnswer) {
                                                        if (front) {
                                                            front.style.backgroundColor = correctColor;
                                                            front.style.color = 'black';
                                                        }
                                                        if (back) back.style.backgroundColor = '#00cc00';
                                                    } else if (btnText) {
                                                        if (front) {
                                                            front.style.backgroundColor = wrongColor;
                                                            front.style.opacity = '0.7';
                                                        }
                                                        if (back) back.style.backgroundColor = '#cc0000';
                                                    }
                                                });
                                            }

                                            const input = activeWrapper.querySelector('input[class*="typingAnswerInput"]');
                                            if (input) {
                                                input.setAttribute('placeholder', `ANSWER: ${knownAnswer}`);

                                                const subHeader = activeWrapper.querySelector('[class*="typingAnswerSubheader"]');
                                                if (subHeader) {
                                                    subHeader.textContent = `ANSWER: ${knownAnswer}`;
                                                    subHeader.style.color = '#00ff00';
                                                    subHeader.style.fontWeight = 'bold';
                                                    subHeader.style.fontSize = '20px';
                                                }
                                            }
                                        }
                                    }

                                    this.data=setInterval(() => {
                                        autoContinue();
                                        learn();
                                        highlight();
                                    }, 100);

                                    console.log("✅ Highlighting Active. Play manually to populate database.");
                                })();

                            } else {
                                this.enabled = false;
                                clearInterval(this.data);
                                this.data = null;
                            }
                        },
                    }, {
                        name: "Learn Subtle Highlight Answers",
                        description: "Toggles auto answer on",
                        type: "toggle",
                        enabled: false,
                        data: null,
                        run: function() {
                            if (!this.enabled) {
                                this.enabled = true;
                                (() => {
                                    console.log("🕵️ Subtle Highlight Active (Lighter Shadow = Correct)\n");

                                    if (!window.answerDatabase) {
                                        window.answerDatabase = {};
                                    }

                                    function lightenColor(color) {
                                        const rgb = color.match(/\d+/g);
                                        if (!rgb) return color;

                                        const r = Math.round(parseInt(rgb[0]) + (255 - parseInt(rgb[0])) * 0.1);
                                        const g = Math.round(parseInt(rgb[1]) + (255 - parseInt(rgb[1])) * 0.1);
                                        const b = Math.round(parseInt(rgb[2]) + (255 - parseInt(rgb[2])) * 0.1);

                                        return `rgb(${r}, ${g}, ${b})`;
                                    }

                                    function autoContinue() {
                                        const feedbackContainer = document.querySelector('[class*="feedbackContainer"]');
                                        const feedbackText = document.querySelector('[class*="feedbackText"]');

                                        const isFeedback = feedbackContainer ||
                                                        (feedbackText && feedbackText.offsetParent !== null);

                                        if (isFeedback) {
                                            if (feedbackContainer) {
                                                feedbackContainer.click();
                                            } else {
                                                document.body.click();
                                            }

                                            const event = new KeyboardEvent('keydown', {
                                                key: 'Enter',
                                                code: 'Enter',
                                                keyCode: 13,
                                                which: 13,
                                                bubbles: true
                                            });
                                            document.dispatchEvent(event);
                                        }
                                    }

                                    function learn() {
                                        const wrappers = document.querySelectorAll('[class*="questionWrapper"]');

                                        wrappers.forEach(wrapper => {
                                            const questionTextEl = wrapper.querySelector('[class*="questionText"]');
                                            if (!questionTextEl) return;

                                            let questionMedia = wrapper.querySelector('[class*="questionImage"]');
                                            let qMediaSrc = questionMedia ? questionMedia.src : "none";

                                            let questionMath = wrapper.querySelector('[class*="mq-selectable"]');
                                            let qMathText = questionMath ? questionMath.innerText.trim() : "none";

                                            const question = questionTextEl.textContent.trim() + " " + qMediaSrc + " " + qMathText;

                                            const correctBtn = Array.from(wrapper.querySelectorAll('[class*="answerButton"]')).find(btn =>
                                                btn.innerHTML.includes('fa-check') ||
                                                (btn.style.backgroundColor && btn.style.backgroundColor.includes('rgb(139, 220, 111)')) ||
                                                (btn.querySelector('[class*="answerFront"]') && btn.querySelector('[class*="answerFront"]').style.backgroundColor.includes('rgb(139, 220, 111)'))
                                            );

                                            if (correctBtn) {
                                                const textEl = correctBtn.querySelector('[class*="answerText"]');
                                                const mathEl = correctBtn.querySelector('[class*="mq-selectable"]');

                                                const answer = textEl ? textEl.textContent.trim() : (mathEl ? mathEl.innerText.trim() : null);

                                                if (answer && !window.answerDatabase[question]) {
                                                    window.answerDatabase[question] = [answer];
                                                    console.log(`✓ Learned: "${question}" → "${answer}"`);
                                                }
                                            }

                                            const rawTypingEls = Array.from(wrapper.querySelectorAll('[class*="typingFeedbackAnswer"]'));
                                            const realTypingAnswers = rawTypingEls.filter(el => {
                                                const cls = el.getAttribute('class') || "";
                                                return !cls.includes('Answers') && !cls.includes('Icon');
                                            });

                                            if (realTypingAnswers.length > 0) {
                                                const answer = realTypingAnswers[0].textContent.trim();
                                                if (!window.answerDatabase[question]) {
                                                    window.answerDatabase[question] = [answer];
                                                    console.log(`✓ Learned: "${question}" → "${answer}"`);
                                                }
                                            }
                                        });
                                    }

                                    function highlight() {
                                        const wrappers = document.querySelectorAll('[class*="questionWrapper"]');
                                        if (wrappers.length === 0) return;

                                        const activeWrapper = wrappers[wrappers.length - 1];
                                        if (activeWrapper.className.includes('slideOut')) return;

                                        const questionTextEl = activeWrapper.querySelector('[class*="questionText"]');
                                        if (!questionTextEl) return;

                                        let questionMedia = activeWrapper.querySelector('[class*="questionImage"]');
                                        let qMediaSrc = questionMedia ? questionMedia.src : "none";
                                        let questionMath = activeWrapper.querySelector('[class*="mq-selectable"]');
                                        let qMathText = questionMath ? questionMath.innerText.trim() : "none";

                                        const question = questionTextEl.textContent.trim() + " " + qMediaSrc + " " + qMathText;

                                        if (window.answerDatabase[question]) {
                                            const knownAnswer = window.answerDatabase[question][0];

                                            const buttons = activeWrapper.querySelectorAll('[class*="answerButton"]');
                                            if (buttons.length > 0) {
                                                buttons.forEach(btn => {
                                                    const textEl = btn.querySelector('[class*="answerText"]');
                                                    const mathEl = btn.querySelector('[class*="mq-selectable"]');
                                                    const btnText = textEl ? textEl.textContent.trim() : (mathEl ? mathEl.innerText.trim() : "");

                                                    const back = btn.querySelector('[class*="answerBack"]');

                                                    if (back && btnText === knownAnswer) {
                                                        const currentColor = window.getComputedStyle(back).backgroundColor;
                                                        back.style.backgroundColor = lightenColor(currentColor);
                                                    }
                                                });
                                            }

                                            const input = activeWrapper.querySelector('input[class*="typingAnswerInput"]');
                                            if (input) {
                                                input.setAttribute('placeholder', knownAnswer);
                                            }
                                        }
                                    }

                                    this.data = setInterval(() => {
                                        autoContinue();
                                        learn();
                                        highlight();
                                    }, 100);

                                    console.log("✅ Subtle Highlight Active.");
                                })();


                            } else {
                                this.enabled = false;
                                clearInterval(this.data);
                                this.data = null;
                            }
                        },
                    },
                    {


                        name: "Freeze Leaderboard",
                        description: "Freezes the leaderboard on the host's screen",
                        type: "toggle",
                        enabled: !1,
                        data: null,
                        run: function() {
                            var e = Object.values(function e(t = document.querySelector("#app")) {
                                    return Object.values(t)[1]?.children?.[0]?._owner.stateNode ? t : e(t.querySelector(":scope>div"))
                                }
                                ())[1].children[0]._owner.stateNode;
                            if (this.enabled)
                                this.enabled = !1, clearInterval(this.data), this.data = null, e.props.liveGameController.removeVal(`c/${e.props.client.name}/tat`);
                            else {
                                this.enabled = !0;
                                let t = () => {
                                    e.props.liveGameController.setVal({
                                        path: `c/${e.props.client.name}/tat/Freeze`,
                                        val: "freeze"
                                    })
                                };
                                this.data = setInterval(t, 25)
                            }
                        }
                    }, {
                        name: "Anti Kick",
                        description: "Prevents the host from kicking you, Although cheats stop working and you can't win.",
                        type: "toggle",
                        enabled: false,
                        data: null,
                        run: function() {
                            const stateNode = getStateNode();
                            const lgc = stateNode?.props?.liveGameController;

                            if (!lgc) return alert("Not in a game.");

                            if (!this.enabled) {
                                // TURN ON
                                this.enabled = true;

                                const playerName = stateNode.props.client.name;
                                const savedBlook = stateNode.props.client.blook;

                                this.data = setInterval(() => {
                                    lgc.getDatabaseRef("c").once("value", (snap) => {
                                        const players = snap.val() || {};

                                        // Host kicked you → your entry removed
                                        if (!players[playerName]) {
                                            lgc.setVal({
                                                path: `c/${playerName}`,
                                                val: {
                                                    n: playerName,
                                                    b: savedBlook
                                                }
                                            });
                                        }
                                    });
                                }, 500);

                            } else {
                                // TURN OFF
                                this.enabled = false;
                                clearInterval(this.data);
                                this.data = null;
                            }
                        }
                    }, {



                        name: "Percent Auto Answer",
                        description: "Answers questions correctly or incorrectly depending on the goal grade given (Disable and re-enable to update goal)",
                        inputs: [{
                            name: "Target Grade",
                            type: "number",
                        }, ],
                        type: "toggle",
                        enabled: false,
                        data: null,
                        run: function(target) {
                            if (!this.enabled) {
                                this.enabled = true;
                                const stateNode = getStateNode();
                                this.data = setInterval(
                                    (TARGET) => {
                                        try {
                                            const question = stateNode.state.question || stateNode.props.client.question;
                                            if (stateNode.state.stage == "feedback" || stateNode.state.feedback) return document.querySelector('[class*="feedback"], [id*="feedback"]')?.firstChild?.click?.();
                                            else if (document.querySelector("[class*='answerContainer']") || document.querySelector("[class*='typingAnswerWrapper']")) {
                                                let correct = 0,
                                                    total = 0;
                                                for (let corrects in stateNode.corrects) correct += stateNode.corrects[corrects];
                                                for (let incorrect in stateNode.incorrects) total += stateNode.incorrects[incorrect];
                                                total += correct;
                                                const yes = total == 0 || Math.abs(correct / (total + 1) - TARGET) >= Math.abs((correct + 1) / (total + 1) - TARGET);
                                                if (stateNode.state.question.qType != "typing") {
                                                    const answerContainers = document.querySelectorAll("[class*='answerContainer']");
                                                    for (let i = 0; i < answerContainers.length; i++) {
                                                        const contains = question.correctAnswers.includes(question.answers[i]);
                                                        if (yes == contains) return answerContainers[i]?.click?.();
                                                    }
                                                    answerContainers[0].click();
                                                } else Object.values(document.querySelector("[class*='typingAnswerWrapper']"))[1].children._owner.stateNode.sendAnswer(yes ? question.answers[0] : Math.random().toString(36).substring(2));
                                            }
                                        } catch {}
                                    },
                                    100,
                                    (target ?? 100) / 100
                                );
                            } else {
                                this.enabled = false;
                                clearInterval(this.data);
                                this.data = null;
                            }
                        },
                    },
                    {
                        name: "Auto Answer",
                        description: "Click the correct answer for you",
                        run: function() {
                            const stateNode = getStateNode();
                            const Question = stateNode.state.question || stateNode.props.client.question;
                            if (stateNode.state.question.qType != "typing") {
                                if (stateNode.state.stage != "feedback" && !stateNode.state.feedback) {
                                    let ind;
                                    for (ind = 0; ind < Question.answers.length; ind++) {
                                        let found = false;
                                        for (let j = 0; j < Question.correctAnswers.length; j++)
                                            if (Question.answers[ind] == Question.correctAnswers[j]) {
                                                found = true;
                                                break;
                                            }
                                        if (found) break;
                                    }
                                    document.querySelectorAll("[class*='answerContainer']")[ind].click();
                                } else document.querySelector("[class*='feedback'], [id*='feedback']").firstChild.click();
                            } else Object.values(document.querySelector("[class*='typingAnswerWrapper']"))[1].children._owner.stateNode.sendAnswer(Question.answers[0]);
                        },
                    },
                    {
                        name: "Highlight Answers",
                        description: "Colors answers to be red or green highlighting the correct ones",
                        run: function() {
                            const stateNode = getStateNode();
                            const Question = stateNode.state.question || stateNode.props.client.question;
                            let ind = 0;
                            while (ind < Question.answers.length) {
                                let found = false;
                                for (let j = 0; j < Question.correctAnswers.length; j++)
                                    if (Question.answers[ind] == Question.correctAnswers[j]) {
                                        found = true;
                                        break;
                                    }
                                ind++;
                                document.querySelector("[class*='answersHolder'] :nth-child(" + ind + ") > div").style.backgroundColor = found ? "rgb(0, 207, 119)" : "rgb(189, 15, 38)";
                            }
                        },
                    },
                    {
                      name: "Free Folder!",
                            description: "Gives you plus perks like folders, does not unlock plus gamemodes! (ONLY WORKS ON THE ~MY SETS~ PAGE!)",
                            run: function () {

    const reactHandler = () => Object.values(document.querySelector('#app>div>div'))[1].children[0]._owner.stateNode;
    const component = reactHandler();

    if (!component) return console.error("React component not found!");

    component.getIsPlus = e => e();
    component.plus = true;

    if (component.props && component.props.user && component.props.user.data) {
        component.props.user.data.plan = "Plus";
        component.props.user.data.hasPlus = true;
        component.props.user.data.planName = "Plus";
    }

    component.setState({
        hasPlus: true,
        noFolder: false,
        noMerge: false,
        copying: false
    });

    console.log("Folders unlocked!");

                        },
                    },{


                        name: "Simulate Unlock",
                        description: "Simulates unlocking a certain blook",
                        inputs: [{
                            name: "Blook (Case Sensitive)"
                        }],
                        run: (unlockedBlook) => {
                            const stateNode = Object.values(document.querySelector("#app>div>div"))[1].children[0]._owner.stateNode;
                            stateNode.setState({
                                loadingPack: !1,
                                openPack: !0,
                                unlockedBlook,
                                newUnlock: !0,
                                canOpen: !1
                            });
                            setTimeout(() => stateNode.setState({
                                canOpen: !0
                            }), 200);
                        }
                    }, {
                        name: "Simulate Pack",
                        description: "Simulates unlocking a pack",
                        inputs: [{
                            name: "Pack",
                            type: "options",
                            options: () => [...document.querySelector("[class*=packsWrapper]")?.children]?.map(e => e.children[0].children[0].alt)
                        }],
                        run: async (packName) => {
                            let i = document.createElement('iframe');
                            document.body.append(i);
                            const alert = i.contentWindow.alert.bind(window);
                            i.remove();
                            if (window.location.pathname !== "/market") {
                                alert("You must be on the market page to run this cheat!");
                                return;
                            }
                            const stateNode = Object.values(document.querySelector("#app>div>div"))[1].children[0]._owner.stateNode;
                            const getProbs = (pack) => (new Promise(res => {
                                if (!Array.prototype.map2) {
                                    Array.prototype.map2 = Array.prototype.map;
                                }
                                Array.prototype.map = function() {
                                    if (typeof this[0]?.[1] == "number") {
                                        res(this);
                                        Array.prototype.map = Array.prototype.map2;
                                    }
                                    return Array.prototype.map2.apply(this, arguments);
                                }
                                var a = new(stateNode.constructor)();
                                a.state.currentPack = pack;
                                a.render();
                                res(null);
                            }));
                            async function pickRandom(pack) {
                                let probs = (await getProbs(pack));
                                const choice = pickW(probs.map(e => e[1]));
                                return probs[choice];
                            }

                            function pickW(a) {
                                let v = 0;
                                let sum = [];
                                const rand = Math.floor(Math.random() * a.reduce((a, b) => a + b, 0));
                                a.forEach(e => (sum.push(v), v += e));
                                return sum.map(e => rand < e).findLastIndex(e => e ? 0 : 1);
                            }
                            stateNode.setState({
                                loadingPack: !1,
                                openPack: !0,
                                unlockedBlook: (await pickRandom(packName))[0],
                                newUnlock: !0,
                                canOpen: !1
                            });
                            setTimeout(() => stateNode.setState({
                                canOpen: !0
                            }), 200);
                        }
                    }, {
                        name: "Spam Buy Blooks",
                        description: "Opens a box an amount of times",
                        inputs: [{
                                name: "Box",
                                type: "options",
                                options: () =>
                                    Array.from(document.querySelectorAll("[class*='packsWrapper'] > div")).reduce((a, b) => {
                                        b.querySelector("[class*='blookContainer'] > img") || a.push(b.querySelector("[class*='packImgContainer'] > img").alt);
                                        return a;
                                    }, []),
                            },
                            {
                                name: "Amount",
                                type: "number",
                            },
                            {
                                name: "Show Unlocks",
                                type: "options",
                                options: [{
                                        name: "Show Unlocks",
                                        value: true,
                                    },
                                    {
                                        name: "Don't Show Unlocks",
                                        value: false,
                                    },
                                ],
                            },
                        ],
                        run: async function(box, amountToOpen, alertBlooks) {
                            if (window.location.pathname.startsWith("/market")) {
                                const stateNode = getStateNode();
                                const prices = Array.prototype.reduce.call(
                                    document.querySelectorAll("[class*='packsWrapper'] > div"),
                                    (a, b) => {
                                        b.querySelector("[class*='blookContainer'] > img") || (a[b.querySelector("[class*='packImgContainer'] > img").alt] = parseInt(b.querySelector("[class*='packBottom']").textContent));
                                        return a;
                                    }, {}
                                );
                                box = box
                                    .split(" ")
                                    .map((str) => str.charAt(0).toUpperCase() + str.slice(1).toLowerCase())
                                    .join(" ");
                                const cost = prices[box];
                                if (!cost) return alert("I couldn't find that box!");

                                const canOpen = Math.floor(stateNode.state.tokens / cost);
                                if (canOpen <= 0) return alert("You do not have enough tokens!");
                                const amount = Math.min(canOpen, amountToOpen || 0);

                                const blooks = {},
                                    now = Date.now();

                                for (let i = 0; i < amount; i++) {
                                    await stateNode.buyPack(true, box);

                                    blooks[stateNode.state.unlockedBlook] ||= 0;
                                    blooks[stateNode.state.unlockedBlook]++;

                                    stateNode.startOpening();
                                    clearTimeout(stateNode.openTimeout);
                                    const rarity = stateNode.state.purchasedBlookRarity;

                                    stateNode.setState({
                                        canOpen: true,
                                        currentPack: "",
                                        opening: alertBlooks,
                                        doneOpening: alertBlooks,
                                        openPack: alertBlooks
                                    });
                                    clearTimeout(stateNode.canOpenTimeout);
                                    if (rarity == "Chroma") break;
                                }
                                await new Promise((r) => setTimeout(r));
                                alert(
                                    `(${Date.now() - now}ms) Results:\n${Object.entries(blooks)
                                        .map(([blook, amount]) => `    ${blook} ${amount}`)
                                        .join(`\n`)}`
                                );
                            } else alert("This can only be ran in the Market page.");
                        },
                    },
                    {

                        name: "Bypass Filter",
                        description: "Bypasses the name filter",
                        inputs: [{
                            name: "Text",
                            type: "text",
                        }],
                        run: function(e) {
                            var t,
                                a,
                                o;
                            let r;
                            a = function e(t) {
                                    for (var a = t.split(""), o = "", r = 0; r < a.length; r++)
                                        o += "\xad" + a[r];
                                    return o
                                }
                                (t = e),
                                r = document.createElement("iframe"),
                                document.body.appendChild(r),
                                window.alert = r.contentWindow.alert.bind(r.contentWindow),
                                (o = document.createElement("textarea")).value = a,
                                o.style.position = "fixed",
                                o.style.top = 0,
                                o.style.left = 0,
                                o.style.opacity = 0,
                                document.body.appendChild(o),
                                o.select(),
                                document.execCommand("copy"),
                                alert("Bypassed text copied to clipboard!"),
                                r.remove(),
                                document.body.removeChild(o)
                        }
                    }, {
                        name: "Use any Banner",
                        description: "Unlocked all banners",
                        inputs: [{
                            name: "Banner",
                            type: "options",
                            options: Object.entries({
                                Starter: "starter",
                                Fire: "fire",
                                "Tech Chip": "techChip",
                                Shamrocks: "shamrocks",
                                "Orange Ice Pop": "orangeIcePop",
                                Slime: "slime",
                                Sushi: "sushi",
                                "Falling Blocks": "fallingBlocks",
                                Racetrack: "racetrack",
                                "Football Field": "footballField",
                                "Ice Cream Sandwich": "iceCreamSandwich",
                                "Winter Landscape": "winterLandscape",
                                Leaves: "leaves",
                                "Music Class": "musicClass",
                                "Science Class": "scienceClass",
                                "Art Class": "artClass",
                                Clockwork: "clockwork",
                                "Hockey Rink": "hockeyRink",
                                "Outer Space": "outerSpace",
                                "Soccer Field": "soccerField",
                                Ice: "ice",
                                "Toaster Pastry": "toasterPastry",
                                "Fish Tank": "fishTank",
                                Theater: "theater",
                                Farm: "farm",
                                Spooky: "spooky",
                                "Spooky Cat": "spookyCat",
                                "Spooky Window": "spookyWindow",
                                Frankenstein: "frankenstein",
                                Ghosts: "ghosts",
                                Mummy: "mummy",
                                Spiders: "spiders",
                                Coffin: "coffin",
                                Pumpkins: "pumpkins",
                                "Christmas Tree": "christmasTree",
                                Chalkboard: "chalkboard",
                                Balloons: "balloons",
                                Skateboard: "skateboard",
                                Sunset: "sunset",
                                Tiger: "tiger",
                                "Pirate Map": "pirateMap",
                                Pencil: "pencil",
                                "Road Sign": "roadSign",
                                "Corn Dog": "cornDog",
                                Leaf: "leaf",
                                "Chili Pepper": "chiliPepper",
                                "Love Letter": "loveLetter",
                                Gifts: "gifts",
                                "Winter Train": "winterTrain",
                                "Winter Drive": "winterDrive",
                                Workbench: "workbench",
                                Harvest: "harvest",
                                Chocolate: "chocolate",
                                "Fall Picnic": "fallPicnic",
                                Bookshelf: "bookshelf",
                                "Easter Pattern": "easterPattern",
                                Carrot: "carrot",
                                "Easter Field": "easterField",
                                Garden: "garden",
                                Bakery: "bakery",
                                "Gummy Worm": "gummyWorm",
                                "Basketball Court": "basketballCourt",
                                "Flying Kite": "flyingKite",
                                "Hot Dog": "hotDog",
                                "Japanese Garden": "japaneseGarden",
                                Sandwich: "sandwich",
                                Ruler: "ruler",
                                "Ball Pit": "ballPit",
                                "Xylophone": "xylophone",
                                "Holiday Lights": "holidayLights",
                                "Ice Cream Truck": "iceCreamTruck",
                                "Holiday Gift Wrap": "holidayGiftWrap",
                                "Winter Sweater": "winterSweater",
                                "Holiday Ornaments": "holidayOrnaments",
                                Watermelon: "watermelon",
                                Baguette: "baguette",
                                Rollerblades: "rollerblades",
                                Surfboard: "surfboard",
                                Cookout: "cookout",
                                Comic: "comic",
                                Crayon: "crayon",
                                Lightning: "lightning",
                                Baseball: "baseball",
                                "Shamrock Coins": "shamrockCoins",
                                "End Of The Rainbow": "endRainbow",
                                "Easter Field": "easterField",
                                Marker: "marker",
                                Pizza: "pizza",
                                Leaf: "leaf",
                                "Alphabet Soup": "alphabetSoup"
                            }).map(([e, t]) => ({
                                name: e,
                                value: t
                            }))
                        }],
                        run: function(e) {
                            var t = document.createElement("iframe");

                            function a() {
                                return Object.values(document.querySelector("#app>div>div"))[1].children[0]._owner
                            }
                            document.head.appendChild(t),
                                window.alert = t.contentWindow.alert.bind(window),
                                window.prompt = t.contentWindow.prompt.bind(window),
                                t.remove(),
                                a().stateNode.props.liveGameController.setVal({
                                    path: "c/" + a().stateNode.props.client.name + "/bg",
                                    val: e
                                })
                        }
                    }, {
                        name: "Change Blook Ingame",
                        description: "Changes your blook",
                        inputs: [{
                            name: "Blook (case sensitive)",
                            type: "string",
                        }, ],
                        run: function(blook) {
                            let {
                                props
                            } = getStateNode();
                            props.liveGameController.setVal({
                                path: `c/${props.client.name}/b`,
                                val: (props.client.blook = blook)
                            });
                        },
                    },
                    {



                        name: "Free Player Slots",
                        description: "Allows more players to join if the game is full",
                        run: async () => {
                            let i = document.createElement('iframe');
                            document.body.append(i);
                            const alert = i.contentWindow.alert.bind(window);
                            i.remove();
                            const stateNode = Object.values(document.querySelector('#app>div>div'))[1].children[0]._owner.stateNode;
                            const players = await stateNode.props.liveGameController.getDatabaseVal("c");
                            let freed = 0;
                            if (!stateNode.state.blockedUsers) {
                                stateNode.state.blockedUsers = [];
                            }
                            async function wait(time) {
                                return new Promise(e => {
                                    setTimeout(e, time);
                                });
                            }
                            async function blockUser(name) {
                                if (stateNode.state.blockedUsers.includes(name)) {
                                    return;
                                }
                                const res = await fetch("https://fb.blooket.com/c/firebase/block", {
                                    headers: {
                                        "Content-Type": "application/json"
                                    },
                                    method: "POST",
                                    body: JSON.stringify({
                                        g: stateNode.props.host.id,
                                        u: name
                                    }),
                                    credentials: "include"
                                });
                                if (res.status !== 200) {
                                    return;
                                }
                                stateNode.state.blockedUsers.push(name);
                                freed++;
                                if (freed % parseInt("15") == 0) {
                                    await wait(600);
                                }
                                C.alerts?.[0].addLog("Freed user: " + name);
                            }
                            for (let i in players) {
                                await blockUser(i);
                            }
                            alert(`Freed slots: ${freed}`);
                        }
                    }, {

                        name: "Get Daily Rewards",
                        description: "Gets max daily tokens and xp",
                        run: async function() {
                            if (!window.location.href.includes("play.blooket.com")) alert("This cheat only works on play.blooket.com, opening a new tab."), window.open("https://play.blooket.com/");
                            else {
                                const gameId = [
                                    "60101da869e8c70013913b59",
                                    "625db660c6842334835cb4c6",
                                    "60268f8861bd520016eae038",
                                    "611e6c804abdf900668699e3",
                                    "60ba5ff6077eb600221b7145",
                                    "642467af9b704783215c1f1b",
                                    "605bd360e35779001bf57c5e",
                                    "6234cc7add097ff1c9cff3bd",
                                    "600b1491d42a140004d5215a",
                                    "5db75fa3f1fa190017b61c0c",
                                    "5fac96fe2ca0da00042b018f",
                                    "600b14d8d42a140004d52165",
                                    "5f88953cdb209e00046522c7",
                                    "600b153ad42a140004d52172",
                                    "5fe260e72a505b00040e2a11",
                                    "5fe3d085a529560004cd3076",
                                    "5f5fc017aee59500041a1456",
                                    "608b0a5863c4f2001eed43f4",
                                    "5fad491512c8620004918ace",
                                    "5fc91a9b4ea2e200046bd49a",
                                    "5c5d06a7deebc70017245da7",
                                    "5ff767051b68750004a6fd21",
                                    "5fdcacc85d465a0004b021b9",
                                    "5fb7eea20bd44300045ba495",
                                ][Math.floor(Math.random() * 24)];
                                const rand = (l, h) => Math.floor(Math.random() * (h - l + 1)) + l;
                                const {
                                    t
                                } = await fetch("https://play.blooket.com/api/playersessions/solo", {
                                        body: JSON.stringify({
                                            gameMode: "Factory",
                                            questionSetId: gameId
                                        }),
                                        method: "POST",
                                        credentials: "include",
                                    })
                                    .then((x) => x.json())
                                    .catch(() => alert("There was an error creating a solo game."));
                                await fetch("https://play.blooket.com/api/playersessions/landings", {
                                    body: JSON.stringify({
                                        t
                                    }),
                                    method: "POST",
                                    credentials: "include",
                                }).catch(() => alert("There was an error when landing."));
                                await fetch("https://play.blooket.com/api/playersessions/questions?t=" + t, {
                                    credentials: "include"
                                });
                                await fetch("https://play.blooket.com/api/gamequestionsets?gameId=" + gameId, {
                                    credentials: "include"
                                });
                                await fetch("https://play.blooket.com/api/users/factorystats", {
                                    body: JSON.stringify({
                                        t,
                                        place: 1,
                                        cash: rand(10000000, 100000000),
                                        playersDefeated: 0,
                                        correctAnswers: rand(500, 2000),
                                        upgrades: rand(250, 750),
                                        blookUsed: "Chick",
                                        nameUsed: "You",
                                        mode: "Time-Solo"
                                    }),
                                    method: "PUT",
                                    credentials: "include",
                                }).catch(() => alert("There was an error when spoofing stats."));
                                await fetch("https://play.blooket.com/api/users/add-rewards", {
                                        body: JSON.stringify({
                                            t,
                                            addedTokens: 500,
                                            addedXp: 300
                                        }),
                                        method: "PUT",
                                        credentials: "include",
                                    })
                                    .then((x) => x.json())
                                    .then(({
                                        dailyReward
                                    }) => alert(`Added max tokens and xp, and got ${dailyReward} daily wheel tokens!`))
                                    .catch(() => alert("There was an error when adding rewards."));
                            }
                        },
                    },
                    {
                        name: "Blooket Bot",
                        description: "Opens Blooket Bot",
                        run: function() {
                            function getGameCode() {
                                const appDiv = document.querySelector('#app>div>div');
                                if (appDiv) {
                                    const reactComponent = Object.values(appDiv)[1]?.children[0]?._owner;
                                    return reactComponent?.stateNode?.props?.client?.hostId || null;
                                }
                                return null;
                            }

                            const gameCode = getGameCode();
                            const url = gameCode ? "https://blooketbot.schoolcheats.net/" + gameCode : "https://blooketbot.schoolcheats.net/";
                            window.open(url, "_blank", "width=500,height=500,resizable=yes,scrollbars=yes,status=yes");
                        }
                    }, {
                        name: "Blooket Stream Finder",
                        description: "Opens Stream Finder",
                        run: function() {
                            function getGameCode() {
                                const appDiv = document.querySelector('#app>div>div');
                                if (appDiv) {
                                    const reactComponent = Object.values(appDiv)[1]?.children[0]?._owner;
                                    return reactComponent?.stateNode?.props?.client?.hostId || null;
                                }
                                return null;
                            }

                            const gameCode = getGameCode();
                            const url = gameCode ? "https://0alter0.github.io/blooketstreamfinderV2/" + gameCode : "https://0alter0.github.io/blooketstreamfinderV2/";
                            window.open(url, "_blank", "width=500,height=500,resizable=yes,scrollbars=yes,status=yes");
                        }
                    }, {
                        name: "Open Chat (Global)",
                        description: "Opens The X-GUI Chat, Not Ingame",
                        run: function() {
                            window.open(
                                "https://hack.chat/?xgui",
                                "_blank",
                                "width=500,height=500,resizable=yes,scrollbars=yes,status=yes"
                            );
                        }

                    }, {



                        name: "Open Chat (Ingame)",
                        description: "Opens X-GUI Ingame Chat",
                        run: function() {

                            (function() {
                                function getGameCode() {
                                    const appDiv = document.querySelector('#app>div>div');
                                    if (appDiv) {
                                        const reactComponent = Object.values(appDiv)[1]?.children[0]?._owner;
                                        return reactComponent?.stateNode?.props?.client?.hostId || null;
                                    }
                                    return null;
                                }

                                function getGameCodeFromURL() {
                                    const parts = window.location.pathname.split('/').filter(Boolean);
                                    return parts.length >= 3 ? parts[0] : null;
                                }

                                let gameCode = getGameCode();

                                if (!gameCode) {
                                    gameCode = getGameCodeFromURL();
                                }

                                const url = gameCode ?
                                    "https://hack.chat/?xgui" + gameCode :
                                    "https://hack.chat/?xgui";

                                window.open(
                                    url,
                                    "_blank",
                                    "width=500,height=500,resizable=yes,scrollbars=yes,status=yes"
                                );
                            })();
                        }
                    }, {
                        name: "Crash Game (Gold Quest, Crypto, Frenzy)",
                        description: "Crashes the host's game",
                        run: function() {
                            var e = Object.values(function e(t = document.querySelector("#app")) {
                                    return Object.values(t)[1]?.children?.[0]?._owner.stateNode ? t : e(t.querySelector(":scope>div"))
                                }
                                ())[1].children[0]._owner.stateNode;
                            e.props.liveGameController.setVal({
                                path: `c/${e.props.client.name}/b/toString`,
                                val: "Crashed"
                            })
                        }
                    },{
                        name: "Universal Game Crasher",
                        description: "Crashes the host's game. Works only on Enter Nickname menu or if you have the extension. And if your in Gold Quest, Crypto, Frenzy then it will crash when the game starts.",
                        run: async function() {
        'use strict';
        const wait = (ms) => new Promise(resolve => setTimeout(resolve, ms));

        async function crashGame() {
            await wait(500);

            const nameInput = document.querySelector('.Form_longInput__Kyk9e');
            const submitButton = document.querySelector('.FormSubmitButton_submitButton__MK2LJ');

            if (nameInput && submitButton) {
                await wait(200);
                nameInput.value = "toString";
                nameInput.dispatchEvent(new Event('input', { bubbles: true }));
                await wait(100);
                submitButton.click();
            }
        }

        const onPlayPage = window.location.href.includes('play.blooket.com/play');

        if (onPlayPage) {
            await crashGame();
        } else {
            await wait(500);
            const nameInput = document.querySelector('.Form_longInput__Kyk9e');
            const submitButton = document.querySelector('.FormSubmitButton_submitButton__MK2LJ');

            if (!nameInput || !submitButton) {
                window.postMessage({ type: "FROM_PAGE_CRASH_GAME" }, "*");
            } else {
                await crashGame();
            }
        }
    }
},

 {




                        name: "Use Any Blook",
                        description: "Allows you to play as any blook",
                        run: function() {
                            const lobby = window.location.pathname.startsWith("/play/lobby"),
                                dashboard = !lobby && window.location.pathname.startsWith("/blooks");
                            if (dashboard) {
                                let key = "konzpack",
                                    propCall = Object.prototype.hasOwnProperty.call;
                                let webpack = webpackChunk_N_E.push([
                                    [key],
                                    {
                                        [key]: () => {}
                                    },
                                    function(func) {
                                        Object.prototype.hasOwnProperty.call = function() {
                                            Object.defineProperty(arguments[0], key, {
                                                set: () => {},
                                                configurable: true
                                            });
                                            return (Object.prototype.hasOwnProperty.call = propCall).apply(this, arguments);
                                        };
                                        return func;
                                    },
                                ]);
                                const blookData = webpack(4927).nK;
                                const blooksHook = Object.values(document.querySelector("[class*=BlooksWrapper_content]"))[0].return.memoizedState.next;
                                const showBlooks = blooksHook.memoizedState;
                                const seen = {},
                                    userBlooks = [],
                                    prices = {
                                        Uncommon: 5,
                                        Rare: 20,
                                        Epic: 75,
                                        Legendary: 200,
                                        Chroma: 300,
                                        Unique: 350,
                                        Mystical: 1000,
                                    };
                                for (const data of blooksHook.next.memoizedState) {
                                    userBlooks.push(data);
                                    seen[data.blook] = true;
                                }
                                for (const blook in blookData) {
                                    if (blookData[blook].rarity != "Common" && !seen[blook])
                                        userBlooks.push({
                                            blook,
                                            quantity: 1,
                                            sellPrice: prices[blookData[blook].rarity],
                                        });
                                }
                                blooksHook.next.queue.dispatch(userBlooks);
                                blooksHook.queue.dispatch(!showBlooks);
                                setTimeout(() => blooksHook.queue.dispatch(showBlooks), 1);
                            } else if (lobby) getStateNode().setState({
                                unlocks: {
                                    includes: () => !0
                                }
                            });
                            else alert("This only works in lobbies or the dashboard blooks page.");

                        },
                    },
                    {
                        name: "Every Answer Correct",
                        description: "Sets every answer to be correct",
                        run: function() {
                            const stateNode = getStateNode();
                            for (let i = 0; i < stateNode.freeQuestions.length; i++) {
                                stateNode.freeQuestions[i].correctAnswers = stateNode.freeQuestions[i].answers;
                                stateNode.questions[i].correctAnswers = stateNode.questions[i].answers;
                                stateNode.props.client.questions[i].correctAnswers = stateNode.questions[i].answers;
                            }
                            try {
                                stateNode.forceUpdate();
                            } catch {}
                        },
                    },
                    {
                        name: "Remove all Taken Blooks",
                        description: "Removes all taken blooks, allowing you to use any taken blook. Only works in lobby.",
                        run: function() {
                            const stateNode = Object.values(document.querySelector("#app>div>div"))[1].children[0]._owner.stateNode;
                            stateNode.setState({
                                takenBlooks: {
                                    includes: e => !1
                                }
                            });
                            stateNode.setState = function(a, b) {
                                if (a?.takenBlooks) {
                                    return;
                                }
                                stateNode.updater.enqueueSetState(stateNode, a, b, "setState");
                            }
                        }
                    }, {


                        name: "Kick All Players HOST ONLY",
                        description: "Kicks all players from your game.",
                        run: function() {
                            (async function() {
                                const app = document.querySelector('#app>div>div');
                                if (!app) return;

                                const sn = Object.values(app)[1]?.children?.[0]?._owner?.stateNode;
                                if (!sn || !sn.props?.liveGameController) return;

                                const controller = sn.props.liveGameController;

                                const db = await controller.getDatabaseVal("");
                                if (!db || !db.c) return;

                                // Mark all players as kicked
                                controller.setVal({
                                    path: "bu",
                                    val: Object.keys(db.c).reduce(
                                        (acc, id) => (acc[id] = 1, acc),
                                        db.bu ? db.bu : {}
                                    )
                                });

                                // Clear player list
                                controller.setVal({
                                    path: "c",
                                    val: {}
                                });
                            })();
                        }
                    }, {


                        name: "Enable Mobile Hosting",
                        description: "Makes it so that you can host on mobile",
                        run: function() {
                            (function() {
                                var metaViewport = document.querySelector('meta[name="viewport"]');
                                if (metaViewport) {
                                    metaViewport.parentNode.removeChild(metaViewport);
                                }
                                var newMetaViewport = document.createElement('meta');
                                newMetaViewport.name = 'viewport';
                                newMetaViewport.content = 'width=1280, initial-scale=1';
                                document.head.appendChild(newMetaViewport);
                            })();
                        }
                    }, {

                        name: "Remove Host Time Limit",
                        description: "Removes the host time limit",
                        run: function() {
                            (() => {
                                const sn = Object.values(document.querySelector('#app>div>div'))[1].children[0]._owner.stateNode;
                                sn.onAmountUpdate = function(t) {
                                    let settings = sn.state.settings;
                                    settings.amount = parseInt(t.target.value);
                                    sn.setState({
                                        settings
                                    });
                                }
                            })();
                        }
                    }, {

                        name: "Freeze Timer",
                        description: "Makes the host timer stop ingame",
                        run: function() {
                            (() => {
                                const {
                                    stateNode
                                } = Object.values(document.querySelector("#app>div>div"))[1].children[0]._owner;
                                clearInterval(stateNode.timerInterval);
                                stateNode.timerInterval = setInterval(function() {
                                    stateNode?.getClients?.(!1);
                                }, 4000);
                            })();
                        }
                    }, {

                        name: "Subtle Highlight Answers",
                        description: "Removes the shadow from correct answers",
                        run: function() {
                            const stateNode = getStateNode();
                            const Question = stateNode.state.question || stateNode.props.client.question;
                            let ind = 0;
                            while (ind < Question.answers.length) {
                                let j = 0;
                                let found = false;
                                while (j < Question.correctAnswers.length) {
                                    if (Question.answers[ind] == Question.correctAnswers[j]) {
                                        found = true;
                                        break;
                                    }
                                    j++;
                                }
                                ind++;
                                if (found) document.querySelector("[class*='answersHolder'] :nth-child(" + ind + ") > div").style.boxShadow = "unset";
                            }
                        },
                    },
                    {
                        name: "Remove Random Name",
                        description: "Allows you to put a custom name",
                        run: function() {
                            getStateNode().setState({
                                isRandom: false,
                                client: {
                                    name: ""
                                }
                            });
                            document.querySelector('[class*="nameInput"]')?.focus?.();
                        },
                    },
                    {
                        name: "Host Any Gamemode",
                        description: "Change the selected gamemode on the host settings page",
                        inputs: [{
                            name: "Gamemode",
                            type: "options",
                            options: ["Racing", "Classic", "Factory", "Cafe", "Defense2", "Defense", "Royale", "Gold", "Candy", "Brawl", "Hack", "Pirate", "Fish", "Dino", "Toy", "Rush"]
                        }],
                        run: function(e) {
                            let t = document.createElement("iframe");
                            if (document.body.append(t), window.alert = t.contentWindow.alert.bind(window), window.prompt = t.contentWindow.prompt.bind(window), t.remove(), "/host/settings" != location.pathname)
                                return alert("Run this script on the host settings page");
                            let {
                                stateNode: a
                            } = Object.values(function e(t = document.querySelector("body>div")) {
                                    return Object.values(t)[1]?.children?.[0]?._owner.stateNode ? t : e(t.querySelector(":scope>div"))
                                }
                                ())[1].children[0]._owner;
                            a.setState({
                                settings: {
                                    type: e
                                }
                            })
                        }
                    }, {
                        name: "Sell Duplicate Blooks",
                        description: "Sell all duplicate blooks leaving you with 1 each",
                        run: async function() {
                            if (!window.location.pathname.startsWith("/blooks")) {
                                alert("This can only be run on the Blooks page. Please go to https://dashboard.blooket.com/blooks");
                            } else {
                                if (confirm("Are you sure you want to sell your duplicates? This will sell everything except Legendary and above, leaving you with 1 of each blook.")) {
                                    
                                    async function sellBlook(blookName, quantity) {
                                        const formData = new FormData();
                                        formData.append('1_blook', blookName);
                                        formData.append('1_quantity', quantity.toString());
                                        formData.append('0', '[{"status":"UNSET","message":"","fieldErrors":{}},"$K1"]');
                                        try {
                                            const response = await fetch('https://dashboard.blooket.com/blooks', {
                                                method: 'POST',
                                                headers: {
                                                    'next-action': '504d5bfe3d4b01def79630a2138ec4f50f85bee9',
                                                    'accept': 'text/x-component',
                                                    'next-router-state-tree': '%5B%22%22%2C%7B%22children%22%3A%5B%22(routes)%22%2C%7B%22children%22%3A%5B%22(dashboard)%22%2C%7B%22children%22%3A%5B%22blooks%22%2C%7B%22children%22%3A%5B%22__PAGE__%22%2C%7B%7D%2Cnull%2Cnull%5D%7D%2Cnull%2Cnull%5D%7D%2Cnull%2Cnull%5D%7D%2Cnull%2Cnull%5D%7D%2Cnull%2Cnull%2Ctrue%5D'
                                                },
                                                body: formData
                                            });
                                            if (response.ok) {
                                                console.log(`Successfully sold ${quantity}x ${blookName}`);
                                            } else {
                                                console.error(`Failed to sell ${blookName}: ${response.status}`);
                                            }
                                        } catch (err) {
                                            console.error("Network error during sale:", err);
                                        }
                                    }
                                    
                                    window.blookslist = (() => {
                                        const anyEl = document.querySelector('*');
                                        const fiberKey = Object.keys(anyEl).find(k => k.startsWith('__reactFiber$'));
                                        let fiber = anyEl[fiberKey];
                                        while (fiber && fiber.return) {
                                            fiber = fiber.return;
                                        }
                                        const path = "child.child.child.child.child.child.child.child.child.child.sibling.child.child.child.child.child.child.child.child.sibling.child.child.sibling.child.child.child.child.sibling.child.sibling.child.child.child.child.child.child.child.child.child.child.child.child.child.child.child.child.child.child.child.child.child.child.child.child.child.child.child.child.child.sibling.child.sibling.sibling.sibling.sibling.child.child.child.child.child.child.child.child.child.child.child.child.child.child.child.child.child.child.child.child.child.child.child.child.child.child.child.sibling.child.child";
                                        let target = fiber;
                                        path.split('.').forEach(key => {
                                            target = target ? target[key] : null;
                                        });
                                        return target?.memoizedProps?.blooks;
                                    })();
                                    
                                    let key = "konzpack",
                                        propCall = Object.prototype.hasOwnProperty.call;
                                    let webpack = webpackChunk_N_E.push([
                                        [key],
                                        { [key]: () => {} },
                                        function (func) {
                                            Object.prototype.hasOwnProperty.call = function () {
                                                Object.defineProperty(arguments[0], key, { set: () => {}, configurable: true });
                                                return (Object.prototype.hasOwnProperty.call = propCall).apply(this, arguments);
                                            };
                                            return func;
                                        },
                                    ]);
                                    
                                    const blookData = webpack(4927).nK;
                                    const prices = {
                                        Uncommon: 5,
                                        Rare: 20,
                                        Epic: 75,
                                        Legendary: 200,
                                        Chroma: 300,
                                        Unique: 350,
                                        Mystical: 1000,
                                    };
                                    
                                    let sellAmt = 0;
                                    let sellBlookAmt = 0;
                                    
                                    for (let blook of blookslist) {
                                        console.log(blook);
                                        let rarity = blookData[blook.blook].rarity;
                                        console.log(rarity);
                                        if (blook.quantity > 1 && ["Uncommon","Rare","Epic"].includes(rarity)){
                                            await sellBlook(blook.blook, blook.quantity - 1);
                                            sellBlookAmt += blook.quantity - 1;
                                            sellAmt += prices[rarity] * (blook.quantity - 1);
                                        }
                                    }
                                    
                                    alert("Sold " + sellBlookAmt + " blooks for " + sellAmt + " Tokens.");
                                }
                            }
                        }
                    }
                ],
            },
            extras: {
                img: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgdmlld0JveD0iMCAwIDI0MCAyNDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBvbHlnb24gZmlsbD0iI2ZkZDAyOSIgcG9pbnRzPSIxMjAsMTggMTUxLDk0IDI0MCw5NCAxNjgsMTQ4IDE5NSwyMzAgMTIwLDE4MyA0NSwyMzAgNzIsMTQ4IDAsOTQgODksOTQiLz48L3N2Zz4=",

                name: "Extras",
                cheats: [{

                       name: "EXECUTOR",
                       description: "Opens an advanced, sleek, GUI with countless features, made by @landsedge",
                       run: function() {

    try {
        if (typeof window.ExecutorUserScriptVersion === "function") {
            console.log("Executor Userscript detected — running the built-in version.");
            ExecutorUserScriptVersion();
        } else {
            new Function("var testCSP='CSP check'")();

            var s = document.createElement('script');
            s.src = 'https://cdn.jsdelivr.net/gh/CidCaribou/Executor-Menu@main/menu.js';
            s.onload = function(){ s.remove(); };
            s.onerror = function(){
                alert('Error loading the script.\n\nTry:\n1. Visiting a different site (some block scripts)\n2. Reinstall the bookmarklet\n3. Contact the owner.');
                console.error('Script load error via <script src>');
            };
            document.body.appendChild(s);
        }
    } catch(e) {
        if (e.message.includes('Content Security Policy')) {
            var i = document.querySelector('iframe');
            var m = 'Script blocked by Content Security Policy.\n\nTry:\n1. Visit a different site\n2. Use the Spoofer\n3. Contact the owner.';
            i ? i.contentWindow.alert(m) : alert(m);
        } else {
            alert('Script execution failed.\n\nTry:\n1. Visit a different site\n2. Reinstall the bookmarklet\n3. Contact the owner.');
            console.error('Execution error:', e);
        }
    }
                        },
                    },
                    {


                        name: "Toggle Invert Colors",
                        description: "Toggle between inverting and restoring colors on the page",
                        run: function() {
                            const html = document.documentElement;
                            html.style.filter = html.style.filter === "invert(1)" ? "" : "invert(1)";
                            const elems = document.querySelectorAll("a, img, video");
                            for (let i = 0; i < elems.length; i++) {
                                const el = elems[i];
                                if ((el.nodeName === "A" && (el.style.background !== "" || el.style.backgroundImage !== "")) || el.nodeName !== "A") {
                                    el.style.filter = el.style.filter === "invert(1)" ? "" : "invert(1)";
                                }
                            }
                        },
                    },
                    {
                        name: "Toggle Dark Mode",
                        description: "Toggles Dark Mode",
                        run: function() {
                            var e = document.createElement("iframe");
                            document.body.append(e),
                                window.alert = e.contentWindow.alert.bind(window),
                                e.remove(),
                                ! function e() {
                                    let t = document.querySelectorAll("#nightify");
                                    if (t.length)
                                        t[0].parentNode.removeChild(t[0]);
                                    else {
                                        var a = document.getElementsByTagName("head")[0],
                                            o = document.createElement("style");
                                        o.setAttribute("type", "text/css"),
                                            o.setAttribute("id", "nightify"),
                                            o.appendChild(document.createTextNode(`html{-webkit-filter:invert(100%) hue-rotate(180deg) contrast(70%) !important; background: #222;} .line-content {background-color: #333;} html img{-webkit-filter:invert(100%) hue-rotate(0deg) contrast(100%) !important;}`)),
                                            a.appendChild(o)
                                    }
                                }
                                ()
                        }
                    }, {
                        name: "3D Page",
                        description: "Makes the page 3D",
                        run: function() {
                            var e = {
                                menu: document.createElement("div"),
                                limit: document.createElement("input"),
                                gap: document.createElement("input"),
                                sag: document.createElement("input"),
                                fov: document.createElement("input"),
                                flo: document.createElement("input"),
                                off: document.createElement("input"),
                                non: document.createElement("input"),
                                end: document.createElement("input"),
                                tgl: document.createElement("input"),
                                cssStatic: document.createElement("style"),
                                cssDynamic: document.createElement("style"),
                                orientation: {
                                    yaw: 0,
                                    pitch: 0,
                                    roll: 0
                                },
                                mouseMove: function(t) {
                                    e.orientation.yaw = -(180 * Math.cos(Math.PI * t.clientX / innerWidth)) * e.limit.value,
                                        e.orientation.pitch = 180 * Math.cos(Math.PI * t.clientY / innerHeight) * e.limit.value,
                                        e.updateBody()
                                },
                                gyroMove: function(t) {
                                    innerWidth > innerHeight ? (e.orientation.yaw = -(t.alpha + t.beta), e.orientation.pitch = t.gamma - 90 * Math.sign(90 - Math.abs(t.beta))) : (e.orientation.yaw = -(t.alpha + t.gamma), e.orientation.pitch = t.beta - 90),
                                        e.updateBody()
                                },
                                updateOrigin: function(e) {
                                    document.body.style.transformOrigin = innerWidth / 2 + pageXOffset + "px " + (innerHeight / 2 + pageYOffset) + "px"
                                },
                                updateBody: function() {
                                    document.body.style.transform = "perspective(" + Math.pow(2, e.fov.value) + "px) translateZ(-" + e.gap.value + "px) rotateX(" + e.orientation.pitch + "deg) rotateY(" + e.orientation.yaw + "deg)"
                                },
                                updateCSS: function() {
                                    if (e.non.checked)
                                        e.cssDynamic.innerHTML = "";
                                    else if (e.off.checked)
                                        e.cssDynamic.innerHTML = "* { transform-style: preserve-3d; }";
                                    else {
                                        for (var t = 0; document.querySelector("body" + " > *".repeat(t)); t++);
                                        var a = e.gap.value / t,
                                            o = -Math.PI * e.sag.value / t;
                                        e.cssDynamic.innerHTML = ` * { transform: translateZ(${a}px) rotateX(${o}rad); transform-style: preserve-3d; transition: transform 1s; outline: 1px solid rgba(0, 0, 0, 0.0625); ${e.flo.checked ? "overflow: visible !important;" : ""} } *:hover { transform: translateZ(${2 * a}px) rotateX(${2 * o}rad); ${e.flo.checked ? "" : "overflow: visible;"} } `
                                    }
                                },
                                toggle: function() {
                                    "active" == e.menu.className ? e.menu.removeAttribute("class") : e.menu.className = "active"
                                },
                                quit: function() {
                                    window.removeEventListener("deviceorientation", e.gyroMove),
                                        window.removeEventListener("mousemove", e.mouseMove),
                                        window.removeEventListener("scroll", e.updateOrigin),
                                        window.addEventListener("resize", e.updateOrigin),
                                        e.menu.remove(),
                                        e.cssStatic.remove(),
                                        e.cssDynamic.remove(),
                                        document.body.removeAttribute("style")
                                },
                                newRange: function(t, a, o, r, i, n, s) {
                                    e.menu.appendChild(t),
                                        t.type = "range",
                                        t.min = o,
                                        t.max = i,
                                        t.step = r,
                                        t.value = n,
                                        t.addEventListener("input", s),
                                        e.menu.appendChild(document.createElement("span")).innerHTML = a,
                                        e.menu.appendChild(document.createElement("br"))
                                },
                                newCheckbox: function(t, a, o) {
                                    e.menu.appendChild(t),
                                        t.type = "checkbox",
                                        t.addEventListener("click", o),
                                        e.menu.appendChild(document.createElement("span")).innerHTML = a,
                                        e.menu.appendChild(document.createElement("br"))
                                },
                                newButton: function(t, a, o) {
                                    e.menu.appendChild(t),
                                        t.type = "button",
                                        t.value = a,
                                        t.addEventListener("click", o)
                                },
                                init: function() {
                                    document.body.parentNode.appendChild(e.menu).id = "tri-menu",
                                        e.newRange(e.limit, "limit", 0, .03125, 1, .125, e.updateBody),
                                        e.newRange(e.gap, "gap / distance", 0, 32, 512, 128, function() {
                                            e.updateCSS(),
                                                e.updateBody()
                                        }),
                                        e.newRange(e.sag, "sag", -.25, .03125, .25, 0, e.updateCSS),
                                        e.newRange(e.fov, "field of view", 7, 1, 13, 10, e.updateBody),
                                        e.newCheckbox(e.flo, "force overflow", e.updateCSS),
                                        e.flo.setAttribute("checked", ""),
                                        e.newCheckbox(e.off, "flatten layers", e.updateCSS),
                                        e.newCheckbox(e.non, "flatten everything", e.updateCSS),
                                        e.newButton(e.end, "Quit", e.quit),
                                        e.newButton(e.tgl, "≡", e.toggle),
                                        e.tgl.id = "tri-toggle",
                                        e.menu.appendChild(e.cssStatic).innerHTML = " html, body { transition-property: none; height: 100%25; width: 100%25; } html, html:hover, #tri-menu, #tri-menu > *, #tri-menu > *:hover { transform: none; outline: none; overflow: auto !important; float: none; } #tri-menu { position: fixed; top: 0; left: 0; background: rgba(0, 0, 0, 0.5); color: white; border: 1px solid rgba(255, 255, 255, 0.5);; border-radius: 0 0 16px 0; padding: 8px; transform: translate(-100%25, -100%25) translate(32px, 32px); } #tri-menu.active { transform: none; } #tri-toggle { position: absolute; bottom: 0; right: 0; height: 32px; width: 32px; background: transparent; color: white; border: none; cursor: pointer; } #tri-menu.active > #tri-toggle { background: white; color: black; border-radius: 8px 0 0 0; }",
                                        e.menu.appendChild(e.cssDynamic),
                                        e.updateCSS(),
                                        window.addEventListener("deviceorientation", e.gyroMove),
                                        window.addEventListener("mousemove", e.mouseMove),
                                        window.addEventListener("scroll", e.updateOrigin),
                                        window.addEventListener("resize", e.updateOrigin),
                                        window.scrollBy(0, 1)
                                }
                            };
                            e.init()
                        }
                    }, {

                        name: "Auto Clicker",
                        description: "Automatically clicks for you. Press S to toggle.",
                        inputs: [{
                            name: "Click Delay",
                            type: "number"
                        }],
                        run: function(inputs) {
                            clicker: {
                                "use strict";

                                let clickInterval = null;
                                let clickingEnabled = true;

                                const {
                                    Number,
                                    self
                                } = window;
                                const milliseconds = Number.parseInt(inputs, 10);

                                if (false === Number.isSafeInteger(milliseconds)) {
                                    self.alert("Input was not an integer");
                                    break clicker;
                                }

                                let clientX = 0,
                                    clientY = 0;
                                const {
                                    document
                                } = self;

                                function startClicking() {
                                    clickInterval = self.setInterval(() => {
                                        document.elementFromPoint(clientX, clientY)?.click?.();
                                    }, milliseconds);
                                }

                                function stopClicking() {
                                    self.clearInterval(clickInterval);
                                    clickInterval = null;
                                }

                                startClicking();

                                document.addEventListener("mousemove", event => {
                                    ({
                                        clientX,
                                        clientY
                                    } = event);
                                }, {
                                    passive: true
                                });

                                self.addEventListener("keydown", event => {
                                    if (event.key === "s") {
                                        if (clickingEnabled) {
                                            stopClicking();
                                        } else {
                                            startClicking();
                                        }
                                        clickingEnabled = !clickingEnabled;
                                    }
                                });
                            }
                        }
                    }, {
                        name: "Tab Cloaker",
                        description: "Changes the tab image and name",
                        inputs: [{
                            name: "Icon URL",
                            type: "text",
                        }, {
                            name: "Tab Title",
                            type: "text",
                        }],
                        run: function(e, t) {
                            var a = document.querySelector("link[rel*='icon']") || document.createElement("link");
                            a.type = "image/x-icon",
                                a.rel = "shortcut icon",
                                a.href = e || "https://www.blooket.com/favicon.ico",
                                document.getElementsByTagName("head")[0].appendChild(a),
                                document.title = t || "Blooket"
                        }
                    }, {



                        /* ========== COLOR & FILTER MODES ========== */


                        name: "Grayscale Mode",
                        description: "Turns the page grayscale",
                        run: function() {
                            const html = document.documentElement;
                            html.style.filter =
                                html.style.filter === "grayscale(1)" ? "" : "grayscale(1)";
                        }
                    },

                    {
                        name: "Sepia Mode",
                        description: "Applies a sepia filter",
                        run: function() {
                            const html = document.documentElement;
                            html.style.filter =
                                html.style.filter === "sepia(1)" ? "" : "sepia(1)";
                        }
                    },

                    {
                        name: "High Contrast",
                        description: "Boosts contrast for readability",
                        run: function() {
                            const html = document.documentElement;
                            html.style.filter =
                                html.style.filter === "contrast(1.5)" ? "" : "contrast(1.5)";
                        }
                    },

                    {
                        name: "Soft Blur",
                        description: "Applies subtle blur",
                        run: function() {
                            const html = document.documentElement;
                            html.style.filter =
                                html.style.filter.includes("blur") ? "" : "blur(3px)";
                        }
                    },

                    {
                        name: "Pastel Theme",
                        description: "Soft pastel color palette",
                        run: function() {
                            if (document.getElementById("pastel-ui")) {
                                document.getElementById("pastel-ui").remove();
                                return;
                            }
                            const style = document.createElement("style");
                            style.id = "pastel-ui";
                            style.innerHTML = `* { filter: saturate(0.8) brightness(1.05); }`;
                            document.head.appendChild(style);
                        }
                    },

                    {
                        name: "Rainbow Hue Cycle",
                        description: "Smooth color cycling",
                        run: function() {
                            if (window._rainbow) {
                                clearInterval(window._rainbow);
                                window._rainbow = null;
                                document.documentElement.style.filter = "";
                                return;
                            }
                            let i = 0;
                            window._rainbow = setInterval(() => {
                                document.documentElement.style.filter = `hue-rotate(${i++}deg)`;
                                if (i > 360) i = 0;
                            }, 40);
                        }
                    },

                    /* ========== UI MODS ========== */

                    {
                        name: "Rounded UI",
                        description: "Extra rounded corners",
                        run: function() {
                            if (document.getElementById("rounded-ui")) {
                                document.getElementById("rounded-ui").remove();
                                return;
                            }
                            const style = document.createElement("style");
                            style.id = "rounded-ui";
                            style.innerHTML = `* { border-radius: 16px !important; }`;
                            document.head.appendChild(style);
                        }
                    },

                    {
                        name: "Outline UI",
                        description: "Outlines UI elements",
                        run: function() {
                            if (document.getElementById("outline-ui")) {
                                document.getElementById("outline-ui").remove();
                                return;
                            }
                            const style = document.createElement("style");
                            style.id = "outline-ui";
                            style.innerHTML = `* { outline: 1px solid rgba(255,255,255,0.12); }`;
                            document.head.appendChild(style);
                        }
                    },

                    {
                        name: "Flat UI",
                        description: "Removes shadows for a flat look",
                        run: function() {
                            if (document.getElementById("flat-ui")) {
                                document.getElementById("flat-ui").remove();
                                return;
                            }
                            const style = document.createElement("style");
                            style.id = "flat-ui";
                            style.innerHTML = `* { box-shadow: none !important; text-shadow: none !important; }`;
                            document.head.appendChild(style);
                        }
                    },

                    {
                        name: "Wobbly UI",
                        description: "UI gently wobbles",
                        run: function() {
                            if (document.getElementById("wobbly-ui")) {
                                document.getElementById("wobbly-ui").remove();
                                return;
                            }
                            const style = document.createElement("style");
                            style.id = "wobbly-ui";
                            style.innerHTML = `
      * { animation: wobble 2s infinite alternate; }
      @keyframes wobble { 0% { transform: rotate(-1deg); } 100% { transform: rotate(1deg); } }
    `;
                            document.head.appendChild(style);
                        }
                    },

                    {
                        name: "Floating UI",
                        description: "UI gently floats up and down",
                        run: function() {
                            if (document.getElementById("float-ui")) {
                                document.getElementById("float-ui").remove();
                                return;
                            }
                            const style = document.createElement("style");
                            style.id = "float-ui";
                            style.innerHTML = `
      * { animation: floaty 3s ease-in-out infinite; }
      @keyframes floaty { 0%,100%{transform:translateY(0);} 50%{transform:translateY(-5px);} }
    `;
                            document.head.appendChild(style);
                        }
                    },

                    {
                        name: "Tiny UI",
                        description: "Slightly shrinks UI",
                        run: function() {
                            const html = document.documentElement;
                            html.style.zoom = html.style.zoom === "0.9" ? "" : "0.9";
                        }
                    },

                    /* ========== FUN VISUALS ========== */

                    {
                        name: "Mirror Page",
                        description: "Flips page horizontally",
                        run: function() {
                            const html = document.documentElement;
                            html.style.transform = html.style.transform === "scaleX(-1)" ? "" : "scaleX(-1)";
                        }
                    },

                    {



                        name: "Outline Elements (Black)",
                        description: "Toggles black outlines on all page elements",
                        run: function() {
                            if (document.getElementById("outline-elements-black")) {
                                document.getElementById("outline-elements-black").remove();
                                return;
                            }

                            const style = document.createElement("style");
                            style.id = "outline-elements-black";
                            style.innerHTML = `
      * {
        outline: 1px solid black !important;
        outline-offset: -1px !important;
      }
    `;
                            document.head.appendChild(style);
                        }
                    }, {


                        name: "Outline Elements (Red)",
                        description: "Toggles red outlines on all page elements",
                        run: function() {
                            if (document.getElementById("outline-elements-red")) {
                                document.getElementById("outline-elements-red").remove();
                                return;
                            }

                            const style = document.createElement("style");
                            style.id = "outline-elements-red";
                            style.innerHTML = `
      * {
        outline: 1px solid red !important;
        outline-offset: -1px !important;
      }
    `;
                            document.head.appendChild(style);
                        }
                    }, {



                        name: "Light Screen Shake",
                        description: "Subtle screen shake",
                        run: function() {
                            document.body.animate(
                                [{
                                    transform: "translate(0,0)"
                                }, {
                                    transform: "translate(-2px,1px)"
                                }, {
                                    transform: "translate(2px,-1px)"
                                }, {
                                    transform: "translate(0,0)"
                                }], {
                                    duration: 200
                                }
                            );
                        }
                    },

                    {
                        name: "Jello UI",
                        description: "UI elements wobble like jello",
                        run: function() {
                            if (document.getElementById("jello-ui")) {
                                document.getElementById("jello-ui").remove();
                                return;
                            }
                            const style = document.createElement("style");
                            style.id = "jello-ui";
                            style.innerHTML = `
      * { animation: jello 1s infinite; }
      @keyframes jello {
        0%,100%{transform:scale3d(1,1,1);}
        25%{transform:scale3d(1.05,0.95,1);}
        50%{transform:scale3d(0.95,1.05,1);}
        75%{transform:scale3d(1.02,0.98,1);}
      }
    `;
                            document.head.appendChild(style);
                        }
                    },


                    {
                        name: "Rotate Page",
                        description: "Rotates the entire page slowly",
                        run: function() {
                            const html = document.documentElement;
                            html.style.transition = "transform 0.5s";
                            html.style.transform = html.style.transform === "rotate(180deg)" ? "" : "rotate(180deg)";
                        }
                    },

                    {
                        name: "Scale Up Page",
                        description: "Slightly zooms in page",
                        run: function() {
                            const html = document.documentElement;
                            html.style.transform = html.style.transform === "scale(1.1)" ? "" : "scale(1.1)";
                        }
                    },

                    {
                        name: "Spin Slowly",
                        description: "Page spins continuously",
                        run: function() {
                            if (window._spin) {
                                clearInterval(window._spin);
                                window._spin = null;
                                document.documentElement.style.transform = "";
                                return;
                            }
                            let deg = 0;
                            window._spin = setInterval(() => {
                                deg += 1;
                                document.documentElement.style.transform = `rotate(${deg}deg)`;
                            }, 50);
                        }
                    },

                    {
                        name: "Flip Vertically",
                        description: "Flips page upside down",
                        run: function() {
                            const html = document.documentElement;
                            html.style.transform = html.style.transform === "scaleY(-1)" ? "" : "scaleY(-1)";
                        }
                    },


                    {
                        name: "Shake UI",
                        description: "UI elements shake slightly",
                        run: function() {
                            if (document.getElementById("shake-ui")) {
                                document.getElementById("shake-ui").remove();
                                return;
                            }
                            const style = document.createElement("style");
                            style.id = "shake-ui";
                            style.innerHTML = `
      * { animation: shake 0.2s infinite alternate; }
      @keyframes shake { 0%{transform:translate(0,0);} 50%{transform:translate(2px,-2px);} 100%{transform:translate(0,0);} }
    `;
                            document.head.appendChild(style);
                        }
                    },

                    {
                        name: "Flip Horizontally Random",
                        description: "UI flips left and right repeatedly",
                        run: function() {
                            if (window._flipH) {
                                clearInterval(window._flipH);
                                window._flipH = null;
                                document.documentElement.style.transform = "";
                                return;
                            }
                            let flip = 1;
                            window._flipH = setInterval(() => {
                                document.documentElement.style.transform = `scaleX(${flip})`;
                                flip *= -1;
                            }, 500);
                        }
                    },

                    {
                        name: "Glow UI Pulse",
                        description: "UI elements glow and pulse gently",
                        run: function() {
                            if (document.getElementById("pulse-ui")) {
                                document.getElementById("pulse-ui").remove();
                                return;
                            }
                            const style = document.createElement("style");
                            style.id = "pulse-ui";
                            style.innerHTML = `
      * { animation: pulse 2s infinite; }
      @keyframes pulse { 0%,100%{box-shadow:none;} 50%{box-shadow:0 0 10px rgba(0,255,255,0.5);} }
    `;
                            document.head.appendChild(style);
                        }
                    },

                    {
                        name: "UI Zoom Pulse",
                        description: "UI elements pulse bigger and smaller",
                        run: function() {
                            if (document.getElementById("zoom-pulse-ui")) {
                                document.getElementById("zoom-pulse-ui").remove();
                                return;
                            }
                            const style = document.createElement("style");
                            style.id = "zoom-pulse-ui";
                            style.innerHTML = `
      * { animation: zoomPulse 2s infinite; }
      @keyframes zoomPulse { 0%,100%{transform:scale(1);} 50%{transform:scale(1.05);} }
    `;
                            document.head.appendChild(style);
                        }
                    },

                    {

                        name: "Flip Random UI",
                        description: "UI elements flip randomly THIS WILL BREAK GUI, YOU WILL NEED TO RELOAD!",
                        run: function() {
                            if (window._flipUI) {
                                clearInterval(window._flipUI);
                                window._flipUI = null;
                                document.querySelectorAll("*").forEach(el => el.style.transform = "");
                                return;
                            }
                            window._flipUI = setInterval(() => {
                                document.querySelectorAll("*").forEach(el => {
                                    if (Math.random() < 0.05) el.style.transform = `rotate(${Math.random()*360}deg)`;
                                });
                            }, 200);
                        }
                    },



                    {
                        name: "Tilted Page",
                        description: "Page tilts left and right slowly",
                        run: function() {
                            if (window._tiltPage) {
                                clearInterval(window._tiltPage);
                                window._tiltPage = null;
                                document.documentElement.style.transform = "";
                                return;
                            }
                            let deg = -3;
                            let dir = 1;
                            window._tiltPage = setInterval(() => {
                                document.documentElement.style.transform = `rotate(${deg}deg)`;
                                deg += dir;
                                if (deg > 3 || deg < -3) dir *= -1;
                            }, 50);
                        }
                    },




                    {
                        name: "Page Flip Slowly",
                        description: "Page rotates slowly 360 degrees",
                        run: function() {
                            if (window._pageFlip) {
                                clearInterval(window._pageFlip);
                                window._pageFlip = null;
                                document.documentElement.style.transform = "";
                                return;
                            }
                            let deg = 0;
                            window._pageFlip = setInterval(() => {
                                deg += 1;
                                document.documentElement.style.transform = `rotate(${deg}deg)`;
                                if (deg >= 360) deg = 0;
                            }, 50);
                        }
                    }, {

                        /* ========== CUSTOM CURSORS ========== */


                        /* ========== FUN CUSTOM CURSORS ========== */


                        name: "Cursor: Crosshair",
                        description: "Changes mouse cursor to crosshair",
                        run: function() {
                            document.body.style.cursor = document.body.style.cursor ? "" : "crosshair";
                        }
                    },
                    {
                        name: "Cursor: Pointer",
                        description: "Changes mouse cursor to pointer",
                        run: function() {
                            document.body.style.cursor = document.body.style.cursor ? "" : "pointer";
                        }
                    },
                    {
                        name: "Cursor: Grab",
                        description: "Changes mouse cursor to grab",
                        run: function() {
                            document.body.style.cursor = document.body.style.cursor ? "" : "grab";
                        }
                    },
                    {
                        name: "Cursor: Move",
                        description: "Changes mouse cursor to move",
                        run: function() {
                            document.body.style.cursor = document.body.style.cursor ? "" : "move";
                        }
                    },
                    {
                        name: "Cursor: Wait",
                        description: "Changes mouse cursor to wait",
                        run: function() {
                            document.body.style.cursor = document.body.style.cursor ? "" : "wait";
                        }
                    },
                    {
                        name: "Cursor: Help",
                        description: "Changes mouse cursor to help",
                        run: function() {
                            document.body.style.cursor = document.body.style.cursor ? "" : "help";
                        }
                    },
                    {
                        name: "Cursor: Text",
                        description: "Changes mouse cursor to text (I-beam)",
                        run: function() {
                            document.body.style.cursor = document.body.style.cursor ? "" : "text";
                        }
                    },
                    {
                        name: "Cursor: Progress",
                        description: "Changes mouse cursor to progress",
                        run: function() {
                            document.body.style.cursor = document.body.style.cursor ? "" : "progress";
                        }
                    },
                    {
                        name: "Cursor: Not-allowed",
                        description: "Changes mouse cursor to not-allowed",
                        run: function() {
                            document.body.style.cursor = document.body.style.cursor ? "" : "not-allowed";
                        }
                    },
                    {
                        name: "Cursor: Alias",
                        description: "Changes mouse cursor to alias",
                        run: function() {
                            document.body.style.cursor = document.body.style.cursor ? "" : "alias";
                        }
                    }, {


                        /* ========== BOLDER TEXT MODS ========== */


                        name: "Extra Bold Text",
                        description: "Extremely bold text",
                        run: function() {
                            if (document.getElementById("extra-bold-text")) {
                                document.getElementById("extra-bold-text").remove();
                                return;
                            }
                            const style = document.createElement("style");
                            style.id = "extra-bold-text";
                            style.innerHTML = `* { font-weight: 900 !important; }`;
                            document.head.appendChild(style);
                        }
                    },

                    {
                        name: "Slightly Bigger Text For GUI",
                        description: "Slightly increases text size for readability",
                        run: function() {
                            if (document.getElementById("slightly-bigger-text")) {
                                document.getElementById("slightly-bigger-text").remove();
                                return;
                            }
                            const style = document.createElement("style");
                            style.id = "slightly-bigger-text";
                            style.innerHTML = `* { font-size: 1.05em !important; }`;
                            document.head.appendChild(style);
                        }
                    },

                    {
                        name: "Outline Text",
                        description: "Adds strong outline to text for visibility",
                        run: function() {
                            if (document.getElementById("outline-text")) {
                                document.getElementById("outline-text").remove();
                                return;
                            }
                            const style = document.createElement("style");
                            style.id = "outline-text";
                            style.innerHTML = `
      * {
        text-shadow:
          -1px -1px 0 #000,
          1px -1px 0 #000,
          -1px 1px 0 #000,
          1px 1px 0 #000;
      }
    `;
                            document.head.appendChild(style);
                        }
                    },

                    {
                        name: "Shadowed Text",
                        description: "Adds prominent shadow behind text for depth",
                        run: function() {
                            if (document.getElementById("shadow-text")) {
                                document.getElementById("shadow-text").remove();
                                return;
                            }
                            const style = document.createElement("style");
                            style.id = "shadow-text";
                            style.innerHTML = `
      * {
        text-shadow: 2px 2px 4px rgba(0,0,0,0.7);
      }
    `;
                            document.head.appendChild(style);
                        }
                    },

                    {
                        name: "Rainbow Text",
                        description: "Text cycles through rainbow colors",
                        run: function() {
                            if (window._rainbowText) {
                                clearInterval(window._rainbowText);
                                window._rainbowText = null;
                                document.querySelectorAll("*").forEach(el => el.style.color = "");
                                return;
                            }
                            let hue = 0;
                            window._rainbowText = setInterval(() => {
                                document.querySelectorAll("*").forEach(el => el.style.color = `hsl(${hue},90%,55%)`);
                                hue += 3;
                                if (hue > 360) hue = 0;
                            }, 100);
                        }
                    }, {


                        /* ========== RESET ========== */


                        name: "Reset Visuals",
                        description: "Resets all visual changes",
                        run: function() {
                            document.documentElement.style.filter = "";
                            document.documentElement.style.transform = "";
                            document.documentElement.style.zoom = "";
                            document.body.style.cursor = "";
                            clearInterval(window._rainbow);
                            window._rainbow = null;
                            document.querySelectorAll("style[id]").forEach(s => s.remove());
                            document.removeEventListener("mousemove", window._cursorCircle);
                            document.removeEventListener("mousemove", window._cursorTrailFn);
                            document.removeEventListener("mousemove", window._cursorSparkleFn);
                            document.removeEventListener("mousemove", window._cursorRainbowFn);
                            document.removeEventListener("mousemove", window._cursorGlowFn);
                        }
                    }, {




                        name: "Toggle Small Font",
                        description: "Switch GUI font-size between normal and slightly smaller.",
                        run: function() {
                            if (typeof gui !== "undefined") {
                                const current = gui.style.fontSize || getComputedStyle(gui).fontSize;
                                if (current === "13px") gui.style.fontSize = "";
                                else gui.style.fontSize = "13px";
                            } else {
                                console.warn("GUI element not found for Toggle Small Font");
                            }
                        },
                    },
                ],
            },

custom_modules: {
    img: (() => {
        const img = new Image();
        img.src = "https://media.blooket.com/image/upload/c_limit,f_auto,h_250,fl_lossy,q_auto:low/v1767747712/mxquoykv3onnjgmw6zgl.png";
        return img.src;
    })(),
    name: "Custom Modules",
    cheats: (() => {
        if (detectCSP()) return [];

        const customModules = CookieHelper.getCookie('custom_modules_list') || [];
        return customModules.map((module, index) => {
            const defaultDescription = module.description || `Custom Module #${index + 1}`;

            if (module.type === 'execute') {
                return {
                    name: module.name,
                    description: defaultDescription,
                    run: createFunctionFromCode(module.code)
                };
            } else if (module.type === 'toggle') {
                return {
                    name: module.name,
                    description: defaultDescription,
                    type: 'toggle',
                    enabled: false,
                    data: null,
                    run: createFunctionFromCode(module.code)
                };
            } else if (module.type === 'edit') {
                return {
                    name: module.name,
                    description: defaultDescription,
                    inputs: [{
                        name: 'Value',
                        type: 'string'
                    }],
                    run: createFunctionFromCode(module.code, 'value')
                };
            }
        });
    })()
}, // enhanced by skittle


            gold: {
                img: new Date().getMonth() == 9 ? "https://media.blooket.com/image/upload/v1663212881/Media/logos/Candy_Quest_Logo.png" : "https://media.blooket.com/image/upload/v1663212881/Media/logos/Gold_Quest_Logo_Resized.png",
                name: "Gold Quest",
                cheats: [{
                        name: "Always Triple",
                        description: "Always get triple gold",
                        type: "toggle",
                        enabled: false,
                        data: {
                            type: "multiply",
                            val: 3,
                            text: "Triple Gold!",
                            blook: "Unicorn"
                        },
                        run: function() {
                            let stateNode = getStateNode();
                            stateNode._choosePrize ||= stateNode.choosePrize;
                            if (!this.enabled) {
                                this.enabled = true;
                                stateNode.choosePrize = (i) => {
                                    stateNode.state.choices[i] = this.data;
                                    stateNode._choosePrize(i);
                                };
                            } else {
                                this.enabled = false;
                                if (stateNode._choosePrize) stateNode.choosePrize = stateNode._choosePrize;
                            }
                        },
                    },
                    {
                        name: "Always Quintuple",
                        description: "Always get quintuple gold",
                        type: "toggle",
                        enabled: !1,
                        data: null,
                        run: function() {
                            let e = Object.values(document.querySelector("body div[id] > div > div"))[1].children[0]._owner.stateNode;
                            e._choosePrize ||= e.choosePrize,
                                this.enabled ? (this.enabled = !1, clearInterval(this.data), this.data = null, e.choosePrize = e._choosePrize || e.choosePrize) : (this.enabled = !0, this.data = setInterval(() => {
                                    e.choosePrize = function(t) {
                                        e.state.choices[t] = {
                                                type: "multiply",
                                                val: 5,
                                                text: "Quintuple Gold!",
                                                blook: "Ice Elemental"
                                            },
                                            e._choosePrize(t)
                                    }
                                }, 50))
                        }
                    }, {

                        name: "Auto Choose",
                        description: "Automatically picks the option that would give you the most gold",
                        type: "toggle",
                        enabled: false,
                        data: null,
                        run: function() {
                            if (!this.enabled) {
                                this.enabled = true;
                                this.data = setInterval(async () => {
                                    let stateNode = getStateNode();
                                    if (stateNode.state.stage == "prize") {
                                        stateNode.props.liveGameController.getDatabaseVal("c", (players) => {
                                            try {
                                                if (players == null) return;
                                                players = Object.entries(players);
                                                let most = 0,
                                                    max = 0,
                                                    index = -1;
                                                for (let i = 0; i < players.length; i++)
                                                    if (players[i][0] != stateNode.props.client.name && players[i][1] > most) most = players[i][1];
                                                for (let i = 0; i < stateNode.state.choices.length; i++) {
                                                    const choice = stateNode.state.choices[i];
                                                    let value = stateNode.state.gold;
                                                    if (choice.type == "gold") value = stateNode.state.gold + choice.val || stateNode.state.gold;
                                                    else if (choice.type == "multiply" || choice.type == "divide") value = Math.round(stateNode.state.gold * choice.val) || stateNode.state.gold;
                                                    else if (choice.type == "swap") value = most || stateNode.state.gold;
                                                    else if (choice.type == "take") value = stateNode.state.gold + most * choice.val || stateNode.state.gold;
                                                    if ((value || 0) <= max) continue;
                                                    max = value;
                                                    index = i + 1;
                                                }
                                                document.querySelector("div[class*='choice" + index + "']")?.click();
                                            } catch {}
                                        });
                                    }
                                }, 50);
                            } else {
                                this.enabled = false;
                                clearInterval(this.data);
                                this.data = null;
                            }
                        },
                    },
                    {
                        name: "Chest ESP",
                        description: "Shows what each chest will give you",
                        type: "toggle",
                        enabled: false,
                        data: null,
                        run: function() {
                            if (!this.enabled) {
                                this.enabled = true;
                                this.data = setInterval(() => {
                                    getStateNode().state.choices.forEach(({
                                        text
                                    }, index) => {
                                        let chest = document.querySelector(`div[class*='choice${index + 1}']`);
                                        if (!chest || chest.querySelector("div")) return;
                                        let choice = document.createElement("div");
                                        choice.style.color = "white";
                                        choice.style.fontFamily = "Eczar";
                                        choice.style.fontSize = "2em";
                                        choice.style.display = "flex";
                                        choice.style.justifyContent = "center";
                                        choice.style.transform = "translateY(200px)";
                                        choice.innerText = text;
                                        chest.append(choice);
                                    });
                                }, 50);
                            } else {
                                this.enabled = false;
                                clearInterval(this.data);
                                this.data = null;
                            }
                        },
                    },
                    {
                        name: "Remove Bad Choices",
                        description: "Removes the chance of getting Lose 25%, Lose 50%, and Nothing",
                        run: function() {
                            let iterator = Array.prototype[Symbol.iterator];
                            Array.prototype[Symbol.iterator] = function* values() {
                                if (this[0]?.type == "gold") {
                                    Array.prototype[Symbol.iterator] = iterator;
                                    console.log(this);
                                    for (let i = 0; i < this.length; i++)
                                        if (this[i].type == "divide" || this[i].type == "nothing") this.splice(i--, 1);
                                }
                                yield* iterator.apply(this);
                            };

                            getStateNode().constructor.prototype.answerNext.call({
                                nextReady: true,
                                here: true,
                                state: {
                                    correct: true
                                },
                                setState() {}
                            });
                        },
                    },
                    {
                        name: "Flood Alert Box",
                        description: "Makes the alert box filled with text",
                        inputs: [{
                            name: "Text",
                            type: "text"
                        }],
                        run: function(userInput) {
                            function getReactOwner() {
                                return Object.values(document.querySelector('#app>div>div'))[1].children[0]._owner;
                            }

                            function repeatText(text, times) {
                                return new Array(times).fill(text).join(" ");
                            }

                            function setValForPlayer() {
                                getReactOwner().stateNode.props.liveGameController.getDatabaseVal("c/").then(data => {
                                    if (data != null) {

                                        const playerName = Object.keys(data)[0];

                                        if (userInput) {

                                            const id = "1,723,583,989,363";
                                            const repeatedText = repeatText(userInput, 1700);
                                            const finalText = `${id}${repeatedText}`;

                                            setv(['tat', `${playerName}:${finalText}`]);
                                        } else {
                                            console.log("No text entered. Operation cancelled.");
                                        }
                                    } else {
                                        console.log("Player not found!");
                                    }
                                });
                            }

                            function setv(args) {
                                getReactOwner().stateNode.props.liveGameController.setVal({
                                    path: "c/" + getReactOwner().stateNode.props.client.name + "/" + args[0],
                                    val: args.slice(1, args.length).join(" ")
                                });
                            }

                            setValForPlayer();
                        }
                    }, {
                        name: "Reset Players Gold",
                        description: "Sets a player's gold to 0",
                        inputs: [{
                            name: "Player",
                            type: "options",
                            options: () => {
                                let stateNode = getStateNode();
                                return stateNode.props.liveGameController._liveApp ? new Promise((res) => stateNode.props.liveGameController.getDatabaseVal("c", (players) => players && res(Object.keys(players)))) : [];
                            },
                        }, ],
                        run: function(target) {
                            let stateNode = getStateNode();
                            stateNode.props.liveGameController.setVal({
                                path: "c/" + stateNode.props.client.name + "/tat",
                                val: target + ":swap:0",
                            });
                        },
                    },
                    {
                        name: "Set Gold",
                        description: "Sets amount of gold",
                        inputs: [{
                            name: "Gold",
                            type: "text",
                        }, ],
                        run: function(gold) {
                            let stateNode = getStateNode();
                            stateNode.setState({
                                gold,
                                gold2: gold
                            });
                            stateNode.props.liveGameController.setVal({
                                path: "c/" + stateNode.props.client.name + "/g",
                                val: gold,
                            });
                        },
                    },
                    {

                        name: "Set Player's Gold",
                        description: "Sets another player's gold",
                        inputs: [{
                                name: "Player",
                                type: "options",
                                options: () => {
                                    let stateNode = getStateNode();
                                    return stateNode.props.liveGameController._liveApp ? new Promise((res) => stateNode.props.liveGameController.getDatabaseVal("c", (players) => players && res(Object.keys(players)))) : [];
                                },
                            },
                            {
                                name: "Gold",
                                type: "text",
                            },
                        ],
                        run: function(player, gold) {
                            let stateNode = getStateNode();
                            stateNode.props.liveGameController.setVal({
                                path: "c/" + stateNode.props.client.name + "/tat",
                                val: player + ":swap:" + gold
                            });
                        }
                    },
                    {
                        name: "Reset All Players' Gold",
                        description: "Set's everyone else's gold to 0",
                        run: function() {
                            var e = document.createElement("iframe");
                            document.body.append(e),
                                window.alert = e.contentWindow.alert.bind(window),
                                e.remove();
                            let {
                                props: t,
                                state: a
                            } = Object.values(document.querySelector("body div[id] > div > div"))[1].children[0]._owner.stateNode,
                                o = 0;
                            t.liveGameController.getDatabaseVal("c", async e => {
                                if (e)
                                    for (let r of Object.keys(e))
                                        t.liveGameController.setVal({
                                            path: "c/".concat(t.client.name),
                                            val: {
                                                b: t.client.blook,
                                                g: a.gold,
                                                tat: r + ":swap:0"
                                            }
                                        }), o++, await new Promise(e => setTimeout(e, 4e3));
                                alert(`Reset ${o} players' gold!`)
                            })
                        }
                    }, {

                        name: "Toggle Spooky Theme",
                        description: "Toggles the spooky theme for Gold Quest",
                        run: function() {
                            (() => {
                                const sn = Object.values(document.querySelector('#app>div>div'))[1].children[0]._owner.stateNode;
                                sn.season = sn.season ? 0 : 1;
                                sn.render();
                            })();
                        }
                    }, {
                        name: "Send Ad Text",
                        description: "Sends a load of text to another player (This will override your blook!)",
                        inputs: [{
                            name: "Player",
                            type: "options",
                            options() {
                                let {
                                    stateNode: e
                                } = Object.values(function e(t = document.querySelector("body>div")) {
                                        return Object.values(t)[1]?.children?.[0]?._owner.stateNode ? t : e(t.querySelector(":scope>div"));
                                    }
                                    ())[1].children[0]._owner;
                                return new Promise(t => e.props.liveGameController._liveApp ? e.props.liveGameController.getDatabaseVal("c", e => e && t(Object.keys(e))) : t([]));
                            }
                        }, {
                            name: "Text"
                        }],
                        run: async function(player, e) {
                            let {
                                props: t2
                            } = Object.values(function e(t = document.querySelector("body>div")) {
                                    return Object.values(t)[1]?.children?.[0]?._owner.stateNode ? t : e(t.querySelector(":scope>div"));
                                }
                                ())[1].children[0]._owner.stateNode;

                            let repeatedText = `Dog:${Array(500).fill(e).join(' ')}`;
                            t2.client.blook = repeatedText;
                            t2.liveGameController.setVal({
                                path: `c/${t2.client.name}/b`,
                                val: repeatedText
                            });
                            t2.liveGameController.setVal({
                                path: `c/${t2.client.name}/tat`,
                                val: `${player}:196`
                            });
                        }
                    }, {

                        name: "Crash Host (Gold)",
                        description: "Crashes the Host's Game for Gold Quest",
                        inputs: [],
                        run: async function() {
                            // Recursively locate the React stateNode (same structure you use)
                            function getOwner(t = document.querySelector("body>div")) {
                                return Object.values(t)[1]?.children?.[0]?._owner?.stateNode ?
                                    t :
                                    getOwner(t.querySelector(":scope>div"));
                            }

                            let {
                                stateNode
                            } = Object.values(getOwner())[1].children[0]._owner;

                            // setv equivalent
                            function setv(args) {
                                stateNode.props.liveGameController.setVal({
                                    path: "c/" + stateNode.props.client.name + "/" + args[0],
                                    val: args.slice(1).join(" ")
                                });
                            }

                            // Crash host
                            setv(["g/t", "t"]);
                        }
                    }, {


                        name: "Swap Gold",
                        description: "Swaps gold with someone",
                        inputs: [{
                            name: "Player",
                            type: "options",
                            options: () => {
                                let stateNode = getStateNode();
                                return stateNode.props.liveGameController._liveApp ? new Promise((res) => stateNode.props.liveGameController.getDatabaseVal("c", (players) => players && res(Object.keys(players)))) : [];
                            },
                        }, ],
                        run: function(player) {
                            let stateNode = getStateNode();
                            stateNode.props.liveGameController.getDatabaseVal("c", (players) => {
                                if (!players || players[player] == null) return;
                                const gold = players[player].g || 0;
                                stateNode.props.liveGameController.setVal({
                                    path: "c/" + stateNode.props.client.name,
                                    val: {
                                        b: stateNode.props.client.blook,
                                        tat: player + ":swap:" + (stateNode.state.gold || 0),
                                        g: gold,
                                    },
                                });
                                stateNode.setState({
                                    gold,
                                    gold2: gold
                                });
                            });
                        },
                    },
                ],
            },
            hack: {
                img: "https://media.blooket.com/image/upload/v1663212882/Media/logos/Crypto_Hack_Logo_Resized.png",
                name: "Crypto Hack",
                cheats: [{
                        name: "Choice ESP",
                        description: "Shows what each choice will give you",
                        type: "toggle",
                        enabled: false,
                        data: null,
                        run: function() {
                            if (!this.enabled) {
                                this.enabled = true;
                                this.data = setInterval(() => {
                                    let chest = document.querySelector("[class*=feedbackContainer]");
                                    if (chest.children.length <= 4) {
                                        let choice = document.createElement("div");
                                        choice.style.color = "white";
                                        choice.style.fontFamily = "Inconsolata,Helvetica,monospace,sans-serif";
                                        choice.style.fontSize = "2em";
                                        choice.style.display = "flex";
                                        choice.style.justifyContent = "center";
                                        choice.style.marginTop = "675px";
                                        choice.innerText = getStateNode().state.choices[0].text;
                                        chest.append(choice);
                                    }
                                }, 50);
                            } else {
                                this.enabled = false;
                                clearInterval(this.data);
                                this.data = null;
                            }
                        },
                    },
                    {

                        name: "Password ESP",
                        description: "Highlights the correct password",
                        type: "toggle",
                        enabled: false,
                        data: null,
                        run: function() {
                            if (!this.enabled) {
                                this.enabled = true;
                                this.data = setInterval(() => {
                                    let {
                                        state
                                    } = getStateNode();
                                    if (state.stage == "hack")
                                        for (const button of document.querySelector("div[class*=buttonContainer]").children) {
                                            if (button.innerText == state.correctPassword) continue;
                                            button.style.outlineColor = "rgba(255, 64, 64, 0.8)";
                                            button.style.backgroundColor = "rgba(255, 64, 64, 0.8)";
                                            button.style.textShadow = "0 0 1px #f33";
                                        }
                                }, 50);
                            } else {
                                this.enabled = false;
                                clearInterval(this.data);
                                this.data = null;
                            }
                        },
                    },
                    {
                        name: "Set Host Screen Green",
                        description: "Makes the whole screen filled with text",
                        type: "toggle",
                        enabled: !1,
                        data: null,
                        run: function() {
                            var a = Object.values(function e(t = document.querySelector("#app")) {
                                    return Object.values(t)[1]?.children?.[0]?._owner.stateNode ? t : e(t.querySelector(":scope>div"))
                                }
                                ())[1].children[0]._owner.stateNode;

                            if (this.enabled) {
                                this.enabled = !1;
                                clearInterval(this.data);
                                this.data = null;
                                a.props.liveGameController.setVal({
                                    path: `c/${a.props.client.name}/cr`,
                                    val: ""
                                });
                            } else {
                                this.enabled = !0;
                                let t = () => {
                                    a.props.liveGameController.setVal({
                                        path: `c/${a.props.client.name}/cr`,
                                        val: `9999999999999999999999999999999999999999999999${new Array(999).fill("็".repeat(70)).join(" ")}`
                                    });
                                };
                                this.data = setInterval(t, 25);
                            }
                        }
                    }, {
                        name: "Always Quintuple",
                        description: "Always get quintuple crypto",
                        type: "toggle",
                        enabled: !1,
                        data: null,
                        run: function() {
                            this.enabled ? (this.enabled = !1, clearInterval(this.data), this.data = null) : (this.enabled = !0, this.data = setInterval(() => Object.values(document.querySelector("body div[id] > div > div"))[1].children[0]._owner.stateNode.setState({
                                choices: [{
                                    type: "mult",
                                    val: 5,
                                    rate: .075,
                                    blook: "Ice Elemental",
                                    text: "Quintuple Crypto"
                                }]
                            }), 50))
                        }
                    }, {
                        name: "Always Triple",
                        description: "Always get triple crypto",
                        type: "toggle",
                        enabled: false,
                        data: null,
                        run: function() {
                            if (!this.enabled) {
                                this.enabled = true;
                                this.data = setInterval((state) => getStateNode().setState(state), 25, {
                                    choices: [{
                                        type: "mult",
                                        val: 3,
                                        rate: 0.075,
                                        blook: "Brainy Bot",
                                        text: "Triple Crypto"
                                    }]
                                });
                            } else {
                                this.enabled = false;
                                clearInterval(this.data);
                                this.data = null;
                            }
                        },
                    },
                    {
                        name: "Always Hack",
                        description: "Always get hack",
                        type: "toggle",
                        enabled: !1,
                        data: null,
                        run: function() {
                            this.enabled ? (this.enabled = !1, clearInterval(this.data), this.data = null) : (this.enabled = !0, this.data = setInterval(() => Object.values(document.querySelector("body div[id] > div > div"))[1].children[0]._owner.stateNode.setState({
                                choices: [{
                                    type: "hack",
                                    val: 3,
                                    rate: .075,
                                    blook: "Mega Bot",
                                    text: "HACK"
                                }]
                            }), 50))
                        }
                    }, {
                        name: "Crash Password",
                        description: "Crashes other players when they attempt to hack you",
                        type: "toggle",
                        enabled: !1,
                        data: null,
                        run: function() {
                            var e = Object.values(function e(t = document.querySelector("#app")) {
                                    return Object.values(t)[1]?.children?.[0]?._owner.stateNode ? t : e(t.querySelector(":scope>div"))
                                }
                                ())[1].children[0]._owner.stateNode;
                            if (this.enabled)
                                this.enabled = !1, clearInterval(this.data), this.data = null, e.props.liveGameController.setVal({
                                    path: `c/${e.props.client.name}/p`,
                                    val: e.state?.password
                                });
                            else {
                                this.enabled = !0;
                                let t = () => {
                                    e.props.liveGameController.setVal({
                                        path: `c/${e.props.client.name}/p/toString`,
                                        val: "crash"
                                    })
                                };
                                this.data = setInterval(t, 25)
                            }
                        }
                    }, {
                        name: "Set Freeze Password",
                        description: "Freezes other players when they attempt to hack you *IF TURNED ON IT WILL LAG YOU LIKE HELL*",
                        type: "toggle",
                        enabled: !1,
                        data: null,
                        run: function() {
                            const encodedChars = [
                                '\\u2f9f', '\\u4fff', '\\u4f52', '\\u0E47', '\\u0E47', '\\u0E47', '\\u0E47', '\\u0E47', '\\u0E47', '\\u0E47', '\\u4FF1', '\\u4FF2'
                            ];

                            const chars = encodedChars.map(char => eval(`"${char}"`));

                            function makeLongText() {
                                return new Array(3e+6).fill().map(e => chars[Math.floor(Math.random() * chars.length)]).join("");
                            }

                            var t = Object.values(document.querySelector("body div[id] > div > div"))[1].children[0]._owner.stateNode;

                            if (this.enabled) {
                                this.enabled = !1;
                                clearInterval(this.data);
                                this.data = null;
                                t.setState({
                                    password: ''
                                });
                                t.props.liveGameController.setVal({
                                    path: "c/".concat(t.props.client.name),
                                    val: {
                                        b: t.props.client.blook,
                                        p: '',
                                        cr: t.state.crypto
                                    }
                                });
                            } else {
                                this.enabled = !0;
                                let lagFunction = () => {
                                    var e = makeLongText();
                                    t.setState({
                                        password: e
                                    });
                                    t.props.liveGameController.setVal({
                                        path: "c/".concat(t.props.client.name),
                                        val: {
                                            b: t.props.client.blook,
                                            p: e,
                                            cr: t.state.crypto
                                        }
                                    });
                                };
                                this.data = setInterval(lagFunction, 25);
                            }
                        }
                    }, {


                        name: "Auto Guess",
                        description: "Automatically guess the correct password",
                        type: "toggle",
                        enabled: false,
                        data: null,
                        run: function() {
                            if (!this.enabled) {
                                this.enabled = true;
                                this.data = setInterval(() => {
                                    let {
                                        state
                                    } = getStateNode();
                                    if (state.stage == "hack")
                                        for (const button of document.querySelector("div[class*=buttonContainer]").children) button.innerText == state.correctPassword && button.click();
                                }, 50);
                            } else {
                                this.enabled = false;
                                clearInterval(this.data);
                                this.data = null;
                            }
                        },
                    },
                    {
                        name: "Remove Hack",
                        description: "Removes an attacking hack",
                        run: function() {
                            getStateNode().setState({
                                hack: ""
                            });
                        },
                    },
                    {

                        name: "Crypto Spy Panel",
                        description: "Shows password + crypto for every player in Crypto Hack",
                        type: "button",
                        run: function() {

                            if (!location.href.includes("cryptohack")) {
                                return alert("This panel works ONLY in Crypto Hack.");
                            }

                            let node;
                            try {
                                node = Object.values(document.querySelector("#app > div > div"))[1]
                                    .children[0]?._owner?.stateNode;
                            } catch {
                                return alert("Failed to read game data.");
                            }
                            if (!node) return alert("Could not get stateNode.");

                            let lgc = node.props?.liveGameController;
                            if (!lgc) return alert("No liveGameController found.");

                            const panel = document.createElement("div");
                            panel.style = `
            position: fixed; top: 50%; left: 50%;
            transform: translate(-50%, -50%);
            background: #121212;
            padding: 18px 22px;
            border-radius: 16px;
            z-index: 999999;
            width: 400px;
            max-height: 80vh;
            color: white;
            font-family: 'Nunito', sans-serif;
            box-shadow: 0 0 25px rgba(0,0,0,0.7);
            display: flex;
            flex-direction: column;
        `;

                            panel.innerHTML = `
            <div style="font-size:22px;font-weight:800;text-align:center;margin-bottom:10px;">
                🔍 Crypto Spy Panel
            </div>

            <div style="display:flex;justify-content:center;gap:10px;margin-bottom:10px;">
                <button id="refresh-crypto-spy" style="
                    padding:6px 12px;border-radius:8px;border:none;
                    background:#2b6cb0;color:white;font-size:14px;font-weight:600;cursor:pointer;
                ">Refresh</button>

                <button id="close-crypto-spy" style="
                    padding:6px 12px;border-radius:8px;border:none;
                    background:#d23b3b;color:white;font-size:14px;font-weight:600;cursor:pointer;
                ">Close</button>
            </div>

            <div id="crypto-spy-content" style="
                flex:1;overflow-y:auto;padding-right:4px;
                font-size:14px;line-height:1.4;
            ">
                <div style="opacity:0.6;text-align:center;">Loading player stats...</div>
            </div>
        `;

                            document.body.appendChild(panel);

                            const contentDiv = document.getElementById("crypto-spy-content");

                            // ---- FIXED FUNCTION: CORRECT PASSWORD FIELD ----
                            function loadPlayerData() {
                                contentDiv.innerHTML = `<div style="opacity:0.6;text-align:center;">Loading player stats...</div>`;

                                lgc.getDatabaseVal("c", data => {
                                    if (!data) {
                                        contentDiv.innerHTML = "<div style='text-align:center;color:#aaa;'>No player data found.</div>";
                                        return;
                                    }

                                    let html = "";
                                    for (const player in data) {
                                        const p = data[player];

                                        // 🔥 Correct password logic (from your working snippet)
                                        let password =
                                            p?.p ?? // Main correct location
                                            p?.Password ?? // Backup
                                            p?.tat?.Password ?? // Older modes
                                            "?";

                                        html += `
                        <div style="
                            padding:8px 10px;background:#1d1d1d;border-radius:10px;
                            margin-bottom:6px;display:flex;justify-content:space-between;align-items:center;
                        ">
                            <div style="flex:1;min-width:0;">
                                <div style="font-size:16px;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;">
                                    ${player}
                                </div>
                                <div style="font-size:13px;opacity:0.8;">
                                    🔑 Password: <b>${password}</b>
                                </div>
                            </div>
                            <div style="font-size:14px;font-weight:700;flex-shrink:0;">
                                🪙 ${p.cr ?? 0}
                            </div>
                        </div>
                    `;
                                    }

                                    contentDiv.innerHTML = html;
                                });
                            }

                            loadPlayerData();
                            document.getElementById("close-crypto-spy").onclick = () => panel.remove();
                            document.getElementById("refresh-crypto-spy").onclick = loadPlayerData;
                        }
                    }, {
                        name: "Set Host Screen Text",
                        description: "Makes the whole screen filled with text",
                        inputs: [{
                            name: "Text",
                            type: "text",
                        }],
                        run: function(e) {
                            let t = document.createElement("iframe");
                            document.body.append(t),
                                window.prompt = t.contentWindow.prompt.bind(window),
                                t.remove();
                            var a = Object.values(function e(t = document.querySelector("#app")) {
                                    return Object.values(t)[1]?.children?.[0]?._owner.stateNode ? t : e(t.querySelector(":scope>div"))
                                }
                                ())[1].children[0]._owner.stateNode;
                            a.props.liveGameController.setVal({
                                path: `c/${a.props.client.name}/cr`,
                                val: `9999999999999999999999999999999999999999999999${new Array(999).fill(e).join(" ")}`
                            })
                        }
                    }, {

                        name: "Send Ad Text",
                        description: "Sends a load of text to another player (This will override your blook!)",
                        inputs: [{
                                name: "Player",
                                type: "options",
                                options() {
                                    let {
                                        stateNode: e
                                    } = Object.values(
                                        (function find(t = document.querySelector("body>div")) {
                                            return Object.values(t)[1]?.children?.[0]?._owner?.stateNode ?
                                                t :
                                                find(t.querySelector(":scope>div"));
                                        })()
                                    )[1].children[0]._owner;

                                    return new Promise(resolve =>
                                        e.props.liveGameController._liveApp ?
                                        e.props.liveGameController.getDatabaseVal("c", data => data && resolve(Object.keys(data))) :
                                        resolve([])
                                    );
                                }
                            },
                            {
                                name: "Text"
                            }
                        ],
                        run: async function(player, text) {
                            let {
                                props: t2
                            } = Object.values(
                                (function find(t = document.querySelector("body>div")) {
                                    return Object.values(t)[1]?.children?.[0]?._owner?.stateNode ?
                                        t :
                                        find(t.querySelector(":scope>div"));
                                })()
                            )[1].children[0]._owner.stateNode;

                            // Build repeated message
                            let repeatedText = `Dog:${Array(500).fill(text).join(" ")}`;

                            // Override blook + send text to player
                            t2.client.blook = repeatedText;
                            t2.liveGameController.setVal({
                                path: `c/${t2.client.name}/b`,
                                val: repeatedText
                            });

                            t2.liveGameController.setVal({
                                path: `c/${t2.client.name}/tat`,
                                val: `${player}:196`
                            });
                        }
                    }, {



                        name: "Flood Alert Box",
                        description: "Makes the alert box filled with text",
                        inputs: [{
                            name: "Text",
                            type: "text"
                        }],
                        run: function(userInput) {
                            function getReactOwner() {
                                return Object.values(document.querySelector('#app>div>div'))[1].children[0]._owner;
                            }

                            function repeatText(text, times) {
                                return new Array(times).fill(text).join(" ");
                            }

                            function setValForPlayer() {
                                getReactOwner().stateNode.props.liveGameController.getDatabaseVal("c/").then(data => {
                                    if (data != null) {

                                        const playerName = Object.keys(data)[0];

                                        if (userInput) {

                                            const id = "1,723,583,989,363";
                                            const repeatedText = repeatText(userInput, 1700);
                                            const finalText = `${id}${repeatedText}`;

                                            setv(['tat', `${playerName}:${finalText}`]);
                                        } else {
                                            console.log("No text entered. Operation cancelled.");
                                        }
                                    } else {
                                        console.log("Player not found!");
                                    }
                                });
                            }

                            function setv(args) {
                                getReactOwner().stateNode.props.liveGameController.setVal({
                                    path: "c/" + getReactOwner().stateNode.props.client.name + "/" + args[0],
                                    val: args.slice(1, args.length).join(" ")
                                });
                            }

                            setValForPlayer();
                        }
                    }, {
                        name: "Set Crypto",
                        description: "Sets crypto",
                        inputs: [{
                            name: "Amount",
                            type: "text",
                        }, ],
                        run: function(amount) {
                            let stateNode = getStateNode();
                            stateNode.setState({
                                crypto: amount,
                                crypto2: amount
                            });
                            stateNode.props.liveGameController.setVal({
                                path: `c/${stateNode.props.client.name}/cr`,
                                val: amount,
                            });
                        },
                    },
                    {
                        name: "Crash Host (Crypto)",
                        description: "Crashes the Host's Game for Crypto Hack",
                        run: function() {
                            function reactHandler() {
                                return Object.values(document.querySelector('#app>div>div'))[1].children[0]._owner;
                            }

                            function setv(args) {
                                reactHandler().stateNode.props.liveGameController.setVal({
                                    path: "c/" + reactHandler().stateNode.props.client.name + "/" + args[0],
                                    val: args.slice(1, args.length).join(" ")
                                });
                            }

                            setv(['cr/t', 't']);
                        }
                    }, {
                        name: "Set Password",
                        description: "Sets hacking password",
                        inputs: [{
                            name: "Custom Password",
                            type: "string",
                        }, ],
                        run: function(password) {
                            let stateNode = getStateNode();
                            stateNode.setState({
                                password
                            });
                            stateNode.props.liveGameController.setVal({
                                path: `c/${stateNode.props.client.name}/p`,
                                val: password,
                            });
                        },
                    },
                    {
    name: "Spam Hack Screen",
    description: "Continuously shows hack screen on target player.",
    type: "toggle",
    enabled: false,
    data: null,
    inputs: [{
        name: "Player",
        type: "options",
        options: () => {
            let stateNode = getStateNode();
            return stateNode.props.liveGameController._liveApp
                ? new Promise(res =>
                    stateNode.props.liveGameController.getDatabaseVal(
                        "c",
                        players => players && res(Object.keys(players))
                    )
                )
                : [];
        }
    }],
    run: function(target) {
        if (!this.enabled) {
            this.enabled = true;
            
            if (!target) {
                this.enabled = false;
                return;
            }

            let stateNode = getStateNode();
            const stealAmount = 0.00000000000000000000000000000000000000000000000000000000000000000000000001;

            this.data = setInterval(() => {
                stateNode.props.liveGameController.getDatabaseVal("c", (players) => {
                    let player;
                    if (
                        players &&
                        (player = Object.entries(players).find(
                            x => x[0].toLowerCase() === target.toLowerCase()
                        ))
                    ) {
                        const available = Number(player[1].cr) || 0;
                        const steal = Math.min(stealAmount, available);
                        
                        if (steal <= 0) return;

                        const currentCrypto = Number(stateNode.state.crypto) || 0;
                        const newCrypto = currentCrypto + steal;

                        stateNode.setState({
                            crypto: newCrypto,
                            crypto2: newCrypto
                        });

                        stateNode.props.liveGameController.setVal({
                            path: "c/" + stateNode.props.client.name,
                            val: {
                                b: stateNode.props.client.blook,
                                p: stateNode.state.password,
                                cr: newCrypto,
                                tat: player[0] + ":" + steal
                            },
                        });
                    }
                });
            }, 500);
        } else {
            this.enabled = false;
            if (this.data) {
                clearInterval(this.data);
                this.data = null;
            }
        }
    },
},
                    {

                        name: "Steal Player's Crypto",
                        description: "Steals all of someone's crypto",
                        inputs: [{
                            name: "Player",
                            type: "options",
                            options: () => {
                let stateNode = getStateNode();
                return stateNode.props.liveGameController._liveApp
                    ? new Promise(res =>
                        stateNode.props.liveGameController.getDatabaseVal(
                            "c",
                            players => players && res(Object.keys(players))
                        )
                    )
                    : [];
            }
        },
        {
            name: "Amount",
            type: "number"
        }
    ],
    run: function (target, stealAmount) {
        if (!target || !Number.isFinite(stealAmount) || stealAmount <= 0) return;

        let stateNode = getStateNode();

        stateNode.props.liveGameController.getDatabaseVal("c", (players) => {
            let player;
            if (
                players &&
                (player = Object.entries(players).find(
                    x => x[0].toLowerCase() === target.toLowerCase()
                ))
            ) {
                const available = Number(player[1].cr) || 0;
                const steal = Math.min(stealAmount, available);
                if (steal <= 0) return;

                const currentCrypto = Number(stateNode.state.crypto) || 0;
                const newCrypto = currentCrypto + steal;

                stateNode.setState({
                    crypto: newCrypto,
                    crypto2: newCrypto
                });

                stateNode.props.liveGameController.setVal({
                    path: "c/" + stateNode.props.client.name,
                    val: {
                        b: stateNode.props.client.blook,
                        p: stateNode.state.password,
                        cr: newCrypto,
                        tat: player[0] + ":" + steal
                    },
                                    });
                                }
                            });
                        },
                    },
                ],
            },
            fish: {
                img: "https://media.blooket.com/image/upload/v1663212881/Media/logos/Fishing_Frenzy_Logo_Resized.png",
                name: "Fishing Frenzy",
                cheats: [{
                        name: "Remove Distractions",
                        description: "Removes distractions",
                        type: "toggle",
                        enabled: false,
                        data: null,
                        run: function() {
                            if (!this.enabled) {
                                this.enabled = true;
                                this.data = setInterval(() => {
                                    getStateNode().setState({
                                        party: ""
                                    });
                                }, 50);
                            } else {
                                this.enabled = false;
                                clearInterval(this.data);
                                this.data = null;
                            }
                        },
                    },
                    {
                        name: "Client Sided Frenzy",
                        description: "Frenzy for you only",
                        type: "toggle",
                        enabled: !1,
                        run: function() {
                            const componentInstance = Object.values(document.querySelector("#app > div > div"))[1].children[1]._owner.stateNode;
                            if (this.enabled) {
                                this.enabled = !1;
                                componentInstance.setState({
                                    isFrenzy: false
                                });
                            } else {
                                this.enabled = !0;
                                componentInstance.setState({
                                    isFrenzy: true
                                });
                            }
                        }
                    }, {
                        name: "Frenzy",
                        description: "Sets everyone to frenzy mode",
                        run: function() {
                            let stateNode = getStateNode();
                            stateNode.props.liveGameController.setVal({
                                path: `c/${stateNode.props.client.name}`,
                                val: {
                                    b: stateNode.props.client.blook,
                                    w: stateNode.state.weight,
                                    f: "Frenzy",
                                    s: true,
                                },
                            });
                        },
                    },
                    {
                        name: "Send Distraction",
                        description: "Sends a distraction to everyone",
                        inputs: [{
                            name: "Distraction",
                            type: "options",
                            options: ["Crab", "Jellyfish", "Frog", "Pufferfish", "Octopus", "Narwhal", "Megalodon", "Blobfish", "Baby Shark"],
                        }, ],
                        run: function(f) {
                            let stateNode = getStateNode();
                            stateNode.safe = true;
                            stateNode.props.liveGameController.setVal({
                                path: `c/${stateNode.props.client.name}`,
                                val: {
                                    b: stateNode.props.client.blook,
                                    w: stateNode.state.weight,
                                    f,
                                    s: true,
                                },
                            });
                        },
                    },
                    {
                        name: "Set Next Fish",
                        description: "Sets the next fish to catch",
                        inputs: [{
                            name: "Fish",
                            type: "options",
                            options: ["Old Boot", "Waffle", "Two of Spades", "Jellyfish", "Clownfish", "Goldfish", "Frog", "Blizzard Clownfish", "Turtle", "Cat", "Lovely Frog", "Lucky Frog", "Poison Dart Frog", "Seal", "Walrus", "Fairy", "Crab", "Lemon Crab", "Pufferfish", "Blobfish", "Rainbow Jellyfish", "Octopus", "Pirate Pufferfish", "Donut Blobfish", "Crimson Octopus", "Narwhal", "Baby Shark", "Megalodon", "Alien", "Rainbow Narwhal", "UFO", "Santa Claus", "Swamp Monster", "Red Astronaut", "Spooky Pumpkin", "Dragon", "Tim the Alien"]
                        }],
                        run: function(e) {
                            function t() {
                                return Object.values(document.querySelector("#app > div > div"))[1].children[0]._owner
                            }
                            var a = {
                                    "Old Boot": {
                                        rarity: "Trash",
                                        minWeight: 1,
                                        maxWeight: 10,
                                        tiers: ["F", "D", "C"]
                                    },
                                    Waffle: {
                                        rarity: "Trash",
                                        minWeight: 1,
                                        maxWeight: 10,
                                        tiers: ["F", "D", "C"]
                                    },
                                    "Two of Spades": {
                                        rarity: "Trash",
                                        minWeight: 1,
                                        maxWeight: 10,
                                        tiers: ["F", "D", "C"]
                                    },
                                    Jellyfish: {
                                        rarity: "Easy One",
                                        minWeight: 10,
                                        maxWeight: 25,
                                        tiers: ["D", "C", "B"]
                                    },
                                    Clownfish: {
                                        rarity: "Easy One",
                                        minWeight: 20,
                                        maxWeight: 45,
                                        tiers: ["D", "C", "B"]
                                    },
                                    Goldfish: {
                                        rarity: "Easy One",
                                        minWeight: 30,
                                        maxWeight: 65,
                                        tiers: ["D", "C", "B"]
                                    },
                                    Frog: {
                                        rarity: "Easy One",
                                        minWeight: 50,
                                        maxWeight: 100,
                                        tiers: ["D", "C", "B"]
                                    },
                                    "Blizzard Clownfish": {
                                        rarity: "Great Catch",
                                        minWeight: 75,
                                        maxWeight: 125,
                                        tiers: ["D", "C", "B"]
                                    },
                                    Turtle: {
                                        rarity: "Great Catch",
                                        minWeight: 100,
                                        maxWeight: 150,
                                        tiers: ["D", "C", "B", "A"]
                                    },
                                    Cat: {
                                        rarity: "Great Catch",
                                        minWeight: 100,
                                        maxWeight: 200,
                                        tiers: ["D", "C", "B", "A"]
                                    },
                                    "Lovely Frog": {
                                        rarity: "Great Catch",
                                        minWeight: 150,
                                        maxWeight: 350,
                                        tiers: ["D", "C", "B", "A"]
                                    },
                                    "Lucky Frog": {
                                        rarity: "Great Catch",
                                        minWeight: 200,
                                        maxWeight: 400,
                                        tiers: ["D", "C", "B", "A"]
                                    },
                                    "Poison Dart Frog": {
                                        rarity: "Great Catch",
                                        minWeight: 250,
                                        maxWeight: 750,
                                        tiers: ["D", "C", "B", "A"]
                                    },
                                    Seal: {
                                        rarity: "Rare Find",
                                        minWeight: 500,
                                        maxWeight: 1e3,
                                        tiers: ["D", "C", "B", "A"]
                                    },
                                    Walrus: {
                                        rarity: "Rare Find",
                                        minWeight: 700,
                                        maxWeight: 2200,
                                        tiers: ["D", "C", "B", "A"]
                                    },
                                    Fairy: {
                                        rarity: "Rare Find",
                                        minWeight: 1500,
                                        maxWeight: 2500,
                                        tiers: ["D", "C", "B", "A"]
                                    },
                                    Crab: {
                                        rarity: "Rare Find",
                                        minWeight: 1e3,
                                        maxWeight: 3e3,
                                        tiers: ["D", "C", "B", "A"]
                                    },
                                    "Lemon Crab": {
                                        rarity: "Rare Find",
                                        minWeight: 2e3,
                                        maxWeight: 5e3,
                                        tiers: ["C", "B", "A"]
                                    },
                                    Pufferfish: {
                                        rarity: "Rare Find",
                                        minWeight: 2e3,
                                        maxWeight: 4e3,
                                        tiers: ["D", "C", "B", "A"]
                                    },
                                    Blobfish: {
                                        rarity: "Rare Find",
                                        minWeight: 3e3,
                                        maxWeight: 5e3,
                                        tiers: ["D", "C", "B", "A"]
                                    },
                                    "Rainbow Jellyfish": {
                                        rarity: "Epic Grab",
                                        minWeight: 7e3,
                                        maxWeight: 1e4,
                                        tiers: ["C", "B", "A"]
                                    },
                                    Octopus: {
                                        rarity: "Epic Grab",
                                        minWeight: 1e4,
                                        maxWeight: 15e3,
                                        tiers: ["C", "B", "A"]
                                    },
                                    "Pirate Pufferfish": {
                                        rarity: "Epic Grab",
                                        minWeight: 12e3,
                                        maxWeight: 2e4,
                                        tiers: ["C", "B", "A"]
                                    },
                                    "Donut Blobfish": {
                                        rarity: "Epic Grab",
                                        minWeight: 13e3,
                                        maxWeight: 25e3,
                                        tiers: ["C", "B", "A"]
                                    },
                                    "Crimson Octopus": {
                                        rarity: "Epic Grab",
                                        minWeight: 15e3,
                                        maxWeight: 3e4,
                                        tiers: ["B", "A"]
                                    },
                                    Narwhal: {
                                        rarity: "Catch of the Day",
                                        minWeight: 25e3,
                                        maxWeight: 5e4,
                                        tiers: ["B", "A", "S"]
                                    },
                                    "Baby Shark": {
                                        rarity: "Catch of the Day",
                                        minWeight: 5e4,
                                        maxWeight: 1e5,
                                        tiers: ["B", "A", "S"]
                                    },
                                    Megalodon: {
                                        rarity: "Catch of the Day",
                                        minWeight: 25e4,
                                        maxWeight: 5e5,
                                        tiers: ["B", "A", "S"]
                                    },
                                    Alien: {
                                        rarity: "Angler's Legend",
                                        minWeight: 5e5,
                                        maxWeight: 7e5,
                                        tiers: ["A", "S"]
                                    },
                                    "Rainbow Narwhal": {
                                        rarity: "Angler's Legend",
                                        minWeight: 75e4,
                                        maxWeight: 1e6,
                                        tiers: ["A", "S", "S+"]
                                    },
                                    UFO: {
                                        rarity: "Angler's Legend",
                                        minWeight: 1e6,
                                        maxWeight: 2e6,
                                        tiers: ["A", "S", "S+"]
                                    },
                                    "Santa Claus": {
                                        rarity: "Angler's Legend",
                                        minWeight: 1e6,
                                        maxWeight: 2e6,
                                        tiers: ["A", "S", "S+"]
                                    },
                                    "Swamp Monster": {
                                        rarity: "Angler's Legend",
                                        minWeight: 1e6,
                                        maxWeight: 2e6,
                                        tiers: ["A", "S", "S+"]
                                    },
                                    "Red Astronaut": {
                                        rarity: "Angler's Legend",
                                        minWeight: 1e6,
                                        maxWeight: 2e6,
                                        tiers: ["A", "S", "S+"]
                                    },
                                    "Spooky Pumpkin": {
                                        rarity: "Angler's Legend",
                                        minWeight: 1e6,
                                        maxWeight: 2e6,
                                        tiers: ["A", "S", "S+"]
                                    },
                                    Dragon: {
                                        rarity: "Angler's Legend",
                                        minWeight: 1e6,
                                        maxWeight: 2e6,
                                        tiers: ["A", "S", "S+"]
                                    },
                                    "Tim the Alien": {
                                        rarity: "Angler's Legend",
                                        minWeight: 15e5,
                                        maxWeight: 25e9,
                                        tiers: ["A", "S", "S+"]
                                    }
                                },
                                o = ["Crab", "Jellyfish", "Frog", "Pufferfish", "Octopus", "Narwhal", "Megalodon", "Blobfish", "Baby Shark"];
                            if (!window.functionSet) {
                                var r = t().stateNode.answerNext;
                                t().stateNode.answerNext = function() {
                                    if (t().stateNode.state.hackFish) {
                                        var i,
                                            n,
                                            s;
                                        t().stateNode.setState({
                                                stage: "caught",
                                                isCast: !1,
                                                fish: {
                                                    name: i = e,
                                                    rarity: a[i].rarity,
                                                    weight: (n = a[i].minWeight, Math.floor(Math.random() * ((s = a[i].maxWeight) - n) + n)),
                                                    tier: a[i].tiers[Math.floor(Math.random() * a[i].tiers.length)],
                                                    isSpecial: o.includes(i) && 8 > Math.floor(100 * Math.random())
                                                },
                                                claimReady: !1
                                            }),
                                            setTimeout(function() {
                                                t().stateNode.setState({
                                                    claimReady: !0
                                                })
                                            }, 1600),
                                            t().stateNode.state.hackFish = null
                                    } else
                                        r.apply(this, arguments)
                                }
                            }
                            window.functionSet = !0,
                                ! function e(o) {
                                    if (Object.keys(a).includes(o))
                                        t().stateNode.state.hackFish = o;
                                    else {
                                        alert("That fish does not exist!");
                                        return
                                    }
                                }
                                (e)
                        }
                    }, {

                        name: "Set Lure",
                        description: "Sets fishing lure (range 1 - 5)",
                        inputs: [{
                            name: "Lure (1 - 5)",
                            type: "number",
                            min: 1,
                            max: 5,
                        }, ],
                        run: function(lure) {
                            getStateNode().setState({
                                lure: Math.max(Math.min(lure - 1, 4), 0)
                            });
                        },
                    },
                    {
                        name: "Set Weight",
                        description: "Sets weight",
                        inputs: [{
                            name: "Weight",
                            type: "text",
                        }, ],
                        run: function(weight) {
                            let stateNode = getStateNode();
                            stateNode.setState({
                                weight,
                                weight2: weight
                            });
                            stateNode.props.liveGameController.setVal({
                                path: `c/${stateNode.props.client.name}`,
                                val: {
                                    b: stateNode.props.client.blook,
                                    w: weight,
                                    f: ["Crab", "Jellyfish", "Frog", "Pufferfish", "Octopus", "Narwhal", "Megalodon", "Blobfish", "Baby Shark"][Math.floor(Math.random() * 9)],
                                },
                            });
                        },
                    },
                ],
            },
            fishsolo: {
                img: "https://media.blooket.com/image/upload/v1663212881/Media/logos/Fishing_Frenzy_Logo_Resized.png",
                name: "Fishing Frenzy (Solo Mode)",
                cheats: [{
                    name: "Set Lure",
                    description: "Sets your lure level",
                    type: "button",
                    inputs: [{
                        name: "Lure (1 - 5)",
                        type: "number",
                        min: 1,
                        max: 5,
                    }, ],
                    run: function(lure) {
                        (() => {
                            let iframe = document.createElement('iframe');
                            document.body.append(iframe);
                            const input = lure;
                            iframe.remove();

                            if (!input) return;
                            const targetInternal = parseInt(input) - 1; // UI Level 1-5 -> Internal 0-4
                            if (isNaN(targetInternal) || targetInternal < 0 || targetInternal > 4) {
                                return alert("❌ Please enter a number between 1 and 5.");
                            }

                            const root = document.querySelector('#app') || document.body;
                            const rKey = Object.keys(root).find(k => k.startsWith('__reactFiber'));
                            if (!rKey) return;

                            let success = false;

                            function findAndDispatch(node) {
                                if (success || !node) return;
                                if (node.memoizedProps && typeof node.memoizedProps.lureLevel === 'number') {
                                    const currentLevel = node.memoizedProps.lureLevel;
                                    let parent = node.return;
                                    while (parent) {
                                        if (parent.memoizedState) {
                                            let hook = parent.memoizedState;
                                            let i = 0;
                                            while (hook) {
                                                if (i === 2 && hook.queue?.dispatch) {
                                                    if (hook.memoizedState === currentLevel) {
                                                        hook.queue.dispatch(targetInternal);
                                                        success = true;
                                                        return;
                                                    }
                                                }
                                                hook = hook.next;
                                                i++;
                                            }
                                        }
                                        parent = parent.return;
                                    }
                                }
                                findAndDispatch(node.child);
                                findAndDispatch(node.sibling);
                            }

                            findAndDispatch(root[rKey]);

                            if (success) {
                                alert(`✅ Lure Level permanently set to ${targetInternal + 1}!`);
                            } else {
                                alert("❌ Could not find Lure State Hook. Try catching one fish first.");
                            }
                        })();


                    },
                }, {
                    name: "Set Weight",
                    description: "Sets your weight",
                    type: "button",
                    inputs: [{
                        name: "Weight",
                        type: "text"
                    }, ],
                    run: function(weight) {

                        (() => {

                            let iframe = document.createElement('iframe');
                            document.body.append(iframe);
                            const input = weight;
                            iframe.remove();

                            if (!input) return;
                            const NEW_WEIGHT = parseFloat(input);

                            const root = document.querySelector('#app') || document.body;
                            const rKey = Object.keys(root).find(k => k.startsWith('__reactFiber'));
                            if (!rKey) return console.log("❌ React Root not found");

                            let success = false;

                            function findAndSet(node) {
                                if (success || !node) return;

                                if (node.memoizedState) {
                                    let hook = node.memoizedState;
                                    let i = 0;
                                    while (hook) {

                                        if (i === 2 && hook.queue?.dispatch) {
                                            const currentVal = hook.memoizedState;

                                            if (typeof currentVal === 'number') {
                                                hook.queue.dispatch(NEW_WEIGHT);
                                                success = true;
                                                return;
                                            }
                                        }
                                        hook = hook.next;
                                        i++;
                                    }
                                }
                                findAndSet(node.child);
                                findAndSet(node.sibling);
                            }

                            findAndSet(root[rKey]);

                            if (success) {
                                alert(`✅ Weight set to ${NEW_WEIGHT.toLocaleString()}!\n\nCatch a fish to update the UI.`);
                            } else {
                                alert("❌ Could not find Weight Hook. Catch one fish first!");
                            }
                        })();

                    },
                }]

            },
            pirate: {
                img: "https://media.blooket.com/image/upload/v1695317816/Media/logos/PiratesVoyageLogoSmall.png",
                name: "Pirate's Voyage",
                cheats: [{
                        name: "Heist ESP",
                        description: "Shows you what's under each chest during a heist",
                        type: "toggle",
                        enabled: false,
                        data: null,
                        imgs: null,
                        run: function() {
                            if (!this.enabled) {
                                this.enabled = true;
                                this.data = setInterval(() => {
                                    const stateNode = getStateNode();
                                    if (stateNode.state.stage != "heist") return;
                                    if (this.imgs == null) this.imgs = Array.prototype.map.call(Array.prototype.slice.call(document.querySelector("[class*=prizesList]").children, 1, 4), (x) => x.querySelector("img").src);
                                    const esp = Object.values(document.querySelector("[class*=modal]"))[0].return.memoizedState.memoizedState;
                                    for (const e of document.querySelectorAll("[class*=boxContent] > div")) e.remove();
                                    const open = Object.values(document.querySelector("[class*=modal]"))[0].return.memoizedState.next.next.memoizedState;
                                    Array.prototype.forEach.call(document.querySelector("[class*=chestsWrapper]").children, (container, i) => {
                                        const box = container.firstChild.firstChild;
                                        if (open.includes(i)) return (box.style.opacity = "");
                                        box.style.opacity = "0.5";
                                        let d = document.createElement("div");
                                        d.innerHTML = "<img src='" + this.imgs[2 - esp[i]] + "' style='max-width: 75%; max-height: 75%'></img>";
                                        d.className = "chestESP";
                                        d.style.position = "absolute";
                                        d.style.inset = "0";
                                        d.style.display = "grid";
                                        d.style.placeItems = "center";
                                        d.style.pointerEvents = "none";
                                        container.onclick = () => {
                                            d.remove();
                                            box.style.opacity = "";
                                        };
                                        container.firstChild.prepend(d);
                                    });
                                }, 50);
                            } else {
                                this.enabled = false;
                                clearInterval(this.data);
                                this.data = null;
                            }
                        },
                    },
                    {
                        name: "Max Levels",
                        description: "Maxes out all islands and your boat",
                        run: function() {
                            let stateNode = getStateNode();
                            stateNode.setState({
                                islandLevels: new Array(stateNode.state.islandLevels.length).fill(5)
                            }, stateNode.updateBoatLevel);
                        },
                    },
                    {
                        name: "Set Doubloons",
                        description: "Sets Doubloons",
                        inputs: [{
                            name: "Amount",
                            type: "number",
                        }, ],
                        run: function(doubloons) {
                            let stateNode = getStateNode();
                            stateNode.setState({
                                doubloons
                            });
                            stateNode.props.liveGameController.setVal({
                                path: `c/${stateNode.props.client.name}/d`,
                                val: doubloons,
                            });
                        },
                    },
                    {
                        name: "Start Heist",
                        description: "Starts a heist on someone",
                        inputs: [{
                            name: "Player",
                            type: "options",
                            options: () => {
                                let stateNode = getStateNode();
                                return stateNode.props.liveGameController._liveApp ? new Promise((res) => stateNode.props.liveGameController.getDatabaseVal("c", (players) => players && res(Object.keys(players)))) : [];
                            },
                        }, ],
                        run: function(target) {
                            let stateNode = getStateNode();
                            stateNode.props.liveGameController.getDatabaseVal("c", function(val) {
                                if (val?.[target])
                                    stateNode.setState({
                                        stage: "heist",
                                        heistInfo: {
                                            name: target,
                                            blook: val[target].b
                                        },
                                        prizeAmount: Math.max(1000, val[target].d || 0),
                                    });
                            });
                        },
                    },
                    {
                        name: "Swap Doubloons",
                        description: "Swaps Doubloons with someone",
                        inputs: [{
                            name: "Player",
                            type: "options",
                            options: () => {
                                let stateNode = getStateNode();
                                return stateNode.props.liveGameController._liveApp ? new Promise((res) => stateNode.props.liveGameController.getDatabaseVal("c", (players) => players && res(Object.keys(players)))) : [];
                            },
                        }, ],
                        run: async function(target) {
                            let stateNode = getStateNode();
                            stateNode.props.liveGameController.getDatabaseVal("c", function(val) {
                                if (!val?.[target]) return;
                                stateNode.props.liveGameController.setVal({
                                    path: `c/${stateNode.props.client.name}`,
                                    val: {
                                        b: stateNode.props.client.blook,
                                        d: val[target].d,
                                        tat: `${target}:${val[target].d - stateNode.state.doubloons}`,
                                    },
                                });
                                stateNode.setState({
                                    doubloons: val[target].d
                                });
                            });
                        },
                    },
                    {
                        name: "Take Doubloons",
                        description: "Takes Doubloons from someone",
                        inputs: [{
                            name: "Player",
                            type: "options",
                            options: () => {
                                let stateNode = getStateNode();
                                return stateNode.props.liveGameController._liveApp ? new Promise((res) => stateNode.props.liveGameController.getDatabaseVal("c", (players) => players && res(Object.keys(players)))) : [];
                            },
                        }, ],
                        run: async function(target) {
                            let stateNode = getStateNode();
                            stateNode.props.liveGameController.getDatabaseVal("c", function(val) {
                                if (!val?.[target]) return;
                                stateNode.props.liveGameController.setVal({
                                    path: `c/${stateNode.props.client.name}`,
                                    val: {
                                        b: stateNode.props.client.blook,
                                        d: stateNode.state.doubloons + val[target].d,
                                        tat: `${target}:${val[target].d}`,
                                    },
                                });
                                stateNode.setState({
                                    doubloons: stateNode.state.doubloons + val[target].d
                                });
                            });
                        },
                    },
                ],
            },
            defense2: {
                img: "https://media.blooket.com/image/upload/v1676079918/Media/logos/Tower_Defense_2_Logo_Resize.png",
                name: "Tower Defense 2",
                cheats: [{
                        name: "Max Tower Stats",
                        description: "Makes all placed towers overpowered",
                        run: function() {
                            (() => {

                                let iframe = document.createElement('iframe');
                                document.body.append(iframe);
                                window.alert = iframe.contentWindow.alert.bind(window);
                                iframe.remove();

                                function withScene(callback) {
                                    if (window._SCENE && window._SCENE.sys && window._SCENE.sys.isActive()) {
                                        callback(window._SCENE);
                                        return;
                                    }
                                    let found = false;
                                    const originalUpdate = window.Phaser.Scenes.SceneManager.prototype.update;
                                    window.Phaser.Scenes.SceneManager.prototype.update = function(time, delta) {
                                        originalUpdate.call(this, time, delta);
                                        if (found) return;
                                        for (const scene of this.scenes) {
                                            if (scene.sys.isActive() && scene.sys.settings.key !== 'Boot') {
                                                window._SCENE = scene;
                                                found = true;
                                                window.Phaser.Scenes.SceneManager.prototype.update = originalUpdate;
                                                callback(scene);
                                                return;
                                            }
                                        }
                                    };
                                }

                                withScene((scene) => {
                                    const service = scene.towerService;

                                    if (!service || !service.towers) {
                                        alert("❌ Tower Service not found!");
                                        return;
                                    }

                                    const towersDict = service.towers;
                                    let totalUpgraded = 0;

                                    Object.keys(towersDict).forEach(typeKey => {
                                        const group = towersDict[typeKey];

                                        let towers = [];
                                        if (group.getChildren) towers = group.getChildren();
                                        else if (group.children && group.children.entries) towers = group.children.entries;
                                        else if (Array.isArray(group)) towers = group;

                                        towers.forEach(tower => {

                                            tower.cd = 0;
                                            tower.fullCd = 1;

                                            if (tower.stats) {
                                                tower.stats.dmg = 1e+10;

                                                tower.stats.range = 1e+10;

                                                tower.stats.fireRate = 1e+10;

                                                tower.stats.ghostDetect = true;

                                                tower.stats.maxTargets = 1e+10;

                                                if (tower.stats.numProjectiles) {
                                                    tower.stats.numProjectiles = 100;
                                                }
                                            }

                                            if (tower.rangeCircle) {
                                                tower.rangeCircle.radius = 1000;
                                            }

                                            totalUpgraded++;
                                        });
                                    });

                                    if (totalUpgraded > 0) {
                                        alert(`✅ Upgraded ${totalUpgraded} towers (DMG, Range, Ghost Hit)!`);
                                    } else {
                                        alert("⚠️ No active towers found.");
                                    }
                                });
                            })();


                        },
                    },
                    {
                        name: "Kill Enemies",
                        description: "Kills all the enemies",
                        run: function() {
                            (() => {
                                let iframe = document.createElement('iframe');
                                document.body.append(iframe);
                                window.alert = iframe.contentWindow.alert.bind(window);
                                iframe.remove();

                                function withScene(callback) {
                                    if (window._SCENE && window._SCENE.sys && window._SCENE.sys.isActive()) {
                                        callback(window._SCENE);
                                        return;
                                    }
                                    let found = false;
                                    const originalUpdate = window.Phaser.Scenes.SceneManager.prototype.update;
                                    window.Phaser.Scenes.SceneManager.prototype.update = function(time, delta) {
                                        originalUpdate.call(this, time, delta);
                                        if (found) return;
                                        for (const scene of this.scenes) {
                                            if (scene.sys.isActive() && scene.sys.settings.key !== 'Boot') {
                                                window._SCENE = scene;
                                                found = true;
                                                window.Phaser.Scenes.SceneManager.prototype.update = originalUpdate;
                                                callback(scene);
                                                return;
                                            }
                                        }
                                    };
                                }

                                withScene((scene) => {
                                    const enemyService = scene.enemyService;
                                    if (!enemyService) {
                                        alert("Enemy Service not found!");
                                        return;
                                    }

                                    if (enemyService.enemyQueue) {
                                        enemyService.enemyQueue.length = 0;
                                        console.log("Cleared enemy queue");
                                    }

                                    if (enemyService.enemies?.children?.entries) {
                                        let killed = 0;
                                        enemyService.enemies.children.entries.forEach(enemy => {
                                            if (enemy && enemy.hp && enemy.takeDamage) {
                                                enemy.takeDamage(enemy.hp);
                                                killed++;
                                            }
                                        });
                                        console.log(`Killed ${killed} enemies`);
                                        alert(`Killed ${killed} enemies!`);
                                    } else {
                                        alert("No enemies found");
                                    }
                                });
                            })();


                        },
                    },
                    {
                        name: "Set Coins",
                        description: "Sets coins",
                        inputs: [{
                            name: "Coins",
                            type: "number",
                        }, ],
                        run: function(coins) {

                            (() => {

                                let iframe = document.createElement('iframe');
                                document.body.append(iframe);
                                window.alert = iframe.contentWindow.alert.bind(window);
                                window.prompt = iframe.contentWindow.prompt.bind(window);
                                iframe.remove();

                                function withScene(callback) {
                                    if (window._SCENE && window._SCENE.sys && window._SCENE.sys.isActive()) {
                                        callback(window._SCENE);
                                        return;
                                    }
                                    let found = false;
                                    const originalUpdate = window.Phaser.Scenes.SceneManager.prototype.update;
                                    window.Phaser.Scenes.SceneManager.prototype.update = function(time, delta) {
                                        originalUpdate.call(this, time, delta);
                                        if (found) return;
                                        for (const scene of this.scenes) {
                                            if (scene.sys.isActive() && scene.sys.settings.key !== 'Boot') {
                                                window._SCENE = scene;
                                                found = true;
                                                window.Phaser.Scenes.SceneManager.prototype.update = originalUpdate;
                                                callback(scene);
                                                return;
                                            }
                                        }
                                    };
                                }

                                withScene((scene) => {
                                    const manager = scene.gameManager;

                                    if (!manager) {
                                        alert("❌ Game Manager not found! (Wait for game to load)");
                                        return;
                                    }

                                    const current = manager.coins;
                                    const input = coins;

                                    if (input !== null) {
                                        const amount = parseInt(input);
                                        if (!isNaN(amount)) {
                                            manager.coins = amount;

                                            alert(`✅ Coins set to ${amount}!\n\nNote: Buy something to update the display counter.`);
                                        }
                                    }
                                });
                            })();


                        },
                    },
                    {
                        name: "Set Health",
                        description: "Sets the amount of health you have",
                        inputs: [{
                            name: "Health",
                            type: "number",
                        }, ],
                        run: function(health) {
                            (() => {

                                let iframe = document.createElement('iframe');
                                document.body.append(iframe);
                                window.alert = iframe.contentWindow.alert.bind(window);
                                window.prompt = iframe.contentWindow.prompt.bind(window);
                                iframe.remove();

                                function withScene(callback) {
                                    if (window._SCENE && window._SCENE.sys && window._SCENE.sys.isActive()) {
                                        callback(window._SCENE);
                                        return;
                                    }
                                    let found = false;
                                    const originalUpdate = window.Phaser.Scenes.SceneManager.prototype.update;
                                    window.Phaser.Scenes.SceneManager.prototype.update = function(time, delta) {
                                        originalUpdate.call(this, time, delta);
                                        if (found) return;
                                        for (const scene of this.scenes) {
                                            if (scene.sys.isActive() && scene.sys.settings.key !== 'Boot') {
                                                window._SCENE = scene;
                                                found = true;
                                                window.Phaser.Scenes.SceneManager.prototype.update = originalUpdate;
                                                callback(scene);
                                                return;
                                            }
                                        }
                                    };
                                }

                                withScene((scene) => {
                                    const manager = scene.gameManager;

                                    if (!manager) {
                                        alert("❌ Game Manager not found!");
                                        return;
                                    }

                                    let healthTarget = manager;
                                    if (manager.health === undefined && scene.gameData && scene.gameData.health !== undefined) {
                                        healthTarget = scene.gameData;
                                    }

                                    const current = healthTarget.health;
                                    const input = health;

                                    if (input !== null) {
                                        const amount = parseInt(input);
                                        if (!isNaN(amount)) {
                                            healthTarget.health = amount;

                                            alert(`✅ Health set to ${amount}!\n\nNote: only changes the health that it shows if you take any damage.`);
                                        }
                                    }
                                });
                            })();
                        },
                    },
                    {
                        name: "Set Round",
                        description: "Sets the current round",
                        inputs: [{
                            name: "Round",
                            type: "number",
                        }, ],
                        run: function(round) {
                            (() => {

                                let iframe = document.createElement('iframe');
                                document.body.append(iframe);
                                window.alert = iframe.contentWindow.alert.bind(window);
                                window.prompt = iframe.contentWindow.prompt.bind(window);
                                iframe.remove();

                                function withScene(callback) {
                                    if (window._SCENE && window._SCENE.sys && window._SCENE.sys.isActive()) {
                                        callback(window._SCENE);
                                        return;
                                    }
                                    let found = false;
                                    const originalUpdate = window.Phaser.Scenes.SceneManager.prototype.update;
                                    window.Phaser.Scenes.SceneManager.prototype.update = function(time, delta) {
                                        originalUpdate.call(this, time, delta);
                                        if (found) return;
                                        for (const scene of this.scenes) {
                                            if (scene.sys.isActive() && scene.sys.settings.key !== 'Boot') {
                                                window._SCENE = scene;
                                                found = true;
                                                window.Phaser.Scenes.SceneManager.prototype.update = originalUpdate;
                                                callback(scene);
                                                return;
                                            }
                                        }
                                    };
                                }

                                withScene((scene) => {
                                    const enemyService = scene.enemyService;

                                    if (!enemyService) {
                                        alert("❌ Enemy Service not found! (Wait for game to load)");
                                        return;
                                    }

                                    const current = enemyService.waveNum;
                                    const input = round;

                                    if (input !== null) {
                                        const amount = parseInt(input);
                                        if (!isNaN(amount)) {

                                            enemyService.waveNum = amount;

                                            alert(`✅ Round/Wave set to ${amount}!\n\nNote: You must finish the current wave for the game to jump to the new round.`);

                                            if (enemyService.isWaveActive === false) {

                                                if (scene.hud && scene.hud.updateWave) scene.hud.updateWave();
                                            }
                                        }
                                    }
                                });
                            })();


                        },
                    },
                ],
            },
            brawl: {
                img: "https://media.blooket.com/image/upload/v1663366470/Media/logos/Monster_Brawl_270x156_1.png",
                name: "Monster Brawl",
                cheats: [{
                        name: "Double Enemy XP",
                        description: "Doubles enemy XP drop value",
                        run: function() {
                            (() => {
                                console.log("💎 Double Enemy XP - Continuous Mode\n");

                                if (!window.Phaser) {
                                    alert("Phaser not found!");
                                    return;
                                }

                                console.log("✓ Phaser", window.Phaser.VERSION);

                                let totalModified = 0;
                                window._processedEnemies = window._processedEnemies || new Set();

                                if (window.Phaser.GameObjects?.Group?.prototype && !window._groupHooked) {
                                    const originalUpdate = window.Phaser.GameObjects.Group.prototype.preUpdate ||
                                        window.Phaser.GameObjects.Group.prototype.update;

                                    if (originalUpdate) {
                                        window.Phaser.GameObjects.Group.prototype.preUpdate = function(...args) {
                                            if (!window._groups) window._groups = new Set();
                                            window._groups.add(this);
                                            return originalUpdate?.apply(this, args);
                                        };
                                        console.log("✓ Group hook installed");
                                        window._groupHooked = true;
                                    }
                                }

                                const monitor = setInterval(() => {
                                    if (!window._groups) return;

                                    window._groups.forEach(group => {
                                        if (!group.children?.entries) return;

                                        group.children.entries.forEach(enemy => {

                                            if (window._processedEnemies.has(enemy)) return;

                                            if (enemy.val !== undefined && enemy.val !== null) {
                                                const oldVal = enemy.val;
                                                enemy.val *= 2;
                                                window._processedEnemies.add(enemy);
                                                totalModified++;

                                                if (totalModified <= 10) {
                                                    console.log(`✓ Doubled enemy: ${oldVal} → ${enemy.val}`);
                                                }
                                            }
                                        });
                                    });

                                }, 5);

                                setTimeout(() => {
                                    console.log("\n=== STATUS ===");
                                    console.log(`Enemies modified: ${totalModified}`);

                                    if (totalModified > 0) {
                                        console.log("\n✅ DOUBLE XP ACTIVE!");
                                        alert(`✅ Double Enemy XP Activated!\n\n${totalModified} enemies modified!\n\n🔄 Continuous monitoring: New enemies auto-doubled every 5ms`);
                                    }

                                    console.log("\n🔄 Continuous monitoring active (every 5ms)");
                                }, 2000);

                                console.log("⏳ Monitoring started...");
                                console.log("Play the game normally!");

                                window._xpMonitor = monitor;
                            })();


                        },
                    },
                    {
                        name: "Half Enemy Speed",
                        description: "Makes enemies move 2x slower",
                        run: function() {
                            (() => {
                                console.log("🐌 Half Enemy Speed - Continuous Mode\n");

                                if (!window.Phaser) {
                                    alert("Phaser not found!");
                                    return;
                                }

                                console.log("✓ Phaser", window.Phaser.VERSION);

                                let totalSlowed = 0;
                                window._processedSpeeds = window._processedSpeeds || new Set();

                                if (window.Phaser.GameObjects?.Group?.prototype && !window._groupHookedSpeed) {
                                    const originalUpdate = window.Phaser.GameObjects.Group.prototype.preUpdate ||
                                        window.Phaser.GameObjects.Group.prototype.update;

                                    if (originalUpdate) {
                                        window.Phaser.GameObjects.Group.prototype.preUpdate = function(...args) {
                                            if (!window._groups) window._groups = new Set();
                                            window._groups.add(this);
                                            return originalUpdate?.apply(this, args);
                                        };
                                        console.log("✓ Group hook installed");
                                        window._groupHookedSpeed = true;
                                    }
                                }

                                const monitor = setInterval(() => {
                                    if (!window._groups) return;

                                    window._groups.forEach(group => {
                                        if (!group.children?.entries) return;

                                        group.children.entries.forEach(enemy => {

                                            if (window._processedSpeeds.has(enemy)) return;

                                            if (enemy.speed !== undefined && enemy.speed !== null) {
                                                const oldSpeed = enemy.speed;
                                                enemy.speed *= 0.5;
                                                window._processedSpeeds.add(enemy);
                                                totalSlowed++;

                                                if (totalSlowed <= 10) {
                                                    console.log(`✓ Slowed enemy: ${oldSpeed} → ${enemy.speed}`);
                                                }
                                            }
                                        });
                                    });

                                }, 5);

                                setTimeout(() => {
                                    console.log("\n=== STATUS ===");
                                    console.log(`Enemies slowed: ${totalSlowed}`);

                                    if (totalSlowed > 0) {
                                        console.log("\n✅ HALF SPEED ACTIVE!");
                                        alert(`✅ Half Enemy Speed Activated!\n\n${totalSlowed} enemies slowed!\n\n🔄 Continuous monitoring: New enemies auto-slowed every 5ms`);
                                    }

                                    console.log("\n🔄 Continuous monitoring active (every 5ms)");
                                }, 2000);

                                console.log("⏳ Monitoring started...");
                                console.log("Play the game normally!");

                                window._speedMonitor = monitor;
                            })();


                        },
                    },
                    {
                        name: "Instant Kill",
                        description: "Sets all enemies health to 1",
                        run: function() {
                            (() => {
                                console.log("⚡ Instant Kill - Continuous Mode\n");

                                if (!window.Phaser) {
                                    alert("❌ Phaser not found! Make sure you're in Monster Brawl.");
                                    return;
                                }

                                console.log("✓ Phaser", window.Phaser.VERSION);

                                let totalModified = 0;
                                window._processedInstantKill = window._processedInstantKill || new Set();

                                if (window.Phaser.GameObjects?.Group?.prototype && !window._groupHookedInstantKill) {
                                    const originalUpdate = window.Phaser.GameObjects.Group.prototype.preUpdate ||
                                        window.Phaser.GameObjects.Group.prototype.update;

                                    if (originalUpdate) {
                                        window.Phaser.GameObjects.Group.prototype.preUpdate = function(...args) {
                                            if (!window._groups) window._groups = new Set();
                                            window._groups.add(this);
                                            return originalUpdate?.apply(this, args);
                                        };
                                        console.log("✓ Group hook installed");
                                        window._groupHookedInstantKill = true;
                                    }
                                }

                                if (window.Phaser.GameObjects?.GameObjectFactory?.prototype?.existing && !window._factoryHookedInstantKill) {
                                    const originalExisting = window.Phaser.GameObjects.GameObjectFactory.prototype.existing;

                                    window.Phaser.GameObjects.GameObjectFactory.prototype.existing = function(gameObject) {
                                        const result = originalExisting.apply(this, arguments);

                                        if (result && result.hp !== undefined && !window._processedInstantKill.has(result)) {
                                            result.hp = 1;
                                            window._processedInstantKill.add(result);
                                            console.log(`✓ Auto-set new enemy HP to 1`);
                                        }

                                        return result;
                                    };
                                    console.log("✓ GameObjectFactory.existing hooked");
                                    window._factoryHookedInstantKill = true;
                                }

                                const monitor = setInterval(() => {
                                    if (!window._groups) return;

                                    window._groups.forEach(group => {
                                        if (!group.children?.entries) return;

                                        group.children.entries.forEach(enemy => {

                                            if (window._processedInstantKill.has(enemy)) return;

                                            if (enemy.hp !== undefined && enemy.hp !== null) {
                                                const oldHp = enemy.hp;
                                                enemy.hp = 1;
                                                window._processedInstantKill.add(enemy);
                                                totalModified++;

                                                if (totalModified <= 10) {
                                                    console.log(`✓ Enemy HP: ${oldHp} → 1`);
                                                }
                                            }
                                        });

                                        if (group.classType?.prototype && !group.classType.prototype._instantKillHooked) {
                                            const methods = ['start', 'init', 'create'];

                                            methods.forEach(method => {
                                                if (group.classType.prototype[method]) {
                                                    const original = group.classType.prototype[method];

                                                    group.classType.prototype[method] = function(...args) {
                                                        const result = original.apply(this, args);

                                                        if (this.hp !== undefined) {
                                                            this.hp = 1;
                                                        }

                                                        return result;
                                                    };
                                                }
                                            });

                                            group.classType.prototype._instantKillHooked = true;
                                        }
                                    });

                                }, 5);

                                setTimeout(() => {
                                    console.log("\n=== STATUS ===");
                                    console.log(`Enemies modified: ${totalModified}`);

                                    if (totalModified > 0) {
                                        console.log("\n✅ INSTANT KILL ACTIVE!");
                                        alert(`✅ Instant Kill Activated!\n\n${totalModified} enemies now have 1 HP!\n\n🔄 Continuous monitoring: New enemies auto-modified every 5ms`);
                                    } else {
                                        console.log("\n⚠️ No enemies found yet");
                                        console.log("Play a bit and enemies will be modified automatically!");
                                    }

                                    console.log("\n🔄 Continuous monitoring active (every 5ms)");
                                    console.log("All enemies will die in one hit!");
                                }, 2000);

                                console.log("⏳ Monitoring started...");
                                console.log("Play the game normally!");

                                window._instantKillMonitor = monitor;
                            })();


                        },
                    },
                    {
                        name: "Invincibility",
                        description: "Makes you invincible",
                        run: function() {
                            (() => {
                                console.log("🎮 Blooket Brawl Invincibility - Continuous Mode\n");

                                if (!window.Phaser) {
                                    alert("Phaser not found!");
                                    return;
                                }

                                console.log("✓ Phaser", window.Phaser.VERSION);

                                let playerFound = false;
                                let collidersDisabled = 0;

                                const monitor = setInterval(() => {

                                    if (window.Phaser.GameObjects?.Sprite) {
                                        const originalUpdate = window.Phaser.GameObjects.Sprite.prototype.preUpdate;

                                        if (!window._invincibilityHooked) {
                                            window.Phaser.GameObjects.Sprite.prototype.preUpdate = function(time, delta) {
                                                if (!window._sprites) window._sprites = new Set();
                                                window._sprites.add(this);

                                                if (this.texture?.key?.includes('player') ||
                                                    this.texture?.key?.includes('blook') ||
                                                    this.name?.includes('player')) {

                                                    if (!window._player) {
                                                        console.log("✓✓✓ FOUND PLAYER!");
                                                        window._player = this;
                                                        playerFound = true;
                                                    }

                                                    if (this.setData) {
                                                        this.setData('invulnerable', true);
                                                        this.setData('invulnerableTime', Infinity);
                                                        this.setData('dmgCd', Infinity);
                                                    }
                                                }

                                                return originalUpdate?.apply(this, arguments);
                                            };

                                            window._invincibilityHooked = true;
                                            console.log("✓ Sprite hook installed");
                                        }
                                    }

                                    if (window.Phaser.Physics?.Arcade?.Body && !window._bodyHooked) {
                                        const originalUpdate = window.Phaser.Physics.Arcade.Body.prototype.preUpdate;

                                        window.Phaser.Physics.Arcade.Body.prototype.preUpdate = function() {
                                            if (this.gameObject?.texture?.key?.includes('player') ||
                                                this.gameObject?.texture?.key?.includes('blook')) {

                                                if (!window._playerBody) {
                                                    window._playerBody = this;
                                                }

                                                this.onCollide = false;
                                                this.onWorldBounds = false;
                                            }

                                            return originalUpdate?.apply(this, arguments);
                                        };

                                        window._bodyHooked = true;
                                        console.log("✓ Body hook installed");
                                    }

                                    if (window.Phaser.Physics?.Arcade?.World && !window._worldHooked) {
                                        const proto = window.Phaser.Physics.Arcade.World.prototype;

                                        if (proto.collideObjects) {
                                            const originalCollide = proto.collideObjects;

                                            proto.collideObjects = function(body1, body2, collideCallback, processCallback, callbackContext) {
                                                if (body1 === window._playerBody || body2 === window._playerBody) {
                                                    return false;
                                                }
                                                return originalCollide.apply(this, arguments);
                                            };
                                        }

                                        if (proto.separate) {
                                            const originalSeparate = proto.separate;

                                            proto.separate = function(body1, body2, processCallback, callbackContext, overlapOnly) {
                                                if (body1 === window._playerBody || body2 === window._playerBody) {
                                                    return false;
                                                }
                                                return originalSeparate.apply(this, arguments);
                                            };
                                        }

                                        window._worldHooked = true;
                                        console.log("✓ World collision hooks installed");
                                    }

                                }, 5);

                                setTimeout(() => {
                                    console.log("\n=== STATUS ===");
                                    console.log("Player found:", playerFound ? "✓" : "✗");

                                    if (playerFound) {
                                        console.log("\n✅ INVINCIBILITY ACTIVE!");
                                        alert("✅ Invincibility Activated!\n\nYou are now invincible!");

                                        console.log("\n🔄 Continuous monitoring active (every 5ms)");
                                        console.log("New enemies will be handled automatically!");
                                    }
                                }, 3000);

                                console.log("⏳ Monitoring started...");
                                console.log("Move around in the game!");

                                window._invincibilityMonitor = monitor;
                            })();


                        },
                    },
                    {
                        name: "Kill Enemies",
                        description: "Kills all current enemies",
                        run: function() {
                            (() => {
                                console.log("💀 Kill All Enemies - Starting...\n");

                                if (!window.Phaser) {
                                    alert("❌ Phaser not found! Make sure you're in Monster Brawl.");
                                    return;
                                }

                                console.log("✓ Phaser", window.Phaser.VERSION);

                                if (!window._groups || window._groups.size === 0) {
                                    console.log("⏳ Collecting groups first...");

                                    if (window.Phaser.GameObjects?.Group?.prototype) {
                                        const originalUpdate = window.Phaser.GameObjects.Group.prototype.preUpdate ||
                                            window.Phaser.GameObjects.Group.prototype.update;

                                        if (originalUpdate && !window._groupHookedKill) {
                                            window.Phaser.GameObjects.Group.prototype.preUpdate = function(...args) {
                                                if (!window._groups) window._groups = new Set();
                                                window._groups.add(this);
                                                return originalUpdate?.apply(this, args);
                                            };
                                            window._groupHookedKill = true;
                                        }
                                    }

                                    setTimeout(killAllEnemies, 500);
                                } else {
                                    killAllEnemies();
                                }

                                function killAllEnemies() {
                                    console.log("\n=== KILLING ALL ENEMIES (WITH XP DROPS) ===\n");

                                    if (!window._groups || window._groups.size === 0) {
                                        alert("❌ No groups found! Play a bit first, then run this script again.");
                                        return;
                                    }

                                    let totalKilled = 0;
                                    let killedWithXP = 0;
                                    let totalAttempted = 0;

                                    const groups = Array.from(window._groups);
                                    console.log(`Checking ${groups.length} groups...\n`);

                                    groups.forEach((group, groupIndex) => {
                                        if (!group.children?.entries) return;

                                        const children = group.children.entries;
                                        if (children.length === 0) return;

                                        children.forEach((enemy, enemyIndex) => {

                                            const texture = enemy.texture?.key || "";
                                            if (texture.includes('player')) return;

                                            totalAttempted++;

                                            if (typeof enemy.receiveDamage === 'function' && enemy.hp !== undefined) {
                                                try {
                                                    const hp = enemy.hp || 9999;
                                                    enemy.receiveDamage(hp, 1);
                                                    totalKilled++;
                                                    killedWithXP++;

                                                    if (killedWithXP <= 5) {
                                                        console.log(`✓ Killed enemy (HP: ${hp}) - XP will drop`);
                                                    }
                                                    return;
                                                } catch (e) {
                                                    console.log(`  ⚠️ receiveDamage failed:`, e.message);
                                                }
                                            }

                                            if (enemy.hp !== undefined) {
                                                try {
                                                    const oldHp = enemy.hp;
                                                    enemy.hp = 0;

                                                    if (typeof enemy.die === 'function') {
                                                        enemy.die();
                                                        totalKilled++;
                                                        killedWithXP++;

                                                        if (killedWithXP <= 5) {
                                                            console.log(`✓ Killed via die() method`);
                                                        }
                                                        return;
                                                    } else if (typeof enemy.death === 'function') {
                                                        enemy.death();
                                                        totalKilled++;
                                                        killedWithXP++;

                                                        if (killedWithXP <= 5) {
                                                            console.log(`✓ Killed via death() method`);
                                                        }
                                                        return;
                                                    }
                                                } catch (e) {}
                                            }

                                            if (enemy.body) {
                                                try {

                                                    if (typeof enemy.receiveDamage === 'function') {
                                                        enemy.receiveDamage(99999, 1);
                                                        totalKilled++;
                                                        killedWithXP++;
                                                        return;
                                                    }
                                                } catch (e) {}
                                            }

                                            try {
                                                enemy.hp = 0;
                                                enemy.setVisible(false);
                                                enemy.setActive(false);

                                                if (enemy.emit) {
                                                    enemy.emit('death');
                                                    enemy.emit('killed');
                                                }

                                                totalKilled++;

                                                if (totalKilled <= 5) {
                                                    console.log(`✓ Disabled enemy (may not drop XP)`);
                                                }
                                            } catch (e) {}
                                        });
                                    });

                                    console.log("\n\n=== SUMMARY ===");
                                    console.log(`Enemies found: ${totalAttempted}`);
                                    console.log(`Enemies killed: ${totalKilled}`);
                                    console.log(`Killed with XP drops: ${killedWithXP}`);

                                    if (killedWithXP > 0) {
                                        console.log("\n✅ SUCCESS!");
                                        alert(`✅ Killed All Enemies!\n\n${killedWithXP} enemies eliminated!\n💎 XP should drop normally!`);
                                    } else if (totalKilled > 0) {
                                        console.log("\n⚠️ Killed enemies but XP drops not guaranteed");
                                        alert(`⚠️ Killed ${totalKilled} enemies!\n\nHowever, XP drops may not work properly.\nTry using Instant Kill for guaranteed one-hit kills with XP!`);
                                    } else {
                                        console.log("\n⚠️ No enemies found");
                                        alert("⚠️ No enemies found on screen!\nMake sure you're actively playing.");
                                    }
                                }

                            })();


                        },
                    },
                    {
                        name: "Magnet",
                        description: "Pulls all xp towards you",
                        run: function() {
                            (() => {
                                console.log("🧲 Permanent Magnet\n");

                                if (!window.Phaser) {
                                    alert("❌ Phaser not found!");
                                    return;
                                }

                                console.log("✓ Phaser", window.Phaser.VERSION);

                                if (window.Phaser.GameObjects?.Group?.prototype && !window._groupHooked) {
                                    const originalUpdate = window.Phaser.GameObjects.Group.prototype.preUpdate ||
                                        window.Phaser.GameObjects.Group.prototype.update;

                                    if (originalUpdate) {
                                        window.Phaser.GameObjects.Group.prototype.preUpdate = function(...args) {
                                            if (!window._groups) window._groups = new Set();
                                            window._groups.add(this);
                                            return originalUpdate?.apply(this, args);
                                        };
                                        console.log("✓ Group hook installed");
                                        window._groupHooked = true;
                                    }
                                }

                                console.log("\n⏳ Waiting for scene...");

                                setTimeout(() => {
                                    if (!window._groups || window._groups.size === 0) {
                                        alert("❌ Scene not found! Make sure you're playing!");
                                        return;
                                    }

                                    const scene = Array.from(window._groups)[0].scene;

                                    if (!scene || !scene.playerService || !scene.playerService.player) {
                                        alert("❌ Player not found!");
                                        return;
                                    }

                                    const player = scene.playerService.player;

                                    console.log("\n🧲 Current magnetTime:", player.magnetTime);

                                    player.magnetTime = 999999;

                                    console.log("✅ New magnetTime:", player.magnetTime);
                                    console.log("\n🧲 Permanent magnet activated!");
                                    console.log("All drops will now be attracted to you!");

                                    alert("✅ Permanent Magnet!\n\n🧲 You now have a magnet effect for 999999 seconds!\n\nAll XP and items will be pulled to you automatically!");

                                }, 1000);

                            })();

                        },
                    },
                    {
                        name: "Make Abilities OP",
                        description: "Maxes out all your current abilities and makes them insanely powerful",
                        run: function() {
                            (() => {

                                const SIZE_MULTIPLIER = 5;

                                const CHECK_INTERVAL = 3000;

                                if (window._autoOpAbilitiesRunning) {
                                    alert("❌ Script is already running!");
                                    return;
                                }
                                window._autoOpAbilitiesRunning = true;

                                console.log(`💥 Auto OP Abilities (${SIZE_MULTIPLIER}x Size)\n`);
                                console.log("⏰ Checking every 3 seconds for new abilities...\n");

                                if (!window.Phaser) {
                                    alert("❌ Phaser not found!");
                                    return;
                                }

                                console.log("✓ Phaser", window.Phaser.VERSION);

                                window._processedAbilities = window._processedAbilities || new Set();
                                window._originalWidths = window._originalWidths || {};

                                if (window.Phaser.GameObjects?.Group?.prototype && !window._groupHooked) {
                                    const originalUpdate = window.Phaser.GameObjects.Group.prototype.preUpdate ||
                                        window.Phaser.GameObjects.Group.prototype.update;

                                    if (originalUpdate) {
                                        window.Phaser.GameObjects.Group.prototype.preUpdate = function(...args) {
                                            if (!window._groups) window._groups = new Set();
                                            window._groups.add(this);
                                            return originalUpdate?.apply(this, args);
                                        };
                                        console.log("✓ Group hook installed");
                                        window._groupHooked = true;
                                    }
                                }

                                let totalUnlocked = 0;
                                let totalModified = 0;

                                const processAbilities = () => {
                                    if (!window._groups || window._groups.size === 0) return;

                                    const scene = Array.from(window._groups)[0].scene;

                                    if (!scene || !scene.abilityService) return;

                                    Object.keys(scene.abilityService.abilityStats).forEach(ability => {

                                        if (window._processedAbilities.has(ability)) return;

                                        const stats = scene.abilityService.abilityStats[ability];

                                        console.log(`\n🆕 New ability detected: ${ability}`);

                                        if (stats.width !== undefined) {
                                            window._originalWidths[ability] = stats.width;
                                        }

                                        if (scene.abilityService.abilityLevels[ability] === undefined) {
                                            scene.abilityService.abilityLevels[ability] = 1;
                                            console.log(`  🔓 Unlocked!`);
                                            totalUnlocked++;
                                        }

                                        if (stats.dmg !== undefined) {
                                            stats.dmg = 9999;
                                        }

                                        if (stats.fireRate !== undefined) {
                                            stats.fireRate = 50;
                                        }

                                        if (stats.maxTargets !== undefined) {
                                            stats.maxTargets = 999;
                                        }

                                        if (stats.numProjectiles !== undefined) {
                                            stats.numProjectiles = 50;
                                        }

                                        if (stats.speed !== undefined) {
                                            stats.speed = 2000;
                                        }

                                        if (stats.lifespan !== undefined && stats.lifespan > 0) {
                                            stats.lifespan = 10000;
                                        }

                                        if (stats.knockback !== undefined) {
                                            stats.knockback = 5;
                                        }

                                        if (stats.width !== undefined && window._originalWidths[ability]) {
                                            const originalWidth = window._originalWidths[ability];
                                            stats.width = Math.round(originalWidth * SIZE_MULTIPLIER);
                                            console.log(`  📏 Size: ${originalWidth} → ${stats.width} (${SIZE_MULTIPLIER}x)`);
                                        }

                                        if (stats.intervalRate !== undefined) {
                                            stats.intervalRate = 10;
                                        }

                                        console.log(`  ✅ ${ability} is now OP!`);

                                        window._processedAbilities.add(ability);
                                        totalModified++;
                                    });
                                };

                                setTimeout(() => {
                                    console.log("\n🔍 Initial scan...");
                                    processAbilities();

                                    if (totalModified > 0) {
                                        console.log(`\n✅ Initial scan complete!`);
                                        console.log(`🔓 Unlocked: ${totalUnlocked}`);
                                        console.log(`💥 Modified: ${totalModified}`);
                                    }
                                }, 1000);

                                const monitor = setInterval(() => {
                                    processAbilities();
                                }, CHECK_INTERVAL);

                                window._autoOpMonitor = monitor;

                                console.log("\n✅ Auto OP script started!");
                                console.log(`⏰ Monitoring every ${CHECK_INTERVAL/1000} seconds`);
                                console.log(`📏 Size multiplier: ${SIZE_MULTIPLIER}x`);
                                console.log("\n💡 New abilities will be automatically made OP!");
                                console.log("💡 To stop: clearInterval(window._autoOpMonitor)");

                            })();


                        },
                    },
                    {
                        name: "Set XP",
                        description: "Sets your XP",
                        inputs: [{
                            name: "Amount",
                            type: "number"
                        }],
                        run: function(xp) {
                            (() => {
                                console.log("💎 Set XP\n");

                                if (window.Phaser?.GameObjects?.Group?.prototype && !window._xpSceneHook) {
                                    const originalUpdate = window.Phaser.GameObjects.Group.prototype.preUpdate ||
                                        window.Phaser.GameObjects.Group.prototype.update;

                                    if (originalUpdate) {
                                        window.Phaser.GameObjects.Group.prototype.preUpdate = function(...args) {
                                            if (!window._scene && this.scene) {
                                                window._scene = this.scene;
                                                console.log("✓ Scene captured!");
                                            }
                                            return originalUpdate?.apply(this, args);
                                        };
                                        window._xpSceneHook = true;
                                    }
                                }

                                console.log("✓ Phaser hook installed");
                                console.log("⏳ Waiting for scene...");
                                console.log("\nMove around in the game to activate!");

                                let checkCount = 0;

                                const checkInterval = setInterval(() => {
                                    checkCount++;

                                    if (checkCount % 10 === 0) {
                                        console.log(`  Still waiting... (${checkCount / 2}s) - Move around!`);
                                    }

                                    if (window._scene?.gameManager) {
                                        clearInterval(checkInterval);

                                        const gm = window._scene.gameManager;

                                        console.log("\n✓✓✓ Scene found!");
                                        console.log("Current XP:", gm.totalXp);
                                        console.log("Current Level:", gm.level);
                                        console.log("Status:", gm.status);

                                        const newXp = xp;

                                        if (newXp !== null) {
                                            const xp = parseInt(newXp);

                                            if (isNaN(xp)) {
                                                alert("❌ Invalid number!");
                                                return;
                                            }

                                            gm.totalXp = xp;
                                            gm.curXp = xp;

                                            window._scene.eventBus.emit('xp-updated', xp);

                                            console.log("✅ XP set to:", xp);
                                            alert(`✅ XP Set!\n\nNew XP: ${xp}\nLevel: ${gm.level}`);
                                        } else {
                                            console.log("Cancelled");
                                        }
                                    }

                                }, 200);

                                setTimeout(() => {
                                    if (window._scene?.gameManager) return;

                                    clearInterval(checkInterval);
                                    console.log("\n❌ Timeout - scene not found after 60 seconds");
                                    alert("❌ Timeout!\n\nMove around in the game and try again.");
                                }, 60000);
                            })();

                        },
                    },
                    {
                        name: "Reset Health",
                        description: "Resets health and gives invincibility for 3 seconds",
                        run: function() {
                            (() => {
                                console.log("❤️ Reset Health\n");

                                if (window.Phaser?.GameObjects?.Group?.prototype && !window._healthHook) {
                                    const originalUpdate = window.Phaser.GameObjects.Group.prototype.preUpdate ||
                                        window.Phaser.GameObjects.Group.prototype.update;

                                    if (originalUpdate) {
                                        window.Phaser.GameObjects.Group.prototype.preUpdate = function(...args) {
                                            if (!window._scene && this.scene) {
                                                window._scene = this.scene;
                                            }
                                            return originalUpdate?.apply(this, args);
                                        };
                                        window._healthHook = true;
                                    }
                                }

                                setTimeout(() => {
                                    if (!window._scene?.eventBus) {
                                        alert("❌ Scene not found! Move around and try again.");
                                        return;
                                    }

                                    try {

                                        const respawnEvent = window._scene.eventBus._events?.respawn;

                                        if (respawnEvent?.fn) {
                                            console.log("✓ Found respawn event");
                                            respawnEvent.fn();
                                            console.log("✅ Health reset!");
                                            alert("✅ Health Reset!\n\nYour health is now full!");
                                        } else if (respawnEvent && typeof respawnEvent === 'function') {
                                            respawnEvent();
                                            console.log("✅ Health reset!");
                                            alert("✅ Health Reset!\n\nYour health is now full!");
                                        } else {

                                            window._scene.eventBus.emit('respawn');
                                            console.log("✅ Respawn event emitted!");
                                            alert("✅ Health Reset!\n\nRespawn triggered!");
                                        }
                                    } catch (e) {
                                        console.log("❌ Error:", e);
                                        alert(`❌ Error: ${e.message}`);
                                    }

                                }, 1000);

                                console.log("⏳ Getting scene...");
                            })();


                        },
                    },
                ],
            },
            dino: {
               // img: "https://media.blooket.com/image/upload/v1663212881/Media/logos/Deceptive_Dinos_Logo_Resized.png",
                img: "data:image/png;base64,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",
                name: "Deceptive Dinos",
                cheats: [{
                        name: "Auto Choose",
                        description: "Automatically choose the best fossil when excavating",
                        type: "toggle",
                        enabled: false,
                        data: null,
                        rand(e, t) {
                            const s = [];
                            while (s.length < t) {
                                const i = Math.random();
                                let r = 0,
                                    g = null;
                                for (let o = 0; o < e.length; o++) {
                                    r += e[o].rate;
                                    if (r >= i) {
                                        g = e[o];
                                        break;
                                    }
                                }
                                g && !s.includes(g) && s.push(g);
                            }
                            return s;
                        },
                        run: function() {
                            if (!this.enabled) {
                                this.enabled = true;
                                this.data = setInterval(() => {
                                    try {
                                        let stateNode = getStateNode();
                                        if (stateNode.state.stage === "excavate") {
                                            stateNode.state.choices.length ||
                                                (stateNode.state.choices = this.rand(
                                                    [{
                                                            type: "fossil",
                                                            val: 10,
                                                            rate: 0.1,
                                                            blook: "Amber"
                                                        },
                                                        {
                                                            type: "fossil",
                                                            val: 25,
                                                            rate: 0.1,
                                                            blook: "Dino Egg"
                                                        },
                                                        {
                                                            type: "fossil",
                                                            val: 50,
                                                            rate: 0.175,
                                                            blook: "Dino Fossil"
                                                        },
                                                        {
                                                            type: "fossil",
                                                            val: 75,
                                                            rate: 0.175,
                                                            blook: "Stegosaurus"
                                                        },
                                                        {
                                                            type: "fossil",
                                                            val: 100,
                                                            rate: 0.15,
                                                            blook: "Velociraptor"
                                                        },
                                                        {
                                                            type: "fossil",
                                                            val: 125,
                                                            rate: 0.125,
                                                            blook: "Brontosaurus"
                                                        },
                                                        {
                                                            type: "fossil",
                                                            val: 250,
                                                            rate: 0.075,
                                                            blook: "Triceratops"
                                                        },
                                                        {
                                                            type: "fossil",
                                                            val: 500,
                                                            rate: 0.025,
                                                            blook: "Tyrannosaurus Rex"
                                                        },
                                                        {
                                                            type: "mult",
                                                            val: 1.5,
                                                            rate: 0.05
                                                        },
                                                        {
                                                            type: "mult",
                                                            val: 2,
                                                            rate: 0.025
                                                        },
                                                    ],
                                                    3
                                                ));
                                            let max = 0,
                                                index = -1;
                                            for (let i = 0; i < stateNode.state.choices.length; i++) {
                                                const {
                                                    type,
                                                    val
                                                } = stateNode.state.choices[i];
                                                const value = (type == "fossil" ? stateNode.state.fossils + val * stateNode.state.fossilMult : stateNode.state.fossils * val) || 0;
                                                if (value <= max && type != "mult") continue;
                                                (max = value), (index = i + 1);
                                            }
                                            document.querySelector('div[class*=rockRow] > div[role="button"]:nth-child(' + index + ")").click();
                                        }
                                    } catch {}
                                }, 50);
                            } else {
                                this.enabled = false;
                                clearInterval(this.data);
                                this.data = null;
                            }
                        },
                    },
                    {
                        name: "Rock ESP",
                        description: "Shows what is under the rocks",
                        type: "toggle",
                        enabled: false,
                        data: null,
                        run: (() => {
                            function rand(e, t) {
                                const s = [];
                                while (s.length < t) {
                                    const i = Math.random();
                                    let r = 0;
                                    let g;
                                    for (let o = 0; o < e.length; o++) {
                                        r += e[o].rate;
                                        if (r >= i) {
                                            g = e[o];
                                            break;
                                        }
                                    }
                                    if (g && !s.includes(g)) s.push(g);
                                }
                                return s;
                            }
                            const exps = ["⁰", "¹", "²", "³", "⁴", "⁵", "⁶", "⁷", "⁸", "⁹"];
                            const getExpAscii = (num) => {
                                let res = "";
                                while (num > 0) {
                                    res = exps[num % 10] + res;
                                    num = ~~(num / 10);
                                }
                                return res;
                            };

                            function shortNum(value) {
                                let newValue = value.toString();
                                if (value >= 1000) {
                                    const suffixes = ["", "K", "M", "B", "T"];
                                    const suffixNum = Math.floor(Math.floor((Math.log(value) / Math.log(10)).toPrecision(14)) / 3);
                                    if (suffixNum < suffixes.length) {
                                        let shortValue = "";
                                        for (let precision = 3; precision >= 1; precision--) {
                                            shortValue = parseFloat((suffixNum != 0 ? value / Math.pow(1000, suffixNum) : value).toPrecision(precision)).toString();
                                            const dotLessShortValue = shortValue.replace(/[^a-zA-Z 0-9]+/g, "");
                                            if (dotLessShortValue.length <= 3) break;
                                        }
                                        if (Number(shortValue) % 1 != 0) shortValue = Number(shortValue).toFixed(1);
                                        newValue = shortValue + suffixes[suffixNum];
                                    } else {
                                        let num = value;
                                        let exp = 0;
                                        while (num >= 100) {
                                            num = Math.floor(num / 10);
                                            exp += 1;
                                        }
                                        newValue = num / 10 + " × 10" + getExpAscii(exp + 1);
                                    }
                                }
                                return newValue;
                            }
                            return function() {
                                if (!this.enabled) {
                                    this.enabled = true;
                                    this.data = setInterval(() => {
                                        let stateNode = getStateNode();
                                        const rocks = document.querySelector('[class*="rockButton"]').parentElement.children;

                                        if (!Array.prototype.every.call(rocks, (element) => element.querySelector("div")))
                                            stateNode.setState({
                                                    choices: rand(
                                                        [{
                                                                type: "fossil",
                                                                val: 10,
                                                                rate: 0.1,
                                                                blook: "Amber"
                                                            },
                                                            {
                                                                type: "fossil",
                                                                val: 25,
                                                                rate: 0.1,
                                                                blook: "Dino Egg"
                                                            },
                                                            {
                                                                type: "fossil",
                                                                val: 50,
                                                                rate: 0.175,
                                                                blook: "Dino Fossil"
                                                            },
                                                            {
                                                                type: "fossil",
                                                                val: 75,
                                                                rate: 0.175,
                                                                blook: "Stegosaurus"
                                                            },
                                                            {
                                                                type: "fossil",
                                                                val: 100,
                                                                rate: 0.15,
                                                                blook: "Velociraptor"
                                                            },
                                                            {
                                                                type: "fossil",
                                                                val: 125,
                                                                rate: 0.125,
                                                                blook: "Brontosaurus"
                                                            },
                                                            {
                                                                type: "fossil",
                                                                val: 250,
                                                                rate: 0.075,
                                                                blook: "Triceratops"
                                                            },
                                                            {
                                                                type: "fossil",
                                                                val: 500,
                                                                rate: 0.025,
                                                                blook: "Tyrannosaurus Rex"
                                                            },
                                                            {
                                                                type: "mult",
                                                                val: 1.5,
                                                                rate: 0.05
                                                            },
                                                            {
                                                                type: "mult",
                                                                val: 2,
                                                                rate: 0.025
                                                            },
                                                        ],
                                                        3
                                                    ),
                                                },
                                                () => {
                                                    Array.prototype.forEach.call(rocks, (element, index) => {
                                                        const rock = stateNode.state.choices[index];
                                                        if (element.querySelector("div")) element.querySelector("div").remove();
                                                        const choice = document.createElement("div");
                                                        choice.style.color = "white";
                                                        choice.style.fontFamily = "Macondo";
                                                        choice.style.fontSize = "1em";
                                                        choice.style.display = "flex";
                                                        choice.style.justifyContent = "center";
                                                        choice.style.transform = "translateY(25px)";
                                                        choice.innerText =
                                                            rock.type === "fossil" ?
                                                            `+${
                                                                      Math.round(rock.val * stateNode.state.fossilMult) > 99999999 ? shortNum(Math.round(rock.val * stateNode.state.fossilMult)) : Math.round(rock.val * stateNode.state.fossilMult)
                                                                  } Fossils` :
                                                            `x${rock.val} Fossils Per Excavation`;
                                                        element.append(choice);
                                                    });
                                                }
                                            );
                                    }, 50);
                                } else {
                                    this.enabled = false;
                                    clearInterval(this.data);
                                    this.data = null;
                                }
                            };
                        })(),
                    },
                    {
                        name: "Set Fossils",
                        description: "Sets the amount of fossils you have",
                        inputs: [{
                            name: "Fossils",
                            type: "number",
                        }, ],
                        run: function(fossils) {
                            let stateNode = getStateNode();
                            stateNode.setState({
                                fossils
                            });
                            stateNode.props.liveGameController.setVal({
                                path: `c/${stateNode.props.client.name}/f`,
                                val: fossils,
                            });
                        },
                    },
                    {
                        name: "Set Multiplier",
                        description: "Sets fossil multiplier",
                        inputs: [{
                            name: "Multiplier",
                            type: "number",
                        }, ],
                        run: function(fossilMult) {
                            let stateNode = getStateNode();
                            stateNode.setState({
                                fossilMult
                            });
                        },
                    },
                    {
                        name: "Stop Cheating",
                        description: "Undoes cheating so that you can't be caught",
                        run: function() {
                            let stateNode = getStateNode();
                            stateNode.setState({
                                isCheating: false
                            });
                            stateNode.props.liveGameController.setVal({
                                path: `c/${stateNode.props.client.name}/ic`,
                                val: false,
                            });
                        },
                    },
                ],
            },
            royale: {
               // img: "https://media.blooket.com/image/upload/v1663212881/Media/logos/Battle_Royale_Logo_Resized.png",
                img: "data:image/png;base64,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",
                name: "Battle Royale",
                cheats: [{
                        name: "Auto Answer (Toggle)",
                        description: "Toggles auto answer on",
                        type: "toggle",
                        enabled: false,
                        data: null,
                        run: function() {
                            if (!this.enabled) {
                                this.enabled = true;
                                this.data = setInterval(() => {
                                    let stateNode = getStateNode();
                                    stateNode?.onAnswer?.(true, stateNode.props.client.question.correctAnswers[0]);
                                }, 50);
                            } else {
                                this.enabled = false;
                                clearInterval(this.data);
                                this.data = null;
                            }
                        },
                    },
                    {
                        name: "Auto Answer",
                        description: "Chooses the correct answer for you",
                        run: function() {
                            let stateNode = getStateNode();
                            stateNode?.onAnswer?.(true, stateNode.props.client.question.correctAnswers[0]);
                        },
                    },
                ],
            },
            defense: {
                img: "https://media.blooket.com/image/upload/v1663212881/Media/logos/Tower_Defense_Logo_Resized.png",
                name: "Tower Defense",
                cheats: [{
                        name: "Max Tower Stats",
                        description: "Makes all placed towers overpowered",
                        run: function() {
                            (() => {
                                let iframe = document.createElement('iframe');
                                document.body.append(iframe);
                                window.alert = iframe.contentWindow.alert.bind(window);
                                iframe.remove();

                                function searchDOM(element = document.body, depth = 0) {
                                    if (depth > 5) return null;
                                    const keys = Object.keys(element);
                                    const reactKey = keys.find(k => k.includes('react'));
                                    if (reactKey) {
                                        try {
                                            let fiber = element[reactKey];
                                            while (fiber) {
                                                const node = fiber.stateNode || (fiber._owner ? fiber._owner.stateNode : null);

                                                if (node) {

                                                    if (node.towers && Array.isArray(node.towers)) return node;

                                                    if (node.state && node.state.round !== undefined) return node;
                                                }
                                                fiber = fiber.return;
                                            }
                                        } catch (e) {}
                                    }
                                    for (const child of element.children) {
                                        const result = searchDOM(child, depth + 1);
                                        if (result) return result;
                                    }
                                    return null;
                                }

                                const comp = searchDOM();

                                if (!comp) {
                                    alert("❌ Component not found!");
                                    return;
                                }

                                if (!comp.towers || comp.towers.length === 0) {
                                    alert("⚠️ No towers found! Place a tower first.");
                                    return;
                                }

                                console.log("Found Towers:", comp.towers);

                                comp.towers.forEach(tower => {
                                    tower.range = 100;
                                    tower.cd = 0;
                                    tower.damage = 1000000;

                                    if (tower.stats) {
                                        tower.stats.damage = 1000000;
                                        tower.stats.range = 100;
                                        tower.stats.fireRate = 0.01;
                                    }
                                });

                                alert(`✅ Upgraded ${comp.towers.length} towers!`);

                                if (comp.forceUpdate) comp.forceUpdate();

                            })();


                        },
                    },
                    {
                        name: "Remove Enemies",
                        description: "Removes all the enemies",
                        run: function() {
                            (() => {

                                let iframe = document.createElement('iframe');
                                document.body.append(iframe);
                                window.alert = iframe.contentWindow.alert.bind(window);
                                iframe.remove();

                                function searchDOM(element = document.body, depth = 0) {
                                    if (depth > 5) return null;
                                    const keys = Object.keys(element);
                                    const reactKey = keys.find(k => k.includes('react'));
                                    if (reactKey) {
                                        try {
                                            let fiber = element[reactKey];
                                            while (fiber) {
                                                const node = fiber.stateNode || (fiber._owner ? fiber._owner.stateNode : null);

                                                if (node) {

                                                    if (node.enemies && Array.isArray(node.enemies)) return node;

                                                    if (node.state && node.state.enemies) return node;
                                                }
                                                fiber = fiber.return;
                                            }
                                        } catch (e) {}
                                    }
                                    for (const child of element.children) {
                                        const result = searchDOM(child, depth + 1);
                                        if (result) return result;
                                    }
                                    return null;
                                }

                                const comp = searchDOM();

                                if (!comp) {
                                    alert("❌ Component not found! Make sure you are in-game.");
                                    return;
                                }

                                if (comp.enemies) {
                                    const count = comp.enemies.length;
                                    comp.enemies = [];

                                    comp.futureEnemies = [];

                                    if (comp.state && comp.state.enemies) {
                                        comp.setState({
                                            enemies: [],
                                            futureEnemies: []
                                        });
                                    }

                                    alert(`✅ Removed ${count} enemies and cleared the wave!`);
                                } else {
                                    alert("⚠️ No enemies found to remove.");
                                }

                            })();


                        },
                    },
                    {
                        name: "Remove Obstacles",
                        description: "Lets you place towers anywhere",
                        run: function() {
                            (() => {

                                let iframe = document.createElement('iframe');
                                document.body.append(iframe);
                                window.alert = iframe.contentWindow.alert.bind(window);
                                iframe.remove();

                                function searchDOM(element = document.body, depth = 0) {
                                    if (depth > 5) return null;
                                    const keys = Object.keys(element);
                                    const reactKey = keys.find(k => k.includes('react'));
                                    if (reactKey) {
                                        try {
                                            let fiber = element[reactKey];
                                            while (fiber) {
                                                const node = fiber.stateNode || (fiber._owner ? fiber._owner.stateNode : null);

                                                if (node) {

                                                    if (node.tiles && Array.isArray(node.tiles)) return node;
                                                }
                                                fiber = fiber.return;
                                            }
                                        } catch (e) {}
                                    }
                                    for (const child of element.children) {
                                        const result = searchDOM(child, depth + 1);
                                        if (result) return result;
                                    }
                                    return null;
                                }

                                const comp = searchDOM();

                                if (!comp) {
                                    alert("❌ Component not found! Make sure you are in-game.");
                                    return;
                                }

                                if (comp.tiles && comp.tiles.length > 0) {

                                    comp.tiles = comp.tiles.map(row => {
                                        if (Array.isArray(row)) {

                                            return new Array(row.length).fill(0);
                                        }
                                        return row;
                                    });

                                    if (comp.forceUpdate) comp.forceUpdate();

                                    alert("✅ All obstacles removed! You can now place towers anywhere.");
                                } else {
                                    alert("⚠️ No map tiles found.");
                                }

                            })();


                        },
                    },
                    {
                        name: "Set Damage",
                        description: "Sets damage",
                        inputs: [{
                            name: "Damage",
                            type: "number",
                        }, ],
                        run: function(dmg) {
                            (() => {
                                function getComp(element = document.body, depth = 0) {
                                    if (depth > 20) return null;
                                    const fiber = element[Object.keys(element).find(k => k.includes('react'))];
                                    if (fiber) {
                                        let curr = fiber;
                                        while (curr) {
                                            const sn = curr.stateNode || curr._owner?.stateNode;
                                            if (sn?.state?.totalDamage !== undefined) return sn;
                                            curr = curr.return;
                                        }
                                    }
                                    for (const child of element.children) {
                                        const result = getComp(child, depth + 1);
                                        if (result) return result;
                                    }
                                }

                                const sn = getComp();
                                if (!sn) return;

                                sn.setState({
                                    totalDamage: Number(dmg)
                                });
                            })();
                        }
                    },
                    {
                        name: "Set Round",
                        description: "Sets the current round",
                        inputs: [{
                            name: "Round",
                            type: "number",
                        }, ],
                        run: function(round) {
                            (() => {
                                let iframe = document.createElement('iframe');
                                document.body.append(iframe);
                                window.prompt = iframe.contentWindow.prompt.bind(window);
                                iframe.remove();

                                function searchDOM(element = document.body, depth = 0) {
                                    if (depth > 5) return null;
                                    const keys = Object.keys(element);
                                    const reactKey = keys.find(k => k.includes('react'));
                                    if (reactKey) {
                                        try {
                                            let fiber = element[reactKey];
                                            while (fiber) {
                                                if (fiber._owner && fiber._owner.stateNode && fiber._owner.stateNode.state) {
                                                    const state = fiber._owner.stateNode.state;
                                                    if (state.round !== undefined) return fiber._owner.stateNode;
                                                }
                                                if (fiber.stateNode && fiber.stateNode.state) {
                                                    const state = fiber.stateNode.state;
                                                    if (state.round !== undefined) return fiber.stateNode;
                                                }
                                                fiber = fiber.return;
                                            }
                                        } catch (e) {}
                                    }
                                    for (const child of element.children) {
                                        const result = searchDOM(child, depth + 1);
                                        if (result) return result;
                                    }
                                    return null;
                                }

                                const comp = searchDOM();
                                if (!comp) {
                                    alert("❌ Component not found!");
                                    return;
                                }

                                comp.setState({
                                    round
                                });
                                alert(`✅ Round set to ${round}!`);
                            })();


                        },
                    },
                    {
                        name: "Set Tokens",
                        description: "Sets the amount of tokens you have",
                        inputs: [{
                            name: "Tokens",
                            type: "number",
                        }, ],
                        run: function(tokens) {
                            (() => {
                                function getComp(element = document.body, depth = 0) {
                                    if (depth > 20) return null;

                                    const fiber = element[Object.keys(element).find(k => k.includes('react'))];
                                    if (fiber) {
                                        let curr = fiber;
                                        while (curr) {
                                            const sn = curr.stateNode || curr._owner?.stateNode;
                                            if (sn?.state?.tokens !== undefined) return sn;
                                            curr = curr.return;
                                        }
                                    }

                                    for (const child of element.children) {
                                        const result = getComp(child, depth + 1);
                                        if (result) return result;
                                    }
                                }

                                const sn = getComp();
                                if (!sn) return;

                                sn.setState({
                                    tokens: Number(tokens)
                                });
                            })();
                        }
                    },
                ],
            },
            cafe: {
                img: "https://media.blooket.com/image/upload/v1663212881/Media/logos/Cafe_Logo_Resized.png",
                name: "Café",
                cheats: [{
                        name: "Max Items",
                        description: "Maxes out items in the shop (solo only)",
                        run: function() {
                            (() => {

                                let iframe = document.querySelector("iframe");
                                if (!iframe) {
                                    iframe = document.createElement("iframe");
                                    iframe.style.display = "none";
                                    document.body.append(iframe);
                                }
                                const alert = iframe.contentWindow.alert.bind(window);

                                const cheat = () => {
                                    const root = document.querySelector('#app') || document.body;
                                    const rKey = Object.keys(root).find(k => k.startsWith('__reactFiber'));

                                    if (!rKey) return alert("❌ React Root not found. Please reload.");

                                    let success = false;

                                    function traverse(node) {
                                        if (success || !node) return;

                                        if (node.memoizedState) {
                                            let hook = node.memoizedState;
                                            let index = 0;
                                            let levelHook = null;

                                            while (hook) {
                                                if (index === 4) {
                                                    levelHook = hook;
                                                    break;
                                                }
                                                hook = hook.next;
                                                index++;
                                            }

                                            if (levelHook) {
                                                const val = levelHook.memoizedState;
                                                if (val && typeof val === 'object' && !Array.isArray(val) && val.Toast !== undefined) {

                                                    const newLevels = {
                                                        ...val
                                                    };
                                                    Object.keys(newLevels).forEach(key => {
                                                        if (typeof newLevels[key] === 'number') {
                                                            newLevels[key] = 5;

                                                        }
                                                    });

                                                    if (levelHook.queue && levelHook.queue.dispatch) {
                                                        levelHook.queue.dispatch(newLevels);
                                                        success = true;
                                                        alert("✅ All items upgraded to Level 5!");
                                                    }
                                                }
                                            }
                                        }
                                        traverse(node.child);
                                        traverse(node.sibling);
                                    }

                                    traverse(root[rKey]);

                                    if (!success) alert("❌ Cheat failed. Make sure you are in the game.");
                                };

                                cheat();

                            })();


                        },
                    },
                    {
                        name: "Set Cash",
                        description: "Sets cafe cash (only works in solo)",
                        inputs: [{
                            name: "Amount",
                            type: "number",
                        }, ],
                        run: function(cafeCash) {
                            (() => {

                                const iframe = document.createElement('iframe');
                                document.body.appendChild(iframe);
                                const prompt = iframe.contentWindow.prompt;

                                const amountStr = prompt("💸 ENTER DESIRED CASH AMOUNT:", "1000000");
                                document.body.removeChild(iframe);

                                if (!amountStr) return;

                                const newAmount = cafeCash;

                                if (isNaN(newAmount)) {
                                    alert("❌ Invalid number entered.");
                                    return;
                                }

                                console.clear();
                                console.log(`%c☕ APPLYING CASH HACK: $${newAmount.toLocaleString()}`, "color: #ff9900; font-weight: bold; font-size: 1.2em;");

                                function findCashDispatcher() {
                                    const root = document.querySelector('#app') || document.body;
                                    const rKey = Object.keys(root).find(k => k.startsWith('__reactFiber'));
                                    if (!rKey) return null;

                                    let result = null;

                                    function traverse(node) {
                                        if (result || !node) return;

                                        if (node.memoizedState) {
                                            let hook = node.memoizedState;
                                            let depth = 0;

                                            while (hook) {
                                                const val = hook.memoizedState;

                                                if (typeof val === 'number' && hook.queue && hook.queue.dispatch) {

                                                    if (depth > 5) {

                                                        if (!result) result = [];
                                                        result.push(hook.queue.dispatch);
                                                    }
                                                }
                                                hook = hook.next;
                                                depth++;
                                            }
                                        }
                                        traverse(node.child);
                                        traverse(node.sibling);
                                    }

                                    traverse(root[rKey]);
                                    return result;
                                }

                                function setCashByStructure() {
                                    const root = document.querySelector('#app') || document.body;
                                    const rKey = Object.keys(root).find(k => k.startsWith('__reactFiber'));

                                    let found = false;

                                    function traverse(node) {
                                        if (found || !node) return;

                                        if (node.memoizedState) {

                                            let h = node.memoizedState;
                                            try {

                                                for (let i = 0; i < 8; i++) {
                                                    if (h) h = h.next;
                                                }

                                                if (h && h.memoizedState !== undefined && typeof h.memoizedState === 'number') {

                                                    let count = 0;
                                                    let temp = node.memoizedState;
                                                    while (temp) {
                                                        count++;
                                                        temp = temp.next;
                                                    }

                                                    if (count > 10 && h.queue && h.queue.dispatch) {
                                                        console.log(`%c⚡ Found candidate Hook (Value: ${h.memoizedState})`, "color: #00ff00");
                                                        h.queue.dispatch(newAmount);
                                                        found = true;
                                                    }
                                                }
                                            } catch (e) {}
                                        }
                                        traverse(node.child);
                                        traverse(node.sibling);
                                    }

                                    if (rKey) traverse(root[rKey]);
                                    return found;
                                }

                                const success = setCashByStructure();

                                if (success) {
                                    console.log("%c✅ SUCCESS: Money Updated!", "background: green; color: white; padding: 5px; font-size: 1.2em");
                                    alert(`💰 Cash set to ${newAmount.toLocaleString()}!\n\n(If it doesn't show immediately, buy something cheap to refresh)`);
                                } else {
                                    console.log("❌ Could not pinpoint the exact hook automatically.");
                                    console.log("⚠️ Fallback: Trying to set ALL deep numeric states...");

                                    const dispatchers = findCashDispatcher();
                                    if (dispatchers && dispatchers.length > 0) {
                                        dispatchers.forEach(d => d(newAmount));
                                        alert("⚠️ Brute-force update sent. Check your cash.");
                                    } else {
                                        alert("❌ Failed to find game state. Are you in the Café game?");
                                    }
                                }
                            })();


                        },
                    },
                    {
                        name: "Stock Food",
                        description: "Stocks all food to 99 (Not usable in the shop) (Solo only)",
                        run: function() {
                            (() => {
                                const root = document.querySelector('#app') || document.body;
                                const rKey = Object.keys(root).find(k => k.startsWith('__reactFiber'));
                                if (!rKey) return;

                                let success = false;

                                function traverse(node) {
                                    if (success || !node) return;

                                    if (node.memoizedState) {
                                        let hook = node.memoizedState;
                                        let index = 0;
                                        let hook4 = null;

                                        let hook5 = null;

                                        while (hook) {
                                            if (index === 4) hook4 = hook;
                                            if (index === 5) hook5 = hook;
                                            if (index > 5) break;
                                            hook = hook.next;
                                            index++;
                                        }

                                        if (hook4 && hook5) {
                                            const val4 = hook4.memoizedState;
                                            const val5 = hook5.memoizedState;

                                            if (val4 && val5 && typeof val4 === 'object' && typeof val5 === 'object' && val4.Toast !== undefined) {

                                                const newLevels = {
                                                    ...val4
                                                };
                                                Object.keys(newLevels).forEach(key => {
                                                    if (typeof newLevels[key] === 'number') newLevels[key] = 5;
                                                });

                                                const newStock = {
                                                    ...val5
                                                };
                                                Object.keys(newStock).forEach(key => {
                                                    if (typeof newStock[key] === 'number') newStock[key] = 999;
                                                });

                                                hook4.queue.dispatch(newLevels);
                                                hook5.queue.dispatch(newStock);

                                                success = true;
                                            }
                                        }
                                    }
                                    traverse(node.child);
                                    traverse(node.sibling);
                                }

                                traverse(root[rKey]);
                            })();


                        },
                    }, {
                        name: "Make Customers OP",
                        description: "Makes all customers pay a LOT (only works in solo)",
                        run: function() {
                            (() => {

                                if (window.opCustomerInterval) {
                                    clearInterval(window.opCustomerInterval);
                                    console.log("%c[makeCustomersOP] Restarting loop...", "color: orange");
                                }

                                const OP_VALUE = 99999999999999;

                                function scanAndModify() {
                                    const root = document.querySelector('#app') || document.body;
                                    const rKey = Object.keys(root).find(k => k.startsWith('__reactFiber'));
                                    if (!rKey) return;

                                    let totalModified = 0;

                                    function traverse(node) {
                                        if (!node) return;

                                        if (node.memoizedState && typeof node.type === 'function') {
                                            let hook = node.memoizedState;
                                            while (hook) {
                                                const data = hook.memoizedState;

                                                if (data instanceof Map && data.size > 0) {
                                                    data.forEach((val) => {

                                                        if (val && typeof val === 'object' && val.order && typeof val.order.value === 'number') {

                                                            if (val.order.value !== OP_VALUE) {
                                                                val.order.value = OP_VALUE;
                                                                totalModified++;
                                                            }
                                                        }
                                                    });
                                                }
                                                hook = hook.next;
                                            }
                                        }

                                        traverse(node.child);
                                        traverse(node.sibling);
                                    }

                                    traverse(root[rKey]);

                                    if (totalModified > 0) {
                                        console.log(`%c[makeCustomersOP] Upgraded ${totalModified} new customers!`, 'color: #00ff00; font-weight: bold');
                                    }
                                }

                                console.clear();
                                console.log("%c[makeCustomersOP] Activated! New customers will be rich.", "color: #00ff00; font-size: 16px; font-weight: bold");

                                window.opCustomerInterval = setInterval(scanAndModify, 500);
                            })();


                        }
                    }, {
                        name: "Make Upgrades Cheap",
                        description: "Makes most upggrades cheap",
                        run: function() {

                            (() => {
                                console.clear();
                                console.log("%c💸 SETTING COST: 1 | PROFIT: 9e99", "color: #ff00ff; font-weight: bold;");

                                const root = document.querySelector('#app') || document.body;
                                const rKey = Object.keys(root).find(k => k.startsWith('__reactFiber'));
                                if (!rKey) return console.log("❌ React Root not found");

                                let success = false;

                                function traverse(node) {
                                    if (success || !node) return;

                                    if (node.memoizedState) {
                                        let hook = node.memoizedState;
                                        let index = 0;

                                        while(hook) {
                                            if (index === 1) {
                                                const val = hook.memoizedState;

                                                if (val && typeof val === 'object' && val.toast && val.toast.prices) {
                                                    const newDefs = { ...val };
                                                    const items = Object.keys(newDefs);

                                                    items.forEach(key => {
                                                        const item = newDefs[key];
                                                        if (item && item.prices && item.profits) {
                                                            const cheapPrices = new Array(item.prices.length).fill(1);
                                                            const insaneProfits = new Array(item.profits.length).fill(9e99);
                                                            insaneProfits[0] = 0; // Keep lvl 0 safe

                                                            newDefs[key] = {
                                                                ...item,
                                                                prices: cheapPrices,
                                                                profits: insaneProfits
                                                            };
                                                        }
                                                    });

                                                    if (hook.queue && hook.queue.dispatch) {
                                                        hook.queue.dispatch(newDefs);
                                                        success = true;
                                                        console.log("%c✅ DONE. Try upgrading now.", "color: #00ff00; font-weight: bold;");
                                                    }
                                                }
                                            }
                                            hook = hook.next;
                                            index++;
                                        }
                                    }
                                    traverse(node.child);
                                    traverse(node.sibling);
                                }

                                traverse(root[rKey]);

                                if (!success) console.log("❌ Failed to find definitions hook.");
                            })();
                        }
                    }
                ],
            },
            factory: {
                img: "https://media.blooket.com/image/upload/v1663212881/Media/logos/Factory_Logo_Resized.png",
                name: "Factory",
                cheats: [{
                        name: "Choose Blook",
                        description: "Gives you a blook",
                        inputs: [{
                            name: "Blook",
                            type: "options",
                            options: [{
                                    name: "Chick",
                                    color: "#ffcd05",
                                    class: "\uD83C\uDF3D",
                                    rarity: "Common",
                                    cash: [3, 7, 65, 400, 2500],
                                    time: [1, 1, 1, 1, 1],
                                    price: [300, 3e3, 3e4, 2e5]
                                },
                                {
                                    name: "Chicken",
                                    color: "#ed1c24",
                                    class: "\uD83C\uDF3D",
                                    rarity: "Common",
                                    cash: [10, 40, 200, 1400, 1e4],
                                    time: [5, 4, 3, 2, 1],
                                    price: [570, 4e3, 5e4, 8e5]
                                },
                                {
                                    name: "Cow",
                                    color: "#58595b",
                                    class: "\uD83C\uDF3D",
                                    rarity: "Common",
                                    cash: [25, 75, 1500, 25e3, 25e4],
                                    time: [15, 10, 10, 10, 5],
                                    price: [500, 9500, 16e4, 4e6]
                                },
                                {
                                    name: "Duck",
                                    color: "#4ab96d",
                                    class: "\uD83C\uDF3D",
                                    rarity: "Common",
                                    cash: [4, 24, 200, 3e3, 4e4],
                                    time: [3, 3, 3, 3, 3],
                                    price: [450, 4200, 7e4, 11e5]
                                },
                                {
                                    name: "Goat",
                                    color: "#c59a74",
                                    class: "\uD83C\uDF3D",
                                    rarity: "Common",
                                    cash: [5, 28, 200, 1300, 12e3],
                                    time: [3, 3, 2, 2, 2],
                                    price: [500, 6400, 45e3, 5e5]
                                },
                                {
                                    name: "Horse",
                                    color: "#995b3c",
                                    class: "\uD83C\uDF3D",
                                    rarity: "Common",
                                    cash: [5, 20, 270, 1800, 15e3],
                                    time: [2, 2, 2, 2, 2],
                                    price: [550, 8200, 65e3, 6e5]
                                },
                                {
                                    name: "Pig",
                                    color: "#f6a9cb",
                                    class: "\uD83C\uDF3D",
                                    rarity: "Common",
                                    cash: [20, 50, 1300, 8e3, 8e4],
                                    time: [7, 7, 7, 7, 5],
                                    price: [400, 11e3, 8e4, 13e5]
                                },
                                {
                                    name: "Sheep",
                                    color: "#414042",
                                    class: "\uD83C\uDF3D",
                                    rarity: "Common",
                                    cash: [6, 25, 250, 1500, 11e3],
                                    time: [3, 3, 3, 2, 2],
                                    price: [500, 5e3, 5e4, 43e4]
                                },
                                {
                                    name: "Cat",
                                    color: "#f49849",
                                    class: "\uD83D\uDC3E",
                                    rarity: "Common",
                                    cash: [5, 18, 170, 1700, 13e3],
                                    time: [2, 2, 2, 2, 2],
                                    price: [480, 5500, 6e4, 5e5]
                                },
                                {
                                    name: "Dog",
                                    color: "#995b3c",
                                    class: "\uD83D\uDC3E",
                                    rarity: "Common",
                                    cash: [7, 25, 220, 1900, 9e3],
                                    time: [3, 3, 2, 2, 1],
                                    price: [460, 6600, 7e4, 73e4]
                                },
                                {
                                    name: "Goldfish",
                                    color: "#f18221",
                                    class: "\uD83D\uDC3E",
                                    rarity: "Common",
                                    cash: [5, 40, 350, 3500, 35e3],
                                    time: [3, 3, 3, 3, 3],
                                    price: [750, 7200, 84e3, 95e4]
                                },
                                {
                                    name: "Rabbit",
                                    color: "#e7bf9a",
                                    class: "\uD83D\uDC3E",
                                    rarity: "Common",
                                    cash: [3, 18, 185, 800, 7e3],
                                    time: [2, 2, 2, 1, 1],
                                    price: [500, 5800, 56e3, 55e4]
                                },
                                {
                                    name: "Hamster",
                                    color: "#ce9176",
                                    class: "\uD83D\uDC3E",
                                    rarity: "Common",
                                    cash: [10, 45, 450, 4500, 45e3],
                                    time: [4, 4, 4, 4, 4],
                                    price: [650, 6500, 8e4, 93e4]
                                },
                                {
                                    name: "Turtle",
                                    color: "#619a3c",
                                    class: "\uD83D\uDC3E",
                                    rarity: "Common",
                                    cash: [23, 120, 1400, 15e3, 17e4],
                                    time: [10, 10, 10, 10, 10],
                                    price: [700, 8500, 11e4, 13e5]
                                },
                                {
                                    name: "Puppy",
                                    color: "#414042",
                                    class: "\uD83D\uDC3E",
                                    rarity: "Common",
                                    cash: [4, 10, 75, 500, 3e3],
                                    time: [1, 1, 1, 1, 1],
                                    price: [450, 4e3, 35e3, 25e4]
                                },
                                {
                                    name: "Kitten",
                                    color: "#58595b",
                                    class: "\uD83D\uDC3E",
                                    rarity: "Common",
                                    cash: [4, 8, 60, 400, 2e3],
                                    time: [1, 1, 1, 1, 1],
                                    price: [350, 3500, 26e3, 17e4]
                                },
                                {
                                    name: "Bear",
                                    color: "#995b3c",
                                    class: "\uD83C\uDF32",
                                    rarity: "Common",
                                    cash: [12, 70, 550, 4500, 1e5],
                                    time: [7, 7, 6, 5, 5],
                                    price: [550, 5500, 63e3, 16e5]
                                },
                                {
                                    name: "Moose",
                                    color: "#995b3c",
                                    class: "\uD83C\uDF32",
                                    rarity: "Common",
                                    cash: [8, 45, 400, 3500, 26e3],
                                    time: [5, 5, 4, 4, 3],
                                    price: [520, 6500, 58e3, 7e5]
                                },
                                {
                                    name: "Fox",
                                    color: "#f49849",
                                    class: "\uD83C\uDF32",
                                    rarity: "Common",
                                    cash: [7, 15, 80, 550, 3e3],
                                    time: [2, 2, 1, 1, 1],
                                    price: [400, 4e3, 36e3, 24e4]
                                },
                                {
                                    name: "Raccoon",
                                    color: "#6d6e71",
                                    class: "\uD83C\uDF32",
                                    rarity: "Common",
                                    cash: [5, 14, 185, 1900, 19e3],
                                    time: [2, 2, 2, 2, 2],
                                    price: [400, 5e3, 71e3, 8e5]
                                },
                                {
                                    name: "Squirrel",
                                    color: "#d25927",
                                    class: "\uD83C\uDF32",
                                    rarity: "Common",
                                    cash: [3, 10, 65, 470, 2600],
                                    time: [1, 1, 1, 1, 1],
                                    price: [420, 3600, 32e3, 21e4]
                                },
                                {
                                    name: "Owl",
                                    color: "#594a42",
                                    class: "\uD83C\uDF32",
                                    rarity: "Common",
                                    cash: [4, 17, 155, 1500, 15e3],
                                    time: [2, 2, 2, 2, 2],
                                    price: [500, 4800, 55e3, 58e4]
                                },
                                {
                                    name: "Hedgehog",
                                    color: "#3f312b",
                                    class: "\uD83C\uDF32",
                                    rarity: "Common",
                                    cash: [11, 37, 340, 2200, 3e4],
                                    time: [5, 4, 3, 2, 2],
                                    price: [540, 7e3, 77e3, 12e5]
                                },
                                {
                                    name: "Seal",
                                    color: "#7ca1d5",
                                    class: "❄️",
                                    rarity: "Common",
                                    cash: [6, 17, 150, 1200, 13e3],
                                    time: [2, 2, 2, 2, 2],
                                    price: [480, 4500, 43e3, 52e4]
                                },
                                {
                                    name: "Arctic Fox",
                                    color: "#7ca1d5",
                                    class: "❄️",
                                    rarity: "Common",
                                    cash: [5, 18, 180, 850, 8500],
                                    time: [2, 2, 2, 1, 1],
                                    price: [520, 550, 61e3, 68e4]
                                },
                                {
                                    name: "Snowy Owl",
                                    color: "#feda3f",
                                    class: "❄️",
                                    rarity: "Common",
                                    cash: [5, 20, 190, 1900, 16e3],
                                    time: [3, 3, 2, 2, 2],
                                    price: [370, 5300, 76e3, 62e4]
                                },
                                {
                                    name: "Arctic Hare",
                                    color: "#7ca1d5",
                                    class: "❄️",
                                    rarity: "Common",
                                    cash: [6, 19, 85, 900, 7e3],
                                    time: [2, 2, 1, 1, 1],
                                    price: [540, 5200, 66e3, 55e4]
                                },
                                {
                                    name: "Penguin",
                                    color: "#fb8640",
                                    class: "❄️",
                                    rarity: "Common",
                                    cash: [4, 21, 310, 3200, 33e3],
                                    time: [3, 3, 3, 3, 3],
                                    price: [400, 6500, 76e3, 87e4]
                                },
                                {
                                    name: "Baby Penguin",
                                    color: "#414042",
                                    class: "❄️",
                                    rarity: "Common",
                                    cash: [3, 8, 70, 450, 2700],
                                    time: [1, 1, 1, 1, 1],
                                    price: [420, 3300, 33e3, 23e4]
                                },
                                {
                                    name: "Polar Bear",
                                    color: "#7ca1d5",
                                    class: "❄️",
                                    rarity: "Common",
                                    cash: [12, 75, 700, 6500, 85e3],
                                    time: [8, 7, 6, 5, 5],
                                    price: [630, 7e3, 91e3, 14e5]
                                },
                                {
                                    name: "Walrus",
                                    color: "#7d4f33",
                                    class: "❄️",
                                    rarity: "Common",
                                    cash: [11, 46, 420, 3700, 51e3],
                                    time: [5, 5, 4, 4, 4],
                                    price: [550, 6200, 68e3, 1e6]
                                },
                                {
                                    name: "Tiger",
                                    color: "#f18221",
                                    class: "\uD83C\uDF34",
                                    rarity: "Common",
                                    cash: [6, 20, 100, 975, 7500],
                                    time: [3, 3, 1, 1, 1],
                                    price: [390, 6e3, 7e4, 61e4]
                                },
                                {
                                    name: "Jaguar",
                                    color: "#fbb040",
                                    class: "\uD83C\uDF34",
                                    rarity: "Common",
                                    cash: [8, 28, 230, 1600, 17e3],
                                    time: [3, 3, 2, 2, 2],
                                    price: [390, 6e3, 7e4, 61e4]
                                },
                                {
                                    name: "Toucan",
                                    color: "#ffca34",
                                    class: "\uD83C\uDF34",
                                    rarity: "Common",
                                    cash: [9, 20, 175, 625, 3800],
                                    time: [2, 2, 2, 1, 1],
                                    price: [520, 4800, 42e3, 3e5]
                                },
                                {
                                    name: "Cockatoo",
                                    color: "#7ca1d5",
                                    class: "\uD83C\uDF34",
                                    rarity: "Common",
                                    cash: [6, 35, 160, 1700, 18e3],
                                    time: [4, 4, 2, 2, 2],
                                    price: [500, 5e3, 63e3, 7e5]
                                },
                                {
                                    name: "Macaw",
                                    color: "#00aeef",
                                    class: "\uD83C\uDF34",
                                    rarity: "Common",
                                    cash: [3, 8, 85, 850, 8500],
                                    time: [1, 1, 1, 1, 1],
                                    price: [480, 5400, 62e3, 63e4]
                                },
                                {
                                    name: "Parrot",
                                    color: "#ed1c24",
                                    class: "\uD83C\uDF34",
                                    rarity: "Common",
                                    cash: [3, 9, 90, 900, 9e3],
                                    time: [1, 1, 1, 1, 1],
                                    price: [540, 5700, 65e3, 69e4]
                                },
                                {
                                    name: "Panther",
                                    color: "#2f2c38",
                                    class: "\uD83C\uDF34",
                                    rarity: "Common",
                                    cash: [12, 28, 215, 2100, 21e3],
                                    time: [5, 3, 2, 2, 2],
                                    price: [530, 6500, 76e3, 87e4]
                                },
                                {
                                    name: "Anaconda",
                                    color: "#8a9143",
                                    class: "\uD83C\uDF34",
                                    rarity: "Common",
                                    cash: [3, 15, 85, 1500, 7600],
                                    time: [1, 2, 1, 2, 1],
                                    price: [410, 5100, 58e3, 59e4]
                                },
                                {
                                    name: "Orangutan",
                                    color: "#bc6234",
                                    class: "\uD83C\uDF34",
                                    rarity: "Common",
                                    cash: [13, 52, 570, 4300, 7e4],
                                    time: [5, 5, 5, 4, 4],
                                    price: [600, 7e3, 8e4, 14e5]
                                },
                                {
                                    name: "Capuchin",
                                    color: "#e0b0a6",
                                    class: "\uD83C\uDF34",
                                    rarity: "Common",
                                    cash: [4, 14, 160, 780, 8200],
                                    time: [2, 2, 2, 1, 1],
                                    price: [390, 4700, 57e3, 68e4]
                                },
                                {
                                    name: "Elf",
                                    color: "#a7d054",
                                    class: "⚔️",
                                    rarity: "Uncommon",
                                    cash: [5e3, 15e3, 15e4, 15e5, 1e7],
                                    time: [1, 1, 1, 1, 1],
                                    price: [8e5, 9e6, 11e7, 8e8]
                                },
                                {
                                    name: "Witch",
                                    color: "#4ab96d",
                                    class: "⚔️",
                                    rarity: "Uncommon",
                                    cash: [18e3, 6e4, 4e4, 4e6, 35e6],
                                    time: [3, 3, 2, 2, 2],
                                    price: [11e5, 12e6, 15e7, 14e8]
                                },
                                {
                                    name: "Wizard",
                                    color: "#5a459c",
                                    class: "⚔️",
                                    rarity: "Uncommon",
                                    cash: [19500, 65e3, 44e4, 46e5, 4e6],
                                    time: [3, 3, 2, 2, 2],
                                    price: [13e5, 135e5, 16e7, 16e8]
                                },
                                {
                                    name: "Fairy",
                                    color: "#df6d9c",
                                    class: "⚔️",
                                    rarity: "Uncommon",
                                    cash: [18500, 6e4, 62e4, 44e5, 38e6],
                                    time: [3, 3, 3, 2, 2],
                                    price: [12e5, 125e5, 15e6, 15e8]
                                },
                                {
                                    name: "Slime Monster",
                                    color: "#2fa04a",
                                    class: "⚔️",
                                    rarity: "Uncommon",
                                    cash: [35e3, 14e4, 1e6, 11e6, 11e7],
                                    time: [5, 5, 4, 4, 4],
                                    price: [16e5, 15e6, 2e8, 23e8]
                                },
                                {
                                    name: "Jester",
                                    color: "#be1e2d",
                                    class: "⚔️",
                                    rarity: "Rare",
                                    cash: [25e3, 1e5, 68e4, 65e5, 32e6],
                                    time: [3, 3, 2, 2, 1],
                                    price: [2e6, 21e6, 23e7, 26e8]
                                },
                                {
                                    name: "Dragon",
                                    color: "#2fa04a",
                                    class: "⚔️",
                                    rarity: "Rare",
                                    cash: [36e3, 15e4, 15e5, 15e6, 15e7],
                                    time: [4, 4, 4, 4, 4],
                                    price: [23e5, 24e6, 27e7, 3e9]
                                },
                                {
                                    name: "Unicorn",
                                    color: "#f6afce",
                                    class: "⚔️",
                                    rarity: "Epic",
                                    cash: [24e3, 15e4, 14e5, 7e6, 75e6],
                                    time: [2, 2, 2, 1, 1],
                                    price: [45e5, 45e6, 55e7, 65e8]
                                },
                                {
                                    name: "Queen",
                                    color: "#9e1f63",
                                    class: "⚔️",
                                    rarity: "Rare",
                                    cash: [24e3, 95e3, 95e4, 97e5, 95e6],
                                    time: [3, 3, 3, 3, 3],
                                    price: [19e5, 2e7, 23e7, 25e8]
                                },
                                {
                                    name: "King",
                                    color: "#ee2640",
                                    class: "⚔️",
                                    rarity: "Legendary",
                                    cash: [75e3, 4e5, 6e6, 9e7, 125e7],
                                    time: [5, 5, 5, 5, 5],
                                    price: [6e6, 95e6, 16e8, 25e9]
                                },
                                {
                                    name: "Two of Spades",
                                    color: "#414042",
                                    class: "\uD83C\uDFF0",
                                    rarity: "Uncommon",
                                    cash: [4500, 14e3, 14e4, 14e5, 9e6],
                                    time: [1, 1, 1, 1, 1],
                                    price: [77e4, 83e5, 98e6, 71e7]
                                },
                                {
                                    name: "Eat Me",
                                    color: "#d58c55",
                                    class: "\uD83C\uDFF0",
                                    rarity: "Uncommon",
                                    cash: [13e3, 45e3, 45e4, 45e5, 5e7],
                                    time: [2, 2, 2, 2, 2],
                                    price: [13e5, 14e6, 16e7, 2e9]
                                },
                                {
                                    name: "Drink Me",
                                    color: "#dd7399",
                                    class: "\uD83C\uDFF0",
                                    rarity: "Uncommon",
                                    cash: [12e3, 4e4, 4e5, 4e6, 45e6],
                                    time: [2, 2, 2, 2, 2],
                                    price: [12e5, 12e6, 14e7, 18e8]
                                },
                                {
                                    name: "Alice",
                                    color: "#4cc9f5",
                                    class: "\uD83C\uDFF0",
                                    rarity: "Uncommon",
                                    cash: [13e3, 42e3, 21e4, 21e5, 23e6],
                                    time: [2, 2, 1, 1, 1],
                                    price: [12e5, 13e6, 15e7, 19e8]
                                },
                                {
                                    name: "Queen of Hearts",
                                    color: "#d62027",
                                    class: "\uD83C\uDFF0",
                                    rarity: "Uncommon",
                                    cash: [23e3, 87e3, 62e4, 75e5, 9e7],
                                    time: [4, 4, 3, 3, 3],
                                    price: [13e5, 13e6, 18e7, 24e8]
                                },
                                {
                                    name: "Dormouse",
                                    color: "#89d6f8",
                                    class: "\uD83C\uDFF0",
                                    rarity: "Rare",
                                    cash: [17e3, 68e3, 7e5, 35e5, 35e6],
                                    time: [2, 2, 1, 1, 1],
                                    price: [2e6, 22e6, 25e7, 28e8]
                                },
                                {
                                    name: "White Rabbit",
                                    color: "#ffcd05",
                                    class: "\uD83C\uDFF0",
                                    rarity: "Rare",
                                    cash: [26e3, 105e3, 11e6, 77e5, 72e6],
                                    time: [3, 3, 3, 2, 2],
                                    price: [2e6, 23e6, 28e7, 29e8]
                                },
                                {
                                    name: "Cheshire Cat",
                                    color: "#dd7399",
                                    class: "\uD83C\uDFF0",
                                    rarity: "Rare",
                                    cash: [32e3, 1e5, 9e5, 9e6, 6e7],
                                    time: [4, 3, 3, 3, 2],
                                    price: [18e5, 19e6, 22e7, 24e8]
                                },
                                {
                                    name: "Caterpillar",
                                    color: "#00c0f3",
                                    class: "\uD83C\uDFF0",
                                    rarity: "Epic",
                                    cash: [1e4, 7e4, 65e4, 75e5, 85e6],
                                    time: [1, 1, 1, 1, 1],
                                    price: [42e5, 42e6, 54e7, 69e8]
                                },
                                {
                                    name: "Mad Hatter",
                                    color: "#914f93",
                                    class: "\uD83C\uDFF0",
                                    rarity: "Epic",
                                    cash: [38e3, 25e4, 15e5, 14e6, 8e7],
                                    time: [3, 3, 2, 2, 1],
                                    price: [48e5, 48e6, 52e7, 66e8]
                                },
                                {
                                    name: "King of Hearts",
                                    color: "#c62127",
                                    class: "\uD83C\uDFF0",
                                    rarity: "Legendary",
                                    cash: [8e4, 42e4, 68e5, 1e8, 15e8],
                                    time: [5, 5, 5, 5, 5],
                                    price: [7e6, 11e7, 18e8, 3e10]
                                },
                                {
                                    name: "Earth",
                                    color: "#416eb5",
                                    class: "\uD83D\uDE80",
                                    rarity: "Uncommon",
                                    cash: [15e3, 45e3, 6e5, 65e5, 65e6],
                                    time: [3, 3, 3, 3, 3],
                                    price: [1e6, 11e6, 15e7, 17e8]
                                },
                                {
                                    name: "Meteor",
                                    color: "#c68c3c",
                                    class: "\uD83D\uDE80",
                                    rarity: "Uncommon",
                                    cash: [23e3, 65e3, 7e5, 45e5, 2e7],
                                    time: [5, 4, 3, 2, 1],
                                    price: [95e4, 13e6, 16e7, 16e8]
                                },
                                {
                                    name: "Stars",
                                    color: "#19184d",
                                    class: "\uD83D\uDE80",
                                    rarity: "Uncommon",
                                    cash: [1e4, 4e4, 2e5, 2e6, 18e6],
                                    time: [2, 2, 1, 1, 1],
                                    price: [14e5, 14e6, 15e7, 15e8]
                                },
                                {
                                    name: "Alien",
                                    color: "#8dc63f",
                                    class: "\uD83D\uDE80",
                                    rarity: "Uncommon",
                                    cash: [3e4, 1e5, 1e6, 11e6, 85e6],
                                    time: [4, 4, 4, 4, 4],
                                    price: [15e5, 17e6, 19e7, 17e8]
                                },
                                {
                                    name: "Planet",
                                    color: "#9dc6ea",
                                    class: "\uD83D\uDE80",
                                    rarity: "Rare",
                                    cash: [25e3, 1e5, 9e5, 9e6, 9e7],
                                    time: [3, 3, 3, 3, 3],
                                    price: [2e6, 21e6, 21e7, 24e8]
                                },
                                {
                                    name: "UFO",
                                    color: "#a15095",
                                    class: "\uD83D\uDE80",
                                    rarity: "Rare",
                                    cash: [17e3, 7e4, 7e5, 7e6, 7e7],
                                    time: [2, 2, 2, 2, 2],
                                    price: [21e5, 23e6, 25e7, 28e8]
                                },
                                {
                                    name: "Spaceship",
                                    color: "#ffcb29",
                                    class: "\uD83D\uDE80",
                                    rarity: "Epic",
                                    cash: [6e4, 32e4, 21e5, 15e6, 85e6],
                                    time: [5, 4, 3, 2, 1],
                                    price: [48e5, 46e6, 54e7, 68e8]
                                },
                                {
                                    name: "Astronaut",
                                    color: "#9bd4ee",
                                    class: "\uD83D\uDE80",
                                    rarity: "Legendary",
                                    cash: [45e3, 26e4, 25e5, 38e6, 55e7],
                                    time: [3, 3, 2, 2, 2],
                                    price: [65e5, 1e8, 17e8, 27e9]
                                },
                                {
                                    name: "Lil Bot",
                                    color: "#3e564a",
                                    class: "\uD83E\uDD16",
                                    rarity: "Uncommon",
                                    cash: [4e3, 12e3, 18e4, 19e5, 25e6],
                                    time: [1, 1, 1, 1, 1],
                                    price: [73e4, 12e6, 13e7, 19e8]
                                },
                                {
                                    name: "Lovely Bot",
                                    color: "#f179af",
                                    class: "\uD83E\uDD16",
                                    rarity: "Uncommon",
                                    cash: [16e3, 65e3, 65e4, 48e5, 42e6],
                                    time: [3, 3, 3, 2, 2],
                                    price: [13e5, 14e6, 17e7, 16e8]
                                },
                                {
                                    name: "Angry Bot",
                                    color: "#f1613a",
                                    class: "\uD83E\uDD16",
                                    rarity: "Uncommon",
                                    cash: [22e3, 85e3, 8e5, 62e5, 65e6],
                                    time: [4, 4, 4, 3, 3],
                                    price: [12e5, 13e6, 15e7, 17e8]
                                },
                                {
                                    name: "Happy Bot",
                                    color: "#51ba6b",
                                    class: "\uD83E\uDD16",
                                    rarity: "Uncommon",
                                    cash: [11e3, 45e3, 5e5, 25e5, 3e7],
                                    time: [2, 2, 2, 1, 1],
                                    price: [14e5, 15e6, 18e7, 24e8]
                                },
                                {
                                    name: "Watson",
                                    color: "#d69b5a",
                                    class: "\uD83E\uDD16",
                                    rarity: "Rare",
                                    cash: [24e3, 1e5, 1e6, 1e7, 1e8],
                                    time: [3, 3, 3, 3, 3],
                                    price: [2e6, 22e6, 24e7, 26e8]
                                },
                                {
                                    name: "Buddy Bot",
                                    color: "#9dc6ea",
                                    class: "\uD83E\uDD16",
                                    rarity: "Rare",
                                    cash: [22e3, 95e3, 65e4, 65e5, 65e6],
                                    time: [3, 3, 2, 2, 2],
                                    price: [19e5, 21e6, 23e7, 25e8]
                                },
                                {
                                    name: "Brainy Bot",
                                    color: "#9ecf7a",
                                    class: "\uD83E\uDD16",
                                    rarity: "Epic",
                                    cash: [5e4, 25e4, 21e5, 21e6, 17e7],
                                    time: [4, 3, 3, 3, 2],
                                    price: [5e6, 46e6, 5e8, 67e8]
                                },
                                {
                                    name: "Mega Bot",
                                    color: "#d71f27",
                                    class: "\uD83E\uDD16",
                                    rarity: "Legendary",
                                    cash: [8e4, 43e4, 42e5, 62e6, 1e9],
                                    time: [5, 5, 3, 3, 3],
                                    price: [7e6, 12e7, 19e8, 35e9]
                                },
                            ].map((x) => ({
                                name: x.name,
                                value: JSON.stringify(x)
                            })),
                        }, ],
                        run: function(blook) {
                            (() => {
                                console.clear();
                                console.log("🏭 Factory: Choose Blook...");

                                const factoryBlooks = [{
                                        name: "Chick",
                                        color: "#ffcd05",
                                        class: "🌽",
                                        rarity: "Common",
                                        cash: [3, 7, 65, 400, 2500],
                                        time: [1, 1, 1, 1, 1],
                                        price: [300, 3000, 30000, 200000]
                                    },
                                    {
                                        name: "Chicken",
                                        color: "#ed1c24",
                                        class: "🌽",
                                        rarity: "Common",
                                        cash: [10, 40, 200, 1400, 10000],
                                        time: [5, 4, 3, 2, 1],
                                        price: [570, 4000, 50000, 800000]
                                    },
                                    {
                                        name: "Cow",
                                        color: "#58595b",
                                        class: "🌽",
                                        rarity: "Common",
                                        cash: [25, 75, 1500, 25000, 250000],
                                        time: [15, 10, 10, 10, 5],
                                        price: [500, 9500, 160000, 4000000]
                                    },
                                    {
                                        name: "Duck",
                                        color: "#4ab96d",
                                        class: "🌽",
                                        rarity: "Common",
                                        cash: [4, 24, 200, 3000, 40000],
                                        time: [3, 3, 3, 3, 3],
                                        price: [450, 4200, 70000, 1100000]
                                    },
                                    {
                                        name: "Goat",
                                        color: "#c59a74",
                                        class: "🌽",
                                        rarity: "Common",
                                        cash: [5, 28, 200, 1300, 12000],
                                        time: [3, 3, 2, 2, 2],
                                        price: [500, 6400, 45000, 500000]
                                    },
                                    {
                                        name: "Horse",
                                        color: "#995b3c",
                                        class: "🌽",
                                        rarity: "Common",
                                        cash: [5, 20, 270, 1800, 15000],
                                        time: [2, 2, 2, 2, 2],
                                        price: [550, 8200, 65000, 600000]
                                    },
                                    {
                                        name: "Pig",
                                        color: "#f6a9cb",
                                        class: "🌽",
                                        rarity: "Common",
                                        cash: [20, 50, 1300, 8000, 80000],
                                        time: [7, 7, 7, 7, 5],
                                        price: [400, 11000, 80000, 1300000]
                                    },
                                    {
                                        name: "Sheep",
                                        color: "#414042",
                                        class: "🌽",
                                        rarity: "Common",
                                        cash: [6, 25, 250, 1500, 11000],
                                        time: [3, 3, 3, 2, 2],
                                        price: [500, 5000, 50000, 430000]
                                    },
                                    {
                                        name: "Cat",
                                        color: "#f49849",
                                        class: "🐾",
                                        rarity: "Common",
                                        cash: [5, 18, 170, 1700, 13000],
                                        time: [2, 2, 2, 2, 2],
                                        price: [480, 5500, 60000, 500000]
                                    },
                                    {
                                        name: "Dog",
                                        color: "#995b3c",
                                        class: "🐾",
                                        rarity: "Common",
                                        cash: [7, 25, 220, 1900, 9000],
                                        time: [3, 3, 2, 2, 1],
                                        price: [460, 6600, 70000, 730000]
                                    },
                                    {
                                        name: "Goldfish",
                                        color: "#f18221",
                                        class: "🐾",
                                        rarity: "Common",
                                        cash: [5, 40, 350, 3500, 35000],
                                        time: [3, 3, 3, 3, 3],
                                        price: [750, 7200, 84000, 950000]
                                    },
                                    {
                                        name: "Rabbit",
                                        color: "#e7bf9a",
                                        class: "🐾",
                                        rarity: "Common",
                                        cash: [3, 18, 185, 800, 7000],
                                        time: [2, 2, 2, 1, 1],
                                        price: [500, 5800, 56000, 550000]
                                    },
                                    {
                                        name: "Hamster",
                                        color: "#ce9176",
                                        class: "🐾",
                                        rarity: "Common",
                                        cash: [10, 45, 450, 4500, 45000],
                                        time: [4, 4, 4, 4, 4],
                                        price: [650, 6500, 80000, 930000]
                                    },
                                    {
                                        name: "Turtle",
                                        color: "#619a3c",
                                        class: "🐾",
                                        rarity: "Common",
                                        cash: [23, 120, 1400, 15000, 170000],
                                        time: [10, 10, 10, 10, 10],
                                        price: [700, 8500, 110000, 1300000]
                                    },
                                    {
                                        name: "Puppy",
                                        color: "#414042",
                                        class: "🐾",
                                        rarity: "Common",
                                        cash: [4, 10, 75, 500, 3000],
                                        time: [1, 1, 1, 1, 1],
                                        price: [450, 4000, 35000, 250000]
                                    },
                                    {
                                        name: "Kitten",
                                        color: "#58595b",
                                        class: "🐾",
                                        rarity: "Common",
                                        cash: [4, 8, 60, 400, 2000],
                                        time: [1, 1, 1, 1, 1],
                                        price: [350, 3500, 26000, 170000]
                                    },
                                    {
                                        name: "Bear",
                                        color: "#995b3c",
                                        class: "🌲",
                                        rarity: "Common",
                                        cash: [12, 70, 550, 4500, 100000],
                                        time: [7, 7, 6, 5, 5],
                                        price: [550, 5500, 63000, 1600000]
                                    },
                                    {
                                        name: "Moose",
                                        color: "#995b3c",
                                        class: "🌲",
                                        rarity: "Common",
                                        cash: [8, 45, 400, 3500, 26000],
                                        time: [5, 5, 4, 4, 3],
                                        price: [520, 6500, 58000, 700000]
                                    },
                                    {
                                        name: "Fox",
                                        color: "#f49849",
                                        class: "🌲",
                                        rarity: "Common",
                                        cash: [7, 15, 80, 550, 3000],
                                        time: [2, 2, 1, 1, 1],
                                        price: [400, 4000, 36000, 240000]
                                    },
                                    {
                                        name: "Raccoon",
                                        color: "#6d6e71",
                                        class: "🌲",
                                        rarity: "Common",
                                        cash: [5, 14, 185, 1900, 19000],
                                        time: [2, 2, 2, 2, 2],
                                        price: [400, 5000, 71000, 800000]
                                    },
                                    {
                                        name: "Squirrel",
                                        color: "#d25927",
                                        class: "🌲",
                                        rarity: "Common",
                                        cash: [3, 10, 65, 470, 2600],
                                        time: [1, 1, 1, 1, 1],
                                        price: [420, 3600, 32000, 210000]
                                    },
                                    {
                                        name: "Owl",
                                        color: "#594a42",
                                        class: "🌲",
                                        rarity: "Common",
                                        cash: [4, 17, 155, 1500, 15000],
                                        time: [2, 2, 2, 2, 2],
                                        price: [500, 4800, 55000, 580000]
                                    },
                                    {
                                        name: "Hedgehog",
                                        color: "#3f312b",
                                        class: "🌲",
                                        rarity: "Common",
                                        cash: [11, 37, 340, 2200, 30000],
                                        time: [5, 4, 3, 2, 2],
                                        price: [540, 7000, 77000, 1200000]
                                    },
                                    {
                                        name: "Seal",
                                        color: "#7ca1d5",
                                        class: "❄️",
                                        rarity: "Common",
                                        cash: [6, 17, 150, 1200, 13000],
                                        time: [2, 2, 2, 2, 2],
                                        price: [480, 4500, 43000, 520000]
                                    },
                                    {
                                        name: "Arctic Fox",
                                        color: "#7ca1d5",
                                        class: "❄️",
                                        rarity: "Common",
                                        cash: [5, 18, 180, 850, 8500],
                                        time: [2, 2, 2, 1, 1],
                                        price: [520, 550, 61000, 680000]
                                    },
                                    {
                                        name: "Snowy Owl",
                                        color: "#feda3f",
                                        class: "❄️",
                                        rarity: "Common",
                                        cash: [5, 20, 190, 1900, 16000],
                                        time: [3, 3, 2, 2, 2],
                                        price: [370, 5300, 76000, 620000]
                                    },
                                    {
                                        name: "Arctic Hare",
                                        color: "#7ca1d5",
                                        class: "❄️",
                                        rarity: "Common",
                                        cash: [6, 19, 85, 900, 7000],
                                        time: [2, 2, 1, 1, 1],
                                        price: [540, 5200, 66000, 550000]
                                    },
                                    {
                                        name: "Penguin",
                                        color: "#fb8640",
                                        class: "❄️",
                                        rarity: "Common",
                                        cash: [4, 21, 310, 3200, 33000],
                                        time: [3, 3, 3, 3, 3],
                                        price: [400, 6500, 76000, 870000]
                                    },
                                    {
                                        name: "Baby Penguin",
                                        color: "#414042",
                                        class: "❄️",
                                        rarity: "Common",
                                        cash: [3, 8, 70, 450, 2700],
                                        time: [1, 1, 1, 1, 1],
                                        price: [420, 3300, 33000, 230000]
                                    },
                                    {
                                        name: "Polar Bear",
                                        color: "#7ca1d5",
                                        class: "❄️",
                                        rarity: "Common",
                                        cash: [12, 75, 700, 6500, 85000],
                                        time: [8, 7, 6, 5, 5],
                                        price: [630, 7000, 91000, 1400000]
                                    },
                                    {
                                        name: "Walrus",
                                        color: "#7d4f33",
                                        class: "❄️",
                                        rarity: "Common",
                                        cash: [11, 46, 420, 3700, 51000],
                                        time: [5, 5, 4, 4, 4],
                                        price: [550, 6200, 68000, 1000000]
                                    },
                                    {
                                        name: "Tiger",
                                        color: "#f18221",
                                        class: "🌴",
                                        rarity: "Common",
                                        cash: [6, 20, 100, 975, 7500],
                                        time: [3, 3, 1, 1, 1],
                                        price: [390, 6000, 70000, 610000]
                                    },
                                    {
                                        name: "Jaguar",
                                        color: "#fbb040",
                                        class: "🌴",
                                        rarity: "Common",
                                        cash: [8, 28, 230, 1600, 17000],
                                        time: [3, 3, 2, 2, 2],
                                        price: [390, 6000, 70000, 610000]
                                    },
                                    {
                                        name: "Toucan",
                                        color: "#ffca34",
                                        class: "🌴",
                                        rarity: "Common",
                                        cash: [9, 20, 175, 625, 3800],
                                        time: [2, 2, 2, 1, 1],
                                        price: [520, 4800, 42000, 300000]
                                    },
                                    {
                                        name: "Cockatoo",
                                        color: "#7ca1d5",
                                        class: "🌴",
                                        rarity: "Common",
                                        cash: [6, 35, 160, 1700, 18000],
                                        time: [4, 4, 2, 2, 2],
                                        price: [500, 5000, 63000, 700000]
                                    },
                                    {
                                        name: "Macaw",
                                        color: "#00aeef",
                                        class: "🌴",
                                        rarity: "Common",
                                        cash: [3, 8, 85, 850, 8500],
                                        time: [1, 1, 1, 1, 1],
                                        price: [480, 5400, 62000, 630000]
                                    },
                                    {
                                        name: "Parrot",
                                        color: "#ed1c24",
                                        class: "🌴",
                                        rarity: "Common",
                                        cash: [3, 9, 90, 900, 9000],
                                        time: [1, 1, 1, 1, 1],
                                        price: [540, 5700, 65000, 690000]
                                    },
                                    {
                                        name: "Panther",
                                        color: "#2f2c38",
                                        class: "🌴",
                                        rarity: "Common",
                                        cash: [12, 28, 215, 2100, 21000],
                                        time: [5, 3, 2, 2, 2],
                                        price: [530, 6500, 76000, 870000]
                                    },
                                    {
                                        name: "Anaconda",
                                        color: "#8a9143",
                                        class: "🌴",
                                        rarity: "Common",
                                        cash: [3, 15, 85, 1500, 7600],
                                        time: [1, 2, 1, 2, 1],
                                        price: [410, 5100, 58000, 590000]
                                    },
                                    {
                                        name: "Orangutan",
                                        color: "#bc6234",
                                        class: "🌴",
                                        rarity: "Common",
                                        cash: [13, 52, 570, 4300, 70000],
                                        time: [5, 5, 5, 4, 4],
                                        price: [600, 7000, 80000, 1400000]
                                    },
                                    {
                                        name: "Capuchin",
                                        color: "#e0b0a6",
                                        class: "🌴",
                                        rarity: "Common",
                                        cash: [4, 14, 160, 780, 8200],
                                        time: [2, 2, 2, 1, 1],
                                        price: [390, 4700, 57000, 680000]
                                    },
                                    {
                                        name: "Elf",
                                        color: "#a7d054",
                                        class: "⚔️",
                                        rarity: "Uncommon",
                                        cash: [5000, 15000, 150000, 1500000, 10000000],
                                        time: [1, 1, 1, 1, 1],
                                        price: [800000, 9000000, 110000000, 800000000]
                                    },
                                    {
                                        name: "Witch",
                                        color: "#4ab96d",
                                        class: "⚔️",
                                        rarity: "Uncommon",
                                        cash: [18000, 60000, 40000, 4000000, 35000000],
                                        time: [3, 3, 2, 2, 2],
                                        price: [1100000, 12000000, 150000000, 1400000000]
                                    },
                                    {
                                        name: "Wizard",
                                        color: "#5a459c",
                                        class: "⚔️",
                                        rarity: "Uncommon",
                                        cash: [19500, 65000, 440000, 4600000, 4000000],
                                        time: [3, 3, 2, 2, 2],
                                        price: [1300000, 13500000, 160000000, 1600000000]
                                    },
                                    {
                                        name: "Fairy",
                                        color: "#df6d9c",
                                        class: "⚔️",
                                        rarity: "Uncommon",
                                        cash: [18500, 60000, 620000, 4400000, 38000000],
                                        time: [3, 3, 3, 2, 2],
                                        price: [1200000, 12500000, 15000000, 1500000000]
                                    },
                                    {
                                        name: "Slime Monster",
                                        color: "#2fa04a",
                                        class: "⚔️",
                                        rarity: "Uncommon",
                                        cash: [35000, 140000, 1000000, 11000000, 110000000],
                                        time: [5, 5, 4, 4, 4],
                                        price: [1600000, 15000000, 200000000, 2300000000]
                                    },
                                    {
                                        name: "Jester",
                                        color: "#be1e2d",
                                        class: "⚔️",
                                        rarity: "Rare",
                                        cash: [25000, 100000, 680000, 6500000, 32000000],
                                        time: [3, 3, 2, 2, 1],
                                        price: [2000000, 21000000, 230000000, 2600000000]
                                    },
                                    {
                                        name: "Dragon",
                                        color: "#2fa04a",
                                        class: "⚔️",
                                        rarity: "Rare",
                                        cash: [36000, 150000, 1500000, 15000000, 150000000],
                                        time: [4, 4, 4, 4, 4],
                                        price: [2300000, 24000000, 270000000, 3000000000]
                                    },
                                    {
                                        name: "Unicorn",
                                        color: "#f6afce",
                                        class: "⚔️",
                                        rarity: "Epic",
                                        cash: [24000, 150000, 1400000, 7000000, 75000000],
                                        time: [2, 2, 2, 1, 1],
                                        price: [4500000, 45000000, 550000000, 6500000000]
                                    },
                                    {
                                        name: "Queen",
                                        color: "#9e1f63",
                                        class: "⚔️",
                                        rarity: "Rare",
                                        cash: [24000, 95000, 950000, 9700000, 95000000],
                                        time: [3, 3, 3, 3, 3],
                                        price: [1900000, 20000000, 230000000, 2500000000]
                                    },
                                    {
                                        name: "King",
                                        color: "#ee2640",
                                        class: "⚔️",
                                        rarity: "Legendary",
                                        cash: [75000, 400000, 6000000, 90000000, 1250000000],
                                        time: [5, 5, 5, 5, 5],
                                        price: [6000000, 95000000, 1600000000, 25000000000]
                                    },
                                    {
                                        name: "Two of Spades",
                                        color: "#414042",
                                        class: "🃏",
                                        rarity: "Uncommon",
                                        cash: [4500, 14000, 140000, 1400000, 9000000],
                                        time: [1, 1, 1, 1, 1],
                                        price: [770000, 8300000, 98000000, 710000000]
                                    },
                                    {
                                        name: "Eat Me",
                                        color: "#d58c55",
                                        class: "🃏",
                                        rarity: "Uncommon",
                                        cash: [13000, 45000, 450000, 4500000, 50000000],
                                        time: [2, 2, 2, 2, 2],
                                        price: [1300000, 14000000, 160000000, 2000000000]
                                    },
                                    {
                                        name: "Drink Me",
                                        color: "#dd7399",
                                        class: "🃏",
                                        rarity: "Uncommon",
                                        cash: [12000, 40000, 400000, 4000000, 45000000],
                                        time: [2, 2, 2, 2, 2],
                                        price: [1200000, 12000000, 140000000, 1800000000]
                                    },
                                    {
                                        name: "Alice",
                                        color: "#4cc9f5",
                                        class: "🃏",
                                        rarity: "Uncommon",
                                        cash: [13000, 42000, 210000, 2100000, 23000000],
                                        time: [2, 2, 1, 1, 1],
                                        price: [1200000, 13000000, 150000000, 1900000000]
                                    },
                                    {
                                        name: "Queen of Hearts",
                                        color: "#d62027",
                                        class: "🃏",
                                        rarity: "Uncommon",
                                        cash: [23000, 87000, 620000, 7500000, 90000000],
                                        time: [4, 4, 3, 3, 3],
                                        price: [1300000, 13000000, 180000000, 2400000000]
                                    },
                                    {
                                        name: "Dormouse",
                                        color: "#89d6f8",
                                        class: "🃏",
                                        rarity: "Rare",
                                        cash: [17000, 68000, 700000, 3500000, 35000000],
                                        time: [2, 2, 1, 1, 1],
                                        price: [2000000, 22000000, 250000000, 2800000000]
                                    },
                                    {
                                        name: "White Rabbit",
                                        color: "#ffcd05",
                                        class: "🃏",
                                        rarity: "Rare",
                                        cash: [26000, 105000, 11000000, 7700000, 72000000],
                                        time: [3, 3, 3, 2, 2],
                                        price: [2000000, 23000000, 280000000, 2900000000]
                                    },
                                    {
                                        name: "Cheshire Cat",
                                        color: "#dd7399",
                                        class: "🃏",
                                        rarity: "Rare",
                                        cash: [32000, 100000, 900000, 9000000, 60000000],
                                        time: [4, 3, 3, 3, 2],
                                        price: [1800000, 19000000, 220000000, 2400000000]
                                    },
                                    {
                                        name: "Caterpillar",
                                        color: "#00c0f3",
                                        class: "🃏",
                                        rarity: "Epic",
                                        cash: [10000, 70000, 650000, 7500000, 85000000],
                                        time: [1, 1, 1, 1, 1],
                                        price: [4200000, 42000000, 540000000, 6900000000]
                                    },
                                    {
                                        name: "Mad Hatter",
                                        color: "#914f93",
                                        class: "🃏",
                                        rarity: "Epic",
                                        cash: [38000, 250000, 1500000, 14000000, 80000000],
                                        time: [3, 3, 2, 2, 1],
                                        price: [4800000, 48000000, 520000000, 6600000000]
                                    },
                                    {
                                        name: "King of Hearts",
                                        color: "#c62127",
                                        class: "🃏",
                                        rarity: "Legendary",
                                        cash: [80000, 420000, 6800000, 100000000, 1500000000],
                                        time: [5, 5, 5, 5, 5],
                                        price: [7000000, 110000000, 1800000000, 30000000000]
                                    },
                                    {
                                        name: "Earth",
                                        color: "#416eb5",
                                        class: "🚀",
                                        rarity: "Uncommon",
                                        cash: [15000, 45000, 600000, 6500000, 65000000],
                                        time: [3, 3, 3, 3, 3],
                                        price: [1000000, 11000000, 150000000, 1700000000]
                                    },
                                    {
                                        name: "Meteor",
                                        color: "#c68c3c",
                                        class: "🚀",
                                        rarity: "Uncommon",
                                        cash: [23000, 65000, 700000, 4500000, 20000000],
                                        time: [5, 4, 3, 2, 1],
                                        price: [950000, 13000000, 160000000, 1600000000]
                                    },
                                    {
                                        name: "Stars",
                                        color: "#19184d",
                                        class: "🚀",
                                        rarity: "Uncommon",
                                        cash: [10000, 40000, 200000, 2000000, 18000000],
                                        time: [2, 2, 1, 1, 1],
                                        price: [1400000, 14000000, 150000000, 1500000000]
                                    },
                                    {
                                        name: "Alien",
                                        color: "#8dc63f",
                                        class: "🚀",
                                        rarity: "Uncommon",
                                        cash: [30000, 100000, 1000000, 11000000, 85000000],
                                        time: [4, 4, 4, 4, 4],
                                        price: [1500000, 17000000, 190000000, 1700000000]
                                    },
                                    {
                                        name: "Planet",
                                        color: "#9dc6ea",
                                        class: "🚀",
                                        rarity: "Rare",
                                        cash: [25000, 100000, 900000, 9000000, 90000000],
                                        time: [3, 3, 3, 3, 3],
                                        price: [2000000, 21000000, 210000000, 2400000000]
                                    },
                                    {
                                        name: "UFO",
                                        color: "#a15095",
                                        class: "🚀",
                                        rarity: "Rare",
                                        cash: [17000, 70000, 700000, 7000000, 70000000],
                                        time: [2, 2, 2, 2, 2],
                                        price: [2100000, 23000000, 250000000, 2800000000]
                                    },
                                    {
                                        name: "Spaceship",
                                        color: "#ffcb29",
                                        class: "🚀",
                                        rarity: "Epic",
                                        cash: [60000, 320000, 2100000, 15000000, 85000000],
                                        time: [5, 4, 3, 2, 1],
                                        price: [4800000, 46000000, 540000000, 6800000000]
                                    },
                                    {
                                        name: "Astronaut",
                                        color: "#9bd4ee",
                                        class: "🚀",
                                        rarity: "Legendary",
                                        cash: [45000, 260000, 2500000, 38000000, 550000000],
                                        time: [3, 3, 2, 2, 2],
                                        price: [6500000, 100000000, 1700000000, 27000000000]
                                    },
                                    {
                                        name: "Lil Bot",
                                        color: "#3e564a",
                                        class: "🤖",
                                        rarity: "Uncommon",
                                        cash: [4000, 12000, 180000, 1900000, 25000000],
                                        time: [1, 1, 1, 1, 1],
                                        price: [730000, 12000000, 130000000, 1900000000]
                                    },
                                    {
                                        name: "Lovely Bot",
                                        color: "#f179af",
                                        class: "🤖",
                                        rarity: "Uncommon",
                                        cash: [16000, 65000, 650000, 4800000, 42000000],
                                        time: [3, 3, 3, 2, 2],
                                        price: [1300000, 14000000, 170000000, 1600000000]
                                    },
                                    {
                                        name: "Angry Bot",
                                        color: "#f1613a",
                                        class: "🤖",
                                        rarity: "Uncommon",
                                        cash: [22000, 85000, 800000, 6200000, 65000000],
                                        time: [4, 4, 4, 3, 3],
                                        price: [1200000, 13000000, 150000000, 1700000000]
                                    },
                                    {
                                        name: "Happy Bot",
                                        color: "#51ba6b",
                                        class: "🤖",
                                        rarity: "Uncommon",
                                        cash: [11000, 45000, 500000, 2500000, 30000000],
                                        time: [2, 2, 2, 1, 1],
                                        price: [1400000, 15000000, 180000000, 2400000000]
                                    },
                                    {
                                        name: "Watson",
                                        color: "#d69b5a",
                                        class: "🤖",
                                        rarity: "Rare",
                                        cash: [24000, 100000, 1000000, 10000000, 100000000],
                                        time: [3, 3, 3, 3, 3],
                                        price: [2000000, 22000000, 240000000, 2600000000]
                                    },
                                    {
                                        name: "Buddy Bot",
                                        color: "#9dc6ea",
                                        class: "🤖",
                                        rarity: "Rare",
                                        cash: [22000, 95000, 650000, 6500000, 65000000],
                                        time: [3, 3, 2, 2, 2],
                                        price: [1900000, 21000000, 230000000, 2500000000]
                                    },
                                    {
                                        name: "Brainy Bot",
                                        color: "#9ecf7a",
                                        class: "🤖",
                                        rarity: "Epic",
                                        cash: [50000, 250000, 2100000, 21000000, 170000000],
                                        time: [4, 3, 3, 3, 2],
                                        price: [5000000, 46000000, 500000000, 6700000000]
                                    },
                                    {
                                        name: "Mega Bot",
                                        color: "#d71f27",
                                        class: "🤖",
                                        rarity: "Legendary",
                                        cash: [80000, 430000, 4200000, 62000000, 1000000000],
                                        time: [5, 5, 3, 3, 3],
                                        price: [7000000, 120000000, 1900000000, 35000000000]
                                    }
                                ];

                                let targetObj = null;

                                function scanDeep(obj, depth = 0) {
                                    if (depth > 8 || targetObj) return;
                                    if (!obj || typeof obj !== 'object') return;

                                    if (obj.factories && Array.isArray(obj.factories)) {
                                        targetObj = obj;
                                        return;
                                    }

                                    if (Array.isArray(obj)) {
                                        obj.forEach(item => scanDeep(item, depth + 1));
                                    } else {
                                        if (obj.props) scanDeep(obj.props, depth + 1);
                                        if (obj.children) scanDeep(obj.children, depth + 1);
                                        if (obj.memoizedProps) scanDeep(obj.memoizedProps, depth + 1);
                                        if (obj.memoizedState) scanDeep(obj.memoizedState, depth + 1);
                                    }
                                }

                                const root = document.querySelector('#app') || document.body;

                                function traverseDOM(node) {
                                    if (targetObj) return;
                                    const k = Object.keys(node).find(key => key.startsWith('__reactFiber'));
                                    if (k) scanDeep(node[k]);
                                    for (const child of node.children) traverseDOM(child);
                                }
                                traverseDOM(root);

                                if (targetObj) {

                                    let iframe = document.createElement('iframe');
                                    document.body.append(iframe);
                                    const input = blook.name;
                                    iframe.remove();

                                    if (!input) return;

                                    const chosenBlook = factoryBlooks.find(b => b.name.toLowerCase() === input.toLowerCase());

                                    if (chosenBlook) {

                                        const maxSlots = 10;
                                        const currentLen = targetObj.factories.length;

                                        const newBlook = {
                                            ...chosenBlook,
                                            level: 4,
                                            bonus: 1
                                        };

                                        if (currentLen < maxSlots) {
                                            targetObj.factories.push(newBlook);
                                            alert(`✅ Added ${chosenBlook.name}!`);
                                        } else {

                                            targetObj.factories[maxSlots - 1] = newBlook;
                                            alert(`✅ Replaced last slot with ${chosenBlook.name}!`);
                                        }

                                        alert("IMPORTANT: Buy any upgrade or click a blook to see the change!");

                                    } else {
                                        alert("❌ Invalid Blook Name! Check spelling.");
                                    }
                                } else {
                                    alert("❌ Could not find factories container.");
                                }
                            })();


                        },
                    },
                    {
                        name: "Free Upgrades",
                        description: "Sets upgrade prices to 0 for all current blooks",
                        run: function() {
                            const prices = [0, 0, 0, 0];
                            let stateNode = getStateNode();
                            stateNode.setState({
                                blooks: stateNode.state.blooks.map((blook) => ((blook.price = prices), blook))
                            });
                        },
                    },
                    {
                        name: "Max Blooks",
                        description: "Maxes out all your blooks' levels",
                        run: function() {
                            (() => {
                                console.clear();
                                console.log("💉 Factory: Maxing Levels...");

                                let foundFactories = null;

                                function scanDeep(obj, depth = 0) {
                                    if (depth > 8 || foundFactories) return;
                                    if (!obj || typeof obj !== 'object') return;

                                    if (obj.factories && Array.isArray(obj.factories) && obj.factories.length > 0) {
                                        const sample = obj.factories[0];
                                        if (sample.cash && sample.level !== undefined) {
                                            foundFactories = obj.factories;
                                            return;
                                        }
                                    }

                                    if (Array.isArray(obj)) {
                                        obj.forEach(item => scanDeep(item, depth + 1));
                                    } else {
                                        if (obj.props) scanDeep(obj.props, depth + 1);
                                        if (obj.children) scanDeep(obj.children, depth + 1);
                                        if (obj.memoizedProps) scanDeep(obj.memoizedProps, depth + 1);
                                        if (obj.memoizedState) scanDeep(obj.memoizedState, depth + 1);
                                    }
                                }

                                const root = document.querySelector('#app') || document.body;

                                function traverseDOM(node) {
                                    if (foundFactories) return;
                                    const k = Object.keys(node).find(key => key.startsWith('__reactFiber'));
                                    if (k) scanDeep(node[k]);
                                    for (const child of node.children) traverseDOM(child);
                                }
                                traverseDOM(root);

                                if (foundFactories) {
                                    let count = 0;
                                    foundFactories.forEach(factory => {
                                        factory.level = 4;

                                        count++;
                                    });

                                    let iframe = document.createElement('iframe');
                                    document.body.append(iframe);
                                    iframe.contentWindow.alert(`✅ Set ${count} blooks to Level 4!\n\nIMPORTANT: Perform any action (buy/upgrade) to see the visual change.`);
                                    iframe.remove();
                                } else {
                                    alert("❌ Could not find factories. Make sure you have at least one blook!");
                                }
                            })();


                        },
                    },
                    {
                        name: "Make Blooks OP",
                        description: "Make all your blooks OP",
                        run: function() {
                            (() => {
                                console.clear();
                                console.log("💉 Factory: Making Blooks OP...");

                                let foundFactories = null;

                                function scanDeep(obj, depth = 0) {
                                    if (depth > 8 || foundFactories) return;
                                    if (!obj || typeof obj !== 'object') return;

                                    if (obj.factories && Array.isArray(obj.factories) && obj.factories.length > 0) {
                                        const sample = obj.factories[0];
                                        if (sample.cash && Array.isArray(sample.cash) && sample.name) {
                                            foundFactories = obj.factories;
                                            return;
                                        }
                                    }

                                    if (Array.isArray(obj)) {
                                        obj.forEach(item => scanDeep(item, depth + 1));
                                    } else {
                                        if (obj.props) scanDeep(obj.props, depth + 1);
                                        if (obj.children) scanDeep(obj.children, depth + 1);
                                        if (obj.memoizedProps) scanDeep(obj.memoizedProps, depth + 1);
                                        if (obj.memoizedState) scanDeep(obj.memoizedState, depth + 1);
                                    }
                                }

                                const root = document.querySelector('#app') || document.body;

                                function traverseDOM(node) {
                                    if (foundFactories) return;
                                    const k = Object.keys(node).find(key => key.startsWith('__reactFiber'));
                                    if (k) {
                                        scanDeep(node[k]);
                                    }
                                    for (const child of node.children) traverseDOM(child);
                                }
                                traverseDOM(root);

                                if (foundFactories) {
                                    let count = 0;
                                    foundFactories.forEach(factory => {

                                        factory.cash = [1e9, 1e9, 1e9, 1e9, 1e9];

                                        factory.time = [0.01, 0.01, 0.01, 0.01, 0.01];

                                        count++;
                                    });

                                    let iframe = document.createElement('iframe');
                                    document.body.append(iframe);
                                    iframe.contentWindow.alert(`✅ Made ${count} blooks OP!\n\nIMPORTANT: Buy an upgrade or a new blook to force the stats to update.`);
                                    iframe.remove();
                                } else {
                                    alert("❌ Could not find factories. Make sure you have at least one blook!");
                                }
                            })();


                        }
                    },
                    {
                        name: "Remove Glitches",
                        description: "Removes all enemy glitches",
                        run: function() {
                            (() => {
                                console.clear();
                                console.log("🛡️ HUNTING GLITCH STRINGS IN MEMORY...");

                                const glitchNames = [
                                    "Lunch Break", "Ad Spam", "Error 37", "Night Time", "#LOL",
                                    "Jokester", "Slow Mo", "Dance Party", "Vortex", "Reverse", "Flip", "Micro"
                                ];

                                let foundCount = 0;
                                let visited = new Set();

                                function clearState(obj, key) {
                                    console.log(`%c🔥 FOUND GLITCH: "${obj[key]}" in key "${key}"`, "color: red; font-weight: bold;");
                                    console.log("   Object:", obj);

                                    obj[key] = "";

                                    if (Array.isArray(obj.ads)) obj.ads = [];
                                    if (Array.isArray(obj.hazards)) obj.hazards = [];
                                    if (typeof obj.lol === 'boolean') obj.lol = false;
                                    if (typeof obj.night === 'boolean') obj.night = false;
                                    if (typeof obj.joke === 'boolean') obj.joke = false;
                                    if (typeof obj.slow === 'boolean') obj.slow = false;
                                    if (typeof obj.dance === 'boolean') obj.dance = false;
                                    if (typeof obj.color === 'string') obj.color = "";

                                    foundCount++;
                                }

                                function scanDeep(obj, depth = 0) {
                                    if (!obj || typeof obj !== 'object' || depth > 10) return;
                                    if (visited.has(obj)) return;
                                    visited.add(obj);

                                    for (const key in obj) {
                                        const val = obj[key];

                                        if (typeof val === 'string') {

                                            for (const gName of glitchNames) {
                                                if (val === gName) {
                                                    clearState(obj, key);

                                                }
                                            }
                                        }

                                        if (key.startsWith('_') && key !== '_owner') continue;

                                        if (typeof val === 'object') {
                                            scanDeep(val, depth + 1);
                                        }
                                    }
                                }

                                const root = document.querySelector('#app') || document.body;

                                function traverseDOM(node) {
                                    const k = Object.keys(node).find(key => key.startsWith('__reactFiber'));
                                    if (k) {
                                        const fiber = node[k];

                                        if (fiber.memoizedState) scanDeep(fiber.memoizedState);

                                        if (fiber.memoizedProps) scanDeep(fiber.memoizedProps);
                                    }
                                    for (const child of node.children) traverseDOM(child);
                                }
                                traverseDOM(root);

                                if (foundCount > 0) {
                                    let iframe = document.createElement('iframe');
                                    document.body.append(iframe);
                                    iframe.contentWindow.alert(`✅ Found and cleared ${foundCount} glitch objects in memory!`);
                                    iframe.remove();
                                } else {
                                    alert("❌ No active glitch strings found in memory. \n(Wait until you actually have a glitch active, then run this!)");
                                }
                            })();


                        },
                    },
                    {
                        name: "Set All MegaBot",
                        description: "Sets all your blooks to maxed out Mega Bots",
                        run: function() {
                            (() => {
                                console.clear();
                                console.log("🏭 Factory: Setting all to Mega Bots...");

                                let targetObj = null;

                                function scanDeep(obj, depth = 0) {
                                    if (depth > 8 || targetObj) return;
                                    if (!obj || typeof obj !== 'object') return;

                                    if (obj.factories && Array.isArray(obj.factories)) {
                                        targetObj = obj;
                                        return;
                                    }

                                    if (Array.isArray(obj)) {
                                        obj.forEach(item => scanDeep(item, depth + 1));
                                    } else {
                                        if (obj.props) scanDeep(obj.props, depth + 1);
                                        if (obj.children) scanDeep(obj.children, depth + 1);
                                        if (obj.memoizedProps) scanDeep(obj.memoizedProps, depth + 1);
                                        if (obj.memoizedState) scanDeep(obj.memoizedState, depth + 1);
                                    }
                                }

                                const root = document.querySelector('#app') || document.body;

                                function traverseDOM(node) {
                                    if (targetObj) return;
                                    const k = Object.keys(node).find(key => key.startsWith('__reactFiber'));
                                    if (k) scanDeep(node[k]);
                                    for (const child of node.children) traverseDOM(child);
                                }
                                traverseDOM(root);

                                if (targetObj) {

                                    const megaBot = {
                                        name: "Mega Bot",
                                        color: "#d71f27",
                                        class: "🤖",
                                        rarity: "Legendary",
                                        cash: [80000, 430000, 4200000, 62000000, 1000000000],
                                        time: [5, 5, 3, 3, 3],
                                        price: [7000000, 120000000, 1900000000, 35000000000],
                                        active: false,
                                        level: 4,
                                        bonus: 5.0
                                    };

                                    const arr = targetObj.factories;
                                    arr.length = 0;

                                    for (let i = 0; i < 10; i++) {

                                        arr.push({
                                            ...megaBot
                                        });
                                    }

                                    let iframe = document.createElement('iframe');
                                    document.body.append(iframe);
                                    iframe.contentWindow.alert("✅ Factory replaced with 10 Mega Bots!\n\nIMPORTANT: Buy an upgrade or click a blook to refresh the visuals.");
                                    iframe.remove();

                                } else {
                                    alert("❌ Could not find factories container. Place at least one blook first.");
                                }
                            })();


                        },
                    },
                    {
                        name: "Set Cash",
                        description: "Sets amount of cash you have",
                        inputs: [{
                            name: "Cash",
                            type: "number",
                        }, ],
                        run: function(cash) {
                            (() => {
                                console.clear();
                                console.log("🏦 Factory: Setting Exact Cash...");

                                let gameState = null;

                                function scanDeep(obj, depth = 0) {
                                    if (depth > 8 || gameState) return;
                                    if (!obj || typeof obj !== 'object') return;

                                    if (obj.factories && typeof obj.addCash === 'function' && obj.cash !== undefined) {
                                        gameState = obj;
                                        return;
                                    }

                                    if (Array.isArray(obj)) {
                                        obj.forEach(item => scanDeep(item, depth + 1));
                                    } else {
                                        if (obj.props) scanDeep(obj.props, depth + 1);
                                        if (obj.children) scanDeep(obj.children, depth + 1);
                                        if (obj.memoizedProps) scanDeep(obj.memoizedProps, depth + 1);
                                        if (obj.memoizedState) scanDeep(obj.memoizedState, depth + 1);
                                    }
                                }

                                const root = document.querySelector('#app') || document.body;

                                function traverseDOM(node) {
                                    if (gameState) return;
                                    const k = Object.keys(node).find(key => key.startsWith('__reactFiber'));
                                    if (k) scanDeep(node[k]);
                                    for (const child of node.children) traverseDOM(child);
                                }
                                traverseDOM(root);

                                if (gameState) {
                                    const current = gameState.cash;

                                    let iframe = document.createElement('iframe');
                                    document.body.append(iframe);
                                    const input = cash;
                                    iframe.remove();

                                    if (input !== null) {
                                        const target = parseFloat(input);
                                        if (!isNaN(target)) {
                                            const diff = target - gameState.cash;

                                            gameState.addCash(diff);

                                            alert(`✅ Cash set to ${target}!`);
                                        }
                                    }
                                } else {
                                    alert("❌ Could not find Game Controller.");
                                }
                            })();


                        },
                    },
                ],
            },
            racing: {
               // img: "https://media.blooket.com/image/upload/v1663212882/Media/logos/Racing_Logo_Resized.png",
                img: "data:image/png;base64,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",
                name: "Racing",
                cheats: [{
                        name: "Instant Win",
                        description: "Instantly Wins the race",
                        run: function() {
                            const stateNode = getStateNode();
                            stateNode.setState({
                                progress: stateNode.state.goalAmount
                            });
                            stateNode.props.liveGameController.setVal({
                                path: "c/" + stateNode.props.client.name + "/pr",
                                val: stateNode.state.goalAmount,
                            });
                        },
                    },
                    {
                        name: "Set Questions",
                        description: "Sets the number of questions left",
                        inputs: [{
                            name: "Questions",
                            type: "number",
                        }, ],
                        run: function(progress) {
                            let stateNode = getStateNode();
                            progress = stateNode.props.client.amount - progress;
                            stateNode.setState({
                                progress
                            });
                            stateNode.props.liveGameController.setVal({
                                path: "c/" + stateNode.props.client.name + "/pr",
                                val: progress,
                            });
                        },
                    },
                ],
            },
            rush: {
                // img: "https://media.blooket.com/image/upload/v1663212881/Media/logos/Blook_Rush_Logo_Resized.png",
                img: "data:image/png;base64,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",
                name: "Blook Rush",
                cheats: [{
                        name: "Set Blooks",
                        description: "Sets amount of blooks you or your team has",
                        inputs: [{
                            name: "Blooks",
                            type: "number",
                        }, ],
                        run: function(numBlooks) {
                            let stateNode = getStateNode();
                            stateNode.setState({
                                numBlooks
                            });
                            stateNode.props.liveGameController.setVal({
                                path: (stateNode.isTeam ? "a/" : "c/") + stateNode.props.client.name + "/bs",
                                val: numBlooks,
                            });
                        },
                    },
                    {
                        name: "Set Defense",
                        description: "Sets amount of defense you or your team has (Max 4)",
                        inputs: [{
                            name: "Defense (max 4)",
                            type: "number",
                            max: 4,
                        }, ],
                        run: function(defense) {
                            let numDefense = Math.min(defense, 4);
                            let stateNode = getStateNode();
                            stateNode.setState({
                                numDefense
                            });
                            stateNode.props.liveGameController.setVal({
                                path: (stateNode.isTeam ? "a/" : "c/") + stateNode.props.client.name + "/d",
                                val: numDefense,
                            });
                        },
                    },
                ],
            },
            tower: {
                img: "https://media.blooket.com/image/upload/v1663212881/Media/logos/Tower_Of_Doom_Logo_Resized.png",
                name: "Tower of Doom",
                cheats: [{
                        name: "Fill Deck",
                        description: "Fills your deck with every maxed out card and artifact (Only works on towers page)",
                        run: function() {
                            if (window.location.pathname == "/tower/map") {
                                const stateNode = getStateNode();
                                stateNode.props.tower.artifacts =
                                    "Medical Kit|Fury Relic|Survival Guide|Steel Socks|Piggy Bank|Lucky Feather|Coupon|Cheese|Tasty Egg|Training Weights|Mighty Shield|Toxic Waste|Lifeline Totem|Cursed Hourglass|Band-Aid|Elder Coins|Captain's Anchor|Chess Pieces|Pink Hippo|Anorak's Wizard Cap|Dave's Doggo|Anubis' Obelisk|Farm Tractor|Magic Seedling|Just A Bone|Cozy Igloo|King's Crown|Sacred Scroll".split(
                                        "|"
                                    );
                                stateNode.props.tower.cards =
                                    "Chick,🌽|Chicken,🌽|Cow,🌽|Goat,🌽|Horse,🌽|Pig,🌽|Sheep,🌽|Duck,🌽|Dog,🌽|Cat,🐾|Rabbit,🐾|Goldfish,🐾|Hamster,🐾|Turtle,🐾|Kitten,🐾|Puppy,🐾|Bear,🌲|Moose,🌲|Fox,🌲|Raccoon,🌲|Squirrel,🌲|Owl,🌲|Hedgehog,🌲|Baby Penguin,❄️|Penguin,❄️|Arctic Fox,❄️|Snowy Owl,❄️|Polar Bear,❄️|Arctic Hare,❄️|Seal,❄️|Walrus,❄️|Tiger,🌴|Panther,🌴|Cockatoo,🌴|Orangutan,🌴|Anaconda,🌴|Macaw,🌴|Jaguar,🌴|Capuchin,🌴|Toucan,🌴|Parrot,🌴|Elf,⚔️|Witch,⚔️|Wizard,⚔️|Fairy,⚔️|Slime Monster,⚔️|Jester,⚔️|Dragon,⚔️|Unicorn,⚔️|Queen,⚔️|King,⚔️|Snow Globe,☃️|Holiday Gift,☃️|Hot Chocolate,☃️|Gingerbread Man,☃️|Gingerbread House,☃️|Holiday Wreath,☃️|Snowman,☃️|Santa Claus,☃️|Two of Spades,🏰|Eat Me,🏰|Drink Me,🏰|Alice,🏰|Queen of Hearts,🏰|Dormouse,🏰|White Rabbit,🏰|Cheshire Cat,🏰|Caterpillar,🏰|Mad Hatter,🏰|King of Hearts,🏰"
                                    .split("|")
                                    .map((x) => {
                                        const [blook, c] = x.split(",");
                                        return {
                                            strength: 20,
                                            charisma: 20,
                                            wisdom: 20,
                                            class: c,
                                            blook
                                        };
                                    });
                                try {
                                    stateNode.props.addTowerNode();
                                } catch {}
                                stateNode.setState({
                                    showDeck: false
                                });
                            } else alert("You need to be on the map to run this cheat!");
                        },
                    },
                    {
                        name: "Max Cards",
                        description: "Maxes out all the cards in your deck",
                        run: function() {
                            if (window.location.pathname == "/tower/map") {
                                const stateNode = getStateNode();
                                stateNode.props.tower.cards.forEach((card) => {
                                    card.strength = 20;
                                    card.charisma = 20;
                                    card.wisdom = 20;
                                });
                                try {
                                    stateNode.forceUpdate();
                                } catch {}
                            } else alert("You need to be on the map to run this cheat!");
                        },
                    },
                    {
                        name: "Max Health",
                        description: "Fills the player's health",
                        run: function() {
                            if (window.location.pathname == "/tower/battle") getStateNode().setState({
                                myHealth: 100,
                                myLife: 100
                            });
                            else alert("You need to be in battle to run this cheat!");
                        },
                    },
                    {
                        name: "Max Card Stats",
                        description: "Maxes out player's current card (Only works on attribute select page)",
                        run: function() {
                            const stateNode = getStateNode();
                            if (stateNode.state.phase !== "select") alert("You must be on the attribute selection page!");
                            else stateNode.setState({
                                myCard: {
                                    ...stateNode.state.myCard,
                                    strength: 20,
                                    charisma: 20,
                                    wisdom: 20
                                }
                            });
                        },
                    },
                    {
                        name: "Min Enemy Stats",
                        description: "Makes the enemy card stats all 0 (Only works on attribute select page)",
                        run: function() {
                            const stateNode = getStateNode();
                            if (stateNode.state.phase !== "select") alert("You must be on the attribute selection page!");
                            else stateNode.setState({
                                enemyCard: {
                                    ...stateNode.state.enemyCard,
                                    strength: 0,
                                    charisma: 0,
                                    wisdom: 0
                                }
                            });
                        },
                    },
                    {
                        name: "Set Coins",
                        description: "Try's to set amount of tower coins you have",
                        inputs: [{
                            name: "Coins",
                            type: "number",
                        }, ],
                        run: function(coins) {
                            if (window.location.pathname == "/tower/battle")
                                try {
                                    getStateNode().props.setTowerCoins(coins);
                                } catch {}
                            else alert("You need to be in battle to run this cheat!");
                        },
                    },
                ],
            },
            kingdom: {
                img: "https://media.blooket.com/image/upload/v1663212881/Media/logos/Crazy_Kingdom_Logo_Resized.png",
                name: "Crazy Kingdom",
                cheats: [{
                        name: "Choice ESP",
                        description: "Shows you what will happen if you say Yes or No",
                        type: "toggle",
                        enabled: false,
                        data: null,
                        run: function() {
                            if (!this.enabled) {
                                this.enabled = true;
                                this.data = setInterval(
                                    (stats) => {
                                        let stateNode = getStateNode();
                                        let elements = Array.prototype.reduce.call(document.querySelectorAll("[class*=statContainer]"), (obj, container, i) => ((obj[stats[i]] = container), obj), {});
                                        if (stateNode.state.phase == "choice") {
                                            Array.prototype.forEach.call(document.querySelectorAll(".choiceESP"), (x) => x.remove());
                                            Object.keys(stateNode.state.guest.yes || {}).forEach((x) => {
                                                if (elements[x] == null) return;
                                                let element = document.createElement("div");
                                                element.className = "choiceESP";
                                                element.style = "font-size: 24px; color: rgb(75, 194, 46); font-weight: bolder;";
                                                element.innerText = String(stateNode.state.guest.yes[x]);
                                                elements[x].appendChild(element);
                                            });
                                            Object.keys(stateNode.state.guest.no || {}).forEach((x) => {
                                                if (elements[x] == null) return;
                                                let element = document.createElement("div");
                                                element.className = "choiceESP";
                                                element.style = "font-size: 24px; color: darkred; font-weight: bolder;";
                                                element.innerText = String(stateNode.state.guest.no[x]);
                                                elements[x].appendChild(element);
                                            });
                                            Array.prototype.forEach.call(
                                                document.querySelectorAll("[class*=guestButton][role=button]"),
                                                (x) => (x.onclick = () => Array.prototype.forEach.call(document.querySelectorAll(".choiceESP"), (x) => x.remove()))
                                            );
                                        }
                                    },
                                    50,
                                    ["materials", "people", "happiness", "gold"]
                                );
                            } else {
                                this.enabled = false;
                                clearInterval(this.data);
                                Array.prototype.forEach.call(document.querySelectorAll(".choiceESP"), (x) => x.remove());
                                this.data = null;
                            }
                        },
                    },
                    {
                        name: "Disable Tax Toucan",
                        description: "Tax evasion",
                        run: function() {
                            getStateNode().taxCounter = Number.MAX_VALUE;
                        },
                    },
                    {
                        name: "Max Stats",
                        description: "Sets all resources to the max",
                        run: function() {
                            getStateNode().setState({
                                materials: 100,
                                people: 100,
                                happiness: 100,
                                gold: 100
                            });
                        },
                    },
                    {
                        name: "Set Guests",
                        description: "Sets the amount of guests you've seen",
                        inputs: [{
                            name: "Guests",
                            type: "number",
                        }, ],
                        run: function(guestScore) {
                            getStateNode().setState({
                                guestScore
                            });
                        },
                    },
                    {
                        name: "Skip Guest",
                        description: "Skips the current guest",
                        run: function() {
                            getStateNode().nextGuest();
                        },
                    },
                ],
            },
            toy: {
                img: "https://media.blooket.com/image/upload/v1663212881/Media/logos/Santas_Workshop_Logo_Resized.png",
                name: "Santa's Workshop",
                cheats: [{
                        name: "Remove Distractions",
                        description: "Removes all enemy distractions",
                        run: function() {
                            getStateNode().setState({
                                fog: !1,
                                dusk: !1,
                                wind: !1,
                                plow: !1,
                                blizzard: !1,
                                force: !1,
                                canada: !1,
                                trees: [!1, !1, !1, !1, !1, !1, !1, !1, !1, !1]
                            });
                        },
                    },
                    {
                        name: "Send Distraction",
                        description: "Sends a distraction to everyone else playing",
                        inputs: [{
                            name: "Distraction",
                            type: "options",
                            options: Object.entries({
                                c: "Oh Canada",
                                b: "Blizzard",
                                f: "Fog Spell",
                                d: "Dark & Dusk",
                                w: "Howling Wind",
                                g: "Gift Time!",
                                t: "TREES",
                                s: "Snow Plow",
                                fr: "Use The Force"
                            }).map(([value, name]) => ({
                                name,
                                value,
                            })),
                        }, ],
                        run: function(val) {
                            let stateNode = getStateNode();
                            stateNode.safe = true;
                            stateNode.props.liveGameController.setVal({
                                path: `c/${stateNode.props.client.name}/tat`,
                                val
                            });
                        },
                    },
                    {
                        name: "Set Toys",
                        description: "Sets amount of toys",
                        inputs: [{
                            name: "Toys",
                            type: "number",
                        }, ],
                        run: function(toys) {
                            let stateNode = getStateNode();
                            stateNode.setState({
                                toys
                            });
                            stateNode.props.liveGameController.setVal({
                                path: "c/" + stateNode.props.client.name + "/t",
                                val: toys,
                            });
                        },
                    },
                    {
                        name: "Set Toys Per Question",
                        description: "Sets amount of toys per question",
                        inputs: [{
                            name: "Toys Per Question",
                            type: "number",
                        }, ],
                        run: function(toysPerQ) {
                            getStateNode().setState({
                                toysPerQ
                            });
                        },
                    },
                    {
                        name: "Swap Toys",
                        description: "Swaps toys with someone",
                        inputs: [{
                            name: "Player",
                            type: "options",
                            options: () => {
                                let stateNode = getStateNode();
                                return stateNode.props.liveGameController._liveApp ? new Promise((res) => stateNode.props.liveGameController.getDatabaseVal("c", (players) => players && res(Object.keys(players)))) : [];
                            },
                        }, ],
                        run: function(target) {
                            let stateNode = getStateNode();
                            stateNode.props.liveGameController.getDatabaseVal("c", (players) => {
                                if (!players || players[target] == null) return;
                                stateNode.props.liveGameController.setVal({
                                    path: "c/" + stateNode.props.client.name + "/tat",
                                    val: `${target}:swap:${stateNode.state.toys}`,
                                });
                                stateNode.setState({
                                    toys: players[target].t
                                });
                            });
                        },
                    },
                ],
            },
            flappy: {
                img: "https://ac.blooket.com/marketassets/blooks/chick.svg",
                name: "Flappy Blook",
                cheats: [{
                        name: "Toggle Ghost",
                        description: "Lets you go through the pipes",
                        type: "toggle",
                        enabled: false,
                        run: function() {
                            this.enabled = !this.enabled;
                            for (const body of Object.values(document.querySelector("#phaser-bouncy"))[0].return.updateQueue.lastEffect.deps[0].current.config.sceneConfig.physics.world.bodies.entries) {
                                if (!body.gameObject.frame.texture.key.startsWith("blook")) continue;
                                body.checkCollision.none = this.enabled;
                                body.gameObject.setAlpha(this.enabled ? 0.5 : 1);
                                break;
                            }
                        },
                    },
                    {

                        name: "Change Settings",
                        description: "Changes various game mechanics and lets you play with the spacebar",
                        inputs: [{
                                name: "Bird Gravity",
                                type: "number",
                                value: 800
                            },
                            {
                                name: "Bird Speed",
                                type: "number",
                                value: 125
                            },
                            {
                                name: "Bird Flap Power",
                                type: "number",
                                value: 300
                            }
                        ],
                        run: function(birdGravity, birdSpeed, birdFlapPower) {
                            (function() {
                                const canvas = document.querySelector("#phaser-bouncy");
                                if (!canvas) return;

                                const scene = Object.values(canvas)[0].return.updateQueue.lastEffect.deps[0].current.config.sceneConfig;
                                if (!scene) return;

                                // Apply custom settings
                                scene.birdGravity = birdGravity;
                                scene.birdSpeed = birdSpeed;
                                scene.birdFlapPower = birdFlapPower;

                                // Override flap function
                                scene.flap = function() {
                                    if (!this.isStarted) {
                                        this.bird.body.gravity.y = this.birdGravity;
                                        this.pipeGroup.setVelocityX(-this.birdSpeed);
                                        this.groundGroup.setVelocityX(-this.birdSpeed);
                                        this.isStarted = true;
                                    }
                                    this.bird.body.velocity.y = -this.birdFlapPower;
                                };

                                // Clear previous pointer events
                                scene.input._events.pointerdown = [];

                                // Recreate the scene
                                scene.create();

                                // Add spacebar flap
                                scene.input.keyboard.addKey('SPACE').on("down", () => {
                                    scene.flap.call(scene);
                                });
                            })();
                        }
                    },
                    {
                        name: "Change Game Code",
                        description: "Replace the old game with new HTML content",
                        inputs: [{
                            name: "HTML Code",
                            type: "text"
                        }],
                        run: function(newHtml) {
                            (function() {

                                if (newHtml) {

                                    var canvas = document.querySelector('canvas[width="320"][height="480"]');

                                    if (canvas) {

                                        var tempContainer = document.createElement('div');
                                        tempContainer.innerHTML = newHtml;

                                        var wrapperDiv = document.createElement('div');
                                        wrapperDiv.style.width = '320px';
                                        wrapperDiv.style.height = '480px';
                                        wrapperDiv.style.overflow = 'auto';
                                        wrapperDiv.style.boxSizing = 'border-box';
                                        wrapperDiv.style.position = canvas.style.position;
                                        wrapperDiv.style.marginLeft = canvas.style.marginLeft;
                                        wrapperDiv.style.marginTop = canvas.style.marginTop;
                                        wrapperDiv.style.cursor = canvas.style.cursor;
                                        wrapperDiv.style.backgroundColor = '#f0f0f0';

                                        while (tempContainer.firstChild) {
                                            wrapperDiv.appendChild(tempContainer.firstChild);
                                        }

                                        canvas.parentNode.replaceChild(wrapperDiv, canvas);
                                    }

                                    var scoreTextDiv = document.querySelector('div._scoreText_e2c5l_7');
                                    if (scoreTextDiv) {
                                        scoreTextDiv.parentNode.removeChild(scoreTextDiv);
                                    }
                                }
                            })();
                        }
                    }, {
                        name: "Set Score",
                        description: "Sets flappy blook score",
                        inputs: [{
                            name: "Score",
                            type: "number",
                        }, ],
                        run: function(score) {
                            Object.values(document.querySelector("#phaser-bouncy"))[0].return.updateQueue.lastEffect.deps[1](score || 0);
                        },
                    },
                ],
            },
        };

        const searchPage = document.createElement("div");
        searchPage.className = classes.searchPage;

        const searchbarHolder = document.createElement("form");
        searchbarHolder.className = classes.searchbarHolder;

        const searchbarInput = document.createElement("input");
        searchbarInput.placeholder = "Search Cheats";
        searchbarInput.className = classes.searchbarInput;

        const searchbarButton = document.createElement("div");
        searchbarButton.onclick = () => (searchbarInput.value = "");
        searchbarButton.innerHTML = '<i class="fas fa-times" style="line-height: 1;"></i>';
        searchbarButton.className = classes.searchbarButton;

        searchbarHolder.append(searchbarInput, searchbarButton);

        const searchResults = document.createElement("div");
        searchResults.className = classes.noScroll + " " + classes.searchResults;

        const noResult = document.createElement("div");
        noResult.className = classes.noResult;

        searchPage.append(searchbarHolder, searchResults);

        let searchThrottle,
            gamemodeResults = {};
        searchPage.onPath = searchbarHolder.onsubmit = (e) => {
            clearTimeout(searchThrottle);
            e?.preventDefault?.();
            const query = searchbarInput.value.toLowerCase();
            let hasResults = false;
            const animEnabled = window.xguiAnimationsEnabled;

            for (const child of searchResults.children) {
                if (child != noResult) {
                    if (child.dataset[datasets.mode]?.includes?.(query) || child.dataset[datasets.name].includes(query) || child.dataset[datasets.description]?.includes?.(query)) {
                        hasResults = true;
                        // Add smooth slide-in animation if enabled
                        if (animEnabled) {
                            child.style.animation = "slideInLeft 0.3s ease-out";
                        }
                        child.style.display = "block";
                        if (child.dataset[datasets.mode]) {
                            if (animEnabled) {
                                gamemodeResults[child.dataset[datasets.mode]].style.animation = "slideInLeft 0.3s ease-out";
                            }
                            gamemodeResults[child.dataset[datasets.mode]].style.display = "block";
                        }
                    } else {
                        // Add smooth slide-out animation if enabled
                        if (animEnabled) {
                            child.style.animation = "slideOutRight 0.3s ease-out";
                            setTimeout(() => {
                                child.style.display = "none";
                            }, 300);
                        } else {
                            child.style.display = "none";
                        }
                    }
                }
            }
            if (!hasResults) {
                noResult.innerText = `No results found for "${query}"`;
                if (animEnabled) {
                    noResult.style.animation = "fadeIn 0.3s ease-out";
                }
                noResult.style.display = "block";
            } else {
                if (animEnabled) {
                    noResult.style.animation = "fadeOut 0.3s ease-out";
                    setTimeout(() => {
                        noResult.style.display = "none";
                    }, 300);
                } else {
                    noResult.style.display = "none";
                }
            }
        };

        searchbarInput.oninput = (e) => {
            clearTimeout(searchThrottle);
            searchThrottle = setTimeout(searchbarHolder.onsubmit, 100); // Reduced from 1000ms to 100ms for instant search
        };

        const favoritesPage = document.createElement("div");
        favoritesPage.className = classes.noScroll + " " + classes.favoritesPage;

        const noFavorites = document.createElement("span");
        noFavorites.innerText = "You have no favorites.";

        favoritesPage.append(noFavorites);

        favoritesPage.onPath = () => {
            noFavorites.style.display = favoritesPage.querySelector("[data-" + datasets.favorited + "='true']") == null ? "block" : "none";
        };

        gamemodesList.innerHTML = "";
        searchResults.innerHTML = "";
        searchResults.append(noResult);
        for (const mode in cheats) {
            const gamemode = document.createElement("div");
            gamemode.className = classes.gamemode;
            const image = document.createElement("img");
            image.src = cheats[mode].img;
            const name = document.createElement("div");
            image.alt = name.innerText = cheats[mode].name;
            gamemode.append(image, name);

            const cheatsPage = document.createElement("div");
            cheatsPage.className = classes.contentPage;
            
            if (mode === 'custom_modules') {
                cheatsPage.dataset.customModulesPage = 'true';
                customModulesPageRef = cheatsPage;
            }

            const cheatsList = document.createElement("div");
            cheatsList.className = classes.cheatsList + " " + classes.noScroll;
            
            if (mode === 'custom_modules') {
                customModulesCheatsList = cheatsList;
            }

            const inputElements = [];
            cheatsPage.onPath = () => inputElements.forEach((x) => x());

            const searchResultSeparator = document.createElement("div");
            searchResultSeparator.onclick = () => path.push(cheats[mode].name, cheatsPage);
            searchResultSeparator.className = classes.searchResultSeparator;
            searchResultSeparator.dataset[datasets.name] = (searchResultSeparator.innerText = cheats[mode].name).toLowerCase();
            gamemodeResults[cheats[mode].name.toLowerCase()] = searchResultSeparator;
            searchResults.append(searchResultSeparator);

            const favoritesSeparator = searchResultSeparator.cloneNode(true);
            favoritesSeparator.dataset[datasets.favorites] = 0;
            favoritesSeparator.onclick = searchResultSeparator.onclick;
            favoritesPage.append(favoritesSeparator);

            for (const cheat of cheats[mode].cheats) {
                const cheatId = `${mode}.${cheat.name.toLowerCase()}.${cheat.type == "toggle" ? "toggle" : "execute"}`;
                const cheatElement = document.createElement("div");

                const searchResult = document.createElement("div");
                searchResult.className = classes.searchResult;

                const searchResultInfo = document.createElement("div");
                searchResultInfo.className = classes.searchResultInfo;

                const searchResultName = document.createElement("div");
                searchResultName.className = classes.searchResultName;
                searchResult.dataset[datasets.name] = (searchResultName.innerText = cheat.name + (cheat.type == "toggle" && !cheat.name.includes("toggle") ? " (Toggle)" : "")).toLowerCase();
                searchResult.dataset[datasets.mode] = cheats[mode].name.toLowerCase();
                const searchResultDescription = document.createElement("div");
                searchResultDescription.className = classes.searchResultDescription;
                searchResult.dataset[datasets.description] = (searchResultDescription.innerText = cheat.description).toLowerCase();

                searchResultInfo.append(searchResultName, searchResultDescription);

                searchResult.onclick = () => {
                    path.push(searchResultName.innerText, cheatsPage);
                    cheatElement.scrollIntoView();
                    cheatElement.animate(
                        [{
                                color: "var(--textColor)",
                                textShadow: "0 0 0px var(--highlight)",
                            },
                            {
                                color: "var(--highlight)",
                                textShadow: "0 0 5px var(--highlight)",
                                offset: 0.25,
                            },
                            {
                                color: "var(--textColor)",
                                textShadow: "0 0 0px var(--highlight)",
                            },
                        ],
                        1500
                    );
                };

                searchResult.append(searchResultInfo);

                searchResults.append(searchResult);

                const cheatTop = document.createElement("div");
                cheatTop.className = classes.cheatTop;
                const cheatInfo = document.createElement("div");
                cheatInfo.className = classes.cheatInfo;
                const cheatName = document.createElement("span");
                cheatName.innerText = cheat.name;
                cheatName.className = classes.cheatName;

                const favoriteButton = document.createElement("i");
                favoriteButton.className = "far fa-star " + classes.favoriteButton;

                const favoriteInner = document.createElement("i");
                favoriteInner.className = "fas fa-star";
                favoriteButton.append(favoriteInner);

                let favoritesPageCopy = searchResult.cloneNode(true);
                favoritesPageCopy.dataset[datasets.favorited] = false;
                favoritesPageCopy.onclick = searchResult.onclick;
                favoritesPage.append(favoritesPageCopy);

                favoriteButton.onclick = () => {
                    const favorited = cheatId in Settings.data.favorites;
                    favoriteInner.classList.toggle(classes.filled, !favorited);
                    if (favorited) {
                        delete Settings.data.favorites[cheatId];
                        favoritesPageCopy.dataset[datasets.favorited] = false;
                        favoritesSeparator.dataset[datasets.favorites]--;
                    } else {
                        Settings.data.favorites[cheatId] = 1;
                        favoritesPageCopy.dataset[datasets.favorited] = true;
                        favoritesSeparator.dataset[datasets.favorites]++;
                    }
                    favoritesPage.onPath();
                    Settings.setData(Settings.data);
                };

                if (cheatId in (Settings.data.favorites ??= {})) {
                    favoriteInner.classList.toggle(classes.filled, true);
                    favoritesPageCopy.dataset[datasets.favorited] = true;
                    favoritesSeparator.dataset[datasets.favorites]++;
                }

                cheatName.append(favoriteButton);

                const cheatDescription = document.createElement("span");
                cheatDescription.innerText = cheat.description;
                cheatDescription.className = classes.cheatDescription;
                cheatInfo.append(cheatName, cheatDescription);
                cheatElement.append(cheatTop);
                const inputs = [];
                if (Array.isArray(cheat.inputs)) {
                    const cheatInputs = document.createElement("div");
                    cheatInputs.className = classes.cheatInputs;
                    for (const input of cheat.inputs) {
                        const inputElement = document.createElement("div");
                        const inputName = document.createElement("span");
                        inputName.innerText = input.name;
                        inputElement.append(inputName);
                        cheatInputs.append(inputElement);

                        if (input.type == "options") {
                            const inputField = document.createElement("select");
                            inputField.dataset[datasets.type] = "options";
                            inputElement.append(inputField);
                            inputs.push(inputField);
                            let curField = inputField;
                            const updateOptions = () => {
                                let choose = input.options;

                                const newInputField = document.createElement("select");
                                newInputField.dataset[datasets.type] = "options";
                                inputs[inputs.indexOf(curField)] = newInputField;
                                curField.replaceWith(newInputField);
                                curField = newInputField;

                                if (typeof choose == "function")
                                    try {
                                        choose = choose();
                                    } catch {
                                        choose = [];
                                    }
                                if (choose instanceof Promise) {
                                    const waiting = document.createElement("option");
                                    waiting.value = '""';
                                    waiting.innerHTML = "Loading Options...";
                                    curField.append(waiting);
                                    choose.then((choices) => {
                                        if (choices?.length > 0) {
                                            curField.innerHTML = "";
                                            for (const choice of choices) {
                                                const option = document.createElement("option");
                                                option.value = JSON.stringify(choice?.value ?? choice);
                                                option.innerHTML = choice?.name || choice;
                                                curField.append(option);
                                            }
                                        } else {
                                            const newInputField = document.createElement("input");
                                            inputs[inputs.indexOf(curField)] = newInputField;
                                            curField.replaceWith(newInputField);
                                            newInputField.dataset[datasets.type] = "string";
                                            newInputField.placeholder = input.name;
                                            curField = newInputField;
                                        }
                                    });
                                } else {
                                    if (choose?.length > 0) {
                                        for (const choice of choose) {
                                            const option = document.createElement("option");
                                            option.value = JSON.stringify(choice?.value ?? choice);
                                            option.innerHTML = choice?.name || choice;
                                            curField.append(option);
                                        }
                                    } else {
                                        const newInputField = document.createElement("input");
                                        inputs[inputs.indexOf(curField)] = newInputField;
                                        curField.replaceWith(newInputField);
                                        newInputField.dataset[datasets.type] = "string";
                                        newInputField.placeholder = input.name;
                                        curField = newInputField;
                                    }
                                }
                            };
                            updateOptions();
                            inputElements.push(updateOptions);
                        } else {
                            const inputField = document.createElement("input");
                            inputField.dataset[datasets.type] = input.type;
                            if (input.type == "number") {
                                inputField.type = "number";
                                inputField.min = input.min;
                                inputField.max = input.max;
                                inputField.value = input.value || (input.min ?? 0);
                            }
                            inputField.placeholder = input.name;
                            inputElement.append(inputField);
                            inputs.push(inputField);
                        }
                    }
                    cheatElement.append(cheatInputs);
                }
                cheatTop.append(cheatInfo);
                const runButton = document.createElement("div");
                runButton.className = classes.runCheat;
                if (cheat.type == "toggle") {
                    runButton.innerText = "Toggle On";
                    runButton.classList.add(classes.toggleCheat);
                } else runButton.innerText = "Execute";
                runButton.onclick = () => {
                try {
                    cheat.run.apply(
                        cheat,
                        inputs.map((x) => (x.dataset[datasets.type] == "number" ? parseFloat("0" + x.value) : x.dataset[datasets.type] == "options" ? JSON.parse(x.value) : x.value))
                    );
                    if (cheat.type == "toggle") {
                        runButton.innerText = "Toggle " + (cheat.enabled ? "Off" : "On");
                        runButton.classList.toggle(classes.active, cheat.enabled);
                        Logs.addLog(`Toggled "${cheat.name}" ${cheat.enabled ? "on" : "off"}`, cheat.enabled ? "var(--toggleOn)" : "var(--toggleOff)");
                        if (areSweetAlertsEnabled()) {
                            Swal.fire({title:'Cheat Toggled',text:`${cheat.name} is now ${cheat.enabled?'Enabled':'Disabled'}.`,icon:cheat.enabled?'success':'warning',toast:true,position:'bottom',timer:3000,timerProgressBar:true,showConfirmButton:false,background:'#151534',color:'#ffffff',iconColor:'#ffffff'});
                        }
                    } else {
                    Logs.addLog(`Ran "${cheat.name}"`, "var(--highlight)");
                    if (areSweetAlertsEnabled()) {
                        Swal.fire({title:'Cheat Executed',text:`${cheat.name} has been Executed.`,icon:'info',toast:true,position:'bottom',timer:3000,timerProgressBar:true,showConfirmButton:false,background:'#151534',color:'#ffffff',iconColor:'#ffffff'});
                    }
                    }
                } catch (err) {
                    Logs.addLog(`Error running "${cheat.name}": ${err.message}`, "var(--error)");
                    if (areSweetAlertsEnabled()) {
                        Swal.fire({title:'Cheat Error',text:`An error occurred while running ${cheat.name} make sure you are on the right page!`,icon:'error',toast:true,position:'bottom',timer:3000,timerProgressBar:true,showConfirmButton:false,background:'#151534',color:'#ffffff',iconColor:'#ff0000'});
                    }
                }
            };
                cheatTop.append(runButton);
                cheatsList.append(cheatElement);
            }

            cheatsPage.append(cheatsList);

            gamemode.onclick = () => {
                const unsupportedModes = ["racing", "royale", "dino", "rush"]; // <-- Unsuported Gamemodes go here

                // Check for CSP on custom_modules gamemode
                if (mode === "custom_modules") {
                    let cspDetected = false;
                    try {
                        const testScript = document.createElement('script');
                        testScript.textContent = 'window.__cspTestPassed2 = true;';
                        document.head.appendChild(testScript);
                        document.head.removeChild(testScript);
                        if (!window.__cspTestPassed2) {
                            cspDetected = true;
                        }
                        delete window.__cspTestPassed2;
                    } catch (e) {
                        cspDetected = true;
                    }
                    const cspMeta = document.querySelector('meta[http-equiv="Content-Security-Policy"]');
                    if (cspMeta && cspMeta.content.includes('script-src')) {
                        cspDetected = true;
                    }

                    if (cspDetected) {
                        path.push(cheats[mode].name, cheatsPage);

                        try {
                            if (cheatsPage && cheatsPage.style) {
                                let blurTarget = cheatsPage.querySelector && cheatsPage.querySelector('.xgui-blur-target');
                                if (!blurTarget) {
                                    blurTarget = document.createElement('div');
                                    blurTarget.className = 'xgui-blur-target';
                                    while (cheatsPage.firstChild) {
                                        blurTarget.appendChild(cheatsPage.firstChild);
                                    }
                                    cheatsPage.appendChild(blurTarget);
                                }
                                blurTarget.style.filter = 'blur(8px)';
                                blurTarget.style.pointerEvents = 'none';
                            }
                        } catch (e) {}

                        if (cheatsPage.querySelector && cheatsPage.querySelector('.xgui-csp-notice')) return;
                        const notice = document.createElement("div");
                        notice.className = 'xgui-csp-notice';
                        try { 
                            if (!cheatsPage.style.position || cheatsPage.style.position === 'static') cheatsPage.style.position = 'relative';
                            // Allow content to extend beyond the cheatsPage bounds
                            cheatsPage.style.overflow = 'visible';
                        } catch (e) {}
                        notice.style.cssText = `
                            position: absolute;
                            inset: 0;
                            display: flex !important;
                            align-items: flex-start !important;
                            justify-content: center !important;
                            z-index: 2000;
                            pointer-events: auto;
                            text-align: center;
                            background: transparent;
                            padding: 20px;
                            overflow: visible !important;
                        `;

                        const content = document.createElement('div');
                        content.className = 'xgui-csp-notice-content';
                        content.style.cssText = `
                            box-sizing: border-box !important;
                            display: block !important;
                            max-width: 380px !important;
                            width: 100% !important;
                            padding: 40px 35px !important;
                            border-radius: 20px !important;
                            backdrop-filter: blur(24px) saturate(180%) !important;
                            -webkit-backdrop-filter: blur(24px) saturate(180%) !important;
                            background: linear-gradient(145deg, rgba(138, 43, 226, 0.15), rgba(75, 0, 130, 0.1)) !important;
                            border: 1.5px solid rgba(255, 255, 255, 0.15) !important;
                            box-shadow:
                                0 10px 40px rgba(0, 0, 0, 0.5),
                                0 0 0 1px rgba(255, 255, 255, 0.08) inset,
                                0 25px 70px rgba(138, 43, 226, 0.2) !important;
                            text-align: center !important;
                            margin-top: -40px !important;
                        `;

                        const iconWrapper = document.createElement("div");
                        iconWrapper.innerHTML = `
                            <svg width="64" height="64" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
                                <path d="M12 2L4 6V11C4 16 7 20 12 22C17 20 20 16 20 11V6L12 2Z" stroke="currentColor" stroke-width="2" stroke-linejoin="round"/>
                                <path d="M9 9L15 15M15 9L9 15" stroke="currentColor" stroke-width="2" stroke-linecap="round"/>
                            </svg>
                        `;
                        iconWrapper.style.cssText = `
                            display: block !important;
                            color: #FFFFFF !important;
                            margin: 0 auto 20px auto !important;
                            padding: 0 !important;
                            line-height: 1 !important;
                            filter: drop-shadow(0 4px 16px rgba(255, 255, 255, 0.3)) !important;
                        `;

                        const noticeTitle = document.createElement("div");
                        noticeTitle.textContent = "CSP Detected";
                        noticeTitle.style.cssText = `
                            display: block !important;
                            color: #FFFFFF !important;
                            font-size: 32px !important;
                            font-weight: 800 !important;
                            line-height: 1.1 !important;
                            margin: 0 0 16px 0 !important;
                            padding: 0 !important;
                            text-align: center !important;
                            letter-spacing: -0.5px !important;
                            text-shadow: 0 2px 20px rgba(138, 43, 226, 0.6) !important;
                        `;

                        const noticeText = document.createElement("div");
                        noticeText.innerHTML = "This is not supported on your version. Please use the extension version or get the CSP unblock extension.";
                        noticeText.style.cssText = `
                            display: block !important;
                            color: #FFFFFF !important;
                            font-size: 15px !important;
                            margin: 0 0 30px 0 !important;
                            padding: 0 !important;
                            text-align: center !important;
                            line-height: 1.6 !important;
                            font-weight: 400 !important;
                        `;

                        const buttonContainer = document.createElement("div");
                        buttonContainer.style.cssText = `
                            display: flex !important;
                            flex-direction: column !important;
                            gap: 12px !important;
                        `;

                        const extensionButton = document.createElement("a");
                        extensionButton.href = "https://github.com/xgui-client/X-GUI-BLOOKET-CLIENT/raw/refs/heads/main/extension/x-gui-extension.zip";
                        extensionButton.target = "_blank";
                        extensionButton.textContent = "Get Extension";
                        extensionButton.style.cssText = `
                            display: inline-flex !important;
                            align-items: center !important;
                            justify-content: center !important;
                            background: linear-gradient(135deg, #5865F2, #4752C4) !important;
                            color: #FFFFFF !important;
                            border: none !important;
                            font-size: 15px !important;
                            font-weight: 600 !important;
                            cursor: pointer !important;
                            padding: 14px 32px !important;
                            border-radius: 12px !important;
                            transition: all 0.3s ease !important;
                            box-shadow: 0 6px 20px rgba(88, 101, 242, 0.4) !important;
                            margin: 0 !important;
                            letter-spacing: 0.3px !important;
                            text-decoration: none !important;
                        `;

                        extensionButton.addEventListener('mouseenter', function() {
                            this.style.transform = 'translateY(-3px) scale(1.02)';
                            this.style.boxShadow = '0 10px 30px rgba(88, 101, 242, 0.6)';
                        });

                        extensionButton.addEventListener('mouseleave', function() {
                            this.style.transform = 'translateY(0) scale(1)';
                            this.style.boxShadow = '0 6px 20px rgba(88, 101, 242, 0.4)';
                        });

                        buttonContainer.appendChild(extensionButton);

                        content.appendChild(iconWrapper);
                        content.appendChild(noticeTitle);
                        content.appendChild(noticeText);
                        content.appendChild(buttonContainer);

                        notice.append(content);
                        try { cheatsPage.append(notice); } catch (e) { document.body.append(notice); }
                        return;
                    }
                }

                if (unsupportedModes.includes(mode)) {
                    path.push(cheats[mode].name, cheatsPage);

                    try {
                        if (cheatsPage && cheatsPage.style) {
                            let blurTarget = cheatsPage.querySelector && cheatsPage.querySelector('.xgui-blur-target');
                            if (!blurTarget) {
                                blurTarget = document.createElement('div');
                                blurTarget.className = 'xgui-blur-target';
                                while (cheatsPage.firstChild) {
                                    blurTarget.appendChild(cheatsPage.firstChild);
                                }
                                cheatsPage.appendChild(blurTarget);
                            }
                            blurTarget.style.filter = 'blur(8px)';
                            blurTarget.style.pointerEvents = 'none';
                        } else if (typeof gui !== 'undefined' && gui.style) {
                            gui.style.filter = "blur(8px)";
                            gui.style.pointerEvents = "none";
                        }
                    } catch (e) {}

                    if (cheatsPage.querySelector && cheatsPage.querySelector('.xgui-blur-notice')) return;
                    const notice = document.createElement("div");
                    notice.className = 'xgui-blur-notice';
                    try { if (!cheatsPage.style.position || cheatsPage.style.position === 'static') cheatsPage.style.position = 'relative'; } catch (e) {}
                    notice.style.cssText = `
                        position: absolute;
                        inset: 0;
                        display: flex !important;
                        align-items: flex-start !important;
                        justify-content: center !important;
                        z-index: 2000;
                        pointer-events: auto;
                        text-align: center;
                        background: transparent;
                        padding: 20px;
                    `;

                    const content = document.createElement('div');
                    content.className = 'xgui-blur-notice-content';
                    content.style.cssText = `
                        box-sizing: border-box !important;
                        display: block !important;
                        max-width: 380px !important;
                        width: 100% !important;
                        padding: 40px 35px !important;
                        border-radius: 20px !important;
                        backdrop-filter: blur(24px) saturate(180%) !important;
                        -webkit-backdrop-filter: blur(24px) saturate(180%) !important;
                        background: linear-gradient(145deg, rgba(138, 43, 226, 0.15), rgba(75, 0, 130, 0.1)) !important;
                        border: 1.5px solid rgba(255, 255, 255, 0.15) !important;
                        box-shadow:
                            0 10px 40px rgba(0, 0, 0, 0.5),
                            0 0 0 1px rgba(255, 255, 255, 0.08) inset,
                            0 25px 70px rgba(138, 43, 226, 0.2) !important;
                        text-align: center !important;
                        margin-top: -40px !important;

                    `;

                    const iconWrapper = document.createElement("div");
                    iconWrapper.innerHTML = `
                        <svg width="64" height="64" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
                            <rect x="5" y="11" width="14" height="10" rx="2" stroke="currentColor" stroke-width="2"/>
                            <path d="M7 11V7C7 4.79086 8.79086 3 11 3H13C15.2091 3 17 4.79086 17 7V11" stroke="currentColor" stroke-width="2" stroke-linecap="round"/>
                            <circle cx="12" cy="16" r="1.5" fill="currentColor"/>
                        </svg>
                    `;
                    iconWrapper.style.cssText = `
                        display: block !important;
                        color: #FFFFFF !important;
                        margin: 0 auto 20px auto !important;
                        padding: 0 !important;
                        line-height: 1 !important;
                        filter: drop-shadow(0 4px 16px rgba(255, 255, 255, 0.3)) !important;
                    `;

                    const noticeTitle = document.createElement("div");
                    noticeTitle.textContent = "Not Supported";
                    noticeTitle.style.cssText = `
                        display: block !important;
                        color: #FFFFFF !important;
                        font-size: 32px !important;
                        font-weight: 800 !important;
                        line-height: 1.1 !important;
                        margin: 0 0 16px 0 !important;
                        padding: 0 !important;
                        text-align: center !important;
                        letter-spacing: -0.5px !important;
                        text-shadow: 0 2px 20px rgba(138, 43, 226, 0.6) !important;
                    `;

                    const noticeText = document.createElement("div");
                    noticeText.innerHTML = "Cheats for this gamemode are still in development. Join the discord to find out when its done.";
                    noticeText.style.cssText = `
                        display: block !important;
                        color: #FFFFFF !important;
                        font-size: 15px !important;
                        margin: 0 0 30px 0 !important;
                        padding: 0 !important;
                        text-align: center !important;
                        line-height: 1.6 !important;
                        font-weight: 400 !important;
                    `;

                    const discordButton = document.createElement("a");
                    discordButton.href = "https://discord.gg/A7CRUz8vFR";
                    discordButton.target = "_blank";
                    discordButton.innerHTML = `
                        <svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
                            <path d="M20.317 4.37a19.791 19.791 0 0 0-4.885-1.515a.074.074 0 0 0-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 0 0-5.487 0a12.64 12.64 0 0 0-.617-1.25a.077.077 0 0 0-.079-.037A19.736 19.736 0 0 0 3.677 4.37a.07.07 0 0 0-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 0 0 .031.057a19.9 19.9 0 0 0 5.993 3.03a.078.078 0 0 0 .084-.028a14.09 14.09 0 0 0 1.226-1.994a.076.076 0 0 0-.041-.106a13.107 13.107 0 0 1-1.872-.892a.077.077 0 0 1-.008-.128a10.2 10.2 0 0 0 .372-.292a.074.074 0 0 1 .077-.01c3.928 1.793 8.18 1.793 12.062 0a.074.074 0 0 1 .078.01c.12.098.246.198.373.292a.077.077 0 0 1-.006.127a12.299 12.299 0 0 1-1.873.892a.077.077 0 0 0-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 0 0 .084.028a19.839 19.839 0 0 0 6.002-3.03a.077.077 0 0 0 .032-.054c.5-5.177-.838-9.674-3.549-13.66a.061.061 0 0 0-.031-.03zM8.02 15.33c-1.183 0-2.157-1.085-2.157-2.419c0-1.333.956-2.419 2.157-2.419c1.21 0 2.176 1.096 2.157 2.42c0 1.333-.956 2.418-2.157 2.418zm7.975 0c-1.183 0-2.157-1.085-2.157-2.419c0-1.333.955-2.419 2.157-2.419c1.21 0 2.176 1.096 2.157 2.42c0 1.333-.946 2.418-2.157 2.418z"/>
                        </svg>
                        <span style="margin-left: 8px;">Join Discord</span>
                    `;
                    discordButton.style.cssText = `
                        display: inline-flex !important;
                        align-items: center !important;
                        justify-content: center !important;
                        background: linear-gradient(135deg, #5865F2, #4752C4) !important;
                        color: #FFFFFF !important;
                        border: none !important;
                        font-size: 15px !important;
                        font-weight: 600 !important;
                        cursor: pointer !important;
                        padding: 14px 32px !important;
                        border-radius: 12px !important;
                        transition: all 0.3s ease !important;
                        box-shadow: 0 6px 20px rgba(88, 101, 242, 0.4) !important;
                        margin: 0 !important;
                        letter-spacing: 0.3px !important;
                        text-decoration: none !important;
                    `;

                    discordButton.addEventListener('mouseenter', function() {
                        this.style.transform = 'translateY(-3px) scale(1.02)';
                        this.style.boxShadow = '0 10px 30px rgba(88, 101, 242, 0.6)';
                    });

                    discordButton.addEventListener('mouseleave', function() {
                        this.style.transform = 'translateY(0) scale(1)';
                        this.style.boxShadow = '0 6px 20px rgba(88, 101, 242, 0.4)';
                    });

                    content.appendChild(iconWrapper);
                    content.appendChild(noticeTitle);
                    content.appendChild(noticeText);
                    content.appendChild(discordButton);

                    notice.append(content);
                    try { cheatsPage.append(notice); } catch (e) { document.body.append(notice); }
                } else {
                    path.push(cheats[mode].name, cheatsPage);
                }
            };
            gamemodesList.append(gamemode);
        }
        gamemodesPage.append(gamemodesList);

        const creditsPage = document.createElement("div");
        creditsPage.className = classes.creditsPage;




        // Create sleek Changelog Page
        const changelogPage = document.createElement("div");
        changelogPage.className = classes.favoritesPage || "favoritesPage";
        Object.assign(changelogPage.style, {
            display: "flex",
            flexDirection: "column",
            gap: "16px",
            padding: "25px 20px 50px 20px", // <-- add extra bottom padding
            overflowY: "auto"
        });


        // Add custom scrollbar style
        const styleEl = document.createElement("style");
        styleEl.textContent = `
.${classes.favoritesPage || "favoritesPage"}::-webkit-scrollbar {
  width: 8px;
}
.${classes.favoritesPage || "favoritesPage"}::-webkit-scrollbar-thumb {
  background: var(--highlight2);
  border-radius: 4px;
}
.${classes.favoritesPage || "favoritesPage"}::-webkit-scrollbar-track {
  background: transparent;
}`;
        document.head.appendChild(styleEl);

        // Title
        const title = document.createElement("div");
        title.className = "bigTextContainer";
        title.innerHTML = `<div class="bigText">📜 Changelog</div>`;
        Object.assign(title.style, {
            fontSize: "2.2em",
            fontWeight: "900",
            textAlign: "center",
            marginBottom: "15px",
            textShadow: `0 0 12px var(--highlight), 0 0 24px var(--highlight2)`
        });
        changelogPage.appendChild(title);

        // Versions array (30 versions, highest to lowest)
        const versions = [
            ["Version 6.70x", "ADDED SMOOTH GUI ANIMATIONS, FIXED CUSTOM MODULE BUGS, ALLOWED TEXT VALUES FOR STATS, FIXED CRYPTO STEALING, ADDED SPAM CRYPTO HACK, UPDATED ICONS, FIXED STORAGE SYNC, AND UPDATED CREDITS.", "null"],
            ["Version 6.69x", "ADDED CSP DETECTOR FOR CUSTOM MODULES, FIXED CUSTOM MODULES BUG, FIXED STORAGE ISSUE ADDED IMAGE FIX AND ADDED FREE PLUS!.", "null"],
            ["Version 6.68x", "ADDED SMOOTH ANIMATIONS FOR X-GUI, ADDED CUSTOM MODULES, AND NOW YOU CAN DRAG THE TOP AREA.", "null"],
            ["Version 6.67x", "ADDED SWAL ALERTS! TOGGLE, ADDED UNSUPPORTED GAMEMODE WARNINGS, AND MOVED SETTINGS MENU.", "null"],
            ["Version 6.66x", "ADDED SWAL ALERTS!", "null"],
            ["Version 6.65x", "ADDED CLIENT SIDED BLOOK EDITOR", "null"],
            ["Version 6.64x", "FIXED MOST GAMEMODES", "null"],
            ["Version 6.63x", "ADDED BLOOK EDITOR AND UPDATED MOBILE MODE", "null"],
            ["Version 6.62x", "ADDED ACCOUNT GENERATOR", "null"],
            ["Version 6.61x", "ADDED BLOOKET STREAM FINDER AND ALT MANAGER", "null"],
            ["Version 6.60x", "fixed ping display! ADDED CONSOLE MESSAGE AND ADDED PIN GUESSER!!", "null"],
            ["Version 6.50x", "FIXED KEYBINDS!! ADDED CHEATS AND ADDED 8 NEW THEMES, HAPPY HOLIDAYS GUYSS <3", "null"],
            ["Version 6.40x", "UPDATED REFRESH SVG AND ADDED CHEAT", "null"],
            ["Version 6.30x", "ADDED CHEATS AND UPDATED GUI", "null"],
            ["Version 6.20x", "ADDED MORE CHEATS+++", "https://greasyfork.org/en/scripts/553301-x-gui-client-for-blooket/versions"],
            ["Version 6.10x", "ADDED WHAT YOU ARE READING RN", "https://greasyfork.org/en/scripts/553301-x-gui-client-for-blooket/versions"],
            ["Version 6.00x", "ADDED MOBILE MODE + A BUNCH MORE CRAP", "https://greasyfork.org/en/scripts/553301-x-gui-client-for-blooket/versions"],
            ["Version 5.90x", "ROUNDED CORNERS", "https://greasyfork.org/en/scripts/553301-x-gui-client-for-blooket/versions"],
            ["Version 5.80x", "UPDATED XTRAS", "https://greasyfork.org/en/scripts/553301-x-gui-client-for-blooket/versions"],
            ["Version 5.70x", "ADDED EXTRAS TAB", "https://greasyfork.org/en/scripts/553301-x-gui-client-for-blooket/versions"],
            ["Version 5.60x", "STOP COMPLAINING (FIXED BUGS)", "https://greasyfork.org/en/scripts/553301-x-gui-client-for-blooket/versions"],
            ["Version 5.50x", "BUGS AND MORE BUGS", "https://greasyfork.org/en/scripts/553301-x-gui-client-for-blooket/versions"],
            ["Version 5.40x", "UPDATED VERSIONNAME VARIABLE", "https://greasyfork.org/en/scripts/553301-x-gui-client-for-blooket/versions"],
            ["Version 5.30x", "UPDATED BLOOKET BOT", "https://greasyfork.org/en/scripts/553301-x-gui-client-for-blooket/versions"],
            ["Version 5.20x", "ADDED REMOVE ALL TAKEN BLOOKS TO THE GLOBAL STATENODE", "https://greasyfork.org/en/scripts/553301-x-gui-client-for-blooket/versions"],
            ["Version 5.10x", "ADDED BLOOKET BOT", "https://greasyfork.org/en/scripts/553301-x-gui-client-for-blooket/versions"],
            ["Version 5.00x", "ADDED FREEZE LEADERBOARD", "https://greasyfork.org/en/scripts/553301-x-gui-client-for-blooket/versions"],
            ["Version 4.90x", "ADDED CHANGE GAME CODE TO FLAPPY BLOOK", "https://greasyfork.org/en/scripts/553301-x-gui-client-for-blooket/versions"],
            ["Version 4.80x", "ADDED CLIENT SIDE FRENZY", "https://greasyfork.org/en/scripts/553301-x-gui-client-for-blooket/versions"],
            ["Version 4.70x", "REMOVED THE . FROM THE TITLE", "https://greasyfork.org/en/scripts/553301-x-gui-client-for-blooket/versions"],
            ["Version 4.60x", "ADDED FLOOD ALERT BOX", "https://greasyfork.org/en/scripts/553301-x-gui-client-for-blooket/versions"],
            ["Version 4.50x", "FIXED SEVERAL BUGS", "https://greasyfork.org/en/scripts/553301-x-gui-client-for-blooket/versions"],
            ["Version 4.40x", "FIXED THE DOUBLE ERROR (SORRY GUYS!)", "https://greasyfork.org/en/scripts/553301-x-gui-client-for-blooket/versions"],
            ["Version 4.30x", "FIXED SPELLING ERROR", "https://greasyfork.org/en/scripts/553301-x-gui-client-for-blooket/versions"],
            ["Version 4.20x", "ADDED USERSCRIPT IMAGE!!!", "https://greasyfork.org/en/scripts/553301-x-gui-client-for-blooket/versions"],
            ["Version 4.10x", "BUGS FIXED (AGAIN)", "https://greasyfork.org/en/scripts/553301-x-gui-client-for-blooket/versions"],
            ["Version 4.00x", "BUGS FIXED", "https://greasyfork.org/en/scripts/553301-x-gui-client-for-blooket/versions"],
            ["Version 3.90x", "FIXED A SPELLING ERROR", "https://greasyfork.org/en/scripts/553301-x-gui-client-for-blooket/versions"],
            ["Version 3.80x", "BUGS", "https://greasyfork.org/en/scripts/553301-x-gui-client-for-blooket/versions"],
            ["Version 3.70x", "ATTEMPTED AN UPDATE BUT FAILED :(", "https://greasyfork.org/en/scripts/553301-x-gui-client-for-blooket/versions"],
            ["Version 3.60x", "DID SOME UI STUFF", "https://greasyfork.org/en/scripts/553301-x-gui-client-for-blooket/versions"],
            ["Version 3.50x", "FIXED A FEW BUS", "https://greasyfork.org/en/scripts/553301-x-gui-client-for-blooket/versions"],
            ["Version 3.40x", "NEW CHEATS ADDED", "https://greasyfork.org/en/scripts/553301-x-gui-client-for-blooket/versions"],
            ["Version 3.30x", "FIXED SUBDOMAIN ISSUE", "https://greasyfork.org/en/scripts/553301-x-gui-client-for-blooket/versions"],
            ["Version 3.20x", "ADDED SIMULATE UNLOCK, ALWAYS HACK, HOST ANY GAMEMODE, BYPASS FILTER, CRASH HOST, STEAL ALL PLAYERS GOLD AND BYPASS JOIN LIMIT", "https://greasyfork.org/en/scripts/553301-x-gui-client-for-blooket/versions"],
            ["Version 3.10x", "ADDED 7 NEW CHEATS", "https://greasyfork.org/en/scripts/553301-x-gui-client-for-blooket/versions"],
            ["Version 3.00x", "BUG FIXED", "https://greasyfork.org/en/scripts/553301-x-gui-client-for-blooket/versions"],
            ["Version 2.90x", "ADDED BYPASS NAME FILTER", "https://greasyfork.org/en/scripts/553301-x-gui-client-for-blooket/versions"],
            ["Version 2.80x", "ADDED 3 NEW CHEATS TO CRYPTO AND GOLD QUEST", "https://greasyfork.org/en/scripts/553301-x-gui-client-for-blooket/versions"],
            ["Version 2.70x", "ADDED WELCOME MESSAGE", "https://greasyfork.org/en/scripts/553301-x-gui-client-for-blooket/versions"],
            ["Version 2.60x", "ADDED GLOW EFFECT TO TITLE", "https://greasyfork.org/en/scripts/553301-x-gui-client-for-blooket/versions"],
            ["Version 2.50x", "REVAMPED COLORS AND UI", "https://greasyfork.org/en/scripts/553301-x-gui-client-for-blooket/versions"],
            ["Version 2.40x", "STARTED WITH NEW COLOR SCHEME", "https://greasyfork.org/en/scripts/553301-x-gui-client-for-blooket/versions"],
            ["Version 2.30x", "FIXED USE ANY BLOOK", "https://greasyfork.org/en/scripts/553301-x-gui-client-for-blooket/versions"],
            ["Version 2.20x", "BUG FIXED", "https://greasyfork.org/en/scripts/553301-x-gui-client-for-blooket/versions"],
            ["Version 2.10x", "STARTED NEW MENU", "https://greasyfork.org/en/scripts/553301-x-gui-client-for-blooket/versions"]
        ];



        // Add each version as a sleek card
        versions.forEach(([ver, desc, link]) => {
            const card = document.createElement("div");
            Object.assign(card.style, {
                display: "flex",
                flexDirection: "column",
                gap: "6px",
                padding: "16px 20px",
                borderRadius: "14px",
                background: "var(--background2)",
                boxShadow: "0 5px 20px rgba(0,0,0,0.28)",
                transition: "transform 0.2s ease, box-shadow 0.2s ease",
                cursor: "default"
            });
            card.onmouseover = () => {
                card.style.transform = "translateY(-4px)";
                card.style.boxShadow = "0 10px 30px rgba(0,0,0,0.35)";
            };
            card.onmouseleave = () => {
                card.style.transform = "translateY(0)";
                card.style.boxShadow = "0 5px 20px rgba(0,0,0,0.28)";
            };

            const verTitle = document.createElement("span");
            verTitle.style.fontWeight = "700";
            verTitle.style.fontSize = "1.2em";
            verTitle.style.color = "var(--highlight)";
            verTitle.innerText = ver;

            const verDesc = document.createElement("span");
            verDesc.style.fontSize = "0.95em";
            verDesc.style.color = "var(--textColor2)";
            verDesc.innerText = desc;


            card.append(verTitle, verDesc);
            changelogPage.appendChild(card);
        });

        // Append to GUI content
        guiContent.appendChild(changelogPage);

        // ================= ALT MANAGER PAGE =================
        const altPage = document.createElement("div");
        altPage.className = classes.favoritesPage || "favoritesPage";

        Object.assign(altPage.style, {
            display: "flex",
            flexDirection: "column",
            gap: "16px",
            padding: "25px 20px 50px 20px",
            overflowY: "auto"
        });

        // ===== Styles =====
        const altStyle = document.createElement("style");
        altStyle.textContent = `
.${classes.favoritesPage || "favoritesPage"}::-webkit-scrollbar {
  width: 8px;
}
.${classes.favoritesPage || "favoritesPage"}::-webkit-scrollbar-thumb {
  background: var(--highlight2);
  border-radius: 4px;
}
.${classes.favoritesPage || "favoritesPage"}::-webkit-scrollbar-track {
  background: transparent;
}
.altInput {
  background: rgba(255,255,255,0.06);
  border: 1px solid rgba(255,255,255,0.15);
  border-radius: 12px;
  padding: 10px 12px;
  color: var(--textColor);
  font-size: .95em;
  outline: none;
  transition: border .2s ease, box-shadow .2s ease, background .2s ease;
}
.altInput::placeholder { color: rgba(255,255,255,.45); }
.altInput:focus {
  border-color: var(--highlight);
  background: rgba(255,255,255,0.08);
  box-shadow: 0 0 0 2px rgb(from var(--highlight) r g b / 35%);
}
.altBtn {
  padding: 10px;
  border-radius: 14px;
  font-weight: 800;
  cursor: pointer;
  border: none;
  color: #000;
  background: linear-gradient(135deg, var(--highlight), var(--highlight2));
  box-shadow: 0 6px 20px rgb(from var(--highlight) r g b / 45%);
  transition: transform .15s ease, box-shadow .15s ease, filter .15s ease;
}
.altBtn:hover {
  transform: translateY(-2px);
  filter: brightness(1.1);
  box-shadow: 0 10px 30px rgb(from var(--highlight) r g b / 55%);
}
.altBtn:active {
  transform: translateY(0);
  box-shadow: 0 4px 14px rgb(from var(--highlight) r g b / 35%);
}
.altSmallBtn { padding: 6px 10px; border-radius: 10px; font-weight: 700; font-size: .8em; }
`;
        document.head.appendChild(altStyle);

        // ===== Title =====
        const altTitle = document.createElement("div");
        altTitle.className = "bigTextContainer";
        altTitle.innerHTML = `<div class="bigText">👥 Alt Manager</div>`;
        Object.assign(altTitle.style, {
            fontSize: "2.2em",
            fontWeight: "900",
            textAlign: "center",
            marginBottom: "10px",
            textShadow: `0 0 12px var(--highlight), 0 0 24px var(--highlight2)`
        });
        altPage.appendChild(altTitle);

        // ===== Add Alt Card =====
        const addAltCard = document.createElement("div");
        Object.assign(addAltCard.style, {
            display: "flex",
            flexDirection: "column",
            gap: "10px",
            padding: "16px 20px",
            borderRadius: "14px",
            background: "var(--background2)",
            boxShadow: "0 5px 20px rgba(0,0,0,0.28)"
        });
        addAltCard.innerHTML = `
  <span style="font-weight:800;color:var(--highlight)">Add Alt</span>
  <input id="altUser" class="altInput" placeholder="Username">
  <div style="display:flex;gap:8px;align-items:center">
    <input id="altPass" class="altInput" type="password" placeholder="Password" style="flex:1">
    <button id="toggleAddPass" class="altBtn altSmallBtn">👁</button>
  </div>
  <button id="saveAltBtn" class="altBtn">➕ Save Alt</button>
`;
        altPage.appendChild(addAltCard);

        // ===== Alt List =====
        const altList = document.createElement("div");
        Object.assign(altList.style, {
            display: "flex",
            flexDirection: "column",
            gap: "12px"
        });
        altPage.appendChild(altList);

        // ===== Cookie Storage Helpers =====
        function setCookie(name, value, days = 365) {
            const expires = new Date(Date.now() + days * 864e5).toUTCString();
            const domain = location.hostname.split('.').slice(-2).join('.'); // save on root domain
            document.cookie = `${name}=${encodeURIComponent(value)}; expires=${expires}; path=/; domain=.blooket.com; SameSite=Lax`;
        }

        function getCookie(name) {
            const match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));
            return match ? decodeURIComponent(match[2]) : null;
        }

        function areSweetAlertsEnabled() {
            const cookieValue = getCookie("sweetAlertsEnabled");
            return cookieValue === null ? true : cookieValue === "true";
        }

        // ===== Storage =====
        const ALT_KEY = "xgui_alts";
        const getAlts = () => {
            const cookie = getCookie(ALT_KEY);
            return cookie ? JSON.parse(cookie) : [];
        };
        const setAlts = (alts) => setCookie(ALT_KEY, JSON.stringify(alts));

        // ===== Render =====
        function renderAlts() {
            altList.innerHTML = "";
            const alts = getAlts();
            if (!alts.length) {
                const empty = document.createElement("div");
                empty.style.opacity = ".6";
                empty.innerText = "No alts saved";
                altList.appendChild(empty);
                return;
            }
            alts.forEach((alt, index) => {
                let visible = false;
                const card = document.createElement("div");
                Object.assign(card.style, {
                    display: "flex",
                    flexDirection: "column",
                    gap: "8px",
                    padding: "16px 20px",
                    borderRadius: "14px",
                    background: "var(--background2)",
                    boxShadow: "0 5px 20px rgba(0,0,0,0.28)",
                    transition: "transform .2s ease, box-shadow .2s ease"
                });
                card.onmouseover = () => {
                    card.style.transform = "translateY(-4px)";
                    card.style.boxShadow = "0 10px 30px rgba(0,0,0,0.35)";
                };
                card.onmouseleave = () => {
                    card.style.transform = "translateY(0)";
                    card.style.boxShadow = "0 5px 20px rgba(0,0,0,0.28)";
                };

                const passSpan = document.createElement("span");
                passSpan.style.opacity = ".6";
                passSpan.innerText = "••••••••";

                const viewBtn = document.createElement("button");
                viewBtn.className = "altBtn altSmallBtn";
                viewBtn.innerText = "👁 View";
                viewBtn.onclick = () => {
                    visible = !visible;
                    passSpan.innerText = visible ? alt.pass : "••••••••";
                    viewBtn.innerText = visible ? "🙈 Hide" : "👁 View";
                };

                const removeBtn = document.createElement("button");
                removeBtn.className = "altBtn altSmallBtn";
                removeBtn.innerText = "Remove";
                removeBtn.onclick = () => {
                    const all = getAlts();
                    all.splice(index, 1);
                    setAlts(all);
                    renderAlts();
                };

                card.append(
                    Object.assign(document.createElement("span"), {
                        innerText: alt.user,
                        style: "font-weight:800;color:var(--highlight)"
                    }),
                    passSpan,
                    viewBtn,
                    removeBtn
                );

                altList.appendChild(card);
            });
        }

        // ===== Add Alt Logic =====
        const addPassInput = addAltCard.querySelector("#altPass");
        addAltCard.querySelector("#toggleAddPass").onclick = () => {
            addPassInput.type = addPassInput.type === "password" ? "text" : "password";
        };
        addAltCard.querySelector("#saveAltBtn").onclick = () => {
            const user = addAltCard.querySelector("#altUser").value.trim();
            const pass = addPassInput.value.trim();
            if (!user || !pass) return;

            const alts = getAlts();
            alts.push({
                user,
                pass
            });
            setAlts(alts);

            addAltCard.querySelector("#altUser").value = "";
            addPassInput.value = "";
            addPassInput.type = "password";

            renderAlts();
        };

        // Refresh on open
        altPage.onPath = renderAlts;




        const blookPage = document.createElement("div");
        blookPage.className = classes.favoritesPage || "favoritesPage";

        Object.assign(blookPage.style, {
            display: "flex",
            flexDirection: "column",
            gap: "18px",
            padding: "25px 20px 50px 20px",
            overflowY: "auto"
        });

        const Blookstyle = document.createElement("style");
        Blookstyle.textContent = `
.blookPage::-webkit-scrollbar { width: 6px; }
.blookPage::-webkit-scrollbar-thumb { background: #5b4bdb; border-radius: 4px; }

.editorContainer {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 16px;
  padding: 18px;
  border-radius: 18px;
  background: rgba(18,22,46,0.85);
}

.blookInput {
  width: 70px;
  padding: 8px;
  border-radius: 12px;
  border: 1px solid rgba(120,100,255,0.25);
  background: rgba(20,25,55,0.65);
  color: #fff;
  text-align: center;
}

.previewBox {
  width: 220px;
  height: 220px;
  margin: 0 auto;
  background: rgba(10,12,30,0.7);
  border-radius: 20px;
  border: 1px solid rgba(120,100,255,0.35);
  display: flex;
  align-items: center;
  justify-content: center;
}

.previewStack {
  position: relative;
  width: 180px;
  height: 180px;
}

.previewStack img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  pointer-events: none;
}

.finalConfigInput {
  width: 92%;
  margin: 0 auto;
  padding: 12px;
  border-radius: 14px;
  background: rgba(20,25,55,0.75);
  border: 1px solid rgba(120,100,255,0.25);
  color: #fff;
  font-weight: 700;
  text-align: center;
}

.blookBtn {
  margin: 14px auto 0;
  padding: 12px 26px;
  border-radius: 14px;
  border: none;
  cursor: pointer;
  font-weight: 900;
  color: #fff;
  background: linear-gradient(135deg, #8f6bff, #5b4bdb);
}
`;
        document.head.appendChild(Blookstyle);

        blookPage.innerHTML += `
<div style="text-align:center">
  <div style="font-size:2em;font-weight:900;color:#fff">🖌️ Blook Editor</div>
</div>
`;

        const editorContainer = document.createElement("div");
        editorContainer.className = "editorContainer";
        blookPage.appendChild(editorContainer);

        function createInput(label) {
            const wrap = document.createElement("div");
            wrap.style.display = "flex";
            wrap.style.flexDirection = "column";
            wrap.style.alignItems = "center";
            wrap.style.gap = "6px";

            const l = document.createElement("label");
            l.textContent = label;
            l.style.color = "#fff";
            l.style.fontWeight = "600";

            const i = document.createElement("input");
            i.type = "number";
            i.min = 0;
            i.value = 0;
            i.className = "blookInput";

            wrap.append(l, i);
            editorContainer.appendChild(wrap);
            return i;
        }

        const parts = {
            base: createInput("Base"),
            clothing: createInput("Clothing"),
            eyes: createInput("Eyes"),
            glasses: createInput("Glasses"),
            hair: createInput("Hair"),
            hairColor: createInput("Hair Color"),
            hat: createInput("Hat"),
            item: createInput("Item"),
            mouth: createInput("Mouth"),
            nose: createInput("Nose"),
            cheeks: createInput("Cheeks"),
            eyebrows: createInput("Eyebrows"),
            eyebrowsColor: createInput("Eyebrows Color")
        };

        const previewBox = document.createElement("div");
        previewBox.className = "previewBox";

        const previewStack = document.createElement("div");
        previewStack.className = "previewStack";

        previewBox.appendChild(previewStack);
        blookPage.appendChild(previewBox);

        const GITHUB_BASE =
            "https://raw.githubusercontent.com/0alter0/blook-parts/241bda5908c9355caef55ac994b1c2ec21124eb7";

        const PART_FOLDER_MAP = {
            base: "base",
            clothing: "clothing",
            eyes: "eyes",
            glasses: "glasses",
            hair: "hair",
            hat: "hats",
            item: "items",
            mouth: "mouths",
            nose: "nose",
            cheeks: "cheeks",
            eyebrows: "eyebrows"
        };

        const RENDER_ORDER = [
            "base",
            "clothing",
            "cheeks",
            "nose",
            "eyes",
            "eyebrows",
            "mouth",
            "glasses",
            "hair",
            "hat",
            "item"
        ];

        function renderStack() {
            previewStack.innerHTML = "";

            RENDER_ORDER.forEach(part => {
                const input = parts[part];
                if (!input) return;

                const id = Number(input.value);
                const folder = PART_FOLDER_MAP[part];
                if (!folder) return;

                if (part === "base") {
                    if (id < 0) return;
                } else {
                    if (id <= 0) return;
                }

                const img = document.createElement("img");
                img.src = `${GITHUB_BASE}/${folder}/item${id}.svg`;
                img.onerror = () => img.remove();

                previewStack.appendChild(img);
            });
        }

        const finalConfig = document.createElement("input");
        finalConfig.className = "finalConfigInput";
        blookPage.appendChild(finalConfig);

        function updateConfig() {
            const v = Object.values(parts).map(i => i.value || 0);
            finalConfig.value =
                `${v[0]}#${v[1]}#${v[2]}#${v[3]}#${v[4]}` +
                `$${v[5]}#${v[6]}#${v[7]}#${v[8]}#${v[9]}` +
                `#${v[10]}#${v[11]}$${v[12]}`;
        }

        Object.values(parts).forEach(i => {
            i.addEventListener("input", () => {
                updateConfig();
                renderStack();
            });
        });

        updateConfig();
        renderStack();

        const setBtn = document.createElement("button");
        setBtn.className = "blookBtn";
        setBtn.textContent = "Set Blook";
        blookPage.appendChild(setBtn);

        setBtn.onclick = () => {
            const blook = finalConfig.value;
            let t = Object.values(function e(t = document.querySelector("body>div")) {
                return Object.values(t)[1]?.children?.[0]?._owner?.stateNode ?
                    t :
                    e(t.querySelector(":scope>div"));
            }())[1].children[0]._owner.stateNode;

            if (!t.state.unlocks) t.props.client.blook = blook;
            t.props.liveGameController.setVal({
                path: `c/${t.props.client.name}/b`,
                val: blook
            });
        };
        //Written by Lil Skittle

        // ================= CLIENT PAGE =================
        const clientPage = document.createElement("div");
        clientPage.className = classes.favoritesPage || "favoritesPage";

        Object.assign(clientPage.style, {
            display: "flex",
            flexDirection: "column",
            justifyContent: "center",
            alignItems: "center",
            gap: "30px",
            padding: "40px 20px",
            overflowY: "auto"
        });

        // ===== STYLE =====
        const clientStyle = document.createElement("style");
        clientStyle.textContent = `
.clientCard {
  background: var(--background2);
  border-radius: 22px;
  padding: 36px 34px;
  box-shadow: 0 12px 40px rgba(0,0,0,.35);
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 24px;
}

.clientLaunchBtn {
  padding: 18px 46px;
  border-radius: 18px;
  font-size: 1.15em;
  font-weight: 900;
  cursor: pointer;
  border: none;
  color: #fff;
  background: linear-gradient(135deg,#8f6bff,#5b4bdb);
  box-shadow: 0 10px 30px rgba(120,100,255,.45);
  transition: transform .18s ease, box-shadow .18s ease, filter .18s ease;
}

.clientLaunchBtn:hover {
  transform: translateY(-4px);
  filter: brightness(1.12);
  box-shadow: 0 18px 45px rgba(120,100,255,.6);
}

.clientLaunchBtn:active {
  transform: translateY(-1px);
  box-shadow: 0 8px 20px rgba(120,100,255,.4);
}
`;
        document.head.appendChild(clientStyle);

        // ===== TITLE =====
        const clienttitle = document.createElement("div");
        clienttitle.innerHTML = `
  <div style="
    font-size:2.4em;
    font-weight:900;
    text-align:center;
    color:#fff;
    text-shadow:0 0 14px var(--highlight),0 0 28px var(--highlight2);
  ">🧩 Client Sided Blook Menu</div>
  <div style="opacity:.65;font-weight:600;text-align:center;margin-top:6px">
    Customize your Blook to your style!
  </div>
`;

        // ===== CARD =====
        const card = document.createElement("div");
        card.className = "clientCard";

        // ===== LAUNCH BUTTON =====
        const launchBtn = document.createElement("button");
        launchBtn.className = "clientLaunchBtn";
        launchBtn.textContent = "Open Blook Customizer";

        launchBtn.onclick = () => {
            if (document.getElementById("xgui-blook-customizer")) return;

            // ===== DRAGGABLE CUSTOMIZER GUI =====
            const gui = document.createElement("div");
            gui.id = "xgui-blook-customizer";

            Object.assign(gui.style, {
                position: "fixed",
                top: "120px",
                left: "120px",
                zIndex: "99999",
                width: "250px",
                padding: "12px",
                background: "linear-gradient(180deg,#140f1f,#0b0812)",
                color: "#eee",
                borderRadius: "14px",
                border: "1px solid #2a1f3d",
                fontFamily: "Inter, system-ui, sans-serif",
                display: "flex",
                flexDirection: "column",
                gap: "10px",
                boxShadow: "0 12px 40px rgba(120,80,255,.25)",
                userSelect: "none"
            });

            // ===== HEADER =====
            const header = document.createElement("div");
            Object.assign(header.style, {
                display: "flex",
                justifyContent: "space-between",
                alignItems: "center",
                height: "28px",
                padding: "0 4px",
                fontWeight: "700",
                fontSize: "13px",
                color: "#cdbbff",
                cursor: "grab"
            });
            header.textContent = "Blook Customizer";

            const close = document.createElement("button");
            close.textContent = "✕";
            Object.assign(close.style, {
                background: "none",
                border: "none",
                color: "#7f6ab8",
                fontSize: "16px",
                cursor: "pointer"
            });
            close.onclick = () => gui.remove();

            header.appendChild(close);
            gui.appendChild(header);

            // ===== DRAG =====
            let drag = false,
                dx = 0,
                dy = 0;
            header.onmousedown = e => {
                drag = true;
                dx = e.clientX - gui.offsetLeft;
                dy = e.clientY - gui.offsetTop;
                header.style.cursor = "grabbing";
            };
            document.onmousemove = e => {
                if (!drag) return;
                gui.style.left = e.clientX - dx + "px";
                gui.style.top = e.clientY - dy + "px";
            };
            document.onmouseup = () => {
                drag = false;
                header.style.cursor = "grab";
            };

            // ===== STACK =====
            const stack = () => {
                const d = document.createElement("div");
                Object.assign(d.style, {
                    display: "flex",
                    flexDirection: "column",
                    gap: "6px"
                });
                return d;
            };

            // ===== INPUT =====
            const input = ph => {
                const i = document.createElement("input");
                i.placeholder = ph;
                Object.assign(i.style, {
                    width: "100%",
                    height: "36px",
                    padding: "0 12px",
                    background: "#0f0b18",
                    color: "#eee",
                    border: "1px solid #2e2450",
                    borderRadius: "10px",
                    fontSize: "12.5px",
                    boxSizing: "border-box",
                    outline: "none"
                });
                i.onfocus = () => i.style.borderColor = "#8b5cf6";
                i.onblur = () => i.style.borderColor = "#2e2450";
                return i;
            };

            // ===== BUTTON =====
            const btn = (t, bg) => {
                const b = document.createElement("button");
                b.textContent = t;
                Object.assign(b.style, {
                    height: "38px",
                    borderRadius: "10px",
                    border: "none",
                    cursor: "pointer",
                    fontWeight: "700",
                    color: "#fff",
                    background: bg
                });
                b.onmouseenter = () => b.style.filter = "brightness(1.12)";
                b.onmouseleave = () => b.style.filter = "none";
                return b;
            };

            const custom = stack();
            const imgIn = input("Blook Image URL");
            const bgIn = input("Background URL");
            const nameIn = input("Blook Name");
            const rareIn = input("Rarity Name");
            const colIn = input("Rarity Color");
            custom.append(imgIn, bgIn, nameIn, rareIn, colIn);

            const apply = btn("Apply Custom", "linear-gradient(135deg,#7c3aed,#5b21b6)");

            const seedStack = stack();
            const seedIn = input("Seed");
            const load = btn("Load Seed", "linear-gradient(135deg,#22c55e,#16a34a)");
            const get = btn("Get Seed", "#1a1626");
            seedStack.append(seedIn, load, get);

            gui.append(custom, apply, seedStack);
            document.body.appendChild(gui);

            // ===== LOGIC (UNCHANGED) =====
            const updateBlook = (img, bg, name, rare, col) => {
                const b = document.querySelector('img[class*="blook"]');
                const g = document.querySelector('img[class*="_rightBackground"]');
                const n = document.querySelector('div[style*="white-space: nowrap"]');
                const r = document.querySelector('div[class*="Rarity"]');

                if (b && img) b.src = img;
                if (g && bg) g.src = bg;
                if (r) {
                    if (rare) r.textContent = rare;
                    if (col) r.style.color = col;
                }
                if (n && name) {
                    n.textContent = name;
                    let s = 39;
                    n.style.fontSize = s + "px";
                    while (n.scrollWidth > n.parentElement.clientWidth && s > 1) {
                        n.style.fontSize = --s + "px";
                    }
                }
            };

            apply.onclick = () =>
                updateBlook(imgIn.value, bgIn.value, nameIn.value, rareIn.value, colIn.value);

            get.onclick = () => {
                const b = document.querySelector('img[class*="blook"]');
                const g = document.querySelector('img[class*="_rightBackground"]');
                const n = document.querySelector('div[style*="white-space: nowrap"]');
                const r = document.querySelector('div[class*="Rarity"]');
                seedIn.value = btoa(unescape(encodeURIComponent(JSON.stringify({
                    img: b?.src,
                    bg: g?.src,
                    name: n?.textContent,
                    rare: r?.textContent,
                    col: r?.style.color
                }))));
            };

            load.onclick = () => {
                try {
                    const d = JSON.parse(decodeURIComponent(escape(atob(seedIn.value))));
                    updateBlook(d.img, d.bg, d.name, d.rare, d.col);
                } catch {
                    alert("Invalid Seed");
                }
            };
        };

        // ===== BUILD =====
        card.append(launchBtn);
        clientPage.append(clienttitle, card);

// ================= CUSTOM MODULES PAGE =================
const modulePage = document.createElement("div");
modulePage.className = classes.favoritesPage || "favoritesPage";

// JavaScript minification function
function minifyJS(code) {
    try {
        return code
            // Remove single-line comments
            .replace(/\/\/.*$/gm, '')
            // Remove multi-line comments
            .replace(/\/\*[\s\S]*?\*\//g, '')
            // Remove extra whitespace
            .replace(/\s+/g, ' ')
            // Remove whitespace around operators and punctuation
            .replace(/\s*([{}();,:<>!=+\-*/%&|?])\s*/g, '$1')
            // Remove whitespace after keywords
            .replace(/\b(return|var|let|const|if|else|for|while|function|class)\s+/g, '$1 ')
            .trim();
    } catch (e) {
        console.error('Minification error:', e);
        return code; // Return original code if minification fails
    }
}

Object.assign(modulePage.style, {
    display: "flex",
    flexDirection: "column",
    alignItems: "center",
    gap: "28px",
    padding: "40px 20px",
    overflowY: "auto",
    minHeight: "100vh"
});

const moduleStyle = document.createElement("style");
moduleStyle.textContent = `
.moduleCard {
    background: linear-gradient(135deg, rgba(30, 25, 50, 0.8), rgba(20, 18, 35, 0.9));
    border-radius: 18px;
    padding: 36px;
    box-shadow: 0 8px 24px rgba(0,0,0,.25);
    border: 1px solid rgba(143,107,255,.15);
    display: flex;
    flex-direction: column;
    gap: 20px;
    width: 100%;
    max-width: 650px;
}

.moduleBtn {
    padding: 15px 36px;
    border-radius: 10px;
    font-size: 1.05em;
    font-weight: 700;
    cursor: pointer;
    border: none;
    color: #fff;
    background: linear-gradient(135deg, #6366f1, #4f46e5);
    box-shadow: 0 4px 12px rgba(99,102,241,.3);
    transition: all .2s ease;
    width: 100%;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 10px;
}

.moduleBtn:hover {
    background: linear-gradient(135deg, #4f46e5, #4338ca);
    transform: translateY(-2px);
    box-shadow: 0 6px 16px rgba(99,102,241,.4);
}

.moduleBtn:active {
    transform: translateY(0);
}

.moduleSecondaryBtn {
    background: linear-gradient(135deg, #374151, #1f2937);
    border: 1px solid rgba(255,255,255,.1);
    box-shadow: 0 4px 12px rgba(0,0,0,.2);
}

.moduleSecondaryBtn:hover {
    background: linear-gradient(135deg, #4b5563, #374151);
    border-color: rgba(255,255,255,.15);
}

.moduleDangerBtn {
    background: linear-gradient(135deg, #ef4444, #dc2626);
    box-shadow: 0 4px 12px rgba(239,68,68,.3);
}

.moduleDangerBtn:hover {
    background: linear-gradient(135deg, #dc2626, #b91c1c);
    box-shadow: 0 6px 16px rgba(239,68,68,.4);
}

.buttonGrid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
    gap: 14px;
    width: 100%;
}

.buttonGrid.centered {
    justify-content: center;
    grid-template-columns: repeat(auto-fit, minmax(200px, 250px));
}

.clearAllContainer {
    display: flex;
    justify-content: center;
    width: 100%;
    margin-top: 4px;
}

.clearAllBtn {
    max-width: 300px;
}

.moduleManageBtn {
    background: linear-gradient(135deg, #8b5cf6, #7c3aed);
    box-shadow: 0 4px 12px rgba(139,92,246,.3);
}

.moduleManageBtn:hover {
    background: linear-gradient(135deg, #7c3aed, #6d28d9);
    box-shadow: 0 6px 16px rgba(139,92,246,.4);
}

.swal2-popup {
    background: #1a1625 !important;
    border: 1px solid rgba(143,107,255,.2) !important;
}

.swal2-title {
    color: #fff !important;
}

.swal2-html-container {
    color: rgba(255,255,255,.85) !important;
}

.swal2-container .moduleItemCard {
    background: linear-gradient(135deg, rgba(40, 35, 60, 0.6), rgba(30, 25, 50, 0.8));
    border: 1px solid rgba(143,107,255,.2);
    border-radius: 14px;
    padding: 22px;
    margin-bottom: 14px;
    transition: all .2s ease;
    text-align: left;
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: 16px;
}

.swal2-container .moduleItemCard:hover {
    border-color: rgba(143,107,255,.4);
    background: linear-gradient(135deg, rgba(50, 45, 70, 0.7), rgba(40, 35, 60, 0.9));
    transform: translateY(-3px);
    box-shadow: 0 6px 18px rgba(0,0,0,.3);
}

.swal2-container .moduleItemInfo {
    flex: 1;
}

.swal2-container .moduleItemActions {
    display: flex;
    gap: 10px;
    flex-shrink: 0;
}

.swal2-container .moduleActionBtn {
    width: 38px;
    height: 38px;
    border-radius: 10px;
    border: none;
    cursor: pointer;
    display: flex;
    align-items: center;
    justify-content: center;
    transition: all .2s ease;
}

.swal2-container .moduleEditBtn {
    background: linear-gradient(135deg, #6366f1, #4f46e5);
    box-shadow: 0 2px 8px rgba(99,102,241,.3);
}

.swal2-container .moduleEditBtn:hover {
    background: linear-gradient(135deg, #4f46e5, #4338ca);
    transform: translateY(-2px);
    box-shadow: 0 4px 12px rgba(99,102,241,.4);
}

.swal2-container .moduleDeleteBtn {
    background: linear-gradient(135deg, #ef4444, #dc2626);
    box-shadow: 0 2px 8px rgba(239,68,68,.3);
}

.swal2-container .moduleDeleteBtn:hover {
    background: linear-gradient(135deg, #dc2626, #b91c1c);
    transform: translateY(-2px);
    box-shadow: 0 4px 12px rgba(239,68,68,.4);
}

.swal2-container .moduleItemTitle {
    font-size: 1.15em;
    font-weight: 700;
    color: #fff;
    margin-bottom: 8px;
}

.swal2-container .moduleItemDesc {
    color: rgba(255,255,255,.65);
    font-size: 0.92em;
    line-height: 1.5;
    margin-bottom: 10px;
}

.swal2-container .moduleItemType {
    display: inline-block;
    padding: 5px 12px;
    background: rgba(99,102,241,.2);
    border: 1px solid rgba(99,102,241,.35);
    border-radius: 14px;
    font-size: 0.78em;
    font-weight: 700;
    color: #a5b4fc;
    text-transform: uppercase;
    letter-spacing: 0.5px;
}

.swal2-confirm, .swal2-deny, .swal2-cancel {
    font-weight: 600 !important;
    padding: 10px 24px !important;
    border-radius: 8px !important;
}

.swal2-select {
    color: #000 !important;
    background: #fff !important;
}

.helpBtn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 28px;
    height: 28px;
    border-radius: 50%;
    background: rgba(99,102,241,.15);
    border: 1.5px solid rgba(99,102,241,.3);
    color: #a5b4fc;
    font-size: 1em;
    font-weight: 700;
    cursor: pointer;
    transition: all .2s ease;
    margin-left: 10px;
    vertical-align: middle;
}

.helpBtn:hover {
    background: rgba(99,102,241,.25);
    border-color: rgba(99,102,241,.5);
    transform: scale(1.1);
}

.docContainer {
    max-height: 500px;
    overflow-y: auto;
    text-align: left;
    padding: 20px;
    background: rgba(20, 18, 35, 0.4);
    border-radius: 12px;
    margin-bottom: 20px;
}

.docSection {
    margin-bottom: 24px;
}

.docTitle {
    font-size: 1.3em;
    font-weight: 700;
    color: #fff;
    margin-bottom: 12px;
    display: flex;
    align-items: center;
    gap: 8px;
}

.docSubtitle {
    font-size: 1.1em;
    font-weight: 600;
    color: #a5b4fc;
    margin-bottom: 8px;
    margin-top: 16px;
}

.docText {
    color: rgba(255,255,255,.75);
    line-height: 1.6;
    margin-bottom: 12px;
}

.docCode {
    background: rgba(0,0,0,.3);
    border: 1px solid rgba(99,102,241,.2);
    border-radius: 8px;
    padding: 12px;
    font-family: monospace;
    font-size: 0.9em;
    color: #e0e7ff;
    overflow-x: auto;
    margin: 8px 0;
}

.docHighlight {
    color: #a5b4fc;
    font-weight: 600;
}

.docList {
    margin-left: 20px;
    color: rgba(255,255,255,.75);
    line-height: 1.8;
}
`;
document.head.appendChild(moduleStyle);

const modTitle = document.createElement("div");
modTitle.innerHTML = `
    <div style="
        font-size:2.5em;
        font-weight:800;
        text-align:center;
        color:#fff;
        margin-bottom: 10px;
        text-shadow: 0 2px 8px rgba(143,107,255,.3);
    ">Custom Module Manager</div>
    <div style="
        opacity:.7;
        font-weight:600;
        text-align:center;
        font-size:1.05em;
        color:rgba(255,255,255,.85);
    ">
        Create and manage your custom modules.<br>
        Refresh to update custom modules.
    </div>
`;

const buttonGrid = document.createElement("div");
buttonGrid.className = "buttonGrid";

// Count modules to determine if we should center
// If you find a more optomized way please tell me
const updateButtonGrid = () => {
    const moduleCount = (CookieHelper.getCookie('custom_modules_list') || []).length;
    const buttonCount = moduleCount > 0 ? 3 : 3;
    if (buttonCount <= 3) {
        buttonGrid.classList.add('centered');
    } else {
        buttonGrid.classList.remove('centered');
    }
};

const createBtn = document.createElement("button");
createBtn.className = "moduleBtn";
createBtn.innerHTML = `
    <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5">
        <line x1="12" y1="5" x2="12" y2="19"></line>
        <line x1="5" y1="12" x2="19" y2="12"></line>
    </svg>
    Create Module
`;
createBtn.onclick = async () => {
    const { value: formValues, isDismissed } = await Sweetalert2.fire({
        title: '<span>Create New Module</span><button class="helpBtn" id="help-btn" type="button">?</button>',
        html:
            '<input id="swal-name" class="swal2-input" placeholder="Module Name" style="margin-bottom: 10px;">' +
            '<textarea id="swal-desc" class="swal2-textarea" placeholder="Description (optional)" style="height: 80px; margin-bottom: 10px;"></textarea>' +
            '<select id="swal-type" class="swal2-select" style="background: #1a1625 !important; border: 1px solid #fff !important; color: rgba(255,255,255,.75) !important; padding: 10px 15px; border-radius: 8px; line-height: 1.6;"><option value="execute" style="background: #1a1625; color: #e0e7ff;">Execute Button</option><option value="toggle" style="background: #1a1625; color: #e0e7ff;">Toggle</option><option value="edit" style="background: #1a1625; color: #e0e7ff; margin-bottom: 10px;">Value Edit</option></select>' +
            '<textarea id="swal-code" class="swal2-textarea" placeholder="JavaScript Code" style="height: 150px; font-family: monospace;"></textarea>',
        focusConfirm: false,
        width: '600px',
        didOpen: () => {
            const helpBtn = document.getElementById('help-btn');
            if (helpBtn) {
                helpBtn.addEventListener('click', (e) => {
                    e.preventDefault();
                    e.stopPropagation();
                    Sweetalert2.close();
                    showDocumentation();
                });
            }
        },
        preConfirm: () => {
            const name = document.getElementById('swal-name').value;
            const code = document.getElementById('swal-code').value;
            if (!name || !code) {
                Sweetalert2.showValidationMessage('Name and code are required');
                return false;
            }
            return {
                name: name,
                description: document.getElementById('swal-desc').value,
                type: document.getElementById('swal-type').value,
                code: minifyJS(code) 
            };
        }
    });
    if (formValues) {
        const saved = CookieHelper.getCookie('custom_modules_list') || [];
        saved.push(formValues);
        CookieHelper.setCookie('custom_modules_list', saved);
        updateButtonGrid();
        refreshClearButton();

        refreshCustomModulesUI();

        Sweetalert2.fire('Success', 'Module created successfully', 'success');
    }
};

const manageBtn = document.createElement("button");
manageBtn.className = "moduleBtn moduleManageBtn";
manageBtn.innerHTML = `
    <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5">
        <path d="M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"></path>
        <path d="M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z"></path>
    </svg>
    Manage Modules
`;
manageBtn.onclick = () => {
    showModuleManager();
};

const importBtn = document.createElement("button");
importBtn.className = "moduleBtn moduleSecondaryBtn";
importBtn.innerHTML = `
    <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5">
        <path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path>
        <polyline points="7 10 12 15 17 10"></polyline>
        <line x1="12" y1="15" x2="12" y2="3"></line>
    </svg>
    Import
`;
importBtn.onclick = async () => {
    const { value: code } = await Sweetalert2.fire({
        title: 'Import Module(s)',
        input: 'textarea',
        inputPlaceholder: 'Paste your module JSON here...',
        width: '600px',
        inputAttributes: {
            style: 'font-family: monospace; height: 200px;'
        }
    });
    if (code) {
        try {
            const parsed = JSON.parse(code);
            const saved = CookieHelper.getCookie('custom_modules_list') || [];
            if (Array.isArray(parsed)) saved.push(...parsed);
            else saved.push(parsed);
            CookieHelper.setCookie('custom_modules_list', saved);
            updateButtonGrid();
            refreshClearButton();
            Sweetalert2.fire('Success', 'Module(s) imported successfully', 'success');
            refreshCustomModulesUI();
        } catch (e) {
            Sweetalert2.fire('Error', 'Invalid JSON format', 'error');
        }
    }
};

const exportBtn = document.createElement("button");
exportBtn.className = "moduleBtn moduleSecondaryBtn";
exportBtn.innerHTML = `
    <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5">
        <path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path>
        <polyline points="17 8 12 3 7 8"></polyline>
        <line x1="12" y1="3" x2="12" y2="15"></line>
    </svg>
    Export
`;
exportBtn.onclick = () => {
    const modules = JSON.stringify(CookieHelper.getCookie('custom_modules_list') || []);
    Sweetalert2.fire({
        title: 'Export Your Modules',
        input: 'textarea',
        inputValue: modules,
        width: '600px',
        inputAttributes: {
            style: 'font-family: monospace; height: 200px;',
            readonly: true
        },
        showCancelButton: true,
        confirmButtonText: 'Copy to Clipboard',
        preConfirm: () => {
            navigator.clipboard.writeText(modules);
            return true;
        }
    }).then((result) => {
        if (result.isConfirmed) {
            Sweetalert2.fire('Copied', 'Modules copied to clipboard', 'success');
        }
    });
};

buttonGrid.append(createBtn, manageBtn, importBtn, exportBtn);

// Clear All button
const clearAllContainer = document.createElement("div");
clearAllContainer.className = "clearAllContainer";

const clearBtn = document.createElement("button");
clearBtn.className = "moduleBtn moduleDangerBtn clearAllBtn";
clearBtn.innerHTML = `
    <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5">
        <polyline points="3 6 5 6 21 6"></polyline>
        <path d="M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"></path>
    </svg>
    Clear All Modules
`;
clearBtn.onclick = async () => {
    const result = await Sweetalert2.fire({
        title: 'Delete All Modules?',
        text: 'This action cannot be undone',
        icon: 'warning',
        showCancelButton: true,
        confirmButtonColor: '#ef4444',
        cancelButtonColor: '#4b5563',
        confirmButtonText: 'Delete All'
    });
    if (result.isConfirmed) {
        CookieHelper.setCookie('custom_modules_list', []);
        updateButtonGrid();
        clearAllContainer.style.display = 'none';
        Sweetalert2.fire('Deleted', 'All modules have been removed', 'success');
    }
};

function refreshClearButton() {
    const modules = CookieHelper.getCookie('custom_modules_list') || [];
    if (modules.length > 0) {
        clearAllContainer.style.display = 'flex';
    } else {
        clearAllContainer.style.display = 'none';
    }
}

clearAllContainer.appendChild(clearBtn);

function refreshCustomModulesUI() {
    const customModules = CookieHelper.getCookie('custom_modules_list') || [];

    const customCheats = customModules.map((module, index) => {
        const defaultDescription = module.description || `Custom Module #${index + 1}`;

        if (module.type === 'execute') {
            return {
                name: module.name,
                description: defaultDescription,
                run: createFunctionFromCode(module.code)
            };
        } else if (module.type === 'toggle') {
            return {
                name: module.name,
                description: defaultDescription,
                type: 'toggle',
                enabled: false,
                data: null,
                run: createFunctionFromCode(module.code)
            };
        } else if (module.type === 'edit') {
            return {
                name: module.name,
                description: defaultDescription,
                inputs: [{
                    name: 'Value',
                    type: 'string'
                }],
                run: createFunctionFromCode(module.code, 'value')
            };
        }
    });

    cheats.custom_modules.cheats = customCheats;

    // Rebuild the custom modules list in the UI
    // Use the stored reference to the custom modules page
    if (customModulesPageRef && customModulesCheatsList) {
        // Clear existing cheats
        customModulesCheatsList.innerHTML = '';

        // Rebuild all custom module cheats
        for (const cheat of customCheats) {
                const cheatElement = document.createElement("div");
                const cheatTop = document.createElement("div");
                cheatTop.className = classes.cheatTop;

                const cheatInfo = document.createElement("div");
                cheatInfo.className = classes.cheatInfo;
                const cheatName = document.createElement("span");
                cheatName.innerText = cheat.name;
                cheatName.className = classes.cheatName;

                const cheatDescription = document.createElement("span");
                cheatDescription.innerText = cheat.description;
                cheatDescription.className = classes.cheatDescription;
                cheatInfo.append(cheatName, cheatDescription);
                cheatElement.append(cheatTop);

                // Handle inputs if the cheat has them
                const inputs = [];
                if (Array.isArray(cheat.inputs)) {
                    const cheatInputs = document.createElement("div");
                    cheatInputs.className = classes.cheatInputs;
                    for (const input of cheat.inputs) {
                        const inputElement = document.createElement("div");
                        const inputName = document.createElement("span");
                        inputName.innerText = input.name;
                        inputElement.append(inputName);
                        cheatInputs.append(inputElement);

                        if (input.type == "options") {
                            const inputField = document.createElement("select");
                            inputField.dataset[datasets.type] = "options";
                            inputElement.append(inputField);
                            inputs.push(inputField);
                            let curField = inputField;
                            const updateOptions = () => {
                                let choose = input.options;

                                const newInputField = document.createElement("select");
                                newInputField.dataset[datasets.type] = "options";
                                inputs[inputs.indexOf(curField)] = newInputField;
                                curField.replaceWith(newInputField);
                                curField = newInputField;

                                if (typeof choose == "function")
                                    try {
                                        choose = choose();
                                    } catch {
                                        choose = []
                                    }
                                if (choose instanceof Promise) {
                                    const waiting = document.createElement("option");
                                    waiting.value = '""';
                                    waiting.innerHTML = "Loading Options...";
                                    curField.append(waiting);
                                    choose.then((choices) => {
                                        if (choices?.length > 0) {
                                            curField.innerHTML = "";
                                            for (const choice of choices) {
                                                const option = document.createElement("option");
                                                option.value = JSON.stringify(choice?.value ?? choice);
                                                option.innerHTML = choice?.name || choice;
                                                curField.append(option);
                                            }
                                        } else {
                                            const newInputField = document.createElement("input");
                                            inputs[inputs.indexOf(curField)] = newInputField;
                                            curField.replaceWith(newInputField);
                                            newInputField.dataset[datasets.type] = "string";
                                            newInputField.placeholder = input.name;
                                            curField = newInputField;
                                        }
                                    });
                                } else {
                                    if (choose?.length > 0) {
                                        for (const choice of choose) {
                                            const option = document.createElement("option");
                                            option.value = JSON.stringify(choice?.value ?? choice);
                                            option.innerHTML = choice?.name || choice;
                                            curField.append(option);
                                        }
                                    } else {
                                        const newInputField = document.createElement("input");
                                        inputs[inputs.indexOf(curField)] = newInputField;
                                        curField.replaceWith(newInputField);
                                        newInputField.dataset[datasets.type] = "string";
                                        newInputField.placeholder = input.name;
                                        curField = newInputField;
                                    }
                                }
                            };
                            updateOptions();
                        } else {
                            const inputField = document.createElement("input");
                            inputField.dataset[datasets.type] = input.type;
                            if (input.type == "number") {
                                inputField.type = "number";
                                inputField.min = input.min;
                                inputField.max = input.max;
                                inputField.value = input.value || (input.min ?? 0);
                            }
                            inputField.placeholder = input.name;
                            inputElement.append(inputField);
                            inputs.push(inputField);
                        }
                    }
                    cheatElement.append(cheatInputs);
                }
                cheatTop.append(cheatInfo);

                const runButton = document.createElement("div");
                runButton.className = classes.runCheat;
                if (cheat.type == "toggle") {
                    runButton.innerText = "Toggle On";
                    runButton.classList.add(classes.toggleCheat);
                } else {
                    runButton.innerText = "Execute";
                }

                runButton.onclick = () => {
                    try {
                        cheat.run.apply(
                            cheat,
                            inputs.map((x) => (x.dataset[datasets.type] == "number" ? parseFloat("0" + x.value) : x.dataset[datasets.type] == "options" ? JSON.parse(x.value) : x.value))
                        );
                        if (cheat.type == "toggle") {
                            cheat.enabled = !cheat.enabled;
                            runButton.innerText = "Toggle " + (cheat.enabled ? "Off" : "On");
                            runButton.classList.toggle(classes.active, cheat.enabled);
                            Logs.addLog(`Toggled "${cheat.name}" ${cheat.enabled ? "on" : "off"}`, cheat.enabled ? "var(--toggleOn)" : "var(--toggleOff)");
                        } else {
                            Logs.addLog(`Ran "${cheat.name}"`, "var(--highlight)");
                        }
                    } catch (err) {
                        Logs.addLog(`Error running "${cheat.name}": ${err.message}`, "var(--error)");
                    }
                };

                cheatTop.append(runButton);
                customModulesCheatsList.append(cheatElement);
            }
    }
}

// Documentation function
function showDocumentation(editIndex = null) {
    const docHTML = `
        <div class="docContainer">
            <div class="docSection">
                <div class="docTitle">
                    <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
                        <path d="M4 19.5A2.5 2.5 0 0 1 6.5 17H20"></path>
                        <path d="M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z"></path>
                    </svg>
                    Custom Module Documentation
                </div>
                <div class="docText">
                    Learn how to create custom modules for your cheat menu. There are three types of modules available:
                </div>
            </div>

            <div class="docSection">
                <div class="docSubtitle">1. Execute Button</div>
                <div class="docText">
                    A simple button that runs code once when clicked. Perfect for one-time actions.
                </div>
                <div class="docText"><span class="docHighlight">Key points:</span></div>
                <ul class="docList">
                    <li>Code runs immediately when button is clicked</li>
                    <li>No state management needed</li>
                    <li>Use for instant actions like toggling dark mode or showing alerts</li>
                </ul>
                <div class="docCode">
// Example: Toggle Dark Mode
function() {
    let darkMode = document.getElementById('nightify');
    if (darkMode) {
        darkMode.remove();
    } else {
        let style = document.createElement('style');
        style.id = 'nightify';
        style.textContent = 'html { filter: invert(100%) hue-rotate(180deg); }';
        document.head.appendChild(style);
    }
}</div>
            </div>

            <div class="docSection">
                <div class="docSubtitle">2. Toggle</div>
                <div class="docText">
                    A button that can be turned on and off. Great for continuous actions or intervals.
                </div>
                <div class="docText"><span class="docHighlight">Important properties:</span></div>
                <ul class="docList">
                    <li><span class="docHighlight">this.enabled</span> - Boolean indicating if toggle is on/off</li>
                    <li><span class="docHighlight">this.data</span> - Store data like intervals or timers</li>
                    <li>Check <span class="docHighlight">this.enabled</span> to determine current state</li>
                    <li>Set <span class="docHighlight">this.enabled</span> to true when turning on</li>
                    <li>Set <span class="docHighlight">this.enabled</span> to false when turning off</li>
                    <li>Clean up intervals/timers when disabled</li>
                </ul>
                <div class="docCode">
// Example: Auto Answer Toggle
function() {
    if (!this.enabled) {
        // Turn ON
        this.enabled = true;
        this.data = setInterval(() => {
            // Your repeated code here
            console.log('Running...');
        }, 100);
    } else {
        // Turn OFF
        this.enabled = false;
        clearInterval(this.data);
        this.data = null;
    }
}</div>
            </div>

            <div class="docSection">
                <div class="docSubtitle">3. Value Edit</div>
                <div class="docText">
                    A module that accepts user input before running. Perfect for setting custom values.
                </div>
                <div class="docText"><span class="docHighlight">Usage:</span></div>
                <ul class="docList">
                    <li><span class="docHighlight">function(parameterName)</span> - Your function receives the user's input as a parameter</li>
                    <li><span class="docHighlight">parameterName</span> - Can be any name you choose (e.g., amount, value, number)</li>
                    <li>User enters a value in a prompt before the module executes</li>
                    <li>The entered value is passed directly to your function</li>
                </ul>
                <div class="docText"><span class="docHighlight">Key points:</span></div>
                <ul class="docList">
                    <li>Great for setting game values, amounts, or custom settings</li>
                    <li>Parameter can be used anywhere in your function code</li>
                    <li>Input type is determined by module configuration (number, string, etc.)</li>
                </ul>
                <div class="docCode">
// Example: Set Crypto Amount
function(amount) {
    let stateNode = getStateNode();
    stateNode.setState({
        crypto: amount,
        crypto2: amount
    });
    stateNode.props.liveGameController.setVal({
        path: \`c/\${stateNode.props.client.name}/cr\`,
        val: amount
    });
}</div>
            </div>

            <div class="docSection">
                <div class="docSubtitle">Code Format Options</div>
                <div class="docText">
                    You can write your code in any of these formats:
                </div>
                <ul class="docList">
                    <li><span class="docHighlight">Function declaration:</span> function() { /* code */ } or function(param) { /* code */ }</li>
                    <li><span class="docHighlight">Arrow function:</span> () => { /* code */ } or (param) => { /* code */ }</li>
                    <li><span class="docHighlight">Function body only:</span> Just write the code without function wrapper</li>
                </ul>
                <div class="docText">
                    All three formats work equally well - choose whichever you prefer!
                </div>
            </div>

            <div class="docSection">
                <div class="docSubtitle">Tips & Best Practices</div>
                <ul class="docList">
                    <li>Test your modules in a safe environment first</li>
                    <li>Always clean up intervals and timers in toggle modules</li>
                    <li>Use descriptive names and descriptions for your modules</li>
                    <li>For toggles, always check <span class="docHighlight">this.enabled</span> first</li>
                    <li>Store interval IDs in <span class="docHighlight">this.data</span> for toggle modules</li>
                </ul>
            </div>
        </div>
    `;

    Sweetalert2.fire({
        title: 'Module Documentation',
        html: docHTML,
        width: '750px',
        showConfirmButton: true,
        confirmButtonText: 'Back',
        confirmButtonColor: '#6366f1',
        customClass: {
            popup: 'doc-popup'
        }
    }).then(() => {
        if (editIndex !== null) {
            editModule(editIndex);
        } else {
            createBtn.click();
        }
    });
}

function showModuleManager() {
    const modules = CookieHelper.getCookie('custom_modules_list') || [];

    if (modules.length === 0) {
        Sweetalert2.fire({
            title: 'No Modules',
            text: 'You haven\'t created any modules yet',
            icon: 'info',
            confirmButtonColor: '#6366f1'
        });
        return;
    }

    let moduleListHTML = '<div style="max-height: 450px; overflow-y: auto; padding-right: 8px;">';
    modules.forEach((module, index) => {
        const escapedName = module.name.replace(/</g, '&lt;').replace(/>/g, '&gt;');
        const escapedDesc = (module.description || 'No description').replace(/</g, '&lt;').replace(/>/g, '&gt;');
        moduleListHTML += `
            <div class="moduleItemCard">
                <div class="moduleItemInfo">
                    <div class="moduleItemTitle">${escapedName}</div>
                    <div class="moduleItemDesc">${escapedDesc}</div>
                    <span class="moduleItemType">${module.type}</span>
                </div>
                <div class="moduleItemActions">
                    <button class="moduleActionBtn moduleEditBtn" data-index="${index}" data-action="edit">
                        <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="white" stroke-width="2.5">
                            <path d="M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"></path>
                            <path d="M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z"></path>
                        </svg>
                    </button>
                    <button class="moduleActionBtn moduleDeleteBtn" data-index="${index}" data-action="delete">
                        <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="white" stroke-width="2.5">
                            <polyline points="3 6 5 6 21 6"></polyline>
                            <path d="M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"></path>
                        </svg>
                    </button>
                </div>
            </div>
        `;
    });
    moduleListHTML += '</div>';

    Sweetalert2.fire({
        title: 'Manage Modules',
        html: moduleListHTML,
        width: '700px',
        showConfirmButton: false,
        showCloseButton: true,
        confirmButtonColor: '#6366f1',
        didOpen: () => {
            const actionBtns = document.querySelectorAll('.moduleActionBtn');
            actionBtns.forEach(btn => {
                btn.addEventListener('click', (e) => {
                    e.stopPropagation();
                    const index = parseInt(btn.dataset.index);
                    const action = btn.dataset.action;

                    if (action === 'edit') {
                        editModule(index);
                    } else if (action === 'delete') {
                        deleteModule(index);
                    }
                });
            });
        }
    });
}

async function editModule(index) {
    const modules = CookieHelper.getCookie('custom_modules_list') || [];
    const module = modules[index];

    const { value: formValues, isDismissed } = await Sweetalert2.fire({
        title: '<span>Edit Module</span><button class="helpBtn" id="help-btn-edit" type="button">?</button>',
        html:
            `<input id="swal-name" class="swal2-input" placeholder="Module Name" value="${module.name.replace(/"/g, '&quot;')}" style="margin-bottom: 10px;">` +
            `<textarea id="swal-desc" class="swal2-textarea" placeholder="Description (optional)" style="height: 80px; margin-bottom: 10px;">${module.description || ''}</textarea>` +
            `<select id="swal-type" class="swal2-select" style="margin-bottom: 10px;">
                <option value="execute" ${module.type === 'execute' ? 'selected' : ''}>Execute Button</option>
                <option value="toggle" ${module.type === 'toggle' ? 'selected' : ''}>Toggle</option>
                <option value="edit" ${module.type === 'edit' ? 'selected' : ''}>Value Edit</option>
            </select>` +
            `<textarea id="swal-code" class="swal2-textarea" placeholder="JavaScript Code" style="height: 150px; font-family: monospace;">${module.code}</textarea>`,
        focusConfirm: false,
        width: '600px',
        confirmButtonColor: '#6366f1',
        didOpen: () => {
            const helpBtn = document.getElementById('help-btn-edit');
            if (helpBtn) {
                helpBtn.addEventListener('click', (e) => {
                    e.preventDefault();
                    e.stopPropagation();
                    Sweetalert2.close();
                    showDocumentation(index);
                });
            }
        },
        preConfirm: () => {
            const name = document.getElementById('swal-name').value;
            const code = document.getElementById('swal-code').value;
            if (!name || !code) {
                Sweetalert2.showValidationMessage('Name and code are required');
                return false;
            }
            return {
                name: name,
                description: document.getElementById('swal-desc').value,
                type: document.getElementById('swal-type').value,
                code: minifyJS(code) // Minify code before saving
            };
        }
    });

    if (formValues) {
        modules[index] = formValues;
        CookieHelper.setCookie('custom_modules_list', modules);

        // Refresh the modules in the gamemodes list
        refreshCustomModulesUI();

        await Sweetalert2.fire({
            title: 'Updated',
            text: 'Module updated successfully',
            icon: 'success',
            confirmButtonColor: '#6366f1'
        });
        showModuleManager();
    } else if (isDismissed) {
        showModuleManager();
    }
}

async function deleteModule(index) {
    const modules = CookieHelper.getCookie('custom_modules_list') || [];
    const module = modules[index];

    const confirm = await Sweetalert2.fire({
        title: 'Delete Module?',
        text: `Are you sure you want to delete "${module.name}"?`,
        icon: 'warning',
        showCancelButton: true,
        confirmButtonColor: '#ef4444',
        cancelButtonColor: '#4b5563',
        confirmButtonText: 'Delete'
    });

    if (confirm.isConfirmed) {
        modules.splice(index, 1);
        CookieHelper.setCookie('custom_modules_list', modules);

        // Refresh the modules in the gamemodes list
        refreshCustomModulesUI();

        updateButtonGrid();
        refreshClearButton();
        await Sweetalert2.fire({
            title: 'Deleted',
            text: 'Module has been removed',
            icon: 'success',
            confirmButtonColor: '#6366f1'
        });
        showModuleManager();
    } else {
        showModuleManager();
    }
}

updateButtonGrid();

// Only show clear button if modules exist
refreshClearButton();

modulePage.append(modTitle, buttonGrid, clearAllContainer);

        const licenseMessage = document.createElement("div");
        licenseMessage.className = classes.licenseMessage;
        licenseMessage.innerHTML = `<i class="fas fa-file-alt" style="line-height: 1;aspect-ratio: 1 / 1;height: 20px;display: inline-grid;place-items: center;"></i> This script is licensed under <a style="color: var(--highlight);" target="_blank" href="https://www.gnu.org/licenses/agpl-3.0.en.html">AGPL-3.0</a>, read more <a style="color: var(--highlight);" target="_blank" href="https://github.com/Blooket-Council/Blooket-Cheats?tab=readme-ov-file#licensing">here</a>.<br>`;

        const copyrightTag = document.createElement("span");
        copyrightTag.className = classes.copyrightTag;

        copyrightTag.innerText = `Copyright © ${new Date().getFullYear()} Tony-the-best`;

        const codingCredits = document.createElement("ul");
        codingCredits.className = classes.codingCredits;

        codingCredits.append(createCredit("Owner", "Tony-the-best"));
        codingCredits.append(createCredit("Full GUI Dev", "Cathead+landsedge"));
        codingCredits.append(createCredit("Module Dev", "redhorse26"));
        codingCredits.append(createCredit("Design+Module Dev", "Lil Skittle"));
        codingCredits.append(createCredit("Contributor", "DannyDan"));
        codingCredits.append(createCredit("Original Blooket Cheats", 'gliz <i class="fas fa-long-arrow-alt-right"></i> Minesraft2 <i class="fas fa-long-arrow-alt-right"></i> 05Konz'));

        const creditLinks = document.createElement("ul");
        creditLinks.className = classes.creditLinks;

        creditLinks.append(createCredit("Our Github", '<a target="_blank" href="https://github.com/Tony-the-the-best/blooket-gui">X-GUI CHEATS/GITHUB</a>'));
        creditLinks.append(createCredit("Our Website", '<a target="_blank" href="https://xgui-client.github.io">More Info/Website</a>'));
        creditLinks.append(createCredit("Discord", '<a target="_blank" href="https://discord.gg/A7CRUz8vFR">JOIN THE SERVER</a>'));

        function parseTime(d) {
            const hour = d.getHours() % 12 == 0 ? 12 : d.getHours() % 12;
            const minutes = d.getMinutes().toString().padStart(2, "0");
            return `${hour}:${minutes} ${d.getHours() >= 12 ? "PM" : "AM"}`;
        }

        function parseDate(d) {
            const month = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"][d.getMonth()];
            return `${month} ${d.getDate()}${getOrdinal(d.getDate())}, ${d.getFullYear()} - ${parseTime(d)}`;
        }

        const uploadDates = document.createElement("ul");
        uploadDates.className = classes.uploadDates;

        try {
            let currentDate = new Date(null),
                latestDate = new Date(null);
            if (latestProcess != -1) uploadDates.append(createCredit("", parseDate(null)));
            if (currentDate < latestDate) {
                const warning = document.createElement("");
                warning.className = classes.warning;
                warning.innerText = "";
                uploadDates.append(warning);
            }
        } catch {
            const warning = document.createElement("");
            warning.className = classes.warning;
            warning.innerText = "";
            uploadDates.append(warning);
        }

        creditsPage.append(licenseMessage, codingCredits, creditLinks, uploadDates, copyrightTag);

        function getOrdinal(n) {
            if (n % 10 == 1 && n % 100 != 11) return "st";
            if (n % 10 == 2 && n % 100 != 12) return "nd";
            if (n % 10 == 3 && n % 100 != 13) return "rd";
            return "th";
        }

        function createCredit(contribution, html) {
            const listItem = document.createElement("li");
            const contributionText = document.createElement("strong");
            contributionText.innerText = contribution + ":";
            const right = document.createElement("span");
            right.innerHTML = html;
            listItem.append(contributionText, right);
            return listItem;
        }
        // --- Create Centered, Large Ping Display ---
        const pingDisplay = document.createElement("div");
        pingDisplay.id = "xguiPingDisplay";
        pingDisplay.style.cssText = `
    margin-top: 40px;
    text-align: center;
    font-size: 1.4em;
    font-weight: 700;
    color: var(--highlight);
    font-family: Nunito, sans-serif;
    width: 100%;
`;

        pingDisplay.innerText = "Server Ping: Calculating...";
        creditsPage.appendChild(pingDisplay);

        function updatePing() {
            const start = performance.now();
            const img = new Image();

            img.onload = () => {
                const latency = Math.round(performance.now() - start);
                pingDisplay.innerText = `Server Ping: ${latency} ms`;
            };

            img.onerror = () => {
                pingDisplay.innerText = "Server Ping: Offline";
            };

            img.src = "https://ac.blooket.com/dashclassic/favicon.ico?cb=" + Date.now();
        }

        updatePing();
        setInterval(updatePing, 5000);

        // ===== RESET GUI POSITION BUTTON =====
        if (!document.querySelector("#resetGuiBtn")) {
            const resetGuiBtn = document.createElement("button");
            resetGuiBtn.id = "resetGuiBtn";
            resetGuiBtn.textContent = "Reset GUI Position";

            Object.assign(resetGuiBtn.style, {
                display: "block", // makes centering easier
                margin: "10px auto 0 auto", // centers the button horizontally
                padding: "10px 20px",
                borderRadius: "12px",
                border: "none",
                cursor: "pointer",
                background: "linear-gradient(135deg, #8A2BE2, #4B0082)", // gradient for modern look
                color: "#fff",
                fontWeight: "700",
                fontSize: "14px",
                boxShadow: "0 4px 10px rgba(0,0,0,0.25)", // subtle shadow
                transition: "all 0.3s ease", // smooth hover effect
            });

            // Hover effect
            resetGuiBtn.onmouseenter = () => {
                resetGuiBtn.style.transform = "scale(1.05)";
                resetGuiBtn.style.boxShadow = "0 6px 14px rgba(0,0,0,0.3)";
            };
            resetGuiBtn.onmouseleave = () => {
                resetGuiBtn.style.transform = "scale(1)";
                resetGuiBtn.style.boxShadow = "0 4px 10px rgba(0,0,0,0.25)";
            };

            resetGuiBtn.onclick = () => {
                // center GUI
                gui.style.left = (window.innerWidth / 2 - 400) + "px";
                gui.style.top = (window.innerHeight / 2 - 250) + "px";

                // un-minimize if needed
                if (minimizeControl?.minimized) {
                    minimizeControl.onclick();
                }

                // clear saved position
                document.cookie =
                    "xgui_state_v4=; path=/; domain=.blooket.com; expires=Thu, 01 Jan 1970 00:00:00 GMT";
            };

            // place directly under ping display
            pingDisplay.parentElement.appendChild(resetGuiBtn);
        }




        const settingsPage = document.createElement("div");
        settingsPage.className = classes.noScroll + " " + classes.settingsPage;

        const searchResultSeparator = document.createElement("div");
        searchResultSeparator.onclick = () => path.push("Settings", settingsPage);
        searchResultSeparator.className = classes.searchResultSeparator;
        searchResultSeparator.innerText = "Settings";
        searchResultSeparator.dataset[datasets.name] = "settings";
        gamemodeResults.settings = searchResultSeparator;
        searchResults.append(searchResultSeparator);

        const settingRefresh = [];

        function addSetting(name, description, input, onUpdate) {
            const settingElement = document.createElement("div");

            const searchResult = document.createElement("div");
            searchResult.className = classes.searchResult;

            const searchResultInfo = document.createElement("div");
            searchResultInfo.className = classes.searchResultInfo;

            const searchResultName = document.createElement("div");
            searchResultName.className = classes.searchResultName;
            searchResult.dataset[datasets.name] = (searchResultName.innerText = name).toLowerCase();
            searchResult.dataset[datasets.mode] = "settings";
            const searchResultDescription = document.createElement("div");
            searchResultDescription.className = classes.searchResultDescription;
            searchResult.dataset[datasets.description] = (searchResultDescription.innerText = description).toLowerCase();

            searchResultInfo.append(searchResultName, searchResultDescription);

            searchResult.onclick = () => {
                path.push(name, settingsPage);
                settingElement.scrollIntoView();
                settingElement.animate(
                    [{
                            color: "var(--textColor)",
                            textShadow: "0 0 0px var(--highlight)",
                        },
                        {
                            color: "var(--highlight)",
                            textShadow: "0 0 5px var(--highlight)",
                            offset: 0.25,
                        },
                        {
                            color: "var(--textColor)",
                            textShadow: "0 0 0px var(--highlight)",
                        },
                    ],
                    1500
                );
            };

            searchResult.append(searchResultInfo);

            searchResults.append(searchResult);

            const settingTop = document.createElement("div");
            settingTop.className = classes.cheatTop;
            const settingInfo = document.createElement("div");
            settingInfo.className = classes.cheatInfo;
            const settingName = document.createElement("span");
            settingName.innerText = name;
            settingName.className = classes.cheatName;
            const settingDescription = document.createElement("span");
            settingDescription.innerText = description;
            settingDescription.className = classes.cheatDescription;
            settingInfo.append(settingName, settingDescription);
            settingElement.append(settingTop);



            const settingInputs = document.createElement("div");
            settingInputs.className = classes.cheatInputs;

            const inputElement = document.createElement("div");
            const inputName = document.createElement("span");
            inputName.innerText = input.name;
            inputElement.append(inputName);
            settingInputs.append(inputElement);

            let inputField = document.createElement("input");
            inputField.dataset[datasets.type] = input.type;
            if (input.type == "keybind") {
                inputField.readOnly = true;
                let locked = false;
                inputField.data = input.data;
                inputField.onclick = async () => {
                    if (locked) return;
                    inputField.value = "Waiting for input...";
                    locked = true;
                    inputField.data = await input.listen((e) => (inputField.value = e + "..."));
                    locked = false;
                    inputField.value = inputField.value.slice(0, -3);
                };
                (settingRefresh[settingRefresh.length] = () => (inputField.value = input.value()))();
            } else if (input.type == "options") {
                inputField = document.createElement("select");
                inputField.dataset[datasets.type] = "options";

                const defaultOption = document.createElement("option");
                defaultOption.value = "{}";
                defaultOption.innerHTML = "Select a Theme";
                (settingRefresh[settingRefresh.length] = () => (defaultOption.selected = true))();
                inputField.append(defaultOption);

                for (const choice of input.options) {
                    const option = document.createElement("option");
                    option.value = JSON.stringify(choice?.value ?? choice);
                    option.innerHTML = choice?.name || choice;
                    inputField.append(option);
                }
            } else if (input.type == "toggle") {
                // Handle toggle type - no input field needed, hide the inputs section
                inputField = null;
                settingInputs.style.display = "none";
            } else {
                if (input.type == "number") {
                    inputField.type = "number";
                    inputField.min = input.min;
                    inputField.max = input.max;
                }
                (settingRefresh[settingRefresh.length] = () => (inputField.value = input.value()))();
                inputField.placeholder = input.name;
            }
            if (inputField) {
                inputElement.append(inputField);
            }

            settingElement.append(settingInputs);

            settingTop.append(settingInfo);

            const runButton = document.createElement("div");
            runButton.className = classes.runCheat;
            if (input.type == "toggle") {
                runButton.classList.add(classes.toggleCheat);
                runButton.innerText = input.enabled ? "Toggle Off" : "Toggle On";
                runButton.classList.toggle(classes.active, input.enabled);
                runButton.style.width = "20%";
                runButton.style.margin = "10px auto";
                runButton.onclick = () => {
                    input.enabled = !input.enabled;
                    runButton.innerText = input.enabled ? "Toggle Off" : "Toggle On";
                    runButton.classList.toggle(classes.active, input.enabled);
                    onUpdate(input.enabled);
                };
                (settingRefresh[settingRefresh.length] = () => {
                    const currentEnabled = input.value();
                    input.enabled = currentEnabled;
                    runButton.innerText = currentEnabled ? "Toggle Off" : "Toggle On";
                    runButton.classList.toggle(classes.active, currentEnabled);
                })();
            } else {
                runButton.innerText = "Update";
                runButton.onclick = () =>
                    onUpdate(inputField.dataset[datasets.type] == "number" ? parseFloat("0" + inputField.value) : inputField.dataset[datasets.type] == "options" ? JSON.parse(inputField.value) : inputField.data ?? inputField.value);
            }
            settingTop.append(runButton);

            settingsPage.append(settingElement);
        }

        function setCookie(name, value, days = 365) {
            const expireDate = new Date();
            expireDate.setTime(expireDate.getTime() + (days * 24 * 60 * 60 * 1000));
            document.cookie = `${name}=${encodeURIComponent(value)}; domain=.blooket.com; expires=${expireDate.toUTCString()}; path=/`; 
        }


        settingsPage.onPath = () => settingRefresh.forEach((x) => x());


        addSetting(
            "Hide Keybind",
            "Shortcut to hide to GUI", {
                type: "keybind",
                name: "Shortcut",
                data: defaultHideKey,
                value: () => parseKeybind(Settings.data.hideKey),
                listen: (change) => createKeybindListener((keys) => change(parseKeybind(keys))),
            },
            (x) => {
                Settings.setItem("hideKey", x);
            }
        );
        addSetting(
            "Close Keybind",
            "Shortcut to disable all toggles and close GUI", {
                type: "keybind",
                name: "Shortcut",
                data: defaultCloseKey,
                value: () => parseKeybind(Settings.data.closeKey),
                listen: (change) => createKeybindListener((keys) => change(parseKeybind(keys))),
            },
            (x) => {
                Settings.setItem("closeKey", x);
            }
        );
        addSetting(
            "Toggle Animations",
            "Enable or disable smooth animations", {
                type: "toggle",
                name: "Animations",
                enabled: (() => {
                    const cookieValue = getCookie("animationsEnabled");
                    return cookieValue === null ? true : cookieValue === "true";
                })(),
                value: () => {
                    const cookieValue = getCookie("animationsEnabled");
                    return cookieValue === null ? true : cookieValue === "true";
                },
            },
            (enabled) => {
                setCookie("animationsEnabled", enabled.toString(), 365);
                window.xguiAnimationsEnabled = enabled;
            }
        );
        addSetting(
            "Toggle Sweet Alerts",
            "Toggles sweet alerts on and off", {
                type: "toggle",
                name: "Sweet Alerts",
                enabled: true,
                value: () => {
                    const cookieValue = getCookie("sweetAlertsEnabled");
                    return cookieValue === null ? true : cookieValue === "true";
                },
            },
            (enabled) => {
                setCookie("sweetAlertsEnabled", enabled.toString(), 365);
            }
        );
        addSetting(
            "Theme",
            "A preset look for X-GUI", {
                type: "options",
                name: "Preset",
                options: [{

                        name: "Cyber Blue",
                        value: {
                            highlight: "#00bfff",
                            highlight2: "#0077aa",
                            background: "radial-gradient(circle at top, #0f2027, #000000)",
                            background2: "#020b14",
                            toggleOn: "#00ffcc",
                            toggleOff: "#ff4d4d",
                            textColor: "#e6f7ff",
                            textColor2: "#00bfff",
                        },
                    },
                    {
                        name: "Inferno",
                        value: {
                            highlight: "#ff6a00",
                            highlight2: "#c0392b",
                            background: "linear-gradient(135deg, #2b0000, #7a1c00)",
                            background2: "#3a0f0f",
                            toggleOn: "#ff9f1a",
                            toggleOff: "#5c1a1a",
                            textColor: "#fff2e6",
                            textColor2: "#ff6a00",
                        },
                    },
                    {
                        name: "Emerald Night",
                        value: {
                            highlight: "#2ecc71",
                            highlight2: "#1e824c",
                            background: "linear-gradient(180deg, #051f14, #020b08)",
                            background2: "#03140c",
                            toggleOn: "#2ecc71",
                            toggleOff: "#8b1e1e",
                            textColor: "#eafff3",
                            textColor2: "#2ecc71",
                        },
                    },
                    {
                        name: "Midnight Purple",
                        value: {
                            highlight: "#8e44ad",
                            highlight2: "#5e3370",
                            background: "linear-gradient(160deg, #120018, #000000)",
                            background2: "#1a0022",
                            toggleOn: "#bb6bd9",
                            toggleOff: "#7a1a1a",
                            textColor: "#f5e6ff",
                            textColor2: "#bb6bd9",
                        },
                    },
                    {
                        name: "Frozen Ice",
                        value: {
                            highlight: "#7ed6df",
                            highlight2: "#22a6b3",
                            background: "linear-gradient(180deg, #e8f9ff, #b8ecff)",
                            background2: "#dff6ff",
                            toggleOn: "#22a6b3",
                            toggleOff: "#be2edd",
                            textColor: "#003344",
                            textColor2: "#22a6b3",
                        },
                    },
                    {
                        name: "Crimson Void",
                        value: {
                            highlight: "#e74c3c",
                            highlight2: "#96281b",
                            background: "radial-gradient(circle, #2b0000, #000000)",
                            background2: "#1a0000",
                            toggleOn: "#ff7675",
                            toggleOff: "#3d0000",
                            textColor: "#ffecec",
                            textColor2: "#e74c3c",
                        },
                    },
                    {
                        name: "Matrix",
                        value: {
                            highlight: "#00ff41",
                            highlight2: "#00aa2a",
                            background: "radial-gradient(circle, #003300, #000000)",
                            background2: "#001a00",
                            toggleOn: "#00ff41",
                            toggleOff: "#660000",
                            textColor: "#ccffcc",
                            textColor2: "#00ff41",
                        },
                    },
                    {
                        name: "Sunset Vapor",
                        value: {
                            highlight: "#ff77aa",
                            highlight2: "#ffb347",
                            background: "linear-gradient(135deg, #ff5f6d, #845ec2)",
                            background2: "#2a1a40",
                            toggleOn: "#ffb347",
                            toggleOff: "#5a1a1a",
                            textColor: "#fff0f7",
                            textColor2: "#ff77aa",
                        },
                    },
                    {

                        name: "Neon Purple",
                        value: {
                            highlight: "#9a49aa",
                            highlight2: "#7a039d",
                            background: "rgb(11, 194, 207)",
                            background2: "rgb(64, 17, 95)",
                            toggleOn: "#47A547",
                            toggleOff: "#A02626",
                            textColor: "white",
                            textColor2: "#9a49aa",
                        },
                    },
                    {
                        name: "Landscapes (Random)",
                        value: {
                            highlight: "rgba(0,0,0,0.3)",
                            highlight2: "rgba(0,0,0,0.3)",
                            background: "url(https://source.unsplash.com/1600x900/?landscape)",
                            background2: "linear-gradient(rgba(0,0,0,0.3), rgba(0,0,0,0.3))",
                            toggleOn: "linear-gradient(rgba(0,128,0,0.3), rgba(0,128,0,0.3))",
                            toggleOff: "linear-gradient(rgba(225,0,0,0.3), rgba(225,0,0,0.3))",
                            textColor: "white",
                            textColor2: "white",
                        },
                    },
                    {
                        name: "Blacket",
                        value: {
                            highlight: "#2f2f2f",
                            highlight2: "#3f3f3f",
                            background: "#4f4f4f",
                            background2: "#2f2f2f",
                            toggleOn: "#00c20c",
                            toggleOff: "#eb6234",
                            textColor: "white",
                            textColor2: "white",
                        },
                    },
                    {
                        name: "Ploopit",
                        value: {
                            highlight: "#204DD0",
                            highlight2: "#3C75F5",
                            background: "url(https://i.ibb.co/6vvdq3f/ploopit.png)",
                            background2: "#3C75F5",
                            toggleOn: "#47A547",
                            toggleOff: "#A02626",
                            textColor: "white",
                            textColor2: "#3C75F5",
                        },
                    },
                    {

                        name: "Midnight Bloom",
                        value: {
                            highlight: "#bb2d5b",
                            highlight2: "#682c44",
                            background: "linear-gradient(135deg, #1b1b2f, #2a2a45)",
                            background2: "#3e3e5c",
                            toggleOn: "#bb2d5b",
                            toggleOff: "#682c44",
                            textColor: "#e0e0e0",
                            textColor2: "#bb2d5b",
                        },
                    },
                    {
                        name: "Silver Horizon",
                        value: {
                            highlight: "#d1d1d1",
                            highlight2: "#b0b0b0",
                            background: "linear-gradient(135deg, #4e4e5d, #2f2f38)",
                            background2: "#3c3c44",
                            toggleOn: "#d1d1d1",
                            toggleOff: "#5a5a60",
                            textColor: "#ffffff",
                            textColor2: "#d1d1d1",
                        },
                    },
                    {
                        name: "Deep Ocean",
                        value: {
                            highlight: "#006994",
                            highlight2: "#003b57",
                            background: "linear-gradient(180deg, #003b57, #011c2a)",
                            background2: "#002433",
                            toggleOn: "#006994",
                            toggleOff: "#004d6a",
                            textColor: "#cce7ff",
                            textColor2: "#006994",
                        },
                    },
                    {
                        name: "Rustic Copper",
                        value: {
                            highlight: "#a65c5c",
                            highlight2: "#7b4b4b",
                            background: "linear-gradient(135deg, #e57c73, #7b4b4b)",
                            background2: "#9e6e6e",
                            toggleOn: "#a65c5c",
                            toggleOff: "#5e2f2f",
                            textColor: "#ffffff",
                            textColor2: "#a65c5c",
                        },
                    },
                    {
                        name: "Frostbite",
                        value: {
                            highlight: "#85c7e0",
                            highlight2: "#6d9db1",
                            background: "linear-gradient(135deg, #2a4d6f, #1f3e50)",
                            background2: "#3e5a70",
                            toggleOn: "#85c7e0",
                            toggleOff: "#3e5a70",
                            textColor: "#ffffff",
                            textColor2: "#85c7e0",
                        },
                    },
                    {
                        name: "Citrus Mist",
                        value: {
                            highlight: "#f6a500",
                            highlight2: "#f67f1e",
                            background: "linear-gradient(135deg, #f0a500, #ff6600)",
                            background2: "#d05f20",
                            toggleOn: "#f6a500",
                            toggleOff: "#a34317",
                            textColor: "#ffffff",
                            textColor2: "#f6a500",
                        },
                    },
                    {
                        name: "Mossy Forest",
                        value: {
                            highlight: "#728c5f",
                            highlight2: "#3d6c3d",
                            background: "linear-gradient(180deg, #3d6c3d, #2b4d2b)",
                            background2: "#4f7037",
                            toggleOn: "#728c5f",
                            toggleOff: "#4f7037",
                            textColor: "#ffffff",
                            textColor2: "#728c5f",
                        },
                    },
                    {
                        name: "Astral Journey",
                        value: {
                            highlight: "#a0a2d0",
                            highlight2: "#6b6c9f",
                            background: "linear-gradient(135deg, #2c3e5c, #1b2a3b)",
                            background2: "#3e4b72",
                            toggleOn: "#a0a2d0",
                            toggleOff: "#4d5176",
                            textColor: "#ffffff",
                            textColor2: "#a0a2d0",
                        },
                    },
                    {
                        name: "Crimson Ember",
                        value: {
                            highlight: "#ff4c4c",
                            highlight2: "#b73838",
                            background: "linear-gradient(135deg, #ff4c4c, #b73838)",
                            background2: "#8f3030",
                            toggleOn: "#ff4c4c",
                            toggleOff: "#8f3030",
                            textColor: "#ffffff",
                            textColor2: "#ff4c4c",
                        },
                    },
                    {
                        name: "Obsidian Wave",
                        value: {
                            highlight: "#4e5d6b",
                            highlight2: "#2c3e4f",
                            background: "linear-gradient(135deg, #2c3e4f, #1b2a35)",
                            background2: "#3e4b5a",
                            toggleOn: "#4e5d6b",
                            toggleOff: "#2c3e4f",
                            textColor: "#ffffff",
                            textColor2: "#4e5d6b",
                        },
                    },
                    {
                        name: "Twilight Ember",
                        value: {
                            highlight: "#ff7f50",
                            highlight2: "#f14d27",
                            background: "linear-gradient(135deg, #ff7f50, #f14d27)",
                            background2: "#d24020",
                            toggleOn: "#ff7f50",
                            toggleOff: "#d24020",
                            textColor: "#ffffff",
                            textColor2: "#ff7f50",
                        },
                    },
                    {
                        name: "Garnet Eclipse",
                        value: {
                            highlight: "#9b2d20",
                            highlight2: "#6b1f14",
                            background: "linear-gradient(135deg, #9b2d20, #6b1f14)",
                            background2: "#6f2923",
                            toggleOn: "#9b2d20",
                            toggleOff: "#6f2923",
                            textColor: "#ffffff",
                            textColor2: "#9b2d20",
                        },
                    },
                    {
                        name: "Sapphire Twilight",
                        value: {
                            highlight: "#0f4b73",
                            highlight2: "#006282",
                            background: "linear-gradient(135deg, #0f4b73, #006282)",
                            background2: "#003e5d",
                            toggleOn: "#0f4b73",
                            toggleOff: "#003e5d",
                            textColor: "#ffffff",
                            textColor2: "#0f4b73",
                        },
                    },
                    {
                        name: "Betastar",
                        value: {
                            highlight: "#282828",
                            highlight2: "gray",
                            background: "url(https://i.ibb.co/8bkDpCn/GIFMaker-me.gif)",
                            background2: "linear-gradient(rgba(0,0,0,0.3), rgba(0,0,0,0.3))",
                            toggleOn: "#013220",
                            toggleOff: "#9D0000",
                            textColor: "black",
                            textColor2: "black",
                        },
                    },
                    {
                        name: "Skool.lol",
                        value: {
                            highlight: "#36393e",
                            highlight2: "#1e2124",
                            background: "linear-gradient(90deg, rgba(104,45,140,1) 220px, rgba(237,30,121,1) 100%)",
                            background2: "#292929",
                            toggleOn: "#9c9a9a",
                            toggleOff: "#171717",
                            textColor: "white",
                            textColor2: "white",
                        },
                    },

                    {
                        name: "X-GUI ORIGINAL",
                        value: {
                            highlight: variables["--highlight"],
                            highlight2: variables["--highlight2"],
                            background: variables["--background"],
                            background2: variables["--background2"],
                            textColor: variables["--textColor"],
                            textColor2: variables["--textColor2"],
                            toggleOff: variables["--toggleOff"],
                            toggleOn: variables["--toggleOn"],
                        },
                    },
                    {
                        name: "Crypto Hack",
                        value: {
                            highlight: "rgb(88 175 88)",
                            toggleOn: "#0b601b",
                            background: "radial-gradient(#11581e,#041607)",
                            background2: "#1a1a1a",
                            toggleOff: "#A02626",
                            highlight2: "#49d149",
                            textColor2: "#49d149",
                        },
                    },
                    {
                        name: "Deceptive Dinos",
                        value: {
                            highlight: "#af8942",
                            toggleOn: "#2fb62f",
                            background: "radial-gradient(rgba(220, 184, 86, 0), rgba(220, 184, 86, 0.4)), url(https://ac.blooket.com/play/111cb7e0ee6607ac3d1a13d534c0e0f1.png), #ead49a",
                            background2: "radial-gradient(rgba(1,104,162,.6),rgba(24,55,110,.5)),radial-gradient(#2783b4 1.5px,#18376e 0) center / 24px 24px",
                            toggleOff: "#A02626",
                            highlight2: "rgb(0 0 0 / 25%)",
                            textColor2: "#FFFFFF",
                        },
                    },
                    {
                        name: "Blook Rush",
                        value: {
                            highlight: "#888",
                            toggleOn: "#47A547",
                            background: "repeating-linear-gradient(45deg,white,white 8%,#e6e6e6 0,#e6e6e6 16%)",
                            background2: "#36c",
                            toggleOff: "#A02626",
                            highlight2: "rgb(0 0 0 / 25%)",
                            textColor2: "#FFFFFF",
                        },
                    },
                    {
                        name: "Factory",
                        value: {
                            highlight: "#1563bf",
                            toggleOn: "rgb(75, 194, 46)",
                            background: "#3a3a3a",
                            background2: "#2d313d",
                            toggleOff: "#9a49aa",
                            highlight2: "rgb(0 0 0 / 25%)",
                            textColor2: "#a5aabe",
                        },
                    },
                    {
                        name: "Cafe",
                        value: {
                            highlight: "#0bc2cf",
                            toggleOn: "#47A547",
                            background: "linear-gradient(90deg,rgba(200,0,0,.5) 50%,transparent 0) center / 50px 50px,linear-gradient(rgba(200,0,0,0.5) 50%,transparent 0) white center / 50px 50px",
                            background2: "rgb(64, 64, 64)",
                            toggleOff: "#A02626",
                            highlight2: "rgb(0 0 0 / 25%)",
                            textColor2: "#ac7339",
                            textColor: "#FFFFFF",
                        },
                    },
                    {
                        name: "Tower of Doom",
                        value: {
                            highlight: "#9a49aa",
                            toggleOn: "#4bc22e",
                            background: "rgb(41 41 41)",
                            background2: "#404040",
                            toggleOff: "rgb(151, 15, 5)",
                            highlight2: "rgb(0 0 0 / 25%)",
                            textColor2: "#9a49aa",
                            textColor: "#FFFFFF",
                        },
                    },
                    {
                        name: "Monster Brawl",
                        value: {
                            highlight: "#2966a6",
                            toggleOn: "#47A547",
                            background: "rgb(45, 51, 67)",
                            background2: "#374154",
                            toggleOff: "#A02626",
                            highlight2: "#264d99",
                            textColor2: "#264d99",
                            textColor: "#FFFFFF",
                        },
                    },
                    {
                        name: "Tower Defense 2",
                        value: {
                            highlight: "#40b1d8",
                            toggleOn: "#47A547",
                            background: "url(https://media.blooket.com/image/upload/v1676164454/Media/defense/backgroundTd1-02.svg) center / cover",
                            background2: "#293c82",
                            toggleOff: "#A02626",
                            highlight2: "rgb(0 0 0 / 25%)",
                            textColor2: "#a33c22",
                            textColor: "#FFFFFF",
                        },
                    },
                ],
            },
            (x) => {
                Settings.setItem("theme", {
                    ...Settings.data.theme,
                    ...x
                });
                for (const prop in x) gui.style.setProperty(`--${prop}`, x[prop]);
                path.updatePath();
            }
        );
        addSetting("Highlight 1", "Hover color, sub-text color, button color, and input outlines", {
                type: "string",
                name: "CSS Value",
                value: () => gui.style.getPropertyValue("--highlight")
            }, (x) =>
            gui.style.setProperty("--highlight", Settings.setItem("theme.highlight", x || variables["--highlight"]))
        );
        addSetting("Highlight 2", "Credits page's warning message color", {
                type: "string",
                name: "CSS Value",
                value: () => gui.style.getPropertyValue("--highlight2")
            }, (x) =>
            gui.style.setProperty("--highlight2", Settings.setItem("theme.highlight2", x || variables["--highlight2"]))
        );
        addSetting("Background", "Main GUI background color", {
                type: "string",
                name: "CSS Value",
                value: () => gui.style.getPropertyValue("--background")
            }, (x) =>
            gui.style.setProperty("--background", Settings.setItem("theme.background", x || variables["--background"]))
        );
        addSetting("Background 2", "Secondary GUI background color", {
                type: "string",
                name: "CSS Value",
                value: () => gui.style.getPropertyValue("--background2")
            }, (x) =>
            gui.style.setProperty("--background2", Settings.setItem("theme.background2", x || variables["--background2"]))
        );
        addSetting("Text Color", "Main text color", {
                type: "string",
                name: "CSS Value",
                value: () => gui.style.getPropertyValue("--textColor")
            }, (x) =>
            gui.style.setProperty("--textColor", Settings.setItem("theme.textColor", x || variables["--textColor"]))
        );
        addSetting("Text Color 2", "Credit page's contributor color", {
                type: "string",
                name: "CSS Value",
                value: () => gui.style.getPropertyValue("--textColor2")
            }, (x) =>
            gui.style.setProperty("--textColor2", Settings.setItem("theme.textColor2", x || variables["--textColor2"]))
        );
        addSetting("Toggle (On)", "Enabled toggle button color", {
                type: "string",
                name: "CSS Value",
                value: () => gui.style.getPropertyValue("--toggleOn")
            }, (x) =>
            gui.style.setProperty("--toggleOn", Settings.setItem("theme.toggleOn", x || variables["--toggleOn"]))
        );
        addSetting("Toggle (Off)", "Disabled toggle button color", {
                type: "string",
                name: "CSS Value",
                value: () => gui.style.getPropertyValue("--toggleOff")
            }, (x) =>
            gui.style.setProperty("--toggleOff", Settings.setItem("theme.toggleOff", x || variables["--toggleOff"]))
        );

        const sidebarPaths = document.createElement("div");
        sidebarPaths.className = classes.sidebarPaths;

        function createSidebarPath(name, iconKey, page) {
            const sidebarPath = document.createElement("div");
            sidebarPath.className = classes.sidebarPath;

            // Clean and consistent spacing
            sidebarPath.style.display = "flex";
            sidebarPath.style.alignItems = "center";
            sidebarPath.style.gap = "12px";
            sidebarPath.style.cursor = "pointer";

            // Icon wrapper — matches your original 50×50 FA container
            const iconWrapper = document.createElement("div");
            iconWrapper.style.width = "50px";
            iconWrapper.style.height = "50px";
            iconWrapper.style.display = "flex";
            iconWrapper.style.alignItems = "center";
            iconWrapper.style.justifyContent = "center";
            iconWrapper.style.flexShrink = "0";
            iconWrapper.style.fontSize = "1.5em"; // 1.5em scaling matches FA behavior

            // --- CSP-SAFE SVG ICON SET (OUTLINE STYLE) ---
            const svgMap = {
                search: `
      <svg xmlns="http://www.w3.org/2000/svg"
           viewBox="0 0 24 24" width="1em" height="1em"
           fill="none" stroke="currentColor"
           stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round">
        <circle cx="11" cy="11" r="7"/>
        <line x1="16.5" y1="16.5" x2="21" y2="21"/>
      </svg>`,

                gamepad: `
    <svg xmlns="http://www.w3.org/2000/svg"
       viewBox="0 0 24 24" width="1em" height="1em"
       fill="none" stroke="currentColor"
       stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round">
    <path d="M19.07 1.29l-1.41 1.41 1.11 1.11-2.22 2.22-3.84-3.84-1.41 1.42 1.11 1.11L2.2 14.93l6.14 6.14 10.21-10.2 1.11 1.11 1.41-1.41-3.84-3.84 2.22-2.22 1.11 1.11 1.41-1.41-2.83-2.83z"/>
    <line x1="1.29" y1="21.29" x2="4.22" y2="18.36"/>
    <line x1="7.66" y1="16.34" x2="5.64" y2="14.32"/>
    <line x1="9.48" y1="14.52" x2="7.05" y2="12.09"/>
    <line x1="11.29" y1="12.71" x2="9.88" y2="11.29"/>
    <line x1="13.11" y1="10.89" x2="11.7" y2="9.48"/>
  </svg>
`,

                star: `
      <svg xmlns="http://www.w3.org/2000/svg"
           viewBox="0 0 24 24" width="1em" height="1em"
           fill="none" stroke="currentColor"
           stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round">
        <path d="M12 2l3.2 6.7L22 9.3l-5 4.3L18.4 22 12 18.3 5.6 22 7 13.6 2 9.3l6.8-.6L12 2z"/>
      </svg>`,

                trophy: `
      <svg xmlns="http://www.w3.org/2000/svg"
           viewBox="0 0 24 24" width="1em" height="1em"
           fill="none" stroke="currentColor"
           stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round">
        <path d="M8 21h8M8 17v4M16 17v4"/>
        <path d="M7 3h10v4a5 5 0 01-10 0V3z"/>
      </svg>`,
                alt: `
    <svg xmlns="http://www.w3.org/2000/svg"
       viewBox="0 0 24 24" width="1em" height="1em"
       fill="none" stroke="currentColor"
       stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round">
    <circle cx="5.8" cy="16.32" r="2.39"/>
    <path d="M1.5,23.48V23a4.3,4.3,0,0,1,4.3-4.3h0A4.3,4.3,0,0,1,10.09,23v.48"/>
    <circle cx="18.2" cy="3.91" r="2.39"/>
    <path d="M13.91,11.07v-.48A4.29,4.29,0,0,1,18.2,6.3h0a4.29,4.29,0,0,1,4.3,4.29v.48"/>
    <polyline points="15.7 15.72 18.68 12.75 21.66 15.72"/>
    <path d="M18.68,13v2.86A5.73,5.73,0,0,1,13,21.57h0"/>
    <polyline points="8.3 8.32 5.32 11.3 2.34 8.32"/>
    <path d="M5.32,11.07V8.2a5.72,5.72,0,0,1,5.73-5.72h0"/>
  </svg>
`,
                client: `
<svg xmlns="http://www.w3.org/2000/svg"
     viewBox="0 0 24 24"
     width="1em" height="1em"
     fill="none"
     stroke="currentColor"
     stroke-width="1.8"
     stroke-linecap="round"
     stroke-linejoin="round">

  <!-- wrench head -->
  <path d="M14.5 3a4.5 4.5 0 00-3.8 6.8l-7.3 7.3a2 2 0 102.8 2.8l7.3-7.3A4.5 4.5 0 0019.5 7l-3 3-4-4 3-3z"/>

</svg>
`,



                editor: `
<svg xmlns="http://www.w3.org/2000/svg"
     viewBox="0 0 24 24"
     width="1em" height="1em"
     fill="none"
     stroke="currentColor"
     stroke-width="1.8"
     stroke-linecap="round"
     stroke-linejoin="round">

  <!-- Box -->
  <rect x="3" y="3" width="18" height="18" rx="4" ry="4"/>

  <!-- Eyes -->
  <circle cx="8" cy="10" r="1.2"/>
  <circle cx="16" cy="10" r="1.2"/>

  <!-- Smile -->
  <path d="M7 15c1.5 1.5 4.5 1.5 6 0"/>
</svg>
`,




                terminal: `
      <svg xmlns="http://www.w3.org/2000/svg"
           viewBox="0 0 24 24" width="1em" height="1em"
           fill="none" stroke="currentColor"
           stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round">
        <polyline points="4 17 10 11 4 5"/>
        <line x1="12" y1="19" x2="20" y2="19"/>
      </svg>`,

                // === NEW PERFECT OUTLINE COG ===
                cog: `
  <svg xmlns="http://www.w3.org/2000/svg"
       viewBox="0 0 24 24" width="1em" height="1em"
       fill="none" stroke="currentColor"
       stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round">
    <circle cx="12" cy="12" r="3"/>
    <path d="M13.7654 2.15224C13.3978 2 12.9319 2 12 2C11.0681 2 10.6022 2 10.2346 2.15224C9.74457 2.35523 9.35522 2.74458 9.15223 3.23463C9.05957 3.45834 9.0233 3.7185 9.00911 4.09799C8.98826 4.65568 8.70226 5.17189 8.21894 5.45093C7.73564 5.72996 7.14559 5.71954 6.65219 5.45876C6.31645 5.2813 6.07301 5.18262 5.83294 5.15102C5.30704 5.08178 4.77518 5.22429 4.35436 5.5472C4.03874 5.78938 3.80577 6.1929 3.33983 6.99993C2.87389 7.80697 2.64092 8.21048 2.58899 8.60491C2.51976 9.1308 2.66227 9.66266 2.98518 10.0835C3.13256 10.2756 3.3397 10.437 3.66119 10.639C4.1338 10.936 4.43789 11.4419 4.43786 12C4.43783 12.5581 4.13375 13.0639 3.66118 13.3608C3.33965 13.5629 3.13248 13.7244 2.98508 13.9165C2.66217 14.3373 2.51966 14.8691 2.5889 15.395C2.64082 15.7894 2.87379 16.193 3.33973 17C3.80568 17.807 4.03865 18.2106 4.35426 18.4527C4.77508 18.7756 5.30694 18.9181 5.83284 18.8489C6.07289 18.8173 6.31632 18.7186 6.65204 18.5412C7.14547 18.2804 7.73556 18.27 8.2189 18.549C8.70224 18.8281 8.98826 19.3443 9.00911 19.9021C9.02331 20.2815 9.05957 20.5417 9.15223 20.7654C9.35522 21.2554 9.74457 21.6448 10.2346 21.8478C10.6022 22 11.0681 22 12 22C12.9319 22 13.3978 22 13.7654 21.8478C14.2554 21.6448 14.6448 21.2554 14.8477 20.7654C14.9404 20.5417 14.9767 20.2815 14.9909 19.902C15.0117 19.3443 15.2977 18.8281 15.781 18.549C16.2643 18.2699 16.8544 18.2804 17.3479 18.5412C17.6836 18.7186 17.927 18.8172 18.167 18.8488C18.6929 18.9181 19.2248 18.7756 19.6456 18.4527C19.9612 18.2105 20.1942 17.807 20.6601 16.9999C21.1261 16.1929 21.3591 15.7894 21.411 15.395C21.4802 14.8691 21.3377 14.3372 21.0148 13.9164C20.8674 13.7243 20.6602 13.5628 20.3387 13.3608C19.8662 13.0639 19.5621 12.558 19.5621 11.9999C19.5621 11.4418 19.8662 10.9361 20.3387 10.6392C20.6603 10.4371 20.8675 10.2757 21.0149 10.0835C21.3378 9.66273 21.4803 9.13087 21.4111 8.60497C21.3592 8.21055 21.1262 7.80703 20.6602 7C20.1943 6.19297 19.9613 5.78945 19.6457 5.54727C19.2249 5.22436 18.693 5.08185 18.1671 5.15109C17.9271 5.18269 17.6837 5.28136 17.3479 5.4588C16.8545 5.71959 16.2644 5.73002 15.7811 5.45096C15.2977 5.17191 15.0117 4.65566 14.9909 4.09794C14.9767 3.71848 14.9404 3.45833 14.8477 3.23463C14.6448 2.74458 14.2554 2.35523 13.7654 2.15224Z"/>
  </svg>
`,

                mobile: `
      <svg xmlns="http://www.w3.org/2000/svg"
           viewBox="0 0 24 24" width="1em" height="1em"
           fill="none" stroke="currentColor"
           stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round">
        <rect x="7" y="2" width="10" height="20" rx="2"></rect>
        <circle cx="12" cy="18" r="1" fill="currentColor"></circle>
      </svg>`,

                info: `
       <svg xmlns="http://www.w3.org/2000/svg"
       viewBox="0 0 24 24" width="1em" height="1em"
       fill="none" stroke="currentColor"
       stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round">
    <circle cx="12" cy="12" r="9"/>
    <line x1="12" y1="11" x2="12" y2="17"/>
    <circle cx="12" cy="8" r="0.5" fill="currentColor"/>
  </svg>`,

                // === NEW CHANGELOG SVG ===
                changelog: `
      <svg xmlns="http://www.w3.org/2000/svg"
           width="1em" height="1em"
           viewBox="0 0 24 24"
           fill="none" stroke="currentColor"
           stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round">
        <rect x="3" y="3" width="14" height="18" rx="2"/>
        <path d="M7 7h6M7 11h6M7 15h4"/>
        <polyline points="17 3 21 3 21 7"/>
        <line x1="21" y1="3" x2="17" y2="7"/>
      </svg>
    `,

                default: `
      <svg xmlns="http://www.w3.org/2000/svg"
           viewBox="0 0 24 24" width="1em" height="1em"
           fill="currentColor">
        <circle cx="12" cy="12" r="8"/>
      </svg>`,
      module: `
<svg xmlns="http://www.w3.org/2000/svg"
     viewBox="0 0 16 16"
     width="1em" height="1em"
     fill="currentColor"
     preserveAspectRatio="xMidYMid meet">
  <path d="M8.01005 0.858582L6.01005 14.8586L7.98995 15.1414L9.98995 1.14142L8.01005 0.858582Z"></path>
  <path d="M12.5 11.5L11.0858 10.0858L13.1716 8L11.0858 5.91422L12.5 4.5L16 8L12.5 11.5Z"></path>
  <path d="M2.82843 8L4.91421 10.0858L3.5 11.5L0 8L3.5 4.5L4.91421 5.91422L2.82843 8Z"></path>
</svg>
`
            };

            iconWrapper.innerHTML = svgMap[iconKey] || svgMap.default;

            const svg = iconWrapper.querySelector("svg");
            if (svg) {
                svg.style.display = "block";
            }

            const label = document.createElement("span");
            label.innerText = name;

            sidebarPath.append(iconWrapper, label);

            sidebarPath.onclick = () => path.sidebar(name, page);

            sidebarPaths.append(sidebarPath);

            return sidebarPath;
        }


        createSidebarPath("Search", "search", searchPage);
        createSidebarPath("Gamemodes", "gamepad", gamemodesPage);
        createSidebarPath("Favorites", "star", favoritesPage);

        // Hidden leaderboard entry stays exactly as you had it
        (leaderboardPath = createSidebarPath("Leaderboard", "trophy", leaderboardPage)).style.display = "none";

        createSidebarPath("Logs", "terminal", logsPage);
        createSidebarPath("Alt Manager", "alt", altPage);
        createSidebarPath("Blook Editor", "editor", blookPage);
        createSidebarPath("Client Blooks", "client", clientPage);
        createSidebarPath("Custom Modules", "module", modulePage);
        createSidebarPath("Changelog", "changelog", changelogPage);
        createSidebarPath("Settings", "cog", settingsPage);
        createSidebarPath("Info/Credits", "info", creditsPage);




        sidebar.append(sidebarPaths);

        const bigTextContainer = document.createElement("div");
        bigTextContainer.className = classes.bigTextContainer;


        const dummyK = document.createElement("span");
        dummyK.innerText = "X";
        dummyK.style.opacity = "0";

        const bigText = document.createElement("span");
        bigText.className = classes.bigText;
        bigText.innerText = "-GUI";

        const logo = document.createElement("span");
        logo.className = classes.logo;
        logo.innerHTML = "X";

        bigTextContainer.append(logo, dummyK, bigText);

        sidebar.prepend(bigTextContainer);

        const refreshControl = document.createElement("div");
        refreshControl.className = classes.refreshControl;
        refreshControl.innerHTML = `
<svg viewBox="0 0 24 24" width="22" height="22" fill="currentColor"
     xmlns="http://www.w3.org/2000/svg" style="display:block;">
  <path d="M4,12a1,1,0,0,1-2,0A9.983,9.983,0,0,1,18.242,4.206V2.758a1,1,0,1,1,2,0v4a1,1,0,0,1-1,1h-4a1,1,0,0,1,0-2h1.743A7.986,7.986,0,0,0,4,12Zm17-1a1,1,0,0,0-1,1A7.986,7.986,0,0,1,7.015,18.242H8.757a1,1,0,1,0,0-2h-4a1,1,0,0,0-1,1v4a1,1,0,0,0,2,0V19.794A9.984,9.984,0,0,0,22,12,1,1,0,0,0,21,11Z"/>
</svg>
`;
        refreshControl.onclick = () => {
            refreshControl.animate(
                [{
                    transform: "rotate(0deg)"
                }, {
                    transform: "rotate(360deg)"
                }], {
                    duration: 600,
                    easing: "ease"
                }
            );
            path.updatePath();
        };

        gui.append(controls, guiTopBar, sidebar, guiContent, pathText, refreshControl);
        path.updatePath();
        document.body.appendChild(gui);

        // CSP Detection Function
        function detectCSP() {
            let cspDetected = false;

            // Method 1: Try to execute inline script
            try {
                const testScript = document.createElement('script');
                testScript.textContent = 'window.__cspTestPassed = true;';
                document.head.appendChild(testScript);
                document.head.removeChild(testScript);

                if (!window.__cspTestPassed) {
                    cspDetected = true;
                }
                delete window.__cspTestPassed;
            } catch (e) {
                cspDetected = true;
            }

            // Method 2: Check for CSP meta tags
            const cspMeta = document.querySelector('meta[http-equiv="Content-Security-Policy"]');
            if (cspMeta && cspMeta.content.includes('script-src')) {
                cspDetected = true;
            }

            return cspDetected;
        }

        // Function to create CSP overlay (similar to blur notice)
        function createCSPOverlay(targetPage) {
            // Check if overlay already exists
            if (targetPage.querySelector && targetPage.querySelector('.xgui-csp-notice')) return;

            // Apply blur to background content
            try {
                if (targetPage && targetPage.style) {
                    let blurTarget = targetPage.querySelector && targetPage.querySelector('.xgui-blur-target');
                    if (!blurTarget) {
                        blurTarget = document.createElement('div');
                        blurTarget.className = 'xgui-blur-target';
                        while (targetPage.firstChild) {
                            blurTarget.appendChild(targetPage.firstChild);
                        }
                        targetPage.appendChild(blurTarget);
                    }
                    blurTarget.style.filter = 'blur(8px)';
                    blurTarget.style.pointerEvents = 'none';
                }
            } catch (e) {}

            // Create notice overlay
            const notice = document.createElement("div");
            notice.className = 'xgui-csp-notice';
            try { 
                if (!targetPage.style.position || targetPage.style.position === 'static') targetPage.style.position = 'relative';
                // Allow content to extend beyond the targetPage bounds
                targetPage.style.overflow = 'visible';
            } catch (e) {}
            notice.style.cssText = `
                position: absolute;
                inset: 0;
                display: flex !important;
                align-items: flex-start !important;
                justify-content: center !important;
                z-index: 2000;
                pointer-events: auto;
                text-align: center;
                background: transparent;
                padding: 20px;
                overflow: visible !important;
            `;

            const content = document.createElement('div');
            content.className = 'xgui-csp-notice-content';
            content.style.cssText = `
                box-sizing: border-box !important;
                display: block !important;
                max-width: 380px !important;
                width: 100% !important;
                padding: 40px 35px !important;
                border-radius: 20px !important;
                backdrop-filter: blur(24px) saturate(180%) !important;
                -webkit-backdrop-filter: blur(24px) saturate(180%) !important;
                background: linear-gradient(145deg, rgba(138, 43, 226, 0.15), rgba(75, 0, 130, 0.1)) !important;
                border: 1.5px solid rgba(255, 255, 255, 0.15) !important;
                box-shadow:
                    0 10px 40px rgba(0, 0, 0, 0.5),
                    0 0 0 1px rgba(255, 255, 255, 0.08) inset,
                    0 25px 70px rgba(138, 43, 226, 0.2) !important;
                text-align: center !important;
                margin-top: -40px !important;
            `;

            const iconWrapper = document.createElement("div");
            iconWrapper.innerHTML = `
                <svg width="64" height="64" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
                    <path d="M12 2L4 6V11C4 16 7 20 12 22C17 20 20 16 20 11V6L12 2Z" stroke="currentColor" stroke-width="2" stroke-linejoin="round"/>
                    <path d="M9 9L15 15M15 9L9 15" stroke="currentColor" stroke-width="2" stroke-linecap="round"/>
                </svg>
            `;
            iconWrapper.style.cssText = `
                display: block !important;
                color: #FFFFFF !important;
                margin: 0 auto 20px auto !important;
                padding: 0 !important;
                line-height: 1 !important;
                filter: drop-shadow(0 4px 16px rgba(255, 255, 255, 0.3)) !important;
            `;

            const noticeTitle = document.createElement("div");
            noticeTitle.textContent = "CSP Detected";
            noticeTitle.style.cssText = `
                display: block !important;
                color: #FFFFFF !important;
                font-size: 32px !important;
                font-weight: 800 !important;
                line-height: 1.1 !important;
                margin: 0 0 16px 0 !important;
                padding: 0 !important;
                text-align: center !important;
                letter-spacing: -0.5px !important;
                text-shadow: 0 2px 20px rgba(138, 43, 226, 0.6) !important;
            `;

            const noticeText = document.createElement("div");
            noticeText.innerHTML = "This is not supported on your version. Please use the extension version or get the CSP unblock extension.";
            noticeText.style.cssText = `
                display: block !important;
                color: #FFFFFF !important;
                font-size: 15px !important;
                margin: 0 0 30px 0 !important;
                padding: 0 !important;
                text-align: center !important;
                line-height: 1.6 !important;
                font-weight: 400 !important;
            `;

            const buttonContainer = document.createElement("div");
            buttonContainer.style.cssText = `
                display: flex !important;
                flex-direction: column !important;
                gap: 12px !important;
            `;

            const extensionButton = document.createElement("a");
            extensionButton.href = "https://github.com/xgui-client/X-GUI-BLOOKET-CLIENT/raw/refs/heads/main/extension/x-gui-extension.zip";
            extensionButton.target = "_blank";
            extensionButton.textContent = "Get Extension";
            extensionButton.style.cssText = `
                display: inline-flex !important;
                align-items: center !important;
                justify-content: center !important;
                background: linear-gradient(135deg, #5865F2, #4752C4) !important;
                color: #FFFFFF !important;
                border: none !important;
                font-size: 15px !important;
                font-weight: 600 !important;
                cursor: pointer !important;
                padding: 14px 32px !important;
                border-radius: 12px !important;
                transition: all 0.3s ease !important;
                box-shadow: 0 6px 20px rgba(88, 101, 242, 0.4) !important;
                margin: 0 !important;
                letter-spacing: 0.3px !important;
                text-decoration: none !important;
            `;

            extensionButton.addEventListener('mouseenter', function() {
                this.style.transform = 'translateY(-3px) scale(1.02)';
                this.style.boxShadow = '0 10px 30px rgba(88, 101, 242, 0.6)';
            });

            extensionButton.addEventListener('mouseleave', function() {
                this.style.transform = 'translateY(0) scale(1)';
                this.style.boxShadow = '0 6px 20px rgba(88, 101, 242, 0.4)';
            });

            buttonContainer.appendChild(extensionButton);

            content.appendChild(iconWrapper);
            content.appendChild(noticeTitle);
            content.appendChild(noticeText);
            content.appendChild(buttonContainer);

            notice.append(content);
            try { targetPage.append(notice); } catch (e) { document.body.append(notice); }
        }

        // Add the CSP overlay if it detects CSP and Logs it
        if (detectCSP()) {
            Logs.addLog("CSP Detected - Custom modules disabled", "red");

            createCSPOverlay(modulePage);
        }

        Logs.addLog("Opened X-GUI!");
        /* Anti-Suspend By CryptoDude3 */
        if (window.fetch.call.toString() == "function call() { [native code] }") {
            const call = window.fetch.call;
            window.fetch.call = function() {
                if (!arguments[1].includes("s.blooket.com/rc")) return call.apply(this, arguments);
                Logs.addLog("Blocked Suspension API!", "red");
            };
            Logs.addLog("Enabled Anti-BAN!");
        }

        if (gui.querySelector("i").clientHeight == 0) {
            const link = document.createElement("link");
            link.rel = "stylesheet";
            link.href = "https://ka-f.fontawesome.com/releases/v6.5.1/css/pro.min.css";
            gui.prepend(link);
        }

        function randString(length) {
            return Array.from({
                length
            }, () => String.fromCharCode(Math.floor(Math.random() * 25) + 97)).reduce((a) => a + String.fromCharCode(Math.floor(Math.random() * 25) + 97), "");
        }

        function dragElement(element, parent) {
            var pos1 = 0,
                pos2 = 0,
                pos3 = 0,
                pos4 = 0;
            element.onpointerdown = function(e = window.event) {
                element.style.cursor = "grabbing";
                pos3 = e.clientX;
                pos4 = e.clientY;
                document.onpointerup = function() {
                    element.style.cursor = "grab";
                    document.onpointerup = null;
                    document.onpointermove = null;
                };
                document.onpointermove = function(e = window.event) {
                    pos1 = pos3 - e.clientX;
                    pos2 = pos4 - e.clientY;
                    pos3 = e.clientX;
                    pos4 = e.clientY;
                    parent.style.top = parent.offsetTop - pos2 + "px";
                    parent.style.left = parent.offsetLeft - pos1 + "px";
                };
            };
        }

        const keys = ["shift", "control", "alt", "meta"];

        function createKeybindListener(onpress, element = window) {
            return new Promise((resolve) => {
                const pressed = new Set();
                let shift, ctrl, alt, key;
                const keydown = (e) => {
                    e.preventDefault();
                    pressed.add(e.code);
                    shift ||= e.shiftKey;
                    ctrl ||= e.ctrlKey;
                    alt ||= e.altKey;
                    if (!keys.includes(e.key.toLowerCase())) key = e.key.toLowerCase();
                    onpress?.({
                        shift,
                        ctrl,
                        alt,
                        key
                    });
                };
                const keyup = (e) => {
                    pressed.delete(e.code);
                    if (pressed.size > 0) return;
                    element.removeEventListener("keydown", keydown);
                    element.removeEventListener("keyup", keyup);
                    resolve({
                        shift,
                        ctrl,
                        alt,
                        key
                    });
                };
                element.addEventListener("keydown", keydown);
                element.addEventListener("keyup", keyup);
            });
        }

        function parseKeybind({
            shift,
            ctrl,
            alt,
            key
        }) {
            return [ctrl && "Ctrl", shift && "Shift", alt && "Alt", key && key.toUpperCase()].filter(Boolean).join(" + ");
        }

        function compareKeybind(keybind, event) {
            return keybind.ctrl == event.ctrlKey && keybind.shift == event.shiftKey && keybind.alt == event.altKey && event.key.toLowerCase() == keybind.key;
        }

        function keydown(e) {
            if (compareKeybind(Settings.data.hideKey ?? defaultHideKey, e)) {
                e.preventDefault();
                const isHiding = gui.style.display === "block";

                if (window.xguiAnimationsEnabled) {
                    const animationDuration = 0.1;
                    if (isHiding) {
                        gui.style.animation = `guiFadeOut ${animationDuration}s ease-out`;
                        setTimeout(() => {
                            gui.style.display = "none";
                            gui.style.animation = ""; 
                        }, animationDuration * 1000);
                    } else {
                        gui.style.display = "block";
                        gui.style.animation = `guiFadeIn ${animationDuration}s ease-out`;
                        setTimeout(() => {
                            gui.style.animation = "";
                        }, animationDuration * 0.1);
                    }
                } else {
                    gui.style.animation = "none";
                    gui.style.display = isHiding ? "none" : "block";
                }
                return;
            }
            if (compareKeybind(Settings.data.closeKey ?? defaultCloseKey, e)) {
                e.preventDefault();
                close();
            }
        }

        function close() {
            const animationsEnabled = getCookieValue("animationsEnabled");
            
            if (animationsEnabled) {
                const animationDuration = 0.3; 
                gui.style.animation = `guiFadeOut ${animationDuration}s ease-out forwards`;
                gui.style.pointerEvents = 'none'; 
                setTimeout(() => {
                    gui.remove();
                    clearInterval(Logs.interval);
                    for (const category in cheats)
                        for (const cheat of cheats[category].cheats)
                            if (cheat.enabled) cheat.run();
                    window.removeEventListener("keydown", keydown);
                }, animationDuration * 1000);
            } else {
                gui.remove();
                clearInterval(Logs.interval);
                for (const category in cheats)
                    for (const cheat of cheats[category].cheats)
                        if (cheat.enabled) cheat.run();
                window.removeEventListener("keydown", keydown);
            }
        }

        function getStateNode() {
            return Object.values(
                (function react(r = document.querySelector("body>div")) {
                    return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div"));
                })()
            )[1].children[0]._owner.stateNode;
        }


        window.addEventListener("keydown", keydown);

    });
    let img = new Image;
    img.src = "https://cdn.jsdelivr.net/gh/Blooket-Council/Blooket-Cheats@main/autoupdate/timestamps/KGui.png?" + Date.now();
    img.crossOrigin = "Anonymous";
    img.onload = function() {
        const c = document.createElement("canvas");
        const ctx = c.getContext("2d");
        ctx.drawImage(img, 0, 0, this.width, this.height);
        let {
            data
        } = ctx.getImageData(0, 0, this.width, this.height), decode = "", last;
        let i = 0;
        while (i < data.length) {
            let char = String.fromCharCode(data[i % 4 == 3 ? (i++, i++) : i++] + data[i % 4 == 3 ? (i++, i++) : i++] * 256);
            decode += char;
            if (char == "/" && last == "*") break;
            last = char;
        }
        let _, time = timeProcessed,
            error = "There was an error checking for script updates. Run cheat anyway?";
        try {
            [_, time, error] = decode.match(/LastUpdated: (.+?); ErrorMessage: "((.|\n)+?)"/);
        } catch (e) {}
        if ((latestProcess = parseInt(time)) <= timeProcessed || iframe.contentWindow.confirm(error)) cheat();
    }
    img.onerror = img.onabort = () => {
        img.onerror = img.onabort = null;
        cheat();
        let iframe = document.querySelector("iframe");


    }
})();