/**
 * Minified by jsDelivr using Terser v5.39.0.
 * Original file: /npm/@athari/monkeyutils@0.5.8/monkeyutils.u.js
 *
 * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files
 */
((e,t=this)=>{"object"==typeof module&&module.exports?module.exports=e():"function"==typeof define&&define.amd?define([],e):((t?.globalThis??t??self).athari??={}).monkeyutils=e()})((()=>{"use strict";const e=Object,t=Array,r="application/json",s="application/xhtml+xml",n="application/xml",o="image/svg+xml",a="multipart/form-data",i="text/html",l="text/plain",u="text/xml",c="content-type",d="arraybuffer",p="blob",h="bytes",f="form",m="html",y="json",w="response",g="stream",v="svg",b="text",x="xhtml",R="xml",j=e=>null!==e&&"object"==typeof e&&!t.isArray(e),P=e=>"string"==typeof e||e instanceof String,L=(t,r)=>e.getPrototypeOf(r).hasOwnProperty(t),O=(t,...r)=>{if(!r.length)return t;const s=r.shift();if(j(t)&&j(s))for(const r in s)j(s[r])?(t[r]||e.assign(t,{[r]:{}}),O(t[r],s[r])):e.assign(t,{[r]:s[r]});return O(t,...r)};class E extends Promise{#e=null;#t=null;#r=null;constructor(e){super(((t,r)=>{e((e=>([this.#e,this.#t]=[!0,e],t(e))),(e=>([this.#e,this.#r]=[!1,e],r(e))))}))}get success(){return this.#e}get value(){return this.#t}get error(){return this.#r}static resolve(e){return super.resolve.call(E,e)}static reject(e){return super.reject.call(E,e)}}const $="undefined"!=typeof performance?performance.now.bind(performance):Date.now,T=e=>new Promise((t=>setTimeout(t,e))),C=async(e,t=1/0)=>{for(let r,s=$()+t;$()<s;await T(100))if(r=e())return r;return null},N=e=>S(e).escapeHTML(),M=(e,t)=>Array(t).fill().map(((t,r)=>e+r)),U=[...M(0,128),..."ЂЃ‚ѓ„…†‡€‰Љ‹ЊЌЋЏђ‘’“”•–—˜™љ›њќћџ ЎўЈ¤Ґ¦§Ё©Є«¬­®Ї°±Ііґµ¶·ё№є»јЅѕї".split("").map((e=>e.charCodeAt(0))),...M(1040,64)].reduce(((e,t,r)=>(null!==t&&(e[t]=r),e)),{}),q=e=>e instanceof URL||e instanceof Location?e:new URL(e,location?.href),A=t=>e.fromEntries(new URLSearchParams(q(t).search)),F=(e,t,r={})=>{const s=new URLPattern({hostname:`(www.)?${t}`,...r}).exec(q(e));return null==s?s:{...s,...s.hostname.groups,...s.pathname.groups,...s.search.groups,...s.hash.groups}},H=(e,t)=>{e=q(e);const r=new URLSearchParams({...A(e),...t});return q(`${e.origin}${e.pathname}?${r}`,e.href).toString()},k=e=>{throw e instanceof Error?e:new Error(e)},J=(e,t=null,r=console.error)=>{const s=s=>r(`Failed to ${null!=t?e:"perform action"} at location:`,location.href,"error:",s);try{let r=(t??e)();return r instanceof Promise&&(r=r.catch(s)),r}catch(e){s(e)}},G=(t=(()=>e.fromEntries(e.entries(GM_info.script.resources).map((([,e])=>[e.name,e]))))(),r={props:[],wait:!1})=>new Proxy(t,new class{#s=new class{get#n(){return r.props.join("-")}get wait(){return G(t,{...r,wait:!0})}get bytes(){return t[this.#n].content}get url(){return t[this.#n].url}get data(){return r.wait?GM.getResourceUrl(this.#n):GM_getResourceURL(this.#n)}get text(){return r.wait?GM.getResourceText(this.#n):GM_getResourceText(this.#n)}};get(e,s){return L(s,this.#s)?this.#s[s]:G(t,{...r,props:r.props.concat(s)})}}),D=(e=document,t={},r={method:"querySelector",wait:!1,wrap:null,syntax:(e,t)=>e[t]??t})=>new Proxy(t,new class{#s=new class{get self(){return e}get all(){return D(e,t,{...r,method:"querySelectorAll"})}get is(){return D(e,t,{...r,method:"matches"})}get parent(){return D(e,t,{...r,method:"closest"})}get tag(){return D(e,t,{...r,syntax:(e,t)=>t})}get id(){return D(e,t,{...r,syntax:(e,t)=>`#${t}`})}get cls(){return D(e,t,{...r,syntax:(e,t)=>`.${t}`})}get wait(){return D(e,t,{...r,wait:!0})}get wrap(){return D(e,t,{...r,wrap:t})}wraps(s){return D(e,t,{...r,wrap:s})}};get(t,s){if(j(t[s]))return D(e,t[s],r);if(L(s,this.#s))return this.#s[s];const{method:n,wait:o,wrap:a,syntax:i}=r,l=()=>e[n](i(t,s)??k(s)),u=null==a?e=>e:e=>null!=e?D(e,a):null;return"querySelectorAll"==n?[...l()].map(u):o?C(l).then(u):u(l())}});return{isBoolean:e=>"boolean"==typeof e||e instanceof Boolean,isArray:e=>t.isArray(e),isNumber:e=>("number"==typeof e||e instanceof Number)&&!isNaN(e),isFiniteNumber:e=>"number"==typeof e&&!isNaN(e)&&isFinite(e),isFunction:e=>"function"==typeof e,isObject:j,isString:P,isSymbol:e=>"symbol"==typeof e,isUndefined:e=>void 0===e,assignDeep:O,delay:T,waitForCallback:()=>{let e,t;return[new Promise(((r,s)=>[e,t]=[r,s])),e,t]},waitForEvent:(e,t)=>new Promise((r=>e.addEventListener(t,r,{once:!0}))),waitForDocumentReady:async(e="interactive")=>{const t={loading:0,interactive:1,complete:2};return t[document.readyState]>=t[e]?document.readyState:await new Promise((t=>document.addEventListener("readystatechange",(()=>{document.readyState==e&&t(document.readyState)}))))},waitFor:C,withTimeout:async(e,t)=>{let r=null;const s=new Promise(((e,s)=>r=setTimeout((()=>s(new Error(`Timed out after ${t} ms.`))),t)));try{return await Promise.race([e,s])}finally{clearTimeout(r)}},h:N,u:e=>N(encodeURIComponent(e)),f:(e,...t)=>e.replace(/%(\d+)%/g,((e,r)=>t[+r])),utf8ToWin1251:(e,t={})=>((e,t,r={})=>{r=Object.assign({encode:!1,fatal:!1},r);const s=[];for(let n=0;n<e.length;n++){const o=t[e.charCodeAt(n)];if(void 0!==o)s.push(r.encode?o<128?e[n]:`%${o.toString(16)}`:String.fromCharCode(o));else if(r.fatal)throw new Error(`Unsupported character: ${e.charAt(n)}`)}return s.join("")})(e,U,t),toUrl:q,urlSearch:A,matchUrl:F,matchLocation:(e,t={},r=null)=>F(r??location.href,e,t),adjustUrlSearch:H,adjustLocationSearch:e=>H(location,e),download:async(e,t=null,l={},j={encoding:null,fetch:null})=>{const P=await(j.fetch??fetch)(e,O({credentials:"include",headers:{"accept-encoding":"gzip, deflate, br, zstd"}},l));if(!P.ok)throw new Error(`Failed to download ${e} (${P.status} ${P.statusText})`);const S=async()=>null==j.encoding?await P.text():new TextDecoder(j.encoding).decode(await P.arrayBuffer()),L=async e=>(new DOMParser).parseFromString(await S(),e),E=P.headers.get(c)?.split(";",1)[0]?.toLowerCase()??"none";switch(t??={[r]:y,[s]:x,[n]:R,[o]:v,[a]:f,[i]:m,[u]:R}[E]??Object.entries({[b]:/^text\/.+|^application\/(javascript|ecmascript)$/,[R]:/\+xml$/}).filter((([e,t])=>t.test(E))).map((([e])=>e))[0],t){case d:return await P.arrayBuffer();case p:return await P.blob();case h:return await P.bytes();case f:return await P.formData();case y:return await P.json();case w:return P;case g:return P.body;case b:return await S();case m:return await L(i);case v:return await L(o);case x:return await L(s);case R:return await L(n);default:throw new RangeError(`unexpected type '${t}' (${c} '${E}')`)}},throwError:k,attempt:J,overrideProperty:(t,r,s={})=>{let{value:n,get:o,set:a,log:i}=j(s)?s:{set:s};const l=P(i)?i:r,u=(t,r,s=!0)=>{if(null!=i&&s){let s=r;r?.constructor===e&&J("clone value",(()=>s=structuredClone(r)),console.warn),console.info(`${t} ${l}`,s)}};e.hasOwn(t,r)&&(void 0===n&&(n=null!=a?a(t[r]):t[r]),J(`delete ${r} property`,(()=>delete t[r]))),J(`define ${r} property`,(()=>e.defineProperty(t,r,{get:()=>{u("get retrieve",n);const e=null!=o?o(n):n;return u("get override",e,o),e},set:e=>{u("set original",n),n=null!=a?a(e):e,u("set modified",n,a)}})))},overrideFunction:(e,t,r,s,n)=>{const o=e[t];let a;try{e[t]=function(...e){const t=r?.(o,...e);return a=s?s(t,...e):t,t},n?.()}finally{null!=n&&(e[t]=o)}return a},overrideFetch:(t,s={fakeResponse:null,modifyRequestUrl:null,modifyRequestJson:null,modifyResponseJson:null})=>{const{fetch:n}=t;t.fetch=async(...t)=>{let[o,a]=t;const i=q(o),u=A(i),d=i.toString(),p={resource:o,url:i,search:u};if(null!=s.fakeResponse){let t;if(s.fakeResponse(p,new class{init={status:200,statusText:"OK"};#o(r,s){t=new Response(r,e.assign(this.init,{headers:s}))}text(e){this.#o(e,{[c]:l}),console.info("fake text",d,e)}json(e){this.#o(JSON.stringify(e),{[c]:r}),console.info("fake json",d,structuredClone(e))}}),void 0!==t)return t}if(null!=s.modifyRequestUrl){const e=s.modifyRequestUrl(p);void 0!==e&&(console.info("redirect",d," -> ",e),o=e.toString())}if(null!=s.modifyRequestJson&&a.headers[c].includes(r)){const e=((e,t)=>{try{return JSON.parse(e)}catch(e){console.error(t,e)}})(a.body,"invalid request json");if(void 0!==e){const t=s.modifyRequestJson(p,e);null!=t&&(a.body=JSON.stringify(t))}}const h=await n(o,a),f=h.headers.get(c);if(!f||!f.includes(r))return h;let m;try{m=await h.clone().json(),console.info("original json",d,structuredClone(m))}catch(e){console.error("invalid response json",d,e)}if(null!=s.modifyResponseJson){const e=s.modifyResponseJson(p,m);void 0!==e&&(h.json=async()=>e,console.info("modified json",d,structuredClone(m)))}return h}},overrideXmlHttpRequest:(e,t={on:{}})=>{e.XMLHttpRequest=class extends e.XMLHttpRequest{#a=["abort","error","load","loadend","loadstart","progress","readystatechange","timeout"];#i=["responseType","timeout","withCredentials"];#l=["readyState","response","responseText","responseURL","responseXML","status","statusText","upload"];#u={};#c={};#d={async:null,body:null,headers:{},method:null,mime:null,mode:null,password:null,responseType:"",timeout:0,url:null,username:null,withCredentials:!1};#p={readyState:void 0,response:void 0,responseHeaders:{},responseText:void 0,reponseURL:void 0,reponseXML:void 0,status:void 0,statusText:void 0,upload:void 0};constructor(e){super(e),Object.assign(this.#d,e),Object.assign(this.#c,t.on);for(const e of this.#a)Object.defineProperty(this,`on${e}`,{get:()=>this.#u[e]?.[0]??null,set:t=>this.#u[e]=[t]});for(const e of this.#i)Object.defineProperty(this,e,{get:()=>this.#d[e],set:t=>this.#d[e]=t});for(const e of this.#l)Object.defineProperty(this,e,{get:()=>void 0!==this.#p[e]?this.#p[e]:super[e],set:t=>this.#p[e]=t})}#h(e){return Object.defineProperties(new Event(e),{target:{value:this,enumerable:!0},currentTarget:{value:this,enumerable:!0}})}#f(e,...t){const r=()=>super[e](...t);return console.log(`XMLHttpRequest.${e}`,t,this),null!=this.#c[e]?this.#c[e](this.#h(e),r):r()}addEventListener(e,t,r){(this.#u[e]??=[]).push(t)}removeEventListener(e,t,r){if(null==this.#u[e])return;const s=this.#u[e].indexOf(t);-1!=s&&this.#u[e].splice(s,1)}overrideMimeType(e){return Object.assign(this.#d,{mime:e}),super.overrideMimeType(e)}setRequestHeader(e,t){return e=e.toLowerCase(),this.#d.headers[e]=t,super.setRequestHeader(e,t)}getAllResponseHeaders(){return super.getAllResponseHeaders().trimEnd().split(/[\r\n]+/).map((e=>e.match(/: /)?.slice(1)??[e])).map((([e,t])=>void 0===t?e:`${e}: ${this.#p.responseHeaders[e.toLowerCase()]??t}\r\n`)).join("")}getResponseHeader(e){return e=e.toLowerCase(),this.#p.responseHeaders[e]??super.getResponseHeader(e)}open(e="GET",t=location.href,r=!0,s=null,n=null){Object.assign(this.#d,{method:e,url:t,async:r,username:s,password:n}),this.#f(this.open.name,e,t,r,s,n)}send(e){Object.assign(this.#d,{body:e});for(const e of this.#a)super.addEventListener(e,(t=>{const r=t=>this.#u[e]?.forEach((e=>e(t))),s=this.#c[e];return null!=s?s(t,r):null!=r?r(t):void 0}));this.#f(this.send.name,e)}}},reviveConsole:async e=>((e,t)=>{const r=e();if(r)return t(r);const s=C(e),n={},o=E.race([s,n]).then((e=>e!==n?E.resolve(e):new E(s.then.bind(s))),(e=>E.reject(e)));if(!1===o.success)throw o.error;return!0===o.success?t(o.value):o.then(t)})((()=>document.body),(t=>{t.insertAdjacentHTML("beforeEnd",'<iframe style="display: none">'),e.console=t.lastChild.contentWindow.console})),setElementTagName:(e,t)=>{const r=document.createElement(t);for(;null!=e.firstChild;)r.appendChild(e.firstChild);for(let t=0;t<e.attributes.length;t++)r.attributes.setNamedItem(e.attributes[t].cloneNode());return e.replaceWith(r),r},wrapElement:(e,t,r={copyAttrs:!1})=>{const s=document.createElement(t);if(r.copyAttrs)for(let t=0;t<e.attributes.length;t++)s.attributes.setNamedItem(e.attributes[t].cloneNode());return e.parentNode.insertBefore(s,e),s.appendChild(e),s},ress:G,scripts:e=>new Proxy({},new class{#m={};get(t,r){return this.#m[r]??import(e.script[r].url).then((e=>this.#m[r]=e))}}),els:D,opts:e=>new Proxy(e,{get:(e,t)=>GM_getValue(t,e[t]),set:(e,t,r)=>(GM_setValue(t,r),!0)}),props:(e,t={})=>new Proxy(t,new class{get(t,r){return r.startsWith("--")?e.style.getPropertyValue(r):e.dataset[r]}})}}));
//# sourceMappingURL=/sm/cc8c58ea155f5d3248fec6d84d2420b166e7cfe0e7b233463dcebf2b7f7a41d4.map