diff --git a/gen/basic-VCWOI5LB.js b/gen/basic-5D2BN5ZN.js similarity index 99% rename from gen/basic-VCWOI5LB.js rename to gen/basic-5D2BN5ZN.js index 5d624676..c4d6ddf5 100644 --- a/gen/basic-VCWOI5LB.js +++ b/gen/basic-5D2BN5ZN.js @@ -1,4 +1,4 @@ -import{b as S}from"./chunk-3FIVEUG2.js";import{w as E}from"./chunk-KW4IDSDB.js";import"./chunk-UG4IOEUD.js";import"./chunk-LNOKARBD.js";import"./chunk-A7SWO6EA.js";import"./chunk-YLE5X5XS.js";import"./chunk-4676AC7I.js";import{B as c,K as f,T as d,U as v,a as g}from"./chunk-TYDI7JZQ.js";import"./chunk-KT7KMEQC.js";function k(u){return u.value!=null}function y(u){return u.name!=null}function O(u){return u.op!=null&&u.left!=null&&u.right!=null}function N(u){return u.op!=null&&u.expr!=null}var m=class{randomize(){this.seed(Math.random()*2147483647,Math.random()*2147483647,Math.random()*2147483647,Math.random()*2147483647)}constructor(){(()=>{var r,e,i,n;this.seed=function(s,a,h,o){r=s,e=a,i=h,n=o},this.seedfloat=function(s){this.seed(s,s*4294,s*429496,s*4294967296),this.next(),this.next(),this.next()},this.next=function(){r>>>=0,e>>>=0,i>>>=0,n>>>=0;var s=r+e|0;return r=e^e>>>9,e=i+(i<<3)|0,i=i<<21|i>>>11,n=n+1|0,s=s+n|0,i=i+s|0,(s>>>0)/4294967296}})(),this.seedfloat(-1)}},I=1024*1024,l=class u{constructor(){this.margin=80;this.running=!1;this.exited=!0;this.trace=!1}load(t){let r=null,e=0;if(this.pc2label!=null){let s=this.curpc;for(;s>0&&(r=this.pc2label.get(s))==null;)s--;e=this.curpc-s,console.log("oldpc=",this.curpc,"restart @ label",r,"+",e)}this.program=t,this.opts=t.opts,this.opts.maxArrayElements||(this.opts.maxArrayElements=I),this.allstmts=t.stmts,this.label2pc=t.labels,this.label2dataptr={},this.pc2label=new Map,this.datums=[],this.subroutines={},this.builtins=this.getBuiltinFunctions();for(var i in t.labels){var n=t.labels[i];this.pc2label.set(n,i)}return this.allstmts.forEach((s,a)=>{this.curpc=a+1,this.compileStatement(s),s.command=="DATA"&&(this.label2dataptr[s.$loc.label]=this.datums.length,s.datums.forEach(h=>{this.curpc=s.$loc.offset,this.datums.push(h)}))}),this.label2pc[r]!=null?(this.curpc=this.label2pc[r]+e,!0):(this.curpc=0,!1)}reset(){this.curpc=0,this.dataptr=0,this.clearVars(),this.returnStack=[],this.column=0,this.running=!0,this.exited=!1}clearVars(){this.globals=this.vars={},this.arrays={},this.defs={},this.forLoops={},this.forLoopStack=[],this.whileLoops=[],this.rng=new m,this.opts&&this.opts.staticArrays&&this.allstmts.filter(t=>t.command=="DIM").forEach(t=>{t.args.forEach(r=>this.compileJS(this._DIM(r))())})}saveState(){return $.extend(!0,{},this)}loadState(t){$.extend(!0,this,t)}getBuiltinFunctions(){var t=this.program&&this.opts.validFunctions;t||(t=Object.getOwnPropertyNames(u.prototype).filter(i=>/^[A-Z]{3,}[$]?$/.test(i)));var r={};for(var e of t)this.supportsFunction(e)&&(r[e]=this[e].bind(this));return r}supportsFunction(t){return typeof this[t]=="function"}runtimeError(t){throw this.curpc--,new d(t,this.getCurrentSourceLocation())}dialectError(t){this.runtimeError(`I can't ${t} in this dialect of BASIC.`)}getLineForPC(t){var r=this.allstmts[t];return r&&r.$loc&&r.$loc.line}getLabelForPC(t){var r=this.allstmts[t];return r&&r.$loc&&r.$loc.label}getCurrentSourceLocation(){var t=this.getStatement();return t&&t.$loc}getCurrentLabel(){var t=this.getCurrentSourceLocation();return t&&t.label}getStatement(){return this.allstmts[this.curpc]}step(){if(!this.running)return!1;var t=this.getStatement();return t?(this.trace&&console.log(this.curpc,t,this.vars,Object.keys(this.arrays)),this.curpc++,this.executeStatement(t),this.running):(this.running=!1,this.exited=!0,!1)}compileStatement(t){if(t.$run==null)try{var r=this["do__"+t.command];r==null&&this.runtimeError(`I don't know how to "${t.command}".`);var e=r.bind(this)(t);this.trace&&console.log(e),t.$run=this.compileJS(e)}catch(i){throw e&&console.log(e),i}}compileJS(t){return new Function(t).bind(this)}executeStatement(t){this.compileStatement(t),t.$run()}skipToEOL(){do this.curpc++;while(this.curpc=0?this.curpc=r:this.runtimeError(`I tried to go to the label "${t}" but couldn't find it.`)}newLocalScope(){this.vars=Object.create(this.vars)}popLocalScope(){this.vars!==this.globals&&(this.vars=Object.getPrototypeOf(this.vars))}gosubLabel(t){this.returnStack.length>32767&&this.runtimeError("I did too many GOSUBs without a RETURN."),this.returnStack.push(this.curpc),this.gotoLabel(t)}returnFromGosub(){this.returnStack.length==0&&this.runtimeError("I tried to RETURN, but there wasn't a corresponding GOSUB.");var t=this.returnStack.pop();this.curpc=t,this.popLocalScope()}popReturnStack(){this.returnStack.length==0&&this.runtimeError("I tried to POP, but there wasn't a corresponding GOSUB."),this.returnStack.pop()}valueToString(t,r){var e;if(typeof t=="number"){var i=this.float2str(t,this.opts.printZoneLength-4);return r?i.startsWith("-")?`${i} `:` ${i} `:i}else if(t==` +import{b as S}from"./chunk-3FIVEUG2.js";import{w as E}from"./chunk-XP2G5PMM.js";import"./chunk-UG4IOEUD.js";import"./chunk-LNOKARBD.js";import"./chunk-A7SWO6EA.js";import"./chunk-XQHODGIL.js";import"./chunk-4676AC7I.js";import{B as c,K as f,T as d,U as v,a as g}from"./chunk-TYDI7JZQ.js";import"./chunk-KT7KMEQC.js";function k(u){return u.value!=null}function y(u){return u.name!=null}function O(u){return u.op!=null&&u.left!=null&&u.right!=null}function N(u){return u.op!=null&&u.expr!=null}var m=class{randomize(){this.seed(Math.random()*2147483647,Math.random()*2147483647,Math.random()*2147483647,Math.random()*2147483647)}constructor(){(()=>{var r,e,i,n;this.seed=function(s,a,h,o){r=s,e=a,i=h,n=o},this.seedfloat=function(s){this.seed(s,s*4294,s*429496,s*4294967296),this.next(),this.next(),this.next()},this.next=function(){r>>>=0,e>>>=0,i>>>=0,n>>>=0;var s=r+e|0;return r=e^e>>>9,e=i+(i<<3)|0,i=i<<21|i>>>11,n=n+1|0,s=s+n|0,i=i+s|0,(s>>>0)/4294967296}})(),this.seedfloat(-1)}},I=1024*1024,l=class u{constructor(){this.margin=80;this.running=!1;this.exited=!0;this.trace=!1}load(t){let r=null,e=0;if(this.pc2label!=null){let s=this.curpc;for(;s>0&&(r=this.pc2label.get(s))==null;)s--;e=this.curpc-s,console.log("oldpc=",this.curpc,"restart @ label",r,"+",e)}this.program=t,this.opts=t.opts,this.opts.maxArrayElements||(this.opts.maxArrayElements=I),this.allstmts=t.stmts,this.label2pc=t.labels,this.label2dataptr={},this.pc2label=new Map,this.datums=[],this.subroutines={},this.builtins=this.getBuiltinFunctions();for(var i in t.labels){var n=t.labels[i];this.pc2label.set(n,i)}return this.allstmts.forEach((s,a)=>{this.curpc=a+1,this.compileStatement(s),s.command=="DATA"&&(this.label2dataptr[s.$loc.label]=this.datums.length,s.datums.forEach(h=>{this.curpc=s.$loc.offset,this.datums.push(h)}))}),this.label2pc[r]!=null?(this.curpc=this.label2pc[r]+e,!0):(this.curpc=0,!1)}reset(){this.curpc=0,this.dataptr=0,this.clearVars(),this.returnStack=[],this.column=0,this.running=!0,this.exited=!1}clearVars(){this.globals=this.vars={},this.arrays={},this.defs={},this.forLoops={},this.forLoopStack=[],this.whileLoops=[],this.rng=new m,this.opts&&this.opts.staticArrays&&this.allstmts.filter(t=>t.command=="DIM").forEach(t=>{t.args.forEach(r=>this.compileJS(this._DIM(r))())})}saveState(){return $.extend(!0,{},this)}loadState(t){$.extend(!0,this,t)}getBuiltinFunctions(){var t=this.program&&this.opts.validFunctions;t||(t=Object.getOwnPropertyNames(u.prototype).filter(i=>/^[A-Z]{3,}[$]?$/.test(i)));var r={};for(var e of t)this.supportsFunction(e)&&(r[e]=this[e].bind(this));return r}supportsFunction(t){return typeof this[t]=="function"}runtimeError(t){throw this.curpc--,new d(t,this.getCurrentSourceLocation())}dialectError(t){this.runtimeError(`I can't ${t} in this dialect of BASIC.`)}getLineForPC(t){var r=this.allstmts[t];return r&&r.$loc&&r.$loc.line}getLabelForPC(t){var r=this.allstmts[t];return r&&r.$loc&&r.$loc.label}getCurrentSourceLocation(){var t=this.getStatement();return t&&t.$loc}getCurrentLabel(){var t=this.getCurrentSourceLocation();return t&&t.label}getStatement(){return this.allstmts[this.curpc]}step(){if(!this.running)return!1;var t=this.getStatement();return t?(this.trace&&console.log(this.curpc,t,this.vars,Object.keys(this.arrays)),this.curpc++,this.executeStatement(t),this.running):(this.running=!1,this.exited=!0,!1)}compileStatement(t){if(t.$run==null)try{var r=this["do__"+t.command];r==null&&this.runtimeError(`I don't know how to "${t.command}".`);var e=r.bind(this)(t);this.trace&&console.log(e),t.$run=this.compileJS(e)}catch(i){throw e&&console.log(e),i}}compileJS(t){return new Function(t).bind(this)}executeStatement(t){this.compileStatement(t),t.$run()}skipToEOL(){do this.curpc++;while(this.curpc=0?this.curpc=r:this.runtimeError(`I tried to go to the label "${t}" but couldn't find it.`)}newLocalScope(){this.vars=Object.create(this.vars)}popLocalScope(){this.vars!==this.globals&&(this.vars=Object.getPrototypeOf(this.vars))}gosubLabel(t){this.returnStack.length>32767&&this.runtimeError("I did too many GOSUBs without a RETURN."),this.returnStack.push(this.curpc),this.gotoLabel(t)}returnFromGosub(){this.returnStack.length==0&&this.runtimeError("I tried to RETURN, but there wasn't a corresponding GOSUB.");var t=this.returnStack.pop();this.curpc=t,this.popLocalScope()}popReturnStack(){this.returnStack.length==0&&this.runtimeError("I tried to POP, but there wasn't a corresponding GOSUB."),this.returnStack.pop()}valueToString(t,r){var e;if(typeof t=="number"){var i=this.float2str(t,this.opts.printZoneLength-4);return r?i.startsWith("-")?`${i} `:` ${i} `:i}else if(t==` `)this.column=0,e=t;else if(t==" "){var n=this.opts.printZoneLength,s=Math.floor(this.column/n),a=(s+1)*this.opts.printZoneLength;a+n>this.margin?(this.column=0,e=` `):e=this.TAB(a)}else e=`${t}`;return e}float2str(t,r){var e=t.toString().toUpperCase();if(r>0){for(var i=r;e.length>r;)e=t.toPrecision(i--);e.startsWith("0.")?e=e.substr(1):e.startsWith("-0.")&&(e="-"+e.substr(2))}return e}printExpr(t){var r=this.valueToString(t,this.opts.numericPadding);this.column+=r.length,this.print(r)}print(t){console.log(t)}async input(t,r){return{line:"",vals:[]}}resume(){}expr2js(t,r){if(r||(r={}),k(t))return JSON.stringify(t.value);if(y(t)){if(!t.args&&r.locals&&r.locals.indexOf(t.name)>=0)return t.name;{r.isconst&&this.runtimeError("I expected a constant value here.");var e="",i=JSON.stringify(t.name);let h=t.args?t.args.map(o=>this.expr2js(o,r)).join(", "):[];return t.name.startsWith("FN")?e+=`this.getDef(${i})(${h})`:this.builtins[t.name]?(this.checkFuncArgs(t,this.builtins[t.name]),e+=`this.builtins.${t.name}(${h})`):t.args?this.opts.arraysContainChars&&t.name.endsWith("$")?e+=`this.getStringSlice(this.vars.${t.name}, ${h})`:e+=`this.arrayGet(${i}, ${h})`:e+=`this.vars.${t.name}`,r.novalid?e:`this.checkValue(${e}, ${i})`}}else if(O(t)){var n=this.expr2js(t.left,r),s=this.expr2js(t.right,r);return`this.${t.op}(${n}, ${s})`}else if(N(t)){var a=this.expr2js(t.expr,r);return`this.${t.op}(${a})`}}assign2js(t,r){r||(r={});var e="";return(t.name.startsWith("FN")||this.builtins[t.name])&&this.runtimeError("I can't call a function here."),t.args?this.opts.arraysContainChars&&t.name.endsWith("$")?this.runtimeError("I can't set array slices via this command yet."):e+=this.array2js(t,r):e=`this.globals.${t.name}`,e}array2js(t,r){var e=JSON.stringify(t.name),i=t.args||[];return this.expr2js(t,{novalid:!0})+`;this.getArray(${e}, ${i.length})`+i.map(n=>"[this.ROUND("+this.expr2js(n,r)+")]").join("")}checkFuncArgs(t,r){var e=t.args?t.args.length:0;t.name=="RND"&&e==0||t.name=="MID$"&&e==2||t.name=="INSTR"&&e==2||r.length!=e&&this.runtimeError(`I expected ${r.length} arguments for the ${t.name} function, but I got ${e}.`)}startForLoop(t,r,e,i,n){var s=this.curpc-1,a=this.pc2label.get(s);i||(i=1),this.vars[t]=r,this.trace&&console.log(`FOR ${t} = ${r} TO ${e} STEP ${i}`);var h=()=>i>=0?this.vars[t]>e:this.vars[t]o==t)),this.forLoopStack.push(t),this.forLoops[t]={$next:o=>{o&&t!=o&&this.runtimeError(`I executed NEXT "${o}", but the last FOR was for "${t}".`),this.vars[t]+=i;var b=h();b?(this.forLoopStack.pop(),delete this.forLoops[t]):this.curpc=(a!=null&&this.label2pc[a]||s)+1,this.trace&&console.log(`NEXT ${t}: ${this.vars[t]} TO ${e} STEP ${i} DONE=${b}`)}}}nextForLoop(t){var r=this.forLoops[t||this.opts.optionalNextVar&&this.forLoopStack[this.forLoopStack.length-1]];r||this.runtimeError("I couldn't find a matching FOR for this NEXT."),r.$next(t)}whileLoop(t){t?this.whileLoops.push(this.curpc-1):this.skipToAfterWend()}nextWhileLoop(){var t=this.whileLoops.pop();t==null?this.runtimeError("I couldn't find a matching WHILE for this WEND."):this.curpc=t}assign(t,r,e){return e&&t.endsWith("$")?this.checkValue(this.convert(t,r),t):t.endsWith("$")?this.convertToString(r,t):this.convertToNumber(r,t)}convert(t,r){return t.endsWith("$")?r==null?"":r.toString():typeof r=="number"?r:parseFloat(r+"")}convertToString(t,r){if(typeof t!="string")this.runtimeError(`I can't convert ${t} to a string.`);else return t}convertToNumber(t,r){if(typeof t!="number")this.runtimeError(`I can't convert ${t} to a number.`);else return this.checkNum(t)}dimArray(t,...r){if(r=r.map(Math.round),this.arrays[t]!=null){if(this.opts.staticArrays)return;this.runtimeError(`I already dimensioned this array (${t}) earlier.`)}var e=this.getTotalArrayLength(r);e>this.opts.maxArrayElements&&this.runtimeError("I can't create an array with this many elements.");var i=t.endsWith("$"),n=i?Array:Float64Array;if(r.length==1)this.arrays[t]=new n(r[0]+1);else if(r.length==2){this.arrays[t]=new Array(r[0]+1);for(var s=0;s=i.length&&this.runtimeError(`I tried to lookup ${t}(${r}) but it exceeded the dimensions of the array.`),i=i[r[n]]}return c(i)&&this.runtimeError(`I tried to lookup ${t}(${r}) but used too few dimensions.`),i}modifyStringSlice(t,r,e,i){return t=t||"",this.checkString(t),this.checkString(r),i||(i=e),e=this.ROUND(e),i=this.ROUND(i),e<1&&this.dialectError("accept a string slice index less than 1"),ir.length)&&this.runtimeError(`I needed a number between 1 and ${r.length}, but I got ${t}.`),t<1||t>r.length?0:t}onGotoLabel(t,...r){t=this.checkOnGoto(t,r),t&&this.gotoLabel(r[t-1])}onGosubLabel(t,...r){t=this.checkOnGoto(t,r),t&&this.gosubLabel(r[t-1])}nextDatum(){return this.dataptr>=this.datums.length&&this.runtimeError("I tried to READ, but ran out of data."),this.datums[this.dataptr++].value}do__PRINT(t){var r="";for(var e of t.args){var i=this.expr2js(e),n=i.name;r+=`this.printExpr(this.checkValue(${i}, ${JSON.stringify(n)}));`}return r}preInput(){this.running=!1,this.curpc--}postInput(t){t&&this.curpc++,this.running=!0,this.resume()}do__INPUT(t){var r=t.prompt!=null?this.expr2js(t.prompt):'""',e=t.elapsed!=null?this.assign2js(t.elapsed):"let ___",i="";return t.args.forEach((n,s)=>{var a=this.assign2js(n);i+=` var value = this.convert(${JSON.stringify(n.name)}, response.vals[${s}]); @@ -34,4 +34,4 @@ import{b as S}from"./chunk-3FIVEUG2.js";import{w as E}from"./chunk-KW4IDSDB.js"; `),this.tty.addtext("*** END OF PROGRAM ***",1),this.tty.showPrintHead(!1)}loadROM(t,r){var e=this.runtime.exited;this.program=r;var i=this.runtime.load(r);this.tty.uppercaseOnly=!0,(!this.hotReload||e||!i)&&this.reset()}getROMExtension(){return".json"}reset(){this.tty.clear(),this.runtime.reset(),this.clock=0,this.transcript=[]}pause(){this.timer.stop()}resume(){this.isBlocked()||(this.animcount=0,this.timer.start())}isBlocked(){return this.tty.waitingfor!=null||this.runtime.exited}isRunning(){return this.timer.isRunning()}getDefaultExtensions(){return[".bas"]}getToolForFilename(){return"basic"}getPresets(){return L}getPC(){return this.runtime.curpc}getSP(){return 4096-this.runtime.returnStack.length}isStable(){return!0}getCPUState(){return{PC:this.getPC(),SP:this.getSP()}}saveState(){return{c:this.getCPUState(),rt:this.runtime.saveState()}}loadState(t){this.runtime.loadState(t)}getDebugTree(){return{CurrentLine:this.runtime.getCurrentLabel(),Variables:this.runtime.vars,Arrays:this.runtime.arrays,Functions:this.runtime.defs,ForLoops:this.runtime.forLoops,WhileLoops:this.runtime.whileLoops,ReturnStack:this.runtime.returnStack,NextDatum:this.runtime.datums[this.runtime.dataptr],Clock:this.clock,Options:this.runtime.opts,Internals:this.runtime}}inspect(t){let r=this.runtime.vars[t];if(r!=null)return`${t} = ${r}`}showHelp(){return"https://8bitworkshop.com/docs/platforms/basic/"}getDebugCategories(){return["Variables"]}getDebugInfo(t,r){switch(t){case"Variables":return this.varsToLongString()}}varsToLongString(){var t="",r=Object.keys(this.runtime.vars);r.sort();for(var e of r){var i=this.runtime.vars[e],n=JSON.stringify(i);n.length>24&&(n=`${n.substr(0,24)}...(${n.length})`),t+=g(e,3)+" = "+n+` `}return t}setupDebug(t){this.onBreakpointHit=t}clearDebug(){this.onBreakpointHit=null,this.debugTrap=null}checkDebugTrap(){return this.debugTrap&&this.debugTrap()?(this.pause(),this.break(),!0):!1}break(){this.onBreakpointHit&&this.onBreakpointHit(this.saveState())}step(){var t=this.clock;this.debugTrap=()=>this.clock>t,this.resume()}stepOver(){var t=this.runtime.getStatement();if(t&&(t.command=="GOSUB"||t.command=="ONGOSUB")){var r=this.getPC()+1;this.runEval(()=>this.getPC()==r)}else this.step()}hasCustomStepOver(){return!0}runUntilReturn(){var t=this.getSP();this.runEval(()=>this.getSP()>t)}runEval(t){this.debugTrap=()=>t(this.getCPUState()),this.resume()}restartAtPC(t){return t=Math.round(t),t>=0&&t{(function(i){if(typeof Wg=="object"&&typeof lu!="undefined")lu.exports=i();else if(typeof define=="function"&&define.amd)define([],i);else{var e;typeof window!="undefined"?e=window:typeof global!="undefined"?e=global:typeof self!="undefined"?e=self:e=this,e.localforage=i()}})(function(){var i,e,t;return(function r(n,s,o){function a(h,O){if(!s[h]){if(!n[h]){var u=typeof vo=="function"&&vo;if(!O&&u)return u(h,!0);if(l)return l(h,!0);var f=new Error("Cannot find module '"+h+"'");throw f.code="MODULE_NOT_FOUND",f}var p=s[h]={exports:{}};n[h][0].call(p.exports,function(m){var S=n[h][1][m];return a(S||m)},p,p.exports,r,n,s,o)}return s[h].exports}for(var l=typeof vo=="function"&&vo,c=0;c=43)}}).catch(function(){return!1})}function I(g){return typeof Z=="boolean"?u.resolve(Z):z(g).then(function(Q){return Z=Q,Z})}function Oe(g){var Q=R[g.name],x={};x.promise=new u(function(T,X){x.resolve=T,x.reject=X}),Q.deferredOperations.push(x),Q.dbReady?Q.dbReady=Q.dbReady.then(function(){return x.promise}):Q.dbReady=x.promise}function se(g){var Q=R[g.name],x=Q.deferredOperations.pop();if(x)return x.resolve(),x.promise}function te(g,Q){var x=R[g.name],T=x.deferredOperations.pop();if(T)return T.reject(Q),T.promise}function he(g,Q){return new u(function(x,T){if(R[g.name]=R[g.name]||Ut(),g.db)if(Q)Oe(g),g.db.close();else return x(g.db);var X=[g.name];Q&&X.push(g.version);var y=c.open.apply(c,X);Q&&(y.onupgradeneeded=function(E){var V=y.result;try{V.createObjectStore(g.storeName),E.oldVersion<=1&&V.createObjectStore(w)}catch(q){if(q.name==="ConstraintError")console.warn('The database "'+g.name+'" has been upgraded from version '+E.oldVersion+" to version "+E.newVersion+', but the storage "'+g.storeName+'" already exists.');else throw q}}),y.onerror=function(E){E.preventDefault(),T(y.error)},y.onsuccess=function(){var E=y.result;E.onversionchange=function(V){V.target.close()},x(E),se(g)}})}function ge(g){return he(g,!1)}function ye(g){return he(g,!0)}function Y(g,Q){if(!g.db)return!0;var x=!g.db.objectStoreNames.contains(g.storeName),T=g.versiong.db.version;if(T&&(g.version!==Q&&console.warn('The database "'+g.name+`" can't be downgraded from version `+g.db.version+" to version "+g.version+"."),g.version=g.db.version),X||x){if(x){var y=g.db.version+1;y>g.version&&(g.version=y)}return!0}return!1}function re(g){return new u(function(Q,x){var T=new FileReader;T.onerror=x,T.onloadend=function(X){var y=btoa(X.target.result||"");Q({__local_forage_encoded_blob:!0,data:y,type:g.type})},T.readAsBinaryString(g)})}function G(g){var Q=C(atob(g.data));return O([Q],{type:g.type})}function be(g){return g&&g.__local_forage_encoded_blob}function $e(g){var Q=this,x=Q._initReady().then(function(){var T=R[Q._dbInfo.name];if(T&&T.dbReady)return T.dbReady});return p(x,g,g),x}function He(g){Oe(g);for(var Q=R[g.name],x=Q.forages,T=0;T0&&(!g.db||y.name==="InvalidStateError"||y.name==="NotFoundError"))return u.resolve().then(function(){if(!g.db||y.name==="NotFoundError"&&!g.db.objectStoreNames.contains(g.storeName)&&g.version<=g.db.version)return g.db&&(g.version=g.db.version+1),ye(g)}).then(function(){return He(g).then(function(){de(g,Q,x,T-1)})}).catch(x);x(y)}}function Ut(){return{forages:[],db:null,dbReady:null,deferredOperations:[]}}function Xi(g){var Q=this,x={db:null};if(g)for(var T in g)x[T]=g[T];var X=R[x.name];X||(X=Ut(),R[x.name]=X),X.forages.push(Q),Q._initReady||(Q._initReady=Q.ready,Q.ready=$e);var y=[];function E(){return u.resolve()}for(var V=0;V>4,N[X++]=(E&15)<<4|V>>2,N[X++]=(V&3)<<6|q&63;return D}function rs(g){var Q=new Uint8Array(g),x="",T;for(T=0;T>2],x+=Ae[(Q[T]&3)<<4|Q[T+1]>>4],x+=Ae[(Q[T+1]&15)<<2|Q[T+2]>>6],x+=Ae[Q[T+2]&63];return Q.length%3===2?x=x.substring(0,x.length-1)+"=":Q.length%3===1&&(x=x.substring(0,x.length-2)+"=="),x}function il(g,Q){var x="";if(g&&(x=fn.call(g)),g&&(x==="[object ArrayBuffer]"||g.buffer&&fn.call(g.buffer)==="[object ArrayBuffer]")){var T,X=ti;g instanceof ArrayBuffer?(T=g,X+=cn):(T=g.buffer,x==="[object Int8Array]"?X+=co:x==="[object Uint8Array]"?X+=_i:x==="[object Uint8ClampedArray]"?X+=Ri:x==="[object Int16Array]"?X+=Ni:x==="[object Uint16Array]"?X+=hn:x==="[object Int32Array]"?X+=ts:x==="[object Uint32Array]"?X+=On:x==="[object Float32Array]"?X+=is:x==="[object Float64Array]"?X+=hr:Q(new Error("Failed to get type for BinaryArray"))),Q(X+rs(T))}else if(x==="[object Blob]"){var y=new FileReader;y.onload=function(){var E=ln+g.type+"~"+rs(this.result);Q(ti+es+E)},y.readAsArrayBuffer(g)}else try{Q(JSON.stringify(g))}catch(E){console.error("Couldn't convert value into a JSON string: ",g),Q(null,E)}}function Oo(g){if(g.substring(0,Jn)!==ti)return JSON.parse(g);var Q=g.substring(un),x=g.substring(Jn,un),T;if(x===es&&lo.test(Q)){var X=Q.match(lo);T=X[1],Q=Q.substring(X[0].length)}var y=ho(Q);switch(x){case cn:return y;case es:return O([y],{type:T});case co:return new Int8Array(y);case _i:return new Uint8Array(y);case Ri:return new Uint8ClampedArray(y);case Ni:return new Int16Array(y);case hn:return new Uint16Array(y);case ts:return new Int32Array(y);case On:return new Uint32Array(y);case is:return new Float32Array(y);case hr:return new Float64Array(y);default:throw new Error("Unkown type: "+x)}}var _r={serialize:il,deserialize:Oo,stringToBuffer:ho,bufferToString:rs};function Or(g,Q,x,T){g.executeSql("CREATE TABLE IF NOT EXISTS "+Q.storeName+" (id INTEGER PRIMARY KEY, key unique, value)",[],x,T)}function ui(g){var Q=this,x={db:null};if(g)for(var T in g)x[T]=typeof g[T]!="string"?g[T].toString():g[T];var X=new u(function(y,E){try{x.db=openDatabase(x.name,String(x.version),x.description,x.size)}catch(V){return E(V)}x.db.transaction(function(V){Or(V,x,function(){Q._dbInfo=x,y()},function(q,D){E(D)})},E)});return x.serializer=_r,X}function fi(g,Q,x,T,X,y){g.executeSql(x,T,X,function(E,V){V.code===V.SYNTAX_ERR?E.executeSql("SELECT name FROM sqlite_master WHERE type='table' AND name = ?",[Q.storeName],function(q,D){D.rows.length?y(q,V):Or(q,Q,function(){q.executeSql(x,T,X,y)},y)},y):y(E,V)},y)}function rl(g,Q){var x=this;g=m(g);var T=new u(function(X,y){x.ready().then(function(){var E=x._dbInfo;E.db.transaction(function(V){fi(V,E,"SELECT * FROM "+E.storeName+" WHERE key = ? LIMIT 1",[g],function(q,D){var N=D.rows.length?D.rows.item(0).value:null;N&&(N=E.serializer.deserialize(N)),X(N)},function(q,D){y(D)})})}).catch(y)});return f(T,Q),T}function nl(g,Q){var x=this,T=new u(function(X,y){x.ready().then(function(){var E=x._dbInfo;E.db.transaction(function(V){fi(V,E,"SELECT * FROM "+E.storeName,[],function(q,D){for(var N=D.rows,oe=N.length,xe=0;xe0){E(ns.apply(X,[g,q,x,T-1]));return}V(xe)}})})}).catch(V)});return f(y,x),y}function sl(g,Q,x){return ns.apply(this,[g,Q,x,1])}function ss(g,Q){var x=this;g=m(g);var T=new u(function(X,y){x.ready().then(function(){var E=x._dbInfo;E.db.transaction(function(V){fi(V,E,"DELETE FROM "+E.storeName+" WHERE key = ?",[g],function(){X()},function(q,D){y(D)})})}).catch(y)});return f(T,Q),T}function os(g){var Q=this,x=new u(function(T,X){Q.ready().then(function(){var y=Q._dbInfo;y.db.transaction(function(E){fi(E,y,"DELETE FROM "+y.storeName,[],function(){T()},function(V,q){X(q)})})}).catch(X)});return f(x,g),x}function di(g){var Q=this,x=new u(function(T,X){Q.ready().then(function(){var y=Q._dbInfo;y.db.transaction(function(E){fi(E,y,"SELECT COUNT(key) as c FROM "+y.storeName,[],function(V,q){var D=q.rows.item(0).c;T(D)},function(V,q){X(q)})})}).catch(X)});return f(x,g),x}function Rr(g,Q){var x=this,T=new u(function(X,y){x.ready().then(function(){var E=x._dbInfo;E.db.transaction(function(V){fi(V,E,"SELECT key FROM "+E.storeName+" WHERE id = ? LIMIT 1",[g+1],function(q,D){var N=D.rows.length?D.rows.item(0).key:null;X(N)},function(q,D){y(D)})})}).catch(y)});return f(T,Q),T}function uo(g){var Q=this,x=new u(function(T,X){Q.ready().then(function(){var y=Q._dbInfo;y.db.transaction(function(E){fi(E,y,"SELECT key FROM "+y.storeName,[],function(V,q){for(var D=[],N=0;N '__WebKitDatabaseInfoTable__'",[],function(X,y){for(var E=[],V=0;V0}function dn(g){var Q=this,x={};if(g)for(var T in g)x[T]=g[T];return x.keyPrefix=mo(g,Q._defaultConfig),jO()?(Q._dbInfo=x,x.serializer=_r,u.resolve()):u.reject()}function qO(g){var Q=this,x=Q.ready().then(function(){for(var T=Q._dbInfo.keyPrefix,X=localStorage.length-1;X>=0;X--){var y=localStorage.key(X);y.indexOf(T)===0&&localStorage.removeItem(y)}});return f(x,g),x}function DO(g,Q){var x=this;g=m(g);var T=x.ready().then(function(){var X=x._dbInfo,y=localStorage.getItem(X.keyPrefix+g);return y&&(y=X.serializer.deserialize(y)),y});return f(T,Q),T}function Be(g,Q){var x=this,T=x.ready().then(function(){for(var X=x._dbInfo,y=X.keyPrefix,E=y.length,V=localStorage.length,q=1,D=0;D=0;E--){var V=localStorage.key(E);V.indexOf(y)===0&&localStorage.removeItem(V)}}):X=u.reject("Invalid arguments"),f(X,Q),X}var FO={_driver:"localStorageWrapper",_initStorage:dn,_support:po(),iterate:Be,getItem:DO,setItem:ll,removeItem:bo,clear:qO,length:al,key:Cr,keys:IO,dropInstance:cl},BO=function(Q,x){return Q===x||typeof Q=="number"&&typeof x=="number"&&isNaN(Q)&&isNaN(x)},NO=function(Q,x){for(var T=Q.length,X=0;X{"use strict";function L$(i,e){(e==null||e>i.length)&&(e=i.length);for(var t=0,r=Array(e);t{(function(i){if(typeof Wg=="object"&&typeof lu!="undefined")lu.exports=i();else if(typeof define=="function"&&define.amd)define([],i);else{var e;typeof window!="undefined"?e=window:typeof global!="undefined"?e=global:typeof self!="undefined"?e=self:e=this,e.localforage=i()}})(function(){var i,e,t;return(function r(n,s,o){function a(h,O){if(!s[h]){if(!n[h]){var u=typeof vo=="function"&&vo;if(!O&&u)return u(h,!0);if(l)return l(h,!0);var f=new Error("Cannot find module '"+h+"'");throw f.code="MODULE_NOT_FOUND",f}var p=s[h]={exports:{}};n[h][0].call(p.exports,function(m){var S=n[h][1][m];return a(S||m)},p,p.exports,r,n,s,o)}return s[h].exports}for(var l=typeof vo=="function"&&vo,c=0;c=43)}}).catch(function(){return!1})}function I(g){return typeof Z=="boolean"?u.resolve(Z):z(g).then(function(Q){return Z=Q,Z})}function Oe(g){var Q=R[g.name],x={};x.promise=new u(function(T,X){x.resolve=T,x.reject=X}),Q.deferredOperations.push(x),Q.dbReady?Q.dbReady=Q.dbReady.then(function(){return x.promise}):Q.dbReady=x.promise}function se(g){var Q=R[g.name],x=Q.deferredOperations.pop();if(x)return x.resolve(),x.promise}function te(g,Q){var x=R[g.name],T=x.deferredOperations.pop();if(T)return T.reject(Q),T.promise}function he(g,Q){return new u(function(x,T){if(R[g.name]=R[g.name]||Ut(),g.db)if(Q)Oe(g),g.db.close();else return x(g.db);var X=[g.name];Q&&X.push(g.version);var y=c.open.apply(c,X);Q&&(y.onupgradeneeded=function(E){var V=y.result;try{V.createObjectStore(g.storeName),E.oldVersion<=1&&V.createObjectStore(w)}catch(q){if(q.name==="ConstraintError")console.warn('The database "'+g.name+'" has been upgraded from version '+E.oldVersion+" to version "+E.newVersion+', but the storage "'+g.storeName+'" already exists.');else throw q}}),y.onerror=function(E){E.preventDefault(),T(y.error)},y.onsuccess=function(){var E=y.result;E.onversionchange=function(V){V.target.close()},x(E),se(g)}})}function ge(g){return he(g,!1)}function ye(g){return he(g,!0)}function Y(g,Q){if(!g.db)return!0;var x=!g.db.objectStoreNames.contains(g.storeName),T=g.versiong.db.version;if(T&&(g.version!==Q&&console.warn('The database "'+g.name+`" can't be downgraded from version `+g.db.version+" to version "+g.version+"."),g.version=g.db.version),X||x){if(x){var y=g.db.version+1;y>g.version&&(g.version=y)}return!0}return!1}function re(g){return new u(function(Q,x){var T=new FileReader;T.onerror=x,T.onloadend=function(X){var y=btoa(X.target.result||"");Q({__local_forage_encoded_blob:!0,data:y,type:g.type})},T.readAsBinaryString(g)})}function G(g){var Q=C(atob(g.data));return O([Q],{type:g.type})}function be(g){return g&&g.__local_forage_encoded_blob}function $e(g){var Q=this,x=Q._initReady().then(function(){var T=R[Q._dbInfo.name];if(T&&T.dbReady)return T.dbReady});return p(x,g,g),x}function He(g){Oe(g);for(var Q=R[g.name],x=Q.forages,T=0;T0&&(!g.db||y.name==="InvalidStateError"||y.name==="NotFoundError"))return u.resolve().then(function(){if(!g.db||y.name==="NotFoundError"&&!g.db.objectStoreNames.contains(g.storeName)&&g.version<=g.db.version)return g.db&&(g.version=g.db.version+1),ye(g)}).then(function(){return He(g).then(function(){de(g,Q,x,T-1)})}).catch(x);x(y)}}function Ut(){return{forages:[],db:null,dbReady:null,deferredOperations:[]}}function Xi(g){var Q=this,x={db:null};if(g)for(var T in g)x[T]=g[T];var X=R[x.name];X||(X=Ut(),R[x.name]=X),X.forages.push(Q),Q._initReady||(Q._initReady=Q.ready,Q.ready=$e);var y=[];function E(){return u.resolve()}for(var V=0;V>4,N[X++]=(E&15)<<4|V>>2,N[X++]=(V&3)<<6|q&63;return D}function rs(g){var Q=new Uint8Array(g),x="",T;for(T=0;T>2],x+=Ae[(Q[T]&3)<<4|Q[T+1]>>4],x+=Ae[(Q[T+1]&15)<<2|Q[T+2]>>6],x+=Ae[Q[T+2]&63];return Q.length%3===2?x=x.substring(0,x.length-1)+"=":Q.length%3===1&&(x=x.substring(0,x.length-2)+"=="),x}function il(g,Q){var x="";if(g&&(x=fn.call(g)),g&&(x==="[object ArrayBuffer]"||g.buffer&&fn.call(g.buffer)==="[object ArrayBuffer]")){var T,X=ti;g instanceof ArrayBuffer?(T=g,X+=cn):(T=g.buffer,x==="[object Int8Array]"?X+=co:x==="[object Uint8Array]"?X+=_i:x==="[object Uint8ClampedArray]"?X+=Ri:x==="[object Int16Array]"?X+=Ni:x==="[object Uint16Array]"?X+=hn:x==="[object Int32Array]"?X+=ts:x==="[object Uint32Array]"?X+=On:x==="[object Float32Array]"?X+=is:x==="[object Float64Array]"?X+=hr:Q(new Error("Failed to get type for BinaryArray"))),Q(X+rs(T))}else if(x==="[object Blob]"){var y=new FileReader;y.onload=function(){var E=ln+g.type+"~"+rs(this.result);Q(ti+es+E)},y.readAsArrayBuffer(g)}else try{Q(JSON.stringify(g))}catch(E){console.error("Couldn't convert value into a JSON string: ",g),Q(null,E)}}function Oo(g){if(g.substring(0,Jn)!==ti)return JSON.parse(g);var Q=g.substring(un),x=g.substring(Jn,un),T;if(x===es&&lo.test(Q)){var X=Q.match(lo);T=X[1],Q=Q.substring(X[0].length)}var y=ho(Q);switch(x){case cn:return y;case es:return O([y],{type:T});case co:return new Int8Array(y);case _i:return new Uint8Array(y);case Ri:return new Uint8ClampedArray(y);case Ni:return new Int16Array(y);case hn:return new Uint16Array(y);case ts:return new Int32Array(y);case On:return new Uint32Array(y);case is:return new Float32Array(y);case hr:return new Float64Array(y);default:throw new Error("Unkown type: "+x)}}var _r={serialize:il,deserialize:Oo,stringToBuffer:ho,bufferToString:rs};function Or(g,Q,x,T){g.executeSql("CREATE TABLE IF NOT EXISTS "+Q.storeName+" (id INTEGER PRIMARY KEY, key unique, value)",[],x,T)}function ui(g){var Q=this,x={db:null};if(g)for(var T in g)x[T]=typeof g[T]!="string"?g[T].toString():g[T];var X=new u(function(y,E){try{x.db=openDatabase(x.name,String(x.version),x.description,x.size)}catch(V){return E(V)}x.db.transaction(function(V){Or(V,x,function(){Q._dbInfo=x,y()},function(q,D){E(D)})},E)});return x.serializer=_r,X}function fi(g,Q,x,T,X,y){g.executeSql(x,T,X,function(E,V){V.code===V.SYNTAX_ERR?E.executeSql("SELECT name FROM sqlite_master WHERE type='table' AND name = ?",[Q.storeName],function(q,D){D.rows.length?y(q,V):Or(q,Q,function(){q.executeSql(x,T,X,y)},y)},y):y(E,V)},y)}function rl(g,Q){var x=this;g=m(g);var T=new u(function(X,y){x.ready().then(function(){var E=x._dbInfo;E.db.transaction(function(V){fi(V,E,"SELECT * FROM "+E.storeName+" WHERE key = ? LIMIT 1",[g],function(q,D){var N=D.rows.length?D.rows.item(0).value:null;N&&(N=E.serializer.deserialize(N)),X(N)},function(q,D){y(D)})})}).catch(y)});return f(T,Q),T}function nl(g,Q){var x=this,T=new u(function(X,y){x.ready().then(function(){var E=x._dbInfo;E.db.transaction(function(V){fi(V,E,"SELECT * FROM "+E.storeName,[],function(q,D){for(var N=D.rows,oe=N.length,xe=0;xe0){E(ns.apply(X,[g,q,x,T-1]));return}V(xe)}})})}).catch(V)});return f(y,x),y}function sl(g,Q,x){return ns.apply(this,[g,Q,x,1])}function ss(g,Q){var x=this;g=m(g);var T=new u(function(X,y){x.ready().then(function(){var E=x._dbInfo;E.db.transaction(function(V){fi(V,E,"DELETE FROM "+E.storeName+" WHERE key = ?",[g],function(){X()},function(q,D){y(D)})})}).catch(y)});return f(T,Q),T}function os(g){var Q=this,x=new u(function(T,X){Q.ready().then(function(){var y=Q._dbInfo;y.db.transaction(function(E){fi(E,y,"DELETE FROM "+y.storeName,[],function(){T()},function(V,q){X(q)})})}).catch(X)});return f(x,g),x}function di(g){var Q=this,x=new u(function(T,X){Q.ready().then(function(){var y=Q._dbInfo;y.db.transaction(function(E){fi(E,y,"SELECT COUNT(key) as c FROM "+y.storeName,[],function(V,q){var D=q.rows.item(0).c;T(D)},function(V,q){X(q)})})}).catch(X)});return f(x,g),x}function Rr(g,Q){var x=this,T=new u(function(X,y){x.ready().then(function(){var E=x._dbInfo;E.db.transaction(function(V){fi(V,E,"SELECT key FROM "+E.storeName+" WHERE id = ? LIMIT 1",[g+1],function(q,D){var N=D.rows.length?D.rows.item(0).key:null;X(N)},function(q,D){y(D)})})}).catch(y)});return f(T,Q),T}function uo(g){var Q=this,x=new u(function(T,X){Q.ready().then(function(){var y=Q._dbInfo;y.db.transaction(function(E){fi(E,y,"SELECT key FROM "+y.storeName,[],function(V,q){for(var D=[],N=0;N '__WebKitDatabaseInfoTable__'",[],function(X,y){for(var E=[],V=0;V0}function dn(g){var Q=this,x={};if(g)for(var T in g)x[T]=g[T];return x.keyPrefix=mo(g,Q._defaultConfig),jO()?(Q._dbInfo=x,x.serializer=_r,u.resolve()):u.reject()}function qO(g){var Q=this,x=Q.ready().then(function(){for(var T=Q._dbInfo.keyPrefix,X=localStorage.length-1;X>=0;X--){var y=localStorage.key(X);y.indexOf(T)===0&&localStorage.removeItem(y)}});return f(x,g),x}function DO(g,Q){var x=this;g=m(g);var T=x.ready().then(function(){var X=x._dbInfo,y=localStorage.getItem(X.keyPrefix+g);return y&&(y=X.serializer.deserialize(y)),y});return f(T,Q),T}function Be(g,Q){var x=this,T=x.ready().then(function(){for(var X=x._dbInfo,y=X.keyPrefix,E=y.length,V=localStorage.length,q=1,D=0;D=0;E--){var V=localStorage.key(E);V.indexOf(y)===0&&localStorage.removeItem(V)}}):X=u.reject("Invalid arguments"),f(X,Q),X}var FO={_driver:"localStorageWrapper",_initStorage:dn,_support:po(),iterate:Be,getItem:DO,setItem:ll,removeItem:bo,clear:qO,length:al,key:Cr,keys:IO,dropInstance:cl},BO=function(Q,x){return Q===x||typeof Q=="number"&&typeof x=="number"&&isNaN(Q)&&isNaN(x)},NO=function(Q,x){for(var T=Q.length,X=0;X{"use strict";function L$(i,e){(e==null||e>i.length)&&(e=i.length);for(var t=0,r=Array(e);t2?r-2:0),s=2;s1?t-1:0),n=1;n1?t-1:0),n=1;n2&&arguments[2]!==void 0?arguments[2]:Fa;if(W$&&W$(i,null),!sn(e))return i;let r=e.length;for(;r--;){let n=e[r];if(typeof n=="string"){let s=t(n);s!==n&&(hE(e)||(e[r]=s),n=s)}i[n]=!0}return i}function xE(i){for(let e=0;e/g),PE=$t(/\${[\w\W]*/g),kE=$t(/^data-[\-\w.\u00B7-\uFFFF]+$/),TE=$t(/^aria-[\-\w]+$/),H$=$t(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),XE=$t(/^(?:\w+script|data):/i),_E=$t(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),RE=$t(/^html$/i),CE=$t(/^[a-z][.\w]*(-[.\w]+)+$/i),K$=$t(/<[/\w!]/g),J$=$t(/<[/\w]/g),ZE=$t(/<\/no(script|embed|frames)/i),UE=$t(/\/>/i),hi={element:1,attribute:2,text:3,cdataSection:4,entityReference:5,entityNode:6,processingInstruction:7,comment:8,document:9,documentType:10,documentFragment:11,notation:12},AE=function(){return typeof window=="undefined"?null:window},EE=function(e,t){if(typeof e!="object"||typeof e.createPolicy!="function")return null;let r=null,n="data-tt-policy-suffix";t&&t.hasAttribute(n)&&(r=t.getAttribute(n));let s="dompurify"+(r?"#"+r:"");try{return e.createPolicy(s,{createHTML(o){return o},createScriptURL(o){return o}})}catch(o){return console.warn("TrustedTypes policy "+s+" could not be created."),null}},eP=function(){return{afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}},nn=function(e,t,r,n){return pt(e,t)&&sn(e[t])?Ze(n.base?Zt(n.base):{},e[t],n.transform):r};function rP(){let i=arguments.length>0&&arguments[0]!==void 0?arguments[0]:AE(),e=M=>rP(M);if(e.version="3.4.13",e.removed=[],!i||!i.document||i.document.nodeType!==hi.document||!i.Element)return e.isSupported=!1,e;let t=i.document,r=t,n=r.currentScript;i.DocumentFragment;let s=i.HTMLTemplateElement,o=i.Node,a=i.Element,l=i.NodeFilter,c=i.NamedNodeMap;c===void 0&&(i.NamedNodeMap||i.MozNamedAttrMap),i.HTMLFormElement;let h=i.DOMParser,O=i.trustedTypes,u=a.prototype,f=Ii(u,"cloneNode"),p=Ii(u,"remove"),m=Ii(u,"nextSibling"),S=Ii(u,"childNodes"),w=Ii(u,"parentNode"),Z=Ii(u,"shadowRoot"),R=Ii(u,"attributes"),A=o&&o.prototype?Ii(o.prototype,"nodeType"):null,k=o&&o.prototype?Ii(o.prototype,"nodeName"):null,P=o&&o.prototype?Ii(o.prototype,"ownerDocument"):null;if(typeof s=="function"){let M=t.createElement("template");M.content&&M.content.ownerDocument&&(t=M.content.ownerDocument)}let C,z="",I,Oe=!1,se=0,te=function(){if(se>0)throw Nn('A configured TRUSTED_TYPES_POLICY callback (createHTML or createScriptURL) must not call DOMPurify.sanitize, as that causes infinite recursion. Do not pass a policy whose callbacks wrap DOMPurify as TRUSTED_TYPES_POLICY; see the "DOMPurify and Trusted Types" section of the README.')},he=function(b){te(),se++;try{return C.createHTML(b)}finally{se--}},ge=function(b){te(),se++;try{return C.createScriptURL(b)}finally{se--}},ye=function(){return Oe||(I=EE(O,n),Oe=!0),I},Y=t,re=Y.implementation,G=Y.createNodeIterator,be=Y.createDocumentFragment,$e=Y.getElementsByTagName,He=r.importNode,de=eP();e.isSupported=typeof tP=="function"&&typeof w=="function"&&re&&re.createHTMLDocument!==void 0;let Ut=yE,Xi=$E,Bi=PE,Xr=kE,Kn=TE,LO=XE,el=_E,WO=CE,tl=H$,qe=null,oo=Ze({},[...F$,...cg,...hg,...Og,...B$]),De=null,ao=Ze({},[...N$,...ug,...G$,...TO]),Ae=Object.seal(eo(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),ln=null,lo=null,ti=Object.seal(eo(null,{tagCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeCheck:{writable:!0,configurable:!1,enumerable:!0,value:null}})),Jn=!0,cn=!0,es=!1,co=!0,_i=!1,Ri=!0,Ni=!1,ts=!1,hn=null,On=null,is=!1,hr=!1,un=!1,fn=!1,ho=!0,rs=!1,il="user-content-",Oo=!0,_r=!1,Or={},ui=null,fi=Ze({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","selectedcontent","style","svg","template","thead","title","video","xmp"]),rl=null,nl=Ze({},["audio","video","img","source","image","track"]),ns=null,sl=Ze({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),ss="http://www.w3.org/1998/Math/MathML",os="http://www.w3.org/2000/svg",di="http://www.w3.org/1999/xhtml",Rr=di,uo=!1,fo=null,VO=Ze({},[ss,os,di],lg),ol=yt(["mi","mo","mn","ms","mtext"]),po=Ze({},ol),mo=yt(["annotation-xml"]),go=Ze({},mo),jO=Ze({},["title","style","font","a","script"]),dn=null,qO=["application/xhtml+xml","text/html"],DO="text/html",Be=null,Cr=null,IO=t.createElement("form"),al=function(b){return b instanceof RegExp||b instanceof Function},bo=function(){let b=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(Cr&&Cr===b)return;(!b||typeof b!="object")&&(b={}),b=Zt(b),dn=qO.indexOf(b.PARSER_MEDIA_TYPE)===-1?DO:b.PARSER_MEDIA_TYPE,Be=dn==="application/xhtml+xml"?lg:Fa,qe=nn(b,"ALLOWED_TAGS",oo,{transform:Be}),De=nn(b,"ALLOWED_ATTR",ao,{transform:Be}),fo=nn(b,"ALLOWED_NAMESPACES",VO,{transform:lg}),ns=nn(b,"ADD_URI_SAFE_ATTR",sl,{transform:Be,base:sl}),rl=nn(b,"ADD_DATA_URI_TAGS",nl,{transform:Be,base:nl}),ui=nn(b,"FORBID_CONTENTS",fi,{transform:Be}),ln=nn(b,"FORBID_TAGS",Zt({}),{transform:Be}),lo=nn(b,"FORBID_ATTR",Zt({}),{transform:Be}),Or=pt(b,"USE_PROFILES")?b.USE_PROFILES&&typeof b.USE_PROFILES=="object"?Zt(b.USE_PROFILES):b.USE_PROFILES:!1,Jn=b.ALLOW_ARIA_ATTR!==!1,cn=b.ALLOW_DATA_ATTR!==!1,es=b.ALLOW_UNKNOWN_PROTOCOLS||!1,co=b.ALLOW_SELF_CLOSE_IN_ATTR!==!1,_i=b.SAFE_FOR_TEMPLATES||!1,Ri=b.SAFE_FOR_XML!==!1,Ni=b.WHOLE_DOCUMENT||!1,hr=b.RETURN_DOM||!1,un=b.RETURN_DOM_FRAGMENT||!1,fn=b.RETURN_TRUSTED_TYPE||!1,is=b.FORCE_BODY||!1,ho=b.SANITIZE_DOM!==!1,rs=b.SANITIZE_NAMED_PROPS||!1,Oo=b.KEEP_CONTENT!==!1,_r=b.IN_PLACE||!1,tl=vE(b.ALLOWED_URI_REGEXP)?b.ALLOWED_URI_REGEXP:H$,Rr=typeof b.NAMESPACE=="string"?b.NAMESPACE:di,po=pt(b,"MATHML_TEXT_INTEGRATION_POINTS")&&b.MATHML_TEXT_INTEGRATION_POINTS&&typeof b.MATHML_TEXT_INTEGRATION_POINTS=="object"?Zt(b.MATHML_TEXT_INTEGRATION_POINTS):Ze({},ol),go=pt(b,"HTML_INTEGRATION_POINTS")&&b.HTML_INTEGRATION_POINTS&&typeof b.HTML_INTEGRATION_POINTS=="object"?Zt(b.HTML_INTEGRATION_POINTS):Ze({},mo);let _=pt(b,"CUSTOM_ELEMENT_HANDLING")&&b.CUSTOM_ELEMENT_HANDLING&&typeof b.CUSTOM_ELEMENT_HANDLING=="object"?Zt(b.CUSTOM_ELEMENT_HANDLING):eo(null);if(Ae=eo(null),pt(_,"tagNameCheck")&&al(_.tagNameCheck)&&(Ae.tagNameCheck=_.tagNameCheck),pt(_,"attributeNameCheck")&&al(_.attributeNameCheck)&&(Ae.attributeNameCheck=_.attributeNameCheck),pt(_,"allowCustomizedBuiltInElements")&&typeof _.allowCustomizedBuiltInElements=="boolean"&&(Ae.allowCustomizedBuiltInElements=_.allowCustomizedBuiltInElements),$t(Ae),_i&&(cn=!1),un&&(hr=!0),Or&&(qe=Ze({},B$),De=eo(null),Or.html===!0&&(Ze(qe,F$),Ze(De,N$)),Or.svg===!0&&(Ze(qe,cg),Ze(De,ug),Ze(De,TO)),Or.svgFilters===!0&&(Ze(qe,hg),Ze(De,ug),Ze(De,TO)),Or.mathMl===!0&&(Ze(qe,Og),Ze(De,G$),Ze(De,TO))),ti.tagCheck=null,ti.attributeCheck=null,pt(b,"ADD_TAGS")&&(typeof b.ADD_TAGS=="function"?ti.tagCheck=b.ADD_TAGS:sn(b.ADD_TAGS)&&(qe===oo&&(qe=Zt(qe)),Ze(qe,b.ADD_TAGS,Be))),pt(b,"ADD_ATTR")&&(typeof b.ADD_ATTR=="function"?ti.attributeCheck=b.ADD_ATTR:sn(b.ADD_ATTR)&&(De===ao&&(De=Zt(De)),Ze(De,b.ADD_ATTR,Be))),pt(b,"ADD_URI_SAFE_ATTR")&&sn(b.ADD_URI_SAFE_ATTR)&&Ze(ns,b.ADD_URI_SAFE_ATTR,Be),pt(b,"FORBID_CONTENTS")&&sn(b.FORBID_CONTENTS)&&(ui===fi&&(ui=Zt(ui)),Ze(ui,b.FORBID_CONTENTS,Be)),pt(b,"ADD_FORBID_CONTENTS")&&sn(b.ADD_FORBID_CONTENTS)&&(ui===fi&&(ui=Zt(ui)),Ze(ui,b.ADD_FORBID_CONTENTS,Be)),Oo&&(qe["#text"]=!0),Ni&&Ze(qe,["html","head","body"]),qe.table&&(Ze(qe,["tbody"]),delete ln.tbody),b.TRUSTED_TYPES_POLICY){if(typeof b.TRUSTED_TYPES_POLICY.createHTML!="function")throw Nn('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof b.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw Nn('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');let L=C;C=b.TRUSTED_TYPES_POLICY;try{z=he("")}catch(ne){throw C=L,ne}}else b.TRUSTED_TYPES_POLICY===null?(C=void 0,z=""):(C===void 0&&(C=ye()),C&&typeof z=="string"&&(z=he("")));yt&&yt(b),Cr=b},ll=Ze({},[...cg,...hg,...QE]),cl=Ze({},[...Og,...wE]),FO=function(b,_,L){return _.namespaceURI===di?b==="svg":_.namespaceURI===ss?b==="svg"&&(L==="annotation-xml"||po[L]):!!ll[b]},BO=function(b,_,L){return _.namespaceURI===di?b==="math":_.namespaceURI===os?b==="math"&&go[L]:!!cl[b]},NO=function(b,_,L){return _.namespaceURI===os&&!go[L]||_.namespaceURI===ss&&!po[L]?!1:!cl[b]&&(jO[b]||!ll[b])},hl=function(b){let _=w(b);(!_||!_.tagName)&&(_={namespaceURI:Rr,tagName:"template"});let L=Fa(b.tagName),ne=Fa(_.tagName);return fo[b.namespaceURI]?b.namespaceURI===os?FO(L,_,ne):b.namespaceURI===ss?BO(L,_,ne):b.namespaceURI===di?NO(L,_,ne):!!(dn==="application/xhtml+xml"&&fo[b.namespaceURI]):!1},It=function(b){Js(e.removed,{element:b});try{w(b).removeChild(b)}catch(_){if(p(b),!w(b))throw Nn("a node selected for removal could not be detached from its tree and cannot be safely returned; refusing to sanitize in place")}},pn=function(b){Gi(b);let _=S(b);if(_){let ne=[];Ks(_,ue=>{Js(ne,ue)}),Ks(ne,ue=>{try{p(ue)}catch(me){}})}let L=R(b);if(L)for(let ne=L.length-1;ne>=0;--ne){let ue=L[ne],me=ue&&ue.name;if(typeof me=="string")try{b.removeAttribute(me)}catch(ze){}}},Ft=function(b,_){try{Js(e.removed,{attribute:_.getAttributeNode(b),from:_})}catch(L){Js(e.removed,{attribute:null,from:_})}if(_.removeAttribute(b),b==="is")if(hr||un)try{It(_)}catch(L){}else try{_.setAttribute(b,"")}catch(L){}},GO=function(b){let _=R(b);if(_)for(let L=_.length-1;L>=0;--L){let ne=_[L],ue=ne&&ne.name;if(!(typeof ue!="string"||De[Be(ue)]))try{b.removeAttribute(ue)}catch(me){}}},Gi=function(b){let _=[b];for(;_.length>0;){let L=_.pop();(A?A(L):L.nodeType)===hi.element&&GO(L);let ue=S(L);if(ue)for(let me=ue.length-1;me>=0;--me)_.push(ue[me])}},xo=function(b){if(!Ri)return;let _=[b];for(;_.length>0;){let L=_.pop(),ne=A?A(L):L.nodeType;if(ne===hi.processingInstruction||ne===hi.comment&&dt(J$,L.data)){try{p(L)}catch(me){}continue}if(ne===hi.element){let me=L,ze=Be(k?k(L):L.nodeName);try{me.hasAttribute&&me.hasAttribute("patchsrc")&&me.removeAttribute("patchsrc"),me.hasAttribute&&me.hasAttribute("for")&&ze!=="label"&&ze!=="output"&&me.removeAttribute("for")}catch(Ne){}}let ue=S(L);if(ue)for(let me=ue.length-1;me>=0;--me)_.push(ue[me])}},Ol=function(b){let _=null,L=null;if(is)b=""+b;else{let me=j$(b,/^[\r\n\t ]+/);L=me&&me[0]}dn==="application/xhtml+xml"&&Rr===di&&(b=''+b+"");let ne=C?he(b):b;if(Rr===di)try{_=new h().parseFromString(ne,dn)}catch(me){}if(!_||!_.documentElement){_=re.createDocument(Rr,"template",null);try{_.documentElement.innerHTML=uo?z:ne}catch(me){}}let ue=_.body||_.documentElement;return b&&L&&ue.insertBefore(t.createTextNode(L),ue.childNodes[0]||null),Rr===di?$e.call(_,Ni?"html":"body")[0]:Ni?_.documentElement:ue},ul=function(b){let _=P?P(b):b.ownerDocument;return G.call(_||b,b,l.SHOW_ELEMENT|l.SHOW_COMMENT|l.SHOW_TEXT|l.SHOW_PROCESSING_INSTRUCTION|l.SHOW_CDATA_SECTION,null)},Zr=function(b){return b=Da(b,Ut," "),b=Da(b,Xi," "),b=Da(b,Bi," "),b},So=function(b){var _;b.normalize();let L=P?P(b):b.ownerDocument,ne=G.call(L||b,b,l.SHOW_TEXT|l.SHOW_COMMENT|l.SHOW_CDATA_SECTION|l.SHOW_PROCESSING_INSTRUCTION,null),ue=ne.nextNode();for(;ue;)ue.data=Zr(ue.data),ue=ne.nextNode();let me=(_=b.querySelectorAll)===null||_===void 0?void 0:_.call(b,"template");me&&Ks(me,ze=>{g(ze.content)&&So(ze.content)})},as=function(b){let _=k?k(b):null;return typeof _!="string"||Be(_)!=="form"?!1:typeof b.nodeName!="string"||typeof b.textContent!="string"||typeof b.removeChild!="function"||b.attributes!==R(b)||typeof b.removeAttribute!="function"||typeof b.setAttribute!="function"||typeof b.namespaceURI!="string"||typeof b.insertBefore!="function"||typeof b.hasChildNodes!="function"||b.nodeType!==A(b)||b.childNodes!==S(b)},g=function(b){if(!A||typeof b!="object"||b===null)return!1;try{return A(b)===hi.documentFragment}catch(_){return!1}},Q=function(b){if(!A||typeof b!="object"||b===null)return!1;try{return typeof A(b)=="number"}catch(_){return!1}};function x(M,b,_){M.length!==0&&Ks(M,L=>{L.call(e,b,_,Cr)})}let T=function(b,_){return!!(Ri&&b.hasChildNodes()&&!Q(b.firstElementChild)&&dt(K$,b.textContent)&&dt(K$,b.innerHTML)||Ri&&b.namespaceURI===di&&_==="style"&&Q(b.firstElementChild)||b.nodeType===hi.processingInstruction||Ri&&b.nodeType===hi.comment&&dt(J$,b.data))},X=function(b,_,L){if(!ln[_]&&D(_)&&(Ae.tagNameCheck instanceof RegExp&&dt(Ae.tagNameCheck,_)||Ae.tagNameCheck instanceof Function&&Ae.tagNameCheck(_)))return!1;if(Oo&&!ui[_]){let ne=w(b),ue=S(b);if(ue&&ne){let me=ue.length;for(let ze=me-1;ze>=0;--ze){let Ne=b===L?f(ue[ze],!0):ue[ze];ne.insertBefore(Ne,m(b))}}}return It(b),!0},y=function(b,_,L,ne){return b.length===0?_:_===L||_===ne?Zt(_):_},E=function(b,_){if(x(de.beforeSanitizeElements,b,null),b!==_&&w(b)===null)return _r&&Gi(b),!0;if(as(b))return It(b),!0;let L=Be(k?k(b):b.nodeName);if(qe=y(de.uponSanitizeElement,qe,oo,hn),x(de.uponSanitizeElement,b,{tagName:L,allowedTags:qe}),b!==_&&w(b)===null)return _r&&Gi(b),!0;if(T(b,L))return It(b),!0;if(ln[L]||!(ti.tagCheck instanceof Function&&ti.tagCheck(L))&&!qe[L]){let ue=X(b,L,_);return ue===!1&&x(de.afterSanitizeElements,b,null),ue}if((A?A(b):b.nodeType)===hi.element&&!hl(b)||(L==="noscript"||L==="noembed"||L==="noframes")&&dt(ZE,b.innerHTML))return It(b),!0;if(_i&&b.nodeType===hi.text){let ue=Zr(b.textContent);b.textContent!==ue&&(Js(e.removed,{element:b.cloneNode()}),b.textContent=ue)}return x(de.afterSanitizeElements,b,null),!1},V=function(b,_,L){if(lo[_]||Ri&&_==="patchsrc"||Ri&&_==="for"&&b!=="label"&&b!=="output"||ho&&(_==="id"||_==="name")&&(L in t||L in IO))return!1;let ne=De[_]||ti.attributeCheck instanceof Function&&ti.attributeCheck(_,b);if(!(cn&&dt(Xr,_))){if(!(Jn&&dt(Kn,_))){if(ne){if(!ns[_]){if(!dt(tl,Da(L,el,""))){if(!((_==="src"||_==="xlink:href"||_==="href")&&b!=="script"&&q$(L,"data:")===0&&rl[b])){if(!(es&&!dt(LO,Da(L,el,"")))){if(L)return!1}}}}}else if(!(D(b)&&(Ae.tagNameCheck instanceof RegExp&&dt(Ae.tagNameCheck,b)||Ae.tagNameCheck instanceof Function&&Ae.tagNameCheck(b))&&(Ae.attributeNameCheck instanceof RegExp&&dt(Ae.attributeNameCheck,_)||Ae.attributeNameCheck instanceof Function&&Ae.attributeNameCheck(_,b))||_==="is"&&Ae.allowCustomizedBuiltInElements&&(Ae.tagNameCheck instanceof RegExp&&dt(Ae.tagNameCheck,L)||Ae.tagNameCheck instanceof Function&&Ae.tagNameCheck(L))))return!1}}return!0},q=Ze({},["annotation-xml","color-profile","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","missing-glyph"]),D=function(b){return!q[Fa(b)]&&dt(WO,b)},N=function(b,_,L,ne){if(C&&typeof O=="object"&&typeof O.getAttributeType=="function"&&!L)switch(O.getAttributeType(b,_)){case"TrustedHTML":return he(ne);case"TrustedScriptURL":return ge(ne)}return ne},oe=function(b,_,L,ne){try{L?b.setAttributeNS(L,_,ne):b.setAttribute(_,ne),as(b)?It(b):V$(e.removed)}catch(ue){Ft(_,b)}},xe=function(b){x(de.beforeSanitizeAttributes,b,null);let _=b.attributes;if(!_||as(b))return;De=y(de.uponSanitizeAttribute,De,ao,On);let L={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:De,forceKeepAttr:void 0},ne=_.length,ue=Be(b.nodeName);for(;ne--;){let me=_[ne],ze=me.name,Ne=me.namespaceURI,Pt=me.value,gt=Be(ze),HO=Pt,At=ze==="value"?HO:pE(HO);if(L.attrName=gt,L.attrValue=At,L.keepAttr=!0,L.forceKeepAttr=void 0,x(de.uponSanitizeAttribute,b,L),At=L.attrValue,rs&&(gt==="id"||gt==="name")&&q$(At,il)!==0&&(Ft(ze,b),At=il+At),Ri&&dt(/((--!?|])>)|<\/(style|script|title|xmp|textarea|noscript|iframe|noembed|noframes)/i,At)){Ft(ze,b);continue}if(gt==="attributename"&&j$(At,"href")){Ft(ze,b);continue}if(!L.forceKeepAttr){if(!L.keepAttr){Ft(ze,b);continue}if(!co&&dt(UE,At)){Ft(ze,b);continue}if(_i&&(At=Zr(At)),!V(ue,gt,At)){Ft(ze,b);continue}At=N(ue,gt,Ne,At),At!==HO&&oe(b,ze,Ne,At)}}x(de.afterSanitizeAttributes,b,null)},Xe=function(b){let _=null,L=ul(b);for(x(de.beforeSanitizeShadowDOM,b,null);_=L.nextNode();)if(x(de.uponSanitizeShadowNode,_,null),E(_,b),xe(_),g(_.content)&&Xe(_.content),(A?A(_):_.nodeType)===hi.element){let ue=Z(_);g(ue)&&(Ue(ue),Xe(ue))}x(de.afterSanitizeShadowDOM,b,null)},Ue=function(b){let _=[{node:b,shadow:null}];for(;_.length>0;){let L=_.pop();if(L.shadow){Xe(L.shadow);continue}let ne=L.node,me=(A?A(ne):ne.nodeType)===hi.element,ze=S(ne);if(ze)for(let Ne=ze.length-1;Ne>=0;--Ne)_.push({node:ze[Ne],shadow:null});if(me){let Ne=k?k(ne):null;if(typeof Ne=="string"&&Be(Ne)==="template"){let Pt=ne.content;g(Pt)&&_.push({node:Pt,shadow:null})}}if(me){let Ne=Z(ne);g(Ne)&&_.push({node:null,shadow:Ne},{node:Ne,shadow:null})}}};return e.sanitize=function(M){let b=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},_=null,L=null,ne=null,ue=null;if(uo=!M,uo&&(M=""),typeof M!="string"&&!Q(M)&&(M=SE(M),typeof M!="string"))throw Nn("dirty is not a string, aborting");if(!e.isSupported)return M;ts?(qe=hn,De=On):bo(b),(de.uponSanitizeElement.length>0||de.uponSanitizeAttribute.length>0)&&(qe=Zt(qe)),de.uponSanitizeAttribute.length>0&&(De=Zt(De)),e.removed=[];let me=_r&&typeof M!="string"&&Q(M);if(me){xo(M);let Pt=k?k(M):M.nodeName;if(typeof Pt=="string"){let gt=Be(Pt);if(!qe[gt]||ln[gt])throw pn(M),Nn("root node is forbidden and cannot be sanitized in-place")}if(as(M))throw pn(M),Nn("root node is clobbered and cannot be sanitized in-place");try{Ue(M)}catch(gt){throw pn(M),gt}}else if(Q(M))_=Ol(""),L=_.ownerDocument.importNode(M,!0),L.nodeType===hi.element&&L.nodeName==="BODY"||L.nodeName==="HTML"?_=L:_.appendChild(L),Ue(L);else{if(!hr&&!_i&&!Ni&&M.indexOf("<")===-1)return C&&fn?he(M):M;if(_=Ol(M),!_)return hr?null:fn?z:""}_&&is&&It(_.firstChild);let ze=me?M:_;try{let Pt=ul(ze);for(;ne=Pt.nextNode();)E(ne,ze),xe(ne),g(ne.content)&&Xe(ne.content)}catch(Pt){throw me&&(pn(M),Ks(e.removed,gt=>{gt.element&&Gi(gt.element)})),Pt}if(me)return Ks(e.removed,Pt=>{Pt.element&&Gi(Pt.element)}),_i&&So(M),M;if(hr){if(_i&&So(_),un)for(ue=be.call(_.ownerDocument);_.firstChild;)ue.appendChild(_.firstChild);else ue=_;return(De.shadowroot||De.shadowrootmode)&&(ue=He.call(r,ue,!0)),ue}let Ne=Ni?_.outerHTML:_.innerHTML;return Ni&&qe["!doctype"]&&_.ownerDocument&&_.ownerDocument.doctype&&_.ownerDocument.doctype.name&&dt(RE,_.ownerDocument.doctype.name)&&(Ne=" `+Ne),_i&&(Ne=Zr(Ne)),C&&fn?he(Ne):Ne},e.setConfig=function(){let M=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};bo(M),ts=!0,hn=qe,On=De},e.clearConfig=function(){Cr=null,ts=!1,hn=null,On=null,C=I,z=""},e.isValidAttribute=function(M,b,_){Cr||bo({});let L=Be(M),ne=Be(b);return V(L,ne,_)},e.addHook=function(M,b){typeof b=="function"&&pt(de,M)&&Js(de[M],b)},e.removeHook=function(M,b){if(pt(de,M)){if(b!==void 0){let _=fE(de[M],b);return _===-1?void 0:dE(de[M],_,1)[0]}return V$(de[M])}},e.removeHooks=function(M){pt(de,M)&&(de[M]=[])},e.removeAllHooks=function(){de=eP()},e}var zE=rP();nP.exports=zE});var Sg=KO(cu());var Le=[/^\s*[.#%]?(include|incbin|embed)\s+"(.+?)"/gmi,/^\s*([;']|[/][/])#(resource)\s+"(.+?)"/gm],Ie=[/^\s*([;]|[/][/])#link\s+"(.+?)"/gm],$o=[/^\s*(`include|[.]include)\s+"(.+?)"/gmi,/^\s*\$(include|\$dofile|\$write_image_in_table)\('(.+?)'/gmi,{re:/^\s*([.]arch)\s+(\w+)/gmi,suffix:".json"},/\$readmem[bh]\("(.+?)"/gmi],IP=[{re:/^\s*[.#%]?\s*include\s+<(.+?)>/gmi,system:!0}];function qg(i){let e=i&&Ji(i);return e&&e.includeDirs&&e.includeDirs.length?IP:[]}var Vg=[/^\s+(USE|ASM)\s+(\S+[.]\S+)/gm],FP=[/^[!]src\s+"(.+?)"/gmi],BP=[{re:/^\s*import\s*"(.+?)";/gmi,suffix:".wiz"},/^\s*embed\s*"(.+?)";/gmi],NP=[/^\s*(import)\s*"(.+?)"/gmi],GP=[/^\s*%%\s*#include\s+"(.+?)"/gm],jg={apple2:{preloadFS:"65-apple2"},c64:{preloadFS:"65-c64"},vic20:{preloadFS:"65-vic20"},nes:{preloadFS:"65-nes"},atari8:{preloadFS:"65-atari8"},vector:{preloadFS:"65-none"},atari7800:{preloadFS:"65-none"},devel:{preloadFS:"65-none"},vcs:{preloadFS:"65-atari2600"},pce:{preloadFS:"65-pce"},exidy:{preloadFS:"65-none"}},Po={dasm:{id:"dasm",name:"DASM",kind:"assembler",arch:"6502",extensions:[".dasm"],editorStyle:"6502",helpURL:"https://raw.githubusercontent.com/dasm-assembler/dasm/refs/tags/v2.20.17/docs/dasm.txt",wasmModule:"dasm-wasisdk",version:"2.20.17",includePatterns:Le,linkPatterns:Ie},acme:{id:"acme",name:"ACME",kind:"assembler",arch:"6502",extensions:[".acme"],editorStyle:"6502",helpURL:"https://raw.githubusercontent.com/sehugg/acme/main/docs/QuickRef.txt",wasmModule:"acme",version:"0.97.1",includePatterns:[...Le,...FP],linkPatterns:Ie},xa:{id:"xa",name:"XA",kind:"assembler",arch:"6502",extensions:[".xa"],editorStyle:"6502",helpURL:"https://www.floodgap.com/retrotech/xa/",wasmModule:"xa",version:"2.4.1",includePatterns:Le,linkPatterns:Ie},nesasm:{id:"nesasm",name:"NESASM",kind:"assembler",arch:"6502",extensions:[".nesasm"],editorStyle:"6502",wasmModule:"nesasm",version:"3.1",includePatterns:Le,linkPatterns:Ie},merlin32:{id:"merlin32",name:"Merlin 32",kind:"assembler",arch:"6502",extensions:[".lnk"],editorStyle:"6502",wasmModule:"merlin32",version:"1.1.10",includePatterns:[...Le,...Vg],linkPatterns:Ie},cc65:{id:"cc65",name:"cc65",kind:"compiler",arch:"6502",extensions:[".c",".h"],includeDirs:["/include","/asminc"],editorStyle:"text/x-csrc",helpURL:"https://cc65.github.io/doc/cc65.html",wasmModule:"cc65",version:"2.19",platforms:jg,includePatterns:Le,linkPatterns:Ie},ca65:{id:"ca65",name:"ca65",kind:"assembler",arch:"6502",extensions:[".s",".ca65",".inc"],includeDirs:["/include","/asminc"],editorStyle:"6502",helpURL:"https://cc65.github.io/doc/ca65.html",wasmModule:"ca65",version:"2.19",platforms:jg,includePatterns:Le,linkPatterns:Ie},ld65:{id:"ld65",name:"ld65",kind:"linker",arch:"6502",extensions:[],wasmModule:"ld65",version:"2.19"},sdcc:{id:"sdcc",name:"SDCC",kind:"compiler",arch:"z80",extensions:[".c",".h"],includeDirs:["/include"],editorStyle:"text/x-csrc",helpURL:"http://sdcc.sourceforge.net/doc/sdccman.pdf",wasmModule:"sdcc",version:"3.6.5",platforms:{default:{preloadFS:"sdcc"}},includePatterns:Le,linkPatterns:Ie},sdasz80:{id:"sdasz80",name:"sdasz80",kind:"assembler",arch:"z80",extensions:[".s"],includeDirs:["/include"],editorStyle:"z80",wasmModule:"sdasz80",version:"02.00",platforms:{default:{preloadFS:"sdcc"}},includePatterns:Le,linkPatterns:Ie},sdasgb:{id:"sdasgb",name:"sdasgb",kind:"assembler",arch:"gbz80",extensions:[".sgb"],includeDirs:["/include"],editorStyle:"z80",wasmModule:"sdasgb",platforms:{default:{preloadFS:"sdcc"}},includePatterns:Le,linkPatterns:Ie},sdldz80:{id:"sdldz80",name:"sdldz80",kind:"linker",arch:"z80",extensions:[],wasmModule:"sdldz80",version:"03.00"},sccz80:{id:"sccz80",name:"sccz80",kind:"compiler",arch:"z80",extensions:[".scc"],platforms:{default:{preloadFS:"sccz80"}},noWorkerBuild:!0},naken:{id:"naken",name:"Naken",kind:"assembler",extensions:[".ns"],noWorkerBuild:!0},zmac:{id:"zmac",name:"zmac",kind:"assembler",arch:"z80",extensions:[".z"],editorStyle:"z80",helpURL:"https://raw.githubusercontent.com/sehugg/zmac/master/doc.txt",wasmModule:"zmac",version:"28jul2018",includePatterns:Le,linkPatterns:Ie},jsasm:{id:"jsasm",name:"JSASM",kind:"assembler",extensions:[".asm"],editorStyle:"z80",includePatterns:$o,linkPatterns:[]},xasm6809:{id:"xasm6809",name:"XASM6809",kind:"assembler",arch:"6809",extensions:[".xasm"],editorStyle:"6809",wasmModule:"xasm6809",includePatterns:[...Le,...Vg],linkPatterns:Ie},cmoc:{id:"cmoc",name:"CMOC",kind:"compiler",arch:"6809",extensions:[".c",".h"],editorStyle:"text/x-csrc",helpURL:"http://perso.b2b2c.ca/~sarrazip/dev/cmoc.html",wasmModule:"cmoc",version:"0.1.67",includePatterns:Le,linkPatterns:Ie},lwasm:{id:"lwasm",name:"LWASM",kind:"assembler",arch:"6809",extensions:[".lwasm"],wasmModule:"lwasm",version:"4.17",includePatterns:Le,linkPatterns:Ie},lwlink:{id:"lwlink",name:"LWLINK",kind:"linker",arch:"6809",extensions:[],wasmModule:"lwlink",version:"4.17"},vasmarm:{id:"vasmarm",name:"vasm (ARM)",kind:"assembler",arch:"arm32",extensions:[".vasm"],editorStyle:"vasm",wasmModule:"vasmarm_std",version:"1.8k",includePatterns:Le,linkPatterns:Ie},armips:{id:"armips",name:"armips",kind:"assembler",arch:"arm32",extensions:[".armips"],editorStyle:"vasm",wasmModule:"armips",version:"0.11.0",includePatterns:Le,linkPatterns:Ie},armtcc:{id:"armtcc",name:"TCC (ARM)",kind:"compiler",arch:"arm32",extensions:[".c",".s"],includeDirs:["/include"],wasiFSZip:"arm32-fs.zip",editorStyle:"text/x-csrc",wasmModule:"arm-tcc",includePatterns:Le,linkPatterns:Ie},armtcclink:{id:"armtcclink",name:"TCC (ARM) link",kind:"linker",arch:"arm32",extensions:[],wasmModule:"arm-tcc"},smlrc:{id:"smlrc",name:"SmallerC",kind:"compiler",arch:"x86",extensions:[".c"],editorStyle:"text/x-csrc",wasmModule:"smlrc",includePatterns:Le,linkPatterns:Ie},yasm:{id:"yasm",name:"YASM",kind:"assembler",arch:"x86",extensions:[".asm"],editorStyle:"gas",wasmModule:"yasm",version:"1.3.0",includePatterns:Le,linkPatterns:Ie},oscar64:{id:"oscar64",name:"Oscar64",kind:"compiler",arch:"6502",extensions:[".c",".cpp",".cc",".o64"],includeDirs:["/include"],wasiFSZip:"oscar64-fs.zip",editorStyle:"text/x-csrc",helpURL:"https://github.com/drmortalwombat/oscar64/blob/v1.32.266/oscar64.md",wasmModule:"oscar64",version:"1.32.266",includePatterns:Le,linkPatterns:Ie},bataribasic:{id:"bataribasic",name:"batari Basic",kind:"compiler",arch:"6502",extensions:[".bb",".bas"],includeDirs:["/includes"],editorStyle:"bataribasic",helpURL:"help/bataribasic/manual.html",wasiFSZip:"bb-fs.zip",platforms:{default:{}},includePatterns:Le,linkPatterns:Ie},fastbasic:{id:"fastbasic",name:"FastBasic",kind:"compiler",arch:"6502",extensions:[".bas",".fb",".fbi"],editorStyle:"fastbasic",helpURL:"https://github.com/dmsc/fastbasic/blob/v4.4/manual.md",wasmModule:"fastbasic-int",version:"4.4",platforms:{default:{preloadFS:"65-atari8"}},includePatterns:Le,linkPatterns:Ie},cc2600:{id:"cc2600",name:"CC2600",kind:"compiler",arch:"6502",extensions:[".cc2600"],editorStyle:"text/x-csrc",wasmModule:"cc2600",version:"0.4.5",wasiFSZip:"cc2600-fs.zip",includeDirs:["/headers"],includePatterns:Le,linkPatterns:Ie},cc7800:{id:"cc7800",name:"CC7800",kind:"compiler",arch:"6502",extensions:[".cc7800",".c78"],editorStyle:"text/x-csrc",wasmModule:"cc7800",version:"0.2.28",wasiFSZip:"cc7800-fs.zip",includeDirs:["/headers"],includePatterns:Le,linkPatterns:Ie},basic:{id:"basic",name:"BASIC",kind:"interpreter",extensions:[".bas"],editorStyle:"basic"},wiz:{id:"wiz",name:"wiz",kind:"compiler",extensions:[".wiz"],includeDirs:["/common/$platform"],editorStyle:"text/x-wiz",helpURL:"https://github.com/wiz-lang/wiz/blob/master/readme.md#wiz",wasmModule:"wiz",version:"0.1.2",platforms:{default:{preloadFS:"wiz"}},includePatterns:BP},ecs:{id:"ecs",name:"ECS",kind:"assembler",arch:"6502",extensions:[".ecs"],editorStyle:"ecs",platforms:{vcs:{preloadFS:"65-atari2600"},nes:{preloadFS:"65-nes"},c64:{preloadFS:"65-c64"}},includePatterns:[...Le,...NP]},inform6:{id:"inform6",name:"Inform 6",kind:"compiler",arch:"zmachine",extensions:[".inf"],editorStyle:"inform6",wasmModule:"inform",version:"6.34",platforms:{default:{preloadFS:"inform"}}},dialog:{id:"dialog",name:"Dialog",kind:"compiler",arch:"zmachine",extensions:[".dg"],editorStyle:"dialog",helpURL:"https://linusakesson.net/dialog/docs/",wasmModule:"dialogc",version:"1c/03-dev",wasiFSZip:"dialog-fs.zip",includeDirs:["/"],includePatterns:GP},verilator:{id:"verilator",name:"Verilator",kind:"hdl",arch:"verilog",extensions:[".v"],editorStyle:"verilog",helpURL:"https://verilator.org/guide/4.205/",wasmModule:"verilator_bin",version:"4.205",includePatterns:$o,linkPatterns:[]},yosys:{id:"yosys",name:"Yosys",kind:"hdl",arch:"verilog",extensions:[],wasmModule:"yosys",includePatterns:$o,linkPatterns:[]},silice:{id:"silice",name:"Silice",kind:"hdl",arch:"verilog",extensions:[".ice"],editorStyle:"verilog",helpURL:"https://github.com/sylefeb/Silice",wasmModule:"silice",version:"0.1",platforms:{default:{preloadFS:"Silice"}},includePatterns:$o,linkPatterns:[]},"llvm-mos":{id:"llvm-mos",name:"LLVM-MOS",kind:"compiler",arch:"6502",extensions:[".c",".cpp",".s",".S",".C"],editorStyle:"text/x-csrc",helpURL:"https://llvm-mos.org/wiki/Welcome",remote:!0,includePatterns:Le,linkPatterns:Ie,server:{version:"latest",platforms:["atari8","c64","nes","pce","vcs"],binpath:"llvm-mos/bin",command:"mos-clang",args:["-Os","-g","-D","__8BITWORKSHOP__","-o","$OUTFILE","$INFILES"]}},remote:{id:"remote",name:"Remote build",kind:"remote",extensions:[],remote:!0}};function Ji(i){return Po[i.replace(/^remote:/,"")]}function Dg(i){let e=[];for(let t in Po){let r=Po[t];for(let n of r.extensions)if(n&&i.endsWith(n)){e.push({meta:r,len:n.length});break}}return e.sort((t,r)=>r.len-t.len).map(t=>t.meta)}function HP(i,e){let t=Ji(i);if(t&&t.platforms){if(e){let n=t.platforms[e];if(n&&n.preloadFS)return n.preloadFS;let s=Ki(e);if(s&&s!==e){let o=t.platforms[s];if(o&&o.preloadFS)return o.preloadFS}}let r=t.platforms.default;if(r&&r.preloadFS)return r.preloadFS}}function hu(i){let e=Ji(i);return e&&e.skeleton?e.skeleton:i.replace(/^remote:/,"")}function yl(i,e){let t=i&&Ji(i);return t&&t.includePatterns?t.includePatterns:e&&e.startsWith("verilog")?$o:Le}function $l(i,e){let t=i&&Ji(i);return t&&t.linkPatterns?t.linkPatterns:e&&e.startsWith("verilog")?[]:Ie}function Pl(i,e){e=e&&Ki(e);let t=i&&Ji(i),r=t&&t.includeDirs||[];return r=r.map(n=>n.replace("$platform",e)),r}function kl(i,e){var t=HP(i,e);if(t)return t;let r=i&&Ji(i);return r&&r.wasiFSZip?"wasi:"+r.wasiFSZip:void 0}function Ou(i,e){let t=[];for(let r of e||[]){let n=r instanceof RegExp?{re:r}:r,s;for(n.re.lastIndex=0;s=n.re.exec(i);){let o=s[n.group!=null?n.group:s.length-1];o&&t.push(n.suffix?o+n.suffix:o)}}return t}var Ig=0,Fg="",Bg=0;function Ng(i,e){try{if(Ig>=10)return;let s=Date.now();if(i===Fg&&s-Bg<1e4)return;Ig++,Fg=i,Bg=s;var t={msg:(i+"").substring(0,300),stack:(e&&e.stack?e.stack+"":"").substring(0,1e3),url:window.location.href},r=Object.keys(t).map(o=>o+"="+encodeURIComponent(t[o])).join("&"),n=new Image;n.src="/err.gif?"+r}catch(s){}}function We(i){i?(Ci(0),$("#pleaseWaitModal").modal("show")):(Ci(1),$("#pleaseWaitModal").modal("hide"))}function Ci(i){$("#pleaseWaitProgressBar").css("width",i*100+"%").show()}function Qe(i){We(!1),bootbox.alert({title:' Alert',message:hs.sanitize(i)})}function Tt(i){We(!1),bootbox.alert(hs.sanitize(i))}function Gg(i){throw Qe(i),new Error(i)}var fu=[],eb=[];(()=>{let i="lc,34,7n,7,7b,19,,,,2,,2,,,20,b,1c,l,g,,2t,7,2,6,2,2,,4,z,,u,r,2j,b,1m,9,9,,o,4,,9,,3,,5,17,3,3b,f,,w,1j,,,,4,8,4,,3,7,a,2,t,,1m,,,,2,4,8,,9,,a,2,q,,2,2,1l,,4,2,4,2,2,3,3,,u,2,3,,b,2,1l,,4,5,,2,4,,k,2,m,6,,,1m,,,2,,4,8,,7,3,a,2,u,,1n,,,,c,,9,,14,,3,,1l,3,5,3,,4,7,2,b,2,t,,1m,,2,,2,,3,,5,2,7,2,b,2,s,2,1l,2,,,2,4,8,,9,,a,2,t,,20,,4,,2,3,,,8,,29,,2,7,c,8,2q,,2,9,b,6,22,2,r,,,,,,1j,e,,5,,2,5,b,,10,9,,2u,4,,6,,2,2,2,p,2,4,3,g,4,d,,2,2,6,,f,,jj,3,qa,3,t,3,t,2,u,2,1s,2,,7,8,,2,b,9,,19,3,3b,2,y,,3a,3,4,2,9,,6,3,63,2,2,,1m,,,7,,,,,2,8,6,a,2,,1c,h,1r,4,1c,7,,,5,,14,9,c,2,w,4,2,2,,3,1k,,,2,3,,,3,1m,8,2,2,48,3,,d,,7,4,,6,,3,2,5i,1m,,5,ek,,5f,x,2da,3,3x,,2o,w,fe,6,2x,2,n9w,4,,a,w,2,28,2,7k,,3,,4,,p,2,5,,47,2,q,i,d,,12,8,p,b,1a,3,1c,,2,4,2,2,13,,1v,6,2,2,2,2,c,,8,,1b,,1f,,,3,2,2,5,2,,,16,2,8,,6m,,2,,4,,fn4,,kh,g,g,g,a6,2,gt,,6a,,45,5,1ae,3,,2,5,4,14,3,4,,4l,2,fx,4,ar,2,49,b,4w,,1i,f,1k,3,1d,4,2,2,1x,3,10,5,,8,1q,,c,2,1g,9,a,4,2,,2n,3,2,,,2,6,,4g,,3,8,l,2,1l,2,,,,,m,,e,7,3,5,5f,8,2,3,,,n,,29,,2,6,,,2,,,2,,2,6j,,2,4,6,2,,2,r,2,2d,8,2,,,2,2y,,,,2,6,,,2t,3,2,4,,5,77,9,,2,6t,,a,2,,,4,,40,4,2,2,4,,w,a,14,6,2,4,8,,9,6,2,3,1a,d,,2,ba,7,,6,,,2a,m,2,7,,2,,2,3e,6,3,,,2,,7,,,20,2,3,,,,9n,2,f0b,5,1n,7,t4,,1r,4,29,,f5k,2,43q,,,3,4,5,8,8,2,7,u,4,44,3,1iz,1j,4,1e,8,,e,,m,5,,f,11s,7,,h,2,7,,2,,5,79,7,c5,4,15s,7,31,7,240,5,gx7k,2o,3k,6o".split(",").map(e=>e?parseInt(e,36):1);for(let e=0,t=0;e>1;if(i=eb[r])e=r+1;else return!0;if(e==t)return!1}}function Hg(i){return i>=127462&&i<=127487}var Kg=8205;function tb(i,e,t=!0,r=!0){return(t?ib:JP)(i,e,r)}function ib(i,e,t){if(e==i.length)return e;e&&rb(i.charCodeAt(e))&&nb(i.charCodeAt(e-1))&&e--;let r=uu(i,e);for(e+=Jg(r);e=0&&Hg(uu(i,o));)s++,o-=2;if(s%2==0)break;e+=2}else break}return e}function JP(i,e,t){for(;e>1;){let r=ib(i,e-2,t);if(r=56320&&i<57344}function nb(i){return i>=55296&&i<56320}function Jg(i){return i<65536?1:2}var Pe=class i{lineAt(e){if(e<0||e>this.length)throw new RangeError(`Invalid position ${e} in document of length ${this.length}`);return this.lineInner(e,!1,1,0)}line(e){if(e<1||e>this.lines)throw new RangeError(`Invalid line number ${e} in ${this.lines}-line document`);return this.lineInner(e,!0,1,0)}replace(e,t,r){[e,t]=ds(this,e,t);let n=[];return this.decompose(0,e,n,2),r.length&&r.decompose(0,r.length,n,3),this.decompose(t,this.length,n,1),Os.from(n,this.length-(t-e)+r.length)}append(e){return this.replace(this.length,this.length,e)}slice(e,t=this.length){[e,t]=ds(this,e,t);let r=[];return this.decompose(e,t,r,0),Os.from(r,t-e)}eq(e){if(e==this)return!0;if(e.length!=this.length||e.lines!=this.lines)return!1;let t=this.scanIdentical(e,1),r=this.length-this.scanIdentical(e,-1),n=new Sn(this),s=new Sn(e);for(let o=t,a=t;;){if(n.next(o),s.next(o),o=0,n.lineBreak!=s.lineBreak||n.done!=s.done||n.value!=s.value)return!1;if(a+=n.value.length,n.done||a>=r)return!0}}iter(e=1){return new Sn(this,e)}iterRange(e,t=this.length){return new Cl(this,e,t)}iterLines(e,t){let r;if(e==null)r=this.iter();else{t==null&&(t=this.lines+1);let n=this.line(e).from;r=this.iterRange(n,Math.max(n,t==this.lines+1?this.length:t<=1?0:this.line(t-1).to))}return new Zl(r)}toString(){return this.sliceString(0)}toJSON(){let e=[];return this.flatten(e),e}constructor(){}static of(e){if(e.length==0)throw new RangeError("A document must have at least one line");return e.length==1&&!e[0]?i.empty:e.length<=32?new ii(e):Os.from(ii.split(e,[]))}},ii=class i extends Pe{constructor(e,t=e1(e)){super(),this.text=e,this.length=t}get lines(){return this.text.length}get children(){return null}lineInner(e,t,r,n){for(let s=0;;s++){let o=this.text[s],a=n+o.length;if((t?r:a)>=e)return new pu(n,a,r,o);n=a+1,r++}}decompose(e,t,r,n){let s=e<=0&&t>=this.length?this:new i(sb(this.text,e,t),Math.min(t,this.length)-Math.max(0,e));if(n&1){let o=r.pop(),a=Rl(s.text,o.text.slice(),0,s.length);if(a.length<=32)r.push(new i(a,o.length+s.length));else{let l=a.length>>1;r.push(new i(a.slice(0,l)),new i(a.slice(l)))}}else r.push(s)}replace(e,t,r){if(!(r instanceof i))return super.replace(e,t,r);[e,t]=ds(this,e,t);let n=Rl(this.text,Rl(r.text,sb(this.text,0,e)),t),s=this.length+r.length-(t-e);return n.length<=32?new i(n,s):Os.from(i.split(n,[]),s)}sliceString(e,t=this.length,r=` `){[e,t]=ds(this,e,t);let n="";for(let s=0,o=0;s<=t&&oe&&o&&(n+=r),es&&(n+=a.slice(Math.max(0,e-s),t-s)),s=l+1}return n}flatten(e){for(let t of this.text)e.push(t)}scanIdentical(){return 0}static split(e,t){let r=[],n=-1;for(let s of e)r.push(s),n+=s.length+1,r.length==32&&(t.push(new i(r,n)),r=[],n=-1);return n>-1&&t.push(new i(r,n)),t}},Os=class i extends Pe{constructor(e,t){super(),this.children=e,this.length=t,this.lines=0;for(let r of e)this.lines+=r.lines}lineInner(e,t,r,n){for(let s=0;;s++){let o=this.children[s],a=n+o.length,l=r+o.lines-1;if((t?l:a)>=e)return o.lineInner(e,t,r,n);n=a+1,r=l+1}}decompose(e,t,r,n){for(let s=0,o=0;o<=t&&s=o){let c=n&((o<=e?1:0)|(l>=t?2:0));o>=e&&l<=t&&!c?r.push(a):a.decompose(e-o,t-o,r,c)}o=l+1}}replace(e,t,r){if([e,t]=ds(this,e,t),r.lines=s&&t<=a){let l=o.replace(e-s,t-s,r),c=this.lines-o.lines+l.lines;if(l.lines>4&&l.lines>c>>6){let h=this.children.slice();return h[n]=l,new i(h,this.length-(t-e)+r.length)}return super.replace(s,a,l)}s=a+1}return super.replace(e,t,r)}sliceString(e,t=this.length,r=` @@ -29,7 +29,7 @@ Tags : ${s}`,O.style.whiteSpace="pre-wrap",O.style.fontFamily="monospace",O.sty
Internal
`:""} - `,buttons:{cancel:{label:"Cancel",className:"btn-default"},ok:{label:"Save",className:"btn-primary",callback:()=>{i.tabSize=parseInt($("#setting_tabSize").val())||8,i.tabsToSpaces=$("#setting_tabsToSpaces").is(":checked"),i.highlightSpecialChars=$("#setting_highlightSpecialChars").is(":checked"),i.highlightWhitespace=$("#setting_highlightWhitespace").is(":checked"),i.highlightTrailingWhitespace=$("#setting_highlightTrailingWhitespace").is(":checked"),i.closeBrackets=$("#setting_closeBrackets").is(":checked"),i.showLineNumbers=$("#setting_showLineNumbers").is(":checked"),e&&(i.debugHighlightTags=$("#setting_debugHighlightTags").is(":checked")),i.showStatusBar=$("#setting_showStatusBar").is(":checked"),iR(i),rR(i),vl(i.showStatusBar)}}}})}function nh(){return typeof navigator!="undefined"?navigator.storage:null}function nR(i){var e=i!==void 0?i:nh();return!!(e&&typeof e.persist=="function")}async function sR(i){var e=i!==void 0?i:nh();try{if(e&&typeof e.estimate=="function"){var t=await e.estimate();return{usage:t&&t.usage,quota:t&&t.quota}}}catch(r){console.log("storage.estimate() failed",r)}return{}}async function oR(i){var e=i!==void 0?i:nh(),t={supported:nR(e),persisted:!1};try{e&&typeof e.persisted=="function"&&(t.persisted=await e.persisted())}catch(n){console.log("storage.persisted() failed",n)}var r=await sR(e);return t.usage=r.usage,t.quota=r.quota,t}async function Id(i){var e=i!==void 0?i:nh(),t=await oR(e);if(!t.supported||t.persisted)return t.granted=!1,t;try{t.persisted=await e.persist(),t.granted=t.persisted}catch(r){console.log("storage.persist() failed",r),t.granted=!1}return t}function aR(i){return i==null&&(i=typeof navigator!="undefined"?navigator.userAgent:""),i?/Edg\/|OPR\/|Chrome\/|Chromium\//.test(i)?"chromium":/Firefox\/|FxiOS\//.test(i)?"firefox":/Safari\//.test(i)?"safari":"other":"other"}function Qv(i){if(typeof i!="number"||!isFinite(i))return"?";for(var e=["bytes","KB","MB","GB","TB"],t=0;i>=1024&&tRequest Local Storage Permissions again.";case"firefox":return"Firefox asks for permission the first time. If you dismissed or blocked that prompt, clear it from the padlock icon in the address bar and try Request Local Storage Permissions again.";case"safari":return"Safari decides on its own, and may delete site data after several days without a visit. Adding this page to your Favorites or Home Screen makes eviction less likely.";default:return"This browser decides on its own whether to keep site data."}}function lR(){return"This browser doesn't support persistent storage, so it may discard your local file edits when it needs disk space. "+Dd}function $v(i,e){var t=wv(i),r;return i.supported?i.persisted?r=(i.granted?"Your browser just granted persistent storage. ":"Your browser is already persisting your local file edits. ")+Dd:r="Your browser has not granted persistent storage, so it may discard your local file edits when it needs disk space.

"+yv()+"

"+Dd:r=lR(),t?r+"

"+t:r}function Pv(i){return"Your browser ran out of space for this site, so your last edit may not have been saved.

"+wv(i)+" Delete unused projects, or use File > Download All Changes as ZIP to back up your work before it is lost."+(i.supported&&!i.persisted?"

"+yv():"")}var Xv=KO(cu());var Oa=class{constructor(e,t){e=e||[],this.lines=e,this.text=t,this.offset2loc=new Map,this.line2offset=new Map;for(var r of e)r.offset>=0&&(this.offset2loc[r.offset]||(this.offset2loc[r.offset]=r),this.line2offset[r.line]||(this.line2offset[r.line]=r.offset))}findLineForOffset(e,t){if(this.offset2loc)for(var r=0;r<=t;r++){var n=this.offset2loc[e];if(n)return n;e--}return null}lineCount(){return this.lines.length}};function kv(i){return"errors"in i}function Tv(i){return"output"in i}var sh=class{constructor(e){this.preset_id=Et(e)}async getRemoteFile(e){return new Promise((t,r)=>yo(e,t,mn(e)?"arraybuffer":"text"))}async getFileData(e){var t="presets/"+this.preset_id+"/"+e,r=await this.getRemoteFile(t);return r&&console.log("read",t,r.length,"bytes"),r}async setFileData(e,t){}onFileSystemUpdate(e){}};var Ms=class{constructor(e,t){this.basefs=e,this.overlayfs=t}async getFileData(e){var t=await this.overlayfs.getFileData(e);return t==null?this.basefs.getFileData(e):t}async setFileData(e,t){return await this.overlayfs.setFileData(e,t),this.basefs.setFileData(e,t)}onFileSystemUpdate(e){this.overlayfs.onFileSystemUpdate(e),this.basefs.onFileSystemUpdate(e)}},oh=class{constructor(e){this.store=e}async getFileData(e){return this.store.getItem(e)}async setFileData(e,t){return this.store.setItem(e,t)}onFileSystemUpdate(e){}};var ah=class{constructor(e,t,r,n){this.filedata={};this.pendingWorkerMessages=0;this.tools_preloaded={};this.isCompiling=!1;this.filename2path={};this.pendingQueries={};this.queryCounter=0;this.worker=e,this.platform_id=t,this.platform=r,this.filesystem=n,e.onmessage=s=>{this.receiveWorkerMessage(s.data)},n.onFileSystemUpdate(async s=>{if(s in this.filedata){var o=await this.filesystem.getFileData(s);o&&(this.updateFile(s,o),this.onFileChanged&&this.onFileChanged(s,o))}})}receiveWorkerMessage(e){if(e&&e.qid!=null){var t=this.pendingQueries[e.qid];t&&(delete this.pendingQueries[e.qid],t(e));return}var r=this.pendingWorkerMessages>1;r?(this.sendBuild(),this.pendingWorkerMessages=1):(this.callbackBuildStatus&&this.callbackBuildStatus(!1),this.isCompiling||(console.log(this.pendingWorkerMessages),console.trace()),this.isCompiling=!1,this.pendingWorkerMessages=0),e&&Tv(e)?this.processBuildResult(e):kv(e)&&this.processBuildListings(e),this.callbackBuildResult(e)}queryWorker(e){return new Promise(t=>{var r=++this.queryCounter;this.pendingQueries[r]=s=>{clearTimeout(n),t(s)};var n=setTimeout(()=>{delete this.pendingQueries[r],t(null)},15e3);e.qid=r,this.worker.postMessage(e)})}getToolForFilename(e){return this.remoteTool?"remote:"+this.remoteTool:this.platform.getToolForFilename(e)}preloadWorker(e){var t=this.getToolForFilename(e);t&&!this.tools_preloaded[t]&&(this.worker.postMessage({preload:t,platform:this.platform_id}),this.tools_preloaded[t]=!0)}pushAllFiles(e,t){e.push(t);var r=wo(this.mainPath);r.length>0&&r!="local"&&e.push(r+"/"+t)}parseIncludeDependencies(e){let t=this.mainPath&&this.getToolForFilename(this.mainPath),r=[];for(let n of Ou(e,yl(t,this.platform_id)))this.pushAllFiles(r,n);return r}parseLinkDependencies(e){let t=this.mainPath&&this.getToolForFilename(this.mainPath),r=[];for(let n of Ou(e,$l(t,this.platform_id)))this.pushAllFiles(r,n);return r}loadFileDependencies(e){let t=this.parseIncludeDependencies(e),r=this.parseLinkDependencies(e),n=t.concat(r);return this.loadFiles(n).then(s=>{if(s)for(let o of s)o.link=r.indexOf(o.path)>=0;return s})}okToSend(){return this.pendingWorkerMessages++==0&&this.mainPath!=null}updateFileInStore(e,t){this.filesystem.setFileData(e,t)}buildWorkerMessage(e){this.preloadWorker(this.mainPath);var t={updates:[],buildsteps:[]},r=this.stripLocalPath(this.mainPath),n=this.getFile(this.mainPath),s=[];t.updates.push({path:r,data:n}),this.filename2path[r]=this.mainPath;let a=this.getToolForFilename(this.mainPath).startsWith("remote:");for(var l of e)(!l.link||a)&&(t.updates.push({path:l.filename,data:l.data}),s.push(l.filename)),this.filename2path[l.filename]=l.path;t.buildsteps.push({path:r,files:[r].concat(s),platform:this.platform_id,tool:this.getToolForFilename(this.mainPath),mainfile:!0});for(var l of e)l.data&&l.link&&(this.preloadWorker(l.filename),t.updates.push({path:l.filename,data:l.data}),t.buildsteps.push({path:l.filename,files:[l.filename].concat(s),platform:this.platform_id,tool:this.getToolForFilename(l.path)}));return this.dataItems&&(t.setitems=this.dataItems),t}async loadFiles(e){var t=[],r=(o,a)=>{t.push({path:o,filename:this.stripLocalPath(o),link:!0,data:a})};for(var n of e)if(n in this.filedata){var s=this.filedata[n];s&&r(n,s)}else{var s=await this.filesystem.getFileData(n);s?(this.filedata[n]=s,r(n,s)):this.filedata[n]=null}return t}getFile(e){return this.filedata[e]}iterateFiles(e){for(var t in this.filedata)e(t,this.getFile(t))}sendBuild(){if(!this.mainPath)throw Error("need to call setMainFile first");var e=this.getFile(this.mainPath);if(e instanceof Uint8Array){this.isCompiling=!0,this.receiveWorkerMessage({output:e,errors:[],listings:null,symbolmap:null,params:{}});return}var t=typeof e=="string"?e:"";return this.loadFileDependencies(t).then(r=>{r||(r=[]);var n=this.buildWorkerMessage(r);this.worker.postMessage(n),this.isCompiling=!0})}updateFile(e,t){this.filedata[e]!=t&&(this.updateFileInStore(e,t),this.filedata[e]=t,this.okToSend()&&(this.callbackBuildStatus&&this.callbackBuildStatus(!0),this.sendBuild()))}setMainFile(e){this.mainPath=e,this.callbackBuildStatus&&this.callbackBuildStatus(!0),this.sendBuild()}processBuildListings(e){if(e.listings){this.listings=e.listings;for(var t in this.listings){var r=this.listings[t];r.lines&&(r.sourcefile=new Oa(r.lines,r.text)),r.asmlines&&(r.assemblyfile=new Oa(r.asmlines,r.text))}}}processBuildResult(e){this.processBuildListings(e),this.processBuildSegments(e)}processBuildSegments(e){var t=this.platform.getMemoryMap&&this.platform.getMemoryMap().main||[];t!=null&&t.length&&t.forEach(r=>r.source="native"),e.segments&&(e.segments.forEach(r=>r.source="linker"),t=t.concat(e.segments||[])),t.sort((r,n)=>r.start-n.start),this.segments=t}getListings(){return this.listings}getListingForFile(e){var t=kt(this.stripLocalPath(e)),r=this.getListings();for(var n in r)if(n==e)return r[n];for(var n in r)if(kt(n)==t)return r[n]}stripLocalPath(e){if(this.mainPath){var t=wo(this.mainPath);t!=""&&e.startsWith(t+"/")&&(e=e.substring(t.length+1))}return e}updateDataItems(e){this.dataItems=e,this.okToSend()&&this.sendBuild()}};function lh(i){var e=Xv.default.createInstance({name:"__"+i,version:2});return e}var cR=`$NAME + `,buttons:{cancel:{label:"Cancel",className:"btn-default"},ok:{label:"Save",className:"btn-primary",callback:()=>{i.tabSize=parseInt($("#setting_tabSize").val())||8,i.tabsToSpaces=$("#setting_tabsToSpaces").is(":checked"),i.highlightSpecialChars=$("#setting_highlightSpecialChars").is(":checked"),i.highlightWhitespace=$("#setting_highlightWhitespace").is(":checked"),i.highlightTrailingWhitespace=$("#setting_highlightTrailingWhitespace").is(":checked"),i.closeBrackets=$("#setting_closeBrackets").is(":checked"),i.showLineNumbers=$("#setting_showLineNumbers").is(":checked"),e&&(i.debugHighlightTags=$("#setting_debugHighlightTags").is(":checked")),i.showStatusBar=$("#setting_showStatusBar").is(":checked"),iR(i),rR(i),vl(i.showStatusBar)}}}})}function nh(){return typeof navigator!="undefined"?navigator.storage:null}function nR(i){var e=i!==void 0?i:nh();return!!(e&&typeof e.persist=="function")}async function sR(i){var e=i!==void 0?i:nh();try{if(e&&typeof e.estimate=="function"){var t=await e.estimate();return{usage:t&&t.usage,quota:t&&t.quota}}}catch(r){console.log("storage.estimate() failed",r)}return{}}async function oR(i){var e=i!==void 0?i:nh(),t={supported:nR(e),persisted:!1};try{e&&typeof e.persisted=="function"&&(t.persisted=await e.persisted())}catch(n){console.log("storage.persisted() failed",n)}var r=await sR(e);return t.usage=r.usage,t.quota=r.quota,t}async function Id(i){var e=i!==void 0?i:nh(),t=await oR(e);if(!t.supported||t.persisted)return t.granted=!1,t;try{t.persisted=await e.persist(),t.granted=t.persisted}catch(r){console.log("storage.persist() failed",r),t.granted=!1}return t}function aR(i){return i==null&&(i=typeof navigator!="undefined"?navigator.userAgent:""),i?/Edg\/|OPR\/|Chrome\/|Chromium\//.test(i)?"chromium":/Firefox\/|FxiOS\//.test(i)?"firefox":/Safari\//.test(i)?"safari":"other":"other"}function Qv(i){if(typeof i!="number"||!isFinite(i))return"?";for(var e=["bytes","KB","MB","GB","TB"],t=0;i>=1024&&tRequest Local Storage Permissions again.";case"firefox":return"Firefox asks for permission the first time. If you dismissed or blocked that prompt, clear it from the padlock icon in the address bar and try Request Local Storage Permissions again.";case"safari":return"Safari decides on its own, and may delete site data after several days without a visit. Adding this page to your Favorites or Home Screen makes eviction less likely.";default:return"This browser decides on its own whether to keep site data."}}function lR(){return"This browser doesn't support persistent storage, so it may discard your local file edits when it needs disk space. "+Dd}function $v(i,e){var t=wv(i),r;return i.supported?i.persisted?r=(i.granted?"Your browser just granted persistent storage. ":"Your browser is already persisting your local file edits. ")+Dd:r="Your browser has not granted persistent storage, so it may discard your local file edits when it needs disk space.

"+yv()+"

"+Dd:r=lR(),t?r+"

"+t:r}function Pv(i){return"Your browser ran out of space for this site, so your last edit may not have been saved.

"+wv(i)+" Delete unused projects, or use File > Download All Changes as ZIP to back up your work before it is lost."+(i.supported&&!i.persisted?"

"+yv():"")}var Xv=KO(cu());var Oa=class{constructor(e,t){e=e||[],this.lines=e,this.text=t,this.offset2loc=new Map,this.line2offset=new Map;for(var r of e)r.offset>=0&&(this.offset2loc.has(r.offset)||this.offset2loc.set(r.offset,r),this.line2offset.has(r.line)||this.line2offset.set(r.line,r.offset));this.sortedOffsets=Array.from(this.offset2loc.keys()).sort((n,s)=>n-s)}findLineForOffset(e,t){let r=this.sortedOffsets;for(var n=0,s=r.length-1,o=-1;n<=s;){var a=n+s>>1;r[a]<=e?(o=a,n=a+1):s=a-1}if(o<0)return null;var l=r[o];return e-l>t?null:this.offset2loc.get(l)}lineCount(){return this.lines.length}};function kv(i){return"errors"in i}function Tv(i){return"output"in i}var sh=class{constructor(e){this.preset_id=Et(e)}async getRemoteFile(e){return new Promise((t,r)=>yo(e,t,mn(e)?"arraybuffer":"text"))}async getFileData(e){var t="presets/"+this.preset_id+"/"+e,r=await this.getRemoteFile(t);return r&&console.log("read",t,r.length,"bytes"),r}async setFileData(e,t){}onFileSystemUpdate(e){}};var Ms=class{constructor(e,t){this.basefs=e,this.overlayfs=t}async getFileData(e){var t=await this.overlayfs.getFileData(e);return t==null?this.basefs.getFileData(e):t}async setFileData(e,t){return await this.overlayfs.setFileData(e,t),this.basefs.setFileData(e,t)}onFileSystemUpdate(e){this.overlayfs.onFileSystemUpdate(e),this.basefs.onFileSystemUpdate(e)}},oh=class{constructor(e){this.store=e}async getFileData(e){return this.store.getItem(e)}async setFileData(e,t){return this.store.setItem(e,t)}onFileSystemUpdate(e){}};var ah=class{constructor(e,t,r,n){this.filedata={};this.pendingWorkerMessages=0;this.tools_preloaded={};this.isCompiling=!1;this.filename2path={};this.pendingQueries={};this.queryCounter=0;this.worker=e,this.platform_id=t,this.platform=r,this.filesystem=n,e.onmessage=s=>{this.receiveWorkerMessage(s.data)},n.onFileSystemUpdate(async s=>{if(s in this.filedata){var o=await this.filesystem.getFileData(s);o&&(this.updateFile(s,o),this.onFileChanged&&this.onFileChanged(s,o))}})}receiveWorkerMessage(e){if(e&&e.qid!=null){var t=this.pendingQueries[e.qid];t&&(delete this.pendingQueries[e.qid],t(e));return}var r=this.pendingWorkerMessages>1;r?(this.sendBuild(),this.pendingWorkerMessages=1):(this.callbackBuildStatus&&this.callbackBuildStatus(!1),this.isCompiling||(console.log(this.pendingWorkerMessages),console.trace()),this.isCompiling=!1,this.pendingWorkerMessages=0),e&&Tv(e)?this.processBuildResult(e):kv(e)&&this.processBuildListings(e),this.callbackBuildResult(e)}queryWorker(e){return new Promise(t=>{var r=++this.queryCounter;this.pendingQueries[r]=s=>{clearTimeout(n),t(s)};var n=setTimeout(()=>{delete this.pendingQueries[r],t(null)},15e3);e.qid=r,this.worker.postMessage(e)})}getToolForFilename(e){return this.remoteTool?"remote:"+this.remoteTool:this.platform.getToolForFilename(e)}preloadWorker(e){var t=this.getToolForFilename(e);t&&!this.tools_preloaded[t]&&(this.worker.postMessage({preload:t,platform:this.platform_id}),this.tools_preloaded[t]=!0)}pushAllFiles(e,t){e.push(t);var r=wo(this.mainPath);r.length>0&&r!="local"&&e.push(r+"/"+t)}parseIncludeDependencies(e){let t=this.mainPath&&this.getToolForFilename(this.mainPath),r=[];for(let n of Ou(e,yl(t,this.platform_id)))this.pushAllFiles(r,n);return r}parseLinkDependencies(e){let t=this.mainPath&&this.getToolForFilename(this.mainPath),r=[];for(let n of Ou(e,$l(t,this.platform_id)))this.pushAllFiles(r,n);return r}loadFileDependencies(e){let t=this.parseIncludeDependencies(e),r=this.parseLinkDependencies(e),n=t.concat(r);return this.loadFiles(n).then(s=>{if(s)for(let o of s)o.link=r.indexOf(o.path)>=0;return s})}okToSend(){return this.pendingWorkerMessages++==0&&this.mainPath!=null}updateFileInStore(e,t){this.filesystem.setFileData(e,t)}buildWorkerMessage(e){this.preloadWorker(this.mainPath);var t={updates:[],buildsteps:[]},r=this.stripLocalPath(this.mainPath),n=this.getFile(this.mainPath),s=[];t.updates.push({path:r,data:n}),this.filename2path[r]=this.mainPath;let a=this.getToolForFilename(this.mainPath).startsWith("remote:");for(var l of e)(!l.link||a)&&(t.updates.push({path:l.filename,data:l.data}),s.push(l.filename)),this.filename2path[l.filename]=l.path;t.buildsteps.push({path:r,files:[r].concat(s),platform:this.platform_id,tool:this.getToolForFilename(this.mainPath),mainfile:!0});for(var l of e)l.data&&l.link&&(this.preloadWorker(l.filename),t.updates.push({path:l.filename,data:l.data}),t.buildsteps.push({path:l.filename,files:[l.filename].concat(s),platform:this.platform_id,tool:this.getToolForFilename(l.path)}));return this.dataItems&&(t.setitems=this.dataItems),t}async loadFiles(e){var t=[],r=(o,a)=>{t.push({path:o,filename:this.stripLocalPath(o),link:!0,data:a})};for(var n of e)if(n in this.filedata){var s=this.filedata[n];s&&r(n,s)}else{var s=await this.filesystem.getFileData(n);s?(this.filedata[n]=s,r(n,s)):this.filedata[n]=null}return t}getFile(e){return this.filedata[e]}iterateFiles(e){for(var t in this.filedata)e(t,this.getFile(t))}sendBuild(){if(!this.mainPath)throw Error("need to call setMainFile first");var e=this.getFile(this.mainPath);if(e instanceof Uint8Array){this.isCompiling=!0,this.receiveWorkerMessage({output:e,errors:[],listings:null,symbolmap:null,params:{}});return}var t=typeof e=="string"?e:"";return this.loadFileDependencies(t).then(r=>{r||(r=[]);var n=this.buildWorkerMessage(r);this.worker.postMessage(n),this.isCompiling=!0})}updateFile(e,t){this.filedata[e]!=t&&(this.updateFileInStore(e,t),this.filedata[e]=t,this.okToSend()&&(this.callbackBuildStatus&&this.callbackBuildStatus(!0),this.sendBuild()))}setMainFile(e){this.mainPath=e,this.callbackBuildStatus&&this.callbackBuildStatus(!0),this.sendBuild()}processBuildListings(e){if(e.listings){this.listings=e.listings;for(var t in this.listings){var r=this.listings[t];r.lines&&(r.sourcefile=new Oa(r.lines,r.text)),r.asmlines&&(r.assemblyfile=new Oa(r.asmlines,r.text))}}}processBuildResult(e){this.processBuildListings(e),this.processBuildSegments(e)}processBuildSegments(e){var t=this.platform.getMemoryMap&&this.platform.getMemoryMap().main||[];t!=null&&t.length&&t.forEach(r=>r.source="native"),e.segments&&(e.segments.forEach(r=>r.source="linker"),t=t.concat(e.segments||[])),t.sort((r,n)=>r.start-n.start),this.segments=t}getListings(){return this.listings}getListingForFile(e){var t=kt(this.stripLocalPath(e)),r=this.getListings();for(var n in r)if(n==e)return r[n];for(var n in r)if(kt(n)==t)return r[n]}stripLocalPath(e){if(this.mainPath){var t=wo(this.mainPath);t!=""&&e.startsWith(t+"/")&&(e=e.substring(t.length+1))}return e}updateDataItems(e){this.dataItems=e,this.okToSend()&&this.sendBuild()}};function lh(i){var e=Xv.default.createInstance({name:"__"+i,version:2});return e}var cR=`$NAME ===== [Open this project in 8bitworkshop](http://8bitworkshop.com/redir.html?platform=$PLATFORM&githubURL=$GITHUBURL&file=$MAINFILE). @@ -57,7 +57,7 @@ Connect your audio output to the SuperCharger input, turn up the volume, and pla constructor(\${params}) { \${} } -}`,{label:"class",detail:"definition",type:"keyword"}),Wt('import {${names}} from "${module}"\n${}',{label:"import",detail:"named",type:"keyword"}),Wt('import ${name} from "${module}"\n${}',{label:"import",detail:"default",type:"keyword"})],$U=iy.concat([Wt("interface ${name} {\n ${}\n}",{label:"interface",detail:"definition",type:"keyword"}),Wt("type ${name} = ${type}",{label:"type",detail:"definition",type:"keyword"}),Wt("enum ${name} {\n ${}\n}",{label:"enum",detail:"definition",type:"keyword"})]),Jw=new _s,ry=new Set(["Script","Block","FunctionExpression","FunctionDeclaration","ArrowFunction","MethodDeclaration","ForStatement"]);function Xa(i){return(e,t)=>{let r=e.node.getChild("VariableDefinition");return r&&t(r,i),!0}}var PU=["FunctionDeclaration"],kU={FunctionDeclaration:Xa("function"),ClassDeclaration:Xa("class"),ClassExpression:()=>!0,EnumDeclaration:Xa("constant"),TypeAliasDeclaration:Xa("type"),NamespaceDeclaration:Xa("namespace"),VariableDefinition(i,e){i.matchContext(PU)||e(i,"variable")},TypeDefinition(i,e){e(i,"type")},__proto__:null};function ny(i,e){let t=Jw.get(e);if(t)return t;let r=[],n=!0;function s(o,a){let l=i.sliceString(o.from,o.to);r.push({label:l,type:a})}return e.cursor(Re.IncludeAnonymous).iterate(o=>{if(n)n=!1;else if(o.name){let a=kU[o.name];if(a&&a(o,s)||ry.has(o.name))return!1}else if(o.to-o.from>8192){for(let a of ny(i,o.node))r.push(a);return!1}}),Jw.set(e,r),r}var ey=/^[\w$\xa1-\uffff][\w$\d\xa1-\uffff]*$/,sy=["TemplateString","String","RegExp","LineComment","BlockComment","VariableDefinition","TypeDefinition","Label","PropertyDefinition","PropertyName","PrivatePropertyDefinition","PrivatePropertyName","JSXText","JSXAttributeValue","JSXOpenTag","JSXCloseTag","JSXSelfClosingTag",".","?."];function TU(i){let e=_e(i.state).resolveInner(i.pos,-1);if(sy.indexOf(e.name)>-1)return null;let t=e.name=="VariableName"||e.to-e.from<20&&ey.test(i.state.sliceDoc(e.from,e.to));if(!t&&!i.explicit)return null;let r=[];for(let n=e;n;n=n.parent)ry.has(n.name)&&(r=r.concat(ny(i.state.doc,n)));return{options:r,from:t?e.from:i.pos,validFor:ey}}var Vi=vt.define({name:"javascript",parser:Kw.configure({props:[wi.add({IfStatement:or({except:/^\s*({|else\b)/}),TryStatement:or({except:/^\s*({|catch\b|finally\b)/}),LabeledStatement:jc,SwitchBody:i=>{let e=i.textAfter,t=/^\s*\}/.test(e),r=/^\s*(case|default)\b/.test(e);return i.baseIndent+(t?0:r?1:2)*i.unit},Block:Vc({closing:"}"}),ArrowFunction:i=>i.baseIndent+i.unit,"TemplateString BlockComment":()=>null,"Statement Property":or({except:/^\s*{/}),JSXElement(i){let e=/^\s*<\//.test(i.textAfter);return i.lineIndent(i.node.from)+(e?0:i.unit)},JSXEscape(i){let e=/\s*\}/.test(i.textAfter);return i.lineIndent(i.node.from)+(e?0:i.unit)},"JSXOpenTag JSXSelfClosingTag"(i){return i.column(i.node.from)+i.unit}}),Rt.add({"Block ClassBody SwitchBody EnumBody ObjectExpression ArrayExpression ObjectType":yi,BlockComment(i){return{from:i.from+2,to:i.to-2}},JSXElement(i){let e=i.firstChild;if(!e||e.name=="JSXSelfClosingTag")return null;let t=i.lastChild;return{from:e.to,to:t.type.isError?i.to:t.from}},"JSXSelfClosingTag JSXOpenTag"(i){var e;let t=(e=i.firstChild)===null||e===void 0?void 0:e.nextSibling,r=i.lastChild;return!t||t.type.isError?null:{from:t.to,to:r.type.isError?i.to:r.from}}})]}),languageData:{closeBrackets:{brackets:["(","[","{","'",'"',"`"]},commentTokens:{line:"//",block:{open:"/*",close:"*/"}},indentOnInput:/^\s*(?:case |default:|\{|\}|<\/)$/,wordChars:"$"}}),oy={test:i=>/^JSX/.test(i.name),facet:Rs({commentTokens:{block:{open:"{/*",close:"*/}"}}})},Qm=Vi.configure({dialect:"ts"},"typescript"),wm=Vi.configure({dialect:"jsx",props:[Lc.add(i=>i.isTop?[oy]:void 0)]}),ym=Vi.configure({dialect:"jsx ts",props:[Lc.add(i=>i.isTop?[oy]:void 0)]},"typescript"),ay=i=>({label:i,type:"keyword"}),ly="break case const continue default delete export extends false finally in instanceof let new return static super switch this throw true typeof var yield".split(" ").map(ay),XU=ly.concat(["declare","implements","private","protected","public"].map(ay));function cy(i={}){let e=i.jsx?i.typescript?ym:wm:i.typescript?Qm:Vi,t=i.typescript?$U.concat(XU):iy.concat(ly);return new Ee(e,[Vi.data.of({autocomplete:uS(sy,OS(t))}),Vi.data.of({autocomplete:TU}),i.jsx?CU:[]])}function _U(i){for(;;){if(i.name=="JSXOpenTag"||i.name=="JSXSelfClosingTag"||i.name=="JSXFragmentTag")return i;if(i.name=="JSXEscape"||!i.parent)return null;i=i.parent}}function ty(i,e,t=i.length){for(let r=e==null?void 0:e.firstChild;r;r=r.nextSibling)if(r.name=="JSXIdentifier"||r.name=="JSXBuiltin"||r.name=="JSXNamespacedName"||r.name=="JSXMemberExpression")return i.sliceString(r.from,Math.min(r.to,t));return""}var RU=typeof navigator=="object"&&/Android\b/.test(navigator.userAgent),CU=W.inputHandler.of((i,e,t,r,n)=>{if((RU?i.composing:i.compositionStarted)||i.state.readOnly||e!=t||r!=">"&&r!="/"||!Vi.isActiveAt(i.state,e,-1))return!1;let s=n(),{state:o}=s,a=o.changeByRange(l=>{var c;let{head:h}=l,O=_e(o).resolveInner(h-1,-1),u;if(O.name=="JSXStartTag"&&(O=O.parent),!(o.doc.sliceString(h-1,h)!=r||O.name=="JSXAttributeValue"&&O.to>h)){if(r==">"&&O.name=="JSXFragmentTag")return{range:l,changes:{from:h,insert:""}};if(r=="/"&&O.name=="JSXStartCloseTag"){let f=O.parent,p=f.parent;if(p&&f.from==h-2&&((u=ty(o.doc,p.firstChild,h))||((c=p.firstChild)===null||c===void 0?void 0:c.name)=="JSXFragmentTag")){let m=`${u}>`;return{range:U.cursor(h+m.length,-1),changes:{from:h,insert:m}}}}else if(r==">"){let f=_U(O);if(f&&f.name=="JSXOpenTag"&&!/^\/?>|^<\//.test(o.doc.sliceString(h,h+2))&&(u=ty(o.doc,f,h)))return{range:l,changes:{from:h,insert:``}}}}return{range:l}});return a.changes.empty?!1:(i.dispatch([s,o.update(a,{userEvent:"input.complete",scrollIntoView:!0})]),!0)});var _a=["_blank","_self","_top","_parent"],$m=["ascii","utf-8","utf-16","latin1","latin1"],Pm=["get","post","put","delete"],km=["application/x-www-form-urlencoded","multipart/form-data","text/plain"],ci=["true","false"],ce={},ZU={a:{attrs:{href:null,ping:null,type:null,media:null,target:_a,hreflang:null}},abbr:ce,address:ce,area:{attrs:{alt:null,coords:null,href:null,target:null,ping:null,media:null,hreflang:null,type:null,shape:["default","rect","circle","poly"]}},article:ce,aside:ce,audio:{attrs:{src:null,mediagroup:null,crossorigin:["anonymous","use-credentials"],preload:["none","metadata","auto"],autoplay:["autoplay"],loop:["loop"],controls:["controls"]}},b:ce,base:{attrs:{href:null,target:_a}},bdi:ce,bdo:ce,blockquote:{attrs:{cite:null}},body:ce,br:ce,button:{attrs:{form:null,formaction:null,name:null,value:null,autofocus:["autofocus"],disabled:["autofocus"],formenctype:km,formmethod:Pm,formnovalidate:["novalidate"],formtarget:_a,type:["submit","reset","button"]}},canvas:{attrs:{width:null,height:null}},caption:ce,center:ce,cite:ce,code:ce,col:{attrs:{span:null}},colgroup:{attrs:{span:null}},command:{attrs:{type:["command","checkbox","radio"],label:null,icon:null,radiogroup:null,command:null,title:null,disabled:["disabled"],checked:["checked"]}},data:{attrs:{value:null}},datagrid:{attrs:{disabled:["disabled"],multiple:["multiple"]}},datalist:{attrs:{data:null}},dd:ce,del:{attrs:{cite:null,datetime:null}},details:{attrs:{open:["open"]}},dfn:ce,div:ce,dl:ce,dt:ce,em:ce,embed:{attrs:{src:null,type:null,width:null,height:null}},eventsource:{attrs:{src:null}},fieldset:{attrs:{disabled:["disabled"],form:null,name:null}},figcaption:ce,figure:ce,footer:ce,form:{attrs:{action:null,name:null,"accept-charset":$m,autocomplete:["on","off"],enctype:km,method:Pm,novalidate:["novalidate"],target:_a}},h1:ce,h2:ce,h3:ce,h4:ce,h5:ce,h6:ce,head:{children:["title","base","link","style","meta","script","noscript","command"]},header:ce,hgroup:ce,hr:ce,html:{attrs:{manifest:null}},i:ce,iframe:{attrs:{src:null,srcdoc:null,name:null,width:null,height:null,sandbox:["allow-top-navigation","allow-same-origin","allow-forms","allow-scripts"],seamless:["seamless"]}},img:{attrs:{alt:null,src:null,ismap:null,usemap:null,width:null,height:null,crossorigin:["anonymous","use-credentials"]}},input:{attrs:{alt:null,dirname:null,form:null,formaction:null,height:null,list:null,max:null,maxlength:null,min:null,name:null,pattern:null,placeholder:null,size:null,src:null,step:null,value:null,width:null,accept:["audio/*","video/*","image/*"],autocomplete:["on","off"],autofocus:["autofocus"],checked:["checked"],disabled:["disabled"],formenctype:km,formmethod:Pm,formnovalidate:["novalidate"],formtarget:_a,multiple:["multiple"],readonly:["readonly"],required:["required"],type:["hidden","text","search","tel","url","email","password","datetime","date","month","week","time","datetime-local","number","range","color","checkbox","radio","file","submit","image","reset","button"]}},ins:{attrs:{cite:null,datetime:null}},kbd:ce,keygen:{attrs:{challenge:null,form:null,name:null,autofocus:["autofocus"],disabled:["disabled"],keytype:["RSA"]}},label:{attrs:{for:null,form:null}},legend:ce,li:{attrs:{value:null}},link:{attrs:{href:null,type:null,hreflang:null,media:null,sizes:["all","16x16","16x16 32x32","16x16 32x32 64x64"]}},map:{attrs:{name:null}},mark:ce,menu:{attrs:{label:null,type:["list","context","toolbar"]}},meta:{attrs:{content:null,charset:$m,name:["viewport","application-name","author","description","generator","keywords"],"http-equiv":["content-language","content-type","default-style","refresh"]}},meter:{attrs:{value:null,min:null,low:null,high:null,max:null,optimum:null}},nav:ce,noscript:ce,object:{attrs:{data:null,type:null,name:null,usemap:null,form:null,width:null,height:null,typemustmatch:["typemustmatch"]}},ol:{attrs:{reversed:["reversed"],start:null,type:["1","a","A","i","I"]},children:["li","script","template","ul","ol"]},optgroup:{attrs:{disabled:["disabled"],label:null}},option:{attrs:{disabled:["disabled"],label:null,selected:["selected"],value:null}},output:{attrs:{for:null,form:null,name:null}},p:ce,param:{attrs:{name:null,value:null}},pre:ce,progress:{attrs:{value:null,max:null}},q:{attrs:{cite:null}},rp:ce,rt:ce,ruby:ce,samp:ce,script:{attrs:{type:["text/javascript"],src:null,async:["async"],defer:["defer"],charset:$m}},section:ce,select:{attrs:{form:null,name:null,size:null,autofocus:["autofocus"],disabled:["disabled"],multiple:["multiple"]}},slot:{attrs:{name:null}},small:ce,source:{attrs:{src:null,type:null,media:null}},span:ce,strong:ce,style:{attrs:{type:["text/css"],media:null,scoped:null}},sub:ce,summary:ce,sup:ce,table:ce,tbody:ce,td:{attrs:{colspan:null,rowspan:null,headers:null}},template:ce,textarea:{attrs:{dirname:null,form:null,maxlength:null,name:null,placeholder:null,rows:null,cols:null,autofocus:["autofocus"],disabled:["disabled"],readonly:["readonly"],required:["required"],wrap:["soft","hard"]}},tfoot:ce,th:{attrs:{colspan:null,rowspan:null,headers:null,scope:["row","col","rowgroup","colgroup"]}},thead:ce,time:{attrs:{datetime:null}},title:ce,tr:ce,track:{attrs:{src:null,label:null,default:null,kind:["subtitles","captions","descriptions","chapters","metadata"],srclang:null}},ul:{children:["li","script","template","ul","ol"]},var:ce,video:{attrs:{src:null,poster:null,width:null,height:null,crossorigin:["anonymous","use-credentials"],preload:["auto","metadata","none"],autoplay:["autoplay"],mediagroup:["movie"],muted:["muted"],controls:["controls"]}},wbr:ce},fy={accesskey:null,class:null,contenteditable:ci,contextmenu:null,dir:["ltr","rtl","auto"],draggable:["true","false","auto"],dropzone:["copy","move","link","string:","file:"],hidden:["hidden"],id:null,inert:["inert"],itemid:null,itemprop:null,itemref:null,itemscope:["itemscope"],itemtype:null,lang:["ar","bn","de","en-GB","en-US","es","fr","hi","id","ja","pa","pt","ru","tr","zh"],spellcheck:ci,autocorrect:ci,autocapitalize:ci,style:null,tabindex:null,title:null,translate:["yes","no"],rel:["stylesheet","alternate","author","bookmark","help","license","next","nofollow","noreferrer","prefetch","prev","search","tag"],role:"alert application article banner button cell checkbox complementary contentinfo dialog document feed figure form grid gridcell heading img list listbox listitem main navigation region row rowgroup search switch tab table tabpanel textbox timer".split(" "),"aria-activedescendant":null,"aria-atomic":ci,"aria-autocomplete":["inline","list","both","none"],"aria-busy":ci,"aria-checked":["true","false","mixed","undefined"],"aria-controls":null,"aria-describedby":null,"aria-disabled":ci,"aria-dropeffect":null,"aria-expanded":["true","false","undefined"],"aria-flowto":null,"aria-grabbed":["true","false","undefined"],"aria-haspopup":ci,"aria-hidden":ci,"aria-invalid":["true","false","grammar","spelling"],"aria-label":null,"aria-labelledby":null,"aria-level":null,"aria-live":["off","polite","assertive"],"aria-multiline":ci,"aria-multiselectable":ci,"aria-owns":null,"aria-posinset":null,"aria-pressed":["true","false","mixed","undefined"],"aria-readonly":ci,"aria-relevant":null,"aria-required":ci,"aria-selected":["true","false","undefined"],"aria-setsize":null,"aria-sort":["ascending","descending","none","other"],"aria-valuemax":null,"aria-valuemin":null,"aria-valuenow":null,"aria-valuetext":null},dy="beforeunload copy cut dragstart dragover dragleave dragenter dragend drag paste focus blur change click load mousedown mouseenter mouseleave mouseup keydown keyup resize scroll unload".split(" ").map(i=>"on"+i);for(let i of dy)fy[i]=null;var jn=class{constructor(e,t){this.tags=st(st({},ZU),e),this.globalAttrs=st(st({},fy),t),this.allTags=Object.keys(this.tags),this.globalAttrNames=Object.keys(this.globalAttrs)}};jn.default=new jn;function qn(i,e,t=i.length){if(!e)return"";let r=e.firstChild,n=r&&r.getChild("TagName");return n?i.sliceString(n.from,Math.min(n.to,t)):""}function Fs(i,e=!1){for(;i;i=i.parent)if(i.name=="Element")if(e)e=!1;else return i;return null}function py(i,e,t){let r=t.tags[qn(i,Fs(e))];return(r==null?void 0:r.children)||t.allTags}function Tm(i,e){let t=[];for(let r=Fs(e);r&&!r.type.isTop;r=Fs(r.parent)){let n=qn(i,r);if(n&&r.lastChild.name=="CloseTag")break;n&&t.indexOf(n)<0&&(e.name=="EndTag"||e.from>=r.firstChild.to)&&t.push(n)}return t}var my=/^[:\-\.\w\u00b7-\uffff]*$/;function hy(i,e,t,r,n){let s=/\s*>/.test(i.sliceDoc(n,n+5))?"":">",o=Fs(t,t.name=="StartTag"||t.name=="TagName");return{from:r,to:n,options:py(i.doc,o,e).map(a=>({label:a,type:"type"})).concat(Tm(i.doc,t).map((a,l)=>({label:"/"+a,apply:"/"+a+s,type:"type",boost:99-l}))),validFor:/^\/?[:\-\.\w\u00b7-\uffff]*$/}}function Oy(i,e,t,r){let n=/\s*>/.test(i.sliceDoc(r,r+5))?"":">";return{from:t,to:r,options:Tm(i.doc,e).map((s,o)=>({label:s,apply:s+n,type:"type",boost:99-o})),validFor:my}}function UU(i,e,t,r){let n=[],s=0;for(let o of py(i.doc,t,e))n.push({label:"<"+o,type:"type"});for(let o of Tm(i.doc,t))n.push({label:"",type:"type",boost:99-s++});return{from:r,to:r,options:n,validFor:/^<\/?[:\-\.\w\u00b7-\uffff]*$/}}function AU(i,e,t,r,n){let s=Fs(t),o=s?e.tags[qn(i.doc,s)]:null,a=o&&o.attrs?Object.keys(o.attrs):[],l=o&&o.globalAttrs===!1?a:a.length?a.concat(e.globalAttrNames):e.globalAttrNames;return{from:r,to:n,options:l.map(c=>({label:c,type:"property"})),validFor:my}}function EU(i,e,t,r,n){var s;let o=(s=t.parent)===null||s===void 0?void 0:s.getChild("AttributeName"),a=[],l;if(o){let c=i.sliceDoc(o.from,o.to),h=e.globalAttrs[c];if(!h){let O=Fs(t),u=O?e.tags[qn(i.doc,O)]:null;h=(u==null?void 0:u.attrs)&&u.attrs[c]}if(h){let O=i.sliceDoc(r,n).toLowerCase(),u='"',f='"';/^['"]/.test(O)?(l=O[0]=='"'?/^[^"]*$/:/^[^']*$/,u="",f=i.sliceDoc(n,n+1)==O[0]?"":O[0],O=O.slice(1),r++):l=/^[^\s<>='"]*$/;for(let p of h)a.push({label:p,apply:u+p+f,type:"constant"})}}return{from:r,to:n,options:a,validFor:l}}function gy(i,e){let{state:t,pos:r}=e,n=_e(t).resolveInner(r,-1),s=n.resolve(r);for(let o=r,a;s==n&&(a=n.childBefore(o));){let l=a.lastChild;if(!l||!l.type.isError||l.fromgy(r,n)}var YU=Vi.parser.configure({top:"SingleExpression"}),xy=[{tag:"script",attrs:i=>i.type=="text/typescript"||i.lang=="ts",parser:Qm.parser},{tag:"script",attrs:i=>i.type=="text/babel"||i.type=="text/jsx",parser:wm.parser},{tag:"script",attrs:i=>i.type=="text/typescript-jsx",parser:ym.parser},{tag:"script",attrs(i){return/^(importmap|speculationrules|application\/(.+\+)?json)$/i.test(i.type)},parser:YU},{tag:"script",attrs(i){return!i.type||/^(?:text|application)\/(?:x-)?(?:java|ecma)script$|^module$|^$/i.test(i.type)},parser:Vi.parser},{tag:"style",attrs(i){return(!i.lang||i.lang=="css")&&(!i.type||/^(text\/)?(x-)?(stylesheet|css)$/i.test(i.type))},parser:Ta.parser}],Sy=[{name:"style",parser:Ta.parser.configure({top:"Styles"})}].concat(dy.map(i=>({name:i,parser:Vi.parser}))),vy=vt.define({name:"html",parser:Ew.configure({props:[wi.add({Element(i){let e=/^(\s*)(<\/)?/.exec(i.textAfter);return i.node.to<=i.pos+e[0].length?i.continue():i.lineIndent(i.node.from)+(e[2]?0:i.unit)},"OpenTag CloseTag SelfClosingTag"(i){return i.column(i.node.from)+i.unit},Document(i){if(i.pos+/\s*/.exec(i.textAfter)[0].lengthi.getChild("TagName")})]}),languageData:{commentTokens:{block:{open:""}},indentOnInput:/^\s*<\/\w+\W$/,wordChars:"-_"}}),zh=vy.configure({wrap:pm(xy,Sy)});function Qy(i={}){let e="",t;i.matchClosingTags===!1&&(e="noMatch"),i.selfClosingTags===!0&&(e=(e?e+" ":"")+"selfClosing"),(i.nestedLanguages&&i.nestedLanguages.length||i.nestedAttributes&&i.nestedAttributes.length)&&(t=pm((i.nestedLanguages||[]).concat(xy),(i.nestedAttributes||[]).concat(Sy)));let r=t?vy.configure({wrap:t,dialect:e}):e?zh.configure({dialect:e}):zh;return new Ee(r,[zh.data.of({autocomplete:zU(i)}),i.autoCloseTags!==!1?LU:[],cy().support,Nw().support])}var uy=new Set("area base br col command embed frame hr img input keygen link meta param source track wbr menuitem".split(" "));function MU(i,e,t){for(var r;;){if(((r=e.lastChild)===null||r===void 0?void 0:r.name)!="CloseTag")return!1;let n=e.parent;if(!n||qn(i,n)!=t)return!0;e=n}}var LU=W.inputHandler.of((i,e,t,r,n)=>{if(i.composing||i.state.readOnly||e!=t||r!=">"&&r!="/"||!zh.isActiveAt(i.state,e,-1))return!1;let s=n(),{state:o}=s,a=o.changeByRange(l=>{var c;let h=o.doc.sliceString(l.from-1,l.to)==r,{head:O}=l,u=_e(o).resolveInner(O,-1),f;if(h&&r==">"&&u.name=="EndTag"){let p=u.parent;if((f=qn(o.doc,p.parent,O))&&!uy.has(f)&&!MU(o.doc,p.parent,f)){let m=O+(o.doc.sliceString(O,O+1)===">"?1:0),S=``;return{range:l,changes:{from:O,to:m,insert:S}}}}else if(h&&r=="/"&&u.name=="IncompleteCloseTag"){let p=u.parent;if(u.from==O-2&&((c=p.lastChild)===null||c===void 0?void 0:c.name)!="CloseTag"&&(f=qn(o.doc,p,O))&&!uy.has(f)){let m=O+(o.doc.sliceString(O,O+1)===">"?1:0),S=`${f}>`;return{range:U.cursor(O+S.length,-1),changes:{from:O,to:m,insert:S}}}}return{range:l}});return a.changes.empty?!1:(i.dispatch([s,o.update(a,{userEvent:"input.complete",scrollIntoView:!0})]),!0)});var $y=Rs({commentTokens:{block:{open:""}}}),Py=new fe,ky=uw.configure({props:[Rt.add(i=>!i.is("Block")||i.is("Document")||Rm(i)!=null||WU(i)?void 0:(e,t)=>({from:t.doc.lineAt(e.from).to,to:e.to})),Py.add(Rm),wi.add({Document:()=>null}),vr.add({Document:$y})]});function Rm(i){let e=/^(?:ATX|Setext)Heading(\d)$/.exec(i.name);return e?+e[1]:void 0}function WU(i){return i.name=="OrderedList"||i.name=="BulletList"}function VU(i,e){let t=i;for(;;){let r=t.nextSibling,n;if(!r||(n=Rm(r.type))!=null&&n<=e)break;t=r}return t.to}var jU=yd.of((i,e,t)=>{for(let r=_e(i).resolveInner(t,-1);r&&!(r.fromt)return{from:t,to:s}}return null});function Cm(i){return new _t($y,i,[],"markdown")}var qU=Cm(ky),DU=ky.configure([pw,bw,gw,xw,{props:[Rt.add({Table:(i,e)=>({from:e.doc.lineAt(i.from).to,to:i.to})})]}]),Yh=Cm(DU);function IU(i,e){return t=>{if(t&&i){let r=null;if(t=/\S*/.exec(t)[0],typeof i=="function"?r=i(t):r=ia.matchLanguageName(i,t,!0),r instanceof ia)return r.support?r.support.language.parser:Rn.getSkippingParser(r.load());if(r)return r.parser}return e?e.parser:null}}var Ra=class{constructor(e,t,r,n,s,o,a){this.node=e,this.from=t,this.to=r,this.spaceBefore=n,this.spaceAfter=s,this.type=o,this.item=a}blank(e,t=!0){let r=this.spaceBefore+(this.node.name=="Blockquote"?">":"");if(e!=null){for(;r.length0;n--)r+=" ";return r+(t?this.spaceAfter:"")}}marker(e,t){let r=this.node.name=="OrderedList"?String(+Xy(this.item,e)[2]+t):"";return this.spaceBefore+r+this.type+this.spaceAfter}};function Ty(i,e){let t=[],r=[];for(let n=i;n;n=n.parent){if(n.name=="FencedCode")return r;(n.name=="ListItem"||n.name=="Blockquote")&&t.push(n)}for(let n=t.length-1;n>=0;n--){let s=t[n],o,a=e.lineAt(s.from),l=s.from-a.from;if(s.name=="Blockquote"&&(o=/^ *>( ?)/.exec(a.text.slice(l))))r.push(new Ra(s,l,l+o[0].length,"",o[1],">",null));else if(s.name=="ListItem"&&s.parent.name=="OrderedList"&&(o=/^( *)\d+([.)])( *)/.exec(a.text.slice(l)))){let c=o[3],h=o[0].length;c.length>=4&&(c=c.slice(0,c.length-4),h-=4),r.push(new Ra(s.parent,l,l+h,o[1],c,o[2],s))}else if(s.name=="ListItem"&&s.parent.name=="BulletList"&&(o=/^( *)([-+*])( {1,4}\[[ xX]\])?( +)/.exec(a.text.slice(l)))){let c=o[4],h=o[0].length;c.length>4&&(c=c.slice(0,c.length-4),h-=4);let O=o[2];o[3]&&(O+=o[3].replace(/[xX]/," ")),r.push(new Ra(s.parent,l,l+h,o[1],c,O,s))}}return r}function Xy(i,e){return/^(\s*)(\d+)(?=[.)])/.exec(e.sliceString(i.from,i.from+10))}function Xm(i,e,t,r=0){for(let n=-1,s=i;;){if(s.name=="ListItem"){let a=Xy(s,e),l=+a[2];if(n>=0){if(l!=n+1)return;t.push({from:s.from+a[1].length,to:s.from+a[0].length,insert:String(n+2+r)})}n=l}let o=s.nextSibling;if(!o)break;s=o}}function Zm(i,e){let t=/^[ \t]*/.exec(i)[0].length;if(!t||e.facet(Qi)!=" ")return i;let r=Yt(i,4,t),n="";for(let s=r;s>0;)s>=4?(n+=" ",s-=4):(n+=" ",s--);return n+i.slice(t)}var FU=(i={})=>({state:e,dispatch:t})=>{let r=_e(e),{doc:n}=e,s=null,o=e.changeByRange(a=>{if(!a.empty||!Yh.isActiveAt(e,a.from,-1)&&!Yh.isActiveAt(e,a.from,1))return s={range:a};let l=a.from,c=n.lineAt(l),h=Ty(r.resolveInner(l,-1),n);for(;h.length&&h[h.length-1].from>l-c.from;)h.pop();if(!h.length)return s={range:a};let O=h[h.length-1];if(O.to-O.spaceAfter.length>l-c.from)return s={range:a};let u=l>=O.to-O.spaceAfter.length&&!/\S/.test(c.text.slice(O.to));if(O.item&&u){if(O.item.from]*$/.test(c.text.slice(0,O.to)))return s={range:a};let w=O.node.firstChild,Z=O.node.getChild("ListItem","ListItem");if(w.to>=l||Z&&Z.to0&&!/[^\s>]/.test(n.lineAt(c.from-1).text)||i.nonTightLists===!1){let R=h.length>1?h[h.length-2]:null,A,k="";R&&R.item?(A=c.from+R.from,k=R.marker(n,1)):A=c.from+(R?R.to:0);let P=[{from:A,to:l,insert:k}];return O.node.name=="OrderedList"&&Xm(O.item,n,P,-2),R&&R.node.name=="OrderedList"&&Xm(R.item,n,P),{range:U.cursor(A+k.length),changes:P}}else{let R=yy(h,e,c);return{range:U.cursor(l+R.length+1),changes:{from:c.from,insert:R+e.lineBreak}}}}if(O.node.name=="Blockquote"&&u&&c.from){let w=n.lineAt(c.from-1),Z=/>\s*$/.exec(w.text);if(Z&&Z.index==O.from){let R=e.changes([{from:w.from+Z.index,to:w.to},{from:c.from+O.from,to:c.to}]);return{range:a.map(R),changes:R}}}let f=[];O.node.name=="OrderedList"&&Xm(O.item,n,f);let p=O.item&&O.item.from]*/.exec(c.text)[0].length>=O.to)for(let w=0,Z=h.length-1;w<=Z;w++)m+=w==Z&&!p?h[w].marker(n,1):h[w].blank(wc.from&&/\s/.test(c.text.charAt(S-c.from-1));)S--;return m=Zm(m,e),NU(O.node,e.doc)&&(m=yy(h,e,c)+e.lineBreak+m),f.push({from:S,to:l,insert:e.lineBreak+m}),{range:U.cursor(S+m.length+1),changes:f}});return s?!1:(t(e.update(o,{scrollIntoView:!0,userEvent:"input"})),!0)},BU=FU();function wy(i){return i.name=="QuoteMark"||i.name=="ListMark"}function NU(i,e){if(i.name!="OrderedList"&&i.name!="BulletList")return!1;let t=i.firstChild,r=i.getChild("ListItem","ListItem");if(!r)return!1;let n=e.lineAt(t.to),s=e.lineAt(r.from),o=/^[\s>]*$/.test(n.text);return n.number+(o?0:1){let t=_e(i),r=null,n=i.changeByRange(s=>{let o=s.from,{doc:a}=i;if(s.empty&&Yh.isActiveAt(i,s.from)){let l=a.lineAt(o),c=Ty(GU(t,o),a);if(c.length){let h=c[c.length-1],O=h.to-h.spaceAfter.length+(h.spaceAfter?1:0);if(o-l.from>O&&!/\S/.test(l.text.slice(O,o-l.from)))return{range:U.cursor(l.from+O),changes:{from:l.from+O,to:o}};if(o-l.from==O&&(h.item&&l.from<=h.item.from||/^[\s>]*$/.test(l.text.slice(0,h.to)))){let u=l.from+h.from;if(h.item&&h.node.from{var t;let{main:r}=e.state.selection;if(r.empty)return!1;let n=(t=i.clipboardData)===null||t===void 0?void 0:t.getData("text/plain");if(!n||!/^(https?:\/\/|mailto:|xmpp:|www\.)/.test(n)||(/^www\./.test(n)&&(n="https://"+n),!Yh.isActiveAt(e.state,r.from,1)))return!1;let s=_e(e.state),o=!1;return s.iterate({from:r.from,to:r.to,enter:a=>{(a.from>r.from||tA.test(a.name))&&(o=!0)},leave:a=>{a.to')`,backgroundPosition:"left 50%"},".tab-stop-ruler":{color:"rgba(255,255,255,0.35)",backgroundColor:"#002240",borderBottom:"2px solid #0055ff88"}},{dark:!0}),nA=Ir.define([{tag:d.standard(d.keyword),color:"#99ff99"},{tag:[d.name,d.standard(d.name)],color:"#eee"},{tag:d.variableName,color:"#76f6ff"},{tag:d.local(d.variableName),color:"#ffff99"},{tag:[d.deleted,d.macroName],color:"#ffbb99"},{tag:[d.processingInstruction,d.keyword,d.controlKeyword],color:"#c5bdff"},{tag:[d.string,d.inserted],color:"#68ff98"},{tag:[d.number,d.modifier],color:"#ff99ff"},{tag:[d.atom,d.bool,d.special(d.variableName)],color:"#ffc261"},{tag:d.definition(d.variableName),color:"#fff"},{tag:[d.propertyName,d.attributeName,d.tagName,d.self],color:"#b2ebf2"},{tag:d.definition(d.name),color:"#f0f0f0"},{tag:d.typeName,color:"#9be8c5"},{tag:d.bracket,color:"#d8d8d8"},{tag:d.comment,color:"#999"},{tag:d.link,color:"#c3b1e1"},{tag:d.meta,color:"#ffd9a0"},{tag:d.invalid,color:"#ff6666"},{tag:d.operator,color:"#ffa3f0"}]),Mh=[rA,qc(nA)];var Zy=W.theme({"&":{maxHeight:"100%"}});var Am=W.theme({"&":{height:"100%"},".cm-currentpc":{backgroundColor:"#7e2a70 !important"},".currentpc-span-blocked":{backgroundColor:"#7e2a70 !important"},".currentpc-marker-blocked":{color:"#ffee33"},".highlight-lines":{backgroundColor:"#003399 !important"},".cm-traced-line":{backgroundColor:"rgba(129, 123, 249, 0.15)"},".cm-error-span":{textDecoration:"underline wavy red",backgroundColor:"rgba(255, 0, 0, 0.15)"},".gutter-offset .cm-gutterElement":{paddingRight:"0.25em"},".gutter-bytes .cm-gutterElement":{paddingLeft:"0.25em",paddingRight:"0.25em"},".gutter-currentpc .cm-gutterElement":{color:"#ff66ee"},".gutter-clock .cm-gutterElement":{paddingLeft:"0.25em",paddingRight:"0.25em"}});var sA=W.theme({"&":{backgroundColor:"#2c2c2c",color:"#ffffec",caretColor:"#ffffec"},"&.cm-focused .cm-selectionBackground, .cm-selectionBackground, ::selection":{backgroundColor:"#a29b8c7b !important"},".cm-selectionMatch":{backgroundColor:"#ffffff30"},".cm-activeLine":{backgroundColor:"#ffffff0a"},".cm-activeLineGutter":{backgroundColor:"#68686588"},".cm-matchingBracket":{color:"#33ff33 !important"},".cm-matchingTag":{backgroundColor:"rgba(255,255,255,0.37)"},".cm-cursor":{borderLeftColor:"#ffffec"},".cm-gutters , .cm-panels":{backgroundColor:"#4e4e4e"},".cm-lineNumbers .cm-gutterElement":{color:"#dadada"},".gutter-bytes .cm-gutterElement":{color:"#999"},".cm-highlightSpace":{backgroundImage:"radial-gradient(circle at 50% 55%, #aaaaaa45 11%, transparent 5%)"},".cm-highlightTab":{backgroundImage:`url('data:image/svg+xml,')`,backgroundPosition:"left 50%"},".tab-stop-ruler":{color:"rgba(255,255,255,0.25)",backgroundColor:"#202020",borderBottom:"2px solid #4e4e4e"}},{dark:!0}),oA=Ir.define([{tag:[d.processingInstruction],color:"#ff9cf7"},{tag:[d.keyword,d.controlKeyword,d.modifier],color:"#ffb928"},{tag:[d.name,d.standard(d.name),d.variableName],color:"#ffffec"},{tag:[d.deleted,d.macroName],color:"#00a8c6"},{tag:[d.string,d.inserted],color:"#b4fdb7"},{tag:[d.number],color:"#3abff8"},{tag:[d.atom,d.bool],color:"#02c7ea"},{tag:d.definition(d.variableName),color:"#88eeff"},{tag:[d.propertyName,d.attributeName,d.tagName,d.self],color:"#9ddfe9"},{tag:d.definition(d.name),color:"#88eeff"},{tag:[d.special(d.keyword),d.special(d.variableName)],color:"#fdda93"},{tag:[d.typeName,d.standard(d.keyword)],color:"#ffb928"},{tag:[d.bracket,d.constant(d.modifier)],color:"#8fdedd",fontWeight:"bold"},{tag:d.comment,color:"#95958a"},{tag:d.link,color:"#f54b07"},{tag:d.meta,color:"#aaddaa"},{tag:d.namespace,color:"#ffffec"},{tag:d.invalid,color:"#ffffec",borderBottom:"1px solid #636363"}]),Lh=[sA,qc(oA)];var aA=["<<",">>","<=",">=","==","!=","&&","||"],lA="+-*/%<>!~&|^()[]";function cA(i){let e=[],t=0;for(;t",">=");)this.next(),e={t:"bin",op:t,a:e,b:this.parseShift()};return e}parseShift(){let e=this.parseAdditive(),t;for(;t=this.atOp("<<",">>");)this.next(),e={t:"bin",op:t,a:e,b:this.parseAdditive()};return e}parseAdditive(){let e=this.parseMultiplicative(),t;for(;t=this.atOp("+","-");)this.next(),e={t:"bin",op:t,a:e,b:this.parseMultiplicative()};return e}parseMultiplicative(){let e=this.parseUnary(),t;for(;t=this.atOp("*","/","%");)this.next(),e={t:"bin",op:t,a:e,b:this.parseUnary()};return e}parseUnary(){let e=this.atOp("-","!","~","+");return e?(this.next(),{t:"un",op:e,a:this.parseUnary()}):this.parsePrimary()}parsePrimary(){let e=this.next();if(!e)throw new Error("unexpected end of expression");if(e.t=="num")return{t:"num",v:e.num};if(e.t=="id")return{t:"id",name:e.v};if(e.t=="op"&&e.v=="("){let t=this.parseOr();return this.expect(")"),t}if(e.t=="op"&&e.v=="["){let t=this.parseOr();return this.expect("]"),{t:"mem",a:t}}throw new Error("unexpected '"+e.v+"'")}};function Ca(i,e){switch(i.t){case"num":{let t=i.v;return()=>t}case"id":{let t=i.name;if(e.cpuFields.has(t))return n=>{let s=n[t];return typeof s=="number"?s:0};let r=e.symbol(t);if(typeof r=="number"){let n=r;return()=>n}throw new Error("unknown identifier '"+t+"'")}case"mem":{let t=Ca(i.a,e);return r=>{if(!e.readMem)throw new Error("memory reads not supported");let n=e.readMem(t(r)&65535);if(typeof n!="number")throw new Error("cannot read memory");return n}}case"un":{let t=Ca(i.a,e);switch(i.op){case"-":return r=>-t(r);case"~":return r=>~t(r);case"!":return r=>t(r)?0:1;case"+":return t}break}case"bin":{let t=Ca(i.a,e),r=Ca(i.b,e);switch(i.op){case"||":return n=>t(n)||r(n)?1:0;case"&&":return n=>t(n)&&r(n)?1:0;case"|":return n=>t(n)|r(n);case"^":return n=>t(n)^r(n);case"&":return n=>t(n)&r(n);case"==":return n=>t(n)==r(n)?1:0;case"!=":return n=>t(n)!=r(n)?1:0;case"<":return n=>t(n)t(n)<=r(n)?1:0;case">":return n=>t(n)>r(n)?1:0;case">=":return n=>t(n)>=r(n)?1:0;case"<<":return n=>t(n)<>":return n=>t(n)>>r(n);case"+":return n=>t(n)+r(n);case"-":return n=>t(n)-r(n);case"*":return n=>t(n)*r(n);case"/":return n=>{let s=r(n);return s===0?0:t(n)/s|0};case"%":return n=>{let s=r(n);return s===0?0:t(n)%s}}break}}throw new Error("bad expression node")}function Uy(i,e){let t=new Em(cA(i)).parse(),r=Ca(t,e);return n=>{try{return r(n)!=0}catch(s){return!1}}}function Ay(i,e){let t=(i||"").trim();if(!t)return{error:"empty address"};let r;if((r=t.match(/^\$([0-9a-fA-F]+)$/))||(r=t.match(/^0[xX]([0-9a-fA-F]+)$/)))return{pc:parseInt(r[1],16)};if(/^\d+$/.test(t))return{pc:parseInt(t,10)};let n=e(t);return typeof n=="number"?{pc:n}:{error:"unknown symbol '"+t+"'"}}var zm="8bitworkshop.breakpoints.v1",Ym=class{constructor(){this.breakpoints=[];this.nextId=1;this.listeners=[];this.contextFn=()=>""}setContextFn(e){this.contextFn=e}subscribe(e){this.listeners.push(e)}notify(){for(let e of this.listeners.slice())e()}changed(){this.save(),this.notify()}getAll(){return this.breakpoints}getEnabled(){return this.breakpoints.filter(e=>e.enabled)}getSourceBreakpointsForFile(e){return this.breakpoints.filter(t=>t.type=="source"&&t.file==e)}addSourceBreakpoint(e,t){let r={id:this.nextId++,type:"source",file:e,line:t,enabled:!0};return this.breakpoints.push(r),this.changed(),r}addAddressBreakpoint(e,t){let r=(e||"").trim().toLowerCase(),n=this.breakpoints.find(o=>o.type=="address"&&(o.target||"").trim().toLowerCase()==r);if(n)return this.update(n.id,{enabled:!0,condition:t}),n;let s={id:this.nextId++,type:"address",target:e.trim(),enabled:!0,condition:t};return this.breakpoints.push(s),this.changed(),s}remove(e){this.breakpoints=this.breakpoints.filter(t=>t.id!=e),this.changed()}setEnabled(e,t){let r=this.breakpoints.find(n=>n.id==e);r&&r.enabled!=t&&(r.enabled=t,this.changed())}update(e,t){let r=this.breakpoints.find(n=>n.id==e);r&&(Object.assign(r,t),this.changed())}toggleSourceLine(e,t){let r=this.breakpoints.find(n=>n.type=="source"&&n.file==e&&n.line==t);r?this.remove(r.id):this.addSourceBreakpoint(e,t)}load(){if(typeof localStorage!="undefined")try{let t=JSON.parse(localStorage.getItem(zm)||"{}")[this.contextFn()];this.breakpoints=Array.isArray(t)?t:[],this.nextId=1;for(let r of this.breakpoints)this.nextId=Math.max(this.nextId,r.id+1)}catch(e){this.breakpoints=[]}}save(){if(typeof localStorage!="undefined")try{let e={},t=localStorage.getItem(zm);t&&(e=JSON.parse(t)),e[this.contextFn()]=this.breakpoints,localStorage.setItem(zm,JSON.stringify(e))}catch(e){console.log("breakpoints: save failed",e)}}},Qt=new Ym;function Ey(){return i=>{let e=v&&v.debugSymbols&&v.debugSymbols.symbolmap;if(e)return i in e?e[i]:e["_"+i]}}function hA(){let i=new Set;try{let e=v&&v.getCPUState&&v.getCPUState();e&&(i=new Set(Object.keys(e)))}catch(e){}return{cpuFields:i,symbol:Ey(),readMem:v&&v.readAddress?e=>v.readAddress(e):void 0}}function OA(i){try{let e;if(i.type=="source"){let r=K.getListingForFile(i.file),n=r&&(r.sourcefile||r.assemblyfile);if(!n)return{bp:i,error:"no debug info (build first?)"};if(e=n.line2offset[i.line],!(e>=0))return{bp:i,error:"line has no code"}}else{let r=Ay(i.target,Ey());if(r.error)return{bp:i,error:r.error};e=r.pc}let t;return i.condition&&i.condition.trim()&&(t=Uy(i.condition,hA())),{bp:i,pc:e,condFn:t}}catch(e){return{bp:i,error:String(e.message||e)}}}function Wh(){return Qt.getAll().map(i=>OA(i))}var Mm=class extends at{constructor(t,r){super();this.header=t;this.handleClick=r}toDOM(){let t=document.createElement("span");return t.className="asset-header-badge",t.textContent="\u2197 Asset Editor",t.title="Open in Asset Editor",t.addEventListener("click",r=>{r.preventDefault(),r.stopPropagation(),this.handleClick(t)}),t}eq(t){return this.header===t.header}ignoreEvent(){return!1}},zy=/[/;][*;](\{.+?\})[*;][/;]/g;function Yy(i,e){let t=[];for(let{from:r,to:n}of i.visibleRanges){let s=i.state.sliceDoc(r,n),o=r,a=s.split(` +}`,{label:"class",detail:"definition",type:"keyword"}),Wt('import {${names}} from "${module}"\n${}',{label:"import",detail:"named",type:"keyword"}),Wt('import ${name} from "${module}"\n${}',{label:"import",detail:"default",type:"keyword"})],$U=iy.concat([Wt("interface ${name} {\n ${}\n}",{label:"interface",detail:"definition",type:"keyword"}),Wt("type ${name} = ${type}",{label:"type",detail:"definition",type:"keyword"}),Wt("enum ${name} {\n ${}\n}",{label:"enum",detail:"definition",type:"keyword"})]),Jw=new _s,ry=new Set(["Script","Block","FunctionExpression","FunctionDeclaration","ArrowFunction","MethodDeclaration","ForStatement"]);function Xa(i){return(e,t)=>{let r=e.node.getChild("VariableDefinition");return r&&t(r,i),!0}}var PU=["FunctionDeclaration"],kU={FunctionDeclaration:Xa("function"),ClassDeclaration:Xa("class"),ClassExpression:()=>!0,EnumDeclaration:Xa("constant"),TypeAliasDeclaration:Xa("type"),NamespaceDeclaration:Xa("namespace"),VariableDefinition(i,e){i.matchContext(PU)||e(i,"variable")},TypeDefinition(i,e){e(i,"type")},__proto__:null};function ny(i,e){let t=Jw.get(e);if(t)return t;let r=[],n=!0;function s(o,a){let l=i.sliceString(o.from,o.to);r.push({label:l,type:a})}return e.cursor(Re.IncludeAnonymous).iterate(o=>{if(n)n=!1;else if(o.name){let a=kU[o.name];if(a&&a(o,s)||ry.has(o.name))return!1}else if(o.to-o.from>8192){for(let a of ny(i,o.node))r.push(a);return!1}}),Jw.set(e,r),r}var ey=/^[\w$\xa1-\uffff][\w$\d\xa1-\uffff]*$/,sy=["TemplateString","String","RegExp","LineComment","BlockComment","VariableDefinition","TypeDefinition","Label","PropertyDefinition","PropertyName","PrivatePropertyDefinition","PrivatePropertyName","JSXText","JSXAttributeValue","JSXOpenTag","JSXCloseTag","JSXSelfClosingTag",".","?."];function TU(i){let e=_e(i.state).resolveInner(i.pos,-1);if(sy.indexOf(e.name)>-1)return null;let t=e.name=="VariableName"||e.to-e.from<20&&ey.test(i.state.sliceDoc(e.from,e.to));if(!t&&!i.explicit)return null;let r=[];for(let n=e;n;n=n.parent)ry.has(n.name)&&(r=r.concat(ny(i.state.doc,n)));return{options:r,from:t?e.from:i.pos,validFor:ey}}var Vi=vt.define({name:"javascript",parser:Kw.configure({props:[wi.add({IfStatement:or({except:/^\s*({|else\b)/}),TryStatement:or({except:/^\s*({|catch\b|finally\b)/}),LabeledStatement:jc,SwitchBody:i=>{let e=i.textAfter,t=/^\s*\}/.test(e),r=/^\s*(case|default)\b/.test(e);return i.baseIndent+(t?0:r?1:2)*i.unit},Block:Vc({closing:"}"}),ArrowFunction:i=>i.baseIndent+i.unit,"TemplateString BlockComment":()=>null,"Statement Property":or({except:/^\s*{/}),JSXElement(i){let e=/^\s*<\//.test(i.textAfter);return i.lineIndent(i.node.from)+(e?0:i.unit)},JSXEscape(i){let e=/\s*\}/.test(i.textAfter);return i.lineIndent(i.node.from)+(e?0:i.unit)},"JSXOpenTag JSXSelfClosingTag"(i){return i.column(i.node.from)+i.unit}}),Rt.add({"Block ClassBody SwitchBody EnumBody ObjectExpression ArrayExpression ObjectType":yi,BlockComment(i){return{from:i.from+2,to:i.to-2}},JSXElement(i){let e=i.firstChild;if(!e||e.name=="JSXSelfClosingTag")return null;let t=i.lastChild;return{from:e.to,to:t.type.isError?i.to:t.from}},"JSXSelfClosingTag JSXOpenTag"(i){var e;let t=(e=i.firstChild)===null||e===void 0?void 0:e.nextSibling,r=i.lastChild;return!t||t.type.isError?null:{from:t.to,to:r.type.isError?i.to:r.from}}})]}),languageData:{closeBrackets:{brackets:["(","[","{","'",'"',"`"]},commentTokens:{line:"//",block:{open:"/*",close:"*/"}},indentOnInput:/^\s*(?:case |default:|\{|\}|<\/)$/,wordChars:"$"}}),oy={test:i=>/^JSX/.test(i.name),facet:Rs({commentTokens:{block:{open:"{/*",close:"*/}"}}})},Qm=Vi.configure({dialect:"ts"},"typescript"),wm=Vi.configure({dialect:"jsx",props:[Lc.add(i=>i.isTop?[oy]:void 0)]}),ym=Vi.configure({dialect:"jsx ts",props:[Lc.add(i=>i.isTop?[oy]:void 0)]},"typescript"),ay=i=>({label:i,type:"keyword"}),ly="break case const continue default delete export extends false finally in instanceof let new return static super switch this throw true typeof var yield".split(" ").map(ay),XU=ly.concat(["declare","implements","private","protected","public"].map(ay));function cy(i={}){let e=i.jsx?i.typescript?ym:wm:i.typescript?Qm:Vi,t=i.typescript?$U.concat(XU):iy.concat(ly);return new Ee(e,[Vi.data.of({autocomplete:uS(sy,OS(t))}),Vi.data.of({autocomplete:TU}),i.jsx?CU:[]])}function _U(i){for(;;){if(i.name=="JSXOpenTag"||i.name=="JSXSelfClosingTag"||i.name=="JSXFragmentTag")return i;if(i.name=="JSXEscape"||!i.parent)return null;i=i.parent}}function ty(i,e,t=i.length){for(let r=e==null?void 0:e.firstChild;r;r=r.nextSibling)if(r.name=="JSXIdentifier"||r.name=="JSXBuiltin"||r.name=="JSXNamespacedName"||r.name=="JSXMemberExpression")return i.sliceString(r.from,Math.min(r.to,t));return""}var RU=typeof navigator=="object"&&/Android\b/.test(navigator.userAgent),CU=W.inputHandler.of((i,e,t,r,n)=>{if((RU?i.composing:i.compositionStarted)||i.state.readOnly||e!=t||r!=">"&&r!="/"||!Vi.isActiveAt(i.state,e,-1))return!1;let s=n(),{state:o}=s,a=o.changeByRange(l=>{var c;let{head:h}=l,O=_e(o).resolveInner(h-1,-1),u;if(O.name=="JSXStartTag"&&(O=O.parent),!(o.doc.sliceString(h-1,h)!=r||O.name=="JSXAttributeValue"&&O.to>h)){if(r==">"&&O.name=="JSXFragmentTag")return{range:l,changes:{from:h,insert:""}};if(r=="/"&&O.name=="JSXStartCloseTag"){let f=O.parent,p=f.parent;if(p&&f.from==h-2&&((u=ty(o.doc,p.firstChild,h))||((c=p.firstChild)===null||c===void 0?void 0:c.name)=="JSXFragmentTag")){let m=`${u}>`;return{range:U.cursor(h+m.length,-1),changes:{from:h,insert:m}}}}else if(r==">"){let f=_U(O);if(f&&f.name=="JSXOpenTag"&&!/^\/?>|^<\//.test(o.doc.sliceString(h,h+2))&&(u=ty(o.doc,f,h)))return{range:l,changes:{from:h,insert:``}}}}return{range:l}});return a.changes.empty?!1:(i.dispatch([s,o.update(a,{userEvent:"input.complete",scrollIntoView:!0})]),!0)});var _a=["_blank","_self","_top","_parent"],$m=["ascii","utf-8","utf-16","latin1","latin1"],Pm=["get","post","put","delete"],km=["application/x-www-form-urlencoded","multipart/form-data","text/plain"],ci=["true","false"],ce={},ZU={a:{attrs:{href:null,ping:null,type:null,media:null,target:_a,hreflang:null}},abbr:ce,address:ce,area:{attrs:{alt:null,coords:null,href:null,target:null,ping:null,media:null,hreflang:null,type:null,shape:["default","rect","circle","poly"]}},article:ce,aside:ce,audio:{attrs:{src:null,mediagroup:null,crossorigin:["anonymous","use-credentials"],preload:["none","metadata","auto"],autoplay:["autoplay"],loop:["loop"],controls:["controls"]}},b:ce,base:{attrs:{href:null,target:_a}},bdi:ce,bdo:ce,blockquote:{attrs:{cite:null}},body:ce,br:ce,button:{attrs:{form:null,formaction:null,name:null,value:null,autofocus:["autofocus"],disabled:["autofocus"],formenctype:km,formmethod:Pm,formnovalidate:["novalidate"],formtarget:_a,type:["submit","reset","button"]}},canvas:{attrs:{width:null,height:null}},caption:ce,center:ce,cite:ce,code:ce,col:{attrs:{span:null}},colgroup:{attrs:{span:null}},command:{attrs:{type:["command","checkbox","radio"],label:null,icon:null,radiogroup:null,command:null,title:null,disabled:["disabled"],checked:["checked"]}},data:{attrs:{value:null}},datagrid:{attrs:{disabled:["disabled"],multiple:["multiple"]}},datalist:{attrs:{data:null}},dd:ce,del:{attrs:{cite:null,datetime:null}},details:{attrs:{open:["open"]}},dfn:ce,div:ce,dl:ce,dt:ce,em:ce,embed:{attrs:{src:null,type:null,width:null,height:null}},eventsource:{attrs:{src:null}},fieldset:{attrs:{disabled:["disabled"],form:null,name:null}},figcaption:ce,figure:ce,footer:ce,form:{attrs:{action:null,name:null,"accept-charset":$m,autocomplete:["on","off"],enctype:km,method:Pm,novalidate:["novalidate"],target:_a}},h1:ce,h2:ce,h3:ce,h4:ce,h5:ce,h6:ce,head:{children:["title","base","link","style","meta","script","noscript","command"]},header:ce,hgroup:ce,hr:ce,html:{attrs:{manifest:null}},i:ce,iframe:{attrs:{src:null,srcdoc:null,name:null,width:null,height:null,sandbox:["allow-top-navigation","allow-same-origin","allow-forms","allow-scripts"],seamless:["seamless"]}},img:{attrs:{alt:null,src:null,ismap:null,usemap:null,width:null,height:null,crossorigin:["anonymous","use-credentials"]}},input:{attrs:{alt:null,dirname:null,form:null,formaction:null,height:null,list:null,max:null,maxlength:null,min:null,name:null,pattern:null,placeholder:null,size:null,src:null,step:null,value:null,width:null,accept:["audio/*","video/*","image/*"],autocomplete:["on","off"],autofocus:["autofocus"],checked:["checked"],disabled:["disabled"],formenctype:km,formmethod:Pm,formnovalidate:["novalidate"],formtarget:_a,multiple:["multiple"],readonly:["readonly"],required:["required"],type:["hidden","text","search","tel","url","email","password","datetime","date","month","week","time","datetime-local","number","range","color","checkbox","radio","file","submit","image","reset","button"]}},ins:{attrs:{cite:null,datetime:null}},kbd:ce,keygen:{attrs:{challenge:null,form:null,name:null,autofocus:["autofocus"],disabled:["disabled"],keytype:["RSA"]}},label:{attrs:{for:null,form:null}},legend:ce,li:{attrs:{value:null}},link:{attrs:{href:null,type:null,hreflang:null,media:null,sizes:["all","16x16","16x16 32x32","16x16 32x32 64x64"]}},map:{attrs:{name:null}},mark:ce,menu:{attrs:{label:null,type:["list","context","toolbar"]}},meta:{attrs:{content:null,charset:$m,name:["viewport","application-name","author","description","generator","keywords"],"http-equiv":["content-language","content-type","default-style","refresh"]}},meter:{attrs:{value:null,min:null,low:null,high:null,max:null,optimum:null}},nav:ce,noscript:ce,object:{attrs:{data:null,type:null,name:null,usemap:null,form:null,width:null,height:null,typemustmatch:["typemustmatch"]}},ol:{attrs:{reversed:["reversed"],start:null,type:["1","a","A","i","I"]},children:["li","script","template","ul","ol"]},optgroup:{attrs:{disabled:["disabled"],label:null}},option:{attrs:{disabled:["disabled"],label:null,selected:["selected"],value:null}},output:{attrs:{for:null,form:null,name:null}},p:ce,param:{attrs:{name:null,value:null}},pre:ce,progress:{attrs:{value:null,max:null}},q:{attrs:{cite:null}},rp:ce,rt:ce,ruby:ce,samp:ce,script:{attrs:{type:["text/javascript"],src:null,async:["async"],defer:["defer"],charset:$m}},section:ce,select:{attrs:{form:null,name:null,size:null,autofocus:["autofocus"],disabled:["disabled"],multiple:["multiple"]}},slot:{attrs:{name:null}},small:ce,source:{attrs:{src:null,type:null,media:null}},span:ce,strong:ce,style:{attrs:{type:["text/css"],media:null,scoped:null}},sub:ce,summary:ce,sup:ce,table:ce,tbody:ce,td:{attrs:{colspan:null,rowspan:null,headers:null}},template:ce,textarea:{attrs:{dirname:null,form:null,maxlength:null,name:null,placeholder:null,rows:null,cols:null,autofocus:["autofocus"],disabled:["disabled"],readonly:["readonly"],required:["required"],wrap:["soft","hard"]}},tfoot:ce,th:{attrs:{colspan:null,rowspan:null,headers:null,scope:["row","col","rowgroup","colgroup"]}},thead:ce,time:{attrs:{datetime:null}},title:ce,tr:ce,track:{attrs:{src:null,label:null,default:null,kind:["subtitles","captions","descriptions","chapters","metadata"],srclang:null}},ul:{children:["li","script","template","ul","ol"]},var:ce,video:{attrs:{src:null,poster:null,width:null,height:null,crossorigin:["anonymous","use-credentials"],preload:["auto","metadata","none"],autoplay:["autoplay"],mediagroup:["movie"],muted:["muted"],controls:["controls"]}},wbr:ce},fy={accesskey:null,class:null,contenteditable:ci,contextmenu:null,dir:["ltr","rtl","auto"],draggable:["true","false","auto"],dropzone:["copy","move","link","string:","file:"],hidden:["hidden"],id:null,inert:["inert"],itemid:null,itemprop:null,itemref:null,itemscope:["itemscope"],itemtype:null,lang:["ar","bn","de","en-GB","en-US","es","fr","hi","id","ja","pa","pt","ru","tr","zh"],spellcheck:ci,autocorrect:ci,autocapitalize:ci,style:null,tabindex:null,title:null,translate:["yes","no"],rel:["stylesheet","alternate","author","bookmark","help","license","next","nofollow","noreferrer","prefetch","prev","search","tag"],role:"alert application article banner button cell checkbox complementary contentinfo dialog document feed figure form grid gridcell heading img list listbox listitem main navigation region row rowgroup search switch tab table tabpanel textbox timer".split(" "),"aria-activedescendant":null,"aria-atomic":ci,"aria-autocomplete":["inline","list","both","none"],"aria-busy":ci,"aria-checked":["true","false","mixed","undefined"],"aria-controls":null,"aria-describedby":null,"aria-disabled":ci,"aria-dropeffect":null,"aria-expanded":["true","false","undefined"],"aria-flowto":null,"aria-grabbed":["true","false","undefined"],"aria-haspopup":ci,"aria-hidden":ci,"aria-invalid":["true","false","grammar","spelling"],"aria-label":null,"aria-labelledby":null,"aria-level":null,"aria-live":["off","polite","assertive"],"aria-multiline":ci,"aria-multiselectable":ci,"aria-owns":null,"aria-posinset":null,"aria-pressed":["true","false","mixed","undefined"],"aria-readonly":ci,"aria-relevant":null,"aria-required":ci,"aria-selected":["true","false","undefined"],"aria-setsize":null,"aria-sort":["ascending","descending","none","other"],"aria-valuemax":null,"aria-valuemin":null,"aria-valuenow":null,"aria-valuetext":null},dy="beforeunload copy cut dragstart dragover dragleave dragenter dragend drag paste focus blur change click load mousedown mouseenter mouseleave mouseup keydown keyup resize scroll unload".split(" ").map(i=>"on"+i);for(let i of dy)fy[i]=null;var jn=class{constructor(e,t){this.tags=st(st({},ZU),e),this.globalAttrs=st(st({},fy),t),this.allTags=Object.keys(this.tags),this.globalAttrNames=Object.keys(this.globalAttrs)}};jn.default=new jn;function qn(i,e,t=i.length){if(!e)return"";let r=e.firstChild,n=r&&r.getChild("TagName");return n?i.sliceString(n.from,Math.min(n.to,t)):""}function Fs(i,e=!1){for(;i;i=i.parent)if(i.name=="Element")if(e)e=!1;else return i;return null}function py(i,e,t){let r=t.tags[qn(i,Fs(e))];return(r==null?void 0:r.children)||t.allTags}function Tm(i,e){let t=[];for(let r=Fs(e);r&&!r.type.isTop;r=Fs(r.parent)){let n=qn(i,r);if(n&&r.lastChild.name=="CloseTag")break;n&&t.indexOf(n)<0&&(e.name=="EndTag"||e.from>=r.firstChild.to)&&t.push(n)}return t}var my=/^[:\-\.\w\u00b7-\uffff]*$/;function hy(i,e,t,r,n){let s=/\s*>/.test(i.sliceDoc(n,n+5))?"":">",o=Fs(t,t.name=="StartTag"||t.name=="TagName");return{from:r,to:n,options:py(i.doc,o,e).map(a=>({label:a,type:"type"})).concat(Tm(i.doc,t).map((a,l)=>({label:"/"+a,apply:"/"+a+s,type:"type",boost:99-l}))),validFor:/^\/?[:\-\.\w\u00b7-\uffff]*$/}}function Oy(i,e,t,r){let n=/\s*>/.test(i.sliceDoc(r,r+5))?"":">";return{from:t,to:r,options:Tm(i.doc,e).map((s,o)=>({label:s,apply:s+n,type:"type",boost:99-o})),validFor:my}}function UU(i,e,t,r){let n=[],s=0;for(let o of py(i.doc,t,e))n.push({label:"<"+o,type:"type"});for(let o of Tm(i.doc,t))n.push({label:"",type:"type",boost:99-s++});return{from:r,to:r,options:n,validFor:/^<\/?[:\-\.\w\u00b7-\uffff]*$/}}function AU(i,e,t,r,n){let s=Fs(t),o=s?e.tags[qn(i.doc,s)]:null,a=o&&o.attrs?Object.keys(o.attrs):[],l=o&&o.globalAttrs===!1?a:a.length?a.concat(e.globalAttrNames):e.globalAttrNames;return{from:r,to:n,options:l.map(c=>({label:c,type:"property"})),validFor:my}}function EU(i,e,t,r,n){var s;let o=(s=t.parent)===null||s===void 0?void 0:s.getChild("AttributeName"),a=[],l;if(o){let c=i.sliceDoc(o.from,o.to),h=e.globalAttrs[c];if(!h){let O=Fs(t),u=O?e.tags[qn(i.doc,O)]:null;h=(u==null?void 0:u.attrs)&&u.attrs[c]}if(h){let O=i.sliceDoc(r,n).toLowerCase(),u='"',f='"';/^['"]/.test(O)?(l=O[0]=='"'?/^[^"]*$/:/^[^']*$/,u="",f=i.sliceDoc(n,n+1)==O[0]?"":O[0],O=O.slice(1),r++):l=/^[^\s<>='"]*$/;for(let p of h)a.push({label:p,apply:u+p+f,type:"constant"})}}return{from:r,to:n,options:a,validFor:l}}function gy(i,e){let{state:t,pos:r}=e,n=_e(t).resolveInner(r,-1),s=n.resolve(r);for(let o=r,a;s==n&&(a=n.childBefore(o));){let l=a.lastChild;if(!l||!l.type.isError||l.fromgy(r,n)}var YU=Vi.parser.configure({top:"SingleExpression"}),xy=[{tag:"script",attrs:i=>i.type=="text/typescript"||i.lang=="ts",parser:Qm.parser},{tag:"script",attrs:i=>i.type=="text/babel"||i.type=="text/jsx",parser:wm.parser},{tag:"script",attrs:i=>i.type=="text/typescript-jsx",parser:ym.parser},{tag:"script",attrs(i){return/^(importmap|speculationrules|application\/(.+\+)?json)$/i.test(i.type)},parser:YU},{tag:"script",attrs(i){return!i.type||/^(?:text|application)\/(?:x-)?(?:java|ecma)script$|^module$|^$/i.test(i.type)},parser:Vi.parser},{tag:"style",attrs(i){return(!i.lang||i.lang=="css")&&(!i.type||/^(text\/)?(x-)?(stylesheet|css)$/i.test(i.type))},parser:Ta.parser}],Sy=[{name:"style",parser:Ta.parser.configure({top:"Styles"})}].concat(dy.map(i=>({name:i,parser:Vi.parser}))),vy=vt.define({name:"html",parser:Ew.configure({props:[wi.add({Element(i){let e=/^(\s*)(<\/)?/.exec(i.textAfter);return i.node.to<=i.pos+e[0].length?i.continue():i.lineIndent(i.node.from)+(e[2]?0:i.unit)},"OpenTag CloseTag SelfClosingTag"(i){return i.column(i.node.from)+i.unit},Document(i){if(i.pos+/\s*/.exec(i.textAfter)[0].lengthi.getChild("TagName")})]}),languageData:{commentTokens:{block:{open:""}},indentOnInput:/^\s*<\/\w+\W$/,wordChars:"-_"}}),zh=vy.configure({wrap:pm(xy,Sy)});function Qy(i={}){let e="",t;i.matchClosingTags===!1&&(e="noMatch"),i.selfClosingTags===!0&&(e=(e?e+" ":"")+"selfClosing"),(i.nestedLanguages&&i.nestedLanguages.length||i.nestedAttributes&&i.nestedAttributes.length)&&(t=pm((i.nestedLanguages||[]).concat(xy),(i.nestedAttributes||[]).concat(Sy)));let r=t?vy.configure({wrap:t,dialect:e}):e?zh.configure({dialect:e}):zh;return new Ee(r,[zh.data.of({autocomplete:zU(i)}),i.autoCloseTags!==!1?LU:[],cy().support,Nw().support])}var uy=new Set("area base br col command embed frame hr img input keygen link meta param source track wbr menuitem".split(" "));function MU(i,e,t){for(var r;;){if(((r=e.lastChild)===null||r===void 0?void 0:r.name)!="CloseTag")return!1;let n=e.parent;if(!n||qn(i,n)!=t)return!0;e=n}}var LU=W.inputHandler.of((i,e,t,r,n)=>{if(i.composing||i.state.readOnly||e!=t||r!=">"&&r!="/"||!zh.isActiveAt(i.state,e,-1))return!1;let s=n(),{state:o}=s,a=o.changeByRange(l=>{var c;let h=o.doc.sliceString(l.from-1,l.to)==r,{head:O}=l,u=_e(o).resolveInner(O,-1),f;if(h&&r==">"&&u.name=="EndTag"){let p=u.parent;if((f=qn(o.doc,p.parent,O))&&!uy.has(f)&&!MU(o.doc,p.parent,f)){let m=O+(o.doc.sliceString(O,O+1)===">"?1:0),S=``;return{range:l,changes:{from:O,to:m,insert:S}}}}else if(h&&r=="/"&&u.name=="IncompleteCloseTag"){let p=u.parent;if(u.from==O-2&&((c=p.lastChild)===null||c===void 0?void 0:c.name)!="CloseTag"&&(f=qn(o.doc,p,O))&&!uy.has(f)){let m=O+(o.doc.sliceString(O,O+1)===">"?1:0),S=`${f}>`;return{range:U.cursor(O+S.length,-1),changes:{from:O,to:m,insert:S}}}}return{range:l}});return a.changes.empty?!1:(i.dispatch([s,o.update(a,{userEvent:"input.complete",scrollIntoView:!0})]),!0)});var $y=Rs({commentTokens:{block:{open:""}}}),Py=new fe,ky=uw.configure({props:[Rt.add(i=>!i.is("Block")||i.is("Document")||Rm(i)!=null||WU(i)?void 0:(e,t)=>({from:t.doc.lineAt(e.from).to,to:e.to})),Py.add(Rm),wi.add({Document:()=>null}),vr.add({Document:$y})]});function Rm(i){let e=/^(?:ATX|Setext)Heading(\d)$/.exec(i.name);return e?+e[1]:void 0}function WU(i){return i.name=="OrderedList"||i.name=="BulletList"}function VU(i,e){let t=i;for(;;){let r=t.nextSibling,n;if(!r||(n=Rm(r.type))!=null&&n<=e)break;t=r}return t.to}var jU=yd.of((i,e,t)=>{for(let r=_e(i).resolveInner(t,-1);r&&!(r.fromt)return{from:t,to:s}}return null});function Cm(i){return new _t($y,i,[],"markdown")}var qU=Cm(ky),DU=ky.configure([pw,bw,gw,xw,{props:[Rt.add({Table:(i,e)=>({from:e.doc.lineAt(i.from).to,to:i.to})})]}]),Yh=Cm(DU);function IU(i,e){return t=>{if(t&&i){let r=null;if(t=/\S*/.exec(t)[0],typeof i=="function"?r=i(t):r=ia.matchLanguageName(i,t,!0),r instanceof ia)return r.support?r.support.language.parser:Rn.getSkippingParser(r.load());if(r)return r.parser}return e?e.parser:null}}var Ra=class{constructor(e,t,r,n,s,o,a){this.node=e,this.from=t,this.to=r,this.spaceBefore=n,this.spaceAfter=s,this.type=o,this.item=a}blank(e,t=!0){let r=this.spaceBefore+(this.node.name=="Blockquote"?">":"");if(e!=null){for(;r.length0;n--)r+=" ";return r+(t?this.spaceAfter:"")}}marker(e,t){let r=this.node.name=="OrderedList"?String(+Xy(this.item,e)[2]+t):"";return this.spaceBefore+r+this.type+this.spaceAfter}};function Ty(i,e){let t=[],r=[];for(let n=i;n;n=n.parent){if(n.name=="FencedCode")return r;(n.name=="ListItem"||n.name=="Blockquote")&&t.push(n)}for(let n=t.length-1;n>=0;n--){let s=t[n],o,a=e.lineAt(s.from),l=s.from-a.from;if(s.name=="Blockquote"&&(o=/^ *>( ?)/.exec(a.text.slice(l))))r.push(new Ra(s,l,l+o[0].length,"",o[1],">",null));else if(s.name=="ListItem"&&s.parent.name=="OrderedList"&&(o=/^( *)\d+([.)])( *)/.exec(a.text.slice(l)))){let c=o[3],h=o[0].length;c.length>=4&&(c=c.slice(0,c.length-4),h-=4),r.push(new Ra(s.parent,l,l+h,o[1],c,o[2],s))}else if(s.name=="ListItem"&&s.parent.name=="BulletList"&&(o=/^( *)([-+*])( {1,4}\[[ xX]\])?( +)/.exec(a.text.slice(l)))){let c=o[4],h=o[0].length;c.length>4&&(c=c.slice(0,c.length-4),h-=4);let O=o[2];o[3]&&(O+=o[3].replace(/[xX]/," ")),r.push(new Ra(s.parent,l,l+h,o[1],c,O,s))}}return r}function Xy(i,e){return/^(\s*)(\d+)(?=[.)])/.exec(e.sliceString(i.from,i.from+10))}function Xm(i,e,t,r=0){for(let n=-1,s=i;;){if(s.name=="ListItem"){let a=Xy(s,e),l=+a[2];if(n>=0){if(l!=n+1)return;t.push({from:s.from+a[1].length,to:s.from+a[0].length,insert:String(n+2+r)})}n=l}let o=s.nextSibling;if(!o)break;s=o}}function Zm(i,e){let t=/^[ \t]*/.exec(i)[0].length;if(!t||e.facet(Qi)!=" ")return i;let r=Yt(i,4,t),n="";for(let s=r;s>0;)s>=4?(n+=" ",s-=4):(n+=" ",s--);return n+i.slice(t)}var FU=(i={})=>({state:e,dispatch:t})=>{let r=_e(e),{doc:n}=e,s=null,o=e.changeByRange(a=>{if(!a.empty||!Yh.isActiveAt(e,a.from,-1)&&!Yh.isActiveAt(e,a.from,1))return s={range:a};let l=a.from,c=n.lineAt(l),h=Ty(r.resolveInner(l,-1),n);for(;h.length&&h[h.length-1].from>l-c.from;)h.pop();if(!h.length)return s={range:a};let O=h[h.length-1];if(O.to-O.spaceAfter.length>l-c.from)return s={range:a};let u=l>=O.to-O.spaceAfter.length&&!/\S/.test(c.text.slice(O.to));if(O.item&&u){if(O.item.from]*$/.test(c.text.slice(0,O.to)))return s={range:a};let w=O.node.firstChild,Z=O.node.getChild("ListItem","ListItem");if(w.to>=l||Z&&Z.to0&&!/[^\s>]/.test(n.lineAt(c.from-1).text)||i.nonTightLists===!1){let R=h.length>1?h[h.length-2]:null,A,k="";R&&R.item?(A=c.from+R.from,k=R.marker(n,1)):A=c.from+(R?R.to:0);let P=[{from:A,to:l,insert:k}];return O.node.name=="OrderedList"&&Xm(O.item,n,P,-2),R&&R.node.name=="OrderedList"&&Xm(R.item,n,P),{range:U.cursor(A+k.length),changes:P}}else{let R=yy(h,e,c);return{range:U.cursor(l+R.length+1),changes:{from:c.from,insert:R+e.lineBreak}}}}if(O.node.name=="Blockquote"&&u&&c.from){let w=n.lineAt(c.from-1),Z=/>\s*$/.exec(w.text);if(Z&&Z.index==O.from){let R=e.changes([{from:w.from+Z.index,to:w.to},{from:c.from+O.from,to:c.to}]);return{range:a.map(R),changes:R}}}let f=[];O.node.name=="OrderedList"&&Xm(O.item,n,f);let p=O.item&&O.item.from]*/.exec(c.text)[0].length>=O.to)for(let w=0,Z=h.length-1;w<=Z;w++)m+=w==Z&&!p?h[w].marker(n,1):h[w].blank(wc.from&&/\s/.test(c.text.charAt(S-c.from-1));)S--;return m=Zm(m,e),NU(O.node,e.doc)&&(m=yy(h,e,c)+e.lineBreak+m),f.push({from:S,to:l,insert:e.lineBreak+m}),{range:U.cursor(S+m.length+1),changes:f}});return s?!1:(t(e.update(o,{scrollIntoView:!0,userEvent:"input"})),!0)},BU=FU();function wy(i){return i.name=="QuoteMark"||i.name=="ListMark"}function NU(i,e){if(i.name!="OrderedList"&&i.name!="BulletList")return!1;let t=i.firstChild,r=i.getChild("ListItem","ListItem");if(!r)return!1;let n=e.lineAt(t.to),s=e.lineAt(r.from),o=/^[\s>]*$/.test(n.text);return n.number+(o?0:1){let t=_e(i),r=null,n=i.changeByRange(s=>{let o=s.from,{doc:a}=i;if(s.empty&&Yh.isActiveAt(i,s.from)){let l=a.lineAt(o),c=Ty(GU(t,o),a);if(c.length){let h=c[c.length-1],O=h.to-h.spaceAfter.length+(h.spaceAfter?1:0);if(o-l.from>O&&!/\S/.test(l.text.slice(O,o-l.from)))return{range:U.cursor(l.from+O),changes:{from:l.from+O,to:o}};if(o-l.from==O&&(h.item&&l.from<=h.item.from||/^[\s>]*$/.test(l.text.slice(0,h.to)))){let u=l.from+h.from;if(h.item&&h.node.from{var t;let{main:r}=e.state.selection;if(r.empty)return!1;let n=(t=i.clipboardData)===null||t===void 0?void 0:t.getData("text/plain");if(!n||!/^(https?:\/\/|mailto:|xmpp:|www\.)/.test(n)||(/^www\./.test(n)&&(n="https://"+n),!Yh.isActiveAt(e.state,r.from,1)))return!1;let s=_e(e.state),o=!1;return s.iterate({from:r.from,to:r.to,enter:a=>{(a.from>r.from||tA.test(a.name))&&(o=!0)},leave:a=>{a.to')`,backgroundPosition:"left 50%"},".tab-stop-ruler":{color:"rgba(255,255,255,0.35)",backgroundColor:"#002240",borderBottom:"2px solid #0055ff88"}},{dark:!0}),nA=Ir.define([{tag:d.standard(d.keyword),color:"#99ff99"},{tag:[d.name,d.standard(d.name)],color:"#eee"},{tag:d.variableName,color:"#76f6ff"},{tag:d.local(d.variableName),color:"#ffff99"},{tag:[d.deleted,d.macroName],color:"#ffbb99"},{tag:[d.processingInstruction,d.keyword,d.controlKeyword],color:"#c5bdff"},{tag:[d.string,d.inserted],color:"#68ff98"},{tag:[d.number,d.modifier],color:"#ff99ff"},{tag:[d.atom,d.bool,d.special(d.variableName)],color:"#ffc261"},{tag:d.definition(d.variableName),color:"#fff"},{tag:[d.propertyName,d.attributeName,d.tagName,d.self],color:"#b2ebf2"},{tag:d.definition(d.name),color:"#f0f0f0"},{tag:d.typeName,color:"#9be8c5"},{tag:d.bracket,color:"#d8d8d8"},{tag:d.comment,color:"#999"},{tag:d.link,color:"#c3b1e1"},{tag:d.meta,color:"#ffd9a0"},{tag:d.invalid,color:"#ff6666"},{tag:d.operator,color:"#ffa3f0"}]),Mh=[rA,qc(nA)];var Zy=W.theme({"&":{maxHeight:"100%"}});var Am=W.theme({"&":{height:"100%"},".cm-currentpc":{backgroundColor:"#7e2a70 !important"},".currentpc-span-blocked":{backgroundColor:"#7e2a70 !important"},".currentpc-marker-blocked":{color:"#ffee33"},".highlight-lines":{backgroundColor:"#003399 !important"},".cm-traced-line":{backgroundColor:"rgba(129, 123, 249, 0.15)"},".cm-error-span":{textDecoration:"underline wavy red",backgroundColor:"rgba(255, 0, 0, 0.15)"},".gutter-offset .cm-gutterElement":{paddingRight:"0.25em"},".gutter-bytes .cm-gutterElement":{paddingLeft:"0.25em",paddingRight:"0.25em"},".gutter-currentpc .cm-gutterElement":{color:"#ff66ee"},".gutter-clock .cm-gutterElement":{paddingLeft:"0.25em",paddingRight:"0.25em"}});var sA=W.theme({"&":{backgroundColor:"#2c2c2c",color:"#ffffec",caretColor:"#ffffec"},"&.cm-focused .cm-selectionBackground, .cm-selectionBackground, ::selection":{backgroundColor:"#a29b8c7b !important"},".cm-selectionMatch":{backgroundColor:"#ffffff30"},".cm-activeLine":{backgroundColor:"#ffffff0a"},".cm-activeLineGutter":{backgroundColor:"#68686588"},".cm-matchingBracket":{color:"#33ff33 !important"},".cm-matchingTag":{backgroundColor:"rgba(255,255,255,0.37)"},".cm-cursor":{borderLeftColor:"#ffffec"},".cm-gutters , .cm-panels":{backgroundColor:"#4e4e4e"},".cm-lineNumbers .cm-gutterElement":{color:"#dadada"},".gutter-bytes .cm-gutterElement":{color:"#999"},".cm-highlightSpace":{backgroundImage:"radial-gradient(circle at 50% 55%, #aaaaaa45 11%, transparent 5%)"},".cm-highlightTab":{backgroundImage:`url('data:image/svg+xml,')`,backgroundPosition:"left 50%"},".tab-stop-ruler":{color:"rgba(255,255,255,0.25)",backgroundColor:"#202020",borderBottom:"2px solid #4e4e4e"}},{dark:!0}),oA=Ir.define([{tag:[d.processingInstruction],color:"#ff9cf7"},{tag:[d.keyword,d.controlKeyword,d.modifier],color:"#ffb928"},{tag:[d.name,d.standard(d.name),d.variableName],color:"#ffffec"},{tag:[d.deleted,d.macroName],color:"#00a8c6"},{tag:[d.string,d.inserted],color:"#b4fdb7"},{tag:[d.number],color:"#3abff8"},{tag:[d.atom,d.bool],color:"#02c7ea"},{tag:d.definition(d.variableName),color:"#88eeff"},{tag:[d.propertyName,d.attributeName,d.tagName,d.self],color:"#9ddfe9"},{tag:d.definition(d.name),color:"#88eeff"},{tag:[d.special(d.keyword),d.special(d.variableName)],color:"#fdda93"},{tag:[d.typeName,d.standard(d.keyword)],color:"#ffb928"},{tag:[d.bracket,d.constant(d.modifier)],color:"#8fdedd",fontWeight:"bold"},{tag:d.comment,color:"#95958a"},{tag:d.link,color:"#f54b07"},{tag:d.meta,color:"#aaddaa"},{tag:d.namespace,color:"#ffffec"},{tag:d.invalid,color:"#ffffec",borderBottom:"1px solid #636363"}]),Lh=[sA,qc(oA)];var aA=["<<",">>","<=",">=","==","!=","&&","||"],lA="+-*/%<>!~&|^()[]";function cA(i){let e=[],t=0;for(;t",">=");)this.next(),e={t:"bin",op:t,a:e,b:this.parseShift()};return e}parseShift(){let e=this.parseAdditive(),t;for(;t=this.atOp("<<",">>");)this.next(),e={t:"bin",op:t,a:e,b:this.parseAdditive()};return e}parseAdditive(){let e=this.parseMultiplicative(),t;for(;t=this.atOp("+","-");)this.next(),e={t:"bin",op:t,a:e,b:this.parseMultiplicative()};return e}parseMultiplicative(){let e=this.parseUnary(),t;for(;t=this.atOp("*","/","%");)this.next(),e={t:"bin",op:t,a:e,b:this.parseUnary()};return e}parseUnary(){let e=this.atOp("-","!","~","+");return e?(this.next(),{t:"un",op:e,a:this.parseUnary()}):this.parsePrimary()}parsePrimary(){let e=this.next();if(!e)throw new Error("unexpected end of expression");if(e.t=="num")return{t:"num",v:e.num};if(e.t=="id")return{t:"id",name:e.v};if(e.t=="op"&&e.v=="("){let t=this.parseOr();return this.expect(")"),t}if(e.t=="op"&&e.v=="["){let t=this.parseOr();return this.expect("]"),{t:"mem",a:t}}throw new Error("unexpected '"+e.v+"'")}};function Ca(i,e){switch(i.t){case"num":{let t=i.v;return()=>t}case"id":{let t=i.name;if(e.cpuFields.has(t))return n=>{let s=n[t];return typeof s=="number"?s:0};let r=e.symbol(t);if(typeof r=="number"){let n=r;return()=>n}throw new Error("unknown identifier '"+t+"'")}case"mem":{let t=Ca(i.a,e);return r=>{if(!e.readMem)throw new Error("memory reads not supported");let n=e.readMem(t(r)&65535);if(typeof n!="number")throw new Error("cannot read memory");return n}}case"un":{let t=Ca(i.a,e);switch(i.op){case"-":return r=>-t(r);case"~":return r=>~t(r);case"!":return r=>t(r)?0:1;case"+":return t}break}case"bin":{let t=Ca(i.a,e),r=Ca(i.b,e);switch(i.op){case"||":return n=>t(n)||r(n)?1:0;case"&&":return n=>t(n)&&r(n)?1:0;case"|":return n=>t(n)|r(n);case"^":return n=>t(n)^r(n);case"&":return n=>t(n)&r(n);case"==":return n=>t(n)==r(n)?1:0;case"!=":return n=>t(n)!=r(n)?1:0;case"<":return n=>t(n)t(n)<=r(n)?1:0;case">":return n=>t(n)>r(n)?1:0;case">=":return n=>t(n)>=r(n)?1:0;case"<<":return n=>t(n)<>":return n=>t(n)>>r(n);case"+":return n=>t(n)+r(n);case"-":return n=>t(n)-r(n);case"*":return n=>t(n)*r(n);case"/":return n=>{let s=r(n);return s===0?0:t(n)/s|0};case"%":return n=>{let s=r(n);return s===0?0:t(n)%s}}break}}throw new Error("bad expression node")}function Uy(i,e){let t=new Em(cA(i)).parse(),r=Ca(t,e);return n=>{try{return r(n)!=0}catch(s){return!1}}}function Ay(i,e){let t=(i||"").trim();if(!t)return{error:"empty address"};let r;if((r=t.match(/^\$([0-9a-fA-F]+)$/))||(r=t.match(/^0[xX]([0-9a-fA-F]+)$/)))return{pc:parseInt(r[1],16)};if(/^\d+$/.test(t))return{pc:parseInt(t,10)};let n=e(t);return typeof n=="number"?{pc:n}:{error:"unknown symbol '"+t+"'"}}var zm="8bitworkshop.breakpoints.v1",Ym=class{constructor(){this.breakpoints=[];this.nextId=1;this.listeners=[];this.contextFn=()=>""}setContextFn(e){this.contextFn=e}subscribe(e){this.listeners.push(e)}notify(){for(let e of this.listeners.slice())e()}changed(){this.save(),this.notify()}getAll(){return this.breakpoints}getEnabled(){return this.breakpoints.filter(e=>e.enabled)}getSourceBreakpointsForFile(e){return this.breakpoints.filter(t=>t.type=="source"&&t.file==e)}addSourceBreakpoint(e,t){let r={id:this.nextId++,type:"source",file:e,line:t,enabled:!0};return this.breakpoints.push(r),this.changed(),r}addAddressBreakpoint(e,t){let r=(e||"").trim().toLowerCase(),n=this.breakpoints.find(o=>o.type=="address"&&(o.target||"").trim().toLowerCase()==r);if(n)return this.update(n.id,{enabled:!0,condition:t}),n;let s={id:this.nextId++,type:"address",target:e.trim(),enabled:!0,condition:t};return this.breakpoints.push(s),this.changed(),s}remove(e){this.breakpoints=this.breakpoints.filter(t=>t.id!=e),this.changed()}setEnabled(e,t){let r=this.breakpoints.find(n=>n.id==e);r&&r.enabled!=t&&(r.enabled=t,this.changed())}update(e,t){let r=this.breakpoints.find(n=>n.id==e);r&&(Object.assign(r,t),this.changed())}toggleSourceLine(e,t){let r=this.breakpoints.find(n=>n.type=="source"&&n.file==e&&n.line==t);r?this.remove(r.id):this.addSourceBreakpoint(e,t)}load(){if(typeof localStorage!="undefined")try{let t=JSON.parse(localStorage.getItem(zm)||"{}")[this.contextFn()];this.breakpoints=Array.isArray(t)?t:[],this.nextId=1;for(let r of this.breakpoints)this.nextId=Math.max(this.nextId,r.id+1)}catch(e){this.breakpoints=[]}}save(){if(typeof localStorage!="undefined")try{let e={},t=localStorage.getItem(zm);t&&(e=JSON.parse(t)),e[this.contextFn()]=this.breakpoints,localStorage.setItem(zm,JSON.stringify(e))}catch(e){console.log("breakpoints: save failed",e)}}},Qt=new Ym;function Ey(){return i=>{let e=v&&v.debugSymbols&&v.debugSymbols.symbolmap;if(e)return i in e?e[i]:e["_"+i]}}function hA(){let i=new Set;try{let e=v&&v.getCPUState&&v.getCPUState();e&&(i=new Set(Object.keys(e)))}catch(e){}return{cpuFields:i,symbol:Ey(),readMem:v&&v.readAddress?e=>v.readAddress(e):void 0}}function OA(i){try{let e;if(i.type=="source"){let r=K.getListingForFile(i.file),n=r&&(r.sourcefile||r.assemblyfile);if(!n)return{bp:i,error:"no debug info (build first?)"};if(e=n.line2offset.get(i.line),!(e>=0))return{bp:i,error:"line has no code"}}else{let r=Ay(i.target,Ey());if(r.error)return{bp:i,error:r.error};e=r.pc}let t;return i.condition&&i.condition.trim()&&(t=Uy(i.condition,hA())),{bp:i,pc:e,condFn:t}}catch(e){return{bp:i,error:String(e.message||e)}}}function Wh(){return Qt.getAll().map(i=>OA(i))}var Mm=class extends at{constructor(t,r){super();this.header=t;this.handleClick=r}toDOM(){let t=document.createElement("span");return t.className="asset-header-badge",t.textContent="\u2197 Asset Editor",t.title="Open in Asset Editor",t.addEventListener("click",r=>{r.preventDefault(),r.stopPropagation(),this.handleClick(t)}),t}eq(t){return this.header===t.header}ignoreEvent(){return!1}},zy=/[/;][*;](\{.+?\})[*;][/;]/g;function Yy(i,e){let t=[];for(let{from:r,to:n}of i.visibleRanges){let s=i.state.sliceDoc(r,n),o=r,a=s.split(` `);for(let l of a){zy.lastIndex=0;let c=zy.exec(l);if(c){let h=o+c.index+c[0].length;t.push(F.widget({widget:new Mm(c[0],e),side:-1}).range(h))}o+=l.length+1}}return F.set(t,!0)}function My(i){let e;function t(r){let n=e.posAtDOM(r);i(e.state.doc.lineAt(n).number)}return je.fromClass(class{constructor(r){e=r,this.decorations=Yy(r,t)}update(r){e=r.view,(r.docChanged||r.viewportChanged)&&(this.decorations=Yy(r.view,t))}},{decorations:r=>r.decorations})}var Lm=class extends at{constructor(t,r,n){super();this.filename=t;this.system=r;this.handleClick=n}toDOM(){let t=document.createElement("span");return t.className="include-link-badge",t.textContent="\u2192",t.title=(this.system?"System header: ":"View ")+this.filename,t.addEventListener("click",r=>{r.preventDefault(),r.stopPropagation(),this.handleClick(this.filename,this.system)}),t}eq(t){return this.filename===t.filename&&this.system===t.system}ignoreEvent(){return!1}};function uA(i,e,t){let r=[],n=i.state.doc,s=new Set;for(let{from:o,to:a}of i.visibleRanges){let l=i.state.sliceDoc(o,a);for(let c of e){let h=c instanceof RegExp?{re:c}:c;h.re.lastIndex=0;let O;for(;O=h.re.exec(l);){let u=O[h.group!=null?h.group:O.length-1];if(!u)continue;let f=h.suffix?u+h.suffix:u,p=Math.min(o+O.index+O[0].length,n.length),m=n.lineAt(p),S=m.number+":"+f;s.has(S)||(s.add(S),r.push(F.widget({widget:new Lm(f,!!h.system,t),side:1}).range(m.to)))}}}return F.set(r,!0)}function Ly(i,e){function t(r){let n=i();return!n||!n.length?F.none:uA(r,n,e)}return je.fromClass(class{constructor(r){this.decorations=t(r)}update(r){(r.docChanged||r.viewportChanged)&&(this.decorations=t(r.view))}},{decorations:r=>r.decorations})}var Bs=window.matchMedia&&window.matchMedia("only screen and (max-width: 760px)").matches;function cr(i,e){var t=$(document.createElement("div"));return i&&t.appendTo(i),e&&t.addClass(e),t}function fA(i){return we.transactionFilter.of(e=>{if(!e.docChanged||!e.isUserEvent("input")||!i.input)return e;let t=[],r=!1;if(e.changes.iterChanges((o,a,l,c,h)=>{let O=h.toString(),u=i.input(O);t.push({from:o,to:a,insert:u}),u!==O&&(r=!0)}),!r)return e;let n=e.annotation(Ge.userEvent),s=e.annotation(Ge.addToHistory);return{changes:t,selection:e.selection,effects:e.effects,scrollIntoView:e.scrollIntoView,annotations:[...n!=null?[Ge.userEvent.of(n)]:[],...s!=null?[Ge.addToHistory.of(s)]:[]]}})}var Wm=new bt;function Wy(i){return Wm.reconfigure(fA(i))}var Vy=ae.define(),jy=ae.define(),qy=ae.define(),Dy=ae.define(),Iy=ae.define(),Fy=ae.define(),By=ae.define(),jm=ae.define(),Ny=ae.define(),Gy=Te.define({create(){return pe.empty},update(i,e){i=i.map(e.changes);for(let t of e.effects)if(t.is(Vy)){let r=t.value,n=[];for(let[s,o]of r.entries())if(s>=1&&s<=e.state.doc.lines){let a=e.state.doc.line(s).from;n.push(new Vh(ve(o,4)).range(a))}i=pe.of(n,!0)}return i}}),Hy=Te.define({create(){return pe.empty},update(i,e){i=i.map(e.changes);for(let t of e.effects)if(t.is(jy)){let r=t.value,n=[];for(let[s,o]of r.entries())if(s>=1&&s<=e.state.doc.lines){let a=e.state.doc.line(s).from;n.push(new jh(o).range(a))}i=pe.of(n,!0)}return i}}),Ky=Te.define({create(){return pe.empty},update(i,e){i=i.map(e.changes);for(let t of e.effects)if(t.is(qy)){let r=t.value,n=[];for(let[s,o]of r.entries())if(s>=1&&s<=e.state.doc.lines){let a=e.state.doc.line(s).from;n.push(new qh(o).range(a))}i=pe.of(n,!0)}return i}}),Jy=Te.define({create(){return pe.empty},update(i,e){i=i.map(e.changes);for(let t of e.effects)if(t.is(Iy)){let r=[],n=t.value.filter(s=>s.line>=1&&s.line<=e.state.doc.lines).sort((s,o)=>s.line-o.line);for(let s of n){let o=e.state.doc.line(s.line).from;r.push((s.enabled?pA:mA).range(o))}i=pe.of(r,!0)}return i}}),Vm=Te.define({create(){return pe.empty},update(i,e){i=i.map(e.changes);for(let t of e.effects)if(t.is(Fy)){let r=t.value,n=[];for(let[s,o]of r.entries())if(s>=1&&s<=e.state.doc.lines){let a=e.state.doc.line(s).from;n.push(new Ih(s,o).range(a))}i=pe.of(n,!0)}return i}}),e$=Te.define({create(){return pe.empty},update(i,e){i=i.map(e.changes);for(let t of e.effects)if(t.is(By))if(t.value===null)i=pe.empty;else{let r=t.value;if(r>=1&&r<=e.state.doc.lines){let n=e.state.doc.line(r).from;i=pe.of(t$.range(n))}}return i}}),Vh=class extends nt{constructor(t){super();this.hex=t}toDOM(){let t=document.createElement("span");return t.textContent=this.hex,t.style.cursor="pointer",t.title="Click to run to here",t.addEventListener("mouseenter",()=>{t.style.textDecoration="underline"}),t.addEventListener("mouseleave",()=>{t.style.textDecoration="none"}),t}eq(t){return this.hex==t.hex}},jh=class extends nt{constructor(t){super();this.bytes=t}toDOM(){return document.createTextNode(this.bytes)}eq(t){return this.bytes==t.bytes}},qh=class extends nt{constructor(t){super();this.clock=t}toDOM(){return document.createTextNode(this.clock)}eq(t){return this.clock==t.clock}},dA=new class extends nt{toDOM(){let i=document.createElement("span");return i.textContent="\u25CF",i.style.color="transparent",i.style.cursor="pointer",i.addEventListener("mouseenter",()=>{i.style.color="rgba(255, 0, 0, 0.5)"}),i.addEventListener("mouseleave",()=>{i.style.color="transparent"}),i}},Dh=class extends nt{constructor(t){super();this.enabled=t}toDOM(){let t=document.createElement("span");return t.innerHTML="\u25CF",t.style.color=this.enabled?"rgba(255, 0, 0, 1.0)":"rgba(255, 255, 255, 0.35)",t.style.cursor="pointer",t.title=this.enabled?"Breakpoint (click to remove; manage in Breakpoints window)":"Disabled breakpoint (click to remove)",t}eq(t){return this.enabled==t.enabled}},pA=new Dh(!0),mA=new Dh(!1),Ih=class extends nt{constructor(t,r){super();this.line=t;this.msg=r}toDOM(){let t=document.createElement("span");return t.innerHTML="\u24E7",t.style.color="red",t.style.cursor="pointer",t.title=this.msg,t}eq(t){return this.line==t.line&&this.msg==t.msg}},gA=new class extends nt{toDOM(){let i=document.createElement("span");return i.textContent="\u25B6",i.style.color="transparent",i.style.cursor="pointer",i.title="Click to run to here",i.addEventListener("mouseenter",()=>{i.style.color="#ffee66"}),i.addEventListener("mouseleave",()=>{i.style.color="transparent"}),i}},t$=new class extends nt{toDOM(){let i=document.createElement("span");return i.innerHTML="\u25B6",i.style.color="#ff66ee",i.style.cursor="pointer",i.title="Current PC",i}},bA=Lr({class:"gutter-offset",markers:i=>i.state.field(Gy),initialSpacer:()=>new Vh("0000"),domEventHandlers:{click(i,e){let t=i.state.doc.lineAt(e.from).number;return i.dispatch({effects:jm.of(t)}),!0}}}),xA=Lr({class:"gutter-bytes",markers:i=>i.state.field(Hy),initialSpacer:()=>new jh("00 00 00")}),SA=Lr({class:"gutter-clock",markers:i=>i.state.field(Ky),initialSpacer:()=>new qh("00")}),vA=Lr({class:"gutter-status",lineMarker(i,e,t){return t.length===0?dA:null},markers:i=>{let e=i.state.field(Vm);return e.size>0?e:i.state.field(Jy)},initialSpacer:()=>new Ih(0,"\u24E7"),domEventHandlers:{click(i,e){let t=i.state.field(Vm);if(t.size>0){let r=e.from,n="";if(t.between(r,r,(s,o,a)=>{n=a.msg}),n){let s=i.state.doc.lineAt(e.from).number;i.dispatch({effects:Ny.of({line:s,msg:n,toggle:!0})})}}else{let r=i.state.doc.lineAt(e.from).number;i.dispatch({effects:Dy.of(r)})}return!0}}}),QA=Lr({class:"gutter-currentpc",lineMarker(i,e,t){return t.length===0?gA:null},markers:i=>i.state.field(e$),initialSpacer:()=>t$,domEventHandlers:{click(i,e){let t=i.state.doc.lineAt(e.from).number;return i.dispatch({effects:jm.of(t)}),!0}}}),Fh={set:Vy,field:Gy,gutter:bA},Za={set:jy,field:Hy,gutter:xA},Bh={set:qy,field:Ky,gutter:SA},Nh={requestToggle:Dy,setAll:Iy,field:Jy},Dn={set:Fy,field:Vm,showMessage:Ny},i$={gutter:vA},Ns={set:By,runToLine:jm,field:e$,gutter:QA};var r$=ae.define(),n$=F.line({attributes:{class:"cm-currentpc"}}),wA=Te.define({create(){return F.none},update(i,e){i=i.map(e.changes);for(let t of e.effects)if(t.is(r$)){if(t.value===null)return F.none;let r=e.state.doc.line(t.value);return F.set([n$.range(r.from)])}return i},provide:i=>W.decorations.from(i)}),Ua=class extends at{constructor(t){super();this.message=t}toDOM(){let t=document.createElement("div");return t.textContent=this.message,t.style.cssText=` color: #ff6666; background-color: #330000; @@ -69,8 +69,8 @@ Connect your audio output to the SuperCharger input, turn up the volume, and pla color: #ccccff; background-color: #000066; display: inline-block; - `,t.className="cm-line",t}},s$=ae.define(),$A=Te.define({create(){return F.none},update(i,e){i=i.map(e.changes);for(let t of e.effects)if(t.is(s$)){if(t.value===null||!t.value)return F.none;let r=e.state.doc.lineAt(t.value.range.to);return F.set([F.widget({widget:new qm(t.value.val),block:!0,side:1}).range(r.to)])}return i},provide:i=>W.decorations.from(i)}),o$=ae.define(),PA=F.mark({attributes:{class:"cm-error-span"}}),kA=Te.define({create(){return F.none},update(i,e){i=i.map(e.changes);for(let t of e.effects)if(t.is(o$)){if(t.value===null)return F.none;let r=[];for(let n of t.value)try{let s=e.state.doc.line(n.line),o=s.from+n.start,a=s.from+n.end;o>=s.from&&a<=s.to&&oW.decorations.from(i)}),a$=ae.define(),TA=F.line({attributes:{class:"highlight-lines"}}),XA=Te.define({create(){return F.none},update(i,e){i=i.map(e.changes);for(let t of e.effects)if(t.is(a$)){if(t.value===null)return F.none;let{start:r,end:n}=t.value,s=[];for(let o=r;o<=n;o++)try{let a=e.state.doc.line(o);s.push(TA.range(a.from))}catch(a){}return F.set(s)}return i!==F.none&&(e.docChanged||e.selection)?F.none:i},provide:i=>W.decorations.from(i)}),l$={field:yA,widget:Ua},Aa={effect:r$,decoration:n$,field:wA},Gh={effect:s$,field:$A},Hh={effect:o$,field:kA},Kh={effect:a$,field:XA},c$=ae.define(),_A=F.line({attributes:{class:"cm-traced-line"}}),RA=Te.define({create(){return F.none},update(i,e){i=i.map(e.changes);for(let t of e.effects)if(t.is(c$)){let r=[];for(let n of t.value)try{let s=e.state.doc.line(n);r.push(_A.range(s.from))}catch(s){}return F.set(r,!0)}return i},provide:i=>W.decorations.from(i)}),Jh={effect:c$,field:RA};var CA=[...au(lv,ou),{key:"Mod-Shift-Backspace",run:eh}],u$=au(bQ,ou),Gs=64,f$=ae.define(),d$=ae.define(),Dm=Te.define({create(){return new Map},update(i,e){let t=i;for(let r of e.effects)if(r.is(d$))t=new Map;else if(r.is(f$)){t===i&&(t=new Map(i));for(let n of r.value)t.set(n.id,{from:n.from,to:n.to})}if(!e.changes.empty){let r=new Map;for(let[n,s]of t)r.set(n,{from:e.changes.mapPos(s.from,-1),to:e.changes.mapPos(s.to,1)});return r}return t}}),ZA=200,Im={default:{theme:Lh},6502:{isAsm:!0},z80:{isAsm:!0},jsasm:{isAsm:!0},gas:{isAsm:!0},vasm:{isAsm:!0},inform6:{theme:Mh},dialog:{theme:Mh,lineWrap:!0},markdown:{lineWrap:!0},fastbasic:{noGutters:!0},basic:{noGutters:!0},ecs:{theme:Lh}},p$={input:null};function m$(i){p$.input=i?e=>e.toUpperCase():null}var Ea=class Ea{constructor(e,t){this.updateTimer=null;this.dirtylisting=!0;this.refreshDelayMsec=300;this.probe=null;this.path=e,this.mode=t}createDiv(e){var t=document.createElement("div");t.setAttribute("class","editor"),e.appendChild(t);var r=K.getFile(this.path),n=r&&this.mode=="verilog"&&/__asm\b([\s\S]+?)\b__endasm\b/.test(r);return this.newEditor(t,r,n),this.editor.dispatch({effects:Wy(p$)}),this.syncBreakpoints(),K.getToolForFilename(this.path).startsWith("remote:")&&(this.refreshDelayMsec=1e3),t}setVisible(e){e?(this.editor.focus(),Ea.tracingEnabled&&this.startTracing()):this.stopTracing()}getShortcuts(){if(!this.editor)return[];var e=this.editor,t=(r,n,s)=>({key:r,label:n,fn:()=>{s(e),e.focus()}});return[t("mod+f","Find",kh),t("mod+g","Find Next",Ds),t("mod+d","Next Occurrence",gp),t("mod+shift+backspace","Delete Line",eh),t("mod+/","Toggle Comment",Ld),t("mod+z","Undo",la),t("mod+shift+z","Redo",Us)]}startTracing(){!this.probe&&v.startProbing&&(this.probe=v.startProbing(),this.probe.singleFrame=!1,this.probe.clear())}stopTracing(){this.probe&&(v.stopProbing(),this.probe=null),this.editor.dispatch({effects:Jh.effect.of([])})}setTracingEnabled(e){Ea.tracingEnabled=e,e?this.startTracing():this.stopTracing()}newEditor(e,t,r){var n=Im[this.mode]||Im.default,s=r||n.isAsm,o=!!n.lineWrap,a=n.theme||Im.default.theme,l=n.useLineNumbers&&!Bs;ie.embed&&(l=!1,s=!1);let c=n.noGutters||Bs;var h;let O=Um[this.mode];O?h=O.language:(console.warn("Unknown mode: "+this.mode),h=null),this.editor=new W({parent:e,doc:t,extensions:[s?[]:Qi.of(" "),s?wd.of((u,f)=>{let p=u.state.doc.lineAt(f).number;if(p>=0){let m=u.state.doc.line(p);if(m.text.trim())return u.lineIndent(m.from)}return 0}):[],...s?[Gt.of(dv(()=>Ys().tabsToSpaces))]:[],...bv(Ys()),Gt.of(CA),l?Pc():[],CS(),Gt.of(AS),Hx(),lx(),we.allowMultipleSelections.of(!0),Qc(),Fx(),iS(),yc(),$c(),wc(),gx(),Ph(),bp({top:!0}),Gt.of(u$),h||[],a,Am,o?W.lineWrapping:[],Aa.field,c?[]:[Fh.field,Fh.gutter],s&&!c?[Za.field,Za.gutter,Bh.field,Bh.gutter]:[],Nh.field,i$.gutter,W.updateListener.of(u=>{for(let f of u.transactions.flatMap(p=>p.effects))if(f.is(Nh.requestToggle)&&Qt.toggleSourceLine(this.path,f.value),f.is(Ns.runToLine)){let p=f.value;if(this.sourcefile&&this.sourcefile.line2offset){let m=this.sourcefile.line2offset[p];m>=0&&Ya([m])}}}),Dn.field,l$.field,Hh.field,Ns.field,Ns.gutter,Kh.field,Jh.field,Dm,My(u=>{window.location.hash="asseteditor/"+encodeURIComponent(this.path)+"/"+u}),ie.embed?[]:Ly(()=>{var u=K&&K.getToolForFilename(this.path),f=K&&K.platform_id;return[...yl(u,f),...$l(u,f),...qg(u)]},(u,f)=>{if(!f){var p=g$(u);if(p){window.location.hash="#"+encodeURIComponent(p);return}}za(u)}),Wm.of([]),W.updateListener.of(u=>{u.docChanged&&this.editorChanged()}),Gh.field,W.updateListener.of(u=>{u.selectionSet&&this.inspectUnderCursor(u)})]}),Sv(this.editor)}editorChanged(){clearTimeout(this.updateTimer),this.updateTimer=setTimeout(()=>{K.updateFile(this.path,this.editor.state.doc.toString())},this.refreshDelayMsec)}flushChanges(){this.updateTimer&&(clearTimeout(this.updateTimer),this.updateTimer=null,K.updateFile(this.path,this.editor.state.doc.toString()))}inspectUnderCursor(e){let t=e.state.selection.main,r=e.state.sliceDoc(t.from,t.to).trim();var n;v.inspect&&(n=v.inspect(r)),!t.empty&&n&&n.length<80?e.view.dispatch({effects:Gh.effect.of({range:t,val:n})}):e.view.dispatch({effects:Gh.effect.of(null)})}setText(e){var t=this.editor.state.doc.toString();t!=e&&this.editor.dispatch({changes:{from:0,to:this.editor.state.doc.length,insert:e},annotations:Nc.of("full")})}replaceTextRange(e,t,r){let n=this.editor.state.doc.lineAt(e).from;this.editor.dispatch({changes:{from:e,to:t,insert:r},annotations:Nc.of("full"),selection:{anchor:e+r.length,head:e},effects:[W.scrollIntoView(n,{y:"start",yMargin:100})]})}setAssetRange(e,t,r){this.editor.dispatch({effects:f$.of([{id:e,from:t,to:r}])})}getAssetText(e){var t=this.editor.state.field(Dm).get(e);return t?this.editor.state.doc.sliceString(t.from,t.to):null}replaceAssetText(e,t){var r=this.editor.state.field(Dm).get(e);r&&this.replaceTextRange(r.from,r.to,t)}clearAssetRanges(){this.editor.dispatch({effects:d$.of(void 0)})}insertLinesBefore(e){let t=this.editor.state.selection.main.from,r=this.editor.state.doc.lineAt(t).number,n=this.editor.state.doc.lineAt(t).from,s=e.split(` -`).length-1;this.editor.dispatch({changes:{from:n,insert:e}}),this.highlightLines(r-1,r+s-2)}highlightLines(e,t){let r=this.editor.state.doc.line(e+1);this.editor.dispatch({effects:[Kh.effect.of({start:e+1,end:t+1}),W.scrollIntoView(r.from,{y:"start",yMargin:100})]})}navigateToLine(e){if(e<1||e>this.editor.state.doc.lines)return;let t=this.editor.state.doc.line(e);this.editor.dispatch({selection:{anchor:t.from},effects:[Kh.effect.of({start:e,end:e}),W.scrollIntoView(t.from,{y:"center"})]}),this.editor.focus()}getValue(){return this.editor.state.doc.toString()}getPath(){return this.path}markErrors(e){this.clearErrors(),e=e.slice(0,ZA);let t=new Map,r=[];for(var n of e)if(!n.path||this.path.endsWith(n.path)){var s=this.editor.state.doc.lines,o=n.line;(isNaN(o)||o<1||o>s)&&(o=1),t.set(o,n.msg),n.start!=null&&n.end!=null&&n.end>n.start&&r.push({line:o,start:n.start,end:n.end})}this.editor.dispatch({effects:[Dn.set.of(t),Hh.effect.of(r.length>0?r:null)]})}clearErrors(){this.dirtylisting=!0,this.editor.dispatch({effects:[Dn.set.of(new Map),Dn.showMessage.of(null),Hh.effect.of(null)]})}getSourceFile(){return this.sourcefile}updateListing(){this.clearErrors();var e=this.sourcefile.lines||[];let t=new Map,r=new Map,n=new Map;for(var s of e)if(s.offset>=0&&t.set(s.line,ve(s.offset&65535,4)),s.insns){var o=s.insns.length>9?"...":s.insns;if(r.set(s.line,o),s.iscode){if(s.cycles)n.set(s.line,s.cycles+"");else if(v.getOpcodeMetadata){var a=parseInt(s.insns.split(" ")[0],16),l=v.getOpcodeMetadata(a,s.offset);if(l&&l.minCycles){var c=l.minCycles+"";n.set(s.line,c)}}}}this.editor.dispatch({effects:[Fh.set.of(t),Za.set.of(r),Bh.set.of(n)]})}setTimingResult(e){if(this.sourcefile!=null){var t=new Map;for(let o of Object.keys(this.sourcefile.line2offset)){let a=this.sourcefile.line2offset[o],l=e.pc2clockrange[a];var r=l&&l.minclocks,n=l&&l.maxclocks;if(r>=0&&n>=0){var s;n==r?s=r+"":s=r+"-"+n,n==e.MAX_CLOCKS&&(s+="+"),t.set(parseInt(o),s)}}this.editor.dispatch({effects:[Za.set.of(t)]})}}setCurrentLine(e,t){var r=n=>{this.editor.dispatch({effects:[Ns.set.of(n.line),Aa.effect.of(n.line),...t?[W.scrollIntoView(this.editor.state.doc.line(n.line).from,{y:"center"})]:[]]})};if(this.clearCurrentLine(t),e){if(e.line<1||e.line>this.editor.state.doc.lines)return;if(r(e),t){let s=this.editor.state.doc.line(e.line).from+(e.start||0);this.editor.dispatch({selection:{anchor:s,head:s},effects:W.scrollIntoView(s,{y:"center"})})}this.currentDebugLine=e}}clearCurrentLine(e){if(this.currentDebugLine){if(e){let t=this.editor.state.selection.main.head;this.editor.dispatch({selection:{anchor:t,head:t}})}this.currentDebugLine=null}this.editor.dispatch({effects:[Ns.set.of(null),Aa.effect.of(null)]})}getActiveLine(){if(this.sourcefile){var e=wt&&wt.c;if(!e&&v.getCPUState&&!v.isRunning()&&(e=v.getCPUState()),e){var t=e&&(e.EPC||e.PC),r=this.sourcefile.findLineForOffset(t,Gs);return r}}}refreshDebugState(e){var t=this.getActiveLine();!e&&(t===this.currentDebugLine||!t&&!this.currentDebugLine)||this.setCurrentLine(t,e)}refreshListing(){var e=K.getListingForFile(this.path);e&&e.sourcefile&&e.sourcefile!==this.sourcefile&&(this.sourcefile=e.sourcefile,this.dirtylisting=!0),!(!this.sourcefile||!this.dirtylisting)&&(this.updateListing(),this.dirtylisting=!1)}refresh(e){this.refreshListing(),this.refreshDebugState(e)}tick(){this.refreshDebugState(!1),this.updateTracedLines()}updateTracedLines(){let e=this.probe;if(!e||!e.idx||!this.sourcefile)return;let t=new Set;for(let r=0;r=0;){var t=this.sourcefile.line2offset[e];if(t>=0)return t;e--}return-1}undoStep(){la(this.editor)}redoStep(){Us(this.editor)}syncBreakpoints(){let e=Qt.getSourceBreakpointsForFile(this.path).map(t=>({line:t.line,enabled:t.enabled}));this.editor.dispatch({effects:Nh.setAll.of(e)})}};Ea.tracingEnabled=!1;var ei=Ea,Fm=1024,$r=class{createDiv(e){var t=document.createElement("div");return t.setAttribute("class","editor"),e.appendChild(t),this.newEditor(t),t}newEditor(e){this.disasmview=new W({parent:e,extensions:[yc(),$c(),we.allowMultipleSelections.of(!0),Qc(),wc(),Ph(),Zy,Mh,Aa.field,we.tabSize.of(8),we.readOnly.of(!0)]})}refresh(e,t){let r=wt||v.saveState(),n=t!==void 0?t:r.c?r.c.PC:0,s=0,o=0,a=v.debugSymbols&&v.debugSymbols.addr2symbol||{},l=(O,u)=>{let f="",p=0;for(;p{let C=parseInt(P[1],16),z=a[C];return z?P[0]+z:(z=a[C-1],z?P[0]+z+"+1":k)})),a){let k=a[m];k&&(Z="; "+k)}let A=ve(m,4)+" "+Qo(w,14)+" "+Qo(R,30)+Z+` + `,t.className="cm-line",t}},s$=ae.define(),$A=Te.define({create(){return F.none},update(i,e){i=i.map(e.changes);for(let t of e.effects)if(t.is(s$)){if(t.value===null||!t.value)return F.none;let r=e.state.doc.lineAt(t.value.range.to);return F.set([F.widget({widget:new qm(t.value.val),block:!0,side:1}).range(r.to)])}return i},provide:i=>W.decorations.from(i)}),o$=ae.define(),PA=F.mark({attributes:{class:"cm-error-span"}}),kA=Te.define({create(){return F.none},update(i,e){i=i.map(e.changes);for(let t of e.effects)if(t.is(o$)){if(t.value===null)return F.none;let r=[];for(let n of t.value)try{let s=e.state.doc.line(n.line),o=s.from+n.start,a=s.from+n.end;o>=s.from&&a<=s.to&&oW.decorations.from(i)}),a$=ae.define(),TA=F.line({attributes:{class:"highlight-lines"}}),XA=Te.define({create(){return F.none},update(i,e){i=i.map(e.changes);for(let t of e.effects)if(t.is(a$)){if(t.value===null)return F.none;let{start:r,end:n}=t.value,s=[];for(let o=r;o<=n;o++)try{let a=e.state.doc.line(o);s.push(TA.range(a.from))}catch(a){}return F.set(s)}return i!==F.none&&(e.docChanged||e.selection)?F.none:i},provide:i=>W.decorations.from(i)}),l$={field:yA,widget:Ua},Aa={effect:r$,decoration:n$,field:wA},Gh={effect:s$,field:$A},Hh={effect:o$,field:kA},Kh={effect:a$,field:XA},c$=ae.define(),_A=F.line({attributes:{class:"cm-traced-line"}}),RA=Te.define({create(){return F.none},update(i,e){i=i.map(e.changes);for(let t of e.effects)if(t.is(c$)){let r=[];for(let n of t.value)try{let s=e.state.doc.line(n);r.push(_A.range(s.from))}catch(s){}return F.set(r,!0)}return i},provide:i=>W.decorations.from(i)}),Jh={effect:c$,field:RA};var CA=[...au(lv,ou),{key:"Mod-Shift-Backspace",run:eh}],u$=au(bQ,ou),Gs=64,f$=ae.define(),d$=ae.define(),Dm=Te.define({create(){return new Map},update(i,e){let t=i;for(let r of e.effects)if(r.is(d$))t=new Map;else if(r.is(f$)){t===i&&(t=new Map(i));for(let n of r.value)t.set(n.id,{from:n.from,to:n.to})}if(!e.changes.empty){let r=new Map;for(let[n,s]of t)r.set(n,{from:e.changes.mapPos(s.from,-1),to:e.changes.mapPos(s.to,1)});return r}return t}}),ZA=200,Im={default:{theme:Lh},6502:{isAsm:!0},z80:{isAsm:!0},jsasm:{isAsm:!0},gas:{isAsm:!0},vasm:{isAsm:!0},inform6:{theme:Mh},dialog:{theme:Mh,lineWrap:!0},markdown:{lineWrap:!0},fastbasic:{noGutters:!0},basic:{noGutters:!0},ecs:{theme:Lh}},p$={input:null};function m$(i){p$.input=i?e=>e.toUpperCase():null}var Ea=class Ea{constructor(e,t){this.updateTimer=null;this.dirtylisting=!0;this.refreshDelayMsec=300;this.probe=null;this.path=e,this.mode=t}createDiv(e){var t=document.createElement("div");t.setAttribute("class","editor"),e.appendChild(t);var r=K.getFile(this.path),n=r&&this.mode=="verilog"&&/__asm\b([\s\S]+?)\b__endasm\b/.test(r);return this.newEditor(t,r,n),this.editor.dispatch({effects:Wy(p$)}),this.syncBreakpoints(),K.getToolForFilename(this.path).startsWith("remote:")&&(this.refreshDelayMsec=1e3),t}setVisible(e){e?(this.editor.focus(),Ea.tracingEnabled&&this.startTracing()):this.stopTracing()}getShortcuts(){if(!this.editor)return[];var e=this.editor,t=(r,n,s)=>({key:r,label:n,fn:()=>{s(e),e.focus()}});return[t("mod+f","Find",kh),t("mod+g","Find Next",Ds),t("mod+d","Next Occurrence",gp),t("mod+shift+backspace","Delete Line",eh),t("mod+/","Toggle Comment",Ld),t("mod+z","Undo",la),t("mod+shift+z","Redo",Us)]}startTracing(){!this.probe&&v.startProbing&&(this.probe=v.startProbing(),this.probe.singleFrame=!1,this.probe.clear())}stopTracing(){this.probe&&(v.stopProbing(),this.probe=null),this.editor.dispatch({effects:Jh.effect.of([])})}setTracingEnabled(e){Ea.tracingEnabled=e,e?this.startTracing():this.stopTracing()}newEditor(e,t,r){var n=Im[this.mode]||Im.default,s=r||n.isAsm,o=!!n.lineWrap,a=n.theme||Im.default.theme,l=n.useLineNumbers&&!Bs;ie.embed&&(l=!1,s=!1);let c=n.noGutters||Bs;var h;let O=Um[this.mode];O?h=O.language:(console.warn("Unknown mode: "+this.mode),h=null),this.editor=new W({parent:e,doc:t,extensions:[s?[]:Qi.of(" "),s?wd.of((u,f)=>{let p=u.state.doc.lineAt(f).number;if(p>=0){let m=u.state.doc.line(p);if(m.text.trim())return u.lineIndent(m.from)}return 0}):[],...s?[Gt.of(dv(()=>Ys().tabsToSpaces))]:[],...bv(Ys()),Gt.of(CA),l?Pc():[],CS(),Gt.of(AS),Hx(),lx(),we.allowMultipleSelections.of(!0),Qc(),Fx(),iS(),yc(),$c(),wc(),gx(),Ph(),bp({top:!0}),Gt.of(u$),h||[],a,Am,o?W.lineWrapping:[],Aa.field,c?[]:[Fh.field,Fh.gutter],s&&!c?[Za.field,Za.gutter,Bh.field,Bh.gutter]:[],Nh.field,i$.gutter,W.updateListener.of(u=>{for(let f of u.transactions.flatMap(p=>p.effects))if(f.is(Nh.requestToggle)&&Qt.toggleSourceLine(this.path,f.value),f.is(Ns.runToLine)){let p=f.value;if(this.sourcefile&&this.sourcefile.line2offset){let m=this.sourcefile.line2offset.get(p);m>=0&&Ya([m])}}}),Dn.field,l$.field,Hh.field,Ns.field,Ns.gutter,Kh.field,Jh.field,Dm,My(u=>{window.location.hash="asseteditor/"+encodeURIComponent(this.path)+"/"+u}),ie.embed?[]:Ly(()=>{var u=K&&K.getToolForFilename(this.path),f=K&&K.platform_id;return[...yl(u,f),...$l(u,f),...qg(u)]},(u,f)=>{if(!f){var p=g$(u);if(p){window.location.hash="#"+encodeURIComponent(p);return}}za(u)}),Wm.of([]),W.updateListener.of(u=>{u.docChanged&&this.editorChanged()}),Gh.field,W.updateListener.of(u=>{u.selectionSet&&this.inspectUnderCursor(u)})]}),Sv(this.editor)}editorChanged(){clearTimeout(this.updateTimer),this.updateTimer=setTimeout(()=>{K.updateFile(this.path,this.editor.state.doc.toString())},this.refreshDelayMsec)}flushChanges(){this.updateTimer&&(clearTimeout(this.updateTimer),this.updateTimer=null,K.updateFile(this.path,this.editor.state.doc.toString()))}inspectUnderCursor(e){let t=e.state.selection.main,r=e.state.sliceDoc(t.from,t.to).trim();var n;v.inspect&&(n=v.inspect(r)),!t.empty&&n&&n.length<80?e.view.dispatch({effects:Gh.effect.of({range:t,val:n})}):e.view.dispatch({effects:Gh.effect.of(null)})}setText(e){var t=this.editor.state.doc.toString();t!=e&&this.editor.dispatch({changes:{from:0,to:this.editor.state.doc.length,insert:e},annotations:Nc.of("full")})}replaceTextRange(e,t,r){let n=this.editor.state.doc.lineAt(e).from;this.editor.dispatch({changes:{from:e,to:t,insert:r},annotations:Nc.of("full"),selection:{anchor:e+r.length,head:e},effects:[W.scrollIntoView(n,{y:"start",yMargin:100})]})}setAssetRange(e,t,r){this.editor.dispatch({effects:f$.of([{id:e,from:t,to:r}])})}getAssetText(e){var t=this.editor.state.field(Dm).get(e);return t?this.editor.state.doc.sliceString(t.from,t.to):null}replaceAssetText(e,t){var r=this.editor.state.field(Dm).get(e);r&&this.replaceTextRange(r.from,r.to,t)}clearAssetRanges(){this.editor.dispatch({effects:d$.of(void 0)})}insertLinesBefore(e){let t=this.editor.state.selection.main.from,r=this.editor.state.doc.lineAt(t).number,n=this.editor.state.doc.lineAt(t).from,s=e.split(` +`).length-1;this.editor.dispatch({changes:{from:n,insert:e}}),this.highlightLines(r-1,r+s-2)}highlightLines(e,t){let r=this.editor.state.doc.line(e+1);this.editor.dispatch({effects:[Kh.effect.of({start:e+1,end:t+1}),W.scrollIntoView(r.from,{y:"start",yMargin:100})]})}navigateToLine(e){if(e<1||e>this.editor.state.doc.lines)return;let t=this.editor.state.doc.line(e);this.editor.dispatch({selection:{anchor:t.from},effects:[Kh.effect.of({start:e,end:e}),W.scrollIntoView(t.from,{y:"center"})]}),this.editor.focus()}getValue(){return this.editor.state.doc.toString()}getPath(){return this.path}markErrors(e){this.clearErrors(),e=e.slice(0,ZA);let t=new Map,r=[];for(var n of e)if(!n.path||this.path.endsWith(n.path)){var s=this.editor.state.doc.lines,o=n.line;(isNaN(o)||o<1||o>s)&&(o=1),t.set(o,n.msg),n.start!=null&&n.end!=null&&n.end>n.start&&r.push({line:o,start:n.start,end:n.end})}this.editor.dispatch({effects:[Dn.set.of(t),Hh.effect.of(r.length>0?r:null)]})}clearErrors(){this.dirtylisting=!0,this.editor.dispatch({effects:[Dn.set.of(new Map),Dn.showMessage.of(null),Hh.effect.of(null)]})}getSourceFile(){return this.sourcefile}updateListing(){this.clearErrors();var e=this.sourcefile.lines||[];let t=new Map,r=new Map,n=new Map;for(var s of e)if(s.offset>=0&&t.set(s.line,ve(s.offset&65535,4)),s.insns){var o=s.insns.length>9?"...":s.insns;if(r.set(s.line,o),s.iscode){if(s.cycles)n.set(s.line,s.cycles+"");else if(v.getOpcodeMetadata){var a=parseInt(s.insns.split(" ")[0],16),l=v.getOpcodeMetadata(a,s.offset);if(l&&l.minCycles){var c=l.minCycles+"";n.set(s.line,c)}}}}this.editor.dispatch({effects:[Fh.set.of(t),Za.set.of(r),Bh.set.of(n)]})}setTimingResult(e){if(this.sourcefile!=null){var t=new Map;for(let[o,a]of this.sourcefile.line2offset){let l=e.pc2clockrange[a];var r=l&&l.minclocks,n=l&&l.maxclocks;if(r>=0&&n>=0){var s;n==r?s=r+"":s=r+"-"+n,n==e.MAX_CLOCKS&&(s+="+"),t.set(o,s)}}this.editor.dispatch({effects:[Za.set.of(t)]})}}setCurrentLine(e,t){var r=n=>{this.editor.dispatch({effects:[Ns.set.of(n.line),Aa.effect.of(n.line),...t?[W.scrollIntoView(this.editor.state.doc.line(n.line).from,{y:"center"})]:[]]})};if(this.clearCurrentLine(t),e){if(e.line<1||e.line>this.editor.state.doc.lines)return;if(r(e),t){let s=this.editor.state.doc.line(e.line).from+(e.start||0);this.editor.dispatch({selection:{anchor:s,head:s},effects:W.scrollIntoView(s,{y:"center"})})}this.currentDebugLine=e}}clearCurrentLine(e){if(this.currentDebugLine){if(e){let t=this.editor.state.selection.main.head;this.editor.dispatch({selection:{anchor:t,head:t}})}this.currentDebugLine=null}this.editor.dispatch({effects:[Ns.set.of(null),Aa.effect.of(null)]})}getActiveLine(){if(this.sourcefile){var e=wt&&wt.c;if(!e&&v.getCPUState&&!v.isRunning()&&(e=v.getCPUState()),e){var t=e&&(e.EPC||e.PC),r=this.sourcefile.findLineForOffset(t,Gs);return r}}}refreshDebugState(e){var t=this.getActiveLine();!e&&(t===this.currentDebugLine||!t&&!this.currentDebugLine)||this.setCurrentLine(t,e)}refreshListing(){var e=K.getListingForFile(this.path);e&&e.sourcefile&&e.sourcefile!==this.sourcefile&&(this.sourcefile=e.sourcefile,this.dirtylisting=!0),!(!this.sourcefile||!this.dirtylisting)&&(this.updateListing(),this.dirtylisting=!1)}refresh(e){this.refreshListing(),this.refreshDebugState(e)}tick(){this.refreshDebugState(!1),this.updateTracedLines()}updateTracedLines(){let e=this.probe;if(!e||!e.idx||!this.sourcefile)return;let t=new Set;for(let r=0;r=0;){var t=this.sourcefile.line2offset.get(e);if(t>=0)return t;e--}return-1}undoStep(){la(this.editor)}redoStep(){Us(this.editor)}syncBreakpoints(){let e=Qt.getSourceBreakpointsForFile(this.path).map(t=>({line:t.line,enabled:t.enabled}));this.editor.dispatch({effects:Nh.setAll.of(e)})}};Ea.tracingEnabled=!1;var ei=Ea,Fm=1024,$r=class{createDiv(e){var t=document.createElement("div");return t.setAttribute("class","editor"),e.appendChild(t),this.newEditor(t),t}newEditor(e){this.disasmview=new W({parent:e,extensions:[yc(),$c(),we.allowMultipleSelections.of(!0),Qc(),wc(),Ph(),Zy,Mh,Aa.field,we.tabSize.of(8),we.readOnly.of(!0)]})}refresh(e,t){let r=wt||v.saveState(),n=t!==void 0?t:r.c?r.c.PC:0,s=0,o=0,a=v.debugSymbols&&v.debugSymbols.addr2symbol||{},l=(O,u)=>{let f="",p=0;for(;p{let C=parseInt(P[1],16),z=a[C];return z?P[0]+z:(z=a[C-1],z?P[0]+z+"+1":k)})),a){let k=a[m];k&&(Z="; "+k)}let A=ve(m,4)+" "+Qo(w,14)+" "+Qo(R,30)+Z+` `;f+=A,m==n&&(o=s),s++,p+=S.nbytes||1}return f};var c=n<0?n-Fm:Math.max(0,n-Fm);let h=l(c,n-c)+l(n,Fm);if(this.disasmview.dispatch({changes:{from:0,to:this.disasmview.state.doc.length,insert:h}}),e){let O=this.disasmview.state.doc.line(o+1);this.disasmview.dispatch({selection:{anchor:O.from,head:O.from},effects:W.scrollIntoView(O.from,{y:"center"})})}}goToAddress(e){e|=0,this.findAndSelectAddress(e)||(this.refresh(!1,e),this.findAndSelectAddress(e)),this.disasmview.focus()}findAndSelectAddress(e){let t=ve(e,4),r=this.disasmview.state.doc;for(let n=1;n<=r.lines;n++){let s=r.line(n);if(s.text.startsWith(t+" "))return this.disasmview.dispatch({selection:{anchor:s.from,head:s.from+t.length},effects:W.scrollIntoView(s.from,{y:"center"})}),!0}return!1}getCursorPC(){let e=this.disasmview.state.selection.main.head,t=this.disasmview.state.doc.lineAt(e).number;if(t>=0){let n=this.disasmview.state.doc.line(t).text.trim().split(/\s+/);if(n&&n.length>=1){let s=parseInt(n[0],16);if(console.log("getCursorPC",s),s>=0)return s}}return-1}},eO=class extends $r{constructor(e){super(),this.path=e}refreshListing(){var e=K.getListingForFile(this.path);this.assemblyfile=e&&(e.assemblyfile||e.sourcefile)}refresh(e){if(this.refreshListing(),!!this.assemblyfile){var t=this.assemblyfile.text;if(this.disasmview.dispatch({changes:{from:0,to:this.disasmview.state.doc.length,insert:t}}),!!v.saveState){var r=wt||v.saveState(),n=r.c?r.c.EPC||r.c.PC:0;if(n>=0&&this.assemblyfile){var s=this.assemblyfile.findLineForOffset(n,Gs);if(s&&e){let o=this.disasmview.state.doc.line(s.line);this.disasmview.dispatch({selection:{anchor:o.from,head:o.from},effects:W.scrollIntoView(o.from,{y:"center"})})}}}}}goToAddress(e){this.refreshListing();let t=this.assemblyfile&&this.assemblyfile.findLineForOffset(e,Gs);if(t){let r=this.disasmview.state.doc.line(t.line);this.disasmview.dispatch({selection:{anchor:r.from,head:r.from},effects:W.scrollIntoView(r.from,{y:"center"})})}this.disasmview.focus()}};function g$(i){let e=[i];try{var t=wo(K.mainPath);t.length>0&&t!="local"&&e.push(t+"/"+i)}catch(s){}for(var r of e){var n=K&&K.getFile(r);if(typeof n=="string")return r}return null}function h$(i){for(var e of Dg(i))if(e.editorStyle){var t=Cy(e.editorStyle);if(t)return t}return null}var Bm=new Map;function UA(i){let e=K.getToolForFilename(K.mainPath),t=kl(e,K.platform_id),r=Pl(e,K.platform_id);if(!t||!r.length)return Promise.resolve(null);let n=t+":"+i;return Bm.has(n)||Bm.set(n,(async()=>{var s=[...r.map(h=>h+"/"+i),i];for(var o of s){var a={preload_fs:t,readshared:o,updates:[],buildsteps:[]},l=await K.queryWorker(a),c=l&&l.output;if(c instanceof Uint8Array&&c.length>0)return new TextDecoder().decode(c)}return null})()),Bm.get(n)}var en=class{constructor(e){this.fn=e;this.languageCompartment=new bt}createDiv(e){var t=document.createElement("div");t.setAttribute("class","editor"),e.appendChild(t);var r=h$(this.fn||this.currentPath||"")||ga();return this.view=new W({parent:t,extensions:[yc(),$c(),we.allowMultipleSelections.of(!0),Qc(),wc(),Ph(),bp({top:!0}),Gt.of(u$),this.languageCompartment.of(r),Lh,Am,we.readOnly.of(!0)]}),this.refresh(!1),t}setVisible(e){e&&this.refresh(!1)}setHeaderText(e){var t=h$(this.currentPath||this.fn||"")||ga();this.view.dispatch({effects:this.languageCompartment.reconfigure(t),changes:{from:0,to:this.view.state.doc.length,insert:e}})}refresh(e){var t=this.fn;if(!t){var r=window.location.hash;if(!r||!r.startsWith("#headerview/"))return;t=this.fn=decodeURIComponent(r.substring(12))}this.loadIncludeFile(t)}async loadIncludeFile(e){this.requestedFn=e;var t=g$(e);if(t){this.currentPath=t,this.setHeaderText(K.getFile(t));return}var r=await UA(e);if(this.requestedFn===e){if(r!=null){this.currentPath=e,this.setHeaderText(r);return}this.currentPath=e,this.setHeaderText("// "+e+` was not found. // Project include files are loaded during a build -- try building first. // Toolchain headers are only available when the tool has a bundled filesystem.`)}}navigateToLine(e){if(!(!this.view||e<1)&&e<=this.view.state.doc.lines){let t=this.view.state.doc.line(e);this.view.dispatch({selection:{anchor:t.from},effects:[W.scrollIntoView(t.from,{y:"center"})]}),this.view.focus()}}};var In=class{constructor(e){var t=document.createElement("div");t.setAttribute("class","memdump"),e.appendChild(t),this.maindiv=t}create(e,t,r){this.getLineAt=r,this.memorylist=new wl({w:$(e).width(),h:$(e).height(),itemHeight:Nm(),totalRows:t,generatorFn:n=>{var s=r(n),o=document.createElement("div");return o.appendChild(document.createTextNode(s.text)),s.clas!=null&&(o.className=s.clas),o}}),$(this.maindiv).append(this.memorylist.container)}refresh(){this.memorylist&&$(this.maindiv).find("[data-index]").each((e,t)=>{var r=t,n=parseInt(r.getAttribute("data-index")),s=r.innerText,o=this.getLineAt(n),a=o.text;if(s!=a&&(r.innerText=a,o.clas!=null&&!r.classList.contains(o.clas))){var l=Array.from(r.classList);l.forEach(c=>r.classList.remove(c)),r.classList.add("vrow"),r.classList.add(o.clas)}})}};function Nm(){return $("#booksMenuButton").first().height()}function b$(i){return i.endsWith("_SIZE__")||i.endsWith("_LAST__")||i.endsWith("STACKSIZE__")||i.endsWith("FILEOFFS__")||i.startsWith("l__")||i.startsWith("s__")||i.startsWith(".__.")}var tn=class{constructor(){this.recreateOnResize=!0;this.hibits=0;this.totalRows=5120;this.gotoRow=-1}createDiv(e){var t=document.createElement("div");return t.setAttribute("class","memdump"),e.appendChild(t),this.showMemoryWindow(e,t),this.maindiv=t}showMemoryWindow(e,t){this.memorylist=new wl({w:$(e).width(),h:$(e).height(),itemHeight:Nm(),totalRows:this.totalRows,generatorFn:n=>{var s=this.getMemoryLineAt(n),o=document.createElement("div");if(this.dumplines){var a=this.dumplines[n];a&&o.classList.add("seg_"+this.getMemorySegment(this.dumplines[n].a|this.hibits))}return n==this.gotoRow&&o.classList.add("goto_line"),o.appendChild(document.createTextNode(s)),o}}),$(t).append(this.memorylist.container),this.tick();let r=fa();r&&this.dumplines&&this.scrollToAddress(r.data_start)}scrollToAddress(e){this.dumplines&&(this.hibits=e&4294901760,this.memorylist.scrollToItem(this.findMemoryWindowLine(e&65535)))}goToAddress(e){this.hibits=e&4294901760;var t=this.getDumpLines(),r;if(t&&t.length?r=this.findMemoryWindowLine(e&65535):r=(e&65535)>>4,r!==void 0){if(this.gotoRow=r,this.memorylist){var n=this.memorylist.container,s=r*this.memorylist.itemHeight-(n.clientHeight-this.memorylist.itemHeight)/2;n.scrollTop=Math.max(0,s)}this.tick()}}refresh(){this.dumplines=null,this.tick()}tick(){this.memorylist&&$(this.maindiv).find("[data-index]").each((e,t)=>{var r=$(t),n=parseInt(r.attr("data-index")),s=r.text(),o=this.getMemoryLineAt(n);s!=o&&r.text(o),r.toggleClass("goto_line",n==this.gotoRow)})}getMemoryLineAt(e){var t=e*16,r=0,n=16,s;if(this.getDumpLines()){var o=this.dumplines[e];if(o)t=o.a&65520,r=o.a-t,n=r+o.l,s=o.s;else return"."}for(var a=ve(t+r,4)+" ",l=0;l8&&(a+=" ");for(var l=r;ln&&(o=n),this.dumplines.push({a:t,l:o-t,s:r}),t=o}r=s}}return this.dumplines}getMemorySegment(e){let t=fa();if(t){if(e>=t.data_start&&e=v.getSP()-15?"stack":"data";if(e>=t.code_start&&e=n.start&&e=e)return t}},tO=class extends tn{constructor(){super(...arguments);this.totalRows=2048}readAddress(t){return v.readVRAMAddress(t)}getMemorySegment(t){return"video"}getDumpLines(){return null}},Ma=class{constructor(e,t){this.recreateOnResize=!0;this.path=e,this.data=t}populateVlist(){$(this.vlist.maindiv).empty(),this.vlist.create(this.parent,this.data.length+15>>4,this.getMemoryLineAt.bind(this))}createDiv(e){return this.parent=e,this.vlist=new In(this.parent),this.populateVlist(),this.vlist.maindiv}setData(e){this.data=e,this.populateVlist()}getMemoryLineAt(e){for(var t=e*16,r=0,n=16,s=ve(t+r,4)+" ",o=0;o8&&(s+=" ");for(var o=r;o=0?ve(a,2):" ")}return{text:s}}refresh(){this.vlist.refresh()}getPath(){return this.path}},iO=class{createDiv(e){return this.maindiv=cr(e,"vertical-scroll"),this.maindiv.css("display","grid"),this.maindiv.css("grid-template-columns","5em 40% 40%"),this.maindiv.css("align-content","start"),this.maindiv[0]}addSegment(e,t){if(t){var r=$('
');r.text("$"+ve(e.start,4)),this.maindiv.append(r)}var n=$('
');n.text(e.name);let s=`$${ve(e.start)} - $${ve(e.last||e.start+e.size-1)}`;s+=` (${e.size} bytes)`,n.attr("title",s),(!t||e.source=="linker")&&n.css("grid-column-start",3);var o=Math.max(3,Math.log(e.size+1))*.5;n.css("height",o+"em"),e.type&&n.addClass("segment-"+e.type),this.maindiv.append(n),n.click(()=>{var a=j.createOrShow("#memory");a.scrollToAddress(e.start)})}refresh(){this.maindiv.empty();var e=K.segments;if(e){var t=0,r=-1;for(var n of e)n.start>t&&this.addSegment({name:"",start:t,size:n.start-t},!0),this.addSegment(n,r!=n.start),r=n.start,t=n.start+n.size}}},ji=4278190080,rn=class{constructor(){this.cumulativeData=!1;var e=160,t=262;try{e=Math.ceil(v.machine.cpuCyclesPerLine)||e,t=Math.ceil(v.machine.numTotalScanlines)||t}catch(r){}this.cyclesPerLine=e,this.totalScanlines=t}addr2symbol(e){var t=v.debugSymbols&&v.debugSymbols.addr2symbol||{};return t[e]}addr2str(e){var t=this.addr2symbol(e);return typeof t=="string"?"$"+ve(e)+" ("+t+")":"$"+ve(e)}showTooltip(e){e?(this.tooldiv||(this.tooldiv=document.createElement("div"),this.tooldiv.setAttribute("class","tooltiptrack"),document.body.appendChild(this.tooldiv)),$(this.tooldiv).text(e).show()):$(this.tooldiv).hide()}setVisible(e){e?(this.probe=v.startProbing(),this.probe.singleFrame=!this.cumulativeData,this.tick()):(this.probe&&(this.probe.singleFrame=!0),v.stopProbing(),this.probe=null)}redraw(e){var t=this.probe;if(!(!t||!t.idx)){var r=0,n=0,s=0;this.sp=0;for(var o=0;o>16&255,h=a&ji;switch(h){case 2113929216:r++,n=0;break;case 2130706432:r=0,n=0;break;case 0:n+=l,s+=l;break;case 167772160:case 184549376:this.sp=l;default:e(h,l,n,r,s,c);break}}}}opToString(e,t,r){var n="";switch(e){case 16777216:n="Exec";break;case 301989888:n="Read";break;case 318767104:n="Write";break;case 335544320:n="IO Read";break;case 352321536:n="IO Write";break;case 369098752:n="VRAM Read";break;case 385875968:n="VRAM Write";break;case 402653184:n="DMA Read";break;case 419430400:n="DMA Write";break;case 134217728:n="Interrupt";break;case 150994944:n="Error";break;case 520093696:n="Wait";break;case 167772160:n="Stack Push";break;case 184549376:n="Stack Pop";break;default:return""}return typeof t=="number"&&(n+=" "+this.addr2str(t)),e&268435456&&typeof r=="number"&&(n+=" = $"+ve(r,2)),n}getOpRGB(e,t){switch(e){case 16777216:return 98305;case 301989888:return 8388865;case 318767104:return 65920;case 335544320:return 98432;case 352321536:return 12583296;case 402653184:case 369098752:return 8421377;case 419430400:case 385875968:return 4227264;case 134217728:return 4177727;case 150994944:return 4145151;case 520093696:return 16727871;default:return 0}}},Gm=class extends rn{constructor(){super(...arguments);this.recreateOnResize=!0}createCanvas(t,r,n){var s=document.createElement("div"),o=document.createElement("canvas");return o.width=r,o.height=n,o.classList.add("pixelated"),o.style.width="100%",o.style.height="90vh",o.style.backgroundColor="black",o.style.cursor="crosshair",o.onmousemove=a=>{var l=xl(o,a);this.showTooltip(this.getTooltipText(l.x,l.y)),$(this.tooldiv).css("left",a.pageX+10).css("top",a.pageY-30)},o.onmouseout=a=>{$(this.tooldiv).hide()},t.appendChild(s),s.appendChild(o),this.canvas=o,this.ctx=o.getContext("2d"),this.initCanvas(),this.maindiv=s}initCanvas(){}getTooltipText(t,r){return null}getOpAtPos(t,r,n){t=t|0,r=r|0;let s=0;return this.redraw((o,a,l,c,h,O)=>{!s&&c==r&&l>=t&&(o&n)!=0&&(s=o|a)}),s}clear(){}tick(){this.clear(),this.redraw(this.drawEvent.bind(this))}},rO=class extends Gm{constructor(){super(...arguments);this.recreateOnResize=!1}createDiv(t){return this.createCanvas(t,this.cyclesPerLine,this.totalScanlines)}initCanvas(){this.imageData=this.ctx.createImageData(this.canvas.width,this.canvas.height),this.datau32=new Uint32Array(this.imageData.data.buffer)}getTooltipText(t,r){t=t|0,r=r|0;var n="",s=null,o=[],a=-1;return this.redraw((l,c,h,O,u,f)=>{switch(l){case 16777216:s=this.addr2symbol(c)||s;break;case 167772160:o.push(s);break;case 184549376:s=o.pop();break}O==r&&h<=t&&(h!=a&&(n="",a=h),n==""&&s&&(n+=` @@ -172,4 +172,4 @@ localforage/dist/localforage.js: dompurify/dist/purify.cjs.js: (*! @license DOMPurify 3.4.13 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.4.13/LICENSE *) */ -//# sourceMappingURL=chunk-KW4IDSDB.js.map +//# sourceMappingURL=chunk-XP2G5PMM.js.map diff --git a/gen/chunk-KW4IDSDB.js.map b/gen/chunk-XP2G5PMM.js.map similarity index 70% rename from gen/chunk-KW4IDSDB.js.map rename to gen/chunk-XP2G5PMM.js.map index 74700dd1..143586f9 100644 --- a/gen/chunk-KW4IDSDB.js.map +++ b/gen/chunk-XP2G5PMM.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../node_modules/localforage/dist/localforage.js", "../node_modules/dompurify/src/utils.ts", "../node_modules/dompurify/src/tags.ts", "../node_modules/dompurify/src/attrs.ts", "../node_modules/dompurify/src/regexp.ts", "../node_modules/dompurify/src/purify.ts", "../src/ide/ui.ts", "../src/common/toolmeta.ts", "../src/ide/errorreport.ts", "../src/ide/dialogs.ts", "../node_modules/@marijn/find-cluster-break/src/index.js", "../node_modules/@codemirror/state/dist/index.js", "../node_modules/style-mod/src/style-mod.js", "../node_modules/w3c-keyname/index.js", "../node_modules/crelt/index.js", "../node_modules/@codemirror/view/dist/index.js", "../node_modules/@lezer/common/dist/index.js", "../node_modules/@lezer/highlight/dist/index.js", "../node_modules/@codemirror/language/dist/index.js", "../node_modules/@codemirror/autocomplete/dist/index.js", "../src/ide/views/debug.ts", "../node_modules/@codemirror/commands/dist/index.js", "../src/ide/views/tabs.ts", "../src/ide/settings.ts", "../src/ide/storage.ts", "../src/ide/project.ts", "../src/common/workertypes.ts", "../src/ide/services.ts", "../src/common/audio/CommodoreTape.ts", "../src/ide/shareexport.ts", "../src/ide/sync.ts", "../src/ide/search/symbolindex.ts", "../src/common/symbols/index.ts", "../src/ide/search/projectsource.ts", "../src/ide/search/toolchainsource.ts", "../src/ide/search/docssource.ts", "../src/ide/search/service.ts", "../node_modules/@lezer/lr/dist/index.js", "../node_modules/@lezer/cpp/dist/index.js", "../node_modules/@codemirror/lang-cpp/dist/index.js", "../node_modules/@codemirror/search/dist/index.js", "../src/parser/tokens-6502.ts", "parser/lang-6502.grammar.js", "../src/parser/lang-6502.ts", "../src/parser/tokens-z80.ts", "parser/lang-z80.grammar.js", "../src/parser/lang-z80.ts", "../src/parser/lang-wiz.ts", "../src/parser/lang-verilog.ts", "../src/parser/lang-inform6.ts", "../src/parser/lang-dialog.ts", "../src/parser/lang-basic.ts", "../src/parser/lang-fastbasic.ts", "../src/parser/lang-bataribasic.ts", "../node_modules/@lezer/markdown/dist/index.js", "../node_modules/@lezer/html/dist/index.js", "../node_modules/@lezer/css/dist/index.js", "../node_modules/@codemirror/lang-css/dist/index.js", "../node_modules/@lezer/javascript/dist/index.js", "../node_modules/@codemirror/lang-javascript/dist/index.js", "../node_modules/@codemirror/lang-html/dist/index.js", "../node_modules/@codemirror/lang-markdown/dist/index.js", "../src/parser/registry.ts", "../src/themes/cobalt.ts", "../src/themes/disassemblyTheme.ts", "../src/themes/editorTheme.ts", "../src/themes/mbo.ts", "../src/ide/breakcond.ts", "../src/ide/breakpoints.ts", "../src/ide/views/assetdecorations.ts", "../src/ide/views/includedecorations.ts", "../src/ide/views/baseviews.ts", "../src/ide/views/filters.ts", "../src/ide/views/gutter.ts", "../src/ide/views/visuals.ts", "../src/ide/views/editors.ts", "../src/common/vtextscroller.ts", "../src/ide/views/debugviews.ts", "../src/ide/search/debuggerhit.ts", "../src/ide/search/searchview.ts", "../src/ide/pixeleditor.ts", "../src/ide/views/asseteditor.ts", "../src/ide/views/treeviews.ts", "../src/ide/windows.ts", "../src/ide/search/listinglocation.ts"], - "sourcesContent": ["/*!\n localForage -- Offline Storage, Improved\n Version 1.10.0\n https://localforage.github.io/localForage\n (c) 2013-2017 Mozilla, Apache License 2.0\n*/\n(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.localforage = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw (f.code=\"MODULE_NOT_FOUND\", f)}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o element; its readystatechange event will be fired asynchronously once it is inserted\n // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n var scriptEl = global.document.createElement('script');\n scriptEl.onreadystatechange = function () {\n nextTick();\n\n scriptEl.onreadystatechange = null;\n scriptEl.parentNode.removeChild(scriptEl);\n scriptEl = null;\n };\n global.document.documentElement.appendChild(scriptEl);\n };\n } else {\n scheduleDrain = function () {\n setTimeout(nextTick, 0);\n };\n }\n}\n\nvar draining;\nvar queue = [];\n//named nextTick for less confusing stack traces\nfunction nextTick() {\n draining = true;\n var i, oldQueue;\n var len = queue.length;\n while (len) {\n oldQueue = queue;\n queue = [];\n i = -1;\n while (++i < len) {\n oldQueue[i]();\n }\n len = queue.length;\n }\n draining = false;\n}\n\nmodule.exports = immediate;\nfunction immediate(task) {\n if (queue.push(task) === 1 && !draining) {\n scheduleDrain();\n }\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],2:[function(_dereq_,module,exports){\n'use strict';\nvar immediate = _dereq_(1);\n\n/* istanbul ignore next */\nfunction INTERNAL() {}\n\nvar handlers = {};\n\nvar REJECTED = ['REJECTED'];\nvar FULFILLED = ['FULFILLED'];\nvar PENDING = ['PENDING'];\n\nmodule.exports = Promise;\n\nfunction Promise(resolver) {\n if (typeof resolver !== 'function') {\n throw new TypeError('resolver must be a function');\n }\n this.state = PENDING;\n this.queue = [];\n this.outcome = void 0;\n if (resolver !== INTERNAL) {\n safelyResolveThenable(this, resolver);\n }\n}\n\nPromise.prototype[\"catch\"] = function (onRejected) {\n return this.then(null, onRejected);\n};\nPromise.prototype.then = function (onFulfilled, onRejected) {\n if (typeof onFulfilled !== 'function' && this.state === FULFILLED ||\n typeof onRejected !== 'function' && this.state === REJECTED) {\n return this;\n }\n var promise = new this.constructor(INTERNAL);\n if (this.state !== PENDING) {\n var resolver = this.state === FULFILLED ? onFulfilled : onRejected;\n unwrap(promise, resolver, this.outcome);\n } else {\n this.queue.push(new QueueItem(promise, onFulfilled, onRejected));\n }\n\n return promise;\n};\nfunction QueueItem(promise, onFulfilled, onRejected) {\n this.promise = promise;\n if (typeof onFulfilled === 'function') {\n this.onFulfilled = onFulfilled;\n this.callFulfilled = this.otherCallFulfilled;\n }\n if (typeof onRejected === 'function') {\n this.onRejected = onRejected;\n this.callRejected = this.otherCallRejected;\n }\n}\nQueueItem.prototype.callFulfilled = function (value) {\n handlers.resolve(this.promise, value);\n};\nQueueItem.prototype.otherCallFulfilled = function (value) {\n unwrap(this.promise, this.onFulfilled, value);\n};\nQueueItem.prototype.callRejected = function (value) {\n handlers.reject(this.promise, value);\n};\nQueueItem.prototype.otherCallRejected = function (value) {\n unwrap(this.promise, this.onRejected, value);\n};\n\nfunction unwrap(promise, func, value) {\n immediate(function () {\n var returnValue;\n try {\n returnValue = func(value);\n } catch (e) {\n return handlers.reject(promise, e);\n }\n if (returnValue === promise) {\n handlers.reject(promise, new TypeError('Cannot resolve promise with itself'));\n } else {\n handlers.resolve(promise, returnValue);\n }\n });\n}\n\nhandlers.resolve = function (self, value) {\n var result = tryCatch(getThen, value);\n if (result.status === 'error') {\n return handlers.reject(self, result.value);\n }\n var thenable = result.value;\n\n if (thenable) {\n safelyResolveThenable(self, thenable);\n } else {\n self.state = FULFILLED;\n self.outcome = value;\n var i = -1;\n var len = self.queue.length;\n while (++i < len) {\n self.queue[i].callFulfilled(value);\n }\n }\n return self;\n};\nhandlers.reject = function (self, error) {\n self.state = REJECTED;\n self.outcome = error;\n var i = -1;\n var len = self.queue.length;\n while (++i < len) {\n self.queue[i].callRejected(error);\n }\n return self;\n};\n\nfunction getThen(obj) {\n // Make sure we only access the accessor once as required by the spec\n var then = obj && obj.then;\n if (obj && (typeof obj === 'object' || typeof obj === 'function') && typeof then === 'function') {\n return function appyThen() {\n then.apply(obj, arguments);\n };\n }\n}\n\nfunction safelyResolveThenable(self, thenable) {\n // Either fulfill, reject or reject with error\n var called = false;\n function onError(value) {\n if (called) {\n return;\n }\n called = true;\n handlers.reject(self, value);\n }\n\n function onSuccess(value) {\n if (called) {\n return;\n }\n called = true;\n handlers.resolve(self, value);\n }\n\n function tryToUnwrap() {\n thenable(onSuccess, onError);\n }\n\n var result = tryCatch(tryToUnwrap);\n if (result.status === 'error') {\n onError(result.value);\n }\n}\n\nfunction tryCatch(func, value) {\n var out = {};\n try {\n out.value = func(value);\n out.status = 'success';\n } catch (e) {\n out.status = 'error';\n out.value = e;\n }\n return out;\n}\n\nPromise.resolve = resolve;\nfunction resolve(value) {\n if (value instanceof this) {\n return value;\n }\n return handlers.resolve(new this(INTERNAL), value);\n}\n\nPromise.reject = reject;\nfunction reject(reason) {\n var promise = new this(INTERNAL);\n return handlers.reject(promise, reason);\n}\n\nPromise.all = all;\nfunction all(iterable) {\n var self = this;\n if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n return this.reject(new TypeError('must be an array'));\n }\n\n var len = iterable.length;\n var called = false;\n if (!len) {\n return this.resolve([]);\n }\n\n var values = new Array(len);\n var resolved = 0;\n var i = -1;\n var promise = new this(INTERNAL);\n\n while (++i < len) {\n allResolver(iterable[i], i);\n }\n return promise;\n function allResolver(value, i) {\n self.resolve(value).then(resolveFromAll, function (error) {\n if (!called) {\n called = true;\n handlers.reject(promise, error);\n }\n });\n function resolveFromAll(outValue) {\n values[i] = outValue;\n if (++resolved === len && !called) {\n called = true;\n handlers.resolve(promise, values);\n }\n }\n }\n}\n\nPromise.race = race;\nfunction race(iterable) {\n var self = this;\n if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n return this.reject(new TypeError('must be an array'));\n }\n\n var len = iterable.length;\n var called = false;\n if (!len) {\n return this.resolve([]);\n }\n\n var i = -1;\n var promise = new this(INTERNAL);\n\n while (++i < len) {\n resolver(iterable[i]);\n }\n return promise;\n function resolver(value) {\n self.resolve(value).then(function (response) {\n if (!called) {\n called = true;\n handlers.resolve(promise, response);\n }\n }, function (error) {\n if (!called) {\n called = true;\n handlers.reject(promise, error);\n }\n });\n }\n}\n\n},{\"1\":1}],3:[function(_dereq_,module,exports){\n(function (global){\n'use strict';\nif (typeof global.Promise !== 'function') {\n global.Promise = _dereq_(2);\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"2\":2}],4:[function(_dereq_,module,exports){\n'use strict';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction getIDB() {\n /* global indexedDB,webkitIndexedDB,mozIndexedDB,OIndexedDB,msIndexedDB */\n try {\n if (typeof indexedDB !== 'undefined') {\n return indexedDB;\n }\n if (typeof webkitIndexedDB !== 'undefined') {\n return webkitIndexedDB;\n }\n if (typeof mozIndexedDB !== 'undefined') {\n return mozIndexedDB;\n }\n if (typeof OIndexedDB !== 'undefined') {\n return OIndexedDB;\n }\n if (typeof msIndexedDB !== 'undefined') {\n return msIndexedDB;\n }\n } catch (e) {\n return;\n }\n}\n\nvar idb = getIDB();\n\nfunction isIndexedDBValid() {\n try {\n // Initialize IndexedDB; fall back to vendor-prefixed versions\n // if needed.\n if (!idb || !idb.open) {\n return false;\n }\n // We mimic PouchDB here;\n //\n // We test for openDatabase because IE Mobile identifies itself\n // as Safari. Oh the lulz...\n var isSafari = typeof openDatabase !== 'undefined' && /(Safari|iPhone|iPad|iPod)/.test(navigator.userAgent) && !/Chrome/.test(navigator.userAgent) && !/BlackBerry/.test(navigator.platform);\n\n var hasFetch = typeof fetch === 'function' && fetch.toString().indexOf('[native code') !== -1;\n\n // Safari <10.1 does not meet our requirements for IDB support\n // (see: https://github.com/pouchdb/pouchdb/issues/5572).\n // Safari 10.1 shipped with fetch, we can use that to detect it.\n // Note: this creates issues with `window.fetch` polyfills and\n // overrides; see:\n // https://github.com/localForage/localForage/issues/856\n return (!isSafari || hasFetch) && typeof indexedDB !== 'undefined' &&\n // some outdated implementations of IDB that appear on Samsung\n // and HTC Android devices <4.4 are missing IDBKeyRange\n // See: https://github.com/mozilla/localForage/issues/128\n // See: https://github.com/mozilla/localForage/issues/272\n typeof IDBKeyRange !== 'undefined';\n } catch (e) {\n return false;\n }\n}\n\n// Abstracts constructing a Blob object, so it also works in older\n// browsers that don't support the native Blob constructor. (i.e.\n// old QtWebKit versions, at least).\n// Abstracts constructing a Blob object, so it also works in older\n// browsers that don't support the native Blob constructor. (i.e.\n// old QtWebKit versions, at least).\nfunction createBlob(parts, properties) {\n /* global BlobBuilder,MSBlobBuilder,MozBlobBuilder,WebKitBlobBuilder */\n parts = parts || [];\n properties = properties || {};\n try {\n return new Blob(parts, properties);\n } catch (e) {\n if (e.name !== 'TypeError') {\n throw e;\n }\n var Builder = typeof BlobBuilder !== 'undefined' ? BlobBuilder : typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder : typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder : WebKitBlobBuilder;\n var builder = new Builder();\n for (var i = 0; i < parts.length; i += 1) {\n builder.append(parts[i]);\n }\n return builder.getBlob(properties.type);\n }\n}\n\n// This is CommonJS because lie is an external dependency, so Rollup\n// can just ignore it.\nif (typeof Promise === 'undefined') {\n // In the \"nopromises\" build this will just throw if you don't have\n // a global promise object, but it would throw anyway later.\n _dereq_(3);\n}\nvar Promise$1 = Promise;\n\nfunction executeCallback(promise, callback) {\n if (callback) {\n promise.then(function (result) {\n callback(null, result);\n }, function (error) {\n callback(error);\n });\n }\n}\n\nfunction executeTwoCallbacks(promise, callback, errorCallback) {\n if (typeof callback === 'function') {\n promise.then(callback);\n }\n\n if (typeof errorCallback === 'function') {\n promise[\"catch\"](errorCallback);\n }\n}\n\nfunction normalizeKey(key) {\n // Cast the key to a string, as that's all we can set as a key.\n if (typeof key !== 'string') {\n console.warn(key + ' used as a key, but it is not a string.');\n key = String(key);\n }\n\n return key;\n}\n\nfunction getCallback() {\n if (arguments.length && typeof arguments[arguments.length - 1] === 'function') {\n return arguments[arguments.length - 1];\n }\n}\n\n// Some code originally from async_storage.js in\n// [Gaia](https://github.com/mozilla-b2g/gaia).\n\nvar DETECT_BLOB_SUPPORT_STORE = 'local-forage-detect-blob-support';\nvar supportsBlobs = void 0;\nvar dbContexts = {};\nvar toString = Object.prototype.toString;\n\n// Transaction Modes\nvar READ_ONLY = 'readonly';\nvar READ_WRITE = 'readwrite';\n\n// Transform a binary string to an array buffer, because otherwise\n// weird stuff happens when you try to work with the binary string directly.\n// It is known.\n// From http://stackoverflow.com/questions/14967647/ (continues on next line)\n// encode-decode-image-with-base64-breaks-image (2013-04-21)\nfunction _binStringToArrayBuffer(bin) {\n var length = bin.length;\n var buf = new ArrayBuffer(length);\n var arr = new Uint8Array(buf);\n for (var i = 0; i < length; i++) {\n arr[i] = bin.charCodeAt(i);\n }\n return buf;\n}\n\n//\n// Blobs are not supported in all versions of IndexedDB, notably\n// Chrome <37 and Android <5. In those versions, storing a blob will throw.\n//\n// Various other blob bugs exist in Chrome v37-42 (inclusive).\n// Detecting them is expensive and confusing to users, and Chrome 37-42\n// is at very low usage worldwide, so we do a hacky userAgent check instead.\n//\n// content-type bug: https://code.google.com/p/chromium/issues/detail?id=408120\n// 404 bug: https://code.google.com/p/chromium/issues/detail?id=447916\n// FileReader bug: https://code.google.com/p/chromium/issues/detail?id=447836\n//\n// Code borrowed from PouchDB. See:\n// https://github.com/pouchdb/pouchdb/blob/master/packages/node_modules/pouchdb-adapter-idb/src/blobSupport.js\n//\nfunction _checkBlobSupportWithoutCaching(idb) {\n return new Promise$1(function (resolve) {\n var txn = idb.transaction(DETECT_BLOB_SUPPORT_STORE, READ_WRITE);\n var blob = createBlob(['']);\n txn.objectStore(DETECT_BLOB_SUPPORT_STORE).put(blob, 'key');\n\n txn.onabort = function (e) {\n // If the transaction aborts now its due to not being able to\n // write to the database, likely due to the disk being full\n e.preventDefault();\n e.stopPropagation();\n resolve(false);\n };\n\n txn.oncomplete = function () {\n var matchedChrome = navigator.userAgent.match(/Chrome\\/(\\d+)/);\n var matchedEdge = navigator.userAgent.match(/Edge\\//);\n // MS Edge pretends to be Chrome 42:\n // https://msdn.microsoft.com/en-us/library/hh869301%28v=vs.85%29.aspx\n resolve(matchedEdge || !matchedChrome || parseInt(matchedChrome[1], 10) >= 43);\n };\n })[\"catch\"](function () {\n return false; // error, so assume unsupported\n });\n}\n\nfunction _checkBlobSupport(idb) {\n if (typeof supportsBlobs === 'boolean') {\n return Promise$1.resolve(supportsBlobs);\n }\n return _checkBlobSupportWithoutCaching(idb).then(function (value) {\n supportsBlobs = value;\n return supportsBlobs;\n });\n}\n\nfunction _deferReadiness(dbInfo) {\n var dbContext = dbContexts[dbInfo.name];\n\n // Create a deferred object representing the current database operation.\n var deferredOperation = {};\n\n deferredOperation.promise = new Promise$1(function (resolve, reject) {\n deferredOperation.resolve = resolve;\n deferredOperation.reject = reject;\n });\n\n // Enqueue the deferred operation.\n dbContext.deferredOperations.push(deferredOperation);\n\n // Chain its promise to the database readiness.\n if (!dbContext.dbReady) {\n dbContext.dbReady = deferredOperation.promise;\n } else {\n dbContext.dbReady = dbContext.dbReady.then(function () {\n return deferredOperation.promise;\n });\n }\n}\n\nfunction _advanceReadiness(dbInfo) {\n var dbContext = dbContexts[dbInfo.name];\n\n // Dequeue a deferred operation.\n var deferredOperation = dbContext.deferredOperations.pop();\n\n // Resolve its promise (which is part of the database readiness\n // chain of promises).\n if (deferredOperation) {\n deferredOperation.resolve();\n return deferredOperation.promise;\n }\n}\n\nfunction _rejectReadiness(dbInfo, err) {\n var dbContext = dbContexts[dbInfo.name];\n\n // Dequeue a deferred operation.\n var deferredOperation = dbContext.deferredOperations.pop();\n\n // Reject its promise (which is part of the database readiness\n // chain of promises).\n if (deferredOperation) {\n deferredOperation.reject(err);\n return deferredOperation.promise;\n }\n}\n\nfunction _getConnection(dbInfo, upgradeNeeded) {\n return new Promise$1(function (resolve, reject) {\n dbContexts[dbInfo.name] = dbContexts[dbInfo.name] || createDbContext();\n\n if (dbInfo.db) {\n if (upgradeNeeded) {\n _deferReadiness(dbInfo);\n dbInfo.db.close();\n } else {\n return resolve(dbInfo.db);\n }\n }\n\n var dbArgs = [dbInfo.name];\n\n if (upgradeNeeded) {\n dbArgs.push(dbInfo.version);\n }\n\n var openreq = idb.open.apply(idb, dbArgs);\n\n if (upgradeNeeded) {\n openreq.onupgradeneeded = function (e) {\n var db = openreq.result;\n try {\n db.createObjectStore(dbInfo.storeName);\n if (e.oldVersion <= 1) {\n // Added when support for blob shims was added\n db.createObjectStore(DETECT_BLOB_SUPPORT_STORE);\n }\n } catch (ex) {\n if (ex.name === 'ConstraintError') {\n console.warn('The database \"' + dbInfo.name + '\"' + ' has been upgraded from version ' + e.oldVersion + ' to version ' + e.newVersion + ', but the storage \"' + dbInfo.storeName + '\" already exists.');\n } else {\n throw ex;\n }\n }\n };\n }\n\n openreq.onerror = function (e) {\n e.preventDefault();\n reject(openreq.error);\n };\n\n openreq.onsuccess = function () {\n var db = openreq.result;\n db.onversionchange = function (e) {\n // Triggered when the database is modified (e.g. adding an objectStore) or\n // deleted (even when initiated by other sessions in different tabs).\n // Closing the connection here prevents those operations from being blocked.\n // If the database is accessed again later by this instance, the connection\n // will be reopened or the database recreated as needed.\n e.target.close();\n };\n resolve(db);\n _advanceReadiness(dbInfo);\n };\n });\n}\n\nfunction _getOriginalConnection(dbInfo) {\n return _getConnection(dbInfo, false);\n}\n\nfunction _getUpgradedConnection(dbInfo) {\n return _getConnection(dbInfo, true);\n}\n\nfunction _isUpgradeNeeded(dbInfo, defaultVersion) {\n if (!dbInfo.db) {\n return true;\n }\n\n var isNewStore = !dbInfo.db.objectStoreNames.contains(dbInfo.storeName);\n var isDowngrade = dbInfo.version < dbInfo.db.version;\n var isUpgrade = dbInfo.version > dbInfo.db.version;\n\n if (isDowngrade) {\n // If the version is not the default one\n // then warn for impossible downgrade.\n if (dbInfo.version !== defaultVersion) {\n console.warn('The database \"' + dbInfo.name + '\"' + \" can't be downgraded from version \" + dbInfo.db.version + ' to version ' + dbInfo.version + '.');\n }\n // Align the versions to prevent errors.\n dbInfo.version = dbInfo.db.version;\n }\n\n if (isUpgrade || isNewStore) {\n // If the store is new then increment the version (if needed).\n // This will trigger an \"upgradeneeded\" event which is required\n // for creating a store.\n if (isNewStore) {\n var incVersion = dbInfo.db.version + 1;\n if (incVersion > dbInfo.version) {\n dbInfo.version = incVersion;\n }\n }\n\n return true;\n }\n\n return false;\n}\n\n// encode a blob for indexeddb engines that don't support blobs\nfunction _encodeBlob(blob) {\n return new Promise$1(function (resolve, reject) {\n var reader = new FileReader();\n reader.onerror = reject;\n reader.onloadend = function (e) {\n var base64 = btoa(e.target.result || '');\n resolve({\n __local_forage_encoded_blob: true,\n data: base64,\n type: blob.type\n });\n };\n reader.readAsBinaryString(blob);\n });\n}\n\n// decode an encoded blob\nfunction _decodeBlob(encodedBlob) {\n var arrayBuff = _binStringToArrayBuffer(atob(encodedBlob.data));\n return createBlob([arrayBuff], { type: encodedBlob.type });\n}\n\n// is this one of our fancy encoded blobs?\nfunction _isEncodedBlob(value) {\n return value && value.__local_forage_encoded_blob;\n}\n\n// Specialize the default `ready()` function by making it dependent\n// on the current database operations. Thus, the driver will be actually\n// ready when it's been initialized (default) *and* there are no pending\n// operations on the database (initiated by some other instances).\nfunction _fullyReady(callback) {\n var self = this;\n\n var promise = self._initReady().then(function () {\n var dbContext = dbContexts[self._dbInfo.name];\n\n if (dbContext && dbContext.dbReady) {\n return dbContext.dbReady;\n }\n });\n\n executeTwoCallbacks(promise, callback, callback);\n return promise;\n}\n\n// Try to establish a new db connection to replace the\n// current one which is broken (i.e. experiencing\n// InvalidStateError while creating a transaction).\nfunction _tryReconnect(dbInfo) {\n _deferReadiness(dbInfo);\n\n var dbContext = dbContexts[dbInfo.name];\n var forages = dbContext.forages;\n\n for (var i = 0; i < forages.length; i++) {\n var forage = forages[i];\n if (forage._dbInfo.db) {\n forage._dbInfo.db.close();\n forage._dbInfo.db = null;\n }\n }\n dbInfo.db = null;\n\n return _getOriginalConnection(dbInfo).then(function (db) {\n dbInfo.db = db;\n if (_isUpgradeNeeded(dbInfo)) {\n // Reopen the database for upgrading.\n return _getUpgradedConnection(dbInfo);\n }\n return db;\n }).then(function (db) {\n // store the latest db reference\n // in case the db was upgraded\n dbInfo.db = dbContext.db = db;\n for (var i = 0; i < forages.length; i++) {\n forages[i]._dbInfo.db = db;\n }\n })[\"catch\"](function (err) {\n _rejectReadiness(dbInfo, err);\n throw err;\n });\n}\n\n// FF doesn't like Promises (micro-tasks) and IDDB store operations,\n// so we have to do it with callbacks\nfunction createTransaction(dbInfo, mode, callback, retries) {\n if (retries === undefined) {\n retries = 1;\n }\n\n try {\n var tx = dbInfo.db.transaction(dbInfo.storeName, mode);\n callback(null, tx);\n } catch (err) {\n if (retries > 0 && (!dbInfo.db || err.name === 'InvalidStateError' || err.name === 'NotFoundError')) {\n return Promise$1.resolve().then(function () {\n if (!dbInfo.db || err.name === 'NotFoundError' && !dbInfo.db.objectStoreNames.contains(dbInfo.storeName) && dbInfo.version <= dbInfo.db.version) {\n // increase the db version, to create the new ObjectStore\n if (dbInfo.db) {\n dbInfo.version = dbInfo.db.version + 1;\n }\n // Reopen the database for upgrading.\n return _getUpgradedConnection(dbInfo);\n }\n }).then(function () {\n return _tryReconnect(dbInfo).then(function () {\n createTransaction(dbInfo, mode, callback, retries - 1);\n });\n })[\"catch\"](callback);\n }\n\n callback(err);\n }\n}\n\nfunction createDbContext() {\n return {\n // Running localForages sharing a database.\n forages: [],\n // Shared database.\n db: null,\n // Database readiness (promise).\n dbReady: null,\n // Deferred operations on the database.\n deferredOperations: []\n };\n}\n\n// Open the IndexedDB database (automatically creates one if one didn't\n// previously exist), using any options set in the config.\nfunction _initStorage(options) {\n var self = this;\n var dbInfo = {\n db: null\n };\n\n if (options) {\n for (var i in options) {\n dbInfo[i] = options[i];\n }\n }\n\n // Get the current context of the database;\n var dbContext = dbContexts[dbInfo.name];\n\n // ...or create a new context.\n if (!dbContext) {\n dbContext = createDbContext();\n // Register the new context in the global container.\n dbContexts[dbInfo.name] = dbContext;\n }\n\n // Register itself as a running localForage in the current context.\n dbContext.forages.push(self);\n\n // Replace the default `ready()` function with the specialized one.\n if (!self._initReady) {\n self._initReady = self.ready;\n self.ready = _fullyReady;\n }\n\n // Create an array of initialization states of the related localForages.\n var initPromises = [];\n\n function ignoreErrors() {\n // Don't handle errors here,\n // just makes sure related localForages aren't pending.\n return Promise$1.resolve();\n }\n\n for (var j = 0; j < dbContext.forages.length; j++) {\n var forage = dbContext.forages[j];\n if (forage !== self) {\n // Don't wait for itself...\n initPromises.push(forage._initReady()[\"catch\"](ignoreErrors));\n }\n }\n\n // Take a snapshot of the related localForages.\n var forages = dbContext.forages.slice(0);\n\n // Initialize the connection process only when\n // all the related localForages aren't pending.\n return Promise$1.all(initPromises).then(function () {\n dbInfo.db = dbContext.db;\n // Get the connection or open a new one without upgrade.\n return _getOriginalConnection(dbInfo);\n }).then(function (db) {\n dbInfo.db = db;\n if (_isUpgradeNeeded(dbInfo, self._defaultConfig.version)) {\n // Reopen the database for upgrading.\n return _getUpgradedConnection(dbInfo);\n }\n return db;\n }).then(function (db) {\n dbInfo.db = dbContext.db = db;\n self._dbInfo = dbInfo;\n // Share the final connection amongst related localForages.\n for (var k = 0; k < forages.length; k++) {\n var forage = forages[k];\n if (forage !== self) {\n // Self is already up-to-date.\n forage._dbInfo.db = dbInfo.db;\n forage._dbInfo.version = dbInfo.version;\n }\n }\n });\n}\n\nfunction getItem(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.get(key);\n\n req.onsuccess = function () {\n var value = req.result;\n if (value === undefined) {\n value = null;\n }\n if (_isEncodedBlob(value)) {\n value = _decodeBlob(value);\n }\n resolve(value);\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Iterate over all items stored in database.\nfunction iterate(iterator, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.openCursor();\n var iterationNumber = 1;\n\n req.onsuccess = function () {\n var cursor = req.result;\n\n if (cursor) {\n var value = cursor.value;\n if (_isEncodedBlob(value)) {\n value = _decodeBlob(value);\n }\n var result = iterator(value, cursor.key, iterationNumber++);\n\n // when the iterator callback returns any\n // (non-`undefined`) value, then we stop\n // the iteration immediately\n if (result !== void 0) {\n resolve(result);\n } else {\n cursor[\"continue\"]();\n }\n } else {\n resolve();\n }\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n\n return promise;\n}\n\nfunction setItem(key, value, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n var dbInfo;\n self.ready().then(function () {\n dbInfo = self._dbInfo;\n if (toString.call(value) === '[object Blob]') {\n return _checkBlobSupport(dbInfo.db).then(function (blobSupport) {\n if (blobSupport) {\n return value;\n }\n return _encodeBlob(value);\n });\n }\n return value;\n }).then(function (value) {\n createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n\n // The reason we don't _save_ null is because IE 10 does\n // not support saving the `null` type in IndexedDB. How\n // ironic, given the bug below!\n // See: https://github.com/mozilla/localForage/issues/161\n if (value === null) {\n value = undefined;\n }\n\n var req = store.put(value, key);\n\n transaction.oncomplete = function () {\n // Cast to undefined so the value passed to\n // callback/promise is the same as what one would get out\n // of `getItem()` later. This leads to some weirdness\n // (setItem('foo', undefined) will return `null`), but\n // it's not my fault localStorage is our baseline and that\n // it's weird.\n if (value === undefined) {\n value = null;\n }\n\n resolve(value);\n };\n transaction.onabort = transaction.onerror = function () {\n var err = req.error ? req.error : req.transaction.error;\n reject(err);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction removeItem(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n // We use a Grunt task to make this safe for IE and some\n // versions of Android (including those used by Cordova).\n // Normally IE won't like `.delete()` and will insist on\n // using `['delete']()`, but we have a build step that\n // fixes this for us now.\n var req = store[\"delete\"](key);\n transaction.oncomplete = function () {\n resolve();\n };\n\n transaction.onerror = function () {\n reject(req.error);\n };\n\n // The request will be also be aborted if we've exceeded our storage\n // space.\n transaction.onabort = function () {\n var err = req.error ? req.error : req.transaction.error;\n reject(err);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction clear(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.clear();\n\n transaction.oncomplete = function () {\n resolve();\n };\n\n transaction.onabort = transaction.onerror = function () {\n var err = req.error ? req.error : req.transaction.error;\n reject(err);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction length(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.count();\n\n req.onsuccess = function () {\n resolve(req.result);\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction key(n, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n if (n < 0) {\n resolve(null);\n\n return;\n }\n\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var advanced = false;\n var req = store.openKeyCursor();\n\n req.onsuccess = function () {\n var cursor = req.result;\n if (!cursor) {\n // this means there weren't enough keys\n resolve(null);\n\n return;\n }\n\n if (n === 0) {\n // We have the first key, return it if that's what they\n // wanted.\n resolve(cursor.key);\n } else {\n if (!advanced) {\n // Otherwise, ask the cursor to skip ahead n\n // records.\n advanced = true;\n cursor.advance(n);\n } else {\n // When we get here, we've got the nth key.\n resolve(cursor.key);\n }\n }\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction keys(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.openKeyCursor();\n var keys = [];\n\n req.onsuccess = function () {\n var cursor = req.result;\n\n if (!cursor) {\n resolve(keys);\n return;\n }\n\n keys.push(cursor.key);\n cursor[\"continue\"]();\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction dropInstance(options, callback) {\n callback = getCallback.apply(this, arguments);\n\n var currentConfig = this.config();\n options = typeof options !== 'function' && options || {};\n if (!options.name) {\n options.name = options.name || currentConfig.name;\n options.storeName = options.storeName || currentConfig.storeName;\n }\n\n var self = this;\n var promise;\n if (!options.name) {\n promise = Promise$1.reject('Invalid arguments');\n } else {\n var isCurrentDb = options.name === currentConfig.name && self._dbInfo.db;\n\n var dbPromise = isCurrentDb ? Promise$1.resolve(self._dbInfo.db) : _getOriginalConnection(options).then(function (db) {\n var dbContext = dbContexts[options.name];\n var forages = dbContext.forages;\n dbContext.db = db;\n for (var i = 0; i < forages.length; i++) {\n forages[i]._dbInfo.db = db;\n }\n return db;\n });\n\n if (!options.storeName) {\n promise = dbPromise.then(function (db) {\n _deferReadiness(options);\n\n var dbContext = dbContexts[options.name];\n var forages = dbContext.forages;\n\n db.close();\n for (var i = 0; i < forages.length; i++) {\n var forage = forages[i];\n forage._dbInfo.db = null;\n }\n\n var dropDBPromise = new Promise$1(function (resolve, reject) {\n var req = idb.deleteDatabase(options.name);\n\n req.onerror = function () {\n var db = req.result;\n if (db) {\n db.close();\n }\n reject(req.error);\n };\n\n req.onblocked = function () {\n // Closing all open connections in onversionchange handler should prevent this situation, but if\n // we do get here, it just means the request remains pending - eventually it will succeed or error\n console.warn('dropInstance blocked for database \"' + options.name + '\" until all open connections are closed');\n };\n\n req.onsuccess = function () {\n var db = req.result;\n if (db) {\n db.close();\n }\n resolve(db);\n };\n });\n\n return dropDBPromise.then(function (db) {\n dbContext.db = db;\n for (var i = 0; i < forages.length; i++) {\n var _forage = forages[i];\n _advanceReadiness(_forage._dbInfo);\n }\n })[\"catch\"](function (err) {\n (_rejectReadiness(options, err) || Promise$1.resolve())[\"catch\"](function () {});\n throw err;\n });\n });\n } else {\n promise = dbPromise.then(function (db) {\n if (!db.objectStoreNames.contains(options.storeName)) {\n return;\n }\n\n var newVersion = db.version + 1;\n\n _deferReadiness(options);\n\n var dbContext = dbContexts[options.name];\n var forages = dbContext.forages;\n\n db.close();\n for (var i = 0; i < forages.length; i++) {\n var forage = forages[i];\n forage._dbInfo.db = null;\n forage._dbInfo.version = newVersion;\n }\n\n var dropObjectPromise = new Promise$1(function (resolve, reject) {\n var req = idb.open(options.name, newVersion);\n\n req.onerror = function (err) {\n var db = req.result;\n db.close();\n reject(err);\n };\n\n req.onupgradeneeded = function () {\n var db = req.result;\n db.deleteObjectStore(options.storeName);\n };\n\n req.onsuccess = function () {\n var db = req.result;\n db.close();\n resolve(db);\n };\n });\n\n return dropObjectPromise.then(function (db) {\n dbContext.db = db;\n for (var j = 0; j < forages.length; j++) {\n var _forage2 = forages[j];\n _forage2._dbInfo.db = db;\n _advanceReadiness(_forage2._dbInfo);\n }\n })[\"catch\"](function (err) {\n (_rejectReadiness(options, err) || Promise$1.resolve())[\"catch\"](function () {});\n throw err;\n });\n });\n }\n }\n\n executeCallback(promise, callback);\n return promise;\n}\n\nvar asyncStorage = {\n _driver: 'asyncStorage',\n _initStorage: _initStorage,\n _support: isIndexedDBValid(),\n iterate: iterate,\n getItem: getItem,\n setItem: setItem,\n removeItem: removeItem,\n clear: clear,\n length: length,\n key: key,\n keys: keys,\n dropInstance: dropInstance\n};\n\nfunction isWebSQLValid() {\n return typeof openDatabase === 'function';\n}\n\n// Sadly, the best way to save binary data in WebSQL/localStorage is serializing\n// it to Base64, so this is how we store it to prevent very strange errors with less\n// verbose ways of binary <-> string data storage.\nvar BASE_CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\nvar BLOB_TYPE_PREFIX = '~~local_forage_type~';\nvar BLOB_TYPE_PREFIX_REGEX = /^~~local_forage_type~([^~]+)~/;\n\nvar SERIALIZED_MARKER = '__lfsc__:';\nvar SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER.length;\n\n// OMG the serializations!\nvar TYPE_ARRAYBUFFER = 'arbf';\nvar TYPE_BLOB = 'blob';\nvar TYPE_INT8ARRAY = 'si08';\nvar TYPE_UINT8ARRAY = 'ui08';\nvar TYPE_UINT8CLAMPEDARRAY = 'uic8';\nvar TYPE_INT16ARRAY = 'si16';\nvar TYPE_INT32ARRAY = 'si32';\nvar TYPE_UINT16ARRAY = 'ur16';\nvar TYPE_UINT32ARRAY = 'ui32';\nvar TYPE_FLOAT32ARRAY = 'fl32';\nvar TYPE_FLOAT64ARRAY = 'fl64';\nvar TYPE_SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER_LENGTH + TYPE_ARRAYBUFFER.length;\n\nvar toString$1 = Object.prototype.toString;\n\nfunction stringToBuffer(serializedString) {\n // Fill the string into a ArrayBuffer.\n var bufferLength = serializedString.length * 0.75;\n var len = serializedString.length;\n var i;\n var p = 0;\n var encoded1, encoded2, encoded3, encoded4;\n\n if (serializedString[serializedString.length - 1] === '=') {\n bufferLength--;\n if (serializedString[serializedString.length - 2] === '=') {\n bufferLength--;\n }\n }\n\n var buffer = new ArrayBuffer(bufferLength);\n var bytes = new Uint8Array(buffer);\n\n for (i = 0; i < len; i += 4) {\n encoded1 = BASE_CHARS.indexOf(serializedString[i]);\n encoded2 = BASE_CHARS.indexOf(serializedString[i + 1]);\n encoded3 = BASE_CHARS.indexOf(serializedString[i + 2]);\n encoded4 = BASE_CHARS.indexOf(serializedString[i + 3]);\n\n /*jslint bitwise: true */\n bytes[p++] = encoded1 << 2 | encoded2 >> 4;\n bytes[p++] = (encoded2 & 15) << 4 | encoded3 >> 2;\n bytes[p++] = (encoded3 & 3) << 6 | encoded4 & 63;\n }\n return buffer;\n}\n\n// Converts a buffer to a string to store, serialized, in the backend\n// storage library.\nfunction bufferToString(buffer) {\n // base64-arraybuffer\n var bytes = new Uint8Array(buffer);\n var base64String = '';\n var i;\n\n for (i = 0; i < bytes.length; i += 3) {\n /*jslint bitwise: true */\n base64String += BASE_CHARS[bytes[i] >> 2];\n base64String += BASE_CHARS[(bytes[i] & 3) << 4 | bytes[i + 1] >> 4];\n base64String += BASE_CHARS[(bytes[i + 1] & 15) << 2 | bytes[i + 2] >> 6];\n base64String += BASE_CHARS[bytes[i + 2] & 63];\n }\n\n if (bytes.length % 3 === 2) {\n base64String = base64String.substring(0, base64String.length - 1) + '=';\n } else if (bytes.length % 3 === 1) {\n base64String = base64String.substring(0, base64String.length - 2) + '==';\n }\n\n return base64String;\n}\n\n// Serialize a value, afterwards executing a callback (which usually\n// instructs the `setItem()` callback/promise to be executed). This is how\n// we store binary data with localStorage.\nfunction serialize(value, callback) {\n var valueType = '';\n if (value) {\n valueType = toString$1.call(value);\n }\n\n // Cannot use `value instanceof ArrayBuffer` or such here, as these\n // checks fail when running the tests using casper.js...\n //\n // TODO: See why those tests fail and use a better solution.\n if (value && (valueType === '[object ArrayBuffer]' || value.buffer && toString$1.call(value.buffer) === '[object ArrayBuffer]')) {\n // Convert binary arrays to a string and prefix the string with\n // a special marker.\n var buffer;\n var marker = SERIALIZED_MARKER;\n\n if (value instanceof ArrayBuffer) {\n buffer = value;\n marker += TYPE_ARRAYBUFFER;\n } else {\n buffer = value.buffer;\n\n if (valueType === '[object Int8Array]') {\n marker += TYPE_INT8ARRAY;\n } else if (valueType === '[object Uint8Array]') {\n marker += TYPE_UINT8ARRAY;\n } else if (valueType === '[object Uint8ClampedArray]') {\n marker += TYPE_UINT8CLAMPEDARRAY;\n } else if (valueType === '[object Int16Array]') {\n marker += TYPE_INT16ARRAY;\n } else if (valueType === '[object Uint16Array]') {\n marker += TYPE_UINT16ARRAY;\n } else if (valueType === '[object Int32Array]') {\n marker += TYPE_INT32ARRAY;\n } else if (valueType === '[object Uint32Array]') {\n marker += TYPE_UINT32ARRAY;\n } else if (valueType === '[object Float32Array]') {\n marker += TYPE_FLOAT32ARRAY;\n } else if (valueType === '[object Float64Array]') {\n marker += TYPE_FLOAT64ARRAY;\n } else {\n callback(new Error('Failed to get type for BinaryArray'));\n }\n }\n\n callback(marker + bufferToString(buffer));\n } else if (valueType === '[object Blob]') {\n // Conver the blob to a binaryArray and then to a string.\n var fileReader = new FileReader();\n\n fileReader.onload = function () {\n // Backwards-compatible prefix for the blob type.\n var str = BLOB_TYPE_PREFIX + value.type + '~' + bufferToString(this.result);\n\n callback(SERIALIZED_MARKER + TYPE_BLOB + str);\n };\n\n fileReader.readAsArrayBuffer(value);\n } else {\n try {\n callback(JSON.stringify(value));\n } catch (e) {\n console.error(\"Couldn't convert value into a JSON string: \", value);\n\n callback(null, e);\n }\n }\n}\n\n// Deserialize data we've inserted into a value column/field. We place\n// special markers into our strings to mark them as encoded; this isn't\n// as nice as a meta field, but it's the only sane thing we can do whilst\n// keeping localStorage support intact.\n//\n// Oftentimes this will just deserialize JSON content, but if we have a\n// special marker (SERIALIZED_MARKER, defined above), we will extract\n// some kind of arraybuffer/binary data/typed array out of the string.\nfunction deserialize(value) {\n // If we haven't marked this string as being specially serialized (i.e.\n // something other than serialized JSON), we can just return it and be\n // done with it.\n if (value.substring(0, SERIALIZED_MARKER_LENGTH) !== SERIALIZED_MARKER) {\n return JSON.parse(value);\n }\n\n // The following code deals with deserializing some kind of Blob or\n // TypedArray. First we separate out the type of data we're dealing\n // with from the data itself.\n var serializedString = value.substring(TYPE_SERIALIZED_MARKER_LENGTH);\n var type = value.substring(SERIALIZED_MARKER_LENGTH, TYPE_SERIALIZED_MARKER_LENGTH);\n\n var blobType;\n // Backwards-compatible blob type serialization strategy.\n // DBs created with older versions of localForage will simply not have the blob type.\n if (type === TYPE_BLOB && BLOB_TYPE_PREFIX_REGEX.test(serializedString)) {\n var matcher = serializedString.match(BLOB_TYPE_PREFIX_REGEX);\n blobType = matcher[1];\n serializedString = serializedString.substring(matcher[0].length);\n }\n var buffer = stringToBuffer(serializedString);\n\n // Return the right type based on the code/type set during\n // serialization.\n switch (type) {\n case TYPE_ARRAYBUFFER:\n return buffer;\n case TYPE_BLOB:\n return createBlob([buffer], { type: blobType });\n case TYPE_INT8ARRAY:\n return new Int8Array(buffer);\n case TYPE_UINT8ARRAY:\n return new Uint8Array(buffer);\n case TYPE_UINT8CLAMPEDARRAY:\n return new Uint8ClampedArray(buffer);\n case TYPE_INT16ARRAY:\n return new Int16Array(buffer);\n case TYPE_UINT16ARRAY:\n return new Uint16Array(buffer);\n case TYPE_INT32ARRAY:\n return new Int32Array(buffer);\n case TYPE_UINT32ARRAY:\n return new Uint32Array(buffer);\n case TYPE_FLOAT32ARRAY:\n return new Float32Array(buffer);\n case TYPE_FLOAT64ARRAY:\n return new Float64Array(buffer);\n default:\n throw new Error('Unkown type: ' + type);\n }\n}\n\nvar localforageSerializer = {\n serialize: serialize,\n deserialize: deserialize,\n stringToBuffer: stringToBuffer,\n bufferToString: bufferToString\n};\n\n/*\n * Includes code from:\n *\n * base64-arraybuffer\n * https://github.com/niklasvh/base64-arraybuffer\n *\n * Copyright (c) 2012 Niklas von Hertzen\n * Licensed under the MIT license.\n */\n\nfunction createDbTable(t, dbInfo, callback, errorCallback) {\n t.executeSql('CREATE TABLE IF NOT EXISTS ' + dbInfo.storeName + ' ' + '(id INTEGER PRIMARY KEY, key unique, value)', [], callback, errorCallback);\n}\n\n// Open the WebSQL database (automatically creates one if one didn't\n// previously exist), using any options set in the config.\nfunction _initStorage$1(options) {\n var self = this;\n var dbInfo = {\n db: null\n };\n\n if (options) {\n for (var i in options) {\n dbInfo[i] = typeof options[i] !== 'string' ? options[i].toString() : options[i];\n }\n }\n\n var dbInfoPromise = new Promise$1(function (resolve, reject) {\n // Open the database; the openDatabase API will automatically\n // create it for us if it doesn't exist.\n try {\n dbInfo.db = openDatabase(dbInfo.name, String(dbInfo.version), dbInfo.description, dbInfo.size);\n } catch (e) {\n return reject(e);\n }\n\n // Create our key/value table if it doesn't exist.\n dbInfo.db.transaction(function (t) {\n createDbTable(t, dbInfo, function () {\n self._dbInfo = dbInfo;\n resolve();\n }, function (t, error) {\n reject(error);\n });\n }, reject);\n });\n\n dbInfo.serializer = localforageSerializer;\n return dbInfoPromise;\n}\n\nfunction tryExecuteSql(t, dbInfo, sqlStatement, args, callback, errorCallback) {\n t.executeSql(sqlStatement, args, callback, function (t, error) {\n if (error.code === error.SYNTAX_ERR) {\n t.executeSql('SELECT name FROM sqlite_master ' + \"WHERE type='table' AND name = ?\", [dbInfo.storeName], function (t, results) {\n if (!results.rows.length) {\n // if the table is missing (was deleted)\n // re-create it table and retry\n createDbTable(t, dbInfo, function () {\n t.executeSql(sqlStatement, args, callback, errorCallback);\n }, errorCallback);\n } else {\n errorCallback(t, error);\n }\n }, errorCallback);\n } else {\n errorCallback(t, error);\n }\n }, errorCallback);\n}\n\nfunction getItem$1(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT * FROM ' + dbInfo.storeName + ' WHERE key = ? LIMIT 1', [key], function (t, results) {\n var result = results.rows.length ? results.rows.item(0).value : null;\n\n // Check to see if this is serialized content we need to\n // unpack.\n if (result) {\n result = dbInfo.serializer.deserialize(result);\n }\n\n resolve(result);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction iterate$1(iterator, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT * FROM ' + dbInfo.storeName, [], function (t, results) {\n var rows = results.rows;\n var length = rows.length;\n\n for (var i = 0; i < length; i++) {\n var item = rows.item(i);\n var result = item.value;\n\n // Check to see if this is serialized content\n // we need to unpack.\n if (result) {\n result = dbInfo.serializer.deserialize(result);\n }\n\n result = iterator(result, item.key, i + 1);\n\n // void(0) prevents problems with redefinition\n // of `undefined`.\n if (result !== void 0) {\n resolve(result);\n return;\n }\n }\n\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction _setItem(key, value, callback, retriesLeft) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n // The localStorage API doesn't return undefined values in an\n // \"expected\" way, so undefined is always cast to null in all\n // drivers. See: https://github.com/mozilla/localForage/pull/42\n if (value === undefined) {\n value = null;\n }\n\n // Save the original value to pass to the callback.\n var originalValue = value;\n\n var dbInfo = self._dbInfo;\n dbInfo.serializer.serialize(value, function (value, error) {\n if (error) {\n reject(error);\n } else {\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'INSERT OR REPLACE INTO ' + dbInfo.storeName + ' ' + '(key, value) VALUES (?, ?)', [key, value], function () {\n resolve(originalValue);\n }, function (t, error) {\n reject(error);\n });\n }, function (sqlError) {\n // The transaction failed; check\n // to see if it's a quota error.\n if (sqlError.code === sqlError.QUOTA_ERR) {\n // We reject the callback outright for now, but\n // it's worth trying to re-run the transaction.\n // Even if the user accepts the prompt to use\n // more storage on Safari, this error will\n // be called.\n //\n // Try to re-run the transaction.\n if (retriesLeft > 0) {\n resolve(_setItem.apply(self, [key, originalValue, callback, retriesLeft - 1]));\n return;\n }\n reject(sqlError);\n }\n });\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction setItem$1(key, value, callback) {\n return _setItem.apply(this, [key, value, callback, 1]);\n}\n\nfunction removeItem$1(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'DELETE FROM ' + dbInfo.storeName + ' WHERE key = ?', [key], function () {\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Deletes every item in the table.\n// TODO: Find out if this resets the AUTO_INCREMENT number.\nfunction clear$1(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'DELETE FROM ' + dbInfo.storeName, [], function () {\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Does a simple `COUNT(key)` to get the number of items stored in\n// localForage.\nfunction length$1(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n // Ahhh, SQL makes this one soooooo easy.\n tryExecuteSql(t, dbInfo, 'SELECT COUNT(key) as c FROM ' + dbInfo.storeName, [], function (t, results) {\n var result = results.rows.item(0).c;\n resolve(result);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Return the key located at key index X; essentially gets the key from a\n// `WHERE id = ?`. This is the most efficient way I can think to implement\n// this rarely-used (in my experience) part of the API, but it can seem\n// inconsistent, because we do `INSERT OR REPLACE INTO` on `setItem()`, so\n// the ID of each key will change every time it's updated. Perhaps a stored\n// procedure for the `setItem()` SQL would solve this problem?\n// TODO: Don't change ID on `setItem()`.\nfunction key$1(n, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT key FROM ' + dbInfo.storeName + ' WHERE id = ? LIMIT 1', [n + 1], function (t, results) {\n var result = results.rows.length ? results.rows.item(0).key : null;\n resolve(result);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction keys$1(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT key FROM ' + dbInfo.storeName, [], function (t, results) {\n var keys = [];\n\n for (var i = 0; i < results.rows.length; i++) {\n keys.push(results.rows.item(i).key);\n }\n\n resolve(keys);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// https://www.w3.org/TR/webdatabase/#databases\n// > There is no way to enumerate or delete the databases available for an origin from this API.\nfunction getAllStoreNames(db) {\n return new Promise$1(function (resolve, reject) {\n db.transaction(function (t) {\n t.executeSql('SELECT name FROM sqlite_master ' + \"WHERE type='table' AND name <> '__WebKitDatabaseInfoTable__'\", [], function (t, results) {\n var storeNames = [];\n\n for (var i = 0; i < results.rows.length; i++) {\n storeNames.push(results.rows.item(i).name);\n }\n\n resolve({\n db: db,\n storeNames: storeNames\n });\n }, function (t, error) {\n reject(error);\n });\n }, function (sqlError) {\n reject(sqlError);\n });\n });\n}\n\nfunction dropInstance$1(options, callback) {\n callback = getCallback.apply(this, arguments);\n\n var currentConfig = this.config();\n options = typeof options !== 'function' && options || {};\n if (!options.name) {\n options.name = options.name || currentConfig.name;\n options.storeName = options.storeName || currentConfig.storeName;\n }\n\n var self = this;\n var promise;\n if (!options.name) {\n promise = Promise$1.reject('Invalid arguments');\n } else {\n promise = new Promise$1(function (resolve) {\n var db;\n if (options.name === currentConfig.name) {\n // use the db reference of the current instance\n db = self._dbInfo.db;\n } else {\n db = openDatabase(options.name, '', '', 0);\n }\n\n if (!options.storeName) {\n // drop all database tables\n resolve(getAllStoreNames(db));\n } else {\n resolve({\n db: db,\n storeNames: [options.storeName]\n });\n }\n }).then(function (operationInfo) {\n return new Promise$1(function (resolve, reject) {\n operationInfo.db.transaction(function (t) {\n function dropTable(storeName) {\n return new Promise$1(function (resolve, reject) {\n t.executeSql('DROP TABLE IF EXISTS ' + storeName, [], function () {\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n }\n\n var operations = [];\n for (var i = 0, len = operationInfo.storeNames.length; i < len; i++) {\n operations.push(dropTable(operationInfo.storeNames[i]));\n }\n\n Promise$1.all(operations).then(function () {\n resolve();\n })[\"catch\"](function (e) {\n reject(e);\n });\n }, function (sqlError) {\n reject(sqlError);\n });\n });\n });\n }\n\n executeCallback(promise, callback);\n return promise;\n}\n\nvar webSQLStorage = {\n _driver: 'webSQLStorage',\n _initStorage: _initStorage$1,\n _support: isWebSQLValid(),\n iterate: iterate$1,\n getItem: getItem$1,\n setItem: setItem$1,\n removeItem: removeItem$1,\n clear: clear$1,\n length: length$1,\n key: key$1,\n keys: keys$1,\n dropInstance: dropInstance$1\n};\n\nfunction isLocalStorageValid() {\n try {\n return typeof localStorage !== 'undefined' && 'setItem' in localStorage &&\n // in IE8 typeof localStorage.setItem === 'object'\n !!localStorage.setItem;\n } catch (e) {\n return false;\n }\n}\n\nfunction _getKeyPrefix(options, defaultConfig) {\n var keyPrefix = options.name + '/';\n\n if (options.storeName !== defaultConfig.storeName) {\n keyPrefix += options.storeName + '/';\n }\n return keyPrefix;\n}\n\n// Check if localStorage throws when saving an item\nfunction checkIfLocalStorageThrows() {\n var localStorageTestKey = '_localforage_support_test';\n\n try {\n localStorage.setItem(localStorageTestKey, true);\n localStorage.removeItem(localStorageTestKey);\n\n return false;\n } catch (e) {\n return true;\n }\n}\n\n// Check if localStorage is usable and allows to save an item\n// This method checks if localStorage is usable in Safari Private Browsing\n// mode, or in any other case where the available quota for localStorage\n// is 0 and there wasn't any saved items yet.\nfunction _isLocalStorageUsable() {\n return !checkIfLocalStorageThrows() || localStorage.length > 0;\n}\n\n// Config the localStorage backend, using options set in the config.\nfunction _initStorage$2(options) {\n var self = this;\n var dbInfo = {};\n if (options) {\n for (var i in options) {\n dbInfo[i] = options[i];\n }\n }\n\n dbInfo.keyPrefix = _getKeyPrefix(options, self._defaultConfig);\n\n if (!_isLocalStorageUsable()) {\n return Promise$1.reject();\n }\n\n self._dbInfo = dbInfo;\n dbInfo.serializer = localforageSerializer;\n\n return Promise$1.resolve();\n}\n\n// Remove all keys from the datastore, effectively destroying all data in\n// the app's key/value store!\nfunction clear$2(callback) {\n var self = this;\n var promise = self.ready().then(function () {\n var keyPrefix = self._dbInfo.keyPrefix;\n\n for (var i = localStorage.length - 1; i >= 0; i--) {\n var key = localStorage.key(i);\n\n if (key.indexOf(keyPrefix) === 0) {\n localStorage.removeItem(key);\n }\n }\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Retrieve an item from the store. Unlike the original async_storage\n// library in Gaia, we don't modify return values at all. If a key's value\n// is `undefined`, we pass that value to the callback function.\nfunction getItem$2(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var result = localStorage.getItem(dbInfo.keyPrefix + key);\n\n // If a result was found, parse it from the serialized\n // string into a JS object. If result isn't truthy, the key\n // is likely undefined and we'll pass it straight to the\n // callback.\n if (result) {\n result = dbInfo.serializer.deserialize(result);\n }\n\n return result;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Iterate over all items in the store.\nfunction iterate$2(iterator, callback) {\n var self = this;\n\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var keyPrefix = dbInfo.keyPrefix;\n var keyPrefixLength = keyPrefix.length;\n var length = localStorage.length;\n\n // We use a dedicated iterator instead of the `i` variable below\n // so other keys we fetch in localStorage aren't counted in\n // the `iterationNumber` argument passed to the `iterate()`\n // callback.\n //\n // See: github.com/mozilla/localForage/pull/435#discussion_r38061530\n var iterationNumber = 1;\n\n for (var i = 0; i < length; i++) {\n var key = localStorage.key(i);\n if (key.indexOf(keyPrefix) !== 0) {\n continue;\n }\n var value = localStorage.getItem(key);\n\n // If a result was found, parse it from the serialized\n // string into a JS object. If result isn't truthy, the\n // key is likely undefined and we'll pass it straight\n // to the iterator.\n if (value) {\n value = dbInfo.serializer.deserialize(value);\n }\n\n value = iterator(value, key.substring(keyPrefixLength), iterationNumber++);\n\n if (value !== void 0) {\n return value;\n }\n }\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Same as localStorage's key() method, except takes a callback.\nfunction key$2(n, callback) {\n var self = this;\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var result;\n try {\n result = localStorage.key(n);\n } catch (error) {\n result = null;\n }\n\n // Remove the prefix from the key, if a key is found.\n if (result) {\n result = result.substring(dbInfo.keyPrefix.length);\n }\n\n return result;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction keys$2(callback) {\n var self = this;\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var length = localStorage.length;\n var keys = [];\n\n for (var i = 0; i < length; i++) {\n var itemKey = localStorage.key(i);\n if (itemKey.indexOf(dbInfo.keyPrefix) === 0) {\n keys.push(itemKey.substring(dbInfo.keyPrefix.length));\n }\n }\n\n return keys;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Supply the number of keys in the datastore to the callback function.\nfunction length$2(callback) {\n var self = this;\n var promise = self.keys().then(function (keys) {\n return keys.length;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Remove an item from the store, nice and simple.\nfunction removeItem$2(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n localStorage.removeItem(dbInfo.keyPrefix + key);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Set a key's value and run an optional callback once the value is set.\n// Unlike Gaia's implementation, the callback function is passed the value,\n// in case you want to operate on that value only after you're sure it\n// saved, or something like that.\nfunction setItem$2(key, value, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = self.ready().then(function () {\n // Convert undefined values to null.\n // https://github.com/mozilla/localForage/pull/42\n if (value === undefined) {\n value = null;\n }\n\n // Save the original value to pass to the callback.\n var originalValue = value;\n\n return new Promise$1(function (resolve, reject) {\n var dbInfo = self._dbInfo;\n dbInfo.serializer.serialize(value, function (value, error) {\n if (error) {\n reject(error);\n } else {\n try {\n localStorage.setItem(dbInfo.keyPrefix + key, value);\n resolve(originalValue);\n } catch (e) {\n // localStorage capacity exceeded.\n // TODO: Make this a specific error/event.\n if (e.name === 'QuotaExceededError' || e.name === 'NS_ERROR_DOM_QUOTA_REACHED') {\n reject(e);\n }\n reject(e);\n }\n }\n });\n });\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction dropInstance$2(options, callback) {\n callback = getCallback.apply(this, arguments);\n\n options = typeof options !== 'function' && options || {};\n if (!options.name) {\n var currentConfig = this.config();\n options.name = options.name || currentConfig.name;\n options.storeName = options.storeName || currentConfig.storeName;\n }\n\n var self = this;\n var promise;\n if (!options.name) {\n promise = Promise$1.reject('Invalid arguments');\n } else {\n promise = new Promise$1(function (resolve) {\n if (!options.storeName) {\n resolve(options.name + '/');\n } else {\n resolve(_getKeyPrefix(options, self._defaultConfig));\n }\n }).then(function (keyPrefix) {\n for (var i = localStorage.length - 1; i >= 0; i--) {\n var key = localStorage.key(i);\n\n if (key.indexOf(keyPrefix) === 0) {\n localStorage.removeItem(key);\n }\n }\n });\n }\n\n executeCallback(promise, callback);\n return promise;\n}\n\nvar localStorageWrapper = {\n _driver: 'localStorageWrapper',\n _initStorage: _initStorage$2,\n _support: isLocalStorageValid(),\n iterate: iterate$2,\n getItem: getItem$2,\n setItem: setItem$2,\n removeItem: removeItem$2,\n clear: clear$2,\n length: length$2,\n key: key$2,\n keys: keys$2,\n dropInstance: dropInstance$2\n};\n\nvar sameValue = function sameValue(x, y) {\n return x === y || typeof x === 'number' && typeof y === 'number' && isNaN(x) && isNaN(y);\n};\n\nvar includes = function includes(array, searchElement) {\n var len = array.length;\n var i = 0;\n while (i < len) {\n if (sameValue(array[i], searchElement)) {\n return true;\n }\n i++;\n }\n\n return false;\n};\n\nvar isArray = Array.isArray || function (arg) {\n return Object.prototype.toString.call(arg) === '[object Array]';\n};\n\n// Drivers are stored here when `defineDriver()` is called.\n// They are shared across all instances of localForage.\nvar DefinedDrivers = {};\n\nvar DriverSupport = {};\n\nvar DefaultDrivers = {\n INDEXEDDB: asyncStorage,\n WEBSQL: webSQLStorage,\n LOCALSTORAGE: localStorageWrapper\n};\n\nvar DefaultDriverOrder = [DefaultDrivers.INDEXEDDB._driver, DefaultDrivers.WEBSQL._driver, DefaultDrivers.LOCALSTORAGE._driver];\n\nvar OptionalDriverMethods = ['dropInstance'];\n\nvar LibraryMethods = ['clear', 'getItem', 'iterate', 'key', 'keys', 'length', 'removeItem', 'setItem'].concat(OptionalDriverMethods);\n\nvar DefaultConfig = {\n description: '',\n driver: DefaultDriverOrder.slice(),\n name: 'localforage',\n // Default DB size is _JUST UNDER_ 5MB, as it's the highest size\n // we can use without a prompt.\n size: 4980736,\n storeName: 'keyvaluepairs',\n version: 1.0\n};\n\nfunction callWhenReady(localForageInstance, libraryMethod) {\n localForageInstance[libraryMethod] = function () {\n var _args = arguments;\n return localForageInstance.ready().then(function () {\n return localForageInstance[libraryMethod].apply(localForageInstance, _args);\n });\n };\n}\n\nfunction extend() {\n for (var i = 1; i < arguments.length; i++) {\n var arg = arguments[i];\n\n if (arg) {\n for (var _key in arg) {\n if (arg.hasOwnProperty(_key)) {\n if (isArray(arg[_key])) {\n arguments[0][_key] = arg[_key].slice();\n } else {\n arguments[0][_key] = arg[_key];\n }\n }\n }\n }\n }\n\n return arguments[0];\n}\n\nvar LocalForage = function () {\n function LocalForage(options) {\n _classCallCheck(this, LocalForage);\n\n for (var driverTypeKey in DefaultDrivers) {\n if (DefaultDrivers.hasOwnProperty(driverTypeKey)) {\n var driver = DefaultDrivers[driverTypeKey];\n var driverName = driver._driver;\n this[driverTypeKey] = driverName;\n\n if (!DefinedDrivers[driverName]) {\n // we don't need to wait for the promise,\n // since the default drivers can be defined\n // in a blocking manner\n this.defineDriver(driver);\n }\n }\n }\n\n this._defaultConfig = extend({}, DefaultConfig);\n this._config = extend({}, this._defaultConfig, options);\n this._driverSet = null;\n this._initDriver = null;\n this._ready = false;\n this._dbInfo = null;\n\n this._wrapLibraryMethodsWithReady();\n this.setDriver(this._config.driver)[\"catch\"](function () {});\n }\n\n // Set any config values for localForage; can be called anytime before\n // the first API call (e.g. `getItem`, `setItem`).\n // We loop through options so we don't overwrite existing config\n // values.\n\n\n LocalForage.prototype.config = function config(options) {\n // If the options argument is an object, we use it to set values.\n // Otherwise, we return either a specified config value or all\n // config values.\n if ((typeof options === 'undefined' ? 'undefined' : _typeof(options)) === 'object') {\n // If localforage is ready and fully initialized, we can't set\n // any new configuration values. Instead, we return an error.\n if (this._ready) {\n return new Error(\"Can't call config() after localforage \" + 'has been used.');\n }\n\n for (var i in options) {\n if (i === 'storeName') {\n options[i] = options[i].replace(/\\W/g, '_');\n }\n\n if (i === 'version' && typeof options[i] !== 'number') {\n return new Error('Database version must be a number.');\n }\n\n this._config[i] = options[i];\n }\n\n // after all config options are set and\n // the driver option is used, try setting it\n if ('driver' in options && options.driver) {\n return this.setDriver(this._config.driver);\n }\n\n return true;\n } else if (typeof options === 'string') {\n return this._config[options];\n } else {\n return this._config;\n }\n };\n\n // Used to define a custom driver, shared across all instances of\n // localForage.\n\n\n LocalForage.prototype.defineDriver = function defineDriver(driverObject, callback, errorCallback) {\n var promise = new Promise$1(function (resolve, reject) {\n try {\n var driverName = driverObject._driver;\n var complianceError = new Error('Custom driver not compliant; see ' + 'https://mozilla.github.io/localForage/#definedriver');\n\n // A driver name should be defined and not overlap with the\n // library-defined, default drivers.\n if (!driverObject._driver) {\n reject(complianceError);\n return;\n }\n\n var driverMethods = LibraryMethods.concat('_initStorage');\n for (var i = 0, len = driverMethods.length; i < len; i++) {\n var driverMethodName = driverMethods[i];\n\n // when the property is there,\n // it should be a method even when optional\n var isRequired = !includes(OptionalDriverMethods, driverMethodName);\n if ((isRequired || driverObject[driverMethodName]) && typeof driverObject[driverMethodName] !== 'function') {\n reject(complianceError);\n return;\n }\n }\n\n var configureMissingMethods = function configureMissingMethods() {\n var methodNotImplementedFactory = function methodNotImplementedFactory(methodName) {\n return function () {\n var error = new Error('Method ' + methodName + ' is not implemented by the current driver');\n var promise = Promise$1.reject(error);\n executeCallback(promise, arguments[arguments.length - 1]);\n return promise;\n };\n };\n\n for (var _i = 0, _len = OptionalDriverMethods.length; _i < _len; _i++) {\n var optionalDriverMethod = OptionalDriverMethods[_i];\n if (!driverObject[optionalDriverMethod]) {\n driverObject[optionalDriverMethod] = methodNotImplementedFactory(optionalDriverMethod);\n }\n }\n };\n\n configureMissingMethods();\n\n var setDriverSupport = function setDriverSupport(support) {\n if (DefinedDrivers[driverName]) {\n console.info('Redefining LocalForage driver: ' + driverName);\n }\n DefinedDrivers[driverName] = driverObject;\n DriverSupport[driverName] = support;\n // don't use a then, so that we can define\n // drivers that have simple _support methods\n // in a blocking manner\n resolve();\n };\n\n if ('_support' in driverObject) {\n if (driverObject._support && typeof driverObject._support === 'function') {\n driverObject._support().then(setDriverSupport, reject);\n } else {\n setDriverSupport(!!driverObject._support);\n }\n } else {\n setDriverSupport(true);\n }\n } catch (e) {\n reject(e);\n }\n });\n\n executeTwoCallbacks(promise, callback, errorCallback);\n return promise;\n };\n\n LocalForage.prototype.driver = function driver() {\n return this._driver || null;\n };\n\n LocalForage.prototype.getDriver = function getDriver(driverName, callback, errorCallback) {\n var getDriverPromise = DefinedDrivers[driverName] ? Promise$1.resolve(DefinedDrivers[driverName]) : Promise$1.reject(new Error('Driver not found.'));\n\n executeTwoCallbacks(getDriverPromise, callback, errorCallback);\n return getDriverPromise;\n };\n\n LocalForage.prototype.getSerializer = function getSerializer(callback) {\n var serializerPromise = Promise$1.resolve(localforageSerializer);\n executeTwoCallbacks(serializerPromise, callback);\n return serializerPromise;\n };\n\n LocalForage.prototype.ready = function ready(callback) {\n var self = this;\n\n var promise = self._driverSet.then(function () {\n if (self._ready === null) {\n self._ready = self._initDriver();\n }\n\n return self._ready;\n });\n\n executeTwoCallbacks(promise, callback, callback);\n return promise;\n };\n\n LocalForage.prototype.setDriver = function setDriver(drivers, callback, errorCallback) {\n var self = this;\n\n if (!isArray(drivers)) {\n drivers = [drivers];\n }\n\n var supportedDrivers = this._getSupportedDrivers(drivers);\n\n function setDriverToConfig() {\n self._config.driver = self.driver();\n }\n\n function extendSelfWithDriver(driver) {\n self._extend(driver);\n setDriverToConfig();\n\n self._ready = self._initStorage(self._config);\n return self._ready;\n }\n\n function initDriver(supportedDrivers) {\n return function () {\n var currentDriverIndex = 0;\n\n function driverPromiseLoop() {\n while (currentDriverIndex < supportedDrivers.length) {\n var driverName = supportedDrivers[currentDriverIndex];\n currentDriverIndex++;\n\n self._dbInfo = null;\n self._ready = null;\n\n return self.getDriver(driverName).then(extendSelfWithDriver)[\"catch\"](driverPromiseLoop);\n }\n\n setDriverToConfig();\n var error = new Error('No available storage method found.');\n self._driverSet = Promise$1.reject(error);\n return self._driverSet;\n }\n\n return driverPromiseLoop();\n };\n }\n\n // There might be a driver initialization in progress\n // so wait for it to finish in order to avoid a possible\n // race condition to set _dbInfo\n var oldDriverSetDone = this._driverSet !== null ? this._driverSet[\"catch\"](function () {\n return Promise$1.resolve();\n }) : Promise$1.resolve();\n\n this._driverSet = oldDriverSetDone.then(function () {\n var driverName = supportedDrivers[0];\n self._dbInfo = null;\n self._ready = null;\n\n return self.getDriver(driverName).then(function (driver) {\n self._driver = driver._driver;\n setDriverToConfig();\n self._wrapLibraryMethodsWithReady();\n self._initDriver = initDriver(supportedDrivers);\n });\n })[\"catch\"](function () {\n setDriverToConfig();\n var error = new Error('No available storage method found.');\n self._driverSet = Promise$1.reject(error);\n return self._driverSet;\n });\n\n executeTwoCallbacks(this._driverSet, callback, errorCallback);\n return this._driverSet;\n };\n\n LocalForage.prototype.supports = function supports(driverName) {\n return !!DriverSupport[driverName];\n };\n\n LocalForage.prototype._extend = function _extend(libraryMethodsAndProperties) {\n extend(this, libraryMethodsAndProperties);\n };\n\n LocalForage.prototype._getSupportedDrivers = function _getSupportedDrivers(drivers) {\n var supportedDrivers = [];\n for (var i = 0, len = drivers.length; i < len; i++) {\n var driverName = drivers[i];\n if (this.supports(driverName)) {\n supportedDrivers.push(driverName);\n }\n }\n return supportedDrivers;\n };\n\n LocalForage.prototype._wrapLibraryMethodsWithReady = function _wrapLibraryMethodsWithReady() {\n // Add a stub for each driver API method that delays the call to the\n // corresponding driver method until localForage is ready. These stubs\n // will be replaced by the driver methods as soon as the driver is\n // loaded, so there is no performance impact.\n for (var i = 0, len = LibraryMethods.length; i < len; i++) {\n callWhenReady(this, LibraryMethods[i]);\n }\n };\n\n LocalForage.prototype.createInstance = function createInstance(options) {\n return new LocalForage(options);\n };\n\n return LocalForage;\n}();\n\n// The actual localForage object that we expose as a module or via a\n// global. It's extended by pulling in one of our other libraries.\n\n\nvar localforage_js = new LocalForage();\n\nmodule.exports = localforage_js;\n\n},{\"3\":3}]},{},[4])(4)\n});\n", "const {\n entries,\n setPrototypeOf,\n isFrozen,\n getPrototypeOf,\n getOwnPropertyDescriptor,\n} = Object;\n\nlet { freeze, seal, create } = Object; // eslint-disable-line import/no-mutable-exports\nlet { apply, construct } = typeof Reflect !== 'undefined' && Reflect;\n\nif (!freeze) {\n freeze = function (x: T): T {\n return x;\n };\n}\n\nif (!seal) {\n seal = function (x: T): T {\n return x;\n };\n}\n\nif (!apply) {\n apply = function (\n func: (thisArg: any, ...args: any[]) => T,\n thisArg: any,\n ...args: any[]\n ): T {\n return func.apply(thisArg, args);\n };\n}\n\nif (!construct) {\n construct = function (Func: new (...args: any[]) => T, ...args: any[]): T {\n return new Func(...args);\n };\n}\n\nconst arrayForEach = unapply(Array.prototype.forEach);\nconst arrayIndexOf = unapply(Array.prototype.indexOf);\nconst arrayLastIndexOf = unapply(Array.prototype.lastIndexOf);\nconst arrayPop = unapply(Array.prototype.pop);\nconst arrayPush = unapply(Array.prototype.push);\nconst arraySlice = unapply(Array.prototype.slice);\nconst arraySplice = unapply(Array.prototype.splice);\nconst arrayIsArray = Array.isArray;\n\nconst stringToLowerCase = unapply(String.prototype.toLowerCase);\nconst stringToString = unapply(String.prototype.toString);\nconst stringMatch = unapply(String.prototype.match);\nconst stringReplace = unapply(String.prototype.replace);\nconst stringIndexOf = unapply(String.prototype.indexOf);\nconst stringTrim = unapply(String.prototype.trim);\n\nconst numberToString = unapply(Number.prototype.toString);\nconst booleanToString = unapply(Boolean.prototype.toString);\nconst bigintToString =\n typeof BigInt === 'undefined' ? null : unapply(BigInt.prototype.toString);\nconst symbolToString =\n typeof Symbol === 'undefined' ? null : unapply(Symbol.prototype.toString);\n\nconst objectHasOwnProperty = unapply(Object.prototype.hasOwnProperty);\nconst objectToString = unapply(Object.prototype.toString);\n\nconst regExpTest = unapply(RegExp.prototype.test);\n\nconst typeErrorCreate = unconstruct(TypeError);\n\n/**\n * Creates a new function that calls the given function with a specified thisArg and arguments.\n *\n * @param func - The function to be wrapped and called.\n * @returns A new function that calls the given function with a specified thisArg and arguments.\n */\nfunction unapply(\n func: (thisArg: any, ...args: any[]) => T\n): (thisArg: any, ...args: any[]) => T {\n return (thisArg: any, ...args: any[]): T => {\n if (thisArg instanceof RegExp) {\n thisArg.lastIndex = 0;\n }\n\n return apply(func, thisArg, args);\n };\n}\n\n/**\n * Creates a new function that constructs an instance of the given constructor function with the provided arguments.\n *\n * @param func - The constructor function to be wrapped and called.\n * @returns A new function that constructs an instance of the given constructor function with the provided arguments.\n */\nfunction unconstruct(\n Func: new (...args: any[]) => T\n): (...args: any[]) => T {\n return (...args: any[]): T => construct(Func, args);\n}\n\n/**\n * Add properties to a lookup table\n *\n * @param set - The set to which elements will be added.\n * @param array - The array containing elements to be added to the set.\n * @param transformCaseFunc - An optional function to transform the case of each element before adding to the set.\n * @returns The modified set with added elements.\n */\nfunction addToSet(\n set: Record,\n array: readonly unknown[],\n transformCaseFunc: ReturnType> = stringToLowerCase\n): Record {\n if (setPrototypeOf) {\n // Make 'in' and truthy checks like Boolean(set.constructor)\n // independent of any properties defined on Object.prototype.\n // Prevent prototype setters from intercepting set as a this value.\n setPrototypeOf(set, null);\n }\n\n if (!arrayIsArray(array)) {\n return set;\n }\n\n let l = array.length;\n while (l--) {\n let element = array[l];\n\n if (typeof element === 'string') {\n const lcElement = transformCaseFunc(element);\n\n if (lcElement !== element) {\n // Config presets (e.g. tags.js, attrs.js) are immutable.\n if (!isFrozen(array)) {\n (array as unknown[])[l] = lcElement;\n }\n\n element = lcElement;\n }\n }\n\n set[element as string] = true;\n }\n\n return set;\n}\n\n/**\n * Clean up an array to harden against CSPP\n *\n * @param array - The array to be cleaned.\n * @returns The cleaned version of the array\n */\nfunction cleanArray(array: T[]): Array {\n for (let index = 0; index < array.length; index++) {\n const isPropertyExist = objectHasOwnProperty(array, index);\n\n if (!isPropertyExist) {\n array[index] = null;\n }\n }\n\n return array;\n}\n\n/**\n * Shallow clone an object\n *\n * @param object - The object to be cloned.\n * @returns A new object that copies the original.\n */\nfunction clone>(object: T): T {\n const newObject = create(null);\n\n for (const [property, value] of entries(object)) {\n const isPropertyExist = objectHasOwnProperty(object, property);\n\n if (isPropertyExist) {\n if (arrayIsArray(value)) {\n newObject[property] = cleanArray(value);\n } else if (\n value &&\n typeof value === 'object' &&\n value.constructor === Object\n ) {\n newObject[property] = clone(value);\n } else {\n newObject[property] = value;\n }\n }\n }\n\n return newObject;\n}\n\n/**\n * Convert non-node values into strings without depending on direct property access.\n *\n * @param value - The value to stringify.\n * @returns A string representation of the provided value.\n */\nfunction stringifyValue(value: unknown): string {\n switch (typeof value) {\n case 'string': {\n return value;\n }\n\n case 'number': {\n return numberToString(value);\n }\n\n case 'boolean': {\n return booleanToString(value);\n }\n\n case 'bigint': {\n return bigintToString ? bigintToString(value) : '0';\n }\n\n case 'symbol': {\n return symbolToString ? symbolToString(value) : 'Symbol()';\n }\n\n case 'undefined': {\n return objectToString(value);\n }\n\n case 'function':\n case 'object': {\n if (value === null) {\n return objectToString(value);\n }\n\n const valueAsRecord = value as Record;\n const valueToString = lookupGetter(valueAsRecord, 'toString');\n\n if (typeof valueToString === 'function') {\n const stringified = valueToString(valueAsRecord);\n\n return typeof stringified === 'string'\n ? stringified\n : objectToString(stringified);\n }\n\n return objectToString(value);\n }\n\n default: {\n return objectToString(value);\n }\n }\n}\n\n/**\n * This method automatically checks if the prop is function or getter and behaves accordingly.\n *\n * @param object - The object to look up the getter function in its prototype chain.\n * @param prop - The property name for which to find the getter function.\n * @returns The getter function found in the prototype chain or a fallback function.\n */\nfunction lookupGetter>(\n object: T,\n prop: string\n): ReturnType> | (() => null) {\n while (object !== null) {\n const desc = getOwnPropertyDescriptor(object, prop);\n\n if (desc) {\n if (desc.get) {\n return unapply(desc.get);\n }\n\n if (typeof desc.value === 'function') {\n return unapply(desc.value);\n }\n }\n\n object = getPrototypeOf(object);\n }\n\n function fallbackValue(): null {\n return null;\n }\n\n return fallbackValue;\n}\n\nfunction isRegex(value: unknown): value is RegExp {\n try {\n regExpTest(value as RegExp, '');\n return true;\n } catch {\n return false;\n }\n}\n\nexport {\n // Array\n arrayForEach,\n arrayIndexOf,\n arrayIsArray,\n arrayLastIndexOf,\n arrayPop,\n arrayPush,\n arraySlice,\n arraySplice,\n // Object\n entries,\n freeze,\n getPrototypeOf,\n getOwnPropertyDescriptor,\n isFrozen,\n setPrototypeOf,\n seal,\n clone,\n create,\n objectHasOwnProperty,\n objectToString,\n // RegExp\n regExpTest,\n isRegex,\n // String\n stringIndexOf,\n stringMatch,\n stringReplace,\n stringToLowerCase,\n stringToString,\n stringTrim,\n // Other conversion\n stringifyValue,\n // Errors\n typeErrorCreate,\n // Other\n lookupGetter,\n addToSet,\n // Reflect\n unapply,\n unconstruct,\n};\n", "import { freeze } from './utils.js';\n\nexport const html = freeze([\n 'a',\n 'abbr',\n 'acronym',\n 'address',\n 'area',\n 'article',\n 'aside',\n 'audio',\n 'b',\n 'bdi',\n 'bdo',\n 'big',\n 'blink',\n 'blockquote',\n 'body',\n 'br',\n 'button',\n 'canvas',\n 'caption',\n 'center',\n 'cite',\n 'code',\n 'col',\n 'colgroup',\n 'content',\n 'data',\n 'datalist',\n 'dd',\n 'decorator',\n 'del',\n 'details',\n 'dfn',\n 'dialog',\n 'dir',\n 'div',\n 'dl',\n 'dt',\n 'element',\n 'em',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'font',\n 'footer',\n 'form',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'head',\n 'header',\n 'hgroup',\n 'hr',\n 'html',\n 'i',\n 'img',\n 'input',\n 'ins',\n 'kbd',\n 'label',\n 'legend',\n 'li',\n 'main',\n 'map',\n 'mark',\n 'marquee',\n 'menu',\n 'menuitem',\n 'meter',\n 'nav',\n 'nobr',\n 'ol',\n 'optgroup',\n 'option',\n 'output',\n 'p',\n 'picture',\n 'pre',\n 'progress',\n 'q',\n 'rp',\n 'rt',\n 'ruby',\n 's',\n 'samp',\n 'search',\n 'section',\n 'select',\n 'shadow',\n 'slot',\n 'small',\n 'source',\n 'spacer',\n 'span',\n 'strike',\n 'strong',\n 'style',\n 'sub',\n 'summary',\n 'sup',\n 'table',\n 'tbody',\n 'td',\n 'template',\n 'textarea',\n 'tfoot',\n 'th',\n 'thead',\n 'time',\n 'tr',\n 'track',\n 'tt',\n 'u',\n 'ul',\n 'var',\n 'video',\n 'wbr',\n] as const);\n\nexport const svg = freeze([\n 'svg',\n 'a',\n 'altglyph',\n 'altglyphdef',\n 'altglyphitem',\n 'animatecolor',\n 'animatemotion',\n 'animatetransform',\n 'circle',\n 'clippath',\n 'defs',\n 'desc',\n 'ellipse',\n 'enterkeyhint',\n 'exportparts',\n 'filter',\n 'font',\n 'g',\n 'glyph',\n 'glyphref',\n 'hkern',\n 'image',\n 'inputmode',\n 'line',\n 'lineargradient',\n 'marker',\n 'mask',\n 'metadata',\n 'mpath',\n 'part',\n 'path',\n 'pattern',\n 'polygon',\n 'polyline',\n 'radialgradient',\n 'rect',\n 'stop',\n 'style',\n 'switch',\n 'symbol',\n 'text',\n 'textpath',\n 'title',\n 'tref',\n 'tspan',\n 'view',\n 'vkern',\n] as const);\n\nexport const svgFilters = freeze([\n 'feBlend',\n 'feColorMatrix',\n 'feComponentTransfer',\n 'feComposite',\n 'feConvolveMatrix',\n 'feDiffuseLighting',\n 'feDisplacementMap',\n 'feDistantLight',\n 'feDropShadow',\n 'feFlood',\n 'feFuncA',\n 'feFuncB',\n 'feFuncG',\n 'feFuncR',\n 'feGaussianBlur',\n 'feImage',\n 'feMerge',\n 'feMergeNode',\n 'feMorphology',\n 'feOffset',\n 'fePointLight',\n 'feSpecularLighting',\n 'feSpotLight',\n 'feTile',\n 'feTurbulence',\n] as const);\n\n// List of SVG elements that are disallowed by default.\n// We still need to know them so that we can do namespace\n// checks properly in case one wants to add them to\n// allow-list.\nexport const svgDisallowed = freeze([\n 'animate',\n 'color-profile',\n 'cursor',\n 'discard',\n 'font-face',\n 'font-face-format',\n 'font-face-name',\n 'font-face-src',\n 'font-face-uri',\n 'foreignobject',\n 'hatch',\n 'hatchpath',\n 'mesh',\n 'meshgradient',\n 'meshpatch',\n 'meshrow',\n 'missing-glyph',\n 'script',\n 'set',\n 'solidcolor',\n 'unknown',\n 'use',\n] as const);\n\nexport const mathMl = freeze([\n 'math',\n 'menclose',\n 'merror',\n 'mfenced',\n 'mfrac',\n 'mglyph',\n 'mi',\n 'mlabeledtr',\n 'mmultiscripts',\n 'mn',\n 'mo',\n 'mover',\n 'mpadded',\n 'mphantom',\n 'mroot',\n 'mrow',\n 'ms',\n 'mspace',\n 'msqrt',\n 'mstyle',\n 'msub',\n 'msup',\n 'msubsup',\n 'mtable',\n 'mtd',\n 'mtext',\n 'mtr',\n 'munder',\n 'munderover',\n 'mprescripts',\n] as const);\n\n// Similarly to SVG, we want to know all MathML elements,\n// even those that we disallow by default.\nexport const mathMlDisallowed = freeze([\n 'maction',\n 'maligngroup',\n 'malignmark',\n 'mlongdiv',\n 'mscarries',\n 'mscarry',\n 'msgroup',\n 'mstack',\n 'msline',\n 'msrow',\n 'semantics',\n 'annotation',\n 'annotation-xml',\n 'mprescripts',\n 'none',\n] as const);\n\nexport const text = freeze(['#text'] as const);\n", "import { freeze } from './utils.js';\n\nexport const html = freeze([\n 'accept',\n 'action',\n 'align',\n 'alt',\n 'autocapitalize',\n 'autocomplete',\n 'autopictureinpicture',\n 'autoplay',\n 'background',\n 'bgcolor',\n 'border',\n 'capture',\n 'cellpadding',\n 'cellspacing',\n 'checked',\n 'cite',\n 'class',\n 'clear',\n 'color',\n 'cols',\n 'colspan',\n 'command',\n 'commandfor',\n 'controls',\n 'controlslist',\n 'coords',\n 'crossorigin',\n 'datetime',\n 'decoding',\n 'default',\n 'dir',\n 'disabled',\n 'disablepictureinpicture',\n 'disableremoteplayback',\n 'download',\n 'draggable',\n 'enctype',\n 'enterkeyhint',\n 'exportparts',\n 'face',\n 'for',\n 'headers',\n 'height',\n 'hidden',\n 'high',\n 'href',\n 'hreflang',\n 'id',\n 'inert',\n 'inputmode',\n 'integrity',\n 'ismap',\n 'kind',\n 'label',\n 'lang',\n 'list',\n 'loading',\n 'loop',\n 'low',\n 'max',\n 'maxlength',\n 'media',\n 'method',\n 'min',\n 'minlength',\n 'multiple',\n 'muted',\n 'name',\n 'nonce',\n 'noshade',\n 'novalidate',\n 'nowrap',\n 'open',\n 'optimum',\n 'part',\n 'pattern',\n 'placeholder',\n 'playsinline',\n 'popover',\n 'popovertarget',\n 'popovertargetaction',\n 'poster',\n 'preload',\n 'pubdate',\n 'radiogroup',\n 'readonly',\n 'rel',\n 'required',\n 'rev',\n 'reversed',\n 'role',\n 'rows',\n 'rowspan',\n 'spellcheck',\n 'scope',\n 'selected',\n 'shape',\n 'size',\n 'sizes',\n 'slot',\n 'span',\n 'srclang',\n 'start',\n 'src',\n 'srcset',\n 'step',\n 'style',\n 'summary',\n 'tabindex',\n 'title',\n 'translate',\n 'type',\n 'usemap',\n 'valign',\n 'value',\n 'width',\n 'wrap',\n 'xmlns',\n] as const);\n\nexport const svg = freeze([\n 'accent-height',\n 'accumulate',\n 'additive',\n 'alignment-baseline',\n 'amplitude',\n 'ascent',\n 'attributename',\n 'attributetype',\n 'azimuth',\n 'basefrequency',\n 'baseline-shift',\n 'begin',\n 'bias',\n 'by',\n 'class',\n 'clip',\n 'clippathunits',\n 'clip-path',\n 'clip-rule',\n 'color',\n 'color-interpolation',\n 'color-interpolation-filters',\n 'color-profile',\n 'color-rendering',\n 'cx',\n 'cy',\n 'd',\n 'dx',\n 'dy',\n 'diffuseconstant',\n 'direction',\n 'display',\n 'divisor',\n 'dominant-baseline',\n 'dur',\n 'edgemode',\n 'elevation',\n 'end',\n 'exponent',\n 'fill',\n 'fill-opacity',\n 'fill-rule',\n 'filter',\n 'filterunits',\n 'flood-color',\n 'flood-opacity',\n 'font-family',\n 'font-size',\n 'font-size-adjust',\n 'font-stretch',\n 'font-style',\n 'font-variant',\n 'font-weight',\n 'fx',\n 'fy',\n 'g1',\n 'g2',\n 'glyph-name',\n 'glyphref',\n 'gradientunits',\n 'gradienttransform',\n 'height',\n 'href',\n 'id',\n 'image-rendering',\n 'in',\n 'in2',\n 'intercept',\n 'k',\n 'k1',\n 'k2',\n 'k3',\n 'k4',\n 'kerning',\n 'keypoints',\n 'keysplines',\n 'keytimes',\n 'lang',\n 'lengthadjust',\n 'letter-spacing',\n 'kernelmatrix',\n 'kernelunitlength',\n 'lighting-color',\n 'local',\n 'marker-end',\n 'marker-mid',\n 'marker-start',\n 'markerheight',\n 'markerunits',\n 'markerwidth',\n 'maskcontentunits',\n 'maskunits',\n 'max',\n 'mask',\n 'mask-type',\n 'media',\n 'method',\n 'mode',\n 'min',\n 'name',\n 'numoctaves',\n 'offset',\n 'operator',\n 'opacity',\n 'order',\n 'orient',\n 'orientation',\n 'origin',\n 'overflow',\n 'paint-order',\n 'path',\n 'pathlength',\n 'patterncontentunits',\n 'patterntransform',\n 'patternunits',\n 'points',\n 'preservealpha',\n 'preserveaspectratio',\n 'primitiveunits',\n 'r',\n 'rx',\n 'ry',\n 'radius',\n 'refx',\n 'refy',\n 'repeatcount',\n 'repeatdur',\n 'restart',\n 'result',\n 'rotate',\n 'scale',\n 'seed',\n 'shape-rendering',\n 'slope',\n 'specularconstant',\n 'specularexponent',\n 'spreadmethod',\n 'startoffset',\n 'stddeviation',\n 'stitchtiles',\n 'stop-color',\n 'stop-opacity',\n 'stroke-dasharray',\n 'stroke-dashoffset',\n 'stroke-linecap',\n 'stroke-linejoin',\n 'stroke-miterlimit',\n 'stroke-opacity',\n 'stroke',\n 'stroke-width',\n 'style',\n 'surfacescale',\n 'systemlanguage',\n 'tabindex',\n 'tablevalues',\n 'targetx',\n 'targety',\n 'transform',\n 'transform-origin',\n 'text-anchor',\n 'text-decoration',\n 'text-orientation',\n 'text-rendering',\n 'textlength',\n 'type',\n 'u1',\n 'u2',\n 'unicode',\n 'values',\n 'viewbox',\n 'visibility',\n 'version',\n 'vert-adv-y',\n 'vert-origin-x',\n 'vert-origin-y',\n 'width',\n 'word-spacing',\n 'wrap',\n 'writing-mode',\n 'xchannelselector',\n 'ychannelselector',\n 'x',\n 'x1',\n 'x2',\n 'xmlns',\n 'y',\n 'y1',\n 'y2',\n 'z',\n 'zoomandpan',\n] as const);\n\nexport const mathMl = freeze([\n 'accent',\n 'accentunder',\n 'align',\n 'bevelled',\n 'close',\n 'columnalign',\n 'columnlines',\n 'columnspacing',\n 'columnspan',\n 'denomalign',\n 'depth',\n 'dir',\n 'display',\n 'displaystyle',\n 'encoding',\n 'fence',\n 'frame',\n 'height',\n 'href',\n 'id',\n 'largeop',\n 'length',\n 'linethickness',\n 'lquote',\n 'lspace',\n 'mathbackground',\n 'mathcolor',\n 'mathsize',\n 'mathvariant',\n 'maxsize',\n 'minsize',\n 'movablelimits',\n 'notation',\n 'numalign',\n 'open',\n 'rowalign',\n 'rowlines',\n 'rowspacing',\n 'rowspan',\n 'rspace',\n 'rquote',\n 'scriptlevel',\n 'scriptminsize',\n 'scriptsizemultiplier',\n 'selection',\n 'separator',\n 'separators',\n 'stretchy',\n 'subscriptshift',\n 'supscriptshift',\n 'symmetric',\n 'voffset',\n 'width',\n 'xmlns',\n]);\n\nexport const xml = freeze([\n 'xlink:href',\n 'xml:id',\n 'xlink:title',\n 'xml:space',\n 'xmlns:xlink',\n] as const);\n", "import { seal } from './utils.js';\n\nexport const MUSTACHE_EXPR = seal(/{{[\\w\\W]*|^[\\w\\W]*}}/g);\nexport const ERB_EXPR = seal(/<%[\\w\\W]*|^[\\w\\W]*%>/g);\nexport const TMPLIT_EXPR = seal(/\\${[\\w\\W]*/g);\nexport const DATA_ATTR = seal(/^data-[\\-\\w.\\u00B7-\\uFFFF]+$/); // eslint-disable-line no-useless-escape\nexport const ARIA_ATTR = seal(/^aria-[\\-\\w]+$/); // eslint-disable-line no-useless-escape\nexport const IS_ALLOWED_URI = seal(\n /^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i // eslint-disable-line no-useless-escape\n);\nexport const IS_SCRIPT_OR_DATA = seal(/^(?:\\w+script|data):/i);\nexport const ATTR_WHITESPACE = seal(\n /[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g // eslint-disable-line no-control-regex\n);\nexport const DOCTYPE_NAME = seal(/^html$/i);\nexport const CUSTOM_ELEMENT = seal(/^[a-z][.\\w]*(-[.\\w]+)+$/i);\n\n// Markup-significant character probes used by _sanitizeElements.\n// Shared module-level instances are safe despite the sticky /g flags:\n// unapply() resets lastIndex for RegExp receivers before every call.\nexport const ELEMENT_MARKUP_PROBE = seal(/<[/\\w!]/g);\nexport const COMMENT_MARKUP_PROBE = seal(/<[/\\w]/g);\nexport const FALLBACK_TAG_CLOSE = seal(/<\\/no(script|embed|frames)/i);\nexport const SELF_CLOSING_TAG = seal(/\\/>/i);\n", "import type { Config, UseProfilesConfig } from './config';\nimport type { DOMPurify, HooksMap, HookFunction, WindowLike } from './types';\nimport * as TAGS from './tags.js';\nimport * as ATTRS from './attrs.js';\nimport * as EXPRESSIONS from './regexp.js';\nimport {\n addToSet,\n clone,\n entries,\n freeze,\n seal,\n arrayForEach,\n arrayIsArray,\n arrayLastIndexOf,\n arrayPop,\n arrayPush,\n arraySplice,\n stringMatch,\n stringReplace,\n stringToLowerCase,\n stringToString,\n stringIndexOf,\n stringTrim,\n regExpTest,\n isRegex,\n typeErrorCreate,\n lookupGetter,\n create,\n objectHasOwnProperty,\n stringifyValue,\n} from './utils.js';\n\nexport type { Config } from './config';\n\nexport type {\n DOMPurify,\n RemovedElement,\n RemovedAttribute,\n HookName,\n NodeHook,\n ElementHook,\n DocumentFragmentHook,\n UponSanitizeElementHook,\n UponSanitizeAttributeHook,\n UponSanitizeElementHookEvent,\n UponSanitizeAttributeHookEvent,\n WindowLike,\n} from './types';\n\ndeclare const VERSION: string;\n\n// https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType\nconst NODE_TYPE = {\n element: 1,\n attribute: 2,\n text: 3,\n cdataSection: 4,\n entityReference: 5, // Deprecated\n entityNode: 6, // Deprecated\n processingInstruction: 7,\n comment: 8,\n document: 9,\n documentType: 10,\n documentFragment: 11,\n notation: 12, // Deprecated\n};\n\nconst getGlobal = function (): WindowLike {\n return typeof window === 'undefined' ? null : window;\n};\n\n/**\n * Creates a no-op policy for internal use only.\n * Don't export this function outside this module!\n * @param trustedTypes The policy factory.\n * @param purifyHostElement The Script element used to load DOMPurify (to determine policy name suffix).\n * @return The policy created (or null, if Trusted Types\n * are not supported or creating the policy failed).\n */\nconst _createTrustedTypesPolicy = function (\n trustedTypes: TrustedTypePolicyFactory,\n purifyHostElement: HTMLScriptElement\n) {\n if (\n typeof trustedTypes !== 'object' ||\n typeof trustedTypes.createPolicy !== 'function'\n ) {\n return null;\n }\n\n // Allow the callers to control the unique policy name\n // by adding a data-tt-policy-suffix to the script element with the DOMPurify.\n // Policy creation with duplicate names throws in Trusted Types.\n let suffix = null;\n const ATTR_NAME = 'data-tt-policy-suffix';\n if (purifyHostElement && purifyHostElement.hasAttribute(ATTR_NAME)) {\n suffix = purifyHostElement.getAttribute(ATTR_NAME);\n }\n\n const policyName = 'dompurify' + (suffix ? '#' + suffix : '');\n\n try {\n return trustedTypes.createPolicy(policyName, {\n createHTML(html) {\n return html;\n },\n createScriptURL(scriptUrl) {\n return scriptUrl;\n },\n });\n } catch (_) {\n // Policy creation failed (most likely another DOMPurify script has\n // already run). Skip creating the policy, as this will only cause errors\n // if TT are enforced.\n console.warn(\n 'TrustedTypes policy ' + policyName + ' could not be created.'\n );\n return null;\n }\n};\n\nconst _createHooksMap = function (): HooksMap {\n return {\n afterSanitizeAttributes: [],\n afterSanitizeElements: [],\n afterSanitizeShadowDOM: [],\n beforeSanitizeAttributes: [],\n beforeSanitizeElements: [],\n beforeSanitizeShadowDOM: [],\n uponSanitizeAttribute: [],\n uponSanitizeElement: [],\n uponSanitizeShadowNode: [],\n };\n};\n\n/**\n * Resolve a set-valued configuration option: a fresh set built from\n * cfg[key] when it is an own array property (seeded with a clone of\n * options.base when given, case-normalized via options.transform),\n * the fallback set otherwise.\n *\n * @param cfg the cloned, prototype-free configuration object\n * @param key the configuration property to read\n * @param fallback the set to use when the option is absent or not an array\n * @param options transform and optional base set to merge into\n * @returns the resolved set\n */\nconst _resolveSetOption = function (\n cfg: Config,\n key: keyof Config,\n fallback: Record,\n options: {\n transform: Parameters[2];\n base?: Record;\n }\n): Record {\n return objectHasOwnProperty(cfg, key) && arrayIsArray(cfg[key])\n ? addToSet(\n options.base ? clone(options.base) : {},\n cfg[key] as readonly unknown[],\n options.transform\n )\n : fallback;\n};\n\nfunction createDOMPurify(window: WindowLike = getGlobal()): DOMPurify {\n const DOMPurify: DOMPurify = (root: WindowLike) => createDOMPurify(root);\n\n DOMPurify.version = VERSION;\n\n DOMPurify.removed = [];\n\n if (\n !window ||\n !window.document ||\n window.document.nodeType !== NODE_TYPE.document ||\n !window.Element\n ) {\n // Not running in a browser, provide a factory function\n // so that you can pass your own Window\n DOMPurify.isSupported = false;\n\n return DOMPurify;\n }\n\n let { document } = window;\n\n const originalDocument = document;\n const currentScript: HTMLScriptElement =\n originalDocument.currentScript as HTMLScriptElement;\n const {\n DocumentFragment,\n HTMLTemplateElement,\n Node,\n Element,\n NodeFilter,\n NamedNodeMap = window.NamedNodeMap || (window as any).MozNamedAttrMap,\n HTMLFormElement,\n DOMParser,\n trustedTypes,\n } = window;\n\n const ElementPrototype = Element.prototype;\n\n const cloneNode = lookupGetter(ElementPrototype, 'cloneNode');\n const remove = lookupGetter(ElementPrototype, 'remove');\n const getNextSibling = lookupGetter(ElementPrototype, 'nextSibling');\n const getChildNodes = lookupGetter(ElementPrototype, 'childNodes');\n const getParentNode = lookupGetter(ElementPrototype, 'parentNode');\n const getShadowRoot = lookupGetter(ElementPrototype, 'shadowRoot');\n const getAttributes = lookupGetter(ElementPrototype, 'attributes');\n const getNodeType =\n Node && Node.prototype ? lookupGetter(Node.prototype, 'nodeType') : null;\n const getNodeName =\n Node && Node.prototype ? lookupGetter(Node.prototype, 'nodeName') : null;\n const getOwnerDocument =\n Node && Node.prototype\n ? lookupGetter(Node.prototype, 'ownerDocument')\n : null;\n\n // As per issue #47, the web-components registry is inherited by a\n // new document created via createHTMLDocument. As per the spec\n // (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries)\n // a new empty registry is used when creating a template contents owner\n // document, so we use that as our parent document to ensure nothing\n // is inherited.\n if (typeof HTMLTemplateElement === 'function') {\n const template = document.createElement('template');\n if (template.content && template.content.ownerDocument) {\n document = template.content.ownerDocument;\n }\n }\n\n let trustedTypesPolicy;\n let emptyHTML = '';\n\n // The instance's own internal Trusted Types policy. Unlike a caller-supplied\n // `TRUSTED_TYPES_POLICY`, this is created at most once \u2014 Trusted Types throws\n // on duplicate policy names \u2014 and is the only policy allowed to persist\n // across configurations and survive `clearConfig()`.\n let defaultTrustedTypesPolicy;\n let defaultTrustedTypesPolicyResolved = false;\n\n // Tracks whether we are already inside a call to the configured Trusted Types\n // policy (`createHTML` or `createScriptURL`). If a supplied policy callback\n // itself calls `DOMPurify.sanitize` (the cause of #1422), `sanitize` would\n // re-enter the policy and recurse until the stack overflows. We detect that\n // re-entry and throw a clear, actionable error instead. The guard is shared\n // across both callbacks, because either one re-entering `sanitize` triggers\n // the same unbounded recursion.\n let IN_TRUSTED_TYPES_POLICY = 0;\n const _assertNotInTrustedTypesPolicy = function (): void {\n if (IN_TRUSTED_TYPES_POLICY > 0) {\n throw typeErrorCreate(\n 'A configured TRUSTED_TYPES_POLICY callback (createHTML or ' +\n 'createScriptURL) must not call DOMPurify.sanitize, as that causes ' +\n 'infinite recursion. Do not pass a policy whose callbacks wrap ' +\n 'DOMPurify as TRUSTED_TYPES_POLICY; see the \"DOMPurify and Trusted ' +\n 'Types\" section of the README.'\n );\n }\n };\n\n const _createTrustedHTML = function (html: string): string {\n _assertNotInTrustedTypesPolicy();\n\n IN_TRUSTED_TYPES_POLICY++;\n try {\n return trustedTypesPolicy.createHTML(html);\n } finally {\n IN_TRUSTED_TYPES_POLICY--;\n }\n };\n\n const _createTrustedScriptURL = function (scriptUrl: string): string {\n _assertNotInTrustedTypesPolicy();\n\n IN_TRUSTED_TYPES_POLICY++;\n try {\n return trustedTypesPolicy.createScriptURL(scriptUrl);\n } finally {\n IN_TRUSTED_TYPES_POLICY--;\n }\n };\n\n // Lazily resolve (and cache) the instance's internal default policy.\n // Resolution is attempted at most once: a successful `createPolicy` cannot be\n // repeated (Trusted Types throws on duplicate names), and a failed or\n // unsupported attempt must not be retried on every parse.\n const _getDefaultTrustedTypesPolicy = function () {\n if (!defaultTrustedTypesPolicyResolved) {\n defaultTrustedTypesPolicy = _createTrustedTypesPolicy(\n trustedTypes,\n currentScript\n );\n defaultTrustedTypesPolicyResolved = true;\n }\n\n return defaultTrustedTypesPolicy;\n };\n\n const {\n implementation,\n createNodeIterator,\n createDocumentFragment,\n getElementsByTagName,\n } = document;\n const { importNode } = originalDocument;\n\n let hooks = _createHooksMap();\n\n /**\n * Expose whether this browser supports running the full DOMPurify.\n */\n DOMPurify.isSupported =\n typeof entries === 'function' &&\n typeof getParentNode === 'function' &&\n implementation &&\n implementation.createHTMLDocument !== undefined;\n\n const {\n MUSTACHE_EXPR,\n ERB_EXPR,\n TMPLIT_EXPR,\n DATA_ATTR,\n ARIA_ATTR,\n IS_SCRIPT_OR_DATA,\n ATTR_WHITESPACE,\n CUSTOM_ELEMENT,\n } = EXPRESSIONS;\n\n let { IS_ALLOWED_URI } = EXPRESSIONS;\n\n /**\n * We consider the elements and attributes below to be safe. Ideally\n * don't add any new ones but feel free to remove unwanted ones.\n */\n\n /* allowed element names */\n let ALLOWED_TAGS = null;\n const DEFAULT_ALLOWED_TAGS = addToSet({}, [\n ...TAGS.html,\n ...TAGS.svg,\n ...TAGS.svgFilters,\n ...TAGS.mathMl,\n ...TAGS.text,\n ]);\n\n /* Allowed attribute names */\n let ALLOWED_ATTR = null;\n const DEFAULT_ALLOWED_ATTR = addToSet({}, [\n ...ATTRS.html,\n ...ATTRS.svg,\n ...ATTRS.mathMl,\n ...ATTRS.xml,\n ]);\n\n /*\n * Configure how DOMPurify should handle custom elements and their attributes as well as customized built-in elements.\n * @property {RegExp|Function|null} tagNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any custom elements)\n * @property {RegExp|Function|null} attributeNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any attributes not on the allow list)\n * @property {boolean} allowCustomizedBuiltInElements allow custom elements derived from built-ins if they pass CUSTOM_ELEMENT_HANDLING.tagNameCheck. Default: `false`.\n */\n let CUSTOM_ELEMENT_HANDLING = Object.seal(\n create(null, {\n tagNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null,\n },\n attributeNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null,\n },\n allowCustomizedBuiltInElements: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: false,\n },\n })\n );\n\n /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */\n let FORBID_TAGS = null;\n\n /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */\n let FORBID_ATTR = null;\n\n /* Config object to store ADD_TAGS/ADD_ATTR functions (when used as functions) */\n const EXTRA_ELEMENT_HANDLING = Object.seal(\n create(null, {\n tagCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null,\n },\n attributeCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null,\n },\n })\n );\n\n /* Decide if ARIA attributes are okay */\n let ALLOW_ARIA_ATTR = true;\n\n /* Decide if custom data attributes are okay */\n let ALLOW_DATA_ATTR = true;\n\n /* Decide if unknown protocols are okay */\n let ALLOW_UNKNOWN_PROTOCOLS = false;\n\n /* Decide if self-closing tags in attributes are allowed.\n * Usually removed due to a mXSS issue in jQuery 3.0 */\n let ALLOW_SELF_CLOSE_IN_ATTR = true;\n\n /* Output should be safe for common template engines.\n * This means, DOMPurify removes data attributes, mustaches and ERB\n */\n let SAFE_FOR_TEMPLATES = false;\n\n /* Output should be safe even for XML used within HTML and alike.\n * This means, DOMPurify removes comments when containing risky content.\n */\n let SAFE_FOR_XML = true;\n\n /* Decide if document with ... should be returned */\n let WHOLE_DOCUMENT = false;\n\n /* Track whether config is already set on this instance of DOMPurify. */\n let SET_CONFIG = false;\n\n /* Pristine allowlist bindings captured at setConfig() time. On the\n * persistent-config path sanitize() restores the sets from these before\n * the per-walk hook clone-guard, so a hook's in-call widening cannot\n * carry across calls. Null until setConfig() is called; reset by\n * clearConfig(). */\n let SET_CONFIG_ALLOWED_TAGS = null;\n let SET_CONFIG_ALLOWED_ATTR = null;\n\n /* Decide if all elements (e.g. style, script) must be children of\n * document.body. By default, browsers might move them to document.head */\n let FORCE_BODY = false;\n\n /* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported).\n * If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead\n */\n let RETURN_DOM = false;\n\n /* Decide if a DOM `DocumentFragment` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported) */\n let RETURN_DOM_FRAGMENT = false;\n\n /* Try to return a Trusted Type object instead of a string, return a string in\n * case Trusted Types are not supported */\n let RETURN_TRUSTED_TYPE = false;\n\n /* Output should be free from DOM clobbering attacks?\n * This sanitizes markups named with colliding, clobberable built-in DOM APIs.\n */\n let SANITIZE_DOM = true;\n\n /* Achieve full DOM Clobbering protection by isolating the namespace of named\n * properties and JS variables, mitigating attacks that abuse the HTML/DOM spec rules.\n *\n * HTML/DOM spec rules that enable DOM Clobbering:\n * - Named Access on Window (\u00A77.3.3)\n * - DOM Tree Accessors (\u00A73.1.5)\n * - Form Element Parent-Child Relations (\u00A74.10.3)\n * - Iframe srcdoc / Nested WindowProxies (\u00A74.8.5)\n * - HTMLCollection (\u00A74.2.10.2)\n *\n * Namespace isolation is implemented by prefixing `id` and `name` attributes\n * with a constant string, i.e., `user-content-`\n */\n let SANITIZE_NAMED_PROPS = false;\n const SANITIZE_NAMED_PROPS_PREFIX = 'user-content-';\n\n /* Keep element content when removing element? */\n let KEEP_CONTENT = true;\n\n /* If a `Node` is passed to sanitize(), then performs sanitization in-place instead\n * of importing it into a new Document and returning a sanitized copy */\n let IN_PLACE = false;\n\n /* Allow usage of profiles like html, svg and mathMl */\n let USE_PROFILES: UseProfilesConfig | false = {};\n\n /* Tags to ignore content of when KEEP_CONTENT is true */\n let FORBID_CONTENTS = null;\n const DEFAULT_FORBID_CONTENTS = addToSet({}, [\n 'annotation-xml',\n 'audio',\n 'colgroup',\n 'desc',\n 'foreignobject',\n 'head',\n 'iframe',\n 'math',\n 'mi',\n 'mn',\n 'mo',\n 'ms',\n 'mtext',\n 'noembed',\n 'noframes',\n 'noscript',\n 'plaintext',\n 'script',\n // mirrors the selected