diff --git a/gen/astrocade-MBYAMRZ3.js b/gen/astrocade-MBYAMRZ3.js deleted file mode 100644 index bd54ca21..00000000 --- a/gen/astrocade-MBYAMRZ3.js +++ /dev/null @@ -1,14 +0,0 @@ -import{J as d0,c as t0,d as r0,e as i0,k as s0,q as n0}from"./chunk-42IVW2OL.js";import{$ as Z,J as y,W as A,X as F0,Z as A0,aa as S,g as o,l as $,m as x0,t as e0}from"./chunk-S4FPTY4A.js";import"./chunk-RQFURXHW.js";var C0=A0([[A.UP,16,1],[A.DOWN,16,2],[A.LEFT,16,4],[A.RIGHT,16,8],[A.A,16,16],[A.P2_UP,17,1],[A.P2_DOWN,17,2],[A.P2_LEFT,17,4],[A.P2_RIGHT,17,8],[A.P2_A,17,16],[A.VK_P,20,1],[A.VK_SLASH,20,2],[A.VK_X,20,4],[A.VK_MINUS,20,8],[A.VK_COMMA,20,16],[A.VK_EQUALS,20,32],[A.VK_O,21,1],[A.VK_L,21,2],[A.VK_9,21,4],[A.VK_6,21,8],[A.VK_3,21,16],[A.VK_PERIOD,21,32],[A.VK_I,22,1],[A.VK_K,22,2],[A.VK_8,22,4],[A.VK_5,22,8],[A.VK_2,22,16],[A.VK_0,22,32],[A.VK_U,23,1],[A.VK_J,23,2],[A.VK_7,23,4],[A.VK_4,23,8],[A.VK_1,23,16],[A.VK_BACK_SLASH,23,32]]),a0=2,m0=function(d){var F,r,B,C,b,O,L,U;let V=d?320:160,N=d?204:102,z=V>>2,h0=256,u0=4293848814,Y0=4278190080;var I=new Uint8Array(32),a=0,m=0,c=!1,l=0,D=0,E=0,Q=0,h=0,u=N,P=new Uint32Array(8),G=new Uint8Array(8),k=0,K=new Uint8Array(d?262:131),b0=!1,g=new Uint8Array(4),X=0,Y=0,R=0;function j(x,e){r[x]=e,R++,K[(x&4095)/z|0]=1}function g0(x,e){for(var s=x*4+3,f=0;f<4;f++){var w=x%z>=(D&63)?0:4;L[s--]=P[w+(e&3)],e>>=2}}function _(x){for(var e=x*V/4,s=0;s>=4);for(var f=0;f<4;f++){var w=e&1?m>>2&3:m&3;s|=w<>=1}e=s,c=!c}if(a&4){if(X&4){var n=2*(~X&3);e=(g[3]>>n&3)<<6|(g[2]>>n&3)<<4|(g[1]>>n&3)<<2|(g[0]>>n&3)<<0}else g[X&3]=e;X++}else{var n=(a&3)<<1,s=e>>n|l;l=e<<8-n&255,e=s}if(a&64&&(e=(e&3)<<6|(e&12)<<2|(e&48)>>2|(e&192)>>6),a&48){var t=r[x],i=0;t&192&&e&192&&(i|=1),t&48&&e&48&&(i|=2),t&12&&e&12&&(i|=4),t&3&&e&3&&(i|=8),a&16&&(e|=t),a&32&&(e^=t),Y=Y&240|i|i<<4}j(x,e)}function W(x,e){G[x&7]=e&255,P[x&7]=J[e&255],H()}function X0(){var x=D>>6}function H(){k=N}this.drawScanline=x=>{x==Q&&E&8&&(F.retryInterrupts=!(E&4),this.probe&&this.probe.logInterrupt(h),F.interrupt(h)),x0?(K[x]=0,_(x),k--):K[x]&&(K[x]=0,_(x))},this.init=(x,e,s,f,w)=>{F=e,r=s,I=f,U=w,O=Z(new $().decode(x0(atob(l0))),8192),d?B={read:S([[16384,32767,16383,function(t){return r[t]}],[53248,57343,4095,function(t){return r[t+16384]}],[0,45055,65535,function(t){return b?b[t]:0}]]),write:S([[16384,32767,16383,j],[53248,57343,4095,function(t,i){j(t+16384,i)}],[0,16383,16383,q]])}:B={read:S([[0,8191,8191,function(t){return O[t]}],[8192,16383,8191,function(t){return b?b[t]:0}],[16384,20479,4095,function(t){return R++,r[t]}]]),write:S([[16384,20479,4095,j],[0,16383,4095,q]])},C={read:function(t){t&=31;var i;switch(t){case 8:i=Y,Y=0;break;default:i=I[t];break}return i},write:function(t,i){switch(t&=31,i&=255,t){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:W(t,i);break;case 9:D=i,X0(),H();break;case 10:u=d?i:i>>1,H();break;case 11:var p=F.saveState();W((p.BC>>8)-1,B.read(p.HL));break;case 12:a=i,l=0,X=0,c=!1;break;case 13:h=i;break;case 14:E=i;break;case 15:Q=d?i:i>>1;break;case 16:case 17:case 18:case 19:case 20:case 21:case 22:case 23:U.setACRegister(t,i);break;case 24:var p=F.saveState();U.setACRegister((p.BC>>8)-1,B.read(p.HL));break;case 25:m=i;break;default:console.log("IO write",o(t,4),o(i,2));break}}},x.connectCPUMemoryBus(B),x.connectCPUIOBus(C),this.membus=B,this.iobus=C;for(var n=0;n<8;n++)W(n,n)},this.resetWaitStates=function(x){var e=x{F.loadState(x.c),r.set(x.ram),P.set(x.palette),G.set(x.palinds),a=x.magicop,m=x.xpand,c=x.xplower,l=x.shift2,D=x.horcb,E=x.inmod,Q=x.inlin,h=x.infbk,u=x.verbl,X=x.rotcount,g.set(x.rotdata),Y=x.intst,I.set(x.inputs),H()},this.saveState=()=>({c:F.saveState(),ram:r.slice(0),inputs:I.slice(0),palette:P.slice(0),palinds:G.slice(0),magicop:a,xpand:m,xplower:c,shift2:l,horcb:D,inmod:E,inlin:Q,infbk:h,verbl:u,rotcount:X,rotdata:g.slice(0),intst:Y}),this.reset=()=>{a=m=E=Q=h=l=D=0,u=N,c=!1},this.toLongString=x=>{var e="";e+=` - INLIN: `+x.inlin,e+=` - VERBL: `+x.verbl,e+=` -MAGICOP: $`+o(x.magicop),e+=` - XPAND: $`+o(x.xpand),e+=` -XPLOWER: `+x.xplower,e+=` - SHIFT2: $`+o(x.shift2),e+=` - HORCB: $`+o(x.horcb),e+=` - INMOD: $`+o(x.inmod),e+=` - INFBK: $`+o(x.infbk),e+=` - INTST: $`+o(x.intst),e+=` -Palette: `;for(var s=0;s<8;s++)e+=o(G[s]);return e+=` -`,e},this.connectVideo=function(x){L=x},this.loadROM=function(x){b=x},this.loadBIOS=function(x){O=x},this.getVisiblePixelWords=function(){return u*V}},T=class extends n0{constructor(F){super();this.cpuFrequency=1789e3;this.numTotalScanlines=262;this.sampleRate=60*262*a0;this.cpu=new t0,this.psg=new o0(new r0),this.audioadapter=new s0(this.psg.psg,a0,this.sampleRate),this.handler=F0(this.inputs,C0),this.defaultROMSize=F?45056:8192,this.ram=new Uint8Array(F?20480:4096),this.numVisibleScanlines=F?204:102,this.canvasWidth=F?320:160,this.cpuCyclesPerLine=this.cpuFrequency/(60*this.numVisibleScanlines*1.286)|0,this.m=new m0(F),this.m.init(this,this.cpu,this.ram,this.inputs,this.psg)}read(F){return this.m.membus.read(F)}write(F,r){this.m.membus.write(F,r)}connectVideo(F){super.connectVideo(F),this.frontbuffer=F,this.backbuffer=new Uint32Array(F.length),this.m.connectVideo(this.backbuffer)}preFrame(){this.m.resetWaitStates(0)}postFrame(){var F=this.m.getVisiblePixelWords();this.frontbuffer.set(this.backbuffer.slice(0,F),0),this.frontbuffer.fill(0,F)}setPaddleInput(F,r){switch(F){case 0:this.inputs[28]=r&255;break;case 1:this.inputs[29]=r&255;break}}startScanline(){this.audio&&this.audioadapter.generate(this.audio)}drawScanline(){var F=this.scanline;this.m.drawScanline(F)}advanceCPU(){var F=super.advanceCPU(),r=this.m.resetWaitStates(this.scanline);return r&&(F+=r,this.probe.logClocks(r)),F}loadROM(F){super.loadROM(F),this.m.loadROM(this.rom),this.reset()}loadBIOS(F){this.m.loadBIOS(Z(F,8192)),this.reset()}reset(){super.reset(),this.m.reset()}loadState(F){this.m.loadState(F)}saveState(){return this.m.saveState()}getDebugCategories(){return["CPU","Stack","Astro"]}getDebugInfo(F,r){switch(F){case"Astro":return this.m.toLongString(r)}}getRasterCanvasPosition(){return{x:this.getRasterX(),y:this.getRasterY()}}},o0=class extends i0{setACRegister(F,r){switch(F&=7,r&=255,F){case 0:this.psg.setClock(1789e3*16/(r+1)),this.psg.writeRegisterAY(7,7^255);break;case 1:case 2:case 3:var B=(F-1)*2,C=r*2+1;this.psg.writeRegisterAY(B,C&255),this.psg.writeRegisterAY(B+1,C>>8&255);break;case 5:this.psg.writeRegisterAY(10,r&15);break;case 6:this.psg.writeRegisterAY(8,r&15),this.psg.writeRegisterAY(9,r>>4&15);break}}};var J=[0,2368548,4737096,7171437,9539985,11974326,14342874,16777215,2425019,4784352,7213567,9582079,12016383,14384895,16753663,16762879,4784304,7143637,9568761,11937279,14306047,16740095,16749311,16758783,6946975,9306307,11731175,14096639,16465151,16736767,16745983,16755199,8847495,11206827,13631696,15994612,16724735,16733951,16743423,16752639,10420330,12779662,15138995,16713687,16723195,16732415,16741631,16751103,11534409,13959277,16318610,16713142,16722394,16731647,16741119,16750335,12255269,14680137,16711790,16713362,16722615,16732123,16741375,16750847,12517376,14876708,16711752,16714605,16724113,16733366,16742874,16752127,12255232,14680064,16711715,16716871,16726380,16735632,16745141,16754393,11534336,13959168,16318464,16720164,16729416,16738924,16748177,16757685,10420224,12779520,15141888,16723971,16733479,16742731,16752240,16761492,8847360,11206656,13639168,16007680,16738058,16747310,16756563,16766071,6946816,9309440,11743488,14112256,16480768,16752151,16761659,16770911,4784128,7151872,9585920,11954688,14323200,16757509,16766761,16776270,2429184,4797696,7232e3,9600512,12034816,14403328,16771870,16777027,9472,2377984,4746496,7180800,9549312,11983616,14352155,16777023,14080,23296,2326528,4695040,7129344,9497856,11927326,14286659,18176,27648,36864,2405376,4774144,7142661,9568041,11927374,21760,30976,40192,246272,2614784,4980503,7405371,9764703,24320,33536,43008,52224,716810,3079982,5504851,7864183,25856,35328,44544,53763,63271,1572683,3932016,6291348,26624,35840,45312,54564,63816,393068,2752401,5177269,26112,35584,44835,54343,63596,65424,2031541,4456409,24832,34084,43592,52845,62353,65462,1834970,4194302,22565,31817,41326,50578,60087,65499,2031615,4456447,19273,28781,38034,47542,56794,393215,2752511,5177343,15466,24718,34227,43479,52987,1569535,3932159,6291455,10887,20395,29648,38900,703743,3072255,5505023,7864319,6047,15299,24807,230655,2599167,4967935,7401983,9764863,688,10197,19449,2388223,4756735,7125503,9559551,11927551,187,5088,2308095,4676607,7110911,9479423,11913727,14282239];for(M=0;M<256;M++)B0=J[M],J[M]=e0(B0)|4278190080;var B0,M;var l0="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";var D0=[{id:"01-helloworlds.asm",name:"Hello World (ASM)"},{id:"02-telephone.asm",name:"Telephone (ASM)"},{id:"03-horcbpal.asm",name:"Paddle Demo (ASM)"},{id:"hello.c",name:"Hello Graphics"},{id:"lines.c",name:"Lines"},{id:"sprites.c",name:"Sprites"},{id:"vsync.c",name:"Sprites w/ VSYNC"},{id:"fastsprites.c",name:"Fast Sprites"},{id:"music.c",name:"Music"},{id:"rotate.c",name:"Rotate Op"},{id:"rainbow.c",name:"Rainbow"},{id:"cosmic.c",name:"Cosmic Impalas Game"},{id:"racing.c",name:"Pseudo 3-D Racing Game"}],E0=[{id:"bios.c",name:"BIOS"}],v=class extends d0{constructor(){super(...arguments);this.getMemoryMap=function(){return{main:[{name:"BIOS",start:0,size:8192,type:"rom"},{name:"Screen RAM",start:16384,size:4096,type:"ram"},{name:"BIOS Variables",start:20430,size:20480-20430,type:"ram"}]}}}newMachine(){return new T(!1)}getPresets(){return D0}getDefaultExtension(){return".c"}readAddress(F){return this.machine.read(F)}showHelp(){return"https://8bitworkshop.com/docs/platforms/astrocade/"}},f0=class extends v{getPresets(){return E0}loadROM(F,r){this.machine.loadBIOS(r)}},c0=class extends v{constructor(){super(...arguments);this.getMemoryMap=function(){return{main:[{name:"Magic RAM",start:0,size:16384,type:"ram"},{name:"Screen RAM",start:16384,size:16384,type:"ram"}]}}}newMachine(){return new T(!0)}};y.astrocade=v;y["astrocade-bios"]=f0;y["astrocade-arcade"]=c0; -//# sourceMappingURL=astrocade-MBYAMRZ3.js.map diff --git a/gen/astrocade-MBYAMRZ3.js.map b/gen/astrocade-MBYAMRZ3.js.map deleted file mode 100644 index e6023c47..00000000 --- a/gen/astrocade-MBYAMRZ3.js.map +++ /dev/null @@ -1,7 +0,0 @@ -{ - "version": 3, - "sources": ["../src/machine/astrocade.ts", "../src/platform/astrocade.ts"], - "sourcesContent": ["\nimport { Z80, Z80State } from \"../common/cpu/ZilogZ80\";\nimport { BasicScanlineMachine, AcceptsPaddleInput, Bus } from \"../common/devices\";\nimport { KeyFlags, newAddressDecoder, padBytes, Keys, makeKeycodeMap, newKeyboardHandler } from \"../common/emu\";\nimport { TssChannelAdapter, MasterAudio, AY38910_Audio } from \"../common/audio\";\nimport { hex, rgb2bgr, lzgmini, stringToByteArray } from \"../common/util\";\n\n// http://metopal.com/projects/ballybook/doku.php\n\n// TODO: fix keys, more controllers, vibrato/noise, border color\n// http://atariage.com/forums/topic/251416-programming-the-bally-arcadeastrocade/\n// https://ballyalley.com/faqs/BPA%20Video%20Hardware%20FAQ/Bally_Professional_Arcade_Video_Hardware%20(2001)(Tony%20Miller).pdf\n// https://atariage.com/forums/topic/290858-notes-from-a-2019-interview-with-jamie-fenton/ (http://www.fentonia.com/bio/)\n// https://thehistoryofhowweplay.wordpress.com/2018/04/03/interview-tom-mchugh/\n// https://ballyalley.com/faqs/Programmers%20of%20the%20Astrocade%20Built-In%20Programs.txt\n\nconst ASTROCADE_KEYCODE_MAP = makeKeycodeMap([\n // player 1\n [Keys.UP, 0x10, 0x1],\n [Keys.DOWN, 0x10, 0x2],\n [Keys.LEFT, 0x10, 0x4],\n [Keys.RIGHT, 0x10, 0x8],\n [Keys.A, 0x10, 0x10],\n // player 2\n [Keys.P2_UP, 0x11, 0x1],\n [Keys.P2_DOWN, 0x11, 0x2],\n [Keys.P2_LEFT, 0x11, 0x4],\n [Keys.P2_RIGHT, 0x11, 0x8],\n [Keys.P2_A, 0x11, 0x10],\n // keypad $14\n [Keys.VK_P, 0x14, 0x1],\n [Keys.VK_SLASH, 0x14, 0x2],\n [Keys.VK_X, 0x14, 0x4],\n [Keys.VK_MINUS, 0x14, 0x8],\n [Keys.VK_COMMA, 0x14, 0x10],\n [Keys.VK_EQUALS, 0x14, 0x20],\n // keypad $15\n [Keys.VK_O, 0x15, 0x1],\n [Keys.VK_L, 0x15, 0x2],\n [Keys.VK_9, 0x15, 0x4],\n [Keys.VK_6, 0x15, 0x8],\n [Keys.VK_3, 0x15, 0x10],\n [Keys.VK_PERIOD, 0x15, 0x20],\n // keypad $16\n [Keys.VK_I, 0x16, 0x1],\n [Keys.VK_K, 0x16, 0x2],\n [Keys.VK_8, 0x16, 0x4],\n [Keys.VK_5, 0x16, 0x8],\n [Keys.VK_2, 0x16, 0x10],\n [Keys.VK_0, 0x16, 0x20],\n // keypad $17\n [Keys.VK_U, 0x17, 0x1],\n [Keys.VK_J, 0x17, 0x2],\n [Keys.VK_7, 0x17, 0x4],\n [Keys.VK_4, 0x17, 0x8],\n [Keys.VK_1, 0x17, 0x10],\n [Keys.VK_BACK_SLASH, 0x17, 0x20],\n]);\n\nconst audioOversample = 2;\n\nconst _BallyAstrocade = function(arcade:boolean) {\n\n var cpu : Z80;\n var ram : Uint8Array;\n var membus, iobus : Bus;\n var rom, bios;\n var pixels;\n var psg;\n //var watchdog_counter;\n const swidth = arcade ? 320 : 160;\n const sheight = arcade ? 204 : 102;\n const swbytes = swidth >> 2;\n const INITIAL_WATCHDOG = 256;\n const PIXEL_ON = 0xffeeeeee;\n const PIXEL_OFF = 0xff000000;\n\n // state variables\n var inputs = new Uint8Array(0x20);\n var magicop = 0;\n var xpand = 0;\n var xplower = false;\n var shift2 = 0;\n var horcb = 0;\n var inmod = 0;\n var inlin = 0;\n var infbk = 0;\n var verbl = sheight;\n var palette = new Uint32Array(8);\n var palinds = new Uint8Array(8);\n var refreshlines = 0;\n var dirtylines = new Uint8Array(arcade ? 262 : 131);\n var vidactive = false;\n var rotdata = new Uint8Array(4);\n var rotcount = 0;\n var intst = 0;\n var waitstates = 0;\n\n\n function ramwrite(a: number, v: number) {\n // set RAM\n ram[a] = v;\n waitstates++;\n // mark scanline as dirty\n dirtylines[((a & 0xfff) / swbytes) | 0] = 1;\n // this was old behavior where we updated instantly\n // but it had problems if we had mid-screen palette changes\n //ramupdate(a, v);\n }\n\n function ramupdate(a: number, v: number) {\n var ofs = a * 4 + 3; // 4 pixels per byte\n for (var i = 0; i < 4; i++) {\n var lr = ((a % swbytes) >= (horcb & 0x3f)) ? 0 : 4;\n pixels[ofs--] = palette[lr + (v & 3)];\n v >>= 2;\n }\n }\n\n function refreshline(y: number) {\n var ofs = y * swidth / 4;\n for (var i = 0; i < swidth / 4; i++)\n ramupdate(ofs + i, ram[ofs + i]);\n }\n\n function magicwrite(a: number, v: number) {\n // expand\n if (magicop & 0x8) {\n var v2 = 0;\n if (!xplower)\n v >>= 4;\n for (var i = 0; i < 4; i++) {\n var pix = (v & 1) ? ((xpand >> 2) & 3) : (xpand & 3);\n v2 |= pix << (i * 2);\n v >>= 1;\n }\n v = v2;\n xplower = !xplower;\n }\n // rotate\n if (magicop & 0x4) {\n if (rotcount & 4) {\n // drain buffer\n var sh = 2 * (~rotcount & 3);\n v = (((rotdata[3] >> sh) & 3) << 6) |\n (((rotdata[2] >> sh) & 3) << 4) |\n (((rotdata[1] >> sh) & 3) << 2) |\n (((rotdata[0] >> sh) & 3) << 0);\n } else {\n // fill buffer\n rotdata[rotcount & 3] = v;\n }\n rotcount++;\n } else {\n // shift\n var sh = (magicop & 3) << 1;\n var v2 = (v >> sh) | shift2;\n shift2 = (v << (8 - sh)) & 0xff;\n v = v2;\n }\n // flop\n if (magicop & 0x40) {\n v =\n ((v & 0x03) << 6) |\n ((v & 0x0c) << 2) |\n ((v & 0x30) >> 2) |\n ((v & 0xc0) >> 6);\n }\n // or/xor\n if (magicop & 0x30) {\n var oldv = ram[a];\n // collision detect\n var icpt = 0;\n if ((oldv & 0xc0) && (v & 0xc0)) icpt |= 0x1;\n if ((oldv & 0x30) && (v & 0x30)) icpt |= 0x2;\n if ((oldv & 0x0c) && (v & 0x0c)) icpt |= 0x4;\n if ((oldv & 0x03) && (v & 0x03)) icpt |= 0x8;\n // apply op\n if (magicop & 0x10)\n v |= oldv;\n if (magicop & 0x20)\n v ^= oldv; // TODO: what if both?\n // upper 4 bits persist, lower are just since last write\n intst = (intst & 0xf0) | icpt | (icpt << 4);\n }\n // commit write to ram/screen\n ramwrite(a, v);\n }\n\n function setpalette(a: number, v: number) {\n palinds[a & 7] = v & 0xff;\n palette[a & 7] = ASTROCADE_PALETTE[v & 0xff];\n refreshall();\n }\n\n function setbordercolor() {\n var col = horcb >> 6;\n // TODO\n }\n\n function refreshall() {\n refreshlines = sheight;\n }\n \n this.drawScanline = (sl:number) => {\n // interrupt\n if (sl == inlin && (inmod & 0x8)) {\n cpu.retryInterrupts = !(inmod & 0x4);\n this.probe && this.probe.logInterrupt(infbk);\n cpu.interrupt(infbk);\n }\n // refresh this line in frame buffer?\n if (sl < sheight && refreshlines > 0) {\n dirtylines[sl] = 0;\n refreshline(sl);\n refreshlines--;\n }\n else if (dirtylines[sl]) {\n dirtylines[sl] = 0;\n refreshline(sl);\n }\n }\n \n this.init = (machine:BallyAstrocade, c:Z80, r:Uint8Array, inp:Uint8Array, psgg) => {\n cpu = c;\n ram = r;\n inputs = inp;\n psg = psgg;\n //bios = padBytes(ASTROCADE_MINIMAL_BIOS, 0x2000);\n bios = padBytes(new lzgmini().decode(stringToByteArray(atob(ASTROLIBRE_BIOS_LZG))), 0x2000);\n if (!arcade) {\n // game console\n membus = {\n read: newAddressDecoder([\n [0x0000, 0x1fff, 0x1fff, function(a) { return bios[a]; }],\n [0x2000, 0x3fff, 0x1fff, function(a) { return rom ? rom[a] : 0; }],\n [0x4000, 0x4fff, 0xfff, function(a) { waitstates++; return ram[a]; }],\n ]),\n write: newAddressDecoder([\n [0x4000, 0x4fff, 0xfff, ramwrite],\n [0x0000, 0x3fff, 0xfff, magicwrite],\n ]),\n }\n } else {\n // arcade game (TODO: wait states 1/4 of the time)\n membus = {\n read: newAddressDecoder([\n [0x4000, 0x7fff, 0x3fff, function(a) { return ram[a]; }],\t// screen RAM\n [0xd000, 0xdfff, 0xfff, function(a) { return ram[a + 0x4000]; }], // static RAM\n [0x0000, 0xafff, 0xffff, function(a) { return rom ? rom[a] : 0; }], // ROM (0-3fff,8000-afff)\n ]),\n write: newAddressDecoder([\n [0x4000, 0x7fff, 0x3fff, ramwrite],\n [0xd000, 0xdfff, 0xfff, function(a, v) { ramwrite(a + 0x4000, v); }], // static RAM\n [0x0000, 0x3fff, 0x3fff, magicwrite],\n ]),\n }\n }\n iobus = {\n read: function(addr) {\n addr &= 0x1f;\n var rtn;\n switch (addr) {\n case 8:\n rtn = intst;\n intst = 0;\n break;\n default:\n rtn = inputs[addr];\n break;\n // $10 = watchdog\n }\n return rtn;\n },\n write: function(addr, val) {\n addr &= 0x1f;\n val &= 0xff;\n switch (addr) {\n case 0:\n case 1:\n case 2:\n case 3:\n case 4:\n case 5:\n case 6:\n case 7:\n setpalette(addr, val);\n break;\n case 9: // HORCB (horizontal boundary byte)\n horcb = val;\n setbordercolor();\n refreshall();\n break;\n case 0xa: // VERBL (vertical blank)\n verbl = arcade ? val : val >> 1;\n refreshall();\n break;\n case 0xb: // OTIR (set palette)\n var c = cpu.saveState();\n //console.log(c.BC>>8, c.HL);\n setpalette((c.BC >> 8) - 1, membus.read(c.HL));\n break;\n case 0xc: // magic register\n magicop = val;\n shift2 = 0;\n rotcount = 0;\n xplower = false;\n break;\n case 0xd: // INFBK (interrupt feedback)\n infbk = val;\n break;\n case 0xe: // INMOD (interrupt enable)\n inmod = val;\n break;\n case 0xf: // INLIN (interrupt line)\n inlin = arcade ? val : val >> 1;\n break;\n case 0x10:\n case 0x11:\n case 0x12:\n case 0x13:\n case 0x14:\n case 0x15:\n case 0x16:\n case 0x17:\n psg.setACRegister(addr, val);\n break;\n case 0x18:\n var c = cpu.saveState();\n psg.setACRegister((c.BC >> 8) - 1, membus.read(c.HL));\n break;\n case 0x19: // XPAND\n xpand = val;\t\n break;\n default:\n console.log('IO write', hex(addr, 4), hex(val, 2));\n break;\n }\n }\n }\n machine.connectCPUMemoryBus(membus);\n machine.connectCPUIOBus(iobus);\n this.membus = membus;\n this.iobus = iobus;\n // default palette\n for (var i = 0; i < 8; i++) {\n setpalette(i,i);\n }\n };\n\n this.resetWaitStates = function(sl) {\n var n = sl < verbl ? waitstates : 0; // only wait if video active\n waitstates = 0;\n return n;\n }\n\n this.loadState = (state) => {\n cpu.loadState(state.c);\n ram.set(state.ram);\n palette.set(state.palette);\n palinds.set(state.palinds);\n magicop = state.magicop;\n xpand = state.xpand;\n xplower = state.xplower;\n shift2 = state.shift2;\n horcb = state.horcb;\n inmod = state.inmod;\n inlin = state.inlin;\n infbk = state.infbk;\n verbl = state.verbl;\n rotcount = state.rotcount;\n rotdata.set(state.rotdata);\n intst = state.intst;\n inputs.set(state.inputs);\n refreshall();\n }\n \n this.saveState = () => {\n return {\n c: cpu.saveState(),\n ram: ram.slice(0),\n inputs: inputs.slice(0),\n palette: palette.slice(0),\n palinds: palinds.slice(0),\n magicop: magicop,\n xpand: xpand,\n xplower: xplower,\n shift2: shift2,\n horcb: horcb,\n inmod: inmod,\n inlin: inlin,\n infbk: infbk,\n verbl: verbl,\n rotcount: rotcount,\n rotdata: rotdata.slice(0),\n intst: intst\n };\n }\n this.reset = () => {\n // TODO?\n magicop = xpand = inmod = inlin = infbk = shift2 = horcb = 0;\n verbl = sheight;\n xplower = false;\n //watchdog_counter = INITIAL_WATCHDOG;\n }\n \n this.toLongString = (st) => {\n var s = \"\";\n //s += \" Scan Y: \" + st.sl;\n s += \"\\n INLIN: \" + st.inlin;\n s += \"\\n VERBL: \" + st.verbl;\n s += \"\\nMAGICOP: $\" + hex(st.magicop);\n s += \"\\n XPAND: $\" + hex(st.xpand);\n s += \"\\nXPLOWER: \" + st.xplower;\n s += \"\\n SHIFT2: $\" + hex(st.shift2);\n s += \"\\n HORCB: $\" + hex(st.horcb);\n s += \"\\n INMOD: $\" + hex(st.inmod);\n s += \"\\n INFBK: $\" + hex(st.infbk);\n s += \"\\n INTST: $\" + hex(st.intst); // intercept status\n s += \"\\nPalette: \";\n for (var i = 0; i < 8; i++)\n s += hex(palinds[i]);\n s += \"\\n\";\n return s;\n }\n \n this.connectVideo = function(pix) {\n pixels = pix;\n }\n this.loadROM = function(data) {\n rom = data;\n }\n this.loadBIOS = function(data) {\n bios = data;\n }\n this.getVisiblePixelWords = function() {\n return verbl * swidth;\n }\n}\n\nexport class BallyAstrocade extends BasicScanlineMachine implements AcceptsPaddleInput {\n \n cpuFrequency = 1789000;\n numTotalScanlines = 262;\n numVisibleScanlines : number;\n cpuCyclesPerLine : number;\n defaultROMSize : number;\n canvasWidth : number;\n sampleRate = 60 * 262 * audioOversample;\n ram : Uint8Array;\n cpu : Z80;\n m; // _BallyAstrocade\n\n psg: AstrocadeAudio;\n audioadapter;\n backbuffer : Uint32Array;\n frontbuffer : Uint32Array;\n\n constructor(arcade:boolean) {\n super();\n this.cpu = new Z80();\n this.psg = new AstrocadeAudio(new MasterAudio());\n this.audioadapter = new TssChannelAdapter(this.psg.psg, audioOversample, this.sampleRate);\n this.handler = newKeyboardHandler(this.inputs, ASTROCADE_KEYCODE_MAP);\n this.defaultROMSize = arcade ? 0xb000 : 0x2000;\n this.ram = new Uint8Array(arcade ? 0x5000 : 0x1000);\n this.numVisibleScanlines = arcade ? 204 : 102;\n this.canvasWidth = arcade ? 320 : 160;\n this.cpuCyclesPerLine = (this.cpuFrequency / (60 * this.numVisibleScanlines * 1.286)) | 0;\n //this.cpuCyclesPerHBlank = Math.floor(this.cpuCyclesPerLine * 0.33);\n //this.cpuCyclesPerVisible = this.cpuCyclesPerLine - this.cpuCyclesPerHBlank;\n this.m = new _BallyAstrocade(arcade);\n this.m.init(this, this.cpu, this.ram, this.inputs, this.psg);\n }\n \n read(a:number) : number {\n return this.m.membus.read(a);\n }\n write(a:number, v:number) : void {\n this.m.membus.write(a,v);\n }\n \n connectVideo(pixels:Uint32Array) : void {\n super.connectVideo(pixels);\n this.frontbuffer = pixels;\n this.backbuffer = new Uint32Array(pixels.length);\n this.m.connectVideo(this.backbuffer);\n }\n preFrame() {\n this.m.resetWaitStates(0);\n }\n postFrame() {\n // copy back buffer to front buffer, omitting bottom non-visible pixels\n var nbytes = this.m.getVisiblePixelWords();\n this.frontbuffer.set(this.backbuffer.slice(0, nbytes), 0);\n this.frontbuffer.fill(0, nbytes);\n }\n\n setPaddleInput(controller:number, value:number) : void {\n switch (controller) {\n case 0: this.inputs[0x1c] = value & 0xff; break;\n case 1: this.inputs[0x1d] = value & 0xff; break;\n }\n }\n\n startScanline() {\n this.audio && this.audioadapter.generate(this.audio);\n }\n \n drawScanline() {\n var sl = this.scanline;\n this.m.drawScanline(sl);\n /*\n if (watchdog_counter-- <= 0) {\n console.log(\"WATCHDOG FIRED\"); // TODO: alert on video\n this.reset();\n }\n */\n }\n\n advanceCPU() {\n var clk = super.advanceCPU();\n // TODO: disable 33% of the time (hblank)\n var xtra = this.m.resetWaitStates(this.scanline);\n if (xtra) {\n clk += xtra;\n this.probe.logClocks(xtra);\n }\n return clk;\n }\n\n loadROM(data) {\n super.loadROM(data);\n this.m.loadROM(this.rom);\n this.reset();\n }\n loadBIOS(data) {\n this.m.loadBIOS(padBytes(data, 0x2000));\n this.reset();\n }\n reset() {\n super.reset();\n this.m.reset();\n }\n loadState(state) {\n this.m.loadState(state);\n }\n saveState() {\n return this.m.saveState();\n }\n getDebugCategories() {\n return ['CPU','Stack','Astro'];\n }\n getDebugInfo(category, state) {\n switch (category) {\n case 'Astro': return this.m.toLongString(state);\n }\n }\n getRasterCanvasPosition() { return { x: this.getRasterX(), y: this.getRasterY() }; }\n\n}\n\n/////\n\n// TODO: https://github.com/mamedev/mame/blob/master/src/devices/sound/astrocde.cpp\nclass AstrocadeAudio extends AY38910_Audio {\n setACRegister(addr: number, val: number) {\n addr &= 0x7;\n val &= 0xff;\n switch (addr) {\n case 0:\n this.psg.setClock(1789000 * 16 / (val + 1));\n this.psg.writeRegisterAY(7, 0x7 ^ 0xff); // disable noise\n break;\n case 1:\n case 2:\n case 3:\n var i = (addr - 1) * 2;\n var j = val * 2 + 1;\n this.psg.writeRegisterAY(i, j & 0xff); // freq lo\n this.psg.writeRegisterAY(i + 1, (j >> 8) & 0xff); // freq hi\n break;\n case 5:\n this.psg.writeRegisterAY(10, val & 0xf); // tone c vol\n break;\n case 6:\n this.psg.writeRegisterAY(8, val & 0xf);\t// tone a vol\n this.psg.writeRegisterAY(9, (val >> 4) & 0xf); // tone b vol\n break;\n }\n }\n}\n\nexport const _BallyArcade = function() {\n this.__proto__ = new (_BallyAstrocade as any)(true);\n // TODO: inputs[0x13] = 0xfe; // dip switch on arcade\n // TODO: arcade controls, bit blit\n var _in = this.saveControlsState();\n _in.in[0x10] = 0xff; // switches\n _in.in[0x13] = 0xfe; // dip switches\n this.loadControlsState(_in);\n}\n\n/////\n\n//http://glankonian.com/~lance/astrocade_palette.html\nvar ASTROCADE_PALETTE = [0x000000, 0x242424, 0x484848, 0x6D6D6D, 0x919191, 0xB6B6B6, 0xDADADA, 0xFFFFFF, 0x2500BB, 0x4900E0, 0x6E11FF, 0x9235FF, 0xB75AFF, 0xDB7EFF, 0xFFA3FF, 0xFFC7FF, 0x4900B0, 0x6D00D5, 0x9201F9, 0xB625FF, 0xDA4AFF, 0xFF6EFF, 0xFF92FF, 0xFFB7FF, 0x6A009F, 0x8E00C3, 0xB300E7, 0xD718FF, 0xFB3CFF, 0xFF61FF, 0xFF85FF, 0xFFA9FF, 0x870087, 0xAB00AB, 0xD000D0, 0xF40EF4, 0xFF32FF, 0xFF56FF, 0xFF7BFF, 0xFF9FFF, 0x9F006A, 0xC3008E, 0xE700B3, 0xFF07D7, 0xFF2CFB, 0xFF50FF, 0xFF74FF, 0xFF99FF, 0xB00049, 0xD5006D, 0xF90092, 0xFF05B6, 0xFF29DA, 0xFF4DFF, 0xFF72FF, 0xFF96FF, 0xBB0025, 0xE00049, 0xFF006E, 0xFF0692, 0xFF2AB7, 0xFF4FDB, 0xFF73FF, 0xFF98FF, 0xBF0000, 0xE30024, 0xFF0048, 0xFF0B6D, 0xFF3091, 0xFF54B6, 0xFF79DA, 0xFF9DFF, 0xBB0000, 0xE00000, 0xFF0023, 0xFF1447, 0xFF396C, 0xFF5D90, 0xFF82B5, 0xFFA6D9, 0xB00000, 0xD50000, 0xF90000, 0xFF2124, 0xFF4548, 0xFF6A6C, 0xFF8E91, 0xFFB3B5, 0x9F0000, 0xC30000, 0xE70C00, 0xFF3003, 0xFF5527, 0xFF794B, 0xFF9E70, 0xFFC294, 0x870000, 0xAB0000, 0xD01E00, 0xF44200, 0xFF670A, 0xFF8B2E, 0xFFAF53, 0xFFD477, 0x6A0000, 0x8E0D00, 0xB33100, 0xD75600, 0xFB7A00, 0xFF9E17, 0xFFC33B, 0xFFE75F, 0x490000, 0x6D2100, 0x924500, 0xB66A00, 0xDA8E00, 0xFFB305, 0xFFD729, 0xFFFC4E, 0x251100, 0x493500, 0x6E5A00, 0x927E00, 0xB7A300, 0xDBC700, 0xFFEB1E, 0xFFFF43, 0x002500, 0x244900, 0x486D00, 0x6D9200, 0x91B600, 0xB6DB00, 0xDAFF1B, 0xFFFF3F, 0x003700, 0x005B00, 0x238000, 0x47A400, 0x6CC900, 0x90ED00, 0xB5FF1E, 0xD9FF43, 0x004700, 0x006C00, 0x009000, 0x24B400, 0x48D900, 0x6CFD05, 0x91FF29, 0xB5FF4E, 0x005500, 0x007900, 0x009D00, 0x03C200, 0x27E600, 0x4BFF17, 0x70FF3B, 0x94FF5F, 0x005F00, 0x008300, 0x00A800, 0x00CC00, 0x0AF00A, 0x2EFF2E, 0x53FF53, 0x77FF77, 0x006500, 0x008A00, 0x00AE00, 0x00D203, 0x00F727, 0x17FF4B, 0x3BFF70, 0x5FFF94, 0x006800, 0x008C00, 0x00B100, 0x00D524, 0x00F948, 0x05FF6C, 0x29FF91, 0x4EFFB5, 0x006600, 0x008B00, 0x00AF23, 0x00D447, 0x00F86C, 0x00FF90, 0x1EFFB5, 0x43FFD9, 0x006100, 0x008524, 0x00AA48, 0x00CE6D, 0x00F391, 0x00FFB6, 0x1BFFDA, 0x3FFFFE, 0x005825, 0x007C49, 0x00A16E, 0x00C592, 0x00EAB7, 0x00FFDB, 0x1EFFFF, 0x43FFFF, 0x004B49, 0x00706D, 0x009492, 0x00B9B6, 0x00DDDA, 0x05FFFF, 0x29FFFF, 0x4EFFFF, 0x003C6A, 0x00608E, 0x0085B3, 0x00A9D7, 0x00CEFB, 0x17F2FF, 0x3BFFFF, 0x5FFFFF, 0x002A87, 0x004FAB, 0x0073D0, 0x0097F4, 0x0ABCFF, 0x2EE0FF, 0x53FFFF, 0x77FFFF, 0x00179F, 0x003BC3, 0x0060E7, 0x0384FF, 0x27A8FF, 0x4BCDFF, 0x70F1FF, 0x94FFFF, 0x0002B0, 0x0027D5, 0x004BF9, 0x2470FF, 0x4894FF, 0x6CB9FF, 0x91DDFF, 0xB5FFFF, 0x0000BB, 0x0013E0, 0x2337FF, 0x475BFF, 0x6C80FF, 0x90A4FF, 0xB5C9FF, 0xD9EDFF];\n// swap palette RGB to BGR\nfor (var i = 0; i < 256; i++) {\n var x = ASTROCADE_PALETTE[i];\n ASTROCADE_PALETTE[i] = rgb2bgr(x) | 0xff000000;\n}\n\n/*\n0000 F3 [ 4] 196 \tDI\t; disable interrupts\n0001 21 00 20 [10] 197 \tLD\tHL,#0x2000\n0004 7E [ 7] 198 \tLD\tA,(HL) ; A <- mem[0x2000]\n0005 FE 55 [ 7] 199 \tCP\t#0x55 ; found sentinel byte? ($55)\n0007 CA 0D 00 [10] 200 \tJP\tZ,FoundSentinel ; yes, load program\n000A C3 00 20 [10] 201 \tJP\t_main ; jump to test program\n000D 202 \tFoundSentinel:\n000D 31 CE 4F [10] 203 \tLD\tSP,#0x4fce ; position stack below BIOS vars\n0010 CD 84 02 [17] 204 \tCALL\t_bios_init ; misc. bios init routines\n0013 21 05 20 [10] 205 \tLD\tHL,#0x2005 ; cartridge start vector\n0016 7E [ 7] 206 \tLD\tA,(HL)\n0017 23 [ 6] 207 \tINC\tHL\n0018 66 [ 7] 208 \tLD\tH,(HL)\n0019 6F [ 4] 209 \tLD\tL,A\n001A E9 [ 4] 210 \tJP\t(HL) ; jump to cart start vector\n*/\nvar ASTROCADE_MINIMAL_BIOS = [\n 0xf3, 0x21, 0x00, 0x20, 0x7e, 0xfe, 0x55, 0xca, 0x0d, 0x00, 0xc3, 0x00, 0x20,\n 0x31, 0xce, 0x4f,\n 0x21, 0x05, 0x20, 0x7e, 0x23, 0x66, 0x6f,\n 0xe9,\n];\n\nvar ASTROLIBRE_BIOS_LZG = `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`;\n\n", "\nimport { BallyAstrocade } from \"../machine/astrocade\";\nimport { BaseZ80MachinePlatform } from \"../common/baseplatform\";\nimport { Platform } from \"../common/baseplatform\";\nimport { PLATFORMS } from \"../common/emu\";\n\n// http://metopal.com/projects/ballybook/doku.php\n\nconst ASTROCADE_PRESETS = [\n { id: '01-helloworlds.asm', name: 'Hello World (ASM)' },\n { id: '02-telephone.asm', name: 'Telephone (ASM)' },\n { id: '03-horcbpal.asm', name: 'Paddle Demo (ASM)' },\n { id: 'hello.c', name: 'Hello Graphics' },\n { id: 'lines.c', name: 'Lines' },\n { id: 'sprites.c', name: 'Sprites' },\n { id: 'vsync.c', name: 'Sprites w/ VSYNC' },\n { id: 'fastsprites.c', name: 'Fast Sprites' },\n { id: 'music.c', name: 'Music' },\n { id: 'rotate.c', name: 'Rotate Op' },\n { id: 'rainbow.c', name: 'Rainbow' },\n { id: 'cosmic.c', name: 'Cosmic Impalas Game' },\n { id: 'racing.c', name: 'Pseudo 3-D Racing Game' },\n];\n\nconst ASTROCADE_BIOS_PRESETS = [\n { id: 'bios.c', name: 'BIOS' },\n];\n\nclass BallyAstrocadePlatform extends BaseZ80MachinePlatform implements Platform {\n\n newMachine() { return new BallyAstrocade(false); }\n getPresets() { return ASTROCADE_PRESETS; }\n getDefaultExtension() { return \".c\"; };\n readAddress(a) { return this.machine.read(a); }\n getMemoryMap = function() { return { main:[\n {name:'BIOS',start:0x0,size:0x2000,type:'rom'},\n //{name:'Cart ROM',start:0x2000,size:0x2000,type:'rom'},\n //{name:'Magic RAM',start:0x0,size:0x4000,type:'ram'},\n {name:'Screen RAM',start:0x4000,size:0x1000,type:'ram'},\n {name:'BIOS Variables',start:0x4fce,size:0x5000-0x4fce,type:'ram'},\n ] } };\n showHelp() { return \"https://8bitworkshop.com/docs/platforms/astrocade/\"; }\n}\n\nclass BallyAstrocadeBIOSPlatform extends BallyAstrocadePlatform implements Platform {\n\n getPresets() { return ASTROCADE_BIOS_PRESETS; }\n loadROM(title,rom) { this.machine.loadBIOS(rom); }\n\n}\n\nclass BallyArcadePlatform extends BallyAstrocadePlatform implements Platform {\n\n newMachine() { return new BallyAstrocade(true); }\n\n getMemoryMap = function() { return { main:[\n {name:'Magic RAM',start:0x0,size:0x4000,type:'ram'},\n {name:'Screen RAM',start:0x4000,size:0x4000,type:'ram'},\n ] } };\n}\n\nPLATFORMS['astrocade'] = BallyAstrocadePlatform;\nPLATFORMS['astrocade-bios'] = BallyAstrocadeBIOSPlatform;\nPLATFORMS['astrocade-arcade'] = BallyArcadePlatform;\n\n"], - "mappings": "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", - "names": [] -} diff --git a/gen/astrocade-Q5URXEDG.js b/gen/astrocade-Q5URXEDG.js new file mode 100644 index 00000000..6739066b --- /dev/null +++ b/gen/astrocade-Q5URXEDG.js @@ -0,0 +1,14 @@ +import{J as m0,c as f0,d as o0,e as c0,k as B0,q as g0}from"./chunk-42IVW2OL.js";import{$ as q,J as v,W as A,X as a0,Z as d0,aa as N,g as B,l as i0,m as s0,t as n0}from"./chunk-S4FPTY4A.js";import"./chunk-RQFURXHW.js";var p0=d0([[A.UP,16,1],[A.DOWN,16,2],[A.LEFT,16,4],[A.RIGHT,16,8],[A.A,16,16],[A.P2_UP,17,1],[A.P2_DOWN,17,2],[A.P2_LEFT,17,4],[A.P2_RIGHT,17,8],[A.P2_A,17,16],[A.VK_P,20,1],[A.VK_SLASH,20,2],[A.VK_X,20,4],[A.VK_MINUS,20,8],[A.VK_COMMA,20,16],[A.VK_EQUALS,20,32],[A.VK_O,21,1],[A.VK_L,21,2],[A.VK_9,21,4],[A.VK_6,21,8],[A.VK_3,21,16],[A.VK_PERIOD,21,32],[A.VK_I,22,1],[A.VK_K,22,2],[A.VK_8,22,4],[A.VK_5,22,8],[A.VK_2,22,16],[A.VK_0,22,32],[A.VK_U,23,1],[A.VK_J,23,2],[A.VK_7,23,4],[A.VK_4,23,8],[A.VK_1,23,16],[A.VK_BACK_SLASH,23,32]]),l0=2,w0=function(d){var t,i,c,h,g,U,e0,W;let I=d?320:160,G=d?204:102,x0=I>>2,D0=d?16383:4095,N0=256,P0=4293848814,I0=4278190080;var R=new Uint8Array(32),f=0,D=0,m=!1,E=0,Y=0,b=0,M=0,p=0,w=G,K=new Uint32Array(8),j=new Uint8Array(8),Z=0,y=new Uint8Array(d?262:131),l=new Uint8Array(4),X=0,Q=0,H=0,o=new Uint8Array(8),S=0;function V(e,x){i[e]=x,H++,y[(e&D0)/x0|0]=1}function E0(e,x){for(var s=e*4+3,n=0;n<4;n++){var C=e%x0>=(Y&63)?0:4;e0[s--]=K[C+(x&3)],x>>=2}}function t0(e){for(var x=e*I/4,s=0;s>=4);for(var n=0;n<4;n++){var C=x&1?D>>2&3:D&3;s|=C<>=1}x=s,m=!m}if(f&4){if(X&4){var a=2*(~X&3);x=(l[3]>>a&3)<<6|(l[2]>>a&3)<<4|(l[1]>>a&3)<<2|(l[0]>>a&3)<<0}else l[X&3]=x;X++}else{var a=(f&3)<<1,s=x>>a|E;E=x<<8-a&255,x=s}if(f&64&&(x=(x&3)<<6|(x&12)<<2|(x&48)>>2|(x&192)>>6),f&48){var F=i[e],r=0;F&192&&x&192&&(r|=1),F&48&&x&48&&(r|=2),F&12&&x&12&&(r|=4),F&3&&x&3&&(r|=8),f&16&&(x|=F),f&32&&(x^=F),Q=Q&240|r|r<<4}V(e,x)}function J(e,x){j[e&7]=x&255,K[e&7]=$[x&255],T()}function Y0(){var e=Y>>6}function T(){Z=G}function b0(){let e=o[0]|o[1]<<8,x=o[2]&63,s=o[3],n=S&255|o[4]<<8,C=o[5],a=o[6]+1,F,r=0,u=0;r=0,(x&2)==0&&(r=1);function A0(){r&&(x&4)!=0&&(F!==0||(x&8)==0)&&e++,(x&2)!=0&&(r^=1)}function r0(){F!==0&&((x&32)!=0?n++:n--)}for(;a>=0;){let L;for(F=C;F>=0;){let z,_;z=(x&1)==0?e:n,F===0&&(x&8)!=0?_=0:_=c.read(e),(x&1)==0?A0():r0(),z=(x&1)!=0?e:n,V(z,_),(x&1)==0?r0():A0(),u+=4,F--}L=(n&255)+s&256,n=n&65280|n+s&255,(x&16)==0?n+=L:n-=L^256,a--}}this.drawScanline=e=>{e==M&&b&8&&(t.retryInterrupts=!(b&4),this.probe&&this.probe.logInterrupt(p),t.interrupt(p)),e0?(y[e]=0,t0(e),Z--):y[e]&&(y[e]=0,t0(e))},this.init=(e,x,s,n,C)=>{t=x,i=s,R=n,W=C,d?c={read:N([[16384,32767,16383,function(F){return i[F]}],[53248,57343,4095,function(F){return i[F+16384]}],[0,16383,16383,function(F){return g?g[F]:0}],[32768,49151,16383,function(F){return g?g[F+16384]:0}]]),write:N([[16384,32767,16383,V],[0,16383,16383,F0],[53248,57343,4095,function(F,r){V(F+16384,r)}]])}:(U=q(new i0().decode(s0(atob(Q0))),8192),c={read:N([[0,8191,8191,function(F){return U[F]}],[8192,16383,8191,function(F){return g?g[F]:0}],[16384,20479,4095,function(F){return H++,i[F]}]]),write:N([[16384,20479,4095,V],[0,16383,4095,F0]])}),h={read:function(F){F&=31;var r;switch(F){case 8:r=Q,Q=0;break;default:r=R[F];break}return r},write:function(F,r){if(F!=42331){if(F&=255,F>120&&F<128){o[F&7]=r,F==114&&(S=0),F==116&&(S=S+o[3]&255),F==126&&b0();return}switch(F&=31,r&=255,F){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:J(F,r);break;case 9:Y=r,Y0(),T();break;case 10:w=d?r:r>>1,T();break;case 11:var u=t.saveState();J((u.BC>>8)-1,c.read(u.HL));break;case 12:f=r,E=0,X=0,m=!1;break;case 13:p=r;break;case 14:b=r;break;case 15:M=d?r:r>>1;break;case 16:case 17:case 18:case 19:case 20:case 21:case 22:case 23:W.setACRegister(F,r);break;case 24:var u=t.saveState();W.setACRegister((u.BC>>8)-1,c.read(u.HL));break;case 25:D=r;break;case 26:case 27:case 28:case 29:case 30:break;default:break}}}},e.connectCPUMemoryBus(c),e.connectCPUIOBus(h),this.membus=c,this.iobus=h;for(var a=0;a<8;a++)J(a,a)},this.resetWaitStates=function(e){var x=e{t.loadState(e.c),i.set(e.ram),K.set(e.palette),j.set(e.palinds),f=e.magicop,D=e.xpand,m=e.xplower,E=e.shift2,Y=e.horcb,b=e.inmod,M=e.inlin,p=e.infbk,w=e.verbl,X=e.rotcount,l.set(e.rotdata),Q=e.intst,R.set(e.inputs),o.set(e.patboard),S=e.patdest,T()},this.saveState=()=>({c:t.saveState(),ram:i.slice(0),inputs:R.slice(0),palette:K.slice(0),palinds:j.slice(0),magicop:f,xpand:D,xplower:m,shift2:E,horcb:Y,inmod:b,inlin:M,infbk:p,verbl:w,rotcount:X,rotdata:l.slice(0),intst:Q,patboard:o.slice(0),patdest:S}),this.reset=()=>{f=D=b=M=p=E=Y=0,w=G,m=!1},this.toLongString=e=>{var x="";x+=` + INLIN: `+e.inlin,x+=` + VERBL: `+e.verbl,x+=` +MAGICOP: $`+B(e.magicop),x+=` + XPAND: $`+B(e.xpand),x+=` +XPLOWER: `+e.xplower,x+=` + SHIFT2: $`+B(e.shift2),x+=` + HORCB: $`+B(e.horcb),x+=` + INMOD: $`+B(e.inmod),x+=` + INFBK: $`+B(e.infbk),x+=` + INTST: $`+B(e.intst),x+=` +Palette: `;for(var s=0;s<8;s++)x+=B(j[s]);return x+=` +`,x},this.connectVideo=function(e){e0=e},this.loadROM=function(e){g=e},this.loadBIOS=function(e){U=e},this.getVisiblePixelWords=function(){return w*I}},O=class extends g0{constructor(t){super();this.cpuFrequency=1789e3;this.numTotalScanlines=262;this.sampleRate=60*262*l0;this.arcade=t,this.cpu=new f0,this.psg=new X0(new o0),this.audioadapter=new B0(this.psg.psg,l0,this.sampleRate),this.handler=a0(this.inputs,p0),this.defaultROMSize=t?45056:8192,this.ram=new Uint8Array(t?20480:4096),this.numVisibleScanlines=t?204:102,this.canvasWidth=t?320:160,this.cpuCyclesPerLine=this.cpuFrequency/(60*this.numVisibleScanlines*1.286)|0,this.m=new w0(t),this.m.init(this,this.cpu,this.ram,this.inputs,this.psg),t&&(this.inputs[16]=255,this.inputs[17]=255,this.inputs[18]=0,this.inputs[19]=8)}read(t){return this.m.membus.read(t)}write(t,i){this.m.membus.write(t,i)}connectVideo(t){super.connectVideo(t),this.frontbuffer=t,this.backbuffer=new Uint32Array(t.length),this.m.connectVideo(this.backbuffer)}preFrame(){this.m.resetWaitStates(0)}postFrame(){var t=this.m.getVisiblePixelWords();this.frontbuffer.set(this.backbuffer.slice(0,t),0),this.frontbuffer.fill(0,t)}setPaddleInput(t,i){switch(t){case 0:this.inputs[28]=i&255;break;case 1:this.inputs[29]=i&255;break}}startScanline(){this.audio&&this.audioadapter.generate(this.audio)}drawScanline(){var t=this.scanline;this.m.drawScanline(t)}advanceCPU(){var t=super.advanceCPU(),i=this.m.resetWaitStates(this.scanline);return i&&(t+=i,this.probe.logClocks(i)),t}loadROM(t){super.loadROM(t),this.m.loadROM(this.rom),this.reset()}loadBIOS(t){this.m.loadBIOS(q(t,8192)),this.reset()}reset(){super.reset(),this.m.reset()}loadState(t){this.m.loadState(t)}saveState(){return this.m.saveState()}getDebugCategories(){return["CPU","Stack","Astro"]}getDebugInfo(t,i){switch(t){case"Astro":return this.m.toLongString(i)}}getRasterCanvasPosition(){return{x:this.getRasterX(),y:this.getRasterY()}}getVideoParams(){return this.arcade?{width:320,height:204,rotate:180}:{width:160,height:102}}},X0=class extends c0{setACRegister(t,i){switch(t&=7,i&=255,t){case 0:this.psg.setClock(1789e3*16/(i+1)),this.psg.writeRegisterAY(7,7^255);break;case 1:case 2:case 3:var c=(t-1)*2,h=i*2+1;this.psg.writeRegisterAY(c,h&255),this.psg.writeRegisterAY(c+1,h>>8&255);break;case 5:this.psg.writeRegisterAY(10,i&15);break;case 6:this.psg.writeRegisterAY(8,i&15),this.psg.writeRegisterAY(9,i>>4&15);break}}},$=[0,2368548,4737096,7171437,9539985,11974326,14342874,16777215,2425019,4784352,7213567,9582079,12016383,14384895,16753663,16762879,4784304,7143637,9568761,11937279,14306047,16740095,16749311,16758783,6946975,9306307,11731175,14096639,16465151,16736767,16745983,16755199,8847495,11206827,13631696,15994612,16724735,16733951,16743423,16752639,10420330,12779662,15138995,16713687,16723195,16732415,16741631,16751103,11534409,13959277,16318610,16713142,16722394,16731647,16741119,16750335,12255269,14680137,16711790,16713362,16722615,16732123,16741375,16750847,12517376,14876708,16711752,16714605,16724113,16733366,16742874,16752127,12255232,14680064,16711715,16716871,16726380,16735632,16745141,16754393,11534336,13959168,16318464,16720164,16729416,16738924,16748177,16757685,10420224,12779520,15141888,16723971,16733479,16742731,16752240,16761492,8847360,11206656,13639168,16007680,16738058,16747310,16756563,16766071,6946816,9309440,11743488,14112256,16480768,16752151,16761659,16770911,4784128,7151872,9585920,11954688,14323200,16757509,16766761,16776270,2429184,4797696,7232e3,9600512,12034816,14403328,16771870,16777027,9472,2377984,4746496,7180800,9549312,11983616,14352155,16777023,14080,23296,2326528,4695040,7129344,9497856,11927326,14286659,18176,27648,36864,2405376,4774144,7142661,9568041,11927374,21760,30976,40192,246272,2614784,4980503,7405371,9764703,24320,33536,43008,52224,716810,3079982,5504851,7864183,25856,35328,44544,53763,63271,1572683,3932016,6291348,26624,35840,45312,54564,63816,393068,2752401,5177269,26112,35584,44835,54343,63596,65424,2031541,4456409,24832,34084,43592,52845,62353,65462,1834970,4194302,22565,31817,41326,50578,60087,65499,2031615,4456447,19273,28781,38034,47542,56794,393215,2752511,5177343,15466,24718,34227,43479,52987,1569535,3932159,6291455,10887,20395,29648,38900,703743,3072255,5505023,7864319,6047,15299,24807,230655,2599167,4967935,7401983,9764863,688,10197,19449,2388223,4756735,7125503,9559551,11927551,187,5088,2308095,4676607,7110911,9479423,11913727,14282239];for(P=0;P<256;P++)C0=$[P],$[P]=n0(C0)|4278190080;var C0,P;var Q0="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";var S0=[{id:"01-helloworlds.asm",name:"Hello World (ASM)"},{id:"02-telephone.asm",name:"Telephone (ASM)"},{id:"03-horcbpal.asm",name:"Paddle Demo (ASM)"},{id:"hello.c",name:"Hello Graphics"},{id:"lines.c",name:"Lines"},{id:"sprites.c",name:"Sprites"},{id:"vsync.c",name:"Sprites w/ VSYNC"},{id:"fastsprites.c",name:"Fast Sprites"},{id:"music.c",name:"Music"},{id:"rotate.c",name:"Rotate Op"},{id:"rainbow.c",name:"Rainbow"},{id:"cosmic.c",name:"Cosmic Impalas Game"},{id:"racing.c",name:"Pseudo 3-D Racing Game"}],M0=[{id:"bios.c",name:"BIOS"}],V0=[{id:"hello.c",name:"Hello Graphics"}],k=class extends m0{constructor(){super(...arguments);this.getMemoryMap=function(){return{main:[{name:"BIOS",start:0,size:8192,type:"rom"},{name:"Screen RAM",start:16384,size:4096,type:"ram"},{name:"BIOS Variables",start:20430,size:20480-20430,type:"ram"}]}}}newMachine(){return new O(!1)}getPresets(){return S0}getDefaultExtension(){return".c"}readAddress(t){return this.machine.read(t)}showHelp(){return"https://8bitworkshop.com/docs/platforms/astrocade/"}},u0=class extends k{getPresets(){return M0}loadROM(t,i){this.machine.loadBIOS(i)}},h0=class extends k{constructor(){super(...arguments);this.getMemoryMap=function(){return{main:[{name:"ROM",start:0,size:16384,type:"rom"},{name:"Magic RAM",start:0,size:16384,type:"ram"},{name:"Screen RAM",start:16384,size:16384,type:"ram"},{name:"ROM",start:32768,size:16384,type:"rom"}]}}}newMachine(){return new O(!0)}getPresets(){return V0}};v.astrocade=k;v["astrocade-bios"]=u0;v["astrocade-arcade"]=h0; +//# sourceMappingURL=astrocade-Q5URXEDG.js.map diff --git a/gen/astrocade-Q5URXEDG.js.map b/gen/astrocade-Q5URXEDG.js.map new file mode 100644 index 00000000..1d3fcd0c --- /dev/null +++ b/gen/astrocade-Q5URXEDG.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["../src/machine/astrocade.ts", "../src/platform/astrocade.ts"], + "sourcesContent": ["\nimport { Z80, Z80State } from \"../common/cpu/ZilogZ80\";\nimport { BasicScanlineMachine, AcceptsPaddleInput, Bus } from \"../common/devices\";\nimport { KeyFlags, newAddressDecoder, padBytes, Keys, makeKeycodeMap, newKeyboardHandler } from \"../common/emu\";\nimport { TssChannelAdapter, MasterAudio, AY38910_Audio } from \"../common/audio\";\nimport { hex, rgb2bgr, lzgmini, stringToByteArray } from \"../common/util\";\n\n// http://metopal.com/projects/ballybook/doku.php\n\n// TODO: fix keys, more controllers, vibrato/noise, border color\n// http://atariage.com/forums/topic/251416-programming-the-bally-arcadeastrocade/\n// https://ballyalley.com/faqs/BPA%20Video%20Hardware%20FAQ/Bally_Professional_Arcade_Video_Hardware%20(2001)(Tony%20Miller).pdf\n// https://atariage.com/forums/topic/290858-notes-from-a-2019-interview-with-jamie-fenton/ (http://www.fentonia.com/bio/)\n// https://thehistoryofhowweplay.wordpress.com/2018/04/03/interview-tom-mchugh/\n// https://ballyalley.com/faqs/Programmers%20of%20the%20Astrocade%20Built-In%20Programs.txt\n\nconst ASTROCADE_KEYCODE_MAP = makeKeycodeMap([\n // player 1\n [Keys.UP, 0x10, 0x1],\n [Keys.DOWN, 0x10, 0x2],\n [Keys.LEFT, 0x10, 0x4],\n [Keys.RIGHT, 0x10, 0x8],\n [Keys.A, 0x10, 0x10],\n // player 2\n [Keys.P2_UP, 0x11, 0x1],\n [Keys.P2_DOWN, 0x11, 0x2],\n [Keys.P2_LEFT, 0x11, 0x4],\n [Keys.P2_RIGHT, 0x11, 0x8],\n [Keys.P2_A, 0x11, 0x10],\n // keypad $14\n [Keys.VK_P, 0x14, 0x1],\n [Keys.VK_SLASH, 0x14, 0x2],\n [Keys.VK_X, 0x14, 0x4],\n [Keys.VK_MINUS, 0x14, 0x8],\n [Keys.VK_COMMA, 0x14, 0x10],\n [Keys.VK_EQUALS, 0x14, 0x20],\n // keypad $15\n [Keys.VK_O, 0x15, 0x1],\n [Keys.VK_L, 0x15, 0x2],\n [Keys.VK_9, 0x15, 0x4],\n [Keys.VK_6, 0x15, 0x8],\n [Keys.VK_3, 0x15, 0x10],\n [Keys.VK_PERIOD, 0x15, 0x20],\n // keypad $16\n [Keys.VK_I, 0x16, 0x1],\n [Keys.VK_K, 0x16, 0x2],\n [Keys.VK_8, 0x16, 0x4],\n [Keys.VK_5, 0x16, 0x8],\n [Keys.VK_2, 0x16, 0x10],\n [Keys.VK_0, 0x16, 0x20],\n // keypad $17\n [Keys.VK_U, 0x17, 0x1],\n [Keys.VK_J, 0x17, 0x2],\n [Keys.VK_7, 0x17, 0x4],\n [Keys.VK_4, 0x17, 0x8],\n [Keys.VK_1, 0x17, 0x10],\n [Keys.VK_BACK_SLASH, 0x17, 0x20],\n]);\n\nconst audioOversample = 2;\n\nconst _BallyAstrocade = function(arcade:boolean) {\n\n var cpu : Z80;\n var ram : Uint8Array;\n var membus, iobus : Bus;\n var rom, bios;\n var pixels;\n var psg;\n //var watchdog_counter;\n const swidth = arcade ? 320 : 160;\n const sheight = arcade ? 204 : 102;\n const swbytes = swidth >> 2;\n const samask = arcade ? 0x3fff : 0xfff;\n const INITIAL_WATCHDOG = 256;\n const PIXEL_ON = 0xffeeeeee;\n const PIXEL_OFF = 0xff000000;\n\n // state variables\n var inputs = new Uint8Array(0x20);\n var magicop = 0;\n var xpand = 0;\n var xplower = false;\n var shift2 = 0;\n var horcb = 0;\n var inmod = 0;\n var inlin = 0;\n var infbk = 0;\n var verbl = sheight;\n var palette = new Uint32Array(8);\n var palinds = new Uint8Array(8);\n var refreshlines = 0;\n var dirtylines = new Uint8Array(arcade ? 262 : 131);\n var rotdata = new Uint8Array(4);\n var rotcount = 0;\n var intst = 0;\n var waitstates = 0;\n var patboard = new Uint8Array(0x08);\n var patdest = 0;\n\n function ramwrite(a: number, v: number) {\n // set RAM\n ram[a] = v;\n waitstates++;\n // mark scanline as dirty\n dirtylines[((a & samask) / swbytes) | 0] = 1;\n // this was old behavior where we updated instantly\n // but it had problems if we had mid-screen palette changes\n //ramupdate(a, v);\n }\n\n function ramupdate(a: number, v: number) {\n var ofs = a * 4 + 3; // 4 pixels per byte\n for (var i = 0; i < 4; i++) {\n var lr = ((a % swbytes) >= (horcb & 0x3f)) ? 0 : 4;\n pixels[ofs--] = palette[lr + (v & 3)];\n v >>= 2;\n }\n }\n\n function refreshline(y: number) {\n var ofs = y * swidth / 4;\n for (var i = 0; i < swidth / 4; i++)\n ramupdate(ofs + i, ram[ofs + i]);\n }\n\n function magicwrite(a: number, v: number) {\n // expand\n if (magicop & 0x8) {\n var v2 = 0;\n if (!xplower)\n v >>= 4;\n for (var i = 0; i < 4; i++) {\n var pix = (v & 1) ? ((xpand >> 2) & 3) : (xpand & 3);\n v2 |= pix << (i * 2);\n v >>= 1;\n }\n v = v2;\n xplower = !xplower;\n }\n // rotate\n if (magicop & 0x4) {\n if (rotcount & 4) {\n // drain buffer\n var sh = 2 * (~rotcount & 3);\n v = (((rotdata[3] >> sh) & 3) << 6) |\n (((rotdata[2] >> sh) & 3) << 4) |\n (((rotdata[1] >> sh) & 3) << 2) |\n (((rotdata[0] >> sh) & 3) << 0);\n } else {\n // fill buffer\n rotdata[rotcount & 3] = v;\n }\n rotcount++;\n } else {\n // shift\n var sh = (magicop & 3) << 1;\n var v2 = (v >> sh) | shift2;\n shift2 = (v << (8 - sh)) & 0xff;\n v = v2;\n }\n // flop\n if (magicop & 0x40) {\n v =\n ((v & 0x03) << 6) |\n ((v & 0x0c) << 2) |\n ((v & 0x30) >> 2) |\n ((v & 0xc0) >> 6);\n }\n // or/xor\n if (magicop & 0x30) {\n var oldv = ram[a];\n // collision detect\n var icpt = 0;\n if ((oldv & 0xc0) && (v & 0xc0)) icpt |= 0x1;\n if ((oldv & 0x30) && (v & 0x30)) icpt |= 0x2;\n if ((oldv & 0x0c) && (v & 0x0c)) icpt |= 0x4;\n if ((oldv & 0x03) && (v & 0x03)) icpt |= 0x8;\n // apply op\n if (magicop & 0x10)\n v |= oldv;\n if (magicop & 0x20)\n v ^= oldv; // TODO: what if both?\n // upper 4 bits persist, lower are just since last write\n intst = (intst & 0xf0) | icpt | (icpt << 4);\n }\n // commit write to ram/screen\n ramwrite(a, v);\n }\n\n function setpalette(a: number, v: number) {\n palinds[a & 7] = v & 0xff;\n palette[a & 7] = ASTROCADE_PALETTE[v & 0xff];\n refreshall();\n }\n\n function setbordercolor() {\n var col = horcb >> 6;\n // TODO\n }\n\n function refreshall() {\n refreshlines = sheight;\n }\n\n // bally astrocade pattern board\n // https://github.com/mamedev/mame/blob/7ff10685c56a6e123336c684e5e96fdb9e8b3674/src/mame/midway/astrocde_v.cpp#L726\n function xfer_patboard() {\n let m_pattern_source = patboard[0] | (patboard[1] << 8);\n let m_pattern_mode = patboard[2] & 0x3f;\n let m_pattern_skip = patboard[3];\n let m_pattern_dest = (patdest & 0xff) | (patboard[4] << 8);\n let m_pattern_width = patboard[5];\n let m_pattern_height = patboard[6] + 1;\n\n let curwidth: number;\n let u13ff: number = 0;\n let cycles: number = 0;\n\n u13ff = 0;\n\n if ((m_pattern_mode & 0x02) === 0) {\n u13ff = 1;\n }\n\n function incrementSource(): void {\n if (u13ff && (m_pattern_mode & 0x04) !== 0 && (curwidth !== 0 || (m_pattern_mode & 0x08) === 0)) {\n m_pattern_source++;\n }\n\n if ((m_pattern_mode & 0x02) !== 0) {\n u13ff ^= 1;\n }\n }\n\n function incrementDest(): void {\n if (curwidth !== 0) {\n if ((m_pattern_mode & 0x20) !== 0) {\n m_pattern_dest++;\n } else {\n m_pattern_dest--;\n }\n }\n }\n\n // Loop over height\n while (m_pattern_height >= 0) {\n let carry: number;\n\n curwidth = m_pattern_width;\n\n // Loop over width\n while (curwidth >= 0) {\n let busaddr: number;\n let busdata: number;\n\n // Read Phase\n busaddr = (m_pattern_mode & 0x01) === 0 ? m_pattern_source : m_pattern_dest;\n\n if (curwidth === 0 && (m_pattern_mode & 0x08) !== 0) {\n busdata = 0;\n } else {\n busdata = membus.read(m_pattern_source);\n }\n\n if ((m_pattern_mode & 0x01) === 0) {\n incrementSource();\n } else {\n incrementDest();\n }\n\n // Write Phase\n busaddr = (m_pattern_mode & 0x01) !== 0 ? m_pattern_source : m_pattern_dest;\n ramwrite(busaddr, busdata);\n\n if ((m_pattern_mode & 0x01) === 0) {\n incrementDest();\n } else {\n incrementSource();\n }\n\n cycles += 4;\n curwidth--;\n }\n\n // At the end of each row, adjust m_pattern_dest\n carry = ((m_pattern_dest & 0xff) + m_pattern_skip) & 0x100;\n m_pattern_dest = (m_pattern_dest & 0xff00) | ((m_pattern_dest + m_pattern_skip) & 0xff);\n\n if ((m_pattern_mode & 0x10) === 0) {\n m_pattern_dest += carry;\n } else {\n m_pattern_dest -= carry ^ 0x100;\n }\n\n m_pattern_height--;\n }\n\n // Adjust m_maincpu.icount\n // m_maincpu.adjust_icount(-cycles);\n // Replace the above line with the actual adjustment of icount.\n }\n \n this.drawScanline = (sl:number) => {\n // interrupt\n if (sl == inlin && (inmod & 0x8)) {\n cpu.retryInterrupts = !(inmod & 0x4);\n this.probe && this.probe.logInterrupt(infbk);\n cpu.interrupt(infbk);\n }\n // refresh this line in frame buffer?\n if (sl < sheight && refreshlines > 0) {\n dirtylines[sl] = 0;\n refreshline(sl);\n refreshlines--;\n }\n else if (dirtylines[sl]) {\n dirtylines[sl] = 0;\n refreshline(sl);\n }\n }\n \n this.init = (machine:BallyAstrocade, c:Z80, r:Uint8Array, inp:Uint8Array, psgg) => {\n cpu = c;\n ram = r;\n inputs = inp;\n psg = psgg;\n if (!arcade) {\n //bios = padBytes(ASTROCADE_MINIMAL_BIOS, 0x2000);\n bios = padBytes(new lzgmini().decode(stringToByteArray(atob(ASTROLIBRE_BIOS_LZG))), 0x2000);\n // game console\n membus = {\n read: newAddressDecoder([\n [0x0000, 0x1fff, 0x1fff, function(a) { return bios[a]; }],\n [0x2000, 0x3fff, 0x1fff, function(a) { return rom ? rom[a] : 0; }],\n [0x4000, 0x4fff, 0xfff, function(a) { waitstates++; return ram[a]; }],\n ]),\n write: newAddressDecoder([\n [0x4000, 0x4fff, 0xfff, ramwrite],\n [0x0000, 0x3fff, 0xfff, magicwrite],\n ]),\n }\n } else {\n // arcade game (TODO: wait states 1/4 of the time)\n membus = {\n read: newAddressDecoder([\n [0x4000, 0x7fff, 0x3fff, function(a) { return ram[a]; }],\t// screen RAM\n [0xd000, 0xdfff, 0x0fff, function(a) { return ram[a + 0x4000]; }], // static RAM\n [0x0000, 0x3fff, 0x3fff, function(a) { return rom ? rom[a] : 0; }], // ROM\n [0x8000, 0xbfff, 0x3fff, function(a) { return rom ? rom[a + 0x4000] : 0; }], // ROM\n ]),\n write: newAddressDecoder([\n [0x4000, 0x7fff, 0x3fff, ramwrite],\n [0x0000, 0x3fff, 0x3fff, magicwrite],\n [0xd000, 0xdfff, 0x0fff, function(a, v) { ramwrite(a + 0x4000, v); }], // static RAM\n ]),\n }\n }\n iobus = {\n read: function(addr) {\n addr &= 0x1f;\n var rtn;\n switch (addr) {\n case 8:\n rtn = intst;\n intst = 0;\n break;\n default:\n rtn = inputs[addr];\n break;\n // $10 = watchdog\n }\n return rtn;\n },\n write: function(addr, val) {\n if (addr == 0xa55b) {\n // TODO: protected_ram_enable_w\n return;\n }\n addr &= 0xff;\n // pattern board\n if (addr > 0x78 && addr < 0x80) {\n patboard[addr & 7] = val;\n if (addr == 0x72) { patdest = 0; }\n if (addr == 0x74) { patdest = (patdest + patboard[3]) & 0xff; }\n if (addr == 0x7e) { xfer_patboard(); }\n return;\n }\n addr &= 0x1f;\n val &= 0xff;\n switch (addr) {\n case 0:\n case 1:\n case 2:\n case 3:\n case 4:\n case 5:\n case 6:\n case 7:\n setpalette(addr, val);\n break;\n case 9: // HORCB (horizontal boundary byte)\n horcb = val;\n setbordercolor();\n refreshall();\n break;\n case 0xa: // VERBL (vertical blank)\n verbl = arcade ? val : val >> 1;\n refreshall();\n break;\n case 0xb: // OTIR (set palette)\n var c = cpu.saveState();\n //console.log(c.BC>>8, c.HL);\n setpalette((c.BC >> 8) - 1, membus.read(c.HL));\n break;\n case 0xc: // magic register\n magicop = val;\n shift2 = 0;\n rotcount = 0;\n xplower = false;\n break;\n case 0xd: // INFBK (interrupt feedback)\n infbk = val;\n break;\n case 0xe: // INMOD (interrupt enable)\n inmod = val;\n break;\n case 0xf: // INLIN (interrupt line)\n inlin = arcade ? val : val >> 1;\n break;\n case 0x10:\n case 0x11:\n case 0x12:\n case 0x13:\n case 0x14:\n case 0x15:\n case 0x16:\n case 0x17:\n psg.setACRegister(addr, val);\n break;\n case 0x18:\n var c = cpu.saveState();\n psg.setACRegister((c.BC >> 8) - 1, membus.read(c.HL));\n break;\n case 0x19: // XPAND\n xpand = val;\t\n break;\n case 0x1a:\n case 0x1b:\n case 0x1c:\n case 0x1d:\n case 0x1e:\n //psg2.setACRegister(addr - 0x1a, val);\n break;\n default:\n //console.log('IO write', hex(addr, 4), hex(val, 2));\n break;\n }\n }\n }\n machine.connectCPUMemoryBus(membus);\n machine.connectCPUIOBus(iobus);\n this.membus = membus;\n this.iobus = iobus;\n // default palette\n for (var i = 0; i < 8; i++) {\n setpalette(i,i);\n }\n };\n\n this.resetWaitStates = function(sl) {\n var n = sl < verbl ? waitstates : 0; // only wait if video active\n waitstates = 0;\n return n;\n }\n\n this.loadState = (state) => {\n cpu.loadState(state.c);\n ram.set(state.ram);\n palette.set(state.palette);\n palinds.set(state.palinds);\n magicop = state.magicop;\n xpand = state.xpand;\n xplower = state.xplower;\n shift2 = state.shift2;\n horcb = state.horcb;\n inmod = state.inmod;\n inlin = state.inlin;\n infbk = state.infbk;\n verbl = state.verbl;\n rotcount = state.rotcount;\n rotdata.set(state.rotdata);\n intst = state.intst;\n inputs.set(state.inputs);\n patboard.set(state.patboard);\n patdest = state.patdest;\n refreshall();\n }\n \n this.saveState = () => {\n return {\n c: cpu.saveState(),\n ram: ram.slice(0),\n inputs: inputs.slice(0),\n palette: palette.slice(0),\n palinds: palinds.slice(0),\n magicop: magicop,\n xpand: xpand,\n xplower: xplower,\n shift2: shift2,\n horcb: horcb,\n inmod: inmod,\n inlin: inlin,\n infbk: infbk,\n verbl: verbl,\n rotcount: rotcount,\n rotdata: rotdata.slice(0),\n intst: intst,\n patboard: patboard.slice(0),\n patdest: patdest,\n };\n }\n this.reset = () => {\n // TODO?\n magicop = xpand = inmod = inlin = infbk = shift2 = horcb = 0;\n verbl = sheight;\n xplower = false;\n //watchdog_counter = INITIAL_WATCHDOG;\n }\n \n this.toLongString = (st) => {\n var s = \"\";\n //s += \" Scan Y: \" + st.sl;\n s += \"\\n INLIN: \" + st.inlin;\n s += \"\\n VERBL: \" + st.verbl;\n s += \"\\nMAGICOP: $\" + hex(st.magicop);\n s += \"\\n XPAND: $\" + hex(st.xpand);\n s += \"\\nXPLOWER: \" + st.xplower;\n s += \"\\n SHIFT2: $\" + hex(st.shift2);\n s += \"\\n HORCB: $\" + hex(st.horcb);\n s += \"\\n INMOD: $\" + hex(st.inmod);\n s += \"\\n INFBK: $\" + hex(st.infbk);\n s += \"\\n INTST: $\" + hex(st.intst); // intercept status\n s += \"\\nPalette: \";\n for (var i = 0; i < 8; i++)\n s += hex(palinds[i]);\n s += \"\\n\";\n return s;\n }\n \n this.connectVideo = function(pix) {\n pixels = pix;\n }\n this.loadROM = function(data) {\n rom = data;\n }\n this.loadBIOS = function(data) {\n bios = data;\n }\n this.getVisiblePixelWords = function() {\n return verbl * swidth;\n }\n}\n\nexport class BallyAstrocade extends BasicScanlineMachine implements AcceptsPaddleInput {\n \n cpuFrequency = 1789000;\n numTotalScanlines = 262;\n numVisibleScanlines : number;\n cpuCyclesPerLine : number;\n defaultROMSize : number;\n canvasWidth : number;\n sampleRate = 60 * 262 * audioOversample;\n ram : Uint8Array;\n cpu : Z80;\n m; // _BallyAstrocade\n arcade : boolean;\n\n psg: AstrocadeAudio;\n audioadapter;\n backbuffer : Uint32Array;\n frontbuffer : Uint32Array;\n\n constructor(arcade:boolean) {\n super();\n this.arcade = arcade;\n this.cpu = new Z80();\n this.psg = new AstrocadeAudio(new MasterAudio());\n this.audioadapter = new TssChannelAdapter(this.psg.psg, audioOversample, this.sampleRate);\n this.handler = newKeyboardHandler(this.inputs, ASTROCADE_KEYCODE_MAP);\n this.defaultROMSize = arcade ? 0xb000 : 0x2000;\n this.ram = new Uint8Array(arcade ? 0x5000 : 0x1000);\n this.numVisibleScanlines = arcade ? 204 : 102;\n this.canvasWidth = arcade ? 320 : 160;\n this.cpuCyclesPerLine = (this.cpuFrequency / (60 * this.numVisibleScanlines * 1.286)) | 0;\n //this.cpuCyclesPerHBlank = Math.floor(this.cpuCyclesPerLine * 0.33);\n //this.cpuCyclesPerVisible = this.cpuCyclesPerLine - this.cpuCyclesPerHBlank;\n this.m = new _BallyAstrocade(arcade);\n this.m.init(this, this.cpu, this.ram, this.inputs, this.psg);\n if (arcade) {\n this.inputs[0x10] = 0xff; // switches (active low)\n this.inputs[0x11] = 0xff; // switches (active low)\n this.inputs[0x12] = 0x00;\n this.inputs[0x13] = 0x08; // dip switches\n }\n }\n \n read(a:number) : number {\n return this.m.membus.read(a);\n }\n write(a:number, v:number) : void {\n this.m.membus.write(a,v);\n }\n \n connectVideo(pixels:Uint32Array) : void {\n super.connectVideo(pixels);\n this.frontbuffer = pixels;\n this.backbuffer = new Uint32Array(pixels.length);\n this.m.connectVideo(this.backbuffer);\n }\n preFrame() {\n this.m.resetWaitStates(0);\n }\n postFrame() {\n // copy back buffer to front buffer, omitting bottom non-visible pixels\n var nbytes = this.m.getVisiblePixelWords();\n this.frontbuffer.set(this.backbuffer.slice(0, nbytes), 0);\n this.frontbuffer.fill(0, nbytes);\n }\n\n setPaddleInput(controller:number, value:number) : void {\n switch (controller) {\n case 0: this.inputs[0x1c] = value & 0xff; break;\n case 1: this.inputs[0x1d] = value & 0xff; break;\n }\n }\n\n startScanline() {\n this.audio && this.audioadapter.generate(this.audio);\n }\n \n drawScanline() {\n var sl = this.scanline;\n this.m.drawScanline(sl);\n /*\n if (watchdog_counter-- <= 0) {\n console.log(\"WATCHDOG FIRED\"); // TODO: alert on video\n this.reset();\n }\n */\n }\n\n advanceCPU() {\n var clk = super.advanceCPU();\n // TODO: disable 33% of the time (hblank)\n var xtra = this.m.resetWaitStates(this.scanline);\n if (xtra) {\n clk += xtra;\n this.probe.logClocks(xtra);\n }\n return clk;\n }\n\n loadROM(data) {\n super.loadROM(data);\n this.m.loadROM(this.rom);\n this.reset();\n }\n loadBIOS(data) {\n this.m.loadBIOS(padBytes(data, 0x2000));\n this.reset();\n }\n reset() {\n super.reset();\n this.m.reset();\n }\n loadState(state) {\n this.m.loadState(state);\n }\n saveState() {\n return this.m.saveState();\n }\n getDebugCategories() {\n return ['CPU','Stack','Astro'];\n }\n getDebugInfo(category, state) {\n switch (category) {\n case 'Astro': return this.m.toLongString(state);\n }\n }\n getRasterCanvasPosition() {\n return { x: this.getRasterX(), y: this.getRasterY() };\n }\n getVideoParams() {\n if (this.arcade) {\n return { width: 320, height: 204, rotate: 180 };\n } else {\n return { width: 160, height: 102 };\n }\n }\n}\n\n/////\n\n// TODO: https://github.com/mamedev/mame/blob/master/src/devices/sound/astrocde.cpp\nclass AstrocadeAudio extends AY38910_Audio {\n setACRegister(addr: number, val: number) {\n addr &= 0x7;\n val &= 0xff;\n switch (addr) {\n case 0:\n this.psg.setClock(1789000 * 16 / (val + 1));\n this.psg.writeRegisterAY(7, 0x7 ^ 0xff); // disable noise\n break;\n case 1:\n case 2:\n case 3:\n var i = (addr - 1) * 2;\n var j = val * 2 + 1;\n this.psg.writeRegisterAY(i, j & 0xff); // freq lo\n this.psg.writeRegisterAY(i + 1, (j >> 8) & 0xff); // freq hi\n break;\n case 5:\n this.psg.writeRegisterAY(10, val & 0xf); // tone c vol\n break;\n case 6:\n this.psg.writeRegisterAY(8, val & 0xf);\t// tone a vol\n this.psg.writeRegisterAY(9, (val >> 4) & 0xf); // tone b vol\n break;\n }\n }\n}\n\n/////\n\n//http://glankonian.com/~lance/astrocade_palette.html\nvar ASTROCADE_PALETTE = [0x000000, 0x242424, 0x484848, 0x6D6D6D, 0x919191, 0xB6B6B6, 0xDADADA, 0xFFFFFF, 0x2500BB, 0x4900E0, 0x6E11FF, 0x9235FF, 0xB75AFF, 0xDB7EFF, 0xFFA3FF, 0xFFC7FF, 0x4900B0, 0x6D00D5, 0x9201F9, 0xB625FF, 0xDA4AFF, 0xFF6EFF, 0xFF92FF, 0xFFB7FF, 0x6A009F, 0x8E00C3, 0xB300E7, 0xD718FF, 0xFB3CFF, 0xFF61FF, 0xFF85FF, 0xFFA9FF, 0x870087, 0xAB00AB, 0xD000D0, 0xF40EF4, 0xFF32FF, 0xFF56FF, 0xFF7BFF, 0xFF9FFF, 0x9F006A, 0xC3008E, 0xE700B3, 0xFF07D7, 0xFF2CFB, 0xFF50FF, 0xFF74FF, 0xFF99FF, 0xB00049, 0xD5006D, 0xF90092, 0xFF05B6, 0xFF29DA, 0xFF4DFF, 0xFF72FF, 0xFF96FF, 0xBB0025, 0xE00049, 0xFF006E, 0xFF0692, 0xFF2AB7, 0xFF4FDB, 0xFF73FF, 0xFF98FF, 0xBF0000, 0xE30024, 0xFF0048, 0xFF0B6D, 0xFF3091, 0xFF54B6, 0xFF79DA, 0xFF9DFF, 0xBB0000, 0xE00000, 0xFF0023, 0xFF1447, 0xFF396C, 0xFF5D90, 0xFF82B5, 0xFFA6D9, 0xB00000, 0xD50000, 0xF90000, 0xFF2124, 0xFF4548, 0xFF6A6C, 0xFF8E91, 0xFFB3B5, 0x9F0000, 0xC30000, 0xE70C00, 0xFF3003, 0xFF5527, 0xFF794B, 0xFF9E70, 0xFFC294, 0x870000, 0xAB0000, 0xD01E00, 0xF44200, 0xFF670A, 0xFF8B2E, 0xFFAF53, 0xFFD477, 0x6A0000, 0x8E0D00, 0xB33100, 0xD75600, 0xFB7A00, 0xFF9E17, 0xFFC33B, 0xFFE75F, 0x490000, 0x6D2100, 0x924500, 0xB66A00, 0xDA8E00, 0xFFB305, 0xFFD729, 0xFFFC4E, 0x251100, 0x493500, 0x6E5A00, 0x927E00, 0xB7A300, 0xDBC700, 0xFFEB1E, 0xFFFF43, 0x002500, 0x244900, 0x486D00, 0x6D9200, 0x91B600, 0xB6DB00, 0xDAFF1B, 0xFFFF3F, 0x003700, 0x005B00, 0x238000, 0x47A400, 0x6CC900, 0x90ED00, 0xB5FF1E, 0xD9FF43, 0x004700, 0x006C00, 0x009000, 0x24B400, 0x48D900, 0x6CFD05, 0x91FF29, 0xB5FF4E, 0x005500, 0x007900, 0x009D00, 0x03C200, 0x27E600, 0x4BFF17, 0x70FF3B, 0x94FF5F, 0x005F00, 0x008300, 0x00A800, 0x00CC00, 0x0AF00A, 0x2EFF2E, 0x53FF53, 0x77FF77, 0x006500, 0x008A00, 0x00AE00, 0x00D203, 0x00F727, 0x17FF4B, 0x3BFF70, 0x5FFF94, 0x006800, 0x008C00, 0x00B100, 0x00D524, 0x00F948, 0x05FF6C, 0x29FF91, 0x4EFFB5, 0x006600, 0x008B00, 0x00AF23, 0x00D447, 0x00F86C, 0x00FF90, 0x1EFFB5, 0x43FFD9, 0x006100, 0x008524, 0x00AA48, 0x00CE6D, 0x00F391, 0x00FFB6, 0x1BFFDA, 0x3FFFFE, 0x005825, 0x007C49, 0x00A16E, 0x00C592, 0x00EAB7, 0x00FFDB, 0x1EFFFF, 0x43FFFF, 0x004B49, 0x00706D, 0x009492, 0x00B9B6, 0x00DDDA, 0x05FFFF, 0x29FFFF, 0x4EFFFF, 0x003C6A, 0x00608E, 0x0085B3, 0x00A9D7, 0x00CEFB, 0x17F2FF, 0x3BFFFF, 0x5FFFFF, 0x002A87, 0x004FAB, 0x0073D0, 0x0097F4, 0x0ABCFF, 0x2EE0FF, 0x53FFFF, 0x77FFFF, 0x00179F, 0x003BC3, 0x0060E7, 0x0384FF, 0x27A8FF, 0x4BCDFF, 0x70F1FF, 0x94FFFF, 0x0002B0, 0x0027D5, 0x004BF9, 0x2470FF, 0x4894FF, 0x6CB9FF, 0x91DDFF, 0xB5FFFF, 0x0000BB, 0x0013E0, 0x2337FF, 0x475BFF, 0x6C80FF, 0x90A4FF, 0xB5C9FF, 0xD9EDFF];\n// swap palette RGB to BGR\nfor (var i = 0; i < 256; i++) {\n var x = ASTROCADE_PALETTE[i];\n ASTROCADE_PALETTE[i] = rgb2bgr(x) | 0xff000000;\n}\n\n/*\n0000 F3 [ 4] 196 \tDI\t; disable interrupts\n0001 21 00 20 [10] 197 \tLD\tHL,#0x2000\n0004 7E [ 7] 198 \tLD\tA,(HL) ; A <- mem[0x2000]\n0005 FE 55 [ 7] 199 \tCP\t#0x55 ; found sentinel byte? ($55)\n0007 CA 0D 00 [10] 200 \tJP\tZ,FoundSentinel ; yes, load program\n000A C3 00 20 [10] 201 \tJP\t_main ; jump to test program\n000D 202 \tFoundSentinel:\n000D 31 CE 4F [10] 203 \tLD\tSP,#0x4fce ; position stack below BIOS vars\n0010 CD 84 02 [17] 204 \tCALL\t_bios_init ; misc. bios init routines\n0013 21 05 20 [10] 205 \tLD\tHL,#0x2005 ; cartridge start vector\n0016 7E [ 7] 206 \tLD\tA,(HL)\n0017 23 [ 6] 207 \tINC\tHL\n0018 66 [ 7] 208 \tLD\tH,(HL)\n0019 6F [ 4] 209 \tLD\tL,A\n001A E9 [ 4] 210 \tJP\t(HL) ; jump to cart start vector\n*/\nvar ASTROCADE_MINIMAL_BIOS = [\n 0xf3, 0x21, 0x00, 0x20, 0x7e, 0xfe, 0x55, 0xca, 0x0d, 0x00, 0xc3, 0x00, 0x20,\n 0x31, 0xce, 0x4f,\n 0x21, 0x05, 0x20, 0x7e, 0x23, 0x66, 0x6f,\n 0xe9,\n];\n\nvar ASTROLIBRE_BIOS_LZG = `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`;\n\n", "\nimport { BallyAstrocade } from \"../machine/astrocade\";\nimport { BaseZ80MachinePlatform } from \"../common/baseplatform\";\nimport { Platform } from \"../common/baseplatform\";\nimport { PLATFORMS } from \"../common/emu\";\n\n// http://metopal.com/projects/ballybook/doku.php\n\nconst ASTROCADE_PRESETS = [\n { id: '01-helloworlds.asm', name: 'Hello World (ASM)' },\n { id: '02-telephone.asm', name: 'Telephone (ASM)' },\n { id: '03-horcbpal.asm', name: 'Paddle Demo (ASM)' },\n { id: 'hello.c', name: 'Hello Graphics' },\n { id: 'lines.c', name: 'Lines' },\n { id: 'sprites.c', name: 'Sprites' },\n { id: 'vsync.c', name: 'Sprites w/ VSYNC' },\n { id: 'fastsprites.c', name: 'Fast Sprites' },\n { id: 'music.c', name: 'Music' },\n { id: 'rotate.c', name: 'Rotate Op' },\n { id: 'rainbow.c', name: 'Rainbow' },\n { id: 'cosmic.c', name: 'Cosmic Impalas Game' },\n { id: 'racing.c', name: 'Pseudo 3-D Racing Game' },\n];\n\nconst ASTROCADE_BIOS_PRESETS = [\n { id: 'bios.c', name: 'BIOS' },\n];\n\nconst ASTROCADE_ARCADE_PRESETS = [\n { id: 'hello.c', name: 'Hello Graphics' },\n];\n\nclass BallyAstrocadePlatform extends BaseZ80MachinePlatform implements Platform {\n\n newMachine() { return new BallyAstrocade(false); }\n getPresets() { return ASTROCADE_PRESETS; }\n getDefaultExtension() { return \".c\"; };\n readAddress(a) { return this.machine.read(a); }\n getMemoryMap = function() { return { main:[\n {name:'BIOS',start:0x0,size:0x2000,type:'rom'},\n //{name:'Cart ROM',start:0x2000,size:0x2000,type:'rom'},\n //{name:'Magic RAM',start:0x0,size:0x4000,type:'ram'},\n {name:'Screen RAM',start:0x4000,size:0x1000,type:'ram'},\n {name:'BIOS Variables',start:0x4fce,size:0x5000-0x4fce,type:'ram'},\n ] } };\n showHelp() { return \"https://8bitworkshop.com/docs/platforms/astrocade/\"; }\n}\n\nclass BallyAstrocadeBIOSPlatform extends BallyAstrocadePlatform implements Platform {\n\n getPresets() { return ASTROCADE_BIOS_PRESETS; }\n loadROM(title,rom) { this.machine.loadBIOS(rom); }\n\n}\n\nclass BallyArcadePlatform extends BallyAstrocadePlatform implements Platform {\n\n newMachine() { return new BallyAstrocade(true); }\n getPresets() { return ASTROCADE_ARCADE_PRESETS; }\n\n getMemoryMap = function() { return { main:[\n {name:'ROM',start:0x0,size:0x4000,type:'rom'},\n {name:'Magic RAM',start:0x0,size:0x4000,type:'ram'},\n {name:'Screen RAM',start:0x4000,size:0x4000,type:'ram'},\n {name:'ROM',start:0x8000,size:0x4000,type:'rom'},\n ] } };\n}\n\nPLATFORMS['astrocade'] = BallyAstrocadePlatform;\nPLATFORMS['astrocade-bios'] = BallyAstrocadeBIOSPlatform;\nPLATFORMS['astrocade-arcade'] = BallyArcadePlatform;\n\n"], + "mappings": "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", + "names": [] +} diff --git a/gen/basic-NA4OGIQC.js b/gen/basic-PW5NXC77.js similarity index 99% rename from gen/basic-NA4OGIQC.js rename to gen/basic-PW5NXC77.js index ce85cc19..6295da34 100644 --- a/gen/basic-NA4OGIQC.js +++ b/gen/basic-PW5NXC77.js @@ -1,4 +1,4 @@ -import{b as v}from"./chunk-3XE5YOCV.js";import{a as d,t as S}from"./chunk-JMPDXGK5.js";import"./chunk-SDBJC2RS.js";import"./chunk-XMPGMPQ4.js";import"./chunk-NFHWZ4B3.js";import"./chunk-42IVW2OL.js";import{B as c,J as b,T as g,U as f,a as p}from"./chunk-S4FPTY4A.js";import"./chunk-RQFURXHW.js";function O(o){return o.value!=null}function E(o){return o.name!=null}function N(o){return o.op!=null&&o.left!=null&&o.right!=null}function I(o){return o.op!=null&&o.expr!=null}var y=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,u,h){r=s,e=a,i=u,n=h},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)}},L=1024*1024,l=class{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=L),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(u=>{this.curpc=s.$loc.offset,this.datums.push(u)}))}),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 y,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(l.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 g(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 v}from"./chunk-3XE5YOCV.js";import{a as d,t as S}from"./chunk-W3JZ7KMT.js";import"./chunk-SDBJC2RS.js";import"./chunk-XMPGMPQ4.js";import"./chunk-2KLMJIHE.js";import"./chunk-42IVW2OL.js";import{B as c,J as b,T as g,U as f,a as p}from"./chunk-S4FPTY4A.js";import"./chunk-RQFURXHW.js";function O(o){return o.value!=null}function E(o){return o.name!=null}function N(o){return o.op!=null&&o.left!=null&&o.right!=null}function I(o){return o.op!=null&&o.expr!=null}var y=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,u,h){r=s,e=a,i=u,n=h},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)}},L=1024*1024,l=class{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=L),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(u=>{this.curpc=s.$loc.offset,this.datums.push(u)}))}),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 y,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(l.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 g(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={}),O(t))return JSON.stringify(t.value);if(E(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 u=t.args?t.args.map(h=>this.expr2js(h,r)).join(", "):[];return t.name.startsWith("FN")?e+=`this.getDef(${i})(${u})`:this.builtins[t.name]?(this.checkFuncArgs(t,this.builtins[t.name]),e+=`this.builtins.${t.name}(${u})`):t.args?this.opts.arraysContainChars&&t.name.endsWith("$")?e+=`this.getStringSlice(this.vars.${t.name}, ${u})`:e+=`this.arrayGet(${i}, ${u})`:e+=`this.vars.${t.name}`,r.novalid?e:`this.checkValue(${e}, ${i})`}}else if(N(t)){var n=this.expr2js(t.left,r),s=this.expr2js(t.right,r);return`this.${t.op}(${n}, ${s})`}else if(I(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 u=()=>i>=0?this.vars[t]>e:this.vars[t]h==t)),this.forLoopStack.push(t),this.forLoops[t]={$next:h=>{h&&t!=h&&this.runtimeError(`I executed NEXT "${h}", but the last FOR was for "${t}".`),this.vars[t]+=i;var m=u();m?(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=${m}`)}}}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 v}from"./chunk-3XE5YOCV.js";import{a as d,t as S}from"./chunk-JMPDXG `),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,d.input=this.program.opts.uppercaseOnly?n=>n.toUpperCase():null,(!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()}getDefaultExtension(){return".bas"}getToolForFilename(){return"basic"}getPresets(){return T}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+=p(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()}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(l,e){typeof define=="function"&&define.amd?define([],e):typeof d!="undefined"?e():(e(),l.FileSaver={})})(d,function(){"use strict";function l(t,r){return typeof r=="undefined"?r={autoBom:!1}:typeof r!="object"&&(console.warn("Deprecated: Expected third argument to be a object"),r={autoBom:!r}),r.autoBom&&/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(t.type)?new Blob(["\uFEFF",t],{type:t.type}):t}function e(t,r,c){var a=new XMLHttpRequest;a.open("GET",t),a.responseType="blob",a.onload=function(){u(a.response,r,c)},a.onerror=function(){console.error("could not download file")},a.send()}function n(t){var r=new XMLHttpRequest;r.open("HEAD",t,!1);try{r.send()}catch(c){}return 200<=r.status&&299>=r.status}function i(t){try{t.dispatchEvent(new MouseEvent("click"))}catch(c){var r=document.createEvent("MouseEvents");r.initMouseEvent("click",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),t.dispatchEvent(r)}}var o=typeof window=="object"&&window.window===window?window:typeof self=="object"&&self.self===self?self:typeof global=="object"&&global.global===global?global:void 0,m=o.navigator&&/Macintosh/.test(navigator.userAgent)&&/AppleWebKit/.test(navigator.userAgent)&&!/Safari/.test(navigator.userAgent),u=o.saveAs||(typeof window!="object"||window!==o?function(){}:"download"in HTMLAnchorElement.prototype&&!m?function(t,r,c){var a=o.URL||o.webkitURL,s=document.createElement("a");r=r||t.name||"download",s.download=r,s.rel="noopener",typeof t=="string"?(s.href=t,s.origin===location.origin?i(s):n(s.href)?e(t,r,c):i(s,s.target="_blank")):(s.href=a.createObjectURL(t),setTimeout(function(){a.revokeObjectURL(s.href)},4e4),setTimeout(function(){i(s)},0))}:"msSaveOrOpenBlob"in navigator?function(t,r,c){if(r=r||t.name||"download",typeof t!="string")navigator.msSaveOrOpenBlob(l(t,c),r);else if(n(t))e(t,r,c);else{var a=document.createElement("a");a.href=t,a.target="_blank",setTimeout(function(){i(a)})}}:function(t,r,c,a){if(a=a||open("","_blank"),a&&(a.document.title=a.document.body.innerText="downloading..."),typeof t=="string")return e(t,r,c);var s=t.type==="application/octet-stream",g=/constructor/i.test(o.HTMLElement)||o.safari,S=/CriOS\/[\d]+/.test(navigator.userAgent);if((S||s&&g||m)&&typeof FileReader!="undefined"){var f=new FileReader;f.onloadend=function(){var p=f.result;p=S?p:p.replace(/^data:[^;]*;/,"data:attachment/file;"),a?a.location.href=p:location=p,a=null},f.readAsDataURL(t)}else{var k=o.URL||o.webkitURL,h=k.createObjectURL(t);a?a.location=h:location.href=h,a=null,setTimeout(function(){k.revokeObjectURL(h)},4e4)}});o.saveAs=u.saveAs=u,typeof v!="undefined"&&(v.exports=u)})});var E=class{constructor(e){this.checkpointInterval=10;this.maxCheckpoints=300;this.reset(),this.platform=e}reset(){this.checkpoints=[],this.framerecs=[],this.frameCount=0,this.lastSeekFrame=0,this.lastSeekStep=0,this.lastStepCount=0,this.callbackStateChanged&&this.callbackStateChanged()}frameRequested(){var e={controls:this.platform.saveControlsState(),seed:b()},n=!1;return this.lastSeekFramethis.maxCheckpoints&&(this.checkpoints.shift(),this.framerecs=this.framerecs.slice(this.checkpointInterval),this.lastSeekFrame-=this.checkpointInterval,this.frameCount-=this.checkpointInterval,this.callbackStateChanged&&this.callbackStateChanged())}getStateAtOrBefore(e){if(e<=0&&this.checkpoints.length>0)return{frame:0,state:this.checkpoints[0]};var n=Math.floor(e/this.checkpointInterval),i=n0&&this.platform.advanceFrameClock&&(n=this.platform.advanceFrameClock(null,n)),this.lastSeekFrame=e,this.lastSeekStep=n,this.lastStepCount=m,e}else return-1}loadControls(e){this.platform.loadControlsState&&this.platform.loadControlsState(this.framerecs[e].controls),w(this.framerecs[e].seed)}getLastCheckpoint(){return this.checkpoints.length&&this.checkpoints[this.checkpoints.length-1]}};function R(l){switch(l){case"apple2":return import("./apple2-2LVORDRQ.js");case"arm32":return import("./arm32-R5NJVEXG.js");case"astrocade":return import("./astrocade-MBYAMRZ3.js");case"atari7800":return import("./atari7800-NF4HMROI.js");case"atari8":return import("./atari8-7FKUDPVY.js");case"basic":return import("./basic-NA4OGIQC.js");case"c64":return import("./c64-7P3DXPVR.js");case"coleco":return import("./coleco-XDDVOME2.js");case"cpc":return import("./cpc-QPJM4M6D.js");case"devel":return import("./devel-DCPTC5VJ.js");case"galaxian":return import("./galaxian-BLDJL3IC.js");case"kim1":return import("./kim1-33VFZOQO.js");case"markdown":return import("./markdown-PZG2PZOG.js");case"msx":return import("./msx-V4DMEG2E.js");case"mw8080bw":return import("./mw8080bw-W4PMGL4W.js");case"nes":return import("./nes-FPFNSQUX.js");case"pce":return import("./pce-IT3L4G3X.js");case"sms":return import("./sms-RPCJL2TJ.js");case"sound_konami":return import("./sound_konami-L7Z5IUJJ.js");case"sound_williams":return import("./sound_williams-GXIR44ZF.js");case"vcs":return import("./vcs-JT6WK4IT.js");case"vector":return import("./vector-6PAX7NWQ.js");case"vectrex":return import("./vectrex-ZT6XLARM.js");case"verilog":return import("./verilog-B4C5BRZ3.js");case"vic20":return import("./vic20-PC2ZVKOB.js");case"vicdual":return import("./vicdual-4GVV77BW.js");case"williams":return import("./williams-OXTO7LE2.js");case"x86":return import("./x86-CEK3MPWG.js");case"zmachine":return import("./zmachine-LULYR2EG.js");case"zx":return import("./zx-MC6OLPD5.js");default:throw new Error(`Platform not recognized: '${l}'`)}}export{E as a,R as b,y as c}; -//# sourceMappingURL=chunk-NFHWZ4B3.js.map +import{L as b,M as w}from"./chunk-S4FPTY4A.js";import{b as C}from"./chunk-RQFURXHW.js";var y=C((d,v)=>{(function(l,e){typeof define=="function"&&define.amd?define([],e):typeof d!="undefined"?e():(e(),l.FileSaver={})})(d,function(){"use strict";function l(t,r){return typeof r=="undefined"?r={autoBom:!1}:typeof r!="object"&&(console.warn("Deprecated: Expected third argument to be a object"),r={autoBom:!r}),r.autoBom&&/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(t.type)?new Blob(["\uFEFF",t],{type:t.type}):t}function e(t,r,c){var a=new XMLHttpRequest;a.open("GET",t),a.responseType="blob",a.onload=function(){u(a.response,r,c)},a.onerror=function(){console.error("could not download file")},a.send()}function n(t){var r=new XMLHttpRequest;r.open("HEAD",t,!1);try{r.send()}catch(c){}return 200<=r.status&&299>=r.status}function i(t){try{t.dispatchEvent(new MouseEvent("click"))}catch(c){var r=document.createEvent("MouseEvents");r.initMouseEvent("click",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),t.dispatchEvent(r)}}var o=typeof window=="object"&&window.window===window?window:typeof self=="object"&&self.self===self?self:typeof global=="object"&&global.global===global?global:void 0,m=o.navigator&&/Macintosh/.test(navigator.userAgent)&&/AppleWebKit/.test(navigator.userAgent)&&!/Safari/.test(navigator.userAgent),u=o.saveAs||(typeof window!="object"||window!==o?function(){}:"download"in HTMLAnchorElement.prototype&&!m?function(t,r,c){var a=o.URL||o.webkitURL,s=document.createElement("a");r=r||t.name||"download",s.download=r,s.rel="noopener",typeof t=="string"?(s.href=t,s.origin===location.origin?i(s):n(s.href)?e(t,r,c):i(s,s.target="_blank")):(s.href=a.createObjectURL(t),setTimeout(function(){a.revokeObjectURL(s.href)},4e4),setTimeout(function(){i(s)},0))}:"msSaveOrOpenBlob"in navigator?function(t,r,c){if(r=r||t.name||"download",typeof t!="string")navigator.msSaveOrOpenBlob(l(t,c),r);else if(n(t))e(t,r,c);else{var a=document.createElement("a");a.href=t,a.target="_blank",setTimeout(function(){i(a)})}}:function(t,r,c,a){if(a=a||open("","_blank"),a&&(a.document.title=a.document.body.innerText="downloading..."),typeof t=="string")return e(t,r,c);var s=t.type==="application/octet-stream",g=/constructor/i.test(o.HTMLElement)||o.safari,S=/CriOS\/[\d]+/.test(navigator.userAgent);if((S||s&&g||m)&&typeof FileReader!="undefined"){var f=new FileReader;f.onloadend=function(){var p=f.result;p=S?p:p.replace(/^data:[^;]*;/,"data:attachment/file;"),a?a.location.href=p:location=p,a=null},f.readAsDataURL(t)}else{var k=o.URL||o.webkitURL,h=k.createObjectURL(t);a?a.location=h:location.href=h,a=null,setTimeout(function(){k.revokeObjectURL(h)},4e4)}});o.saveAs=u.saveAs=u,typeof v!="undefined"&&(v.exports=u)})});var E=class{constructor(e){this.checkpointInterval=10;this.maxCheckpoints=300;this.reset(),this.platform=e}reset(){this.checkpoints=[],this.framerecs=[],this.frameCount=0,this.lastSeekFrame=0,this.lastSeekStep=0,this.lastStepCount=0,this.callbackStateChanged&&this.callbackStateChanged()}frameRequested(){var e={controls:this.platform.saveControlsState(),seed:b()},n=!1;return this.lastSeekFramethis.maxCheckpoints&&(this.checkpoints.shift(),this.framerecs=this.framerecs.slice(this.checkpointInterval),this.lastSeekFrame-=this.checkpointInterval,this.frameCount-=this.checkpointInterval,this.callbackStateChanged&&this.callbackStateChanged())}getStateAtOrBefore(e){if(e<=0&&this.checkpoints.length>0)return{frame:0,state:this.checkpoints[0]};var n=Math.floor(e/this.checkpointInterval),i=n0&&this.platform.advanceFrameClock&&(n=this.platform.advanceFrameClock(null,n)),this.lastSeekFrame=e,this.lastSeekStep=n,this.lastStepCount=m,e}else return-1}loadControls(e){this.platform.loadControlsState&&this.platform.loadControlsState(this.framerecs[e].controls),w(this.framerecs[e].seed)}getLastCheckpoint(){return this.checkpoints.length&&this.checkpoints[this.checkpoints.length-1]}};function R(l){switch(l){case"apple2":return import("./apple2-2LVORDRQ.js");case"arm32":return import("./arm32-R5NJVEXG.js");case"astrocade":return import("./astrocade-Q5URXEDG.js");case"atari7800":return import("./atari7800-NF4HMROI.js");case"atari8":return import("./atari8-7FKUDPVY.js");case"basic":return import("./basic-PW5NXC77.js");case"c64":return import("./c64-7P3DXPVR.js");case"coleco":return import("./coleco-XDDVOME2.js");case"cpc":return import("./cpc-QPJM4M6D.js");case"devel":return import("./devel-RYHV7TSB.js");case"exidy":return import("./exidy-W3QKDB3N.js");case"galaxian":return import("./galaxian-BLDJL3IC.js");case"kim1":return import("./kim1-33VFZOQO.js");case"markdown":return import("./markdown-PZG2PZOG.js");case"msx":return import("./msx-V4DMEG2E.js");case"mw8080bw":return import("./mw8080bw-W4PMGL4W.js");case"nes":return import("./nes-FPFNSQUX.js");case"pce":return import("./pce-IT3L4G3X.js");case"sms":return import("./sms-RPCJL2TJ.js");case"sound_konami":return import("./sound_konami-L7Z5IUJJ.js");case"sound_williams":return import("./sound_williams-GXIR44ZF.js");case"vcs":return import("./vcs-JT6WK4IT.js");case"vector":return import("./vector-6PAX7NWQ.js");case"vectrex":return import("./vectrex-ZT6XLARM.js");case"verilog":return import("./verilog-B4C5BRZ3.js");case"vic20":return import("./vic20-PC2ZVKOB.js");case"vicdual":return import("./vicdual-4GVV77BW.js");case"williams":return import("./williams-OXTO7LE2.js");case"x86":return import("./x86-CEK3MPWG.js");case"zmachine":return import("./zmachine-LULYR2EG.js");case"zx":return import("./zx-MC6OLPD5.js");default:throw new Error(`Platform not recognized: '${l}'`)}}export{E as a,R as b,y as c}; +//# sourceMappingURL=chunk-2KLMJIHE.js.map diff --git a/gen/chunk-NFHWZ4B3.js.map b/gen/chunk-2KLMJIHE.js.map similarity index 89% rename from gen/chunk-NFHWZ4B3.js.map rename to gen/chunk-2KLMJIHE.js.map index 25fb9c1c..451f7a4f 100644 --- a/gen/chunk-NFHWZ4B3.js.map +++ b/gen/chunk-2KLMJIHE.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../node_modules/file-saver/src/FileSaver.js", "../src/common/recorder.ts", "../src/platform/_index.ts"], - "sourcesContent": ["/*\n* FileSaver.js\n* A saveAs() FileSaver implementation.\n*\n* By Eli Grey, http://eligrey.com\n*\n* License : https://github.com/eligrey/FileSaver.js/blob/master/LICENSE.md (MIT)\n* source : http://purl.eligrey.com/github/FileSaver.js\n*/\n\n// The one and only way of getting global scope in all environments\n// https://stackoverflow.com/q/3277182/1008999\nvar _global = typeof window === 'object' && window.window === window\n ? window : typeof self === 'object' && self.self === self\n ? self : typeof global === 'object' && global.global === global\n ? global\n : this\n\nfunction bom (blob, opts) {\n if (typeof opts === 'undefined') opts = { autoBom: false }\n else if (typeof opts !== 'object') {\n console.warn('Deprecated: Expected third argument to be a object')\n opts = { autoBom: !opts }\n }\n\n // prepend BOM for UTF-8 XML and text/* types (including HTML)\n // note: your browser will automatically convert UTF-16 U+FEFF to EF BB BF\n if (opts.autoBom && /^\\s*(?:text\\/\\S*|application\\/xml|\\S*\\/\\S*\\+xml)\\s*;.*charset\\s*=\\s*utf-8/i.test(blob.type)) {\n return new Blob([String.fromCharCode(0xFEFF), blob], { type: blob.type })\n }\n return blob\n}\n\nfunction download (url, name, opts) {\n var xhr = new XMLHttpRequest()\n xhr.open('GET', url)\n xhr.responseType = 'blob'\n xhr.onload = function () {\n saveAs(xhr.response, name, opts)\n }\n xhr.onerror = function () {\n console.error('could not download file')\n }\n xhr.send()\n}\n\nfunction corsEnabled (url) {\n var xhr = new XMLHttpRequest()\n // use sync to avoid popup blocker\n xhr.open('HEAD', url, false)\n try {\n xhr.send()\n } catch (e) {}\n return xhr.status >= 200 && xhr.status <= 299\n}\n\n// `a.click()` doesn't work for all browsers (#465)\nfunction click (node) {\n try {\n node.dispatchEvent(new MouseEvent('click'))\n } catch (e) {\n var evt = document.createEvent('MouseEvents')\n evt.initMouseEvent('click', true, true, window, 0, 0, 0, 80,\n 20, false, false, false, false, 0, null)\n node.dispatchEvent(evt)\n }\n}\n\n// Detect WebView inside a native macOS app by ruling out all browsers\n// We just need to check for 'Safari' because all other browsers (besides Firefox) include that too\n// https://www.whatismybrowser.com/guides/the-latest-user-agent/macos\nvar isMacOSWebView = _global.navigator && /Macintosh/.test(navigator.userAgent) && /AppleWebKit/.test(navigator.userAgent) && !/Safari/.test(navigator.userAgent)\n\nvar saveAs = _global.saveAs || (\n // probably in some web worker\n (typeof window !== 'object' || window !== _global)\n ? function saveAs () { /* noop */ }\n\n // Use download attribute first if possible (#193 Lumia mobile) unless this is a macOS WebView\n : ('download' in HTMLAnchorElement.prototype && !isMacOSWebView)\n ? function saveAs (blob, name, opts) {\n var URL = _global.URL || _global.webkitURL\n var a = document.createElement('a')\n name = name || blob.name || 'download'\n\n a.download = name\n a.rel = 'noopener' // tabnabbing\n\n // TODO: detect chrome extensions & packaged apps\n // a.target = '_blank'\n\n if (typeof blob === 'string') {\n // Support regular links\n a.href = blob\n if (a.origin !== location.origin) {\n corsEnabled(a.href)\n ? download(blob, name, opts)\n : click(a, a.target = '_blank')\n } else {\n click(a)\n }\n } else {\n // Support blobs\n a.href = URL.createObjectURL(blob)\n setTimeout(function () { URL.revokeObjectURL(a.href) }, 4E4) // 40s\n setTimeout(function () { click(a) }, 0)\n }\n }\n\n // Use msSaveOrOpenBlob as a second approach\n : 'msSaveOrOpenBlob' in navigator\n ? function saveAs (blob, name, opts) {\n name = name || blob.name || 'download'\n\n if (typeof blob === 'string') {\n if (corsEnabled(blob)) {\n download(blob, name, opts)\n } else {\n var a = document.createElement('a')\n a.href = blob\n a.target = '_blank'\n setTimeout(function () { click(a) })\n }\n } else {\n navigator.msSaveOrOpenBlob(bom(blob, opts), name)\n }\n }\n\n // Fallback to using FileReader and a popup\n : function saveAs (blob, name, opts, popup) {\n // Open a popup immediately do go around popup blocker\n // Mostly only available on user interaction and the fileReader is async so...\n popup = popup || open('', '_blank')\n if (popup) {\n popup.document.title =\n popup.document.body.innerText = 'downloading...'\n }\n\n if (typeof blob === 'string') return download(blob, name, opts)\n\n var force = blob.type === 'application/octet-stream'\n var isSafari = /constructor/i.test(_global.HTMLElement) || _global.safari\n var isChromeIOS = /CriOS\\/[\\d]+/.test(navigator.userAgent)\n\n if ((isChromeIOS || (force && isSafari) || isMacOSWebView) && typeof FileReader !== 'undefined') {\n // Safari doesn't allow downloading of blob URLs\n var reader = new FileReader()\n reader.onloadend = function () {\n var url = reader.result\n url = isChromeIOS ? url : url.replace(/^data:[^;]*;/, 'data:attachment/file;')\n if (popup) popup.location.href = url\n else location = url\n popup = null // reverse-tabnabbing #460\n }\n reader.readAsDataURL(blob)\n } else {\n var URL = _global.URL || _global.webkitURL\n var url = URL.createObjectURL(blob)\n if (popup) popup.location = url\n else location.href = url\n popup = null // reverse-tabnabbing #460\n setTimeout(function () { URL.revokeObjectURL(url) }, 4E4) // 40s\n }\n }\n)\n\n_global.saveAs = saveAs.saveAs = saveAs\n\nif (typeof module !== 'undefined') {\n module.exports = saveAs;\n}\n", "\nimport { Platform, EmuState, EmuControlsState, EmuRecorder } from \"./baseplatform\";\nimport { getNoiseSeed, setNoiseSeed } from \"./emu\";\n\n// RECORDER\n\ntype FrameRec = {controls:EmuControlsState, seed:number};\n\nexport class StateRecorderImpl implements EmuRecorder {\n \n checkpointInterval : number = 10;\n callbackStateChanged : () => void;\n callbackNewCheckpoint : (state:EmuState) => void;\n maxCheckpoints : number = 300;\n \n platform : Platform;\n checkpoints : EmuState[];\n framerecs : FrameRec[];\n frameCount : number;\n lastSeekFrame : number;\n lastSeekStep : number;\n lastStepCount : number;\n \n constructor(platform : Platform) {\n this.reset();\n this.platform = platform;\n }\n\n reset() {\n this.checkpoints = [];\n this.framerecs = [];\n this.frameCount = 0;\n this.lastSeekFrame = 0;\n this.lastSeekStep = 0;\n this.lastStepCount = 0;\n if (this.callbackStateChanged) this.callbackStateChanged();\n }\n\n frameRequested() : boolean {\n var controls = {\n controls:this.platform.saveControlsState(),\n seed:getNoiseSeed()\n };\n var requested = false;\n // are we replaying? then we don't need to save a frame, just replace controls\n if (this.lastSeekFrame < this.frameCount) {\n this.loadControls(this.lastSeekFrame);\n } else {\n // record the control state, if available\n if (this.platform.saveControlsState) {\n this.framerecs.push(controls);\n }\n // time to save next frame?\n requested = (this.frameCount++ % this.checkpointInterval) == 0;\n }\n this.lastSeekFrame++;\n this.lastSeekStep = 0;\n if (this.callbackStateChanged) this.callbackStateChanged();\n return requested;\n }\n \n numFrames() : number {\n return this.frameCount;\n }\n \n currentFrame() : number {\n return this.lastSeekFrame;\n }\n\n currentStep() : number {\n return this.lastSeekStep;\n }\n\n recordFrame(state : EmuState) {\n this.checkpoints.push(state);\n if (this.callbackNewCheckpoint) this.callbackNewCheckpoint(state);\n // checkpoints full?\n if (this.checkpoints.length > this.maxCheckpoints) {\n this.checkpoints.shift(); // remove 1st checkpoint\n this.framerecs = this.framerecs.slice(this.checkpointInterval);\n this.lastSeekFrame -= this.checkpointInterval;\n this.frameCount -= this.checkpointInterval;\n if (this.callbackStateChanged) this.callbackStateChanged();\n }\n }\n\n getStateAtOrBefore(frame : number) : {frame : number, state : EmuState} {\n // initial frame?\n if (frame <= 0 && this.checkpoints.length > 0)\n return {frame:0, state:this.checkpoints[0]};\n\n var bufidx = Math.floor(frame / this.checkpointInterval);\n var foundidx = bufidx < this.checkpoints.length ? bufidx : this.checkpoints.length-1;\n var foundframe = foundidx * this.checkpointInterval;\n return {frame:foundframe, state:this.checkpoints[foundidx]};\n }\n\n loadFrame(seekframe : number, seekstep? : number) : number {\n seekframe |= 0;\n seekstep |= 0;\n if (seekframe == this.lastSeekFrame && seekstep == this.lastSeekStep) {\n return seekframe; // already set to this frame\n }\n // TODO: what if < 1?\n let {frame,state} = this.getStateAtOrBefore(seekframe-1);\n if (state) {\n var numSteps = 0;\n this.platform.pause();\n this.platform.loadState(state);\n // seek to frame index\n while (frame < seekframe) {\n if (frame < this.framerecs.length) {\n this.loadControls(frame);\n }\n frame++;\n numSteps = this.platform.advance(frame < seekframe); // TODO: infinite loop?\n }\n // TODO: if first frame, we must figure out # of steps\n if (frame == 0) {\n numSteps = this.platform.advance(true);\n this.platform.loadState(state);\n }\n // seek to step index\n // TODO: what if advance() returns clocks, but steps use insns?\n if (seekstep > 0 && this.platform.advanceFrameClock) { \n seekstep = this.platform.advanceFrameClock(null, seekstep);\n }\n // record new values\n this.lastSeekFrame = seekframe;\n this.lastSeekStep = seekstep;\n this.lastStepCount = numSteps;\n return seekframe;\n } else {\n return -1;\n }\n }\n \n loadControls(frame : number) {\n if (this.platform.loadControlsState)\n this.platform.loadControlsState(this.framerecs[frame].controls);\n setNoiseSeed(this.framerecs[frame].seed);\n }\n \n getLastCheckpoint() : EmuState {\n return this.checkpoints.length && this.checkpoints[this.checkpoints.length-1];\n }\n}\n\n", "// hard-code platform files for esbuild code-splitting\n\nexport function importPlatform(name: string) : Promise {\n switch (name) {\n case \"apple2\": return import(\"../platform/apple2\");\n case \"arm32\": return import(\"../platform/arm32\");\n case \"astrocade\": return import(\"../platform/astrocade\");\n case \"atari7800\": return import(\"../platform/atari7800\");\n case \"atari8\": return import(\"../platform/atari8\");\n case \"basic\": return import(\"../platform/basic\");\n case \"c64\": return import(\"../platform/c64\");\n case \"coleco\": return import(\"../platform/coleco\");\n case \"cpc\": return import(\"../platform/cpc\");\n case \"devel\": return import(\"../platform/devel\");\n case \"galaxian\": return import(\"../platform/galaxian\");\n case \"kim1\": return import(\"../platform/kim1\");\n case \"markdown\": return import(\"../platform/markdown\");\n case \"msx\": return import(\"../platform/msx\");\n case \"mw8080bw\": return import(\"../platform/mw8080bw\");\n case \"nes\": return import(\"../platform/nes\");\n case \"pce\": return import(\"../platform/pce\");\n case \"sms\": return import(\"../platform/sms\");\n case \"sound_konami\": return import(\"../platform/sound_konami\");\n case \"sound_williams\": return import(\"../platform/sound_williams\");\n case \"vcs\": return import(\"../platform/vcs\");\n case \"vector\": return import(\"../platform/vector\");\n case \"vectrex\": return import(\"../platform/vectrex\");\n case \"verilog\": return import(\"../platform/verilog\");\n case \"vic20\": return import(\"../platform/vic20\");\n case \"vicdual\": return import(\"../platform/vicdual\");\n case \"williams\": return import(\"../platform/williams\");\n case \"x86\": return import(\"../platform/x86\");\n case \"zmachine\": return import(\"../platform/zmachine\");\n case \"zx\": return import(\"../platform/zx\");\n default: throw new Error(`Platform not recognized: '${name}'`)\n }\n }\n \n "], - "mappings": "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", + "sourcesContent": ["/*\n* FileSaver.js\n* A saveAs() FileSaver implementation.\n*\n* By Eli Grey, http://eligrey.com\n*\n* License : https://github.com/eligrey/FileSaver.js/blob/master/LICENSE.md (MIT)\n* source : http://purl.eligrey.com/github/FileSaver.js\n*/\n\n// The one and only way of getting global scope in all environments\n// https://stackoverflow.com/q/3277182/1008999\nvar _global = typeof window === 'object' && window.window === window\n ? window : typeof self === 'object' && self.self === self\n ? self : typeof global === 'object' && global.global === global\n ? global\n : this\n\nfunction bom (blob, opts) {\n if (typeof opts === 'undefined') opts = { autoBom: false }\n else if (typeof opts !== 'object') {\n console.warn('Deprecated: Expected third argument to be a object')\n opts = { autoBom: !opts }\n }\n\n // prepend BOM for UTF-8 XML and text/* types (including HTML)\n // note: your browser will automatically convert UTF-16 U+FEFF to EF BB BF\n if (opts.autoBom && /^\\s*(?:text\\/\\S*|application\\/xml|\\S*\\/\\S*\\+xml)\\s*;.*charset\\s*=\\s*utf-8/i.test(blob.type)) {\n return new Blob([String.fromCharCode(0xFEFF), blob], { type: blob.type })\n }\n return blob\n}\n\nfunction download (url, name, opts) {\n var xhr = new XMLHttpRequest()\n xhr.open('GET', url)\n xhr.responseType = 'blob'\n xhr.onload = function () {\n saveAs(xhr.response, name, opts)\n }\n xhr.onerror = function () {\n console.error('could not download file')\n }\n xhr.send()\n}\n\nfunction corsEnabled (url) {\n var xhr = new XMLHttpRequest()\n // use sync to avoid popup blocker\n xhr.open('HEAD', url, false)\n try {\n xhr.send()\n } catch (e) {}\n return xhr.status >= 200 && xhr.status <= 299\n}\n\n// `a.click()` doesn't work for all browsers (#465)\nfunction click (node) {\n try {\n node.dispatchEvent(new MouseEvent('click'))\n } catch (e) {\n var evt = document.createEvent('MouseEvents')\n evt.initMouseEvent('click', true, true, window, 0, 0, 0, 80,\n 20, false, false, false, false, 0, null)\n node.dispatchEvent(evt)\n }\n}\n\n// Detect WebView inside a native macOS app by ruling out all browsers\n// We just need to check for 'Safari' because all other browsers (besides Firefox) include that too\n// https://www.whatismybrowser.com/guides/the-latest-user-agent/macos\nvar isMacOSWebView = _global.navigator && /Macintosh/.test(navigator.userAgent) && /AppleWebKit/.test(navigator.userAgent) && !/Safari/.test(navigator.userAgent)\n\nvar saveAs = _global.saveAs || (\n // probably in some web worker\n (typeof window !== 'object' || window !== _global)\n ? function saveAs () { /* noop */ }\n\n // Use download attribute first if possible (#193 Lumia mobile) unless this is a macOS WebView\n : ('download' in HTMLAnchorElement.prototype && !isMacOSWebView)\n ? function saveAs (blob, name, opts) {\n var URL = _global.URL || _global.webkitURL\n var a = document.createElement('a')\n name = name || blob.name || 'download'\n\n a.download = name\n a.rel = 'noopener' // tabnabbing\n\n // TODO: detect chrome extensions & packaged apps\n // a.target = '_blank'\n\n if (typeof blob === 'string') {\n // Support regular links\n a.href = blob\n if (a.origin !== location.origin) {\n corsEnabled(a.href)\n ? download(blob, name, opts)\n : click(a, a.target = '_blank')\n } else {\n click(a)\n }\n } else {\n // Support blobs\n a.href = URL.createObjectURL(blob)\n setTimeout(function () { URL.revokeObjectURL(a.href) }, 4E4) // 40s\n setTimeout(function () { click(a) }, 0)\n }\n }\n\n // Use msSaveOrOpenBlob as a second approach\n : 'msSaveOrOpenBlob' in navigator\n ? function saveAs (blob, name, opts) {\n name = name || blob.name || 'download'\n\n if (typeof blob === 'string') {\n if (corsEnabled(blob)) {\n download(blob, name, opts)\n } else {\n var a = document.createElement('a')\n a.href = blob\n a.target = '_blank'\n setTimeout(function () { click(a) })\n }\n } else {\n navigator.msSaveOrOpenBlob(bom(blob, opts), name)\n }\n }\n\n // Fallback to using FileReader and a popup\n : function saveAs (blob, name, opts, popup) {\n // Open a popup immediately do go around popup blocker\n // Mostly only available on user interaction and the fileReader is async so...\n popup = popup || open('', '_blank')\n if (popup) {\n popup.document.title =\n popup.document.body.innerText = 'downloading...'\n }\n\n if (typeof blob === 'string') return download(blob, name, opts)\n\n var force = blob.type === 'application/octet-stream'\n var isSafari = /constructor/i.test(_global.HTMLElement) || _global.safari\n var isChromeIOS = /CriOS\\/[\\d]+/.test(navigator.userAgent)\n\n if ((isChromeIOS || (force && isSafari) || isMacOSWebView) && typeof FileReader !== 'undefined') {\n // Safari doesn't allow downloading of blob URLs\n var reader = new FileReader()\n reader.onloadend = function () {\n var url = reader.result\n url = isChromeIOS ? url : url.replace(/^data:[^;]*;/, 'data:attachment/file;')\n if (popup) popup.location.href = url\n else location = url\n popup = null // reverse-tabnabbing #460\n }\n reader.readAsDataURL(blob)\n } else {\n var URL = _global.URL || _global.webkitURL\n var url = URL.createObjectURL(blob)\n if (popup) popup.location = url\n else location.href = url\n popup = null // reverse-tabnabbing #460\n setTimeout(function () { URL.revokeObjectURL(url) }, 4E4) // 40s\n }\n }\n)\n\n_global.saveAs = saveAs.saveAs = saveAs\n\nif (typeof module !== 'undefined') {\n module.exports = saveAs;\n}\n", "\nimport { Platform, EmuState, EmuControlsState, EmuRecorder } from \"./baseplatform\";\nimport { getNoiseSeed, setNoiseSeed } from \"./emu\";\n\n// RECORDER\n\ntype FrameRec = {controls:EmuControlsState, seed:number};\n\nexport class StateRecorderImpl implements EmuRecorder {\n \n checkpointInterval : number = 10;\n callbackStateChanged : () => void;\n callbackNewCheckpoint : (state:EmuState) => void;\n maxCheckpoints : number = 300;\n \n platform : Platform;\n checkpoints : EmuState[];\n framerecs : FrameRec[];\n frameCount : number;\n lastSeekFrame : number;\n lastSeekStep : number;\n lastStepCount : number;\n \n constructor(platform : Platform) {\n this.reset();\n this.platform = platform;\n }\n\n reset() {\n this.checkpoints = [];\n this.framerecs = [];\n this.frameCount = 0;\n this.lastSeekFrame = 0;\n this.lastSeekStep = 0;\n this.lastStepCount = 0;\n if (this.callbackStateChanged) this.callbackStateChanged();\n }\n\n frameRequested() : boolean {\n var controls = {\n controls:this.platform.saveControlsState(),\n seed:getNoiseSeed()\n };\n var requested = false;\n // are we replaying? then we don't need to save a frame, just replace controls\n if (this.lastSeekFrame < this.frameCount) {\n this.loadControls(this.lastSeekFrame);\n } else {\n // record the control state, if available\n if (this.platform.saveControlsState) {\n this.framerecs.push(controls);\n }\n // time to save next frame?\n requested = (this.frameCount++ % this.checkpointInterval) == 0;\n }\n this.lastSeekFrame++;\n this.lastSeekStep = 0;\n if (this.callbackStateChanged) this.callbackStateChanged();\n return requested;\n }\n \n numFrames() : number {\n return this.frameCount;\n }\n \n currentFrame() : number {\n return this.lastSeekFrame;\n }\n\n currentStep() : number {\n return this.lastSeekStep;\n }\n\n recordFrame(state : EmuState) {\n this.checkpoints.push(state);\n if (this.callbackNewCheckpoint) this.callbackNewCheckpoint(state);\n // checkpoints full?\n if (this.checkpoints.length > this.maxCheckpoints) {\n this.checkpoints.shift(); // remove 1st checkpoint\n this.framerecs = this.framerecs.slice(this.checkpointInterval);\n this.lastSeekFrame -= this.checkpointInterval;\n this.frameCount -= this.checkpointInterval;\n if (this.callbackStateChanged) this.callbackStateChanged();\n }\n }\n\n getStateAtOrBefore(frame : number) : {frame : number, state : EmuState} {\n // initial frame?\n if (frame <= 0 && this.checkpoints.length > 0)\n return {frame:0, state:this.checkpoints[0]};\n\n var bufidx = Math.floor(frame / this.checkpointInterval);\n var foundidx = bufidx < this.checkpoints.length ? bufidx : this.checkpoints.length-1;\n var foundframe = foundidx * this.checkpointInterval;\n return {frame:foundframe, state:this.checkpoints[foundidx]};\n }\n\n loadFrame(seekframe : number, seekstep? : number) : number {\n seekframe |= 0;\n seekstep |= 0;\n if (seekframe == this.lastSeekFrame && seekstep == this.lastSeekStep) {\n return seekframe; // already set to this frame\n }\n // TODO: what if < 1?\n let {frame,state} = this.getStateAtOrBefore(seekframe-1);\n if (state) {\n var numSteps = 0;\n this.platform.pause();\n this.platform.loadState(state);\n // seek to frame index\n while (frame < seekframe) {\n if (frame < this.framerecs.length) {\n this.loadControls(frame);\n }\n frame++;\n numSteps = this.platform.advance(frame < seekframe); // TODO: infinite loop?\n }\n // TODO: if first frame, we must figure out # of steps\n if (frame == 0) {\n numSteps = this.platform.advance(true);\n this.platform.loadState(state);\n }\n // seek to step index\n // TODO: what if advance() returns clocks, but steps use insns?\n if (seekstep > 0 && this.platform.advanceFrameClock) { \n seekstep = this.platform.advanceFrameClock(null, seekstep);\n }\n // record new values\n this.lastSeekFrame = seekframe;\n this.lastSeekStep = seekstep;\n this.lastStepCount = numSteps;\n return seekframe;\n } else {\n return -1;\n }\n }\n \n loadControls(frame : number) {\n if (this.platform.loadControlsState)\n this.platform.loadControlsState(this.framerecs[frame].controls);\n setNoiseSeed(this.framerecs[frame].seed);\n }\n \n getLastCheckpoint() : EmuState {\n return this.checkpoints.length && this.checkpoints[this.checkpoints.length-1];\n }\n}\n\n", "// hard-code platform files for esbuild code-splitting\n\nexport function importPlatform(name: string) : Promise {\n switch (name) {\n case \"apple2\": return import(\"../platform/apple2\");\n case \"arm32\": return import(\"../platform/arm32\");\n case \"astrocade\": return import(\"../platform/astrocade\");\n case \"atari7800\": return import(\"../platform/atari7800\");\n case \"atari8\": return import(\"../platform/atari8\");\n case \"basic\": return import(\"../platform/basic\");\n case \"c64\": return import(\"../platform/c64\");\n case \"coleco\": return import(\"../platform/coleco\");\n case \"cpc\": return import(\"../platform/cpc\");\n case \"devel\": return import(\"../platform/devel\");\n case \"exidy\": return import(\"../platform/exidy\");\n case \"galaxian\": return import(\"../platform/galaxian\");\n case \"kim1\": return import(\"../platform/kim1\");\n case \"markdown\": return import(\"../platform/markdown\");\n case \"msx\": return import(\"../platform/msx\");\n case \"mw8080bw\": return import(\"../platform/mw8080bw\");\n case \"nes\": return import(\"../platform/nes\");\n case \"pce\": return import(\"../platform/pce\");\n case \"sms\": return import(\"../platform/sms\");\n case \"sound_konami\": return import(\"../platform/sound_konami\");\n case \"sound_williams\": return import(\"../platform/sound_williams\");\n case \"vcs\": return import(\"../platform/vcs\");\n case \"vector\": return import(\"../platform/vector\");\n case \"vectrex\": return import(\"../platform/vectrex\");\n case \"verilog\": return import(\"../platform/verilog\");\n case \"vic20\": return import(\"../platform/vic20\");\n case \"vicdual\": return import(\"../platform/vicdual\");\n case \"williams\": return import(\"../platform/williams\");\n case \"x86\": return import(\"../platform/x86\");\n case \"zmachine\": return import(\"../platform/zmachine\");\n case \"zx\": return import(\"../platform/zx\");\n default: throw new Error(`Platform not recognized: '${name}'`)\n }\n }\n \n "], + "mappings": "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", "names": [] } diff --git a/gen/chunk-JMPDXGK5.js b/gen/chunk-W3JZ7KMT.js similarity index 99% rename from gen/chunk-JMPDXGK5.js rename to gen/chunk-W3JZ7KMT.js index c33cb914..d1ce9658 100644 --- a/gen/chunk-JMPDXGK5.js +++ b/gen/chunk-W3JZ7KMT.js @@ -1,4 +1,4 @@ -import{a as hn,b as ya,c as Pl}from"./chunk-SDBJC2RS.js";import{a as js}from"./chunk-XMPGMPQ4.js";import{a as Bs,b as Us,c as kl}from"./chunk-NFHWZ4B3.js";import{D as va,J as ba,l as ee,u as $s,v as Ws}from"./chunk-42IVW2OL.js";import{A as Mr,E as _t,F as ha,G as Nr,H as fn,I as Ms,J as pa,T as ma,V as Ns,a as Rt,b as pi,ba as dn,ca as Os,d as ft,da as gi,e as da,f as rt,g as De,k as Fs,m as sn,n as on,o as ln,p as vr,q as Ls,t as un,w as Rs,x as Is,y as cn,z as dt}from"./chunk-S4FPTY4A.js";import{a as di,b as Ds,c as hi}from"./chunk-RQFURXHW.js";var wa=Ds((Hs,xa)=>{(function(l){if(typeof Hs=="object"&&typeof xa!="undefined")xa.exports=l();else if(typeof define=="function"&&define.amd)define([],l);else{var t;typeof window!="undefined"?t=window:typeof global!="undefined"?t=global:typeof self!="undefined"?t=self:t=this,t.localforage=l()}})(function(){var l,t,r;return function a(u,d,m){function b(W,fe){if(!d[W]){if(!u[W]){var z=typeof di=="function"&&di;if(!fe&&z)return z(W,!0);if(y)return y(W,!0);var H=new Error("Cannot find module '"+W+"'");throw H.code="MODULE_NOT_FOUND",H}var V=d[W]={exports:{}};u[W][0].call(V.exports,function(de){var K=u[W][1][de];return b(K||de)},V,V.exports,a,u,d,m)}return d[W].exports}for(var y=typeof di=="function"&&di,F=0;F=43)}}).catch(function(){return!1})}function _e(p){return typeof Ce=="boolean"?z.resolve(Ce):oe(p).then(function(S){return Ce=S,Ce})}function ze(p){var S=be[p.name],v={};v.promise=new z(function(C,k){v.resolve=C,v.reject=k}),S.deferredOperations.push(v),S.dbReady?S.dbReady=S.dbReady.then(function(){return v.promise}):S.dbReady=v.promise}function Ne(p){var S=be[p.name],v=S.deferredOperations.pop();if(v)return v.resolve(),v.promise}function it(p,S){var v=be[p.name],C=v.deferredOperations.pop();if(C)return C.reject(S),C.promise}function Je(p,S){return new z(function(v,C){if(be[p.name]=be[p.name]||ar(),p.db)if(S)ze(p),p.db.close();else return v(p.db);var k=[p.name];S&&k.push(p.version);var _=F.open.apply(F,k);S&&(_.onupgradeneeded=function(N){var j=_.result;try{j.createObjectStore(p.storeName),N.oldVersion<=1&&j.createObjectStore(xe)}catch(G){if(G.name==="ConstraintError")console.warn('The database "'+p.name+'" has been upgraded from version '+N.oldVersion+" to version "+N.newVersion+', but the storage "'+p.storeName+'" already exists.');else throw G}}),_.onerror=function(N){N.preventDefault(),C(_.error)},_.onsuccess=function(){var N=_.result;N.onversionchange=function(j){j.target.close()},v(N),Ne(p)}})}function bt(p){return Je(p,!1)}function nr(p){return Je(p,!0)}function Pr(p,S){if(!p.db)return!0;var v=!p.db.objectStoreNames.contains(p.storeName),C=p.versionp.db.version;if(C&&(p.version!==S&&console.warn('The database "'+p.name+`" can't be downgraded from version `+p.db.version+" to version "+p.version+"."),p.version=p.db.version),k||v){if(v){var _=p.db.version+1;_>p.version&&(p.version=_)}return!0}return!1}function jr(p){return new z(function(S,v){var C=new FileReader;C.onerror=v,C.onloadend=function(k){var _=btoa(k.target.result||"");S({__local_forage_encoded_blob:!0,data:_,type:p.type})},C.readAsBinaryString(p)})}function Xt(p){var S=ne(atob(p.data));return fe([S],{type:p.type})}function Br(p){return p&&p.__local_forage_encoded_blob}function yt(p){var S=this,v=S._initReady().then(function(){var C=be[S._dbInfo.name];if(C&&C.dbReady)return C.dbReady});return V(v,p,p),v}function Nn(p){ze(p);for(var S=be[p.name],v=S.forages,C=0;C0&&(!p.db||_.name==="InvalidStateError"||_.name==="NotFoundError"))return z.resolve().then(function(){if(!p.db||_.name==="NotFoundError"&&!p.db.objectStoreNames.contains(p.storeName)&&p.version<=p.db.version)return p.db&&(p.version=p.db.version+1),nr(p)}).then(function(){return Nn(p).then(function(){Ke(p,S,v,C-1)})}).catch(v);v(_)}}function ar(){return{forages:[],db:null,dbReady:null,deferredOperations:[]}}function Ii(p){var S=this,v={db:null};if(p)for(var C in p)v[C]=p[C];var k=be[v.name];k||(k=ar(),be[v.name]=k),k.forages.push(S),S._initReady||(S._initReady=S.ready,S.ready=yt);var _=[];function N(){return z.resolve()}for(var j=0;j>4,Y[k++]=(N&15)<<4|j>>2,Y[k++]=(j&3)<<6|G&63;return q}function Ze(p){var S=new Uint8Array(p),v="",C;for(C=0;C>2],v+=$e[(S[C]&3)<<4|S[C+1]>>4],v+=$e[(S[C+1]&15)<<2|S[C+2]>>6],v+=$e[S[C+2]&63];return S.length%3==2?v=v.substring(0,v.length-1)+"=":S.length%3==1&&(v=v.substring(0,v.length-2)+"=="),v}function et(p,S){var v="";if(p&&(v=Vr.call(p)),p&&(v==="[object ArrayBuffer]"||p.buffer&&Vr.call(p.buffer)==="[object ArrayBuffer]")){var C,k=Ar;p instanceof ArrayBuffer?(C=p,k+=Fr):(C=p.buffer,v==="[object Int8Array]"?k+=wt:v==="[object Uint8Array]"?k+=Lt:v==="[object Uint8ClampedArray]"?k+=Ot:v==="[object Int16Array]"?k+=Ni:v==="[object Uint16Array]"?k+=Hr:v==="[object Int32Array]"?k+=lr:v==="[object Uint32Array]"?k+=zr:v==="[object Float32Array]"?k+=Oi:v==="[object Float64Array]"?k+=$t:S(new Error("Failed to get type for BinaryArray"))),S(k+Ze(C))}else if(v==="[object Blob]"){var _=new FileReader;_.onload=function(){var N=Bn+p.type+"~"+Ze(this.result);S(Ar+Nt+N)},_.readAsArrayBuffer(p)}else try{S(JSON.stringify(p))}catch(N){console.error("Couldn't convert value into a JSON string: ",p),S(null,N)}}function qr(p){if(p.substring(0,Dr)!==Ar)return JSON.parse(p);var S=p.substring(Qt),v=p.substring(Dr,Qt),C;if(v===Nt&&Mi.test(S)){var k=S.match(Mi);C=k[1],S=S.substring(k[0].length)}var _=Gr(S);switch(v){case Fr:return _;case Nt:return fe([_],{type:C});case wt:return new Int8Array(_);case Lt:return new Uint8Array(_);case Ot:return new Uint8ClampedArray(_);case Ni:return new Int16Array(_);case Hr:return new Uint16Array(_);case lr:return new Int32Array(_);case zr:return new Uint32Array(_);case Oi:return new Float32Array(_);case $t:return new Float64Array(_);default:throw new Error("Unkown type: "+v)}}var Yr={serialize:et,deserialize:qr,stringToBuffer:Gr,bufferToString:Ze};function Xr(p,S,v,C){p.executeSql("CREATE TABLE IF NOT EXISTS "+S.storeName+" (id INTEGER PRIMARY KEY, key unique, value)",[],v,C)}function $i(p){var S=this,v={db:null};if(p)for(var C in p)v[C]=typeof p[C]!="string"?p[C].toString():p[C];var k=new z(function(_,N){try{v.db=openDatabase(v.name,String(v.version),v.description,v.size)}catch(j){return N(j)}v.db.transaction(function(j){Xr(j,v,function(){S._dbInfo=v,_()},function(G,q){N(q)})},N)});return v.serializer=Yr,k}function nt(p,S,v,C,k,_){p.executeSql(v,C,k,function(N,j){j.code===j.SYNTAX_ERR?N.executeSql("SELECT name FROM sqlite_master WHERE type='table' AND name = ?",[S.storeName],function(G,q){q.rows.length?_(G,j):Xr(G,S,function(){G.executeSql(v,C,k,_)},_)},_):_(N,j)},_)}function Jt(p,S){var v=this;p=de(p);var C=new z(function(k,_){v.ready().then(function(){var N=v._dbInfo;N.db.transaction(function(j){nt(j,N,"SELECT * FROM "+N.storeName+" WHERE key = ? LIMIT 1",[p],function(G,q){var Y=q.rows.length?q.rows.item(0).value:null;Y&&(Y=N.serializer.deserialize(Y)),k(Y)},function(G,q){_(q)})})}).catch(_)});return H(C,S),C}function Un(p,S){var v=this,C=new z(function(k,_){v.ready().then(function(){var N=v._dbInfo;N.db.transaction(function(j){nt(j,N,"SELECT * FROM "+N.storeName,[],function(G,q){for(var Y=q.rows,Z=Y.length,ye=0;ye0){N(Wi.apply(k,[p,G,v,C-1]));return}j(ye)}})})}).catch(j)});return H(_,v),_}function Qr(p,S,v){return Wi.apply(this,[p,S,v,1])}function Lr(p,S){var v=this;p=de(p);var C=new z(function(k,_){v.ready().then(function(){var N=v._dbInfo;N.db.transaction(function(j){nt(j,N,"DELETE FROM "+N.storeName+" WHERE key = ?",[p],function(){k()},function(G,q){_(q)})})}).catch(_)});return H(C,S),C}function Hn(p){var S=this,v=new z(function(C,k){S.ready().then(function(){var _=S._dbInfo;_.db.transaction(function(N){nt(N,_,"DELETE FROM "+_.storeName,[],function(){C()},function(j,G){k(G)})})}).catch(k)});return H(v,p),v}function zn(p){var S=this,v=new z(function(C,k){S.ready().then(function(){var _=S._dbInfo;_.db.transaction(function(N){nt(N,_,"SELECT COUNT(key) as c FROM "+_.storeName,[],function(j,G){var q=G.rows.item(0).c;C(q)},function(j,G){k(G)})})}).catch(k)});return H(v,p),v}function Vn(p,S){var v=this,C=new z(function(k,_){v.ready().then(function(){var N=v._dbInfo;N.db.transaction(function(j){nt(j,N,"SELECT key FROM "+N.storeName+" WHERE id = ? LIMIT 1",[p+1],function(G,q){var Y=q.rows.length?q.rows.item(0).key:null;k(Y)},function(G,q){_(q)})})}).catch(_)});return H(C,S),C}function ji(p){var S=this,v=new z(function(C,k){S.ready().then(function(){var _=S._dbInfo;_.db.transaction(function(N){nt(N,_,"SELECT key FROM "+_.storeName,[],function(j,G){for(var q=[],Y=0;Y '__WebKitDatabaseInfoTable__'",[],function(k,_){for(var N=[],j=0;j<_.rows.length;j++)N.push(_.rows.item(j).name);S({db:p,storeNames:N})},function(k,_){v(_)})},function(C){v(C)})})}function qn(p,S){S=K.apply(this,arguments);var v=this.config();p=typeof p!="function"&&p||{},p.name||(p.name=p.name||v.name,p.storeName=p.storeName||v.storeName);var C=this,k;return p.name?k=new z(function(_){var N;p.name===v.name?N=C._dbInfo.db:N=openDatabase(p.name,"","",0),p.storeName?_({db:N,storeNames:[p.storeName]}):_(Gn(N))}).then(function(_){return new z(function(N,j){_.db.transaction(function(G){function q(Pe){return new z(function(ke,We){G.executeSql("DROP TABLE IF EXISTS "+Pe,[],function(){ke()},function(Le,at){We(at)})})}for(var Y=[],Z=0,ye=_.storeNames.length;Z0}function Kr(p){var S=this,v={};if(p)for(var C in p)v[C]=p[C];return v.keyPrefix=Wt(p,S._defaultConfig),Jr()?(S._dbInfo=v,v.serializer=Yr,z.resolve()):z.reject()}function Rr(p){var S=this,v=S.ready().then(function(){for(var C=S._dbInfo.keyPrefix,k=localStorage.length-1;k>=0;k--){var _=localStorage.key(k);_.indexOf(C)===0&&localStorage.removeItem(_)}});return H(v,p),v}function Hi(p,S){var v=this;p=de(p);var C=v.ready().then(function(){var k=v._dbInfo,_=localStorage.getItem(k.keyPrefix+p);return _&&(_=k.serializer.deserialize(_)),_});return H(C,S),C}function Xn(p,S){var v=this,C=v.ready().then(function(){for(var k=v._dbInfo,_=k.keyPrefix,N=_.length,j=localStorage.length,G=1,q=0;q=0;N--){var j=localStorage.key(N);j.indexOf(_)===0&&localStorage.removeItem(j)}}):k=z.reject("Invalid arguments"),H(k,S),k}var Yi={_driver:"localStorageWrapper",_initStorage:Kr,_support:Yn(),iterate:Xn,getItem:Hi,setItem:Gi,removeItem:Vi,clear:Rr,length:ur,key:zi,keys:Qn,dropInstance:qi},Jn=function(S,v){return S===v||typeof S=="number"&&typeof v=="number"&&isNaN(S)&&isNaN(v)},Zr=function(S,v){for(var C=S.length,k=0;k{(function(l,t){"use strict";typeof mn=="object"&&typeof mn.exports=="object"?mn.exports=l.document?t(l,!0):function(r){if(!r.document)throw new Error("jQuery requires a window with a document");return t(r)}:t(l)})(typeof window!="undefined"?window:qs,function(l,t){"use strict";var r=[],a=Object.getPrototypeOf,u=r.slice,d=r.flat?function(e){return r.flat.call(e)}:function(e){return r.concat.apply([],e)},m=r.push,b=r.indexOf,y={},F=y.toString,W=y.hasOwnProperty,fe=W.toString,z=fe.call(Object),H={},V=function(i){return typeof i=="function"&&typeof i.nodeType!="number"&&typeof i.item!="function"},de=function(i){return i!=null&&i===i.window},K=l.document,xe={type:!0,src:!0,nonce:!0,noModule:!0};function Ce(e,i,n){n=n||K;var s,c,f=n.createElement("script");if(f.text=e,i)for(s in xe)c=i[s]||i.getAttribute&&i.getAttribute(s),c&&f.setAttribute(s,c);n.head.appendChild(f).parentNode.removeChild(f)}function be(e){return e==null?e+"":typeof e=="object"||typeof e=="function"?y[F.call(e)]||"object":typeof e}var Se="3.6.3",o=function(e,i){return new o.fn.init(e,i)};o.fn=o.prototype={jquery:Se,constructor:o,length:0,toArray:function(){return u.call(this)},get:function(e){return e==null?u.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var i=o.merge(this.constructor(),e);return i.prevObject=this,i},each:function(e){return o.each(this,e)},map:function(e){return this.pushStack(o.map(this,function(i,n){return e.call(i,n,i)}))},slice:function(){return this.pushStack(u.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(o.grep(this,function(e,i){return(i+1)%2}))},odd:function(){return this.pushStack(o.grep(this,function(e,i){return i%2}))},eq:function(e){var i=this.length,n=+e+(e<0?i:0);return this.pushStack(n>=0&&n0&&i-1 in e}var ne=function(e){var i,n,s,c,f,h,E,x,D,R,B,L,I,ie,ve,re,Ge,Ve,ht,Fe="sizzle"+1*new Date,ge=e.document,ut=0,Te=0,je=tn(),li=tn(),Ki=tn(),pt=tn(),dr=function(g,w){return g===w&&(B=!0),0},hr={}.hasOwnProperty,ct=[],Zt=ct.pop,Et=ct.push,er=ct.push,ws=ct.slice,pr=function(g,w){for(var T=0,M=g.length;T+~]|"+Ae+")"+Ae+"*"),gl=new RegExp(Ae+"|>"),ml=new RegExp(aa),vl=new RegExp("^"+gr+"$"),en={ID:new RegExp("^#("+gr+")"),CLASS:new RegExp("^\\.("+gr+")"),TAG:new RegExp("^("+gr+"|[*])"),ATTR:new RegExp("^"+Es),PSEUDO:new RegExp("^"+aa),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+Ae+"*(even|odd|(([+-]|)(\\d*)n|)"+Ae+"*(?:([+-]|)"+Ae+"*(\\d+)|))"+Ae+"*\\)|)","i"),bool:new RegExp("^(?:"+na+")$","i"),needsContext:new RegExp("^"+Ae+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+Ae+"*((?:-\\d)?\\d*)"+Ae+"*\\)|)(?=[^-]|$)","i")},bl=/HTML$/i,yl=/^(?:input|select|textarea|button)$/i,xl=/^h\d$/i,ui=/^[^{]+\{\s*\[native \w/,wl=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,sa=/[+~]/,Ut=new RegExp("\\\\[\\da-fA-F]{1,6}"+Ae+"?|\\\\([^\\r\\n\\f])","g"),Ht=function(g,w){var T="0x"+g.slice(1)-65536;return w||(T<0?String.fromCharCode(T+65536):String.fromCharCode(T>>10|55296,T&1023|56320))},_s=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,Ts=function(g,w){return w?g==="\0"?"\uFFFD":g.slice(0,-1)+"\\"+g.charCodeAt(g.length-1).toString(16)+" ":"\\"+g},Cs=function(){L()},El=nn(function(g){return g.disabled===!0&&g.nodeName.toLowerCase()==="fieldset"},{dir:"parentNode",next:"legend"});try{er.apply(ct=ws.call(ge.childNodes),ge.childNodes),ct[ge.childNodes.length].nodeType}catch(g){er={apply:ct.length?function(w,T){Et.apply(w,ws.call(T))}:function(w,T){for(var M=w.length,A=0;w[M++]=T[A++];);w.length=M-1}}}function Re(g,w,T,M){var A,O,U,Q,J,ue,se,he=w&&w.ownerDocument,Ee=w?w.nodeType:9;if(T=T||[],typeof g!="string"||!g||Ee!==1&&Ee!==9&&Ee!==11)return T;if(!M&&(L(w),w=w||I,ve)){if(Ee!==11&&(J=wl.exec(g)))if(A=J[1]){if(Ee===9)if(U=w.getElementById(A)){if(U.id===A)return T.push(U),T}else return T;else if(he&&(U=he.getElementById(A))&&ht(w,U)&&U.id===A)return T.push(U),T}else{if(J[2])return er.apply(T,w.getElementsByTagName(g)),T;if((A=J[3])&&n.getElementsByClassName&&w.getElementsByClassName)return er.apply(T,w.getElementsByClassName(A)),T}if(n.qsa&&!pt[g+" "]&&(!re||!re.test(g))&&(Ee!==1||w.nodeName.toLowerCase()!=="object")){if(se=g,he=w,Ee===1&&(gl.test(g)||Ss.test(g))){for(he=sa.test(g)&&la(w.parentNode)||w,(he!==w||!n.scope)&&((Q=w.getAttribute("id"))?Q=Q.replace(_s,Ts):w.setAttribute("id",Q=Fe)),ue=h(g),O=ue.length;O--;)ue[O]=(Q?"#"+Q:":scope")+" "+rn(ue[O]);se=ue.join(",")}try{if(n.cssSupportsSelector&&!CSS.supports("selector(:is("+se+"))"))throw new Error;return er.apply(T,he.querySelectorAll(se)),T}catch(Ie){pt(g,!0)}finally{Q===Fe&&w.removeAttribute("id")}}}return x(g.replace(Zi,"$1"),w,T,M)}function tn(){var g=[];function w(T,M){return g.push(T+" ")>s.cacheLength&&delete w[g.shift()],w[T+" "]=M}return w}function kt(g){return g[Fe]=!0,g}function St(g){var w=I.createElement("fieldset");try{return!!g(w)}catch(T){return!1}finally{w.parentNode&&w.parentNode.removeChild(w),w=null}}function oa(g,w){for(var T=g.split("|"),M=T.length;M--;)s.attrHandle[T[M]]=w}function Ps(g,w){var T=w&&g,M=T&&g.nodeType===1&&w.nodeType===1&&g.sourceIndex-w.sourceIndex;if(M)return M;if(T){for(;T=T.nextSibling;)if(T===w)return-1}return g?1:-1}function Sl(g){return function(w){var T=w.nodeName.toLowerCase();return T==="input"&&w.type===g}}function _l(g){return function(w){var T=w.nodeName.toLowerCase();return(T==="input"||T==="button")&&w.type===g}}function ks(g){return function(w){return"form"in w?w.parentNode&&w.disabled===!1?"label"in w?"label"in w.parentNode?w.parentNode.disabled===g:w.disabled===g:w.isDisabled===g||w.isDisabled!==!g&&El(w)===g:w.disabled===g:"label"in w?w.disabled===g:!1}}function mr(g){return kt(function(w){return w=+w,kt(function(T,M){for(var A,O=g([],T.length,w),U=O.length;U--;)T[A=O[U]]&&(T[A]=!(M[A]=T[A]))})})}function la(g){return g&&typeof g.getElementsByTagName!="undefined"&&g}n=Re.support={},f=Re.isXML=function(g){var w=g&&g.namespaceURI,T=g&&(g.ownerDocument||g).documentElement;return!bl.test(w||T&&T.nodeName||"HTML")},L=Re.setDocument=function(g){var w,T,M=g?g.ownerDocument||g:ge;return M==I||M.nodeType!==9||!M.documentElement||(I=M,ie=I.documentElement,ve=!f(I),ge!=I&&(T=I.defaultView)&&T.top!==T&&(T.addEventListener?T.addEventListener("unload",Cs,!1):T.attachEvent&&T.attachEvent("onunload",Cs)),n.scope=St(function(A){return ie.appendChild(A).appendChild(I.createElement("div")),typeof A.querySelectorAll!="undefined"&&!A.querySelectorAll(":scope fieldset div").length}),n.cssSupportsSelector=St(function(){return CSS.supports("selector(*)")&&I.querySelectorAll(":is(:jqfake)")&&!CSS.supports("selector(:is(*,:jqfake))")}),n.attributes=St(function(A){return A.className="i",!A.getAttribute("className")}),n.getElementsByTagName=St(function(A){return A.appendChild(I.createComment("")),!A.getElementsByTagName("*").length}),n.getElementsByClassName=ui.test(I.getElementsByClassName),n.getById=St(function(A){return ie.appendChild(A).id=Fe,!I.getElementsByName||!I.getElementsByName(Fe).length}),n.getById?(s.filter.ID=function(A){var O=A.replace(Ut,Ht);return function(U){return U.getAttribute("id")===O}},s.find.ID=function(A,O){if(typeof O.getElementById!="undefined"&&ve){var U=O.getElementById(A);return U?[U]:[]}}):(s.filter.ID=function(A){var O=A.replace(Ut,Ht);return function(U){var Q=typeof U.getAttributeNode!="undefined"&&U.getAttributeNode("id");return Q&&Q.value===O}},s.find.ID=function(A,O){if(typeof O.getElementById!="undefined"&&ve){var U,Q,J,ue=O.getElementById(A);if(ue){if(U=ue.getAttributeNode("id"),U&&U.value===A)return[ue];for(J=O.getElementsByName(A),Q=0;ue=J[Q++];)if(U=ue.getAttributeNode("id"),U&&U.value===A)return[ue]}return[]}}),s.find.TAG=n.getElementsByTagName?function(A,O){if(typeof O.getElementsByTagName!="undefined")return O.getElementsByTagName(A);if(n.qsa)return O.querySelectorAll(A)}:function(A,O){var U,Q=[],J=0,ue=O.getElementsByTagName(A);if(A==="*"){for(;U=ue[J++];)U.nodeType===1&&Q.push(U);return Q}return ue},s.find.CLASS=n.getElementsByClassName&&function(A,O){if(typeof O.getElementsByClassName!="undefined"&&ve)return O.getElementsByClassName(A)},Ge=[],re=[],(n.qsa=ui.test(I.querySelectorAll))&&(St(function(A){var O;ie.appendChild(A).innerHTML="",A.querySelectorAll("[msallowcapture^='']").length&&re.push("[*^$]="+Ae+`*(?:''|"")`),A.querySelectorAll("[selected]").length||re.push("\\["+Ae+"*(?:value|"+na+")"),A.querySelectorAll("[id~="+Fe+"-]").length||re.push("~="),O=I.createElement("input"),O.setAttribute("name",""),A.appendChild(O),A.querySelectorAll("[name='']").length||re.push("\\["+Ae+"*name"+Ae+"*="+Ae+`*(?:''|"")`),A.querySelectorAll(":checked").length||re.push(":checked"),A.querySelectorAll("a#"+Fe+"+*").length||re.push(".#.+[+~]"),A.querySelectorAll("\\\f"),re.push("[\\r\\n\\f]")}),St(function(A){A.innerHTML="";var O=I.createElement("input");O.setAttribute("type","hidden"),A.appendChild(O).setAttribute("name","D"),A.querySelectorAll("[name=d]").length&&re.push("name"+Ae+"*[*^$|!~]?="),A.querySelectorAll(":enabled").length!==2&&re.push(":enabled",":disabled"),ie.appendChild(A).disabled=!0,A.querySelectorAll(":disabled").length!==2&&re.push(":enabled",":disabled"),A.querySelectorAll("*,:x"),re.push(",.*:")})),(n.matchesSelector=ui.test(Ve=ie.matches||ie.webkitMatchesSelector||ie.mozMatchesSelector||ie.oMatchesSelector||ie.msMatchesSelector))&&St(function(A){n.disconnectedMatch=Ve.call(A,"*"),Ve.call(A,"[s!='']:x"),Ge.push("!=",aa)}),n.cssSupportsSelector||re.push(":has"),re=re.length&&new RegExp(re.join("|")),Ge=Ge.length&&new RegExp(Ge.join("|")),w=ui.test(ie.compareDocumentPosition),ht=w||ui.test(ie.contains)?function(A,O){var U=A.nodeType===9&&A.documentElement||A,Q=O&&O.parentNode;return A===Q||!!(Q&&Q.nodeType===1&&(U.contains?U.contains(Q):A.compareDocumentPosition&&A.compareDocumentPosition(Q)&16))}:function(A,O){if(O){for(;O=O.parentNode;)if(O===A)return!0}return!1},dr=w?function(A,O){if(A===O)return B=!0,0;var U=!A.compareDocumentPosition-!O.compareDocumentPosition;return U||(U=(A.ownerDocument||A)==(O.ownerDocument||O)?A.compareDocumentPosition(O):1,U&1||!n.sortDetached&&O.compareDocumentPosition(A)===U?A==I||A.ownerDocument==ge&&ht(ge,A)?-1:O==I||O.ownerDocument==ge&&ht(ge,O)?1:R?pr(R,A)-pr(R,O):0:U&4?-1:1)}:function(A,O){if(A===O)return B=!0,0;var U,Q=0,J=A.parentNode,ue=O.parentNode,se=[A],he=[O];if(!J||!ue)return A==I?-1:O==I?1:J?-1:ue?1:R?pr(R,A)-pr(R,O):0;if(J===ue)return Ps(A,O);for(U=A;U=U.parentNode;)se.unshift(U);for(U=O;U=U.parentNode;)he.unshift(U);for(;se[Q]===he[Q];)Q++;return Q?Ps(se[Q],he[Q]):se[Q]==ge?-1:he[Q]==ge?1:0}),I},Re.matches=function(g,w){return Re(g,null,null,w)},Re.matchesSelector=function(g,w){if(L(g),n.matchesSelector&&ve&&!pt[w+" "]&&(!Ge||!Ge.test(w))&&(!re||!re.test(w)))try{var T=Ve.call(g,w);if(T||n.disconnectedMatch||g.document&&g.document.nodeType!==11)return T}catch(M){pt(w,!0)}return Re(w,I,null,[g]).length>0},Re.contains=function(g,w){return(g.ownerDocument||g)!=I&&L(g),ht(g,w)},Re.attr=function(g,w){(g.ownerDocument||g)!=I&&L(g);var T=s.attrHandle[w.toLowerCase()],M=T&&hr.call(s.attrHandle,w.toLowerCase())?T(g,w,!ve):void 0;return M!==void 0?M:n.attributes||!ve?g.getAttribute(w):(M=g.getAttributeNode(w))&&M.specified?M.value:null},Re.escape=function(g){return(g+"").replace(_s,Ts)},Re.error=function(g){throw new Error("Syntax error, unrecognized expression: "+g)},Re.uniqueSort=function(g){var w,T=[],M=0,A=0;if(B=!n.detectDuplicates,R=!n.sortStable&&g.slice(0),g.sort(dr),B){for(;w=g[A++];)w===g[A]&&(M=T.push(A));for(;M--;)g.splice(T[M],1)}return R=null,g},c=Re.getText=function(g){var w,T="",M=0,A=g.nodeType;if(A){if(A===1||A===9||A===11){if(typeof g.textContent=="string")return g.textContent;for(g=g.firstChild;g;g=g.nextSibling)T+=c(g)}else if(A===3||A===4)return g.nodeValue}else for(;w=g[M++];)T+=c(w);return T},s=Re.selectors={cacheLength:50,createPseudo:kt,match:en,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(g){return g[1]=g[1].replace(Ut,Ht),g[3]=(g[3]||g[4]||g[5]||"").replace(Ut,Ht),g[2]==="~="&&(g[3]=" "+g[3]+" "),g.slice(0,4)},CHILD:function(g){return g[1]=g[1].toLowerCase(),g[1].slice(0,3)==="nth"?(g[3]||Re.error(g[0]),g[4]=+(g[4]?g[5]+(g[6]||1):2*(g[3]==="even"||g[3]==="odd")),g[5]=+(g[7]+g[8]||g[3]==="odd")):g[3]&&Re.error(g[0]),g},PSEUDO:function(g){var w,T=!g[6]&&g[2];return en.CHILD.test(g[0])?null:(g[3]?g[2]=g[4]||g[5]||"":T&&ml.test(T)&&(w=h(T,!0))&&(w=T.indexOf(")",T.length-w)-T.length)&&(g[0]=g[0].slice(0,w),g[2]=T.slice(0,w)),g.slice(0,3))}},filter:{TAG:function(g){var w=g.replace(Ut,Ht).toLowerCase();return g==="*"?function(){return!0}:function(T){return T.nodeName&&T.nodeName.toLowerCase()===w}},CLASS:function(g){var w=je[g+" "];return w||(w=new RegExp("(^|"+Ae+")"+g+"("+Ae+"|$)"))&&je(g,function(T){return w.test(typeof T.className=="string"&&T.className||typeof T.getAttribute!="undefined"&&T.getAttribute("class")||"")})},ATTR:function(g,w,T){return function(M){var A=Re.attr(M,g);return A==null?w==="!=":w?(A+="",w==="="?A===T:w==="!="?A!==T:w==="^="?T&&A.indexOf(T)===0:w==="*="?T&&A.indexOf(T)>-1:w==="$="?T&&A.slice(-T.length)===T:w==="~="?(" "+A.replace(hl," ")+" ").indexOf(T)>-1:w==="|="?A===T||A.slice(0,T.length+1)===T+"-":!1):!0}},CHILD:function(g,w,T,M,A){var O=g.slice(0,3)!=="nth",U=g.slice(-4)!=="last",Q=w==="of-type";return M===1&&A===0?function(J){return!!J.parentNode}:function(J,ue,se){var he,Ee,Ie,ce,qe,tt,gt=O!==U?"nextSibling":"previousSibling",Oe=J.parentNode,ci=Q&&J.nodeName.toLowerCase(),fi=!se&&!Q,mt=!1;if(Oe){if(O){for(;gt;){for(ce=J;ce=ce[gt];)if(Q?ce.nodeName.toLowerCase()===ci:ce.nodeType===1)return!1;tt=gt=g==="only"&&!tt&&"nextSibling"}return!0}if(tt=[U?Oe.firstChild:Oe.lastChild],U&&fi){for(ce=Oe,Ie=ce[Fe]||(ce[Fe]={}),Ee=Ie[ce.uniqueID]||(Ie[ce.uniqueID]={}),he=Ee[g]||[],qe=he[0]===ut&&he[1],mt=qe&&he[2],ce=qe&&Oe.childNodes[qe];ce=++qe&&ce&&ce[gt]||(mt=qe=0)||tt.pop();)if(ce.nodeType===1&&++mt&&ce===J){Ee[g]=[ut,qe,mt];break}}else if(fi&&(ce=J,Ie=ce[Fe]||(ce[Fe]={}),Ee=Ie[ce.uniqueID]||(Ie[ce.uniqueID]={}),he=Ee[g]||[],qe=he[0]===ut&&he[1],mt=qe),mt===!1)for(;(ce=++qe&&ce&&ce[gt]||(mt=qe=0)||tt.pop())&&!((Q?ce.nodeName.toLowerCase()===ci:ce.nodeType===1)&&++mt&&(fi&&(Ie=ce[Fe]||(ce[Fe]={}),Ee=Ie[ce.uniqueID]||(Ie[ce.uniqueID]={}),Ee[g]=[ut,mt]),ce===J)););return mt-=A,mt===M||mt%M==0&&mt/M>=0}}},PSEUDO:function(g,w){var T,M=s.pseudos[g]||s.setFilters[g.toLowerCase()]||Re.error("unsupported pseudo: "+g);return M[Fe]?M(w):M.length>1?(T=[g,g,"",w],s.setFilters.hasOwnProperty(g.toLowerCase())?kt(function(A,O){for(var U,Q=M(A,w),J=Q.length;J--;)U=pr(A,Q[J]),A[U]=!(O[U]=Q[J])}):function(A){return M(A,0,T)}):M}},pseudos:{not:kt(function(g){var w=[],T=[],M=E(g.replace(Zi,"$1"));return M[Fe]?kt(function(A,O,U,Q){for(var J,ue=M(A,null,Q,[]),se=A.length;se--;)(J=ue[se])&&(A[se]=!(O[se]=J))}):function(A,O,U){return w[0]=A,M(w,null,U,T),w[0]=null,!T.pop()}}),has:kt(function(g){return function(w){return Re(g,w).length>0}}),contains:kt(function(g){return g=g.replace(Ut,Ht),function(w){return(w.textContent||c(w)).indexOf(g)>-1}}),lang:kt(function(g){return vl.test(g||"")||Re.error("unsupported lang: "+g),g=g.replace(Ut,Ht).toLowerCase(),function(w){var T;do if(T=ve?w.lang:w.getAttribute("xml:lang")||w.getAttribute("lang"))return T=T.toLowerCase(),T===g||T.indexOf(g+"-")===0;while((w=w.parentNode)&&w.nodeType===1);return!1}}),target:function(g){var w=e.location&&e.location.hash;return w&&w.slice(1)===g.id},root:function(g){return g===ie},focus:function(g){return g===I.activeElement&&(!I.hasFocus||I.hasFocus())&&!!(g.type||g.href||~g.tabIndex)},enabled:ks(!1),disabled:ks(!0),checked:function(g){var w=g.nodeName.toLowerCase();return w==="input"&&!!g.checked||w==="option"&&!!g.selected},selected:function(g){return g.parentNode&&g.parentNode.selectedIndex,g.selected===!0},empty:function(g){for(g=g.firstChild;g;g=g.nextSibling)if(g.nodeType<6)return!1;return!0},parent:function(g){return!s.pseudos.empty(g)},header:function(g){return xl.test(g.nodeName)},input:function(g){return yl.test(g.nodeName)},button:function(g){var w=g.nodeName.toLowerCase();return w==="input"&&g.type==="button"||w==="button"},text:function(g){var w;return g.nodeName.toLowerCase()==="input"&&g.type==="text"&&((w=g.getAttribute("type"))==null||w.toLowerCase()==="text")},first:mr(function(){return[0]}),last:mr(function(g,w){return[w-1]}),eq:mr(function(g,w,T){return[T<0?T+w:T]}),even:mr(function(g,w){for(var T=0;Tw?w:T;--M>=0;)g.push(M);return g}),gt:mr(function(g,w,T){for(var M=T<0?T+w:T;++M1?function(w,T,M){for(var A=g.length;A--;)if(!g[A](w,T,M))return!1;return!0}:g[0]}function Tl(g,w,T){for(var M=0,A=w.length;M-1&&(U[se]=!(Q[se]=Ee))}}else Oe=an(Oe===Q?Oe.splice(qe,Oe.length):Oe),A?A(null,Q,Oe,ue):er.apply(Q,Oe)})}function fa(g){for(var w,T,M,A=g.length,O=s.relative[g[0].type],U=O||s.relative[" "],Q=O?1:0,J=nn(function(he){return he===w},U,!0),ue=nn(function(he){return pr(w,he)>-1},U,!0),se=[function(he,Ee,Ie){var ce=!O&&(Ie||Ee!==D)||((w=Ee).nodeType?J(he,Ee,Ie):ue(he,Ee,Ie));return w=null,ce}];Q1&&ua(se),Q>1&&rn(g.slice(0,Q-1).concat({value:g[Q-2].type===" "?"*":""})).replace(Zi,"$1"),T,Q0,M=g.length>0,A=function(O,U,Q,J,ue){var se,he,Ee,Ie=0,ce="0",qe=O&&[],tt=[],gt=D,Oe=O||M&&s.find.TAG("*",ue),ci=ut+=gt==null?1:Math.random()||.1,fi=Oe.length;for(ue&&(D=U==I||U||ue);ce!==fi&&(se=Oe[ce])!=null;ce++){if(M&&se){for(he=0,!U&&se.ownerDocument!=I&&(L(se),Q=!ve);Ee=g[he++];)if(Ee(se,U||I,Q)){J.push(se);break}ue&&(ut=ci)}T&&((se=!Ee&&se)&&Ie--,O&&qe.push(se))}if(Ie+=ce,T&&ce!==Ie){for(he=0;Ee=w[he++];)Ee(qe,tt,U,Q);if(O){if(Ie>0)for(;ce--;)qe[ce]||tt[ce]||(tt[ce]=Zt.call(J));tt=an(tt)}er.apply(J,tt),ue&&!O&&tt.length>0&&Ie+w.length>1&&Re.uniqueSort(J)}return ue&&(ut=ci,D=gt),qe};return T?kt(A):A}return E=Re.compile=function(g,w){var T,M=[],A=[],O=Ki[g+" "];if(!O){for(w||(w=h(g)),T=w.length;T--;)O=fa(w[T]),O[Fe]?M.push(O):A.push(O);O=Ki(g,Cl(A,M)),O.selector=g}return O},x=Re.select=function(g,w,T,M){var A,O,U,Q,J,ue=typeof g=="function"&&g,se=!M&&h(g=ue.selector||g);if(T=T||[],se.length===1){if(O=se[0]=se[0].slice(0),O.length>2&&(U=O[0]).type==="ID"&&w.nodeType===9&&ve&&s.relative[O[1].type]){if(w=(s.find.ID(U.matches[0].replace(Ut,Ht),w)||[])[0],w)ue&&(w=w.parentNode);else return T;g=g.slice(O.shift().value.length)}for(A=en.needsContext.test(g)?0:O.length;A--&&(U=O[A],!s.relative[Q=U.type]);)if((J=s.find[Q])&&(M=J(U.matches[0].replace(Ut,Ht),sa.test(O[0].type)&&la(w.parentNode)||w))){if(O.splice(A,1),g=M.length&&rn(O),!g)return er.apply(T,M),T;break}}return(ue||E(g,se))(M,w,!ve,T,!w||sa.test(g)&&la(w.parentNode)||w),T},n.sortStable=Fe.split("").sort(dr).join("")===Fe,n.detectDuplicates=!!B,L(),n.sortDetached=St(function(g){return g.compareDocumentPosition(I.createElement("fieldset"))&1}),St(function(g){return g.innerHTML="",g.firstChild.getAttribute("href")==="#"})||oa("type|href|height|width",function(g,w,T){if(!T)return g.getAttribute(w,w.toLowerCase()==="type"?1:2)}),(!n.attributes||!St(function(g){return g.innerHTML="",g.firstChild.setAttribute("value",""),g.firstChild.getAttribute("value")===""}))&&oa("value",function(g,w,T){if(!T&&g.nodeName.toLowerCase()==="input")return g.defaultValue}),St(function(g){return g.getAttribute("disabled")==null})||oa(na,function(g,w,T){var M;if(!T)return g[w]===!0?w.toLowerCase():(M=g.getAttributeNode(w))&&M.specified?M.value:null}),Re}(l);o.find=ne,o.expr=ne.selectors,o.expr[":"]=o.expr.pseudos,o.uniqueSort=o.unique=ne.uniqueSort,o.text=ne.getText,o.isXMLDoc=ne.isXML,o.contains=ne.contains,o.escapeSelector=ne.escape;var oe=function(e,i,n){for(var s=[],c=n!==void 0;(e=e[i])&&e.nodeType!==9;)if(e.nodeType===1){if(c&&o(e).is(n))break;s.push(e)}return s},_e=function(e,i){for(var n=[];e;e=e.nextSibling)e.nodeType===1&&e!==i&&n.push(e);return n},ze=o.expr.match.needsContext;function Ne(e,i){return e.nodeName&&e.nodeName.toLowerCase()===i.toLowerCase()}var it=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function Je(e,i,n){return V(i)?o.grep(e,function(s,c){return!!i.call(s,c,s)!==n}):i.nodeType?o.grep(e,function(s){return s===i!==n}):typeof i!="string"?o.grep(e,function(s){return b.call(i,s)>-1!==n}):o.filter(i,e,n)}o.filter=function(e,i,n){var s=i[0];return n&&(e=":not("+e+")"),i.length===1&&s.nodeType===1?o.find.matchesSelector(s,e)?[s]:[]:o.find.matches(e,o.grep(i,function(c){return c.nodeType===1}))},o.fn.extend({find:function(e){var i,n,s=this.length,c=this;if(typeof e!="string")return this.pushStack(o(e).filter(function(){for(i=0;i1?o.uniqueSort(n):n},filter:function(e){return this.pushStack(Je(this,e||[],!1))},not:function(e){return this.pushStack(Je(this,e||[],!0))},is:function(e){return!!Je(this,typeof e=="string"&&ze.test(e)?o(e):e||[],!1).length}});var bt,nr=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,Pr=o.fn.init=function(e,i,n){var s,c;if(!e)return this;if(n=n||bt,typeof e=="string")if(e[0]==="<"&&e[e.length-1]===">"&&e.length>=3?s=[null,e,null]:s=nr.exec(e),s&&(s[1]||!i))if(s[1]){if(i=i instanceof o?i[0]:i,o.merge(this,o.parseHTML(s[1],i&&i.nodeType?i.ownerDocument||i:K,!0)),it.test(s[1])&&o.isPlainObject(i))for(s in i)V(this[s])?this[s](i[s]):this.attr(s,i[s]);return this}else return c=K.getElementById(s[2]),c&&(this[0]=c,this.length=1),this;else return!i||i.jquery?(i||n).find(e):this.constructor(i).find(e);else{if(e.nodeType)return this[0]=e,this.length=1,this;if(V(e))return n.ready!==void 0?n.ready(e):e(o)}return o.makeArray(e,this)};Pr.prototype=o.fn,bt=o(K);var jr=/^(?:parents|prev(?:Until|All))/,Xt={children:!0,contents:!0,next:!0,prev:!0};o.fn.extend({has:function(e){var i=o(e,this),n=i.length;return this.filter(function(){for(var s=0;s-1:n.nodeType===1&&o.find.matchesSelector(n,e))){f.push(n);break}}return this.pushStack(f.length>1?o.uniqueSort(f):f)},index:function(e){return e?typeof e=="string"?b.call(o(e),this[0]):b.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,i){return this.pushStack(o.uniqueSort(o.merge(this.get(),o(e,i))))},addBack:function(e){return this.add(e==null?this.prevObject:this.prevObject.filter(e))}});function Br(e,i){for(;(e=e[i])&&e.nodeType!==1;);return e}o.each({parent:function(e){var i=e.parentNode;return i&&i.nodeType!==11?i:null},parents:function(e){return oe(e,"parentNode")},parentsUntil:function(e,i,n){return oe(e,"parentNode",n)},next:function(e){return Br(e,"nextSibling")},prev:function(e){return Br(e,"previousSibling")},nextAll:function(e){return oe(e,"nextSibling")},prevAll:function(e){return oe(e,"previousSibling")},nextUntil:function(e,i,n){return oe(e,"nextSibling",n)},prevUntil:function(e,i,n){return oe(e,"previousSibling",n)},siblings:function(e){return _e((e.parentNode||{}).firstChild,e)},children:function(e){return _e(e.firstChild)},contents:function(e){return e.contentDocument!=null&&a(e.contentDocument)?e.contentDocument:(Ne(e,"template")&&(e=e.content||e),o.merge([],e.childNodes))}},function(e,i){o.fn[e]=function(n,s){var c=o.map(this,i,n);return e.slice(-5)!=="Until"&&(s=n),s&&typeof s=="string"&&(c=o.filter(s,c)),this.length>1&&(Xt[e]||o.uniqueSort(c),jr.test(e)&&c.reverse()),this.pushStack(c)}});var yt=/[^\x20\t\r\n\f]+/g;function Nn(e){var i={};return o.each(e.match(yt)||[],function(n,s){i[s]=!0}),i}o.Callbacks=function(e){e=typeof e=="string"?Nn(e):o.extend({},e);var i,n,s,c,f=[],h=[],E=-1,x=function(){for(c=c||e.once,s=i=!0;h.length;E=-1)for(n=h.shift();++E-1;)f.splice(L,1),L<=E&&E--}),this},has:function(R){return R?o.inArray(R,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return c=h=[],f=n="",this},disabled:function(){return!f},lock:function(){return c=h=[],!n&&!i&&(f=n=""),this},locked:function(){return!!c},fireWith:function(R,B){return c||(B=B||[],B=[R,B.slice?B.slice():B],h.push(B),i||x()),this},fire:function(){return D.fireWith(this,arguments),this},fired:function(){return!!s}};return D};function Ke(e){return e}function ar(e){throw e}function Ii(e,i,n,s){var c;try{e&&V(c=e.promise)?c.call(e).done(i).fail(n):e&&V(c=e.then)?c.call(e,i,n):i.apply(void 0,[e].slice(s))}catch(f){n.apply(void 0,[f])}}o.extend({Deferred:function(e){var i=[["notify","progress",o.Callbacks("memory"),o.Callbacks("memory"),2],["resolve","done",o.Callbacks("once memory"),o.Callbacks("once memory"),0,"resolved"],["reject","fail",o.Callbacks("once memory"),o.Callbacks("once memory"),1,"rejected"]],n="pending",s={state:function(){return n},always:function(){return c.done(arguments).fail(arguments),this},catch:function(f){return s.then(null,f)},pipe:function(){var f=arguments;return o.Deferred(function(h){o.each(i,function(E,x){var D=V(f[x[4]])&&f[x[4]];c[x[1]](function(){var R=D&&D.apply(this,arguments);R&&V(R.promise)?R.promise().progress(h.notify).done(h.resolve).fail(h.reject):h[x[0]+"With"](this,D?[R]:arguments)})}),f=null}).promise()},then:function(f,h,E){var x=0;function D(R,B,L,I){return function(){var ie=this,ve=arguments,re=function(){var Ve,ht;if(!(R=x&&(L!==ar&&(ie=void 0,ve=[Ve]),B.rejectWith(ie,ve))}};R?Ge():(o.Deferred.getStackHook&&(Ge.stackTrace=o.Deferred.getStackHook()),l.setTimeout(Ge))}}return o.Deferred(function(R){i[0][3].add(D(0,R,V(E)?E:Ke,R.notifyWith)),i[1][3].add(D(0,R,V(f)?f:Ke)),i[2][3].add(D(0,R,V(h)?h:ar))}).promise()},promise:function(f){return f!=null?o.extend(f,s):s}},c={};return o.each(i,function(f,h){var E=h[2],x=h[5];s[h[1]]=E.add,x&&E.add(function(){n=x},i[3-f][2].disable,i[3-f][3].disable,i[0][2].lock,i[0][3].lock),E.add(h[3].fire),c[h[0]]=function(){return c[h[0]+"With"](this===c?void 0:this,arguments),this},c[h[0]+"With"]=E.fireWith}),s.promise(c),e&&e.call(c,c),c},when:function(e){var i=arguments.length,n=i,s=Array(n),c=u.call(arguments),f=o.Deferred(),h=function(E){return function(x){s[E]=this,c[E]=arguments.length>1?u.call(arguments):x,--i||f.resolveWith(s,c)}};if(i<=1&&(Ii(e,f.done(h(n)).resolve,f.reject,!i),f.state()==="pending"||V(c[n]&&c[n].then)))return f.then();for(;n--;)Ii(c[n],h(n),f.reject);return f.promise()}});var On=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;o.Deferred.exceptionHook=function(e,i){l.console&&l.console.warn&&e&&On.test(e.name)&&l.console.warn("jQuery.Deferred exception: "+e.message,e.stack,i)},o.readyException=function(e){l.setTimeout(function(){throw e})};var Ur=o.Deferred();o.fn.ready=function(e){return Ur.then(e).catch(function(i){o.readyException(i)}),this},o.extend({isReady:!1,readyWait:1,ready:function(e){(e===!0?--o.readyWait:o.isReady)||(o.isReady=!0,!(e!==!0&&--o.readyWait>0)&&Ur.resolveWith(K,[o]))}}),o.ready.then=Ur.then;function kr(){K.removeEventListener("DOMContentLoaded",kr),l.removeEventListener("load",kr),o.ready()}K.readyState==="complete"||K.readyState!=="loading"&&!K.documentElement.doScroll?l.setTimeout(o.ready):(K.addEventListener("DOMContentLoaded",kr),l.addEventListener("load",kr));var Pt=function(e,i,n,s,c,f,h){var E=0,x=e.length,D=n==null;if(be(n)==="object"){c=!0;for(E in n)Pt(e,i,E,n[E],!0,f,h)}else if(s!==void 0&&(c=!0,V(s)||(h=!0),D&&(h?(i.call(e,s),i=null):(D=i,i=function(R,B,L){return D.call(o(R),L)})),i))for(;E1,null,!0)},removeData:function(e){return this.each(function(){$e.remove(this,e)})}}),o.extend({queue:function(e,i,n){var s;if(e)return i=(i||"fx")+"queue",s=le.get(e,i),n&&(!s||Array.isArray(n)?s=le.access(e,i,o.makeArray(n)):s.push(n)),s||[]},dequeue:function(e,i){i=i||"fx";var n=o.queue(e,i),s=n.length,c=n.shift(),f=o._queueHooks(e,i),h=function(){o.dequeue(e,i)};c==="inprogress"&&(c=n.shift(),s--),c&&(i==="fx"&&n.unshift("inprogress"),delete f.stop,c.call(e,h,f)),!s&&f&&f.empty.fire()},_queueHooks:function(e,i){var n=i+"queueHooks";return le.get(e,n)||le.access(e,n,{empty:o.Callbacks("once memory").add(function(){le.remove(e,[i+"queue",n])})})}}),o.fn.extend({queue:function(e,i){var n=2;return typeof e!="string"&&(i=e,e="fx",n--),arguments.length\x20\t\r\n\f]*)/i,Gr=/^$|^module$|\/(?:java|ecma)script/i;(function(){var e=K.createDocumentFragment(),i=e.appendChild(K.createElement("div")),n=K.createElement("input");n.setAttribute("type","radio"),n.setAttribute("checked","checked"),n.setAttribute("name","t"),i.appendChild(n),H.checkClone=i.cloneNode(!0).cloneNode(!0).lastChild.checked,i.innerHTML="",H.noCloneChecked=!!i.cloneNode(!0).lastChild.defaultValue,i.innerHTML="",H.option=!!i.lastChild})();var Ze={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};Ze.tbody=Ze.tfoot=Ze.colgroup=Ze.caption=Ze.thead,Ze.th=Ze.td,H.option||(Ze.optgroup=Ze.option=[1,""]);function et(e,i){var n;return typeof e.getElementsByTagName!="undefined"?n=e.getElementsByTagName(i||"*"):typeof e.querySelectorAll!="undefined"?n=e.querySelectorAll(i||"*"):n=[],i===void 0||i&&Ne(e,i)?o.merge([e],n):n}function qr(e,i){for(var n=0,s=e.length;n-1){c&&c.push(f);continue}if(D=Ot(f),h=et(B.appendChild(f),"script"),D&&qr(h),n)for(R=0;f=h[R++];)Gr.test(f.type||"")&&n.push(f)}return B}var $i=/^([^.]*)(?:\.(.+)|)/;function nt(){return!0}function Jt(){return!1}function Un(e,i){return e===Wi()==(i==="focus")}function Wi(){try{return K.activeElement}catch(e){}}function Qr(e,i,n,s,c,f){var h,E;if(typeof i=="object"){typeof n!="string"&&(s=s||n,n=void 0);for(E in i)Qr(e,E,n,s,i[E],f);return e}if(s==null&&c==null?(c=n,s=n=void 0):c==null&&(typeof n=="string"?(c=s,s=void 0):(c=s,s=n,n=void 0)),c===!1)c=Jt;else if(!c)return e;return f===1&&(h=c,c=function(x){return o().off(x),h.apply(this,arguments)},c.guid=h.guid||(h.guid=o.guid++)),e.each(function(){o.event.add(this,i,c,s,n)})}o.event={global:{},add:function(e,i,n,s,c){var f,h,E,x,D,R,B,L,I,ie,ve,re=le.get(e);if(!!sr(e))for(n.handler&&(f=n,n=f.handler,c=f.selector),c&&o.find.matchesSelector(Lt,c),n.guid||(n.guid=o.guid++),(x=re.events)||(x=re.events=Object.create(null)),(h=re.handle)||(h=re.handle=function(Ge){return typeof o!="undefined"&&o.event.triggered!==Ge.type?o.event.dispatch.apply(e,arguments):void 0}),i=(i||"").match(yt)||[""],D=i.length;D--;)E=$i.exec(i[D])||[],I=ve=E[1],ie=(E[2]||"").split(".").sort(),!!I&&(B=o.event.special[I]||{},I=(c?B.delegateType:B.bindType)||I,B=o.event.special[I]||{},R=o.extend({type:I,origType:ve,data:s,handler:n,guid:n.guid,selector:c,needsContext:c&&o.expr.match.needsContext.test(c),namespace:ie.join(".")},f),(L=x[I])||(L=x[I]=[],L.delegateCount=0,(!B.setup||B.setup.call(e,s,ie,h)===!1)&&e.addEventListener&&e.addEventListener(I,h)),B.add&&(B.add.call(e,R),R.handler.guid||(R.handler.guid=n.guid)),c?L.splice(L.delegateCount++,0,R):L.push(R),o.event.global[I]=!0)},remove:function(e,i,n,s,c){var f,h,E,x,D,R,B,L,I,ie,ve,re=le.hasData(e)&&le.get(e);if(!(!re||!(x=re.events))){for(i=(i||"").match(yt)||[""],D=i.length;D--;){if(E=$i.exec(i[D])||[],I=ve=E[1],ie=(E[2]||"").split(".").sort(),!I){for(I in x)o.event.remove(e,I+i[D],n,s,!0);continue}for(B=o.event.special[I]||{},I=(s?B.delegateType:B.bindType)||I,L=x[I]||[],E=E[2]&&new RegExp("(^|\\.)"+ie.join("\\.(?:.*\\.|)")+"(\\.|$)"),h=f=L.length;f--;)R=L[f],(c||ve===R.origType)&&(!n||n.guid===R.guid)&&(!E||E.test(R.namespace))&&(!s||s===R.selector||s==="**"&&R.selector)&&(L.splice(f,1),R.selector&&L.delegateCount--,B.remove&&B.remove.call(e,R));h&&!L.length&&((!B.teardown||B.teardown.call(e,ie,re.handle)===!1)&&o.removeEvent(e,I,re.handle),delete x[I])}o.isEmptyObject(x)&&le.remove(e,"handle events")}},dispatch:function(e){var i,n,s,c,f,h,E=new Array(arguments.length),x=o.event.fix(e),D=(le.get(this,"events")||Object.create(null))[x.type]||[],R=o.event.special[x.type]||{};for(E[0]=x,i=1;i=1)){for(;D!==this;D=D.parentNode||this)if(D.nodeType===1&&!(e.type==="click"&&D.disabled===!0)){for(f=[],h={},n=0;n-1:o.find(c,this,null,[D]).length),h[c]&&f.push(s);f.length&&E.push({elem:D,handlers:f})}}return D=this,x\s*$/g;function ji(e,i){return Ne(e,"table")&&Ne(i.nodeType!==11?i:i.firstChild,"tr")&&o(e).children("tbody")[0]||e}function Gn(e){return e.type=(e.getAttribute("type")!==null)+"/"+e.type,e}function qn(e){return(e.type||"").slice(0,5)==="true/"?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Bi(e,i){var n,s,c,f,h,E,x;if(i.nodeType===1){if(le.hasData(e)&&(f=le.get(e),x=f.events,x)){le.remove(i,"handle events");for(c in x)for(n=0,s=x[c].length;n1&&typeof I=="string"&&!H.checkClone&&zn.test(I))return e.each(function(ve){var re=e.eq(ve);ie&&(i[0]=I.call(this,ve,re.html())),Wt(re,i,n,s)});if(B&&(c=Xr(i,e[0].ownerDocument,!1,e,s),f=c.firstChild,c.childNodes.length===1&&(c=f),f||s)){for(h=o.map(et(c,"script"),Gn),E=h.length;R0&&qr(h,!x&&et(e,"script")),E},cleanData:function(e){for(var i,n,s,c=o.event.special,f=0;(n=e[f])!==void 0;f++)if(sr(n)){if(i=n[le.expando]){if(i.events)for(s in i.events)c[s]?o.event.remove(n,s):o.removeEvent(n,s,i.handle);n[le.expando]=void 0}n[$e.expando]&&(n[$e.expando]=void 0)}}}),o.fn.extend({detach:function(e){return Ui(this,e,!0)},remove:function(e){return Ui(this,e)},text:function(e){return Pt(this,function(i){return i===void 0?o.text(this):this.empty().each(function(){(this.nodeType===1||this.nodeType===11||this.nodeType===9)&&(this.textContent=i)})},null,e,arguments.length)},append:function(){return Wt(this,arguments,function(e){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){var i=ji(this,e);i.appendChild(e)}})},prepend:function(){return Wt(this,arguments,function(e){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){var i=ji(this,e);i.insertBefore(e,i.firstChild)}})},before:function(){return Wt(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Wt(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,i=0;(e=this[i])!=null;i++)e.nodeType===1&&(o.cleanData(et(e,!1)),e.textContent="");return this},clone:function(e,i){return e=e==null?!1:e,i=i==null?e:i,this.map(function(){return o.clone(this,e,i)})},html:function(e){return Pt(this,function(i){var n=this[0]||{},s=0,c=this.length;if(i===void 0&&n.nodeType===1)return n.innerHTML;if(typeof i=="string"&&!Hn.test(i)&&!Ze[(Vr.exec(i)||["",""])[1].toLowerCase()]){i=o.htmlPrefilter(i);try{for(;s=0&&(x+=Math.max(0,Math.ceil(e["offset"+i[0].toUpperCase()+i.slice(1)]-f-x-E-.5))||0),x}function fr(e,i,n){var s=Rr(e),c=!H.boxSizingReliable()||n,f=c&&o.css(e,"boxSizing",!1,s)==="border-box",h=f,E=ur(e,i,s),x="offset"+i[0].toUpperCase()+i.slice(1);if(Jr.test(E)){if(!n)return E;E="auto"}return(!H.boxSizingReliable()&&f||!H.reliableTrDimensions()&&Ne(e,"tr")||E==="auto"||!parseFloat(E)&&o.css(e,"display",!1,s)==="inline")&&e.getClientRects().length&&(f=o.css(e,"boxSizing",!1,s)==="border-box",h=x in e,h&&(E=e[x])),E=parseFloat(E)||0,E+ti(e,i,n||(f?"border":"content"),h,s,E)+"px"}o.extend({cssHooks:{opacity:{get:function(e,i){if(i){var n=ur(e,"opacity");return n===""?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,i,n,s){if(!(!e||e.nodeType===3||e.nodeType===8||!e.style)){var c,f,h,E=xt(i),x=Kr.test(i),D=e.style;if(x||(i=Zr(E)),h=o.cssHooks[i]||o.cssHooks[E],n!==void 0){if(f=typeof n,f==="string"&&(c=Nt.exec(n))&&c[1]&&(n=Hr(e,i,c),f="number"),n==null||n!==n)return;f==="number"&&!x&&(n+=c&&c[3]||(o.cssNumber[E]?"":"px")),!H.clearCloneStyle&&n===""&&i.indexOf("background")===0&&(D[i]="inherit"),(!h||!("set"in h)||(n=h.set(e,n,s))!==void 0)&&(x?D.setProperty(i,n):D[i]=n)}else return h&&"get"in h&&(c=h.get(e,!1,s))!==void 0?c:D[i]}},css:function(e,i,n,s){var c,f,h,E=xt(i),x=Kr.test(i);return x||(i=Zr(E)),h=o.cssHooks[i]||o.cssHooks[E],h&&"get"in h&&(c=h.get(e,!0,n)),c===void 0&&(c=ur(e,i,s)),c==="normal"&&i in ei&&(c=ei[i]),n===""||n?(f=parseFloat(c),n===!0||isFinite(f)?f||0:c):c}}),o.each(["height","width"],function(e,i){o.cssHooks[i]={get:function(n,s,c){if(s)return Xi.test(o.css(n,"display"))&&(!n.getClientRects().length||!n.getBoundingClientRect().width)?Hi(n,cr,function(){return fr(n,i,c)}):fr(n,i,c)},set:function(n,s,c){var f,h=Rr(n),E=!H.scrollboxSize()&&h.position==="absolute",x=E||c,D=x&&o.css(n,"boxSizing",!1,h)==="border-box",R=c?ti(n,i,c,D,h):0;return D&&E&&(R-=Math.ceil(n["offset"+i[0].toUpperCase()+i.slice(1)]-parseFloat(h[i])-ti(n,i,"border",!1,h)-.5)),R&&(f=Nt.exec(s))&&(f[3]||"px")!=="px"&&(n.style[i]=s,s=o.css(n,i)),jt(n,s,R)}}}),o.cssHooks.marginLeft=Vi(H.reliableMarginLeft,function(e,i){if(i)return(parseFloat(ur(e,"marginLeft"))||e.getBoundingClientRect().left-Hi(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),o.each({margin:"",padding:"",border:"Width"},function(e,i){o.cssHooks[e+i]={expand:function(n){for(var s=0,c={},f=typeof n=="string"?n.split(" "):[n];s<4;s++)c[e+wt[s]+i]=f[s]||f[s-2]||f[0];return c}},e!=="margin"&&(o.cssHooks[e+i].set=jt)}),o.fn.extend({css:function(e,i){return Pt(this,function(n,s,c){var f,h,E={},x=0;if(Array.isArray(s)){for(f=Rr(n),h=s.length;x1)}});function Xe(e,i,n,s,c){return new Xe.prototype.init(e,i,n,s,c)}o.Tween=Xe,Xe.prototype={constructor:Xe,init:function(e,i,n,s,c,f){this.elem=e,this.prop=n,this.easing=c||o.easing._default,this.options=i,this.start=this.now=this.cur(),this.end=s,this.unit=f||(o.cssNumber[n]?"":"px")},cur:function(){var e=Xe.propHooks[this.prop];return e&&e.get?e.get(this):Xe.propHooks._default.get(this)},run:function(e){var i,n=Xe.propHooks[this.prop];return this.options.duration?this.pos=i=o.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=i=e,this.now=(this.end-this.start)*i+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):Xe.propHooks._default.set(this),this}},Xe.prototype.init.prototype=Xe.prototype,Xe.propHooks={_default:{get:function(e){var i;return e.elem.nodeType!==1||e.elem[e.prop]!=null&&e.elem.style[e.prop]==null?e.elem[e.prop]:(i=o.css(e.elem,e.prop,""),!i||i==="auto"?0:i)},set:function(e){o.fx.step[e.prop]?o.fx.step[e.prop](e):e.elem.nodeType===1&&(o.cssHooks[e.prop]||e.elem.style[Zr(e.prop)]!=null)?o.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},Xe.propHooks.scrollTop=Xe.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},o.easing={linear:function(e){return e},swing:function(e){return .5-Math.cos(e*Math.PI)/2},_default:"swing"},o.fx=Xe.prototype.init,o.fx.step={};var Kt,Ir,ri=/^(?:toggle|show|hide)$/,Kn=/queueHooks$/;function ii(){Ir&&(K.hidden===!1&&l.requestAnimationFrame?l.requestAnimationFrame(ii):l.setTimeout(ii,o.fx.interval),o.fx.tick())}function p(){return l.setTimeout(function(){Kt=void 0}),Kt=Date.now()}function S(e,i){var n,s=0,c={height:e};for(i=i?1:0;s<4;s+=2-i)n=wt[s],c["margin"+n]=c["padding"+n]=e;return i&&(c.opacity=c.width=e),c}function v(e,i,n){for(var s,c=(_.tweeners[i]||[]).concat(_.tweeners["*"]),f=0,h=c.length;f1)},removeAttr:function(e){return this.each(function(){o.removeAttr(this,e)})}}),o.extend({attr:function(e,i,n){var s,c,f=e.nodeType;if(!(f===3||f===8||f===2)){if(typeof e.getAttribute=="undefined")return o.prop(e,i,n);if((f!==1||!o.isXMLDoc(e))&&(c=o.attrHooks[i.toLowerCase()]||(o.expr.match.bool.test(i)?N:void 0)),n!==void 0){if(n===null){o.removeAttr(e,i);return}return c&&"set"in c&&(s=c.set(e,n,i))!==void 0?s:(e.setAttribute(i,n+""),n)}return c&&"get"in c&&(s=c.get(e,i))!==null?s:(s=o.find.attr(e,i),s==null?void 0:s)}},attrHooks:{type:{set:function(e,i){if(!H.radioValue&&i==="radio"&&Ne(e,"input")){var n=e.value;return e.setAttribute("type",i),n&&(e.value=n),i}}}},removeAttr:function(e,i){var n,s=0,c=i&&i.match(yt);if(c&&e.nodeType===1)for(;n=c[s++];)e.removeAttribute(n)}}),N={set:function(e,i,n){return i===!1?o.removeAttr(e,n):e.setAttribute(n,n),n}},o.each(o.expr.match.bool.source.match(/\w+/g),function(e,i){var n=j[i]||o.find.attr;j[i]=function(s,c,f){var h,E,x=c.toLowerCase();return f||(E=j[x],j[x]=h,h=n(s,c,f)!=null?x:null,j[x]=E),h}});var G=/^(?:input|select|textarea|button)$/i,q=/^(?:a|area)$/i;o.fn.extend({prop:function(e,i){return Pt(this,o.prop,e,i,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[o.propFix[e]||e]})}}),o.extend({prop:function(e,i,n){var s,c,f=e.nodeType;if(!(f===3||f===8||f===2))return(f!==1||!o.isXMLDoc(e))&&(i=o.propFix[i]||i,c=o.propHooks[i]),n!==void 0?c&&"set"in c&&(s=c.set(e,n,i))!==void 0?s:e[i]=n:c&&"get"in c&&(s=c.get(e,i))!==null?s:e[i]},propHooks:{tabIndex:{get:function(e){var i=o.find.attr(e,"tabindex");return i?parseInt(i,10):G.test(e.nodeName)||q.test(e.nodeName)&&e.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),H.optSelected||(o.propHooks.selected={get:function(e){var i=e.parentNode;return i&&i.parentNode&&i.parentNode.selectedIndex,null},set:function(e){var i=e.parentNode;i&&(i.selectedIndex,i.parentNode&&i.parentNode.selectedIndex)}}),o.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){o.propFix[this.toLowerCase()]=this});function Y(e){var i=e.match(yt)||[];return i.join(" ")}function Z(e){return e.getAttribute&&e.getAttribute("class")||""}function ye(e){return Array.isArray(e)?e:typeof e=="string"?e.match(yt)||[]:[]}o.fn.extend({addClass:function(e){var i,n,s,c,f,h;return V(e)?this.each(function(E){o(this).addClass(e.call(this,E,Z(this)))}):(i=ye(e),i.length?this.each(function(){if(s=Z(this),n=this.nodeType===1&&" "+Y(s)+" ",n){for(f=0;f-1;)n=n.replace(" "+c+" "," ");h=Y(n),s!==h&&this.setAttribute("class",h)}}):this):this.attr("class","")},toggleClass:function(e,i){var n,s,c,f,h=typeof e,E=h==="string"||Array.isArray(e);return V(e)?this.each(function(x){o(this).toggleClass(e.call(this,x,Z(this),i),i)}):typeof i=="boolean"&&E?i?this.addClass(e):this.removeClass(e):(n=ye(e),this.each(function(){if(E)for(f=o(this),c=0;c-1)return!0;return!1}});var Pe=/\r/g;o.fn.extend({val:function(e){var i,n,s,c=this[0];return arguments.length?(s=V(e),this.each(function(f){var h;this.nodeType===1&&(s?h=e.call(this,f,o(this).val()):h=e,h==null?h="":typeof h=="number"?h+="":Array.isArray(h)&&(h=o.map(h,function(E){return E==null?"":E+""})),i=o.valHooks[this.type]||o.valHooks[this.nodeName.toLowerCase()],(!i||!("set"in i)||i.set(this,h,"value")===void 0)&&(this.value=h))})):c?(i=o.valHooks[c.type]||o.valHooks[c.nodeName.toLowerCase()],i&&"get"in i&&(n=i.get(c,"value"))!==void 0?n:(n=c.value,typeof n=="string"?n.replace(Pe,""):n==null?"":n)):void 0}}),o.extend({valHooks:{option:{get:function(e){var i=o.find.attr(e,"value");return i!=null?i:Y(o.text(e))}},select:{get:function(e){var i,n,s,c=e.options,f=e.selectedIndex,h=e.type==="select-one",E=h?null:[],x=h?f+1:c.length;for(f<0?s=x:s=h?f:0;s-1)&&(n=!0);return n||(e.selectedIndex=-1),f}}}}),o.each(["radio","checkbox"],function(){o.valHooks[this]={set:function(e,i){if(Array.isArray(i))return e.checked=o.inArray(o(e).val(),i)>-1}},H.checkOn||(o.valHooks[this].get=function(e){return e.getAttribute("value")===null?"on":e.value})}),H.focusin="onfocusin"in l;var ke=/^(?:focusinfocus|focusoutblur)$/,We=function(e){e.stopPropagation()};o.extend(o.event,{trigger:function(e,i,n,s){var c,f,h,E,x,D,R,B,L=[n||K],I=W.call(e,"type")?e.type:e,ie=W.call(e,"namespace")?e.namespace.split("."):[];if(f=B=h=n=n||K,!(n.nodeType===3||n.nodeType===8)&&!ke.test(I+o.event.triggered)&&(I.indexOf(".")>-1&&(ie=I.split("."),I=ie.shift(),ie.sort()),x=I.indexOf(":")<0&&"on"+I,e=e[o.expando]?e:new o.Event(I,typeof e=="object"&&e),e.isTrigger=s?2:3,e.namespace=ie.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+ie.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),i=i==null?[e]:o.makeArray(i,[e]),R=o.event.special[I]||{},!(!s&&R.trigger&&R.trigger.apply(n,i)===!1))){if(!s&&!R.noBubble&&!de(n)){for(E=R.delegateType||I,ke.test(E+I)||(f=f.parentNode);f;f=f.parentNode)L.push(f),h=f;h===(n.ownerDocument||K)&&L.push(h.defaultView||h.parentWindow||l)}for(c=0;(f=L[c++])&&!e.isPropagationStopped();)B=f,e.type=c>1?E:R.bindType||I,D=(le.get(f,"events")||Object.create(null))[e.type]&&le.get(f,"handle"),D&&D.apply(f,i),D=x&&f[x],D&&D.apply&&sr(f)&&(e.result=D.apply(f,i),e.result===!1&&e.preventDefault());return e.type=I,!s&&!e.isDefaultPrevented()&&(!R._default||R._default.apply(L.pop(),i)===!1)&&sr(n)&&x&&V(n[I])&&!de(n)&&(h=n[x],h&&(n[x]=null),o.event.triggered=I,e.isPropagationStopped()&&B.addEventListener(I,We),n[I](),e.isPropagationStopped()&&B.removeEventListener(I,We),o.event.triggered=void 0,h&&(n[x]=h)),e.result}},simulate:function(e,i,n){var s=o.extend(new o.Event,n,{type:e,isSimulated:!0});o.event.trigger(s,null,i)}}),o.fn.extend({trigger:function(e,i){return this.each(function(){o.event.trigger(e,i,this)})},triggerHandler:function(e,i){var n=this[0];if(n)return o.event.trigger(e,i,n,!0)}}),H.focusin||o.each({focus:"focusin",blur:"focusout"},function(e,i){var n=function(s){o.event.simulate(i,s.target,o.event.fix(s))};o.event.special[i]={setup:function(){var s=this.ownerDocument||this.document||this,c=le.access(s,i);c||s.addEventListener(e,n,!0),le.access(s,i,(c||0)+1)},teardown:function(){var s=this.ownerDocument||this.document||this,c=le.access(s,i)-1;c?le.access(s,i,c):(s.removeEventListener(e,n,!0),le.remove(s,i))}}});var Le=l.location,at={guid:Date.now()},Bt=/\?/;o.parseXML=function(e){var i,n;if(!e||typeof e!="string")return null;try{i=new l.DOMParser().parseFromString(e,"text/xml")}catch(s){}return n=i&&i.getElementsByTagName("parsererror")[0],(!i||n)&&o.error("Invalid XML: "+(n?o.map(n.childNodes,function(s){return s.textContent}).join(` +import{a as hn,b as ya,c as Pl}from"./chunk-SDBJC2RS.js";import{a as js}from"./chunk-XMPGMPQ4.js";import{a as Bs,b as Us,c as kl}from"./chunk-2KLMJIHE.js";import{D as va,J as ba,l as ee,u as $s,v as Ws}from"./chunk-42IVW2OL.js";import{A as Mr,E as _t,F as ha,G as Nr,H as fn,I as Ms,J as pa,T as ma,V as Ns,a as Rt,b as pi,ba as dn,ca as Os,d as ft,da as gi,e as da,f as rt,g as De,k as Fs,m as sn,n as on,o as ln,p as vr,q as Ls,t as un,w as Rs,x as Is,y as cn,z as dt}from"./chunk-S4FPTY4A.js";import{a as di,b as Ds,c as hi}from"./chunk-RQFURXHW.js";var wa=Ds((Hs,xa)=>{(function(l){if(typeof Hs=="object"&&typeof xa!="undefined")xa.exports=l();else if(typeof define=="function"&&define.amd)define([],l);else{var t;typeof window!="undefined"?t=window:typeof global!="undefined"?t=global:typeof self!="undefined"?t=self:t=this,t.localforage=l()}})(function(){var l,t,r;return function a(u,d,m){function b(W,fe){if(!d[W]){if(!u[W]){var z=typeof di=="function"&&di;if(!fe&&z)return z(W,!0);if(y)return y(W,!0);var H=new Error("Cannot find module '"+W+"'");throw H.code="MODULE_NOT_FOUND",H}var V=d[W]={exports:{}};u[W][0].call(V.exports,function(de){var K=u[W][1][de];return b(K||de)},V,V.exports,a,u,d,m)}return d[W].exports}for(var y=typeof di=="function"&&di,F=0;F=43)}}).catch(function(){return!1})}function _e(p){return typeof Ce=="boolean"?z.resolve(Ce):oe(p).then(function(S){return Ce=S,Ce})}function ze(p){var S=be[p.name],v={};v.promise=new z(function(C,k){v.resolve=C,v.reject=k}),S.deferredOperations.push(v),S.dbReady?S.dbReady=S.dbReady.then(function(){return v.promise}):S.dbReady=v.promise}function Ne(p){var S=be[p.name],v=S.deferredOperations.pop();if(v)return v.resolve(),v.promise}function it(p,S){var v=be[p.name],C=v.deferredOperations.pop();if(C)return C.reject(S),C.promise}function Je(p,S){return new z(function(v,C){if(be[p.name]=be[p.name]||ar(),p.db)if(S)ze(p),p.db.close();else return v(p.db);var k=[p.name];S&&k.push(p.version);var _=F.open.apply(F,k);S&&(_.onupgradeneeded=function(N){var j=_.result;try{j.createObjectStore(p.storeName),N.oldVersion<=1&&j.createObjectStore(xe)}catch(G){if(G.name==="ConstraintError")console.warn('The database "'+p.name+'" has been upgraded from version '+N.oldVersion+" to version "+N.newVersion+', but the storage "'+p.storeName+'" already exists.');else throw G}}),_.onerror=function(N){N.preventDefault(),C(_.error)},_.onsuccess=function(){var N=_.result;N.onversionchange=function(j){j.target.close()},v(N),Ne(p)}})}function bt(p){return Je(p,!1)}function nr(p){return Je(p,!0)}function Pr(p,S){if(!p.db)return!0;var v=!p.db.objectStoreNames.contains(p.storeName),C=p.versionp.db.version;if(C&&(p.version!==S&&console.warn('The database "'+p.name+`" can't be downgraded from version `+p.db.version+" to version "+p.version+"."),p.version=p.db.version),k||v){if(v){var _=p.db.version+1;_>p.version&&(p.version=_)}return!0}return!1}function jr(p){return new z(function(S,v){var C=new FileReader;C.onerror=v,C.onloadend=function(k){var _=btoa(k.target.result||"");S({__local_forage_encoded_blob:!0,data:_,type:p.type})},C.readAsBinaryString(p)})}function Xt(p){var S=ne(atob(p.data));return fe([S],{type:p.type})}function Br(p){return p&&p.__local_forage_encoded_blob}function yt(p){var S=this,v=S._initReady().then(function(){var C=be[S._dbInfo.name];if(C&&C.dbReady)return C.dbReady});return V(v,p,p),v}function Nn(p){ze(p);for(var S=be[p.name],v=S.forages,C=0;C0&&(!p.db||_.name==="InvalidStateError"||_.name==="NotFoundError"))return z.resolve().then(function(){if(!p.db||_.name==="NotFoundError"&&!p.db.objectStoreNames.contains(p.storeName)&&p.version<=p.db.version)return p.db&&(p.version=p.db.version+1),nr(p)}).then(function(){return Nn(p).then(function(){Ke(p,S,v,C-1)})}).catch(v);v(_)}}function ar(){return{forages:[],db:null,dbReady:null,deferredOperations:[]}}function Ii(p){var S=this,v={db:null};if(p)for(var C in p)v[C]=p[C];var k=be[v.name];k||(k=ar(),be[v.name]=k),k.forages.push(S),S._initReady||(S._initReady=S.ready,S.ready=yt);var _=[];function N(){return z.resolve()}for(var j=0;j>4,Y[k++]=(N&15)<<4|j>>2,Y[k++]=(j&3)<<6|G&63;return q}function Ze(p){var S=new Uint8Array(p),v="",C;for(C=0;C>2],v+=$e[(S[C]&3)<<4|S[C+1]>>4],v+=$e[(S[C+1]&15)<<2|S[C+2]>>6],v+=$e[S[C+2]&63];return S.length%3==2?v=v.substring(0,v.length-1)+"=":S.length%3==1&&(v=v.substring(0,v.length-2)+"=="),v}function et(p,S){var v="";if(p&&(v=Vr.call(p)),p&&(v==="[object ArrayBuffer]"||p.buffer&&Vr.call(p.buffer)==="[object ArrayBuffer]")){var C,k=Ar;p instanceof ArrayBuffer?(C=p,k+=Fr):(C=p.buffer,v==="[object Int8Array]"?k+=wt:v==="[object Uint8Array]"?k+=Lt:v==="[object Uint8ClampedArray]"?k+=Ot:v==="[object Int16Array]"?k+=Ni:v==="[object Uint16Array]"?k+=Hr:v==="[object Int32Array]"?k+=lr:v==="[object Uint32Array]"?k+=zr:v==="[object Float32Array]"?k+=Oi:v==="[object Float64Array]"?k+=$t:S(new Error("Failed to get type for BinaryArray"))),S(k+Ze(C))}else if(v==="[object Blob]"){var _=new FileReader;_.onload=function(){var N=Bn+p.type+"~"+Ze(this.result);S(Ar+Nt+N)},_.readAsArrayBuffer(p)}else try{S(JSON.stringify(p))}catch(N){console.error("Couldn't convert value into a JSON string: ",p),S(null,N)}}function qr(p){if(p.substring(0,Dr)!==Ar)return JSON.parse(p);var S=p.substring(Qt),v=p.substring(Dr,Qt),C;if(v===Nt&&Mi.test(S)){var k=S.match(Mi);C=k[1],S=S.substring(k[0].length)}var _=Gr(S);switch(v){case Fr:return _;case Nt:return fe([_],{type:C});case wt:return new Int8Array(_);case Lt:return new Uint8Array(_);case Ot:return new Uint8ClampedArray(_);case Ni:return new Int16Array(_);case Hr:return new Uint16Array(_);case lr:return new Int32Array(_);case zr:return new Uint32Array(_);case Oi:return new Float32Array(_);case $t:return new Float64Array(_);default:throw new Error("Unkown type: "+v)}}var Yr={serialize:et,deserialize:qr,stringToBuffer:Gr,bufferToString:Ze};function Xr(p,S,v,C){p.executeSql("CREATE TABLE IF NOT EXISTS "+S.storeName+" (id INTEGER PRIMARY KEY, key unique, value)",[],v,C)}function $i(p){var S=this,v={db:null};if(p)for(var C in p)v[C]=typeof p[C]!="string"?p[C].toString():p[C];var k=new z(function(_,N){try{v.db=openDatabase(v.name,String(v.version),v.description,v.size)}catch(j){return N(j)}v.db.transaction(function(j){Xr(j,v,function(){S._dbInfo=v,_()},function(G,q){N(q)})},N)});return v.serializer=Yr,k}function nt(p,S,v,C,k,_){p.executeSql(v,C,k,function(N,j){j.code===j.SYNTAX_ERR?N.executeSql("SELECT name FROM sqlite_master WHERE type='table' AND name = ?",[S.storeName],function(G,q){q.rows.length?_(G,j):Xr(G,S,function(){G.executeSql(v,C,k,_)},_)},_):_(N,j)},_)}function Jt(p,S){var v=this;p=de(p);var C=new z(function(k,_){v.ready().then(function(){var N=v._dbInfo;N.db.transaction(function(j){nt(j,N,"SELECT * FROM "+N.storeName+" WHERE key = ? LIMIT 1",[p],function(G,q){var Y=q.rows.length?q.rows.item(0).value:null;Y&&(Y=N.serializer.deserialize(Y)),k(Y)},function(G,q){_(q)})})}).catch(_)});return H(C,S),C}function Un(p,S){var v=this,C=new z(function(k,_){v.ready().then(function(){var N=v._dbInfo;N.db.transaction(function(j){nt(j,N,"SELECT * FROM "+N.storeName,[],function(G,q){for(var Y=q.rows,Z=Y.length,ye=0;ye0){N(Wi.apply(k,[p,G,v,C-1]));return}j(ye)}})})}).catch(j)});return H(_,v),_}function Qr(p,S,v){return Wi.apply(this,[p,S,v,1])}function Lr(p,S){var v=this;p=de(p);var C=new z(function(k,_){v.ready().then(function(){var N=v._dbInfo;N.db.transaction(function(j){nt(j,N,"DELETE FROM "+N.storeName+" WHERE key = ?",[p],function(){k()},function(G,q){_(q)})})}).catch(_)});return H(C,S),C}function Hn(p){var S=this,v=new z(function(C,k){S.ready().then(function(){var _=S._dbInfo;_.db.transaction(function(N){nt(N,_,"DELETE FROM "+_.storeName,[],function(){C()},function(j,G){k(G)})})}).catch(k)});return H(v,p),v}function zn(p){var S=this,v=new z(function(C,k){S.ready().then(function(){var _=S._dbInfo;_.db.transaction(function(N){nt(N,_,"SELECT COUNT(key) as c FROM "+_.storeName,[],function(j,G){var q=G.rows.item(0).c;C(q)},function(j,G){k(G)})})}).catch(k)});return H(v,p),v}function Vn(p,S){var v=this,C=new z(function(k,_){v.ready().then(function(){var N=v._dbInfo;N.db.transaction(function(j){nt(j,N,"SELECT key FROM "+N.storeName+" WHERE id = ? LIMIT 1",[p+1],function(G,q){var Y=q.rows.length?q.rows.item(0).key:null;k(Y)},function(G,q){_(q)})})}).catch(_)});return H(C,S),C}function ji(p){var S=this,v=new z(function(C,k){S.ready().then(function(){var _=S._dbInfo;_.db.transaction(function(N){nt(N,_,"SELECT key FROM "+_.storeName,[],function(j,G){for(var q=[],Y=0;Y '__WebKitDatabaseInfoTable__'",[],function(k,_){for(var N=[],j=0;j<_.rows.length;j++)N.push(_.rows.item(j).name);S({db:p,storeNames:N})},function(k,_){v(_)})},function(C){v(C)})})}function qn(p,S){S=K.apply(this,arguments);var v=this.config();p=typeof p!="function"&&p||{},p.name||(p.name=p.name||v.name,p.storeName=p.storeName||v.storeName);var C=this,k;return p.name?k=new z(function(_){var N;p.name===v.name?N=C._dbInfo.db:N=openDatabase(p.name,"","",0),p.storeName?_({db:N,storeNames:[p.storeName]}):_(Gn(N))}).then(function(_){return new z(function(N,j){_.db.transaction(function(G){function q(Pe){return new z(function(ke,We){G.executeSql("DROP TABLE IF EXISTS "+Pe,[],function(){ke()},function(Le,at){We(at)})})}for(var Y=[],Z=0,ye=_.storeNames.length;Z0}function Kr(p){var S=this,v={};if(p)for(var C in p)v[C]=p[C];return v.keyPrefix=Wt(p,S._defaultConfig),Jr()?(S._dbInfo=v,v.serializer=Yr,z.resolve()):z.reject()}function Rr(p){var S=this,v=S.ready().then(function(){for(var C=S._dbInfo.keyPrefix,k=localStorage.length-1;k>=0;k--){var _=localStorage.key(k);_.indexOf(C)===0&&localStorage.removeItem(_)}});return H(v,p),v}function Hi(p,S){var v=this;p=de(p);var C=v.ready().then(function(){var k=v._dbInfo,_=localStorage.getItem(k.keyPrefix+p);return _&&(_=k.serializer.deserialize(_)),_});return H(C,S),C}function Xn(p,S){var v=this,C=v.ready().then(function(){for(var k=v._dbInfo,_=k.keyPrefix,N=_.length,j=localStorage.length,G=1,q=0;q=0;N--){var j=localStorage.key(N);j.indexOf(_)===0&&localStorage.removeItem(j)}}):k=z.reject("Invalid arguments"),H(k,S),k}var Yi={_driver:"localStorageWrapper",_initStorage:Kr,_support:Yn(),iterate:Xn,getItem:Hi,setItem:Gi,removeItem:Vi,clear:Rr,length:ur,key:zi,keys:Qn,dropInstance:qi},Jn=function(S,v){return S===v||typeof S=="number"&&typeof v=="number"&&isNaN(S)&&isNaN(v)},Zr=function(S,v){for(var C=S.length,k=0;k{(function(l,t){"use strict";typeof mn=="object"&&typeof mn.exports=="object"?mn.exports=l.document?t(l,!0):function(r){if(!r.document)throw new Error("jQuery requires a window with a document");return t(r)}:t(l)})(typeof window!="undefined"?window:qs,function(l,t){"use strict";var r=[],a=Object.getPrototypeOf,u=r.slice,d=r.flat?function(e){return r.flat.call(e)}:function(e){return r.concat.apply([],e)},m=r.push,b=r.indexOf,y={},F=y.toString,W=y.hasOwnProperty,fe=W.toString,z=fe.call(Object),H={},V=function(i){return typeof i=="function"&&typeof i.nodeType!="number"&&typeof i.item!="function"},de=function(i){return i!=null&&i===i.window},K=l.document,xe={type:!0,src:!0,nonce:!0,noModule:!0};function Ce(e,i,n){n=n||K;var s,c,f=n.createElement("script");if(f.text=e,i)for(s in xe)c=i[s]||i.getAttribute&&i.getAttribute(s),c&&f.setAttribute(s,c);n.head.appendChild(f).parentNode.removeChild(f)}function be(e){return e==null?e+"":typeof e=="object"||typeof e=="function"?y[F.call(e)]||"object":typeof e}var Se="3.6.3",o=function(e,i){return new o.fn.init(e,i)};o.fn=o.prototype={jquery:Se,constructor:o,length:0,toArray:function(){return u.call(this)},get:function(e){return e==null?u.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var i=o.merge(this.constructor(),e);return i.prevObject=this,i},each:function(e){return o.each(this,e)},map:function(e){return this.pushStack(o.map(this,function(i,n){return e.call(i,n,i)}))},slice:function(){return this.pushStack(u.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(o.grep(this,function(e,i){return(i+1)%2}))},odd:function(){return this.pushStack(o.grep(this,function(e,i){return i%2}))},eq:function(e){var i=this.length,n=+e+(e<0?i:0);return this.pushStack(n>=0&&n0&&i-1 in e}var ne=function(e){var i,n,s,c,f,h,E,x,D,R,B,L,I,ie,ve,re,Ge,Ve,ht,Fe="sizzle"+1*new Date,ge=e.document,ut=0,Te=0,je=tn(),li=tn(),Ki=tn(),pt=tn(),dr=function(g,w){return g===w&&(B=!0),0},hr={}.hasOwnProperty,ct=[],Zt=ct.pop,Et=ct.push,er=ct.push,ws=ct.slice,pr=function(g,w){for(var T=0,M=g.length;T+~]|"+Ae+")"+Ae+"*"),gl=new RegExp(Ae+"|>"),ml=new RegExp(aa),vl=new RegExp("^"+gr+"$"),en={ID:new RegExp("^#("+gr+")"),CLASS:new RegExp("^\\.("+gr+")"),TAG:new RegExp("^("+gr+"|[*])"),ATTR:new RegExp("^"+Es),PSEUDO:new RegExp("^"+aa),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+Ae+"*(even|odd|(([+-]|)(\\d*)n|)"+Ae+"*(?:([+-]|)"+Ae+"*(\\d+)|))"+Ae+"*\\)|)","i"),bool:new RegExp("^(?:"+na+")$","i"),needsContext:new RegExp("^"+Ae+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+Ae+"*((?:-\\d)?\\d*)"+Ae+"*\\)|)(?=[^-]|$)","i")},bl=/HTML$/i,yl=/^(?:input|select|textarea|button)$/i,xl=/^h\d$/i,ui=/^[^{]+\{\s*\[native \w/,wl=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,sa=/[+~]/,Ut=new RegExp("\\\\[\\da-fA-F]{1,6}"+Ae+"?|\\\\([^\\r\\n\\f])","g"),Ht=function(g,w){var T="0x"+g.slice(1)-65536;return w||(T<0?String.fromCharCode(T+65536):String.fromCharCode(T>>10|55296,T&1023|56320))},_s=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,Ts=function(g,w){return w?g==="\0"?"\uFFFD":g.slice(0,-1)+"\\"+g.charCodeAt(g.length-1).toString(16)+" ":"\\"+g},Cs=function(){L()},El=nn(function(g){return g.disabled===!0&&g.nodeName.toLowerCase()==="fieldset"},{dir:"parentNode",next:"legend"});try{er.apply(ct=ws.call(ge.childNodes),ge.childNodes),ct[ge.childNodes.length].nodeType}catch(g){er={apply:ct.length?function(w,T){Et.apply(w,ws.call(T))}:function(w,T){for(var M=w.length,A=0;w[M++]=T[A++];);w.length=M-1}}}function Re(g,w,T,M){var A,O,U,Q,J,ue,se,he=w&&w.ownerDocument,Ee=w?w.nodeType:9;if(T=T||[],typeof g!="string"||!g||Ee!==1&&Ee!==9&&Ee!==11)return T;if(!M&&(L(w),w=w||I,ve)){if(Ee!==11&&(J=wl.exec(g)))if(A=J[1]){if(Ee===9)if(U=w.getElementById(A)){if(U.id===A)return T.push(U),T}else return T;else if(he&&(U=he.getElementById(A))&&ht(w,U)&&U.id===A)return T.push(U),T}else{if(J[2])return er.apply(T,w.getElementsByTagName(g)),T;if((A=J[3])&&n.getElementsByClassName&&w.getElementsByClassName)return er.apply(T,w.getElementsByClassName(A)),T}if(n.qsa&&!pt[g+" "]&&(!re||!re.test(g))&&(Ee!==1||w.nodeName.toLowerCase()!=="object")){if(se=g,he=w,Ee===1&&(gl.test(g)||Ss.test(g))){for(he=sa.test(g)&&la(w.parentNode)||w,(he!==w||!n.scope)&&((Q=w.getAttribute("id"))?Q=Q.replace(_s,Ts):w.setAttribute("id",Q=Fe)),ue=h(g),O=ue.length;O--;)ue[O]=(Q?"#"+Q:":scope")+" "+rn(ue[O]);se=ue.join(",")}try{if(n.cssSupportsSelector&&!CSS.supports("selector(:is("+se+"))"))throw new Error;return er.apply(T,he.querySelectorAll(se)),T}catch(Ie){pt(g,!0)}finally{Q===Fe&&w.removeAttribute("id")}}}return x(g.replace(Zi,"$1"),w,T,M)}function tn(){var g=[];function w(T,M){return g.push(T+" ")>s.cacheLength&&delete w[g.shift()],w[T+" "]=M}return w}function kt(g){return g[Fe]=!0,g}function St(g){var w=I.createElement("fieldset");try{return!!g(w)}catch(T){return!1}finally{w.parentNode&&w.parentNode.removeChild(w),w=null}}function oa(g,w){for(var T=g.split("|"),M=T.length;M--;)s.attrHandle[T[M]]=w}function Ps(g,w){var T=w&&g,M=T&&g.nodeType===1&&w.nodeType===1&&g.sourceIndex-w.sourceIndex;if(M)return M;if(T){for(;T=T.nextSibling;)if(T===w)return-1}return g?1:-1}function Sl(g){return function(w){var T=w.nodeName.toLowerCase();return T==="input"&&w.type===g}}function _l(g){return function(w){var T=w.nodeName.toLowerCase();return(T==="input"||T==="button")&&w.type===g}}function ks(g){return function(w){return"form"in w?w.parentNode&&w.disabled===!1?"label"in w?"label"in w.parentNode?w.parentNode.disabled===g:w.disabled===g:w.isDisabled===g||w.isDisabled!==!g&&El(w)===g:w.disabled===g:"label"in w?w.disabled===g:!1}}function mr(g){return kt(function(w){return w=+w,kt(function(T,M){for(var A,O=g([],T.length,w),U=O.length;U--;)T[A=O[U]]&&(T[A]=!(M[A]=T[A]))})})}function la(g){return g&&typeof g.getElementsByTagName!="undefined"&&g}n=Re.support={},f=Re.isXML=function(g){var w=g&&g.namespaceURI,T=g&&(g.ownerDocument||g).documentElement;return!bl.test(w||T&&T.nodeName||"HTML")},L=Re.setDocument=function(g){var w,T,M=g?g.ownerDocument||g:ge;return M==I||M.nodeType!==9||!M.documentElement||(I=M,ie=I.documentElement,ve=!f(I),ge!=I&&(T=I.defaultView)&&T.top!==T&&(T.addEventListener?T.addEventListener("unload",Cs,!1):T.attachEvent&&T.attachEvent("onunload",Cs)),n.scope=St(function(A){return ie.appendChild(A).appendChild(I.createElement("div")),typeof A.querySelectorAll!="undefined"&&!A.querySelectorAll(":scope fieldset div").length}),n.cssSupportsSelector=St(function(){return CSS.supports("selector(*)")&&I.querySelectorAll(":is(:jqfake)")&&!CSS.supports("selector(:is(*,:jqfake))")}),n.attributes=St(function(A){return A.className="i",!A.getAttribute("className")}),n.getElementsByTagName=St(function(A){return A.appendChild(I.createComment("")),!A.getElementsByTagName("*").length}),n.getElementsByClassName=ui.test(I.getElementsByClassName),n.getById=St(function(A){return ie.appendChild(A).id=Fe,!I.getElementsByName||!I.getElementsByName(Fe).length}),n.getById?(s.filter.ID=function(A){var O=A.replace(Ut,Ht);return function(U){return U.getAttribute("id")===O}},s.find.ID=function(A,O){if(typeof O.getElementById!="undefined"&&ve){var U=O.getElementById(A);return U?[U]:[]}}):(s.filter.ID=function(A){var O=A.replace(Ut,Ht);return function(U){var Q=typeof U.getAttributeNode!="undefined"&&U.getAttributeNode("id");return Q&&Q.value===O}},s.find.ID=function(A,O){if(typeof O.getElementById!="undefined"&&ve){var U,Q,J,ue=O.getElementById(A);if(ue){if(U=ue.getAttributeNode("id"),U&&U.value===A)return[ue];for(J=O.getElementsByName(A),Q=0;ue=J[Q++];)if(U=ue.getAttributeNode("id"),U&&U.value===A)return[ue]}return[]}}),s.find.TAG=n.getElementsByTagName?function(A,O){if(typeof O.getElementsByTagName!="undefined")return O.getElementsByTagName(A);if(n.qsa)return O.querySelectorAll(A)}:function(A,O){var U,Q=[],J=0,ue=O.getElementsByTagName(A);if(A==="*"){for(;U=ue[J++];)U.nodeType===1&&Q.push(U);return Q}return ue},s.find.CLASS=n.getElementsByClassName&&function(A,O){if(typeof O.getElementsByClassName!="undefined"&&ve)return O.getElementsByClassName(A)},Ge=[],re=[],(n.qsa=ui.test(I.querySelectorAll))&&(St(function(A){var O;ie.appendChild(A).innerHTML="",A.querySelectorAll("[msallowcapture^='']").length&&re.push("[*^$]="+Ae+`*(?:''|"")`),A.querySelectorAll("[selected]").length||re.push("\\["+Ae+"*(?:value|"+na+")"),A.querySelectorAll("[id~="+Fe+"-]").length||re.push("~="),O=I.createElement("input"),O.setAttribute("name",""),A.appendChild(O),A.querySelectorAll("[name='']").length||re.push("\\["+Ae+"*name"+Ae+"*="+Ae+`*(?:''|"")`),A.querySelectorAll(":checked").length||re.push(":checked"),A.querySelectorAll("a#"+Fe+"+*").length||re.push(".#.+[+~]"),A.querySelectorAll("\\\f"),re.push("[\\r\\n\\f]")}),St(function(A){A.innerHTML="";var O=I.createElement("input");O.setAttribute("type","hidden"),A.appendChild(O).setAttribute("name","D"),A.querySelectorAll("[name=d]").length&&re.push("name"+Ae+"*[*^$|!~]?="),A.querySelectorAll(":enabled").length!==2&&re.push(":enabled",":disabled"),ie.appendChild(A).disabled=!0,A.querySelectorAll(":disabled").length!==2&&re.push(":enabled",":disabled"),A.querySelectorAll("*,:x"),re.push(",.*:")})),(n.matchesSelector=ui.test(Ve=ie.matches||ie.webkitMatchesSelector||ie.mozMatchesSelector||ie.oMatchesSelector||ie.msMatchesSelector))&&St(function(A){n.disconnectedMatch=Ve.call(A,"*"),Ve.call(A,"[s!='']:x"),Ge.push("!=",aa)}),n.cssSupportsSelector||re.push(":has"),re=re.length&&new RegExp(re.join("|")),Ge=Ge.length&&new RegExp(Ge.join("|")),w=ui.test(ie.compareDocumentPosition),ht=w||ui.test(ie.contains)?function(A,O){var U=A.nodeType===9&&A.documentElement||A,Q=O&&O.parentNode;return A===Q||!!(Q&&Q.nodeType===1&&(U.contains?U.contains(Q):A.compareDocumentPosition&&A.compareDocumentPosition(Q)&16))}:function(A,O){if(O){for(;O=O.parentNode;)if(O===A)return!0}return!1},dr=w?function(A,O){if(A===O)return B=!0,0;var U=!A.compareDocumentPosition-!O.compareDocumentPosition;return U||(U=(A.ownerDocument||A)==(O.ownerDocument||O)?A.compareDocumentPosition(O):1,U&1||!n.sortDetached&&O.compareDocumentPosition(A)===U?A==I||A.ownerDocument==ge&&ht(ge,A)?-1:O==I||O.ownerDocument==ge&&ht(ge,O)?1:R?pr(R,A)-pr(R,O):0:U&4?-1:1)}:function(A,O){if(A===O)return B=!0,0;var U,Q=0,J=A.parentNode,ue=O.parentNode,se=[A],he=[O];if(!J||!ue)return A==I?-1:O==I?1:J?-1:ue?1:R?pr(R,A)-pr(R,O):0;if(J===ue)return Ps(A,O);for(U=A;U=U.parentNode;)se.unshift(U);for(U=O;U=U.parentNode;)he.unshift(U);for(;se[Q]===he[Q];)Q++;return Q?Ps(se[Q],he[Q]):se[Q]==ge?-1:he[Q]==ge?1:0}),I},Re.matches=function(g,w){return Re(g,null,null,w)},Re.matchesSelector=function(g,w){if(L(g),n.matchesSelector&&ve&&!pt[w+" "]&&(!Ge||!Ge.test(w))&&(!re||!re.test(w)))try{var T=Ve.call(g,w);if(T||n.disconnectedMatch||g.document&&g.document.nodeType!==11)return T}catch(M){pt(w,!0)}return Re(w,I,null,[g]).length>0},Re.contains=function(g,w){return(g.ownerDocument||g)!=I&&L(g),ht(g,w)},Re.attr=function(g,w){(g.ownerDocument||g)!=I&&L(g);var T=s.attrHandle[w.toLowerCase()],M=T&&hr.call(s.attrHandle,w.toLowerCase())?T(g,w,!ve):void 0;return M!==void 0?M:n.attributes||!ve?g.getAttribute(w):(M=g.getAttributeNode(w))&&M.specified?M.value:null},Re.escape=function(g){return(g+"").replace(_s,Ts)},Re.error=function(g){throw new Error("Syntax error, unrecognized expression: "+g)},Re.uniqueSort=function(g){var w,T=[],M=0,A=0;if(B=!n.detectDuplicates,R=!n.sortStable&&g.slice(0),g.sort(dr),B){for(;w=g[A++];)w===g[A]&&(M=T.push(A));for(;M--;)g.splice(T[M],1)}return R=null,g},c=Re.getText=function(g){var w,T="",M=0,A=g.nodeType;if(A){if(A===1||A===9||A===11){if(typeof g.textContent=="string")return g.textContent;for(g=g.firstChild;g;g=g.nextSibling)T+=c(g)}else if(A===3||A===4)return g.nodeValue}else for(;w=g[M++];)T+=c(w);return T},s=Re.selectors={cacheLength:50,createPseudo:kt,match:en,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(g){return g[1]=g[1].replace(Ut,Ht),g[3]=(g[3]||g[4]||g[5]||"").replace(Ut,Ht),g[2]==="~="&&(g[3]=" "+g[3]+" "),g.slice(0,4)},CHILD:function(g){return g[1]=g[1].toLowerCase(),g[1].slice(0,3)==="nth"?(g[3]||Re.error(g[0]),g[4]=+(g[4]?g[5]+(g[6]||1):2*(g[3]==="even"||g[3]==="odd")),g[5]=+(g[7]+g[8]||g[3]==="odd")):g[3]&&Re.error(g[0]),g},PSEUDO:function(g){var w,T=!g[6]&&g[2];return en.CHILD.test(g[0])?null:(g[3]?g[2]=g[4]||g[5]||"":T&&ml.test(T)&&(w=h(T,!0))&&(w=T.indexOf(")",T.length-w)-T.length)&&(g[0]=g[0].slice(0,w),g[2]=T.slice(0,w)),g.slice(0,3))}},filter:{TAG:function(g){var w=g.replace(Ut,Ht).toLowerCase();return g==="*"?function(){return!0}:function(T){return T.nodeName&&T.nodeName.toLowerCase()===w}},CLASS:function(g){var w=je[g+" "];return w||(w=new RegExp("(^|"+Ae+")"+g+"("+Ae+"|$)"))&&je(g,function(T){return w.test(typeof T.className=="string"&&T.className||typeof T.getAttribute!="undefined"&&T.getAttribute("class")||"")})},ATTR:function(g,w,T){return function(M){var A=Re.attr(M,g);return A==null?w==="!=":w?(A+="",w==="="?A===T:w==="!="?A!==T:w==="^="?T&&A.indexOf(T)===0:w==="*="?T&&A.indexOf(T)>-1:w==="$="?T&&A.slice(-T.length)===T:w==="~="?(" "+A.replace(hl," ")+" ").indexOf(T)>-1:w==="|="?A===T||A.slice(0,T.length+1)===T+"-":!1):!0}},CHILD:function(g,w,T,M,A){var O=g.slice(0,3)!=="nth",U=g.slice(-4)!=="last",Q=w==="of-type";return M===1&&A===0?function(J){return!!J.parentNode}:function(J,ue,se){var he,Ee,Ie,ce,qe,tt,gt=O!==U?"nextSibling":"previousSibling",Oe=J.parentNode,ci=Q&&J.nodeName.toLowerCase(),fi=!se&&!Q,mt=!1;if(Oe){if(O){for(;gt;){for(ce=J;ce=ce[gt];)if(Q?ce.nodeName.toLowerCase()===ci:ce.nodeType===1)return!1;tt=gt=g==="only"&&!tt&&"nextSibling"}return!0}if(tt=[U?Oe.firstChild:Oe.lastChild],U&&fi){for(ce=Oe,Ie=ce[Fe]||(ce[Fe]={}),Ee=Ie[ce.uniqueID]||(Ie[ce.uniqueID]={}),he=Ee[g]||[],qe=he[0]===ut&&he[1],mt=qe&&he[2],ce=qe&&Oe.childNodes[qe];ce=++qe&&ce&&ce[gt]||(mt=qe=0)||tt.pop();)if(ce.nodeType===1&&++mt&&ce===J){Ee[g]=[ut,qe,mt];break}}else if(fi&&(ce=J,Ie=ce[Fe]||(ce[Fe]={}),Ee=Ie[ce.uniqueID]||(Ie[ce.uniqueID]={}),he=Ee[g]||[],qe=he[0]===ut&&he[1],mt=qe),mt===!1)for(;(ce=++qe&&ce&&ce[gt]||(mt=qe=0)||tt.pop())&&!((Q?ce.nodeName.toLowerCase()===ci:ce.nodeType===1)&&++mt&&(fi&&(Ie=ce[Fe]||(ce[Fe]={}),Ee=Ie[ce.uniqueID]||(Ie[ce.uniqueID]={}),Ee[g]=[ut,mt]),ce===J)););return mt-=A,mt===M||mt%M==0&&mt/M>=0}}},PSEUDO:function(g,w){var T,M=s.pseudos[g]||s.setFilters[g.toLowerCase()]||Re.error("unsupported pseudo: "+g);return M[Fe]?M(w):M.length>1?(T=[g,g,"",w],s.setFilters.hasOwnProperty(g.toLowerCase())?kt(function(A,O){for(var U,Q=M(A,w),J=Q.length;J--;)U=pr(A,Q[J]),A[U]=!(O[U]=Q[J])}):function(A){return M(A,0,T)}):M}},pseudos:{not:kt(function(g){var w=[],T=[],M=E(g.replace(Zi,"$1"));return M[Fe]?kt(function(A,O,U,Q){for(var J,ue=M(A,null,Q,[]),se=A.length;se--;)(J=ue[se])&&(A[se]=!(O[se]=J))}):function(A,O,U){return w[0]=A,M(w,null,U,T),w[0]=null,!T.pop()}}),has:kt(function(g){return function(w){return Re(g,w).length>0}}),contains:kt(function(g){return g=g.replace(Ut,Ht),function(w){return(w.textContent||c(w)).indexOf(g)>-1}}),lang:kt(function(g){return vl.test(g||"")||Re.error("unsupported lang: "+g),g=g.replace(Ut,Ht).toLowerCase(),function(w){var T;do if(T=ve?w.lang:w.getAttribute("xml:lang")||w.getAttribute("lang"))return T=T.toLowerCase(),T===g||T.indexOf(g+"-")===0;while((w=w.parentNode)&&w.nodeType===1);return!1}}),target:function(g){var w=e.location&&e.location.hash;return w&&w.slice(1)===g.id},root:function(g){return g===ie},focus:function(g){return g===I.activeElement&&(!I.hasFocus||I.hasFocus())&&!!(g.type||g.href||~g.tabIndex)},enabled:ks(!1),disabled:ks(!0),checked:function(g){var w=g.nodeName.toLowerCase();return w==="input"&&!!g.checked||w==="option"&&!!g.selected},selected:function(g){return g.parentNode&&g.parentNode.selectedIndex,g.selected===!0},empty:function(g){for(g=g.firstChild;g;g=g.nextSibling)if(g.nodeType<6)return!1;return!0},parent:function(g){return!s.pseudos.empty(g)},header:function(g){return xl.test(g.nodeName)},input:function(g){return yl.test(g.nodeName)},button:function(g){var w=g.nodeName.toLowerCase();return w==="input"&&g.type==="button"||w==="button"},text:function(g){var w;return g.nodeName.toLowerCase()==="input"&&g.type==="text"&&((w=g.getAttribute("type"))==null||w.toLowerCase()==="text")},first:mr(function(){return[0]}),last:mr(function(g,w){return[w-1]}),eq:mr(function(g,w,T){return[T<0?T+w:T]}),even:mr(function(g,w){for(var T=0;Tw?w:T;--M>=0;)g.push(M);return g}),gt:mr(function(g,w,T){for(var M=T<0?T+w:T;++M1?function(w,T,M){for(var A=g.length;A--;)if(!g[A](w,T,M))return!1;return!0}:g[0]}function Tl(g,w,T){for(var M=0,A=w.length;M-1&&(U[se]=!(Q[se]=Ee))}}else Oe=an(Oe===Q?Oe.splice(qe,Oe.length):Oe),A?A(null,Q,Oe,ue):er.apply(Q,Oe)})}function fa(g){for(var w,T,M,A=g.length,O=s.relative[g[0].type],U=O||s.relative[" "],Q=O?1:0,J=nn(function(he){return he===w},U,!0),ue=nn(function(he){return pr(w,he)>-1},U,!0),se=[function(he,Ee,Ie){var ce=!O&&(Ie||Ee!==D)||((w=Ee).nodeType?J(he,Ee,Ie):ue(he,Ee,Ie));return w=null,ce}];Q1&&ua(se),Q>1&&rn(g.slice(0,Q-1).concat({value:g[Q-2].type===" "?"*":""})).replace(Zi,"$1"),T,Q0,M=g.length>0,A=function(O,U,Q,J,ue){var se,he,Ee,Ie=0,ce="0",qe=O&&[],tt=[],gt=D,Oe=O||M&&s.find.TAG("*",ue),ci=ut+=gt==null?1:Math.random()||.1,fi=Oe.length;for(ue&&(D=U==I||U||ue);ce!==fi&&(se=Oe[ce])!=null;ce++){if(M&&se){for(he=0,!U&&se.ownerDocument!=I&&(L(se),Q=!ve);Ee=g[he++];)if(Ee(se,U||I,Q)){J.push(se);break}ue&&(ut=ci)}T&&((se=!Ee&&se)&&Ie--,O&&qe.push(se))}if(Ie+=ce,T&&ce!==Ie){for(he=0;Ee=w[he++];)Ee(qe,tt,U,Q);if(O){if(Ie>0)for(;ce--;)qe[ce]||tt[ce]||(tt[ce]=Zt.call(J));tt=an(tt)}er.apply(J,tt),ue&&!O&&tt.length>0&&Ie+w.length>1&&Re.uniqueSort(J)}return ue&&(ut=ci,D=gt),qe};return T?kt(A):A}return E=Re.compile=function(g,w){var T,M=[],A=[],O=Ki[g+" "];if(!O){for(w||(w=h(g)),T=w.length;T--;)O=fa(w[T]),O[Fe]?M.push(O):A.push(O);O=Ki(g,Cl(A,M)),O.selector=g}return O},x=Re.select=function(g,w,T,M){var A,O,U,Q,J,ue=typeof g=="function"&&g,se=!M&&h(g=ue.selector||g);if(T=T||[],se.length===1){if(O=se[0]=se[0].slice(0),O.length>2&&(U=O[0]).type==="ID"&&w.nodeType===9&&ve&&s.relative[O[1].type]){if(w=(s.find.ID(U.matches[0].replace(Ut,Ht),w)||[])[0],w)ue&&(w=w.parentNode);else return T;g=g.slice(O.shift().value.length)}for(A=en.needsContext.test(g)?0:O.length;A--&&(U=O[A],!s.relative[Q=U.type]);)if((J=s.find[Q])&&(M=J(U.matches[0].replace(Ut,Ht),sa.test(O[0].type)&&la(w.parentNode)||w))){if(O.splice(A,1),g=M.length&&rn(O),!g)return er.apply(T,M),T;break}}return(ue||E(g,se))(M,w,!ve,T,!w||sa.test(g)&&la(w.parentNode)||w),T},n.sortStable=Fe.split("").sort(dr).join("")===Fe,n.detectDuplicates=!!B,L(),n.sortDetached=St(function(g){return g.compareDocumentPosition(I.createElement("fieldset"))&1}),St(function(g){return g.innerHTML="",g.firstChild.getAttribute("href")==="#"})||oa("type|href|height|width",function(g,w,T){if(!T)return g.getAttribute(w,w.toLowerCase()==="type"?1:2)}),(!n.attributes||!St(function(g){return g.innerHTML="",g.firstChild.setAttribute("value",""),g.firstChild.getAttribute("value")===""}))&&oa("value",function(g,w,T){if(!T&&g.nodeName.toLowerCase()==="input")return g.defaultValue}),St(function(g){return g.getAttribute("disabled")==null})||oa(na,function(g,w,T){var M;if(!T)return g[w]===!0?w.toLowerCase():(M=g.getAttributeNode(w))&&M.specified?M.value:null}),Re}(l);o.find=ne,o.expr=ne.selectors,o.expr[":"]=o.expr.pseudos,o.uniqueSort=o.unique=ne.uniqueSort,o.text=ne.getText,o.isXMLDoc=ne.isXML,o.contains=ne.contains,o.escapeSelector=ne.escape;var oe=function(e,i,n){for(var s=[],c=n!==void 0;(e=e[i])&&e.nodeType!==9;)if(e.nodeType===1){if(c&&o(e).is(n))break;s.push(e)}return s},_e=function(e,i){for(var n=[];e;e=e.nextSibling)e.nodeType===1&&e!==i&&n.push(e);return n},ze=o.expr.match.needsContext;function Ne(e,i){return e.nodeName&&e.nodeName.toLowerCase()===i.toLowerCase()}var it=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function Je(e,i,n){return V(i)?o.grep(e,function(s,c){return!!i.call(s,c,s)!==n}):i.nodeType?o.grep(e,function(s){return s===i!==n}):typeof i!="string"?o.grep(e,function(s){return b.call(i,s)>-1!==n}):o.filter(i,e,n)}o.filter=function(e,i,n){var s=i[0];return n&&(e=":not("+e+")"),i.length===1&&s.nodeType===1?o.find.matchesSelector(s,e)?[s]:[]:o.find.matches(e,o.grep(i,function(c){return c.nodeType===1}))},o.fn.extend({find:function(e){var i,n,s=this.length,c=this;if(typeof e!="string")return this.pushStack(o(e).filter(function(){for(i=0;i1?o.uniqueSort(n):n},filter:function(e){return this.pushStack(Je(this,e||[],!1))},not:function(e){return this.pushStack(Je(this,e||[],!0))},is:function(e){return!!Je(this,typeof e=="string"&&ze.test(e)?o(e):e||[],!1).length}});var bt,nr=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,Pr=o.fn.init=function(e,i,n){var s,c;if(!e)return this;if(n=n||bt,typeof e=="string")if(e[0]==="<"&&e[e.length-1]===">"&&e.length>=3?s=[null,e,null]:s=nr.exec(e),s&&(s[1]||!i))if(s[1]){if(i=i instanceof o?i[0]:i,o.merge(this,o.parseHTML(s[1],i&&i.nodeType?i.ownerDocument||i:K,!0)),it.test(s[1])&&o.isPlainObject(i))for(s in i)V(this[s])?this[s](i[s]):this.attr(s,i[s]);return this}else return c=K.getElementById(s[2]),c&&(this[0]=c,this.length=1),this;else return!i||i.jquery?(i||n).find(e):this.constructor(i).find(e);else{if(e.nodeType)return this[0]=e,this.length=1,this;if(V(e))return n.ready!==void 0?n.ready(e):e(o)}return o.makeArray(e,this)};Pr.prototype=o.fn,bt=o(K);var jr=/^(?:parents|prev(?:Until|All))/,Xt={children:!0,contents:!0,next:!0,prev:!0};o.fn.extend({has:function(e){var i=o(e,this),n=i.length;return this.filter(function(){for(var s=0;s-1:n.nodeType===1&&o.find.matchesSelector(n,e))){f.push(n);break}}return this.pushStack(f.length>1?o.uniqueSort(f):f)},index:function(e){return e?typeof e=="string"?b.call(o(e),this[0]):b.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,i){return this.pushStack(o.uniqueSort(o.merge(this.get(),o(e,i))))},addBack:function(e){return this.add(e==null?this.prevObject:this.prevObject.filter(e))}});function Br(e,i){for(;(e=e[i])&&e.nodeType!==1;);return e}o.each({parent:function(e){var i=e.parentNode;return i&&i.nodeType!==11?i:null},parents:function(e){return oe(e,"parentNode")},parentsUntil:function(e,i,n){return oe(e,"parentNode",n)},next:function(e){return Br(e,"nextSibling")},prev:function(e){return Br(e,"previousSibling")},nextAll:function(e){return oe(e,"nextSibling")},prevAll:function(e){return oe(e,"previousSibling")},nextUntil:function(e,i,n){return oe(e,"nextSibling",n)},prevUntil:function(e,i,n){return oe(e,"previousSibling",n)},siblings:function(e){return _e((e.parentNode||{}).firstChild,e)},children:function(e){return _e(e.firstChild)},contents:function(e){return e.contentDocument!=null&&a(e.contentDocument)?e.contentDocument:(Ne(e,"template")&&(e=e.content||e),o.merge([],e.childNodes))}},function(e,i){o.fn[e]=function(n,s){var c=o.map(this,i,n);return e.slice(-5)!=="Until"&&(s=n),s&&typeof s=="string"&&(c=o.filter(s,c)),this.length>1&&(Xt[e]||o.uniqueSort(c),jr.test(e)&&c.reverse()),this.pushStack(c)}});var yt=/[^\x20\t\r\n\f]+/g;function Nn(e){var i={};return o.each(e.match(yt)||[],function(n,s){i[s]=!0}),i}o.Callbacks=function(e){e=typeof e=="string"?Nn(e):o.extend({},e);var i,n,s,c,f=[],h=[],E=-1,x=function(){for(c=c||e.once,s=i=!0;h.length;E=-1)for(n=h.shift();++E-1;)f.splice(L,1),L<=E&&E--}),this},has:function(R){return R?o.inArray(R,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return c=h=[],f=n="",this},disabled:function(){return!f},lock:function(){return c=h=[],!n&&!i&&(f=n=""),this},locked:function(){return!!c},fireWith:function(R,B){return c||(B=B||[],B=[R,B.slice?B.slice():B],h.push(B),i||x()),this},fire:function(){return D.fireWith(this,arguments),this},fired:function(){return!!s}};return D};function Ke(e){return e}function ar(e){throw e}function Ii(e,i,n,s){var c;try{e&&V(c=e.promise)?c.call(e).done(i).fail(n):e&&V(c=e.then)?c.call(e,i,n):i.apply(void 0,[e].slice(s))}catch(f){n.apply(void 0,[f])}}o.extend({Deferred:function(e){var i=[["notify","progress",o.Callbacks("memory"),o.Callbacks("memory"),2],["resolve","done",o.Callbacks("once memory"),o.Callbacks("once memory"),0,"resolved"],["reject","fail",o.Callbacks("once memory"),o.Callbacks("once memory"),1,"rejected"]],n="pending",s={state:function(){return n},always:function(){return c.done(arguments).fail(arguments),this},catch:function(f){return s.then(null,f)},pipe:function(){var f=arguments;return o.Deferred(function(h){o.each(i,function(E,x){var D=V(f[x[4]])&&f[x[4]];c[x[1]](function(){var R=D&&D.apply(this,arguments);R&&V(R.promise)?R.promise().progress(h.notify).done(h.resolve).fail(h.reject):h[x[0]+"With"](this,D?[R]:arguments)})}),f=null}).promise()},then:function(f,h,E){var x=0;function D(R,B,L,I){return function(){var ie=this,ve=arguments,re=function(){var Ve,ht;if(!(R=x&&(L!==ar&&(ie=void 0,ve=[Ve]),B.rejectWith(ie,ve))}};R?Ge():(o.Deferred.getStackHook&&(Ge.stackTrace=o.Deferred.getStackHook()),l.setTimeout(Ge))}}return o.Deferred(function(R){i[0][3].add(D(0,R,V(E)?E:Ke,R.notifyWith)),i[1][3].add(D(0,R,V(f)?f:Ke)),i[2][3].add(D(0,R,V(h)?h:ar))}).promise()},promise:function(f){return f!=null?o.extend(f,s):s}},c={};return o.each(i,function(f,h){var E=h[2],x=h[5];s[h[1]]=E.add,x&&E.add(function(){n=x},i[3-f][2].disable,i[3-f][3].disable,i[0][2].lock,i[0][3].lock),E.add(h[3].fire),c[h[0]]=function(){return c[h[0]+"With"](this===c?void 0:this,arguments),this},c[h[0]+"With"]=E.fireWith}),s.promise(c),e&&e.call(c,c),c},when:function(e){var i=arguments.length,n=i,s=Array(n),c=u.call(arguments),f=o.Deferred(),h=function(E){return function(x){s[E]=this,c[E]=arguments.length>1?u.call(arguments):x,--i||f.resolveWith(s,c)}};if(i<=1&&(Ii(e,f.done(h(n)).resolve,f.reject,!i),f.state()==="pending"||V(c[n]&&c[n].then)))return f.then();for(;n--;)Ii(c[n],h(n),f.reject);return f.promise()}});var On=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;o.Deferred.exceptionHook=function(e,i){l.console&&l.console.warn&&e&&On.test(e.name)&&l.console.warn("jQuery.Deferred exception: "+e.message,e.stack,i)},o.readyException=function(e){l.setTimeout(function(){throw e})};var Ur=o.Deferred();o.fn.ready=function(e){return Ur.then(e).catch(function(i){o.readyException(i)}),this},o.extend({isReady:!1,readyWait:1,ready:function(e){(e===!0?--o.readyWait:o.isReady)||(o.isReady=!0,!(e!==!0&&--o.readyWait>0)&&Ur.resolveWith(K,[o]))}}),o.ready.then=Ur.then;function kr(){K.removeEventListener("DOMContentLoaded",kr),l.removeEventListener("load",kr),o.ready()}K.readyState==="complete"||K.readyState!=="loading"&&!K.documentElement.doScroll?l.setTimeout(o.ready):(K.addEventListener("DOMContentLoaded",kr),l.addEventListener("load",kr));var Pt=function(e,i,n,s,c,f,h){var E=0,x=e.length,D=n==null;if(be(n)==="object"){c=!0;for(E in n)Pt(e,i,E,n[E],!0,f,h)}else if(s!==void 0&&(c=!0,V(s)||(h=!0),D&&(h?(i.call(e,s),i=null):(D=i,i=function(R,B,L){return D.call(o(R),L)})),i))for(;E1,null,!0)},removeData:function(e){return this.each(function(){$e.remove(this,e)})}}),o.extend({queue:function(e,i,n){var s;if(e)return i=(i||"fx")+"queue",s=le.get(e,i),n&&(!s||Array.isArray(n)?s=le.access(e,i,o.makeArray(n)):s.push(n)),s||[]},dequeue:function(e,i){i=i||"fx";var n=o.queue(e,i),s=n.length,c=n.shift(),f=o._queueHooks(e,i),h=function(){o.dequeue(e,i)};c==="inprogress"&&(c=n.shift(),s--),c&&(i==="fx"&&n.unshift("inprogress"),delete f.stop,c.call(e,h,f)),!s&&f&&f.empty.fire()},_queueHooks:function(e,i){var n=i+"queueHooks";return le.get(e,n)||le.access(e,n,{empty:o.Callbacks("once memory").add(function(){le.remove(e,[i+"queue",n])})})}}),o.fn.extend({queue:function(e,i){var n=2;return typeof e!="string"&&(i=e,e="fx",n--),arguments.length\x20\t\r\n\f]*)/i,Gr=/^$|^module$|\/(?:java|ecma)script/i;(function(){var e=K.createDocumentFragment(),i=e.appendChild(K.createElement("div")),n=K.createElement("input");n.setAttribute("type","radio"),n.setAttribute("checked","checked"),n.setAttribute("name","t"),i.appendChild(n),H.checkClone=i.cloneNode(!0).cloneNode(!0).lastChild.checked,i.innerHTML="",H.noCloneChecked=!!i.cloneNode(!0).lastChild.defaultValue,i.innerHTML="",H.option=!!i.lastChild})();var Ze={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};Ze.tbody=Ze.tfoot=Ze.colgroup=Ze.caption=Ze.thead,Ze.th=Ze.td,H.option||(Ze.optgroup=Ze.option=[1,""]);function et(e,i){var n;return typeof e.getElementsByTagName!="undefined"?n=e.getElementsByTagName(i||"*"):typeof e.querySelectorAll!="undefined"?n=e.querySelectorAll(i||"*"):n=[],i===void 0||i&&Ne(e,i)?o.merge([e],n):n}function qr(e,i){for(var n=0,s=e.length;n-1){c&&c.push(f);continue}if(D=Ot(f),h=et(B.appendChild(f),"script"),D&&qr(h),n)for(R=0;f=h[R++];)Gr.test(f.type||"")&&n.push(f)}return B}var $i=/^([^.]*)(?:\.(.+)|)/;function nt(){return!0}function Jt(){return!1}function Un(e,i){return e===Wi()==(i==="focus")}function Wi(){try{return K.activeElement}catch(e){}}function Qr(e,i,n,s,c,f){var h,E;if(typeof i=="object"){typeof n!="string"&&(s=s||n,n=void 0);for(E in i)Qr(e,E,n,s,i[E],f);return e}if(s==null&&c==null?(c=n,s=n=void 0):c==null&&(typeof n=="string"?(c=s,s=void 0):(c=s,s=n,n=void 0)),c===!1)c=Jt;else if(!c)return e;return f===1&&(h=c,c=function(x){return o().off(x),h.apply(this,arguments)},c.guid=h.guid||(h.guid=o.guid++)),e.each(function(){o.event.add(this,i,c,s,n)})}o.event={global:{},add:function(e,i,n,s,c){var f,h,E,x,D,R,B,L,I,ie,ve,re=le.get(e);if(!!sr(e))for(n.handler&&(f=n,n=f.handler,c=f.selector),c&&o.find.matchesSelector(Lt,c),n.guid||(n.guid=o.guid++),(x=re.events)||(x=re.events=Object.create(null)),(h=re.handle)||(h=re.handle=function(Ge){return typeof o!="undefined"&&o.event.triggered!==Ge.type?o.event.dispatch.apply(e,arguments):void 0}),i=(i||"").match(yt)||[""],D=i.length;D--;)E=$i.exec(i[D])||[],I=ve=E[1],ie=(E[2]||"").split(".").sort(),!!I&&(B=o.event.special[I]||{},I=(c?B.delegateType:B.bindType)||I,B=o.event.special[I]||{},R=o.extend({type:I,origType:ve,data:s,handler:n,guid:n.guid,selector:c,needsContext:c&&o.expr.match.needsContext.test(c),namespace:ie.join(".")},f),(L=x[I])||(L=x[I]=[],L.delegateCount=0,(!B.setup||B.setup.call(e,s,ie,h)===!1)&&e.addEventListener&&e.addEventListener(I,h)),B.add&&(B.add.call(e,R),R.handler.guid||(R.handler.guid=n.guid)),c?L.splice(L.delegateCount++,0,R):L.push(R),o.event.global[I]=!0)},remove:function(e,i,n,s,c){var f,h,E,x,D,R,B,L,I,ie,ve,re=le.hasData(e)&&le.get(e);if(!(!re||!(x=re.events))){for(i=(i||"").match(yt)||[""],D=i.length;D--;){if(E=$i.exec(i[D])||[],I=ve=E[1],ie=(E[2]||"").split(".").sort(),!I){for(I in x)o.event.remove(e,I+i[D],n,s,!0);continue}for(B=o.event.special[I]||{},I=(s?B.delegateType:B.bindType)||I,L=x[I]||[],E=E[2]&&new RegExp("(^|\\.)"+ie.join("\\.(?:.*\\.|)")+"(\\.|$)"),h=f=L.length;f--;)R=L[f],(c||ve===R.origType)&&(!n||n.guid===R.guid)&&(!E||E.test(R.namespace))&&(!s||s===R.selector||s==="**"&&R.selector)&&(L.splice(f,1),R.selector&&L.delegateCount--,B.remove&&B.remove.call(e,R));h&&!L.length&&((!B.teardown||B.teardown.call(e,ie,re.handle)===!1)&&o.removeEvent(e,I,re.handle),delete x[I])}o.isEmptyObject(x)&&le.remove(e,"handle events")}},dispatch:function(e){var i,n,s,c,f,h,E=new Array(arguments.length),x=o.event.fix(e),D=(le.get(this,"events")||Object.create(null))[x.type]||[],R=o.event.special[x.type]||{};for(E[0]=x,i=1;i=1)){for(;D!==this;D=D.parentNode||this)if(D.nodeType===1&&!(e.type==="click"&&D.disabled===!0)){for(f=[],h={},n=0;n-1:o.find(c,this,null,[D]).length),h[c]&&f.push(s);f.length&&E.push({elem:D,handlers:f})}}return D=this,x\s*$/g;function ji(e,i){return Ne(e,"table")&&Ne(i.nodeType!==11?i:i.firstChild,"tr")&&o(e).children("tbody")[0]||e}function Gn(e){return e.type=(e.getAttribute("type")!==null)+"/"+e.type,e}function qn(e){return(e.type||"").slice(0,5)==="true/"?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Bi(e,i){var n,s,c,f,h,E,x;if(i.nodeType===1){if(le.hasData(e)&&(f=le.get(e),x=f.events,x)){le.remove(i,"handle events");for(c in x)for(n=0,s=x[c].length;n1&&typeof I=="string"&&!H.checkClone&&zn.test(I))return e.each(function(ve){var re=e.eq(ve);ie&&(i[0]=I.call(this,ve,re.html())),Wt(re,i,n,s)});if(B&&(c=Xr(i,e[0].ownerDocument,!1,e,s),f=c.firstChild,c.childNodes.length===1&&(c=f),f||s)){for(h=o.map(et(c,"script"),Gn),E=h.length;R0&&qr(h,!x&&et(e,"script")),E},cleanData:function(e){for(var i,n,s,c=o.event.special,f=0;(n=e[f])!==void 0;f++)if(sr(n)){if(i=n[le.expando]){if(i.events)for(s in i.events)c[s]?o.event.remove(n,s):o.removeEvent(n,s,i.handle);n[le.expando]=void 0}n[$e.expando]&&(n[$e.expando]=void 0)}}}),o.fn.extend({detach:function(e){return Ui(this,e,!0)},remove:function(e){return Ui(this,e)},text:function(e){return Pt(this,function(i){return i===void 0?o.text(this):this.empty().each(function(){(this.nodeType===1||this.nodeType===11||this.nodeType===9)&&(this.textContent=i)})},null,e,arguments.length)},append:function(){return Wt(this,arguments,function(e){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){var i=ji(this,e);i.appendChild(e)}})},prepend:function(){return Wt(this,arguments,function(e){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){var i=ji(this,e);i.insertBefore(e,i.firstChild)}})},before:function(){return Wt(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Wt(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,i=0;(e=this[i])!=null;i++)e.nodeType===1&&(o.cleanData(et(e,!1)),e.textContent="");return this},clone:function(e,i){return e=e==null?!1:e,i=i==null?e:i,this.map(function(){return o.clone(this,e,i)})},html:function(e){return Pt(this,function(i){var n=this[0]||{},s=0,c=this.length;if(i===void 0&&n.nodeType===1)return n.innerHTML;if(typeof i=="string"&&!Hn.test(i)&&!Ze[(Vr.exec(i)||["",""])[1].toLowerCase()]){i=o.htmlPrefilter(i);try{for(;s=0&&(x+=Math.max(0,Math.ceil(e["offset"+i[0].toUpperCase()+i.slice(1)]-f-x-E-.5))||0),x}function fr(e,i,n){var s=Rr(e),c=!H.boxSizingReliable()||n,f=c&&o.css(e,"boxSizing",!1,s)==="border-box",h=f,E=ur(e,i,s),x="offset"+i[0].toUpperCase()+i.slice(1);if(Jr.test(E)){if(!n)return E;E="auto"}return(!H.boxSizingReliable()&&f||!H.reliableTrDimensions()&&Ne(e,"tr")||E==="auto"||!parseFloat(E)&&o.css(e,"display",!1,s)==="inline")&&e.getClientRects().length&&(f=o.css(e,"boxSizing",!1,s)==="border-box",h=x in e,h&&(E=e[x])),E=parseFloat(E)||0,E+ti(e,i,n||(f?"border":"content"),h,s,E)+"px"}o.extend({cssHooks:{opacity:{get:function(e,i){if(i){var n=ur(e,"opacity");return n===""?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,i,n,s){if(!(!e||e.nodeType===3||e.nodeType===8||!e.style)){var c,f,h,E=xt(i),x=Kr.test(i),D=e.style;if(x||(i=Zr(E)),h=o.cssHooks[i]||o.cssHooks[E],n!==void 0){if(f=typeof n,f==="string"&&(c=Nt.exec(n))&&c[1]&&(n=Hr(e,i,c),f="number"),n==null||n!==n)return;f==="number"&&!x&&(n+=c&&c[3]||(o.cssNumber[E]?"":"px")),!H.clearCloneStyle&&n===""&&i.indexOf("background")===0&&(D[i]="inherit"),(!h||!("set"in h)||(n=h.set(e,n,s))!==void 0)&&(x?D.setProperty(i,n):D[i]=n)}else return h&&"get"in h&&(c=h.get(e,!1,s))!==void 0?c:D[i]}},css:function(e,i,n,s){var c,f,h,E=xt(i),x=Kr.test(i);return x||(i=Zr(E)),h=o.cssHooks[i]||o.cssHooks[E],h&&"get"in h&&(c=h.get(e,!0,n)),c===void 0&&(c=ur(e,i,s)),c==="normal"&&i in ei&&(c=ei[i]),n===""||n?(f=parseFloat(c),n===!0||isFinite(f)?f||0:c):c}}),o.each(["height","width"],function(e,i){o.cssHooks[i]={get:function(n,s,c){if(s)return Xi.test(o.css(n,"display"))&&(!n.getClientRects().length||!n.getBoundingClientRect().width)?Hi(n,cr,function(){return fr(n,i,c)}):fr(n,i,c)},set:function(n,s,c){var f,h=Rr(n),E=!H.scrollboxSize()&&h.position==="absolute",x=E||c,D=x&&o.css(n,"boxSizing",!1,h)==="border-box",R=c?ti(n,i,c,D,h):0;return D&&E&&(R-=Math.ceil(n["offset"+i[0].toUpperCase()+i.slice(1)]-parseFloat(h[i])-ti(n,i,"border",!1,h)-.5)),R&&(f=Nt.exec(s))&&(f[3]||"px")!=="px"&&(n.style[i]=s,s=o.css(n,i)),jt(n,s,R)}}}),o.cssHooks.marginLeft=Vi(H.reliableMarginLeft,function(e,i){if(i)return(parseFloat(ur(e,"marginLeft"))||e.getBoundingClientRect().left-Hi(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),o.each({margin:"",padding:"",border:"Width"},function(e,i){o.cssHooks[e+i]={expand:function(n){for(var s=0,c={},f=typeof n=="string"?n.split(" "):[n];s<4;s++)c[e+wt[s]+i]=f[s]||f[s-2]||f[0];return c}},e!=="margin"&&(o.cssHooks[e+i].set=jt)}),o.fn.extend({css:function(e,i){return Pt(this,function(n,s,c){var f,h,E={},x=0;if(Array.isArray(s)){for(f=Rr(n),h=s.length;x1)}});function Xe(e,i,n,s,c){return new Xe.prototype.init(e,i,n,s,c)}o.Tween=Xe,Xe.prototype={constructor:Xe,init:function(e,i,n,s,c,f){this.elem=e,this.prop=n,this.easing=c||o.easing._default,this.options=i,this.start=this.now=this.cur(),this.end=s,this.unit=f||(o.cssNumber[n]?"":"px")},cur:function(){var e=Xe.propHooks[this.prop];return e&&e.get?e.get(this):Xe.propHooks._default.get(this)},run:function(e){var i,n=Xe.propHooks[this.prop];return this.options.duration?this.pos=i=o.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=i=e,this.now=(this.end-this.start)*i+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):Xe.propHooks._default.set(this),this}},Xe.prototype.init.prototype=Xe.prototype,Xe.propHooks={_default:{get:function(e){var i;return e.elem.nodeType!==1||e.elem[e.prop]!=null&&e.elem.style[e.prop]==null?e.elem[e.prop]:(i=o.css(e.elem,e.prop,""),!i||i==="auto"?0:i)},set:function(e){o.fx.step[e.prop]?o.fx.step[e.prop](e):e.elem.nodeType===1&&(o.cssHooks[e.prop]||e.elem.style[Zr(e.prop)]!=null)?o.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},Xe.propHooks.scrollTop=Xe.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},o.easing={linear:function(e){return e},swing:function(e){return .5-Math.cos(e*Math.PI)/2},_default:"swing"},o.fx=Xe.prototype.init,o.fx.step={};var Kt,Ir,ri=/^(?:toggle|show|hide)$/,Kn=/queueHooks$/;function ii(){Ir&&(K.hidden===!1&&l.requestAnimationFrame?l.requestAnimationFrame(ii):l.setTimeout(ii,o.fx.interval),o.fx.tick())}function p(){return l.setTimeout(function(){Kt=void 0}),Kt=Date.now()}function S(e,i){var n,s=0,c={height:e};for(i=i?1:0;s<4;s+=2-i)n=wt[s],c["margin"+n]=c["padding"+n]=e;return i&&(c.opacity=c.width=e),c}function v(e,i,n){for(var s,c=(_.tweeners[i]||[]).concat(_.tweeners["*"]),f=0,h=c.length;f1)},removeAttr:function(e){return this.each(function(){o.removeAttr(this,e)})}}),o.extend({attr:function(e,i,n){var s,c,f=e.nodeType;if(!(f===3||f===8||f===2)){if(typeof e.getAttribute=="undefined")return o.prop(e,i,n);if((f!==1||!o.isXMLDoc(e))&&(c=o.attrHooks[i.toLowerCase()]||(o.expr.match.bool.test(i)?N:void 0)),n!==void 0){if(n===null){o.removeAttr(e,i);return}return c&&"set"in c&&(s=c.set(e,n,i))!==void 0?s:(e.setAttribute(i,n+""),n)}return c&&"get"in c&&(s=c.get(e,i))!==null?s:(s=o.find.attr(e,i),s==null?void 0:s)}},attrHooks:{type:{set:function(e,i){if(!H.radioValue&&i==="radio"&&Ne(e,"input")){var n=e.value;return e.setAttribute("type",i),n&&(e.value=n),i}}}},removeAttr:function(e,i){var n,s=0,c=i&&i.match(yt);if(c&&e.nodeType===1)for(;n=c[s++];)e.removeAttribute(n)}}),N={set:function(e,i,n){return i===!1?o.removeAttr(e,n):e.setAttribute(n,n),n}},o.each(o.expr.match.bool.source.match(/\w+/g),function(e,i){var n=j[i]||o.find.attr;j[i]=function(s,c,f){var h,E,x=c.toLowerCase();return f||(E=j[x],j[x]=h,h=n(s,c,f)!=null?x:null,j[x]=E),h}});var G=/^(?:input|select|textarea|button)$/i,q=/^(?:a|area)$/i;o.fn.extend({prop:function(e,i){return Pt(this,o.prop,e,i,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[o.propFix[e]||e]})}}),o.extend({prop:function(e,i,n){var s,c,f=e.nodeType;if(!(f===3||f===8||f===2))return(f!==1||!o.isXMLDoc(e))&&(i=o.propFix[i]||i,c=o.propHooks[i]),n!==void 0?c&&"set"in c&&(s=c.set(e,n,i))!==void 0?s:e[i]=n:c&&"get"in c&&(s=c.get(e,i))!==null?s:e[i]},propHooks:{tabIndex:{get:function(e){var i=o.find.attr(e,"tabindex");return i?parseInt(i,10):G.test(e.nodeName)||q.test(e.nodeName)&&e.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),H.optSelected||(o.propHooks.selected={get:function(e){var i=e.parentNode;return i&&i.parentNode&&i.parentNode.selectedIndex,null},set:function(e){var i=e.parentNode;i&&(i.selectedIndex,i.parentNode&&i.parentNode.selectedIndex)}}),o.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){o.propFix[this.toLowerCase()]=this});function Y(e){var i=e.match(yt)||[];return i.join(" ")}function Z(e){return e.getAttribute&&e.getAttribute("class")||""}function ye(e){return Array.isArray(e)?e:typeof e=="string"?e.match(yt)||[]:[]}o.fn.extend({addClass:function(e){var i,n,s,c,f,h;return V(e)?this.each(function(E){o(this).addClass(e.call(this,E,Z(this)))}):(i=ye(e),i.length?this.each(function(){if(s=Z(this),n=this.nodeType===1&&" "+Y(s)+" ",n){for(f=0;f-1;)n=n.replace(" "+c+" "," ");h=Y(n),s!==h&&this.setAttribute("class",h)}}):this):this.attr("class","")},toggleClass:function(e,i){var n,s,c,f,h=typeof e,E=h==="string"||Array.isArray(e);return V(e)?this.each(function(x){o(this).toggleClass(e.call(this,x,Z(this),i),i)}):typeof i=="boolean"&&E?i?this.addClass(e):this.removeClass(e):(n=ye(e),this.each(function(){if(E)for(f=o(this),c=0;c-1)return!0;return!1}});var Pe=/\r/g;o.fn.extend({val:function(e){var i,n,s,c=this[0];return arguments.length?(s=V(e),this.each(function(f){var h;this.nodeType===1&&(s?h=e.call(this,f,o(this).val()):h=e,h==null?h="":typeof h=="number"?h+="":Array.isArray(h)&&(h=o.map(h,function(E){return E==null?"":E+""})),i=o.valHooks[this.type]||o.valHooks[this.nodeName.toLowerCase()],(!i||!("set"in i)||i.set(this,h,"value")===void 0)&&(this.value=h))})):c?(i=o.valHooks[c.type]||o.valHooks[c.nodeName.toLowerCase()],i&&"get"in i&&(n=i.get(c,"value"))!==void 0?n:(n=c.value,typeof n=="string"?n.replace(Pe,""):n==null?"":n)):void 0}}),o.extend({valHooks:{option:{get:function(e){var i=o.find.attr(e,"value");return i!=null?i:Y(o.text(e))}},select:{get:function(e){var i,n,s,c=e.options,f=e.selectedIndex,h=e.type==="select-one",E=h?null:[],x=h?f+1:c.length;for(f<0?s=x:s=h?f:0;s-1)&&(n=!0);return n||(e.selectedIndex=-1),f}}}}),o.each(["radio","checkbox"],function(){o.valHooks[this]={set:function(e,i){if(Array.isArray(i))return e.checked=o.inArray(o(e).val(),i)>-1}},H.checkOn||(o.valHooks[this].get=function(e){return e.getAttribute("value")===null?"on":e.value})}),H.focusin="onfocusin"in l;var ke=/^(?:focusinfocus|focusoutblur)$/,We=function(e){e.stopPropagation()};o.extend(o.event,{trigger:function(e,i,n,s){var c,f,h,E,x,D,R,B,L=[n||K],I=W.call(e,"type")?e.type:e,ie=W.call(e,"namespace")?e.namespace.split("."):[];if(f=B=h=n=n||K,!(n.nodeType===3||n.nodeType===8)&&!ke.test(I+o.event.triggered)&&(I.indexOf(".")>-1&&(ie=I.split("."),I=ie.shift(),ie.sort()),x=I.indexOf(":")<0&&"on"+I,e=e[o.expando]?e:new o.Event(I,typeof e=="object"&&e),e.isTrigger=s?2:3,e.namespace=ie.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+ie.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),i=i==null?[e]:o.makeArray(i,[e]),R=o.event.special[I]||{},!(!s&&R.trigger&&R.trigger.apply(n,i)===!1))){if(!s&&!R.noBubble&&!de(n)){for(E=R.delegateType||I,ke.test(E+I)||(f=f.parentNode);f;f=f.parentNode)L.push(f),h=f;h===(n.ownerDocument||K)&&L.push(h.defaultView||h.parentWindow||l)}for(c=0;(f=L[c++])&&!e.isPropagationStopped();)B=f,e.type=c>1?E:R.bindType||I,D=(le.get(f,"events")||Object.create(null))[e.type]&&le.get(f,"handle"),D&&D.apply(f,i),D=x&&f[x],D&&D.apply&&sr(f)&&(e.result=D.apply(f,i),e.result===!1&&e.preventDefault());return e.type=I,!s&&!e.isDefaultPrevented()&&(!R._default||R._default.apply(L.pop(),i)===!1)&&sr(n)&&x&&V(n[I])&&!de(n)&&(h=n[x],h&&(n[x]=null),o.event.triggered=I,e.isPropagationStopped()&&B.addEventListener(I,We),n[I](),e.isPropagationStopped()&&B.removeEventListener(I,We),o.event.triggered=void 0,h&&(n[x]=h)),e.result}},simulate:function(e,i,n){var s=o.extend(new o.Event,n,{type:e,isSimulated:!0});o.event.trigger(s,null,i)}}),o.fn.extend({trigger:function(e,i){return this.each(function(){o.event.trigger(e,i,this)})},triggerHandler:function(e,i){var n=this[0];if(n)return o.event.trigger(e,i,n,!0)}}),H.focusin||o.each({focus:"focusin",blur:"focusout"},function(e,i){var n=function(s){o.event.simulate(i,s.target,o.event.fix(s))};o.event.special[i]={setup:function(){var s=this.ownerDocument||this.document||this,c=le.access(s,i);c||s.addEventListener(e,n,!0),le.access(s,i,(c||0)+1)},teardown:function(){var s=this.ownerDocument||this.document||this,c=le.access(s,i)-1;c?le.access(s,i,c):(s.removeEventListener(e,n,!0),le.remove(s,i))}}});var Le=l.location,at={guid:Date.now()},Bt=/\?/;o.parseXML=function(e){var i,n;if(!e||typeof e!="string")return null;try{i=new l.DOMParser().parseFromString(e,"text/xml")}catch(s){}return n=i&&i.getElementsByTagName("parsererror")[0],(!i||n)&&o.error("Invalid XML: "+(n?o.map(n.childNodes,function(s){return s.textContent}).join(` `):e)),i};var ni=/\[\]$/,Qi=/\r?\n/g,ai=/^(?:submit|button|image|reset|file)$/i,gs=/^(?:input|select|textarea|keygen)/i;function si(e,i,n,s){var c;if(Array.isArray(i))o.each(i,function(f,h){n||ni.test(e)?s(e,h):si(e+"["+(typeof h=="object"&&h!=null?f:"")+"]",h,n,s)});else if(!n&&be(i)==="object")for(c in i)si(e+"["+c+"]",i[c],n,s);else s(e,i)}o.param=function(e,i){var n,s=[],c=function(f,h){var E=V(h)?h():h;s[s.length]=encodeURIComponent(f)+"="+encodeURIComponent(E==null?"":E)};if(e==null)return"";if(Array.isArray(e)||e.jquery&&!o.isPlainObject(e))o.each(e,function(){c(this.name,this.value)});else for(n in e)si(n,e[n],i,c);return s.join("&")},o.fn.extend({serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=o.prop(this,"elements");return e?o.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!o(this).is(":disabled")&&gs.test(this.nodeName)&&!ai.test(e)&&(this.checked||!Qt.test(e))}).map(function(e,i){var n=o(this).val();return n==null?null:Array.isArray(n)?o.map(n,function(s){return{name:i.name,value:s.replace(Qi,`\r `)}}):{name:i.name,value:n.replace(Qi,`\r `)}}).get()}});var Zn=/%20/g,Ji=/#.*$/,rl=/([?&])_=[^&]*/,il=/^(.*?):[ \t]*([^\r\n]*)$/mg,nl=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,al=/^(?:GET|HEAD)$/,sl=/^\/\//,ms={},ea={},vs="*/".concat("*"),ta=K.createElement("a");ta.href=Le.href;function bs(e){return function(i,n){typeof i!="string"&&(n=i,i="*");var s,c=0,f=i.toLowerCase().match(yt)||[];if(V(n))for(;s=f[c++];)s[0]==="+"?(s=s.slice(1)||"*",(e[s]=e[s]||[]).unshift(n)):(e[s]=e[s]||[]).push(n)}}function ys(e,i,n,s){var c={},f=e===ea;function h(E){var x;return c[E]=!0,o.each(e[E]||[],function(D,R){var B=R(i,n,s);if(typeof B=="string"&&!f&&!c[B])return i.dataTypes.unshift(B),h(B),!1;if(f)return!(x=B)}),x}return h(i.dataTypes[0])||!c["*"]&&h("*")}function ra(e,i){var n,s,c=o.ajaxSettings.flatOptions||{};for(n in i)i[n]!==void 0&&((c[n]?e:s||(s={}))[n]=i[n]);return s&&o.extend(!0,e,s),e}function ol(e,i,n){for(var s,c,f,h,E=e.contents,x=e.dataTypes;x[0]==="*";)x.shift(),s===void 0&&(s=e.mimeType||i.getResponseHeader("Content-Type"));if(s){for(c in E)if(E[c]&&E[c].test(s)){x.unshift(c);break}}if(x[0]in n)f=x[0];else{for(c in n){if(!x[0]||e.converters[c+" "+x[0]]){f=c;break}h||(h=c)}f=f||h}if(f)return f!==x[0]&&x.unshift(f),n[f]}function ll(e,i,n,s){var c,f,h,E,x,D={},R=e.dataTypes.slice();if(R[1])for(h in e.converters)D[h.toLowerCase()]=e.converters[h];for(f=R.shift();f;)if(e.responseFields[f]&&(n[e.responseFields[f]]=i),!x&&s&&e.dataFilter&&(i=e.dataFilter(i,e.dataType)),x=f,f=R.shift(),f){if(f==="*")f=x;else if(x!=="*"&&x!==f){if(h=D[x+" "+f]||D["* "+f],!h){for(c in D)if(E=c.split(" "),E[1]===f&&(h=D[x+" "+E[0]]||D["* "+E[0]],h)){h===!0?h=D[c]:D[c]!==!0&&(f=E[0],R.unshift(E[1]));break}}if(h!==!0)if(h&&e.throws)i=h(i);else try{i=h(i)}catch(B){return{state:"parsererror",error:h?B:"No conversion from "+x+" to "+f}}}}return{state:"success",data:i}}o.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Le.href,type:"GET",isLocal:nl.test(Le.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":vs,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":o.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,i){return i?ra(ra(e,o.ajaxSettings),i):ra(o.ajaxSettings,e)},ajaxPrefilter:bs(ms),ajaxTransport:bs(ea),ajax:function(e,i){typeof e=="object"&&(i=e,e=void 0),i=i||{};var n,s,c,f,h,E,x,D,R,B,L=o.ajaxSetup({},i),I=L.context||L,ie=L.context&&(I.nodeType||I.jquery)?o(I):o.event,ve=o.Deferred(),re=o.Callbacks("once memory"),Ge=L.statusCode||{},Ve={},ht={},Fe="canceled",ge={readyState:0,getResponseHeader:function(Te){var je;if(x){if(!f)for(f={};je=il.exec(c);)f[je[1].toLowerCase()+" "]=(f[je[1].toLowerCase()+" "]||[]).concat(je[2]);je=f[Te.toLowerCase()+" "]}return je==null?null:je.join(", ")},getAllResponseHeaders:function(){return x?c:null},setRequestHeader:function(Te,je){return x==null&&(Te=ht[Te.toLowerCase()]=ht[Te.toLowerCase()]||Te,Ve[Te]=je),this},overrideMimeType:function(Te){return x==null&&(L.mimeType=Te),this},statusCode:function(Te){var je;if(Te)if(x)ge.always(Te[ge.status]);else for(je in Te)Ge[je]=[Ge[je],Te[je]];return this},abort:function(Te){var je=Te||Fe;return n&&n.abort(je),ut(0,je),this}};if(ve.promise(ge),L.url=((e||L.url||Le.href)+"").replace(sl,Le.protocol+"//"),L.type=i.method||i.type||L.method||L.type,L.dataTypes=(L.dataType||"*").toLowerCase().match(yt)||[""],L.crossDomain==null){E=K.createElement("a");try{E.href=L.url,E.href=E.href,L.crossDomain=ta.protocol+"//"+ta.host!=E.protocol+"//"+E.host}catch(Te){L.crossDomain=!0}}if(L.data&&L.processData&&typeof L.data!="string"&&(L.data=o.param(L.data,L.traditional)),ys(ms,L,i,ge),x)return ge;D=o.event&&L.global,D&&o.active++==0&&o.event.trigger("ajaxStart"),L.type=L.type.toUpperCase(),L.hasContent=!al.test(L.type),s=L.url.replace(Ji,""),L.hasContent?L.data&&L.processData&&(L.contentType||"").indexOf("application/x-www-form-urlencoded")===0&&(L.data=L.data.replace(Zn,"+")):(B=L.url.slice(s.length),L.data&&(L.processData||typeof L.data=="string")&&(s+=(Bt.test(s)?"&":"?")+L.data,delete L.data),L.cache===!1&&(s=s.replace(rl,"$1"),B=(Bt.test(s)?"&":"?")+"_="+at.guid+++B),L.url=s+B),L.ifModified&&(o.lastModified[s]&&ge.setRequestHeader("If-Modified-Since",o.lastModified[s]),o.etag[s]&&ge.setRequestHeader("If-None-Match",o.etag[s])),(L.data&&L.hasContent&&L.contentType!==!1||i.contentType)&&ge.setRequestHeader("Content-Type",L.contentType),ge.setRequestHeader("Accept",L.dataTypes[0]&&L.accepts[L.dataTypes[0]]?L.accepts[L.dataTypes[0]]+(L.dataTypes[0]!=="*"?", "+vs+"; q=0.01":""):L.accepts["*"]);for(R in L.headers)ge.setRequestHeader(R,L.headers[R]);if(L.beforeSend&&(L.beforeSend.call(I,ge,L)===!1||x))return ge.abort();if(Fe="abort",re.add(L.complete),ge.done(L.success),ge.fail(L.error),n=ys(ea,L,i,ge),!n)ut(-1,"No Transport");else{if(ge.readyState=1,D&&ie.trigger("ajaxSend",[ge,L]),x)return ge;L.async&&L.timeout>0&&(h=l.setTimeout(function(){ge.abort("timeout")},L.timeout));try{x=!1,n.send(Ve,ut)}catch(Te){if(x)throw Te;ut(-1,Te)}}function ut(Te,je,li,Ki){var pt,dr,hr,ct,Zt,Et=je;x||(x=!0,h&&l.clearTimeout(h),n=void 0,c=Ki||"",ge.readyState=Te>0?4:0,pt=Te>=200&&Te<300||Te===304,li&&(ct=ol(L,ge,li)),!pt&&o.inArray("script",L.dataTypes)>-1&&o.inArray("json",L.dataTypes)<0&&(L.converters["text script"]=function(){}),ct=ll(L,ct,ge,pt),pt?(L.ifModified&&(Zt=ge.getResponseHeader("Last-Modified"),Zt&&(o.lastModified[s]=Zt),Zt=ge.getResponseHeader("etag"),Zt&&(o.etag[s]=Zt)),Te===204||L.type==="HEAD"?Et="nocontent":Te===304?Et="notmodified":(Et=ct.state,dr=ct.data,hr=ct.error,pt=!hr)):(hr=Et,(Te||!Et)&&(Et="error",Te<0&&(Te=0))),ge.status=Te,ge.statusText=(je||Et)+"",pt?ve.resolveWith(I,[dr,Et,ge]):ve.rejectWith(I,[ge,Et,hr]),ge.statusCode(Ge),Ge=void 0,D&&ie.trigger(pt?"ajaxSuccess":"ajaxError",[ge,L,pt?dr:hr]),re.fireWith(I,[ge,Et]),D&&(ie.trigger("ajaxComplete",[ge,L]),--o.active||o.event.trigger("ajaxStop")))}return ge},getJSON:function(e,i,n){return o.get(e,i,n,"json")},getScript:function(e,i){return o.get(e,void 0,i,"script")}}),o.each(["get","post"],function(e,i){o[i]=function(n,s,c,f){return V(s)&&(f=f||c,c=s,s=void 0),o.ajax(o.extend({url:n,type:i,dataType:f,data:s,success:c},o.isPlainObject(n)&&n))}}),o.ajaxPrefilter(function(e){var i;for(i in e.headers)i.toLowerCase()==="content-type"&&(e.contentType=e.headers[i]||"")}),o._evalUrl=function(e,i,n){return o.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(s){o.globalEval(s,i,n)}})},o.fn.extend({wrapAll:function(e){var i;return this[0]&&(V(e)&&(e=e.call(this[0])),i=o(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&i.insertBefore(this[0]),i.map(function(){for(var n=this;n.firstElementChild;)n=n.firstElementChild;return n}).append(this)),this},wrapInner:function(e){return V(e)?this.each(function(i){o(this).wrapInner(e.call(this,i))}):this.each(function(){var i=o(this),n=i.contents();n.length?n.wrapAll(e):i.append(e)})},wrap:function(e){var i=V(e);return this.each(function(n){o(this).wrapAll(i?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not("body").each(function(){o(this).replaceWith(this.childNodes)}),this}}),o.expr.pseudos.hidden=function(e){return!o.expr.pseudos.visible(e)},o.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},o.ajaxSettings.xhr=function(){try{return new l.XMLHttpRequest}catch(e){}};var ul={0:200,1223:204},oi=o.ajaxSettings.xhr();H.cors=!!oi&&"withCredentials"in oi,H.ajax=oi=!!oi,o.ajaxTransport(function(e){var i,n;if(H.cors||oi&&!e.crossDomain)return{send:function(s,c){var f,h=e.xhr();if(h.open(e.type,e.url,e.async,e.username,e.password),e.xhrFields)for(f in e.xhrFields)h[f]=e.xhrFields[f];e.mimeType&&h.overrideMimeType&&h.overrideMimeType(e.mimeType),!e.crossDomain&&!s["X-Requested-With"]&&(s["X-Requested-With"]="XMLHttpRequest");for(f in s)h.setRequestHeader(f,s[f]);i=function(E){return function(){i&&(i=n=h.onload=h.onerror=h.onabort=h.ontimeout=h.onreadystatechange=null,E==="abort"?h.abort():E==="error"?typeof h.status!="number"?c(0,"error"):c(h.status,h.statusText):c(ul[h.status]||h.status,h.statusText,(h.responseType||"text")!=="text"||typeof h.responseText!="string"?{binary:h.response}:{text:h.responseText},h.getAllResponseHeaders()))}},h.onload=i(),n=h.onerror=h.ontimeout=i("error"),h.onabort!==void 0?h.onabort=n:h.onreadystatechange=function(){h.readyState===4&&l.setTimeout(function(){i&&n()})},i=i("abort");try{h.send(e.hasContent&&e.data||null)}catch(E){if(i)throw E}},abort:function(){i&&i()}}}),o.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),o.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return o.globalEval(e),e}}}),o.ajaxPrefilter("script",function(e){e.cache===void 0&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),o.ajaxTransport("script",function(e){if(e.crossDomain||e.scriptAttrs){var i,n;return{send:function(s,c){i=o("