diff --git a/404.html b/404.html index 6418468..1a903fc 100644 --- a/404.html +++ b/404.html @@ -36,10 +36,10 @@ })(); gbadev - + -

404

How did we get here?
Take me home
- +

404

There's nothing here.
Take me home
+ diff --git a/assets/404.html-0d9b629f.js b/assets/404.html-0d9b629f.js new file mode 100644 index 0000000..f6e0c44 --- /dev/null +++ b/assets/404.html-0d9b629f.js @@ -0,0 +1 @@ +import{_ as e,o as c,c as t}from"./app-e519d5e8.js";const _={};function o(r,n){return c(),t("div")}const a=e(_,[["render",o],["__file","404.html.vue"]]);export{a as default}; diff --git a/assets/app-e519d5e8.js b/assets/app-e519d5e8.js new file mode 100644 index 0000000..067d2a8 --- /dev/null +++ b/assets/app-e519d5e8.js @@ -0,0 +1,10 @@ +const jl="modulepreload",Ul=function(e){return"/"+e},Jo={},Ye=function(t,n,r){if(!n||n.length===0)return t();const o=document.getElementsByTagName("link");return Promise.all(n.map(s=>{if(s=Ul(s),s in Jo)return;Jo[s]=!0;const i=s.endsWith(".css"),l=i?'[rel="stylesheet"]':"";if(!!r)for(let u=o.length-1;u>=0;u--){const f=o[u];if(f.href===s&&(!i||f.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${s}"]${l}`))return;const c=document.createElement("link");if(c.rel=i?"stylesheet":jl,i||(c.as="script",c.crossOrigin=""),c.href=s,document.head.appendChild(c),i)return new Promise((u,f)=>{c.addEventListener("load",u),c.addEventListener("error",()=>f(new Error(`Unable to preload CSS for ${s}`)))})})).then(()=>t()).catch(s=>{const i=new Event("vite:preloadError",{cancelable:!0});if(i.payload=s,window.dispatchEvent(i),!i.defaultPrevented)throw s})};function fo(e,t){const n=Object.create(null),r=e.split(",");for(let o=0;o!!n[o.toLowerCase()]:o=>!!n[o]}const ye={},tn=[],rt=()=>{},ql=()=>!1,Wl=/^on[^a-z]/,Hn=e=>Wl.test(e),ho=e=>e.startsWith("onUpdate:"),ke=Object.assign,po=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Kl=Object.prototype.hasOwnProperty,ue=(e,t)=>Kl.call(e,t),Y=Array.isArray,nn=e=>br(e)==="[object Map]",li=e=>br(e)==="[object Set]",oe=e=>typeof e=="function",he=e=>typeof e=="string",mo=e=>typeof e=="symbol",we=e=>e!==null&&typeof e=="object",ai=e=>we(e)&&oe(e.then)&&oe(e.catch),ci=Object.prototype.toString,br=e=>ci.call(e),Vl=e=>br(e).slice(8,-1),ui=e=>br(e)==="[object Object]",go=e=>he(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,xn=fo(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),yr=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},Gl=/-(\w)/g,ut=yr(e=>e.replace(Gl,(t,n)=>n?n.toUpperCase():"")),Jl=/\B([A-Z])/g,Vt=yr(e=>e.replace(Jl,"-$1").toLowerCase()),wr=yr(e=>e.charAt(0).toUpperCase()+e.slice(1)),Ir=yr(e=>e?`on${wr(e)}`:""),Pn=(e,t)=>!Object.is(e,t),Mr=(e,t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:n})},Yl=e=>{const t=parseFloat(e);return isNaN(t)?e:t},Ql=e=>{const t=he(e)?Number(e):NaN;return isNaN(t)?e:t};let Yo;const Jr=()=>Yo||(Yo=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Dn(e){if(Y(e)){const t={};for(let n=0;n{if(n){const r=n.split(Xl);r.length>1&&(t[r[0].trim()]=r[1].trim())}}),t}function Ue(e){let t="";if(he(e))t=e;else if(Y(e))for(let n=0;nhe(e)?e:e==null?"":Y(e)||we(e)&&(e.toString===ci||!oe(e.toString))?JSON.stringify(e,di,2):String(e),di=(e,t)=>t&&t.__v_isRef?di(e,t.value):nn(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[r,o])=>(n[`${r} =>`]=o,n),{})}:li(t)?{[`Set(${t.size})`]:[...t.values()]}:we(t)&&!Y(t)&&!ui(t)?String(t):t;let Ke;class oa{constructor(t=!1){this.detached=t,this._active=!0,this.effects=[],this.cleanups=[],this.parent=Ke,!t&&Ke&&(this.index=(Ke.scopes||(Ke.scopes=[])).push(this)-1)}get active(){return this._active}run(t){if(this._active){const n=Ke;try{return Ke=this,t()}finally{Ke=n}}}on(){Ke=this}off(){Ke=this.parent}stop(t){if(this._active){let n,r;for(n=0,r=this.effects.length;n{const t=new Set(e);return t.w=0,t.n=0,t},pi=e=>(e.w&Rt)>0,mi=e=>(e.n&Rt)>0,la=({deps:e})=>{if(e.length)for(let t=0;t{const{deps:t}=e;if(t.length){let n=0;for(let r=0;r{(u==="length"||u>=a)&&l.push(c)})}else switch(n!==void 0&&l.push(i.get(n)),t){case"add":Y(e)?go(n)&&l.push(i.get("length")):(l.push(i.get(Ut)),nn(e)&&l.push(i.get(Qr)));break;case"delete":Y(e)||(l.push(i.get(Ut)),nn(e)&&l.push(i.get(Qr)));break;case"set":nn(e)&&l.push(i.get(Ut));break}if(l.length===1)l[0]&&Zr(l[0]);else{const a=[];for(const c of l)c&&a.push(...c);Zr(vo(a))}}function Zr(e,t){const n=Y(e)?e:[...e];for(const r of n)r.computed&&Zo(r);for(const r of n)r.computed||Zo(r)}function Zo(e,t){(e!==tt||e.allowRecurse)&&(e.scheduler?e.scheduler():e.run())}function ca(e,t){var n;return(n=lr.get(e))==null?void 0:n.get(t)}const ua=fo("__proto__,__v_isRef,__isVue"),_i=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(mo)),fa=bo(),da=bo(!1,!0),ha=bo(!0),Xo=pa();function pa(){const e={};return["includes","indexOf","lastIndexOf"].forEach(t=>{e[t]=function(...n){const r=fe(this);for(let s=0,i=this.length;s{e[t]=function(...n){pn();const r=fe(this)[t].apply(this,n);return mn(),r}}),e}function ma(e){const t=fe(this);return qe(t,"has",e),t.hasOwnProperty(e)}function bo(e=!1,t=!1){return function(r,o,s){if(o==="__v_isReactive")return!e;if(o==="__v_isReadonly")return e;if(o==="__v_isShallow")return t;if(o==="__v_raw"&&s===(e?t?Ra:Ci:t?Ei:wi).get(r))return r;const i=Y(r);if(!e){if(i&&ue(Xo,o))return Reflect.get(Xo,o,s);if(o==="hasOwnProperty")return ma}const l=Reflect.get(r,o,s);return(mo(o)?_i.has(o):ua(o))||(e||qe(r,"get",o),t)?l:$e(l)?i&&go(o)?l:l.value:we(l)?e?Fn(l):Bn(l):l}}const ga=bi(),va=bi(!0);function bi(e=!1){return function(n,r,o,s){let i=n[r];if(ln(i)&&$e(i)&&!$e(o))return!1;if(!e&&(!ar(o)&&!ln(o)&&(i=fe(i),o=fe(o)),!Y(n)&&$e(i)&&!$e(o)))return i.value=o,!0;const l=Y(n)&&go(r)?Number(r)e,Er=e=>Reflect.getPrototypeOf(e);function Wn(e,t,n=!1,r=!1){e=e.__v_raw;const o=fe(e),s=fe(t);n||(t!==s&&qe(o,"get",t),qe(o,"get",s));const{has:i}=Er(o),l=r?yo:n?Co:Rn;if(i.call(o,t))return l(e.get(t));if(i.call(o,s))return l(e.get(s));e!==o&&e.get(t)}function Kn(e,t=!1){const n=this.__v_raw,r=fe(n),o=fe(e);return t||(e!==o&&qe(r,"has",e),qe(r,"has",o)),e===o?n.has(e):n.has(e)||n.has(o)}function Vn(e,t=!1){return e=e.__v_raw,!t&&qe(fe(e),"iterate",Ut),Reflect.get(e,"size",e)}function es(e){e=fe(e);const t=fe(this);return Er(t).has.call(t,e)||(t.add(e),vt(t,"add",e,e)),this}function ts(e,t){t=fe(t);const n=fe(this),{has:r,get:o}=Er(n);let s=r.call(n,e);s||(e=fe(e),s=r.call(n,e));const i=o.call(n,e);return n.set(e,t),s?Pn(t,i)&&vt(n,"set",e,t):vt(n,"add",e,t),this}function ns(e){const t=fe(this),{has:n,get:r}=Er(t);let o=n.call(t,e);o||(e=fe(e),o=n.call(t,e)),r&&r.call(t,e);const s=t.delete(e);return o&&vt(t,"delete",e,void 0),s}function rs(){const e=fe(this),t=e.size!==0,n=e.clear();return t&&vt(e,"clear",void 0,void 0),n}function Gn(e,t){return function(r,o){const s=this,i=s.__v_raw,l=fe(i),a=t?yo:e?Co:Rn;return!e&&qe(l,"iterate",Ut),i.forEach((c,u)=>r.call(o,a(c),a(u),s))}}function Jn(e,t,n){return function(...r){const o=this.__v_raw,s=fe(o),i=nn(s),l=e==="entries"||e===Symbol.iterator&&i,a=e==="keys"&&i,c=o[e](...r),u=n?yo:t?Co:Rn;return!t&&qe(s,"iterate",a?Qr:Ut),{next(){const{value:f,done:h}=c.next();return h?{value:f,done:h}:{value:l?[u(f[0]),u(f[1])]:u(f),done:h}},[Symbol.iterator](){return this}}}}function Ct(e){return function(...t){return e==="delete"?!1:this}}function Ca(){const e={get(s){return Wn(this,s)},get size(){return Vn(this)},has:Kn,add:es,set:ts,delete:ns,clear:rs,forEach:Gn(!1,!1)},t={get(s){return Wn(this,s,!1,!0)},get size(){return Vn(this)},has:Kn,add:es,set:ts,delete:ns,clear:rs,forEach:Gn(!1,!0)},n={get(s){return Wn(this,s,!0)},get size(){return Vn(this,!0)},has(s){return Kn.call(this,s,!0)},add:Ct("add"),set:Ct("set"),delete:Ct("delete"),clear:Ct("clear"),forEach:Gn(!0,!1)},r={get(s){return Wn(this,s,!0,!0)},get size(){return Vn(this,!0)},has(s){return Kn.call(this,s,!0)},add:Ct("add"),set:Ct("set"),delete:Ct("delete"),clear:Ct("clear"),forEach:Gn(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(s=>{e[s]=Jn(s,!1,!1),n[s]=Jn(s,!0,!1),t[s]=Jn(s,!1,!0),r[s]=Jn(s,!0,!0)}),[e,n,t,r]}const[xa,La,Sa,Ta]=Ca();function wo(e,t){const n=t?e?Ta:Sa:e?La:xa;return(r,o,s)=>o==="__v_isReactive"?!e:o==="__v_isReadonly"?e:o==="__v_raw"?r:Reflect.get(ue(n,o)&&o in r?n:r,o,s)}const ka={get:wo(!1,!1)},Aa={get:wo(!1,!0)},Pa={get:wo(!0,!1)},wi=new WeakMap,Ei=new WeakMap,Ci=new WeakMap,Ra=new WeakMap;function Oa(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function $a(e){return e.__v_skip||!Object.isExtensible(e)?0:Oa(Vl(e))}function Bn(e){return ln(e)?e:Eo(e,!1,yi,ka,wi)}function xi(e){return Eo(e,!1,Ea,Aa,Ei)}function Fn(e){return Eo(e,!0,wa,Pa,Ci)}function Eo(e,t,n,r,o){if(!we(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const s=o.get(e);if(s)return s;const i=$a(e);if(i===0)return e;const l=new Proxy(e,i===2?r:n);return o.set(e,l),l}function rn(e){return ln(e)?rn(e.__v_raw):!!(e&&e.__v_isReactive)}function ln(e){return!!(e&&e.__v_isReadonly)}function ar(e){return!!(e&&e.__v_isShallow)}function Li(e){return rn(e)||ln(e)}function fe(e){const t=e&&e.__v_raw;return t?fe(t):e}function Si(e){return ir(e,"__v_skip",!0),e}const Rn=e=>we(e)?Bn(e):e,Co=e=>we(e)?Fn(e):e;function xo(e){At&&tt&&(e=fe(e),vi(e.dep||(e.dep=vo())))}function Lo(e,t){e=fe(e);const n=e.dep;n&&Zr(n)}function $e(e){return!!(e&&e.__v_isRef===!0)}function Ee(e){return Ti(e,!1)}function So(e){return Ti(e,!0)}function Ti(e,t){return $e(e)?e:new Ia(e,t)}class Ia{constructor(t,n){this.__v_isShallow=n,this.dep=void 0,this.__v_isRef=!0,this._rawValue=n?t:fe(t),this._value=n?t:Rn(t)}get value(){return xo(this),this._value}set value(t){const n=this.__v_isShallow||ar(t)||ln(t);t=n?t:fe(t),Pn(t,this._rawValue)&&(this._rawValue=t,this._value=n?t:Rn(t),Lo(this))}}function Z(e){return $e(e)?e.value:e}const Ma={get:(e,t,n)=>Z(Reflect.get(e,t,n)),set:(e,t,n,r)=>{const o=e[t];return $e(o)&&!$e(n)?(o.value=n,!0):Reflect.set(e,t,n,r)}};function ki(e){return rn(e)?e:new Proxy(e,Ma)}class Na{constructor(t){this.dep=void 0,this.__v_isRef=!0;const{get:n,set:r}=t(()=>xo(this),()=>Lo(this));this._get=n,this._set=r}get value(){return this._get()}set value(t){this._set(t)}}function Ha(e){return new Na(e)}function To(e){const t=Y(e)?new Array(e.length):{};for(const n in e)t[n]=Ba(e,n);return t}class Da{constructor(t,n,r){this._object=t,this._key=n,this._defaultValue=r,this.__v_isRef=!0}get value(){const t=this._object[this._key];return t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}get dep(){return ca(fe(this._object),this._key)}}function Ba(e,t,n){const r=e[t];return $e(r)?r:new Da(e,t,n)}class Fa{constructor(t,n,r,o){this._setter=n,this.dep=void 0,this.__v_isRef=!0,this.__v_isReadonly=!1,this._dirty=!0,this.effect=new _o(t,()=>{this._dirty||(this._dirty=!0,Lo(this))}),this.effect.computed=this,this.effect.active=this._cacheable=!o,this.__v_isReadonly=r}get value(){const t=fe(this);return xo(t),(t._dirty||!t._cacheable)&&(t._dirty=!1,t._value=t.effect.run()),t._value}set value(t){this._setter(t)}}function za(e,t,n=!1){let r,o;const s=oe(e);return s?(r=e,o=rt):(r=e.get,o=e.set),new Fa(r,o,s||!o,n)}function Pt(e,t,n,r){let o;try{o=r?e(...r):e()}catch(s){zn(s,t,n)}return o}function Qe(e,t,n,r){if(oe(e)){const s=Pt(e,t,n,r);return s&&ai(s)&&s.catch(i=>{zn(i,t,n)}),s}const o=[];for(let s=0;s>>1;$n(De[r])ct&&De.splice(t,1)}function Wa(e){Y(e)?on.push(...e):(!pt||!pt.includes(e,e.allowRecurse?Bt+1:Bt))&&on.push(e),Pi()}function os(e,t=On?ct+1:0){for(;t$n(n)-$n(r)),Bt=0;Bte.id==null?1/0:e.id,Ka=(e,t)=>{const n=$n(e)-$n(t);if(n===0){if(e.pre&&!t.pre)return-1;if(t.pre&&!e.pre)return 1}return n};function Ri(e){Xr=!1,On=!0,De.sort(Ka);const t=rt;try{for(ct=0;cthe(g)?g.trim():g)),f&&(o=n.map(Yl))}let l,a=r[l=Ir(t)]||r[l=Ir(ut(t))];!a&&s&&(a=r[l=Ir(Vt(t))]),a&&Qe(a,e,6,o);const c=r[l+"Once"];if(c){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,Qe(c,e,6,o)}}function Oi(e,t,n=!1){const r=t.emitsCache,o=r.get(e);if(o!==void 0)return o;const s=e.emits;let i={},l=!1;if(!oe(e)){const a=c=>{const u=Oi(c,t,!0);u&&(l=!0,ke(i,u))};!n&&t.mixins.length&&t.mixins.forEach(a),e.extends&&a(e.extends),e.mixins&&e.mixins.forEach(a)}return!s&&!l?(we(e)&&r.set(e,null),null):(Y(s)?s.forEach(a=>i[a]=null):ke(i,s),we(e)&&r.set(e,i),i)}function Lr(e,t){return!e||!Hn(t)?!1:(t=t.slice(2).replace(/Once$/,""),ue(e,t[0].toLowerCase()+t.slice(1))||ue(e,Vt(t))||ue(e,t))}let Me=null,$i=null;function ur(e){const t=Me;return Me=e,$i=e&&e.type.__scopeId||null,t}function Oe(e,t=Me,n){if(!t||e._n)return e;const r=(...o)=>{r._d&&gs(-1);const s=ur(t);let i;try{i=e(...o)}finally{ur(s),r._d&&gs(1)}return i};return r._n=!0,r._c=!0,r._d=!0,r}function Nr(e){const{type:t,vnode:n,proxy:r,withProxy:o,props:s,propsOptions:[i],slots:l,attrs:a,emit:c,render:u,renderCache:f,data:h,setupState:g,ctx:y,inheritAttrs:E}=e;let S,v;const b=ur(e);try{if(n.shapeFlag&4){const A=o||r;S=et(u.call(A,A,f,s,g,h,y)),v=a}else{const A=t;S=et(A.length>1?A(s,{attrs:a,slots:l,emit:c}):A(s,null)),v=t.props?a:Ga(a)}}catch(A){Tn.length=0,zn(A,e,1),S=ee(Ve)}let P=S;if(v&&E!==!1){const A=Object.keys(v),{shapeFlag:W}=P;A.length&&W&7&&(i&&A.some(ho)&&(v=Ja(v,i)),P=$t(P,v))}return n.dirs&&(P=$t(P),P.dirs=P.dirs?P.dirs.concat(n.dirs):n.dirs),n.transition&&(P.transition=n.transition),S=P,ur(b),S}const Ga=e=>{let t;for(const n in e)(n==="class"||n==="style"||Hn(n))&&((t||(t={}))[n]=e[n]);return t},Ja=(e,t)=>{const n={};for(const r in e)(!ho(r)||!(r.slice(9)in t))&&(n[r]=e[r]);return n};function Ya(e,t,n){const{props:r,children:o,component:s}=e,{props:i,children:l,patchFlag:a}=t,c=s.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&a>=0){if(a&1024)return!0;if(a&16)return r?ss(r,i,c):!!i;if(a&8){const u=t.dynamicProps;for(let f=0;fe.__isSuspense;function Ii(e,t){t&&t.pendingBranch?Y(e)?t.effects.push(...e):t.effects.push(e):Wa(e)}function Mi(e,t){return Ao(e,null,t)}const Yn={};function ot(e,t,n){return Ao(e,t,n)}function Ao(e,t,{immediate:n,deep:r,flush:o,onTrack:s,onTrigger:i}=ye){var l;const a=hi()===((l=Ae)==null?void 0:l.scope)?Ae:null;let c,u=!1,f=!1;if($e(e)?(c=()=>e.value,u=ar(e)):rn(e)?(c=()=>e,r=!0):Y(e)?(f=!0,u=e.some(A=>rn(A)||ar(A)),c=()=>e.map(A=>{if($e(A))return A.value;if(rn(A))return jt(A);if(oe(A))return Pt(A,a,2)})):oe(e)?t?c=()=>Pt(e,a,2):c=()=>{if(!(a&&a.isUnmounted))return h&&h(),Qe(e,a,3,[g])}:c=rt,t&&r){const A=c;c=()=>jt(A())}let h,g=A=>{h=b.onStop=()=>{Pt(A,a,4)}},y;if(un)if(g=rt,t?n&&Qe(t,a,3,[c(),f?[]:void 0,g]):c(),o==="sync"){const A=Vc();y=A.__watcherHandles||(A.__watcherHandles=[])}else return rt;let E=f?new Array(e.length).fill(Yn):Yn;const S=()=>{if(b.active)if(t){const A=b.run();(r||u||(f?A.some((W,X)=>Pn(W,E[X])):Pn(A,E)))&&(h&&h(),Qe(t,a,3,[A,E===Yn?void 0:f&&E[0]===Yn?[]:E,g]),E=A)}else b.run()};S.allowRecurse=!!t;let v;o==="sync"?v=S:o==="post"?v=()=>je(S,a&&a.suspense):(S.pre=!0,a&&(S.id=a.uid),v=()=>xr(S));const b=new _o(c,v);t?n?S():E=b.run():o==="post"?je(b.run.bind(b),a&&a.suspense):b.run();const P=()=>{b.stop(),a&&a.scope&&po(a.scope.effects,b)};return y&&y.push(P),P}function Xa(e,t,n){const r=this.proxy,o=he(e)?e.includes(".")?Ni(r,e):()=>r[e]:e.bind(r,r);let s;oe(t)?s=t:(s=t.handler,n=t);const i=Ae;cn(this);const l=Ao(o,s.bind(r),n);return i?cn(i):Wt(),l}function Ni(e,t){const n=t.split(".");return()=>{let r=e;for(let o=0;o{jt(n,t)});else if(ui(e))for(const n in e)jt(e[n],t);return e}function fr(e,t){const n=Me;if(n===null)return e;const r=Pr(n)||n.proxy,o=e.dirs||(e.dirs=[]);for(let s=0;s{e.isMounted=!0}),Tr(()=>{e.isUnmounting=!0}),e}const Ge=[Function,Array],Hi={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:Ge,onEnter:Ge,onAfterEnter:Ge,onEnterCancelled:Ge,onBeforeLeave:Ge,onLeave:Ge,onAfterLeave:Ge,onLeaveCancelled:Ge,onBeforeAppear:Ge,onAppear:Ge,onAfterAppear:Ge,onAppearCancelled:Ge},tc={name:"BaseTransition",props:Hi,setup(e,{slots:t}){const n=Xi(),r=ec();let o;return()=>{const s=t.default&&Bi(t.default(),!0);if(!s||!s.length)return;let i=s[0];if(s.length>1){for(const E of s)if(E.type!==Ve){i=E;break}}const l=fe(e),{mode:a}=l;if(r.isLeaving)return Hr(i);const c=is(i);if(!c)return Hr(i);const u=eo(c,l,r,n);to(c,u);const f=n.subTree,h=f&&is(f);let g=!1;const{getTransitionKey:y}=c.type;if(y){const E=y();o===void 0?o=E:E!==o&&(o=E,g=!0)}if(h&&h.type!==Ve&&(!Ft(c,h)||g)){const E=eo(h,l,r,n);if(to(h,E),a==="out-in")return r.isLeaving=!0,E.afterLeave=()=>{r.isLeaving=!1,n.update.active!==!1&&n.update()},Hr(i);a==="in-out"&&c.type!==Ve&&(E.delayLeave=(S,v,b)=>{const P=Di(r,h);P[String(h.key)]=h,S._leaveCb=()=>{v(),S._leaveCb=void 0,delete u.delayedLeave},u.delayedLeave=b})}return i}}},nc=tc;function Di(e,t){const{leavingVNodes:n}=e;let r=n.get(t.type);return r||(r=Object.create(null),n.set(t.type,r)),r}function eo(e,t,n,r){const{appear:o,mode:s,persisted:i=!1,onBeforeEnter:l,onEnter:a,onAfterEnter:c,onEnterCancelled:u,onBeforeLeave:f,onLeave:h,onAfterLeave:g,onLeaveCancelled:y,onBeforeAppear:E,onAppear:S,onAfterAppear:v,onAppearCancelled:b}=t,P=String(e.key),A=Di(n,e),W=(m,z)=>{m&&Qe(m,r,9,z)},X=(m,z)=>{const H=z[1];W(m,z),Y(m)?m.every(V=>V.length<=1)&&H():m.length<=1&&H()},N={mode:s,persisted:i,beforeEnter(m){let z=l;if(!n.isMounted)if(o)z=E||l;else return;m._leaveCb&&m._leaveCb(!0);const H=A[P];H&&Ft(e,H)&&H.el._leaveCb&&H.el._leaveCb(),W(z,[m])},enter(m){let z=a,H=c,V=u;if(!n.isMounted)if(o)z=S||a,H=v||c,V=b||u;else return;let L=!1;const O=m._enterCb=$=>{L||(L=!0,$?W(V,[m]):W(H,[m]),N.delayedLeave&&N.delayedLeave(),m._enterCb=void 0)};z?X(z,[m,O]):O()},leave(m,z){const H=String(e.key);if(m._enterCb&&m._enterCb(!0),n.isUnmounting)return z();W(f,[m]);let V=!1;const L=m._leaveCb=O=>{V||(V=!0,z(),O?W(y,[m]):W(g,[m]),m._leaveCb=void 0,A[H]===e&&delete A[H])};A[H]=e,h?X(h,[m,L]):L()},clone(m){return eo(m,t,n,r)}};return N}function Hr(e){if(jn(e))return e=$t(e),e.children=null,e}function is(e){return jn(e)?e.children?e.children[0]:void 0:e}function to(e,t){e.shapeFlag&6&&e.component?to(e.component.subTree,t):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function Bi(e,t=!1,n){let r=[],o=0;for(let s=0;s1)for(let s=0;ske({name:e.name},t,{setup:e}))():e}const sn=e=>!!e.type.__asyncLoader;function Yt(e){oe(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:r,delay:o=200,timeout:s,suspensible:i=!0,onError:l}=e;let a=null,c,u=0;const f=()=>(u++,a=null,h()),h=()=>{let g;return a||(g=a=t().catch(y=>{if(y=y instanceof Error?y:new Error(String(y)),l)return new Promise((E,S)=>{l(y,()=>E(f()),()=>S(y),u+1)});throw y}).then(y=>g!==a&&a?a:(y&&(y.__esModule||y[Symbol.toStringTag]==="Module")&&(y=y.default),c=y,y)))};return de({name:"AsyncComponentWrapper",__asyncLoader:h,get __asyncResolved(){return c},setup(){const g=Ae;if(c)return()=>Dr(c,g);const y=b=>{a=null,zn(b,g,13,!r)};if(i&&g.suspense||un)return h().then(b=>()=>Dr(b,g)).catch(b=>(y(b),()=>r?ee(r,{error:b}):null));const E=Ee(!1),S=Ee(),v=Ee(!!o);return o&&setTimeout(()=>{v.value=!1},o),s!=null&&setTimeout(()=>{if(!E.value&&!S.value){const b=new Error(`Async component timed out after ${s}ms.`);y(b),S.value=b}},s),h().then(()=>{E.value=!0,g.parent&&jn(g.parent.vnode)&&xr(g.parent.update)}).catch(b=>{y(b),S.value=b}),()=>{if(E.value&&c)return Dr(c,g);if(S.value&&r)return ee(r,{error:S.value});if(n&&!v.value)return ee(n)}}})}function Dr(e,t){const{ref:n,props:r,children:o,ce:s}=t.vnode,i=ee(e,r,o);return i.ref=n,i.ce=s,delete t.vnode.ce,i}const jn=e=>e.type.__isKeepAlive;function rc(e,t){Fi(e,"a",t)}function oc(e,t){Fi(e,"da",t)}function Fi(e,t,n=Ae){const r=e.__wdc||(e.__wdc=()=>{let o=n;for(;o;){if(o.isDeactivated)return;o=o.parent}return e()});if(Sr(t,r,n),n){let o=n.parent;for(;o&&o.parent;)jn(o.parent.vnode)&&sc(r,t,n,o),o=o.parent}}function sc(e,t,n,r){const o=Sr(t,e,r,!0);kr(()=>{po(r[t],o)},n)}function Sr(e,t,n=Ae,r=!1){if(n){const o=n[e]||(n[e]=[]),s=t.__weh||(t.__weh=(...i)=>{if(n.isUnmounted)return;pn(),cn(n);const l=Qe(t,n,e,i);return Wt(),mn(),l});return r?o.unshift(s):o.push(s),s}}const yt=e=>(t,n=Ae)=>(!un||e==="sp")&&Sr(e,(...r)=>t(...r),n),ic=yt("bm"),Ze=yt("m"),lc=yt("bu"),ac=yt("u"),Tr=yt("bum"),kr=yt("um"),cc=yt("sp"),uc=yt("rtg"),fc=yt("rtc");function dc(e,t=Ae){Sr("ec",e,t)}const zi="components";function _t(e,t){return pc(zi,e,!0,t)||e}const hc=Symbol.for("v-ndc");function pc(e,t,n=!0,r=!1){const o=Me||Ae;if(o){const s=o.type;if(e===zi){const l=qc(s,!1);if(l&&(l===t||l===ut(t)||l===wr(ut(t))))return s}const i=ls(o[e]||s[e],t)||ls(o.appContext[e],t);return!i&&r?s:i}}function ls(e,t){return e&&(e[t]||e[ut(t)]||e[wr(ut(t))])}function Ot(e,t,n,r){let o;const s=n&&n[r];if(Y(e)||he(e)){o=new Array(e.length);for(let i=0,l=e.length;it(i,l,void 0,s&&s[l]));else{const i=Object.keys(e);o=new Array(i.length);for(let l=0,a=i.length;lmr(t)?!(t.type===Ve||t.type===be&&!ji(t.children)):!0)?e:null}const no=e=>e?el(e)?Pr(e)||e.proxy:no(e.parent):null,Ln=ke(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>no(e.parent),$root:e=>no(e.root),$emit:e=>e.emit,$options:e=>Po(e),$forceUpdate:e=>e.f||(e.f=()=>xr(e.update)),$nextTick:e=>e.n||(e.n=Cr.bind(e.proxy)),$watch:e=>Xa.bind(e)}),Br=(e,t)=>e!==ye&&!e.__isScriptSetup&&ue(e,t),mc={get({_:e},t){const{ctx:n,setupState:r,data:o,props:s,accessCache:i,type:l,appContext:a}=e;let c;if(t[0]!=="$"){const g=i[t];if(g!==void 0)switch(g){case 1:return r[t];case 2:return o[t];case 4:return n[t];case 3:return s[t]}else{if(Br(r,t))return i[t]=1,r[t];if(o!==ye&&ue(o,t))return i[t]=2,o[t];if((c=e.propsOptions[0])&&ue(c,t))return i[t]=3,s[t];if(n!==ye&&ue(n,t))return i[t]=4,n[t];ro&&(i[t]=0)}}const u=Ln[t];let f,h;if(u)return t==="$attrs"&&qe(e,"get",t),u(e);if((f=l.__cssModules)&&(f=f[t]))return f;if(n!==ye&&ue(n,t))return i[t]=4,n[t];if(h=a.config.globalProperties,ue(h,t))return h[t]},set({_:e},t,n){const{data:r,setupState:o,ctx:s}=e;return Br(o,t)?(o[t]=n,!0):r!==ye&&ue(r,t)?(r[t]=n,!0):ue(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(s[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:r,appContext:o,propsOptions:s}},i){let l;return!!n[i]||e!==ye&&ue(e,i)||Br(t,i)||(l=s[0])&&ue(l,i)||ue(r,i)||ue(Ln,i)||ue(o.config.globalProperties,i)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:ue(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function as(e){return Y(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let ro=!0;function gc(e){const t=Po(e),n=e.proxy,r=e.ctx;ro=!1,t.beforeCreate&&cs(t.beforeCreate,e,"bc");const{data:o,computed:s,methods:i,watch:l,provide:a,inject:c,created:u,beforeMount:f,mounted:h,beforeUpdate:g,updated:y,activated:E,deactivated:S,beforeDestroy:v,beforeUnmount:b,destroyed:P,unmounted:A,render:W,renderTracked:X,renderTriggered:N,errorCaptured:m,serverPrefetch:z,expose:H,inheritAttrs:V,components:L,directives:O,filters:$}=t;if(c&&vc(c,r,null),i)for(const ne in i){const re=i[ne];oe(re)&&(r[ne]=re.bind(n))}if(o){const ne=o.call(n,n);we(ne)&&(e.data=Bn(ne))}if(ro=!0,s)for(const ne in s){const re=s[ne],Ne=oe(re)?re.bind(n,n):oe(re.get)?re.get.bind(n,n):rt,Ie=!oe(re)&&oe(re.set)?re.set.bind(n):rt,ze=j({get:Ne,set:Ie});Object.defineProperty(r,ne,{enumerable:!0,configurable:!0,get:()=>ze.value,set:He=>ze.value=He})}if(l)for(const ne in l)Ui(l[ne],r,n,ne);if(a){const ne=oe(a)?a.call(n):a;Reflect.ownKeys(ne).forEach(re=>{qt(re,ne[re])})}u&&cs(u,e,"c");function U(ne,re){Y(re)?re.forEach(Ne=>ne(Ne.bind(n))):re&&ne(re.bind(n))}if(U(ic,f),U(Ze,h),U(lc,g),U(ac,y),U(rc,E),U(oc,S),U(dc,m),U(fc,X),U(uc,N),U(Tr,b),U(kr,A),U(cc,z),Y(H))if(H.length){const ne=e.exposed||(e.exposed={});H.forEach(re=>{Object.defineProperty(ne,re,{get:()=>n[re],set:Ne=>n[re]=Ne})})}else e.exposed||(e.exposed={});W&&e.render===rt&&(e.render=W),V!=null&&(e.inheritAttrs=V),L&&(e.components=L),O&&(e.directives=O)}function vc(e,t,n=rt){Y(e)&&(e=oo(e));for(const r in e){const o=e[r];let s;we(o)?"default"in o?s=Se(o.from||r,o.default,!0):s=Se(o.from||r):s=Se(o),$e(s)?Object.defineProperty(t,r,{enumerable:!0,configurable:!0,get:()=>s.value,set:i=>s.value=i}):t[r]=s}}function cs(e,t,n){Qe(Y(e)?e.map(r=>r.bind(t.proxy)):e.bind(t.proxy),t,n)}function Ui(e,t,n,r){const o=r.includes(".")?Ni(n,r):()=>n[r];if(he(e)){const s=t[e];oe(s)&&ot(o,s)}else if(oe(e))ot(o,e.bind(n));else if(we(e))if(Y(e))e.forEach(s=>Ui(s,t,n,r));else{const s=oe(e.handler)?e.handler.bind(n):t[e.handler];oe(s)&&ot(o,s,e)}}function Po(e){const t=e.type,{mixins:n,extends:r}=t,{mixins:o,optionsCache:s,config:{optionMergeStrategies:i}}=e.appContext,l=s.get(t);let a;return l?a=l:!o.length&&!n&&!r?a=t:(a={},o.length&&o.forEach(c=>dr(a,c,i,!0)),dr(a,t,i)),we(t)&&s.set(t,a),a}function dr(e,t,n,r=!1){const{mixins:o,extends:s}=t;s&&dr(e,s,n,!0),o&&o.forEach(i=>dr(e,i,n,!0));for(const i in t)if(!(r&&i==="expose")){const l=_c[i]||n&&n[i];e[i]=l?l(e[i],t[i]):t[i]}return e}const _c={data:us,props:fs,emits:fs,methods:Cn,computed:Cn,beforeCreate:Be,created:Be,beforeMount:Be,mounted:Be,beforeUpdate:Be,updated:Be,beforeDestroy:Be,beforeUnmount:Be,destroyed:Be,unmounted:Be,activated:Be,deactivated:Be,errorCaptured:Be,serverPrefetch:Be,components:Cn,directives:Cn,watch:yc,provide:us,inject:bc};function us(e,t){return t?e?function(){return ke(oe(e)?e.call(this,this):e,oe(t)?t.call(this,this):t)}:t:e}function bc(e,t){return Cn(oo(e),oo(t))}function oo(e){if(Y(e)){const t={};for(let n=0;n1)return n&&oe(t)?t.call(r&&r.proxy):t}}function Cc(e,t,n,r=!1){const o={},s={};ir(s,Ar,1),e.propsDefaults=Object.create(null),Wi(e,t,o,s);for(const i in e.propsOptions[0])i in o||(o[i]=void 0);n?e.props=r?o:xi(o):e.type.props?e.props=o:e.props=s,e.attrs=s}function xc(e,t,n,r){const{props:o,attrs:s,vnode:{patchFlag:i}}=e,l=fe(o),[a]=e.propsOptions;let c=!1;if((r||i>0)&&!(i&16)){if(i&8){const u=e.vnode.dynamicProps;for(let f=0;f{a=!0;const[h,g]=Ki(f,t,!0);ke(i,h),g&&l.push(...g)};!n&&t.mixins.length&&t.mixins.forEach(u),e.extends&&u(e.extends),e.mixins&&e.mixins.forEach(u)}if(!s&&!a)return we(e)&&r.set(e,tn),tn;if(Y(s))for(let u=0;u-1,g[1]=E<0||y-1||ue(g,"default"))&&l.push(f)}}}const c=[i,l];return we(e)&&r.set(e,c),c}function ds(e){return e[0]!=="$"}function hs(e){const t=e&&e.toString().match(/^\s*(function|class) (\w+)/);return t?t[2]:e===null?"null":""}function ps(e,t){return hs(e)===hs(t)}function ms(e,t){return Y(t)?t.findIndex(n=>ps(n,e)):oe(t)&&ps(t,e)?0:-1}const Vi=e=>e[0]==="_"||e==="$stable",Ro=e=>Y(e)?e.map(et):[et(e)],Lc=(e,t,n)=>{if(t._n)return t;const r=Oe((...o)=>Ro(t(...o)),n);return r._c=!1,r},Gi=(e,t,n)=>{const r=e._ctx;for(const o in e){if(Vi(o))continue;const s=e[o];if(oe(s))t[o]=Lc(o,s,r);else if(s!=null){const i=Ro(s);t[o]=()=>i}}},Ji=(e,t)=>{const n=Ro(t);e.slots.default=()=>n},Sc=(e,t)=>{if(e.vnode.shapeFlag&32){const n=t._;n?(e.slots=fe(t),ir(t,"_",n)):Gi(t,e.slots={})}else e.slots={},t&&Ji(e,t);ir(e.slots,Ar,1)},Tc=(e,t,n)=>{const{vnode:r,slots:o}=e;let s=!0,i=ye;if(r.shapeFlag&32){const l=t._;l?n&&l===1?s=!1:(ke(o,t),!n&&l===1&&delete o._):(s=!t.$stable,Gi(t,o)),i=t}else t&&(Ji(e,t),i={default:1});if(s)for(const l in o)!Vi(l)&&!(l in i)&&delete o[l]};function pr(e,t,n,r,o=!1){if(Y(e)){e.forEach((h,g)=>pr(h,t&&(Y(t)?t[g]:t),n,r,o));return}if(sn(r)&&!o)return;const s=r.shapeFlag&4?Pr(r.component)||r.component.proxy:r.el,i=o?null:s,{i:l,r:a}=e,c=t&&t.r,u=l.refs===ye?l.refs={}:l.refs,f=l.setupState;if(c!=null&&c!==a&&(he(c)?(u[c]=null,ue(f,c)&&(f[c]=null)):$e(c)&&(c.value=null)),oe(a))Pt(a,l,12,[i,u]);else{const h=he(a),g=$e(a);if(h||g){const y=()=>{if(e.f){const E=h?ue(f,a)?f[a]:u[a]:a.value;o?Y(E)&&po(E,s):Y(E)?E.includes(s)||E.push(s):h?(u[a]=[s],ue(f,a)&&(f[a]=u[a])):(a.value=[s],e.k&&(u[e.k]=a.value))}else h?(u[a]=i,ue(f,a)&&(f[a]=i)):g&&(a.value=i,e.k&&(u[e.k]=i))};i?(y.id=-1,je(y,n)):y()}}}let xt=!1;const Qn=e=>/svg/.test(e.namespaceURI)&&e.tagName!=="foreignObject",Zn=e=>e.nodeType===8;function kc(e){const{mt:t,p:n,o:{patchProp:r,createText:o,nextSibling:s,parentNode:i,remove:l,insert:a,createComment:c}}=e,u=(v,b)=>{if(!b.hasChildNodes()){n(null,v,b),cr(),b._vnode=v;return}xt=!1,f(b.firstChild,v,null,null,null),cr(),b._vnode=v,xt&&console.error("Hydration completed but contains mismatches.")},f=(v,b,P,A,W,X=!1)=>{const N=Zn(v)&&v.data==="[",m=()=>E(v,b,P,A,W,N),{type:z,ref:H,shapeFlag:V,patchFlag:L}=b;let O=v.nodeType;b.el=v,L===-2&&(X=!1,b.dynamicChildren=null);let $=null;switch(z){case an:O!==3?b.children===""?(a(b.el=o(""),i(v),v),$=v):$=m():(v.data!==b.children&&(xt=!0,v.data=b.children),$=s(v));break;case Ve:O!==8||N?$=m():$=s(v);break;case Sn:if(N&&(v=s(v),O=v.nodeType),O===1||O===3){$=v;const ie=!b.children.length;for(let U=0;U{X=X||!!b.dynamicChildren;const{type:N,props:m,patchFlag:z,shapeFlag:H,dirs:V}=b,L=N==="input"&&V||N==="option";if(L||z!==-1){if(V&&at(b,null,P,"created"),m)if(L||!X||z&48)for(const $ in m)(L&&$.endsWith("value")||Hn($)&&!xn($))&&r(v,$,null,m[$],!1,void 0,P);else m.onClick&&r(v,"onClick",null,m.onClick,!1,void 0,P);let O;if((O=m&&m.onVnodeBeforeMount)&&Je(O,P,b),V&&at(b,null,P,"beforeMount"),((O=m&&m.onVnodeMounted)||V)&&Ii(()=>{O&&Je(O,P,b),V&&at(b,null,P,"mounted")},A),H&16&&!(m&&(m.innerHTML||m.textContent))){let $=g(v.firstChild,b,v,P,A,W,X);for(;$;){xt=!0;const ie=$;$=$.nextSibling,l(ie)}}else H&8&&v.textContent!==b.children&&(xt=!0,v.textContent=b.children)}return v.nextSibling},g=(v,b,P,A,W,X,N)=>{N=N||!!b.dynamicChildren;const m=b.children,z=m.length;for(let H=0;H{const{slotScopeIds:N}=b;N&&(W=W?W.concat(N):N);const m=i(v),z=g(s(v),b,m,P,A,W,X);return z&&Zn(z)&&z.data==="]"?s(b.anchor=z):(xt=!0,a(b.anchor=c("]"),m,z),z)},E=(v,b,P,A,W,X)=>{if(xt=!0,b.el=null,X){const z=S(v);for(;;){const H=s(v);if(H&&H!==z)l(H);else break}}const N=s(v),m=i(v);return l(v),n(null,b,m,N,P,A,Qn(m),W),N},S=v=>{let b=0;for(;v;)if(v=s(v),v&&Zn(v)&&(v.data==="["&&b++,v.data==="]")){if(b===0)return s(v);b--}return v};return[u,f]}const je=Ii;function Ac(e){return Pc(e,kc)}function Pc(e,t){const n=Jr();n.__VUE__=!0;const{insert:r,remove:o,patchProp:s,createElement:i,createText:l,createComment:a,setText:c,setElementText:u,parentNode:f,nextSibling:h,setScopeId:g=rt,insertStaticContent:y}=e,E=(d,p,_,w=null,x=null,T=null,D=!1,R=null,M=!!p.dynamicChildren)=>{if(d===p)return;d&&!Ft(d,p)&&(w=C(d),He(d,x,T,!0),d=null),p.patchFlag===-2&&(M=!1,p.dynamicChildren=null);const{type:k,ref:G,shapeFlag:q}=p;switch(k){case an:S(d,p,_,w);break;case Ve:v(d,p,_,w);break;case Sn:d==null&&b(p,_,w,D);break;case be:L(d,p,_,w,x,T,D,R,M);break;default:q&1?W(d,p,_,w,x,T,D,R,M):q&6?O(d,p,_,w,x,T,D,R,M):(q&64||q&128)&&k.process(d,p,_,w,x,T,D,R,M,I)}G!=null&&x&&pr(G,d&&d.ref,T,p||d,!p)},S=(d,p,_,w)=>{if(d==null)r(p.el=l(p.children),_,w);else{const x=p.el=d.el;p.children!==d.children&&c(x,p.children)}},v=(d,p,_,w)=>{d==null?r(p.el=a(p.children||""),_,w):p.el=d.el},b=(d,p,_,w)=>{[d.el,d.anchor]=y(d.children,p,_,w,d.el,d.anchor)},P=({el:d,anchor:p},_,w)=>{let x;for(;d&&d!==p;)x=h(d),r(d,_,w),d=x;r(p,_,w)},A=({el:d,anchor:p})=>{let _;for(;d&&d!==p;)_=h(d),o(d),d=_;o(p)},W=(d,p,_,w,x,T,D,R,M)=>{D=D||p.type==="svg",d==null?X(p,_,w,x,T,D,R,M):z(d,p,x,T,D,R,M)},X=(d,p,_,w,x,T,D,R)=>{let M,k;const{type:G,props:q,shapeFlag:J,transition:te,dirs:le}=d;if(M=d.el=i(d.type,T,q&&q.is,q),J&8?u(M,d.children):J&16&&m(d.children,M,null,w,x,T&&G!=="foreignObject",D,R),le&&at(d,null,w,"created"),N(M,d,d.scopeId,D,w),q){for(const me in q)me!=="value"&&!xn(me)&&s(M,me,null,q[me],T,d.children,w,x,Re);"value"in q&&s(M,"value",null,q.value),(k=q.onVnodeBeforeMount)&&Je(k,w,d)}le&&at(d,null,w,"beforeMount");const ve=(!x||x&&!x.pendingBranch)&&te&&!te.persisted;ve&&te.beforeEnter(M),r(M,p,_),((k=q&&q.onVnodeMounted)||ve||le)&&je(()=>{k&&Je(k,w,d),ve&&te.enter(M),le&&at(d,null,w,"mounted")},x)},N=(d,p,_,w,x)=>{if(_&&g(d,_),w)for(let T=0;T{for(let k=M;k{const R=p.el=d.el;let{patchFlag:M,dynamicChildren:k,dirs:G}=p;M|=d.patchFlag&16;const q=d.props||ye,J=p.props||ye;let te;_&&Mt(_,!1),(te=J.onVnodeBeforeUpdate)&&Je(te,_,p,d),G&&at(p,d,_,"beforeUpdate"),_&&Mt(_,!0);const le=x&&p.type!=="foreignObject";if(k?H(d.dynamicChildren,k,R,_,w,le,T):D||re(d,p,R,null,_,w,le,T,!1),M>0){if(M&16)V(R,p,q,J,_,w,x);else if(M&2&&q.class!==J.class&&s(R,"class",null,J.class,x),M&4&&s(R,"style",q.style,J.style,x),M&8){const ve=p.dynamicProps;for(let me=0;me{te&&Je(te,_,p,d),G&&at(p,d,_,"updated")},w)},H=(d,p,_,w,x,T,D)=>{for(let R=0;R{if(_!==w){if(_!==ye)for(const R in _)!xn(R)&&!(R in w)&&s(d,R,_[R],null,D,p.children,x,T,Re);for(const R in w){if(xn(R))continue;const M=w[R],k=_[R];M!==k&&R!=="value"&&s(d,R,k,M,D,p.children,x,T,Re)}"value"in w&&s(d,"value",_.value,w.value)}},L=(d,p,_,w,x,T,D,R,M)=>{const k=p.el=d?d.el:l(""),G=p.anchor=d?d.anchor:l("");let{patchFlag:q,dynamicChildren:J,slotScopeIds:te}=p;te&&(R=R?R.concat(te):te),d==null?(r(k,_,w),r(G,_,w),m(p.children,_,G,x,T,D,R,M)):q>0&&q&64&&J&&d.dynamicChildren?(H(d.dynamicChildren,J,_,x,T,D,R),(p.key!=null||x&&p===x.subTree)&&Yi(d,p,!0)):re(d,p,_,G,x,T,D,R,M)},O=(d,p,_,w,x,T,D,R,M)=>{p.slotScopeIds=R,d==null?p.shapeFlag&512?x.ctx.activate(p,_,w,D,M):$(p,_,w,x,T,D,M):ie(d,p,M)},$=(d,p,_,w,x,T,D)=>{const R=d.component=Bc(d,w,x);if(jn(d)&&(R.ctx.renderer=I),Fc(R),R.asyncDep){if(x&&x.registerDep(R,U),!d.el){const M=R.subTree=ee(Ve);v(null,M,p,_)}return}U(R,d,p,_,x,T,D)},ie=(d,p,_)=>{const w=p.component=d.component;if(Ya(d,p,_))if(w.asyncDep&&!w.asyncResolved){ne(w,p,_);return}else w.next=p,qa(w.update),w.update();else p.el=d.el,w.vnode=p},U=(d,p,_,w,x,T,D)=>{const R=()=>{if(d.isMounted){let{next:G,bu:q,u:J,parent:te,vnode:le}=d,ve=G,me;Mt(d,!1),G?(G.el=le.el,ne(d,G,D)):G=le,q&&Mr(q),(me=G.props&&G.props.onVnodeBeforeUpdate)&&Je(me,te,G,le),Mt(d,!0);const Te=Nr(d),Xe=d.subTree;d.subTree=Te,E(Xe,Te,f(Xe.el),C(Xe),d,x,T),G.el=Te.el,ve===null&&Qa(d,Te.el),J&&je(J,x),(me=G.props&&G.props.onVnodeUpdated)&&je(()=>Je(me,te,G,le),x)}else{let G;const{el:q,props:J}=p,{bm:te,m:le,parent:ve}=d,me=sn(p);if(Mt(d,!1),te&&Mr(te),!me&&(G=J&&J.onVnodeBeforeMount)&&Je(G,ve,p),Mt(d,!0),q&&ae){const Te=()=>{d.subTree=Nr(d),ae(q,d.subTree,d,x,null)};me?p.type.__asyncLoader().then(()=>!d.isUnmounted&&Te()):Te()}else{const Te=d.subTree=Nr(d);E(null,Te,_,w,d,x,T),p.el=Te.el}if(le&&je(le,x),!me&&(G=J&&J.onVnodeMounted)){const Te=p;je(()=>Je(G,ve,Te),x)}(p.shapeFlag&256||ve&&sn(ve.vnode)&&ve.vnode.shapeFlag&256)&&d.a&&je(d.a,x),d.isMounted=!0,p=_=w=null}},M=d.effect=new _o(R,()=>xr(k),d.scope),k=d.update=()=>M.run();k.id=d.uid,Mt(d,!0),k()},ne=(d,p,_)=>{p.component=d;const w=d.vnode.props;d.vnode=p,d.next=null,xc(d,p.props,w,_),Tc(d,p.children,_),pn(),os(),mn()},re=(d,p,_,w,x,T,D,R,M=!1)=>{const k=d&&d.children,G=d?d.shapeFlag:0,q=p.children,{patchFlag:J,shapeFlag:te}=p;if(J>0){if(J&128){Ie(k,q,_,w,x,T,D,R,M);return}else if(J&256){Ne(k,q,_,w,x,T,D,R,M);return}}te&8?(G&16&&Re(k,x,T),q!==k&&u(_,q)):G&16?te&16?Ie(k,q,_,w,x,T,D,R,M):Re(k,x,T,!0):(G&8&&u(_,""),te&16&&m(q,_,w,x,T,D,R,M))},Ne=(d,p,_,w,x,T,D,R,M)=>{d=d||tn,p=p||tn;const k=d.length,G=p.length,q=Math.min(k,G);let J;for(J=0;JG?Re(d,x,T,!0,!1,q):m(p,_,w,x,T,D,R,M,q)},Ie=(d,p,_,w,x,T,D,R,M)=>{let k=0;const G=p.length;let q=d.length-1,J=G-1;for(;k<=q&&k<=J;){const te=d[k],le=p[k]=M?Tt(p[k]):et(p[k]);if(Ft(te,le))E(te,le,_,null,x,T,D,R,M);else break;k++}for(;k<=q&&k<=J;){const te=d[q],le=p[J]=M?Tt(p[J]):et(p[J]);if(Ft(te,le))E(te,le,_,null,x,T,D,R,M);else break;q--,J--}if(k>q){if(k<=J){const te=J+1,le=teJ)for(;k<=q;)He(d[k],x,T,!0),k++;else{const te=k,le=k,ve=new Map;for(k=le;k<=J;k++){const We=p[k]=M?Tt(p[k]):et(p[k]);We.key!=null&&ve.set(We.key,k)}let me,Te=0;const Xe=J-le+1;let Jt=!1,Ko=0;const vn=new Array(Xe);for(k=0;k=Xe){He(We,x,T,!0);continue}let lt;if(We.key!=null)lt=ve.get(We.key);else for(me=le;me<=J;me++)if(vn[me-le]===0&&Ft(We,p[me])){lt=me;break}lt===void 0?He(We,x,T,!0):(vn[lt-le]=k+1,lt>=Ko?Ko=lt:Jt=!0,E(We,p[lt],_,null,x,T,D,R,M),Te++)}const Vo=Jt?Rc(vn):tn;for(me=Vo.length-1,k=Xe-1;k>=0;k--){const We=le+k,lt=p[We],Go=We+1{const{el:T,type:D,transition:R,children:M,shapeFlag:k}=d;if(k&6){ze(d.component.subTree,p,_,w);return}if(k&128){d.suspense.move(p,_,w);return}if(k&64){D.move(d,p,_,I);return}if(D===be){r(T,p,_);for(let q=0;qR.enter(T),x);else{const{leave:q,delayLeave:J,afterLeave:te}=R,le=()=>r(T,p,_),ve=()=>{q(T,()=>{le(),te&&te()})};J?J(T,le,ve):ve()}else r(T,p,_)},He=(d,p,_,w=!1,x=!1)=>{const{type:T,props:D,ref:R,children:M,dynamicChildren:k,shapeFlag:G,patchFlag:q,dirs:J}=d;if(R!=null&&pr(R,null,_,d,!0),G&256){p.ctx.deactivate(d);return}const te=G&1&&J,le=!sn(d);let ve;if(le&&(ve=D&&D.onVnodeBeforeUnmount)&&Je(ve,p,d),G&6)it(d.component,_,w);else{if(G&128){d.suspense.unmount(_,w);return}te&&at(d,null,p,"beforeUnmount"),G&64?d.type.remove(d,p,_,x,I,w):k&&(T!==be||q>0&&q&64)?Re(k,p,_,!1,!0):(T===be&&q&384||!x&&G&16)&&Re(M,p,_),w&&wt(d)}(le&&(ve=D&&D.onVnodeUnmounted)||te)&&je(()=>{ve&&Je(ve,p,d),te&&at(d,null,p,"unmounted")},_)},wt=d=>{const{type:p,el:_,anchor:w,transition:x}=d;if(p===be){Et(_,w);return}if(p===Sn){A(d);return}const T=()=>{o(_),x&&!x.persisted&&x.afterLeave&&x.afterLeave()};if(d.shapeFlag&1&&x&&!x.persisted){const{leave:D,delayLeave:R}=x,M=()=>D(_,T);R?R(d.el,T,M):M()}else T()},Et=(d,p)=>{let _;for(;d!==p;)_=h(d),o(d),d=_;o(p)},it=(d,p,_)=>{const{bum:w,scope:x,update:T,subTree:D,um:R}=d;w&&Mr(w),x.stop(),T&&(T.active=!1,He(D,d,p,_)),R&&je(R,p),je(()=>{d.isUnmounted=!0},p),p&&p.pendingBranch&&!p.isUnmounted&&d.asyncDep&&!d.asyncResolved&&d.suspenseId===p.pendingId&&(p.deps--,p.deps===0&&p.resolve())},Re=(d,p,_,w=!1,x=!1,T=0)=>{for(let D=T;Dd.shapeFlag&6?C(d.component.subTree):d.shapeFlag&128?d.suspense.next():h(d.anchor||d.el),F=(d,p,_)=>{d==null?p._vnode&&He(p._vnode,null,null,!0):E(p._vnode||null,d,p,null,null,null,_),os(),cr(),p._vnode=d},I={p:E,um:He,m:ze,r:wt,mt:$,mc:m,pc:re,pbc:H,n:C,o:e};let K,ae;return t&&([K,ae]=t(I)),{render:F,hydrate:K,createApp:Ec(F,K)}}function Mt({effect:e,update:t},n){e.allowRecurse=t.allowRecurse=n}function Yi(e,t,n=!1){const r=e.children,o=t.children;if(Y(r)&&Y(o))for(let s=0;s>1,e[n[l]]0&&(t[r]=n[s-1]),n[s]=r)}}for(s=n.length,i=n[s-1];s-- >0;)n[s]=i,i=t[i];return n}const Oc=e=>e.__isTeleport,be=Symbol.for("v-fgt"),an=Symbol.for("v-txt"),Ve=Symbol.for("v-cmt"),Sn=Symbol.for("v-stc"),Tn=[];let nt=null;function B(e=!1){Tn.push(nt=e?null:[])}function $c(){Tn.pop(),nt=Tn[Tn.length-1]||null}let In=1;function gs(e){In+=e}function Qi(e){return e.dynamicChildren=In>0?nt||tn:null,$c(),In>0&&nt&&nt.push(e),e}function Q(e,t,n,r,o,s){return Qi(se(e,t,n,r,o,s,!0))}function xe(e,t,n,r,o){return Qi(ee(e,t,n,r,o,!0))}function mr(e){return e?e.__v_isVNode===!0:!1}function Ft(e,t){return e.type===t.type&&e.key===t.key}const Ar="__vInternal",Zi=({key:e})=>e??null,or=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?he(e)||$e(e)||oe(e)?{i:Me,r:e,k:t,f:!!n}:e:null);function se(e,t=null,n=null,r=0,o=null,s=e===be?0:1,i=!1,l=!1){const a={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&Zi(t),ref:t&&or(t),scopeId:$i,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:s,patchFlag:r,dynamicProps:o,dynamicChildren:null,appContext:null,ctx:Me};return l?(Oo(a,n),s&128&&e.normalize(a)):n&&(a.shapeFlag|=he(n)?8:16),In>0&&!i&&nt&&(a.patchFlag>0||s&6)&&a.patchFlag!==32&&nt.push(a),a}const ee=Ic;function Ic(e,t=null,n=null,r=0,o=null,s=!1){if((!e||e===hc)&&(e=Ve),mr(e)){const l=$t(e,t,!0);return n&&Oo(l,n),In>0&&!s&&nt&&(l.shapeFlag&6?nt[nt.indexOf(e)]=l:nt.push(l)),l.patchFlag|=-2,l}if(Wc(e)&&(e=e.__vccOpts),t){t=Mc(t);let{class:l,style:a}=t;l&&!he(l)&&(t.class=Ue(l)),we(a)&&(Li(a)&&!Y(a)&&(a=ke({},a)),t.style=Dn(a))}const i=he(e)?1:Za(e)?128:Oc(e)?64:we(e)?4:oe(e)?2:0;return se(e,t,n,r,o,i,s,!0)}function Mc(e){return e?Li(e)||Ar in e?ke({},e):e:null}function $t(e,t,n=!1){const{props:r,ref:o,patchFlag:s,children:i}=e,l=t?io(r||{},t):r;return{__v_isVNode:!0,__v_skip:!0,type:e.type,props:l,key:l&&Zi(l),ref:t&&t.ref?n&&o?Y(o)?o.concat(or(t)):[o,or(t)]:or(t):o,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:i,target:e.target,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==be?s===-1?16:s|16:s,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:e.transition,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&$t(e.ssContent),ssFallback:e.ssFallback&&$t(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce}}function bt(e=" ",t=0){return ee(an,null,e,t)}function Nc(e,t){const n=ee(Sn,null,e);return n.staticCount=t,n}function Le(e="",t=!1){return t?(B(),xe(Ve,null,e)):ee(Ve,null,e)}function et(e){return e==null||typeof e=="boolean"?ee(Ve):Y(e)?ee(be,null,e.slice()):typeof e=="object"?Tt(e):ee(an,null,String(e))}function Tt(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:$t(e)}function Oo(e,t){let n=0;const{shapeFlag:r}=e;if(t==null)t=null;else if(Y(t))n=16;else if(typeof t=="object")if(r&65){const o=t.default;o&&(o._c&&(o._d=!1),Oo(e,o()),o._c&&(o._d=!0));return}else{n=32;const o=t._;!o&&!(Ar in t)?t._ctx=Me:o===3&&Me&&(Me.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else oe(t)?(t={default:t,_ctx:Me},n=32):(t=String(t),r&64?(n=16,t=[bt(t)]):n=8);e.children=t,e.shapeFlag|=n}function io(...e){const t={};for(let n=0;nAe||Me;let $o,Qt,vs="__VUE_INSTANCE_SETTERS__";(Qt=Jr()[vs])||(Qt=Jr()[vs]=[]),Qt.push(e=>Ae=e),$o=e=>{Qt.length>1?Qt.forEach(t=>t(e)):Qt[0](e)};const cn=e=>{$o(e),e.scope.on()},Wt=()=>{Ae&&Ae.scope.off(),$o(null)};function el(e){return e.vnode.shapeFlag&4}let un=!1;function Fc(e,t=!1){un=t;const{props:n,children:r}=e.vnode,o=el(e);Cc(e,n,o,t),Sc(e,r);const s=o?zc(e,t):void 0;return un=!1,s}function zc(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=Si(new Proxy(e.ctx,mc));const{setup:r}=n;if(r){const o=e.setupContext=r.length>1?Uc(e):null;cn(e),pn();const s=Pt(r,e,0,[e.props,o]);if(mn(),Wt(),ai(s)){if(s.then(Wt,Wt),t)return s.then(i=>{_s(e,i,t)}).catch(i=>{zn(i,e,0)});e.asyncDep=s}else _s(e,s,t)}else tl(e,t)}function _s(e,t,n){oe(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:we(t)&&(e.setupState=ki(t)),tl(e,n)}let bs;function tl(e,t,n){const r=e.type;if(!e.render){if(!t&&bs&&!r.render){const o=r.template||Po(e).template;if(o){const{isCustomElement:s,compilerOptions:i}=e.appContext.config,{delimiters:l,compilerOptions:a}=r,c=ke(ke({isCustomElement:s,delimiters:l},i),a);r.render=bs(o,c)}}e.render=r.render||rt}cn(e),pn(),gc(e),mn(),Wt()}function jc(e){return e.attrsProxy||(e.attrsProxy=new Proxy(e.attrs,{get(t,n){return qe(e,"get","$attrs"),t[n]}}))}function Uc(e){const t=n=>{e.exposed=n||{}};return{get attrs(){return jc(e)},slots:e.slots,emit:e.emit,expose:t}}function Pr(e){if(e.exposed)return e.exposeProxy||(e.exposeProxy=new Proxy(ki(Si(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Ln)return Ln[n](e)},has(t,n){return n in t||n in Ln}}))}function qc(e,t=!0){return oe(e)?e.displayName||e.name:e.name||t&&e.__name}function Wc(e){return oe(e)&&"__vccOpts"in e}const j=(e,t)=>za(e,t,un);function ge(e,t,n){const r=arguments.length;return r===2?we(t)&&!Y(t)?mr(t)?ee(e,null,[t]):ee(e,t):ee(e,null,t):(r>3?n=Array.prototype.slice.call(arguments,2):r===3&&mr(n)&&(n=[n]),ee(e,t,n))}const Kc=Symbol.for("v-scx"),Vc=()=>Se(Kc),Gc="3.3.4",Jc="http://www.w3.org/2000/svg",zt=typeof document<"u"?document:null,ys=zt&&zt.createElement("template"),Yc={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,r)=>{const o=t?zt.createElementNS(Jc,e):zt.createElement(e,n?{is:n}:void 0);return e==="select"&&r&&r.multiple!=null&&o.setAttribute("multiple",r.multiple),o},createText:e=>zt.createTextNode(e),createComment:e=>zt.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>zt.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,r,o,s){const i=n?n.previousSibling:t.lastChild;if(o&&(o===s||o.nextSibling))for(;t.insertBefore(o.cloneNode(!0),n),!(o===s||!(o=o.nextSibling)););else{ys.innerHTML=r?`${e}`:e;const l=ys.content;if(r){const a=l.firstChild;for(;a.firstChild;)l.appendChild(a.firstChild);l.removeChild(a)}t.insertBefore(l,n)}return[i?i.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}};function Qc(e,t,n){const r=e._vtc;r&&(t=(t?[t,...r]:[...r]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}function Zc(e,t,n){const r=e.style,o=he(n);if(n&&!o){if(t&&!he(t))for(const s in t)n[s]==null&&lo(r,s,"");for(const s in n)lo(r,s,n[s])}else{const s=r.display;o?t!==n&&(r.cssText=n):t&&e.removeAttribute("style"),"_vod"in e&&(r.display=s)}}const ws=/\s*!important$/;function lo(e,t,n){if(Y(n))n.forEach(r=>lo(e,t,r));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const r=Xc(e,t);ws.test(n)?e.setProperty(Vt(r),n.replace(ws,""),"important"):e[r]=n}}const Es=["Webkit","Moz","ms"],Fr={};function Xc(e,t){const n=Fr[t];if(n)return n;let r=ut(t);if(r!=="filter"&&r in e)return Fr[t]=r;r=wr(r);for(let o=0;ozr||(iu.then(()=>zr=0),zr=Date.now());function au(e,t){const n=r=>{if(!r._vts)r._vts=Date.now();else if(r._vts<=n.attached)return;Qe(cu(r,n.value),t,5,[r])};return n.value=e,n.attached=lu(),n}function cu(e,t){if(Y(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(r=>o=>!o._stopped&&r&&r(o))}else return t}const Ls=/^on[a-z]/,uu=(e,t,n,r,o=!1,s,i,l,a)=>{t==="class"?Qc(e,r,o):t==="style"?Zc(e,n,r):Hn(t)?ho(t)||ou(e,t,n,r,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):fu(e,t,r,o))?tu(e,t,r,s,i,l,a):(t==="true-value"?e._trueValue=r:t==="false-value"&&(e._falseValue=r),eu(e,t,r,o))};function fu(e,t,n,r){return r?!!(t==="innerHTML"||t==="textContent"||t in e&&Ls.test(t)&&oe(n)):t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA"||Ls.test(t)&&he(n)?!1:t in e}const Lt="transition",_n="animation",Un=(e,{slots:t})=>ge(nc,du(e),t);Un.displayName="Transition";const nl={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String};Un.props=ke({},Hi,nl);const Nt=(e,t=[])=>{Y(e)?e.forEach(n=>n(...t)):e&&e(...t)},Ss=e=>e?Y(e)?e.some(t=>t.length>1):e.length>1:!1;function du(e){const t={};for(const L in e)L in nl||(t[L]=e[L]);if(e.css===!1)return t;const{name:n="v",type:r,duration:o,enterFromClass:s=`${n}-enter-from`,enterActiveClass:i=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:a=s,appearActiveClass:c=i,appearToClass:u=l,leaveFromClass:f=`${n}-leave-from`,leaveActiveClass:h=`${n}-leave-active`,leaveToClass:g=`${n}-leave-to`}=e,y=hu(o),E=y&&y[0],S=y&&y[1],{onBeforeEnter:v,onEnter:b,onEnterCancelled:P,onLeave:A,onLeaveCancelled:W,onBeforeAppear:X=v,onAppear:N=b,onAppearCancelled:m=P}=t,z=(L,O,$)=>{Ht(L,O?u:l),Ht(L,O?c:i),$&&$()},H=(L,O)=>{L._isLeaving=!1,Ht(L,f),Ht(L,g),Ht(L,h),O&&O()},V=L=>(O,$)=>{const ie=L?N:b,U=()=>z(O,L,$);Nt(ie,[O,U]),Ts(()=>{Ht(O,L?a:s),St(O,L?u:l),Ss(ie)||ks(O,r,E,U)})};return ke(t,{onBeforeEnter(L){Nt(v,[L]),St(L,s),St(L,i)},onBeforeAppear(L){Nt(X,[L]),St(L,a),St(L,c)},onEnter:V(!1),onAppear:V(!0),onLeave(L,O){L._isLeaving=!0;const $=()=>H(L,O);St(L,f),gu(),St(L,h),Ts(()=>{L._isLeaving&&(Ht(L,f),St(L,g),Ss(A)||ks(L,r,S,$))}),Nt(A,[L,$])},onEnterCancelled(L){z(L,!1),Nt(P,[L])},onAppearCancelled(L){z(L,!0),Nt(m,[L])},onLeaveCancelled(L){H(L),Nt(W,[L])}})}function hu(e){if(e==null)return null;if(we(e))return[jr(e.enter),jr(e.leave)];{const t=jr(e);return[t,t]}}function jr(e){return Ql(e)}function St(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e._vtc||(e._vtc=new Set)).add(t)}function Ht(e,t){t.split(/\s+/).forEach(r=>r&&e.classList.remove(r));const{_vtc:n}=e;n&&(n.delete(t),n.size||(e._vtc=void 0))}function Ts(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let pu=0;function ks(e,t,n,r){const o=e._endId=++pu,s=()=>{o===e._endId&&r()};if(n)return setTimeout(s,n);const{type:i,timeout:l,propCount:a}=mu(e,t);if(!i)return r();const c=i+"end";let u=0;const f=()=>{e.removeEventListener(c,h),s()},h=g=>{g.target===e&&++u>=a&&f()};setTimeout(()=>{u(n[y]||"").split(", "),o=r(`${Lt}Delay`),s=r(`${Lt}Duration`),i=As(o,s),l=r(`${_n}Delay`),a=r(`${_n}Duration`),c=As(l,a);let u=null,f=0,h=0;t===Lt?i>0&&(u=Lt,f=i,h=s.length):t===_n?c>0&&(u=_n,f=c,h=a.length):(f=Math.max(i,c),u=f>0?i>c?Lt:_n:null,h=u?u===Lt?s.length:a.length:0);const g=u===Lt&&/\b(transform|all)(,|$)/.test(r(`${Lt}Property`).toString());return{type:u,timeout:f,propCount:h,hasTransform:g}}function As(e,t){for(;e.lengthPs(n)+Ps(e[r])))}function Ps(e){return Number(e.slice(0,-1).replace(",","."))*1e3}function gu(){return document.body.offsetHeight}const vu={esc:"escape",space:" ",up:"arrow-up",left:"arrow-left",right:"arrow-right",down:"arrow-down",delete:"backspace"},_u=(e,t)=>n=>{if(!("key"in n))return;const r=Vt(n.key);if(t.some(o=>o===r||vu[o]===r))return e(n)},gr={beforeMount(e,{value:t},{transition:n}){e._vod=e.style.display==="none"?"":e.style.display,n&&t?n.beforeEnter(e):bn(e,t)},mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)},updated(e,{value:t,oldValue:n},{transition:r}){!t!=!n&&(r?t?(r.beforeEnter(e),bn(e,!0),r.enter(e)):r.leave(e,()=>{bn(e,!1)}):bn(e,t))},beforeUnmount(e,{value:t}){bn(e,t)}};function bn(e,t){e.style.display=t?e._vod:"none"}const bu=ke({patchProp:uu},Yc);let Ur,Rs=!1;function yu(){return Ur=Rs?Ur:Ac(bu),Rs=!0,Ur}const wu=(...e)=>{const t=yu().createApp(...e),{mount:n}=t;return t.mount=r=>{const o=Eu(r);if(o)return n(o,!0,o instanceof SVGElement)},t};function Eu(e){return he(e)?document.querySelector(e):e}const Cu={"v-8daa1a0e":()=>Ye(()=>import("./index.html-566c74d8.js"),[]).then(({data:e})=>e),"v-37fb9660":()=>Ye(()=>import("./gbajam22.html-154329fd.js"),[]).then(({data:e})=>e),"v-312833e4":()=>Ye(()=>import("./gbajam24.html-87935102.js"),[]).then(({data:e})=>e),"v-5dc4b15a":()=>Ye(()=>import("./getting-started.html-5f53e87b.js"),[]).then(({data:e})=>e),"v-68dc5d0d":()=>Ye(()=>import("./resources.html-b1e01fd3.js"),[]).then(({data:e})=>e),"v-3706649a":()=>Ye(()=>import("./404.html-60b35caa.js"),[]).then(({data:e})=>e)},xu=JSON.parse(`{"base":"/","lang":"en-US","title":"gbadev","description":"Game Boy Advance development resources","head":[["script",{},"\\n var _paq = window._paq = window._paq || [];\\n /* tracker methods like \\"setCustomDimension\\" should be called before \\"trackPageView\\" */\\n _paq.push(['trackPageView']);\\n _paq.push(['enableLinkTracking']);\\n (function() {\\n var u=\\"//stats.gbdev.io/\\";\\n _paq.push(['setTrackerUrl', u+'matomo.php']);\\n _paq.push(['setSiteId', '3']);\\n var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];\\n g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);\\n })();\\n "],["link",{"rel":"icon","type":"image/png","sizes":"32x32","href":"/favicons/favicon-32.png"}],["link",{"rel":"icon","type":"image/png","sizes":"128x128","href":"/favicons/favicon-128.png"}],["link",{"rel":"icon","type":"image/png","sizes":"180x180","href":"/favicons/favicon-180.png"}],["link",{"rel":"icon","type":"image/png","sizes":"192x192","href":"/favicons/favicon-192.png"}],["meta",{"property":"og:site_name","content":"gbadev.net"}],["meta",{"name":"twitter:card","content":"summary"}],["meta",{"name":"twitter:site","content":"@gbdev0"}],["meta",{"name":"og:image","content":"https://gbadev.net/images/logo.png"}]],"locales":{}}`);var Lu=([e,t,n])=>e==="meta"&&t.name?`${e}.${t.name}`:["title","base"].includes(e)?e:e==="template"&&t.id?`${e}.${t.id}`:JSON.stringify([e,t,n]),Su=e=>{const t=new Set,n=[];return e.forEach(r=>{const o=Lu(r);t.has(o)||(t.add(o),n.push(r))}),n},qn=e=>/^(https?:)?\/\//.test(e),Tu=e=>/^mailto:/.test(e),ku=e=>/^tel:/.test(e),Io=e=>Object.prototype.toString.call(e)==="[object Object]",rl=e=>e[e.length-1]==="/"?e.slice(0,-1):e,ol=e=>e[0]==="/"?e.slice(1):e,sl=(e,t)=>{const n=Object.keys(e).sort((r,o)=>{const s=o.split("/").length-r.split("/").length;return s!==0?s:o.length-r.length});for(const r of n)if(t.startsWith(r))return r;return"/"};const il={"v-8daa1a0e":Yt(()=>Ye(()=>import("./index.html-0f9a77d0.js"),[])),"v-37fb9660":Yt(()=>Ye(()=>import("./gbajam22.html-93cfdcfb.js"),[])),"v-312833e4":Yt(()=>Ye(()=>import("./gbajam24.html-c2d4d8a0.js"),[])),"v-5dc4b15a":Yt(()=>Ye(()=>import("./getting-started.html-851423b0.js"),[])),"v-68dc5d0d":Yt(()=>Ye(()=>import("./resources.html-fdb49303.js"),[])),"v-3706649a":Yt(()=>Ye(()=>import("./404.html-0d9b629f.js"),[]))};var Au=Symbol(""),ll=Symbol(""),Pu=Fn({key:"",path:"",title:"",lang:"",frontmatter:{},headers:[]}),Kt=()=>{const e=Se(ll);if(!e)throw new Error("pageData() is called without provider.");return e},al=Symbol(""),mt=()=>{const e=Se(al);if(!e)throw new Error("usePageFrontmatter() is called without provider.");return e},cl=Symbol(""),Ru=()=>{const e=Se(cl);if(!e)throw new Error("usePageHead() is called without provider.");return e},Ou=Symbol(""),ul=Symbol(""),$u=()=>{const e=Se(ul);if(!e)throw new Error("usePageLang() is called without provider.");return e},fl=Symbol(""),Iu=()=>{const e=Se(fl);if(!e)throw new Error("usePageLayout() is called without provider.");return e},Mu=Ee(Cu),Mo=Symbol(""),Rr=()=>{const e=Se(Mo);if(!e)throw new Error("useRouteLocale() is called without provider.");return e},en=Ee(xu),dl=()=>en,hl=Symbol(""),No=()=>{const e=Se(hl);if(!e)throw new Error("useSiteLocaleData() is called without provider.");return e},Nu=Symbol(""),Hu="Layout",Du="NotFound",dt=Bn({resolveLayouts:e=>e.reduce((t,n)=>({...t,...n.layouts}),{}),resolvePageData:async e=>{const t=Mu.value[e];return await(t==null?void 0:t())??Pu},resolvePageFrontmatter:e=>e.frontmatter,resolvePageHead:(e,t,n)=>{const r=he(t.description)?t.description:n.description,o=[...Y(t.head)?t.head:[],...n.head,["title",{},e],["meta",{name:"description",content:r}]];return Su(o)},resolvePageHeadTitle:(e,t)=>[e.title,t.title].filter(n=>!!n).join(" | "),resolvePageLang:(e,t)=>e.lang||t.lang||"en-US",resolvePageLayout:(e,t)=>{let n;if(e.path){const r=e.frontmatter.layout;he(r)?n=r:n=Hu}else n=Du;return t[n]},resolveRouteLocale:(e,t)=>sl(e,t),resolveSiteLocaleData:(e,t)=>({...e,...e.locales[t]})}),Ho=de({name:"ClientOnly",setup(e,t){const n=Ee(!1);return Ze(()=>{n.value=!0}),()=>{var r,o;return n.value?(o=(r=t.slots).default)==null?void 0:o.call(r):null}}}),Bu=de({name:"Content",props:{pageKey:{type:String,required:!1,default:""}},setup(e){const t=Kt(),n=j(()=>il[e.pageKey||t.value.key]);return()=>n.value?ge(n.value):ge("div","404 Not Found")}}),It=(e={})=>e,Do=e=>qn(e)?e:`/${ol(e)}`;function pl(e,t,n){var r,o,s;t===void 0&&(t=50),n===void 0&&(n={});var i=(r=n.isImmediate)!=null&&r,l=(o=n.callback)!=null&&o,a=n.maxWait,c=Date.now(),u=[];function f(){if(a!==void 0){var g=Date.now()-c;if(g+t>=a)return a-g}return t}var h=function(){var g=[].slice.call(arguments),y=this;return new Promise(function(E,S){var v=i&&s===void 0;if(s!==void 0&&clearTimeout(s),s=setTimeout(function(){if(s=void 0,c=Date.now(),!i){var P=e.apply(y,g);l&&l(P),u.forEach(function(A){return(0,A.resolve)(P)}),u=[]}},f()),v){var b=e.apply(y,g);return l&&l(b),E(b)}u.push({resolve:E,reject:S})})};return h.cancel=function(g){s!==void 0&&clearTimeout(s),u.forEach(function(y){return(0,y.reject)(g)}),u=[]},h}/*! + * vue-router v4.2.5 + * (c) 2023 Eduardo San Martin Morote + * @license MIT + */const Xt=typeof window<"u";function Fu(e){return e.__esModule||e[Symbol.toStringTag]==="Module"}const pe=Object.assign;function qr(e,t){const n={};for(const r in t){const o=t[r];n[r]=st(o)?o.map(e):e(o)}return n}const kn=()=>{},st=Array.isArray,zu=/\/$/,ju=e=>e.replace(zu,"");function Wr(e,t,n="/"){let r,o={},s="",i="";const l=t.indexOf("#");let a=t.indexOf("?");return l=0&&(a=-1),a>-1&&(r=t.slice(0,a),s=t.slice(a+1,l>-1?l:t.length),o=e(s)),l>-1&&(r=r||t.slice(0,l),i=t.slice(l,t.length)),r=Ku(r??t,n),{fullPath:r+(s&&"?")+s+i,path:r,query:o,hash:i}}function Uu(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function Os(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function qu(e,t,n){const r=t.matched.length-1,o=n.matched.length-1;return r>-1&&r===o&&fn(t.matched[r],n.matched[o])&&ml(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function fn(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function ml(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const n in e)if(!Wu(e[n],t[n]))return!1;return!0}function Wu(e,t){return st(e)?$s(e,t):st(t)?$s(t,e):e===t}function $s(e,t){return st(t)?e.length===t.length&&e.every((n,r)=>n===t[r]):e.length===1&&e[0]===t}function Ku(e,t){if(e.startsWith("/"))return e;if(!e)return t;const n=t.split("/"),r=e.split("/"),o=r[r.length-1];(o===".."||o===".")&&r.push("");let s=n.length-1,i,l;for(i=0;i1&&s--;else break;return n.slice(0,s).join("/")+"/"+r.slice(i-(i===r.length?1:0)).join("/")}var Mn;(function(e){e.pop="pop",e.push="push"})(Mn||(Mn={}));var An;(function(e){e.back="back",e.forward="forward",e.unknown=""})(An||(An={}));function Vu(e){if(!e)if(Xt){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),ju(e)}const Gu=/^[^#]+#/;function Ju(e,t){return e.replace(Gu,"#")+t}function Yu(e,t){const n=document.documentElement.getBoundingClientRect(),r=e.getBoundingClientRect();return{behavior:t.behavior,left:r.left-n.left-(t.left||0),top:r.top-n.top-(t.top||0)}}const Or=()=>({left:window.pageXOffset,top:window.pageYOffset});function Qu(e){let t;if("el"in e){const n=e.el,r=typeof n=="string"&&n.startsWith("#"),o=typeof n=="string"?r?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!o)return;t=Yu(o,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.pageXOffset,t.top!=null?t.top:window.pageYOffset)}function Is(e,t){return(history.state?history.state.position-t:-1)+e}const ao=new Map;function Zu(e,t){ao.set(e,t)}function Xu(e){const t=ao.get(e);return ao.delete(e),t}let ef=()=>location.protocol+"//"+location.host;function gl(e,t){const{pathname:n,search:r,hash:o}=t,s=e.indexOf("#");if(s>-1){let l=o.includes(e.slice(s))?e.slice(s).length:1,a=o.slice(l);return a[0]!=="/"&&(a="/"+a),Os(a,"")}return Os(n,e)+r+o}function tf(e,t,n,r){let o=[],s=[],i=null;const l=({state:h})=>{const g=gl(e,location),y=n.value,E=t.value;let S=0;if(h){if(n.value=g,t.value=h,i&&i===y){i=null;return}S=E?h.position-E.position:0}else r(g);o.forEach(v=>{v(n.value,y,{delta:S,type:Mn.pop,direction:S?S>0?An.forward:An.back:An.unknown})})};function a(){i=n.value}function c(h){o.push(h);const g=()=>{const y=o.indexOf(h);y>-1&&o.splice(y,1)};return s.push(g),g}function u(){const{history:h}=window;h.state&&h.replaceState(pe({},h.state,{scroll:Or()}),"")}function f(){for(const h of s)h();s=[],window.removeEventListener("popstate",l),window.removeEventListener("beforeunload",u)}return window.addEventListener("popstate",l),window.addEventListener("beforeunload",u,{passive:!0}),{pauseListeners:a,listen:c,destroy:f}}function Ms(e,t,n,r=!1,o=!1){return{back:e,current:t,forward:n,replaced:r,position:window.history.length,scroll:o?Or():null}}function nf(e){const{history:t,location:n}=window,r={value:gl(e,n)},o={value:t.state};o.value||s(r.value,{back:null,current:r.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function s(a,c,u){const f=e.indexOf("#"),h=f>-1?(n.host&&document.querySelector("base")?e:e.slice(f))+a:ef()+e+a;try{t[u?"replaceState":"pushState"](c,"",h),o.value=c}catch(g){console.error(g),n[u?"replace":"assign"](h)}}function i(a,c){const u=pe({},t.state,Ms(o.value.back,a,o.value.forward,!0),c,{position:o.value.position});s(a,u,!0),r.value=a}function l(a,c){const u=pe({},o.value,t.state,{forward:a,scroll:Or()});s(u.current,u,!0);const f=pe({},Ms(r.value,a,null),{position:u.position+1},c);s(a,f,!1),r.value=a}return{location:r,state:o,push:l,replace:i}}function rf(e){e=Vu(e);const t=nf(e),n=tf(e,t.state,t.location,t.replace);function r(s,i=!0){i||n.pauseListeners(),history.go(s)}const o=pe({location:"",base:e,go:r,createHref:Ju.bind(null,e)},t,n);return Object.defineProperty(o,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(o,"state",{enumerable:!0,get:()=>t.state.value}),o}function of(e){return typeof e=="string"||e&&typeof e=="object"}function vl(e){return typeof e=="string"||typeof e=="symbol"}const ht={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0},_l=Symbol("");var Ns;(function(e){e[e.aborted=4]="aborted",e[e.cancelled=8]="cancelled",e[e.duplicated=16]="duplicated"})(Ns||(Ns={}));function dn(e,t){return pe(new Error,{type:e,[_l]:!0},t)}function ft(e,t){return e instanceof Error&&_l in e&&(t==null||!!(e.type&t))}const Hs="[^/]+?",sf={sensitive:!1,strict:!1,start:!0,end:!0},lf=/[.+*?^${}()[\]/\\]/g;function af(e,t){const n=pe({},sf,t),r=[];let o=n.start?"^":"";const s=[];for(const c of e){const u=c.length?[]:[90];n.strict&&!c.length&&(o+="/");for(let f=0;ft.length?t.length===1&&t[0]===40+40?1:-1:0}function uf(e,t){let n=0;const r=e.score,o=t.score;for(;n0&&t[t.length-1]<0}const ff={type:0,value:""},df=/[a-zA-Z0-9_]/;function hf(e){if(!e)return[[]];if(e==="/")return[[ff]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(g){throw new Error(`ERR (${n})/"${c}": ${g}`)}let n=0,r=n;const o=[];let s;function i(){s&&o.push(s),s=[]}let l=0,a,c="",u="";function f(){c&&(n===0?s.push({type:0,value:c}):n===1||n===2||n===3?(s.length>1&&(a==="*"||a==="+")&&t(`A repeatable param (${c}) must be alone in its segment. eg: '/:ids+.`),s.push({type:1,value:c,regexp:u,repeatable:a==="*"||a==="+",optional:a==="*"||a==="?"})):t("Invalid state to consume buffer"),c="")}function h(){c+=a}for(;l{i(b)}:kn}function i(u){if(vl(u)){const f=r.get(u);f&&(r.delete(u),n.splice(n.indexOf(f),1),f.children.forEach(i),f.alias.forEach(i))}else{const f=n.indexOf(u);f>-1&&(n.splice(f,1),u.record.name&&r.delete(u.record.name),u.children.forEach(i),u.alias.forEach(i))}}function l(){return n}function a(u){let f=0;for(;f=0&&(u.record.path!==n[f].record.path||!bl(u,n[f]));)f++;n.splice(f,0,u),u.record.name&&!Fs(u)&&r.set(u.record.name,u)}function c(u,f){let h,g={},y,E;if("name"in u&&u.name){if(h=r.get(u.name),!h)throw dn(1,{location:u});E=h.record.name,g=pe(Bs(f.params,h.keys.filter(b=>!b.optional).map(b=>b.name)),u.params&&Bs(u.params,h.keys.map(b=>b.name))),y=h.stringify(g)}else if("path"in u)y=u.path,h=n.find(b=>b.re.test(y)),h&&(g=h.parse(y),E=h.record.name);else{if(h=f.name?r.get(f.name):n.find(b=>b.re.test(f.path)),!h)throw dn(1,{location:u,currentLocation:f});E=h.record.name,g=pe({},f.params,u.params),y=h.stringify(g)}const S=[];let v=h;for(;v;)S.unshift(v.record),v=v.parent;return{name:E,path:y,params:g,matched:S,meta:_f(S)}}return e.forEach(u=>s(u)),{addRoute:s,resolve:c,removeRoute:i,getRoutes:l,getRecordMatcher:o}}function Bs(e,t){const n={};for(const r of t)r in e&&(n[r]=e[r]);return n}function gf(e){return{path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:void 0,beforeEnter:e.beforeEnter,props:vf(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}}}function vf(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const r in e.components)t[r]=typeof n=="object"?n[r]:n;return t}function Fs(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function _f(e){return e.reduce((t,n)=>pe(t,n.meta),{})}function zs(e,t){const n={};for(const r in e)n[r]=r in t?t[r]:e[r];return n}function bl(e,t){return t.children.some(n=>n===e||bl(e,n))}const yl=/#/g,bf=/&/g,yf=/\//g,wf=/=/g,Ef=/\?/g,wl=/\+/g,Cf=/%5B/g,xf=/%5D/g,El=/%5E/g,Lf=/%60/g,Cl=/%7B/g,Sf=/%7C/g,xl=/%7D/g,Tf=/%20/g;function Bo(e){return encodeURI(""+e).replace(Sf,"|").replace(Cf,"[").replace(xf,"]")}function kf(e){return Bo(e).replace(Cl,"{").replace(xl,"}").replace(El,"^")}function co(e){return Bo(e).replace(wl,"%2B").replace(Tf,"+").replace(yl,"%23").replace(bf,"%26").replace(Lf,"`").replace(Cl,"{").replace(xl,"}").replace(El,"^")}function Af(e){return co(e).replace(wf,"%3D")}function Pf(e){return Bo(e).replace(yl,"%23").replace(Ef,"%3F")}function Rf(e){return e==null?"":Pf(e).replace(yf,"%2F")}function vr(e){try{return decodeURIComponent(""+e)}catch{}return""+e}function Of(e){const t={};if(e===""||e==="?")return t;const r=(e[0]==="?"?e.slice(1):e).split("&");for(let o=0;os&&co(s)):[r&&co(r)]).forEach(s=>{s!==void 0&&(t+=(t.length?"&":"")+n,s!=null&&(t+="="+s))})}return t}function $f(e){const t={};for(const n in e){const r=e[n];r!==void 0&&(t[n]=st(r)?r.map(o=>o==null?null:""+o):r==null?r:""+r)}return t}const If=Symbol(""),Us=Symbol(""),$r=Symbol(""),Fo=Symbol(""),uo=Symbol("");function yn(){let e=[];function t(r){return e.push(r),()=>{const o=e.indexOf(r);o>-1&&e.splice(o,1)}}function n(){e=[]}return{add:t,list:()=>e.slice(),reset:n}}function kt(e,t,n,r,o){const s=r&&(r.enterCallbacks[o]=r.enterCallbacks[o]||[]);return()=>new Promise((i,l)=>{const a=f=>{f===!1?l(dn(4,{from:n,to:t})):f instanceof Error?l(f):of(f)?l(dn(2,{from:t,to:f})):(s&&r.enterCallbacks[o]===s&&typeof f=="function"&&s.push(f),i())},c=e.call(r&&r.instances[o],t,n,a);let u=Promise.resolve(c);e.length<3&&(u=u.then(a)),u.catch(f=>l(f))})}function Kr(e,t,n,r){const o=[];for(const s of e)for(const i in s.components){let l=s.components[i];if(!(t!=="beforeRouteEnter"&&!s.instances[i]))if(Mf(l)){const c=(l.__vccOpts||l)[t];c&&o.push(kt(c,n,r,s,i))}else{let a=l();o.push(()=>a.then(c=>{if(!c)return Promise.reject(new Error(`Couldn't resolve component "${i}" at "${s.path}"`));const u=Fu(c)?c.default:c;s.components[i]=u;const h=(u.__vccOpts||u)[t];return h&&kt(h,n,r,s,i)()}))}}return o}function Mf(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function qs(e){const t=Se($r),n=Se(Fo),r=j(()=>t.resolve(Z(e.to))),o=j(()=>{const{matched:a}=r.value,{length:c}=a,u=a[c-1],f=n.matched;if(!u||!f.length)return-1;const h=f.findIndex(fn.bind(null,u));if(h>-1)return h;const g=Ws(a[c-2]);return c>1&&Ws(u)===g&&f[f.length-1].path!==g?f.findIndex(fn.bind(null,a[c-2])):h}),s=j(()=>o.value>-1&&Bf(n.params,r.value.params)),i=j(()=>o.value>-1&&o.value===n.matched.length-1&&ml(n.params,r.value.params));function l(a={}){return Df(a)?t[Z(e.replace)?"replace":"push"](Z(e.to)).catch(kn):Promise.resolve()}return{route:r,href:j(()=>r.value.href),isActive:s,isExactActive:i,navigate:l}}const Nf=de({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"}},useLink:qs,setup(e,{slots:t}){const n=Bn(qs(e)),{options:r}=Se($r),o=j(()=>({[Ks(e.activeClass,r.linkActiveClass,"router-link-active")]:n.isActive,[Ks(e.exactActiveClass,r.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const s=t.default&&t.default(n);return e.custom?s:ge("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:o.value},s)}}}),Hf=Nf;function Df(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function Bf(e,t){for(const n in t){const r=t[n],o=e[n];if(typeof r=="string"){if(r!==o)return!1}else if(!st(o)||o.length!==r.length||r.some((s,i)=>s!==o[i]))return!1}return!0}function Ws(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const Ks=(e,t,n)=>e??t??n,Ff=de({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const r=Se(uo),o=j(()=>e.route||r.value),s=Se(Us,0),i=j(()=>{let c=Z(s);const{matched:u}=o.value;let f;for(;(f=u[c])&&!f.components;)c++;return c}),l=j(()=>o.value.matched[i.value]);qt(Us,j(()=>i.value+1)),qt(If,l),qt(uo,o);const a=Ee();return ot(()=>[a.value,l.value,e.name],([c,u,f],[h,g,y])=>{u&&(u.instances[f]=c,g&&g!==u&&c&&c===h&&(u.leaveGuards.size||(u.leaveGuards=g.leaveGuards),u.updateGuards.size||(u.updateGuards=g.updateGuards))),c&&u&&(!g||!fn(u,g)||!h)&&(u.enterCallbacks[f]||[]).forEach(E=>E(c))},{flush:"post"}),()=>{const c=o.value,u=e.name,f=l.value,h=f&&f.components[u];if(!h)return Vs(n.default,{Component:h,route:c});const g=f.props[u],y=g?g===!0?c.params:typeof g=="function"?g(c):g:null,S=ge(h,pe({},y,t,{onVnodeUnmounted:v=>{v.component.isUnmounted&&(f.instances[u]=null)},ref:a}));return Vs(n.default,{Component:S,route:c})||S}}});function Vs(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const Ll=Ff;function zf(e){const t=mf(e.routes,e),n=e.parseQuery||Of,r=e.stringifyQuery||js,o=e.history,s=yn(),i=yn(),l=yn(),a=So(ht);let c=ht;Xt&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const u=qr.bind(null,C=>""+C),f=qr.bind(null,Rf),h=qr.bind(null,vr);function g(C,F){let I,K;return vl(C)?(I=t.getRecordMatcher(C),K=F):K=C,t.addRoute(K,I)}function y(C){const F=t.getRecordMatcher(C);F&&t.removeRoute(F)}function E(){return t.getRoutes().map(C=>C.record)}function S(C){return!!t.getRecordMatcher(C)}function v(C,F){if(F=pe({},F||a.value),typeof C=="string"){const _=Wr(n,C,F.path),w=t.resolve({path:_.path},F),x=o.createHref(_.fullPath);return pe(_,w,{params:h(w.params),hash:vr(_.hash),redirectedFrom:void 0,href:x})}let I;if("path"in C)I=pe({},C,{path:Wr(n,C.path,F.path).path});else{const _=pe({},C.params);for(const w in _)_[w]==null&&delete _[w];I=pe({},C,{params:f(_)}),F.params=f(F.params)}const K=t.resolve(I,F),ae=C.hash||"";K.params=u(h(K.params));const d=Uu(r,pe({},C,{hash:kf(ae),path:K.path})),p=o.createHref(d);return pe({fullPath:d,hash:ae,query:r===js?$f(C.query):C.query||{}},K,{redirectedFrom:void 0,href:p})}function b(C){return typeof C=="string"?Wr(n,C,a.value.path):pe({},C)}function P(C,F){if(c!==C)return dn(8,{from:F,to:C})}function A(C){return N(C)}function W(C){return A(pe(b(C),{replace:!0}))}function X(C){const F=C.matched[C.matched.length-1];if(F&&F.redirect){const{redirect:I}=F;let K=typeof I=="function"?I(C):I;return typeof K=="string"&&(K=K.includes("?")||K.includes("#")?K=b(K):{path:K},K.params={}),pe({query:C.query,hash:C.hash,params:"path"in K?{}:C.params},K)}}function N(C,F){const I=c=v(C),K=a.value,ae=C.state,d=C.force,p=C.replace===!0,_=X(I);if(_)return N(pe(b(_),{state:typeof _=="object"?pe({},ae,_.state):ae,force:d,replace:p}),F||I);const w=I;w.redirectedFrom=F;let x;return!d&&qu(r,K,I)&&(x=dn(16,{to:w,from:K}),ze(K,K,!0,!1)),(x?Promise.resolve(x):H(w,K)).catch(T=>ft(T)?ft(T,2)?T:Ie(T):re(T,w,K)).then(T=>{if(T){if(ft(T,2))return N(pe({replace:p},b(T.to),{state:typeof T.to=="object"?pe({},ae,T.to.state):ae,force:d}),F||w)}else T=L(w,K,!0,p,ae);return V(w,K,T),T})}function m(C,F){const I=P(C,F);return I?Promise.reject(I):Promise.resolve()}function z(C){const F=Et.values().next().value;return F&&typeof F.runWithContext=="function"?F.runWithContext(C):C()}function H(C,F){let I;const[K,ae,d]=jf(C,F);I=Kr(K.reverse(),"beforeRouteLeave",C,F);for(const _ of K)_.leaveGuards.forEach(w=>{I.push(kt(w,C,F))});const p=m.bind(null,C,F);return I.push(p),Re(I).then(()=>{I=[];for(const _ of s.list())I.push(kt(_,C,F));return I.push(p),Re(I)}).then(()=>{I=Kr(ae,"beforeRouteUpdate",C,F);for(const _ of ae)_.updateGuards.forEach(w=>{I.push(kt(w,C,F))});return I.push(p),Re(I)}).then(()=>{I=[];for(const _ of d)if(_.beforeEnter)if(st(_.beforeEnter))for(const w of _.beforeEnter)I.push(kt(w,C,F));else I.push(kt(_.beforeEnter,C,F));return I.push(p),Re(I)}).then(()=>(C.matched.forEach(_=>_.enterCallbacks={}),I=Kr(d,"beforeRouteEnter",C,F),I.push(p),Re(I))).then(()=>{I=[];for(const _ of i.list())I.push(kt(_,C,F));return I.push(p),Re(I)}).catch(_=>ft(_,8)?_:Promise.reject(_))}function V(C,F,I){l.list().forEach(K=>z(()=>K(C,F,I)))}function L(C,F,I,K,ae){const d=P(C,F);if(d)return d;const p=F===ht,_=Xt?history.state:{};I&&(K||p?o.replace(C.fullPath,pe({scroll:p&&_&&_.scroll},ae)):o.push(C.fullPath,ae)),a.value=C,ze(C,F,I,p),Ie()}let O;function $(){O||(O=o.listen((C,F,I)=>{if(!it.listening)return;const K=v(C),ae=X(K);if(ae){N(pe(ae,{replace:!0}),K).catch(kn);return}c=K;const d=a.value;Xt&&Zu(Is(d.fullPath,I.delta),Or()),H(K,d).catch(p=>ft(p,12)?p:ft(p,2)?(N(p.to,K).then(_=>{ft(_,20)&&!I.delta&&I.type===Mn.pop&&o.go(-1,!1)}).catch(kn),Promise.reject()):(I.delta&&o.go(-I.delta,!1),re(p,K,d))).then(p=>{p=p||L(K,d,!1),p&&(I.delta&&!ft(p,8)?o.go(-I.delta,!1):I.type===Mn.pop&&ft(p,20)&&o.go(-1,!1)),V(K,d,p)}).catch(kn)}))}let ie=yn(),U=yn(),ne;function re(C,F,I){Ie(C);const K=U.list();return K.length?K.forEach(ae=>ae(C,F,I)):console.error(C),Promise.reject(C)}function Ne(){return ne&&a.value!==ht?Promise.resolve():new Promise((C,F)=>{ie.add([C,F])})}function Ie(C){return ne||(ne=!C,$(),ie.list().forEach(([F,I])=>C?I(C):F()),ie.reset()),C}function ze(C,F,I,K){const{scrollBehavior:ae}=e;if(!Xt||!ae)return Promise.resolve();const d=!I&&Xu(Is(C.fullPath,0))||(K||!I)&&history.state&&history.state.scroll||null;return Cr().then(()=>ae(C,F,d)).then(p=>p&&Qu(p)).catch(p=>re(p,C,F))}const He=C=>o.go(C);let wt;const Et=new Set,it={currentRoute:a,listening:!0,addRoute:g,removeRoute:y,hasRoute:S,getRoutes:E,resolve:v,options:e,push:A,replace:W,go:He,back:()=>He(-1),forward:()=>He(1),beforeEach:s.add,beforeResolve:i.add,afterEach:l.add,onError:U.add,isReady:Ne,install(C){const F=this;C.component("RouterLink",Hf),C.component("RouterView",Ll),C.config.globalProperties.$router=F,Object.defineProperty(C.config.globalProperties,"$route",{enumerable:!0,get:()=>Z(a)}),Xt&&!wt&&a.value===ht&&(wt=!0,A(o.location).catch(ae=>{}));const I={};for(const ae in ht)Object.defineProperty(I,ae,{get:()=>a.value[ae],enumerable:!0});C.provide($r,F),C.provide(Fo,xi(I)),C.provide(uo,a);const K=C.unmount;Et.add(C),C.unmount=function(){Et.delete(C),Et.size<1&&(c=ht,O&&O(),O=null,a.value=ht,wt=!1,ne=!1),K()}}};function Re(C){return C.reduce((F,I)=>F.then(()=>z(I)),Promise.resolve())}return it}function jf(e,t){const n=[],r=[],o=[],s=Math.max(t.matched.length,e.matched.length);for(let i=0;ifn(c,l))?r.push(l):n.push(l));const a=e.matched[i];a&&(t.matched.find(c=>fn(c,a))||o.push(a))}return[n,r,o]}function gn(){return Se($r)}function Gt(){return Se(Fo)}const Uf=({headerLinkSelector:e,headerAnchorSelector:t,delay:n,offset:r=5})=>{const o=gn(),i=pl(()=>{var E,S;const l=Math.max(window.scrollY,document.documentElement.scrollTop,document.body.scrollTop);if(Math.abs(l-0)h.some(b=>b.hash===v.hash));for(let v=0;v=(((E=b.parentElement)==null?void 0:E.offsetTop)??0)-r,W=!P||l<(((S=P.parentElement)==null?void 0:S.offsetTop)??0)-r;if(!(A&&W))continue;const N=decodeURIComponent(o.currentRoute.value.hash),m=decodeURIComponent(b.hash);if(N===m)return;if(f){for(let z=v+1;z{window.addEventListener("scroll",i)}),Tr(()=>{window.removeEventListener("scroll",i)})},Gs=async(e,t)=>{const{scrollBehavior:n}=e.options;e.options.scrollBehavior=void 0,await e.replace({query:e.currentRoute.value.query,hash:t}).finally(()=>e.options.scrollBehavior=n)},qf="a.sidebar-item",Wf=".header-anchor",Kf=300,Vf=5,Gf=It({setup(){Uf({headerLinkSelector:qf,headerAnchorSelector:Wf,delay:Kf,offset:Vf})}}),Js=()=>window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,Jf=()=>window.scrollTo({top:0,behavior:"smooth"});const Yf=de({name:"BackToTop",setup(){const e=Ee(0),t=j(()=>e.value>300),n=pl(()=>{e.value=Js()},100);Ze(()=>{e.value=Js(),window.addEventListener("scroll",()=>n())});const r=ge("div",{class:"back-to-top",onClick:Jf});return()=>ge(Un,{name:"back-to-top"},()=>t.value?r:null)}}),Qf=It({rootComponents:[Yf]});const Zf=ge("svg",{class:"external-link-icon",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",x:"0px",y:"0px",viewBox:"0 0 100 100",width:"15",height:"15"},[ge("path",{fill:"currentColor",d:"M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"}),ge("polygon",{fill:"currentColor",points:"45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"})]),Xf=de({name:"ExternalLinkIcon",props:{locales:{type:Object,required:!1,default:()=>({})}},setup(e){const t=Rr(),n=j(()=>e.locales[t.value]??{openInNewWindow:"open in new window"});return()=>ge("span",[Zf,ge("span",{class:"external-link-icon-sr-only"},n.value.openInNewWindow)])}}),ed={"/":{openInNewWindow:"open in new window"}},td=It({enhance({app:e}){e.component("ExternalLinkIcon",ge(Xf,{locales:ed}))}});/*! medium-zoom 1.0.8 | MIT License | https://github.com/francoischalifour/medium-zoom */var Dt=Object.assign||function(e){for(var t=1;t1&&arguments[1]!==void 0?arguments[1]:{},r=window.Promise||function(L){function O(){}L(O,O)},o=function(L){var O=L.target;if(O===z){y();return}P.indexOf(O)!==-1&&E({target:O})},s=function(){if(!(W||!m.original)){var L=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0;Math.abs(X-L)>N.scrollOffset&&setTimeout(y,150)}},i=function(L){var O=L.key||L.keyCode;(O==="Escape"||O==="Esc"||O===27)&&y()},l=function(){var L=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},O=L;if(L.background&&(z.style.background=L.background),L.container&&L.container instanceof Object&&(O.container=Dt({},N.container,L.container)),L.template){var $=sr(L.template)?L.template:document.querySelector(L.template);O.template=$}return N=Dt({},N,O),P.forEach(function(ie){ie.dispatchEvent(Zt("medium-zoom:update",{detail:{zoom:H}}))}),H},a=function(){var L=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};return e(Dt({},N,L))},c=function(){for(var L=arguments.length,O=Array(L),$=0;$0?O.reduce(function(U,ne){return[].concat(U,Qs(ne))},[]):P;return ie.forEach(function(U){U.classList.remove("medium-zoom-image"),U.dispatchEvent(Zt("medium-zoom:detach",{detail:{zoom:H}}))}),P=P.filter(function(U){return ie.indexOf(U)===-1}),H},f=function(L,O){var $=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return P.forEach(function(ie){ie.addEventListener("medium-zoom:"+L,O,$)}),A.push({type:"medium-zoom:"+L,listener:O,options:$}),H},h=function(L,O){var $=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return P.forEach(function(ie){ie.removeEventListener("medium-zoom:"+L,O,$)}),A=A.filter(function(ie){return!(ie.type==="medium-zoom:"+L&&ie.listener.toString()===O.toString())}),H},g=function(){var L=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},O=L.target,$=function(){var U={width:document.documentElement.clientWidth,height:document.documentElement.clientHeight,left:0,top:0,right:0,bottom:0},ne=void 0,re=void 0;if(N.container)if(N.container instanceof Object)U=Dt({},U,N.container),ne=U.width-U.left-U.right-N.margin*2,re=U.height-U.top-U.bottom-N.margin*2;else{var Ne=sr(N.container)?N.container:document.querySelector(N.container),Ie=Ne.getBoundingClientRect(),ze=Ie.width,He=Ie.height,wt=Ie.left,Et=Ie.top;U=Dt({},U,{width:ze,height:He,left:wt,top:Et})}ne=ne||U.width-N.margin*2,re=re||U.height-N.margin*2;var it=m.zoomedHd||m.original,Re=Ys(it)?ne:it.naturalWidth||ne,C=Ys(it)?re:it.naturalHeight||re,F=it.getBoundingClientRect(),I=F.top,K=F.left,ae=F.width,d=F.height,p=Math.min(Math.max(ae,Re),ne)/ae,_=Math.min(Math.max(d,C),re)/d,w=Math.min(p,_),x=(-K+(ne-ae)/2+N.margin+U.left)/w,T=(-I+(re-d)/2+N.margin+U.top)/w,D="scale("+w+") translate3d("+x+"px, "+T+"px, 0)";m.zoomed.style.transform=D,m.zoomedHd&&(m.zoomedHd.style.transform=D)};return new r(function(ie){if(O&&P.indexOf(O)===-1){ie(H);return}var U=function ze(){W=!1,m.zoomed.removeEventListener("transitionend",ze),m.original.dispatchEvent(Zt("medium-zoom:opened",{detail:{zoom:H}})),ie(H)};if(m.zoomed){ie(H);return}if(O)m.original=O;else if(P.length>0){var ne=P;m.original=ne[0]}else{ie(H);return}if(m.original.dispatchEvent(Zt("medium-zoom:open",{detail:{zoom:H}})),X=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,W=!0,m.zoomed=od(m.original),document.body.appendChild(z),N.template){var re=sr(N.template)?N.template:document.querySelector(N.template);m.template=document.createElement("div"),m.template.appendChild(re.content.cloneNode(!0)),document.body.appendChild(m.template)}if(m.original.parentElement&&m.original.parentElement.tagName==="PICTURE"&&m.original.currentSrc&&(m.zoomed.src=m.original.currentSrc),document.body.appendChild(m.zoomed),window.requestAnimationFrame(function(){document.body.classList.add("medium-zoom--opened")}),m.original.classList.add("medium-zoom-image--hidden"),m.zoomed.classList.add("medium-zoom-image--opened"),m.zoomed.addEventListener("click",y),m.zoomed.addEventListener("transitionend",U),m.original.getAttribute("data-zoom-src")){m.zoomedHd=m.zoomed.cloneNode(),m.zoomedHd.removeAttribute("srcset"),m.zoomedHd.removeAttribute("sizes"),m.zoomedHd.removeAttribute("loading"),m.zoomedHd.src=m.zoomed.getAttribute("data-zoom-src"),m.zoomedHd.onerror=function(){clearInterval(Ne),console.warn("Unable to reach the zoom image target "+m.zoomedHd.src),m.zoomedHd=null,$()};var Ne=setInterval(function(){m.zoomedHd.complete&&(clearInterval(Ne),m.zoomedHd.classList.add("medium-zoom-image--opened"),m.zoomedHd.addEventListener("click",y),document.body.appendChild(m.zoomedHd),$())},10)}else if(m.original.hasAttribute("srcset")){m.zoomedHd=m.zoomed.cloneNode(),m.zoomedHd.removeAttribute("sizes"),m.zoomedHd.removeAttribute("loading");var Ie=m.zoomedHd.addEventListener("load",function(){m.zoomedHd.removeEventListener("load",Ie),m.zoomedHd.classList.add("medium-zoom-image--opened"),m.zoomedHd.addEventListener("click",y),document.body.appendChild(m.zoomedHd),$()})}else $()})},y=function(){return new r(function(L){if(W||!m.original){L(H);return}var O=function $(){m.original.classList.remove("medium-zoom-image--hidden"),document.body.removeChild(m.zoomed),m.zoomedHd&&document.body.removeChild(m.zoomedHd),document.body.removeChild(z),m.zoomed.classList.remove("medium-zoom-image--opened"),m.template&&document.body.removeChild(m.template),W=!1,m.zoomed.removeEventListener("transitionend",$),m.original.dispatchEvent(Zt("medium-zoom:closed",{detail:{zoom:H}})),m.original=null,m.zoomed=null,m.zoomedHd=null,m.template=null,L(H)};W=!0,document.body.classList.remove("medium-zoom--opened"),m.zoomed.style.transform="",m.zoomedHd&&(m.zoomedHd.style.transform=""),m.template&&(m.template.style.transition="opacity 150ms",m.template.style.opacity=0),m.original.dispatchEvent(Zt("medium-zoom:close",{detail:{zoom:H}})),m.zoomed.addEventListener("transitionend",O)})},E=function(){var L=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},O=L.target;return m.original?y():g({target:O})},S=function(){return N},v=function(){return P},b=function(){return m.original},P=[],A=[],W=!1,X=0,N=n,m={original:null,zoomed:null,zoomedHd:null,template:null};Object.prototype.toString.call(t)==="[object Object]"?N=t:(t||typeof t=="string")&&c(t),N=Dt({margin:0,background:"#fff",scrollOffset:40,container:null,template:null},N);var z=rd(N.background);document.addEventListener("click",o),document.addEventListener("keyup",i),document.addEventListener("scroll",s),window.addEventListener("resize",y);var H={open:g,close:y,toggle:E,update:l,clone:a,attach:c,detach:u,on:f,off:h,getOptions:S,getImages:v,getZoomedImage:b};return H};function id(e,t){t===void 0&&(t={});var n=t.insertAt;if(!(!e||typeof document>"u")){var r=document.head||document.getElementsByTagName("head")[0],o=document.createElement("style");o.type="text/css",n==="top"&&r.firstChild?r.insertBefore(o,r.firstChild):r.appendChild(o),o.styleSheet?o.styleSheet.cssText=e:o.appendChild(document.createTextNode(e))}}var ld=".medium-zoom-overlay{position:fixed;top:0;right:0;bottom:0;left:0;opacity:0;transition:opacity .3s;will-change:opacity}.medium-zoom--opened .medium-zoom-overlay{cursor:pointer;cursor:zoom-out;opacity:1}.medium-zoom-image{cursor:pointer;cursor:zoom-in;transition:transform .3s cubic-bezier(.2,0,.2,1)!important}.medium-zoom-image--hidden{visibility:hidden}.medium-zoom-image--opened{position:relative;cursor:pointer;cursor:zoom-out;will-change:transform}";id(ld);const ad=sd,cd=Symbol("mediumZoom");const ud=".theme-default-content > img, .theme-default-content :not(a) > img",fd={},dd=300,hd=It({enhance({app:e,router:t}){const n=ad(fd);n.refresh=(r=ud)=>{n.detach(),n.attach(r)},e.provide(cd,n),t.afterEach(()=>{setTimeout(()=>n.refresh(),dd)})}});/** + * NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress + * @license MIT + */const ce={settings:{minimum:.08,easing:"ease",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,barSelector:'[role="bar"]',parent:"body",template:'
'},status:null,set:e=>{const t=ce.isStarted();e=Vr(e,ce.settings.minimum,1),ce.status=e===1?null:e;const n=ce.render(!t),r=n.querySelector(ce.settings.barSelector),o=ce.settings.speed,s=ce.settings.easing;return n.offsetWidth,pd(i=>{er(r,{transform:"translate3d("+Zs(e)+"%,0,0)",transition:"all "+o+"ms "+s}),e===1?(er(n,{transition:"none",opacity:"1"}),n.offsetWidth,setTimeout(function(){er(n,{transition:"all "+o+"ms linear",opacity:"0"}),setTimeout(function(){ce.remove(),i()},o)},o)):setTimeout(()=>i(),o)}),ce},isStarted:()=>typeof ce.status=="number",start:()=>{ce.status||ce.set(0);const e=()=>{setTimeout(()=>{ce.status&&(ce.trickle(),e())},ce.settings.trickleSpeed)};return ce.settings.trickle&&e(),ce},done:e=>!e&&!ce.status?ce:ce.inc(.3+.5*Math.random()).set(1),inc:e=>{let t=ce.status;return t?(typeof e!="number"&&(e=(1-t)*Vr(Math.random()*t,.1,.95)),t=Vr(t+e,0,.994),ce.set(t)):ce.start()},trickle:()=>ce.inc(Math.random()*ce.settings.trickleRate),render:e=>{if(ce.isRendered())return document.getElementById("nprogress");Xs(document.documentElement,"nprogress-busy");const t=document.createElement("div");t.id="nprogress",t.innerHTML=ce.settings.template;const n=t.querySelector(ce.settings.barSelector),r=e?"-100":Zs(ce.status||0),o=document.querySelector(ce.settings.parent);return er(n,{transition:"all 0 linear",transform:"translate3d("+r+"%,0,0)"}),o!==document.body&&Xs(o,"nprogress-custom-parent"),o==null||o.appendChild(t),t},remove:()=>{ei(document.documentElement,"nprogress-busy"),ei(document.querySelector(ce.settings.parent),"nprogress-custom-parent");const e=document.getElementById("nprogress");e&&md(e)},isRendered:()=>!!document.getElementById("nprogress")},Vr=(e,t,n)=>en?n:e,Zs=e=>(-1+e)*100,pd=function(){const e=[];function t(){const n=e.shift();n&&n(t)}return function(n){e.push(n),e.length===1&&t()}}(),er=function(){const e=["Webkit","O","Moz","ms"],t={};function n(i){return i.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,function(l,a){return a.toUpperCase()})}function r(i){const l=document.body.style;if(i in l)return i;let a=e.length;const c=i.charAt(0).toUpperCase()+i.slice(1);let u;for(;a--;)if(u=e[a]+c,u in l)return u;return i}function o(i){return i=n(i),t[i]??(t[i]=r(i))}function s(i,l,a){l=o(l),i.style[l]=a}return function(i,l){for(const a in l){const c=l[a];c!==void 0&&Object.prototype.hasOwnProperty.call(l,a)&&s(i,a,c)}}}(),Sl=(e,t)=>(typeof e=="string"?e:zo(e)).indexOf(" "+t+" ")>=0,Xs=(e,t)=>{const n=zo(e),r=n+t;Sl(n,t)||(e.className=r.substring(1))},ei=(e,t)=>{const n=zo(e);if(!Sl(e,t))return;const r=n.replace(" "+t+" "," ");e.className=r.substring(1,r.length-1)},zo=e=>(" "+(e.className||"")+" ").replace(/\s+/gi," "),md=e=>{e&&e.parentNode&&e.parentNode.removeChild(e)};const gd=()=>{Ze(()=>{const e=gn(),t=new Set;t.add(e.currentRoute.value.path),e.beforeEach(n=>{t.has(n.path)||ce.start()}),e.afterEach(n=>{t.add(n.path),ce.done()})})},vd=It({setup(){gd()}}),_d=JSON.parse(`{"logo":"/images/logo.png","sidebar":["README.md","getting-started.md","/resources.md",{"text":"GBA Doc","link":"https://gbadev.net/gbadoc/"},{"text":"TONC, the GBA tutorial","link":"https://gbadev.net/tonc/"},{"text":"Events","children":[{"text":"GBA Jam 2024","link":"https://itch.io/jam/gbajam24"},{"text":"GBA Microjam 2023","link":"https://itch.io/jam/gba-microjam-23"},{"text":"GBA Winter Jam 2023","link":"https://itch.io/jam/gba-winter-jam-23"},"/gbajam22.md",{"text":"GBA Winter Jam 2021","link":"https://itch.io/jam/gba-winter-jam-2021"},{"text":"GBA Jam 2021","link":"https://itch.io/jam/gbajam21"}]},{"text":"GBA Homebrew Games","link":"https://hh.gbdev.io/games/gba"}],"contributors":false,"navbar":[{"text":"GitHub","link":"https://github.com/gbadev-org"},{"text":"Mastodon","link":"https://fedi.gbdev.io/@gbadev","rel":"me"},{"text":"OpenCollective","link":"https://opencollective.com/gbadev"},{"text":"Discord","link":"https://discord.gg/ctGSNxRkg2"},{"text":"Forum","link":"https://forum.gbadev.net"}],"locales":{"/":{"selectLanguageName":"English"}},"colorMode":"auto","colorModeSwitch":true,"repo":null,"selectLanguageText":"Languages","selectLanguageAriaLabel":"Select language","sidebarDepth":2,"editLink":true,"editLinkText":"Edit this page","lastUpdated":true,"lastUpdatedText":"Last Updated","contributorsText":"Contributors","notFound":["There's nothing here.","How did we get here?","That's a Four-Oh-Four.","Looks like we've got some broken links."],"backToHome":"Take me home","openInNewWindow":"open in new window","toggleColorMode":"toggle color mode","toggleSidebar":"toggle sidebar"}`),bd=Ee(_d),Tl=()=>bd,kl=Symbol(""),yd=()=>{const e=Se(kl);if(!e)throw new Error("useThemeLocaleData() is called without provider.");return e},wd=(e,t)=>{const{locales:n,...r}=e;return{...r,...n==null?void 0:n[t]}},Ed=It({enhance({app:e}){const t=Tl(),n=e._context.provides[Mo],r=j(()=>wd(t.value,n.value));e.provide(kl,r),Object.defineProperties(e.config.globalProperties,{$theme:{get(){return t.value}},$themeLocale:{get(){return r.value}}})}}),Cd=de({__name:"Badge",props:{type:{type:String,required:!1,default:"tip"},text:{type:String,required:!1,default:""},vertical:{type:String,required:!1,default:void 0}},setup(e){return(t,n)=>(B(),Q("span",{class:Ue(["badge",e.type]),style:Dn({verticalAlign:e.vertical})},[_e(t.$slots,"default",{},()=>[bt(Pe(e.text),1)])],6))}}),Ce=(e,t)=>{const n=e.__vccOpts||e;for(const[r,o]of t)n[r]=o;return n},xd=Ce(Cd,[["__file","Badge.vue"]]),Ld=de({name:"CodeGroup",slots:Object,setup(e,{slots:t}){const n=Ee(-1),r=Ee([]),o=(l=n.value)=>{l{l>0?n.value=l-1:n.value=r.value.length-1,r.value[n.value].focus()},i=(l,a)=>{l.key===" "||l.key==="Enter"?(l.preventDefault(),n.value=a):l.key==="ArrowRight"?(l.preventDefault(),o(a)):l.key==="ArrowLeft"&&(l.preventDefault(),s(a))};return()=>{var a;const l=(((a=t.default)==null?void 0:a.call(t))||[]).filter(c=>c.type.name==="CodeGroupItem").map(c=>(c.props===null&&(c.props={}),c));return l.length===0?null:(n.value<0||n.value>l.length-1?(n.value=l.findIndex(c=>c.props.active===""||c.props.active===!0),n.value===-1&&(n.value=0)):l.forEach((c,u)=>{c.props.active=u===n.value}),ge("div",{class:"code-group"},[ge("div",{class:"code-group__nav"},ge("ul",{class:"code-group__ul"},l.map((c,u)=>{const f=u===n.value;return ge("li",{class:"code-group__li"},ge("button",{ref:h=>{h&&(r.value[u]=h)},class:{"code-group__nav-tab":!0,"code-group__nav-tab-active":f},ariaPressed:f,ariaExpanded:f,onClick:()=>n.value=u,onKeydown:h=>i(h,u)},c.props.title))}))),l]))}}}),Sd=["aria-selected"],Td=de({name:"CodeGroupItem"}),kd=de({...Td,props:{title:{type:String,required:!0},active:{type:Boolean,required:!1,default:!1}},setup(e){return(t,n)=>(B(),Q("div",{class:Ue(["code-group-item",{"code-group-item__active":e.active}]),"aria-selected":e.active},[_e(t.$slots,"default")],10,Sd))}}),Ad=Ce(kd,[["__file","CodeGroupItem.vue"]]);function ti(e,t){var n;const r=So();return Mi(()=>{r.value=e()},{...t,flush:(n=t==null?void 0:t.flush)!=null?n:"sync"}),Fn(r)}function Pd(e,t){let n,r,o;const s=Ee(!0),i=()=>{s.value=!0,o()};ot(e,i,{flush:"sync"});const l=typeof t=="function"?t:t.get,a=typeof t=="function"?void 0:t.set,c=Ha((u,f)=>(r=u,o=f,{get(){return s.value&&(n=l(),s.value=!1),r(),n},set(h){a==null||a(h)}}));return Object.isExtensible(c)&&(c.trigger=i),c}function Al(e){return hi()?(ia(e),!0):!1}function hn(e){return typeof e=="function"?e():Z(e)}const Rd=typeof window<"u"&&typeof document<"u",Od=Object.prototype.toString,$d=e=>Od.call(e)==="[object Object]",Id=()=>{};function Md(e,t){function n(...r){return new Promise((o,s)=>{Promise.resolve(e(()=>t.apply(this,r),{fn:t,thisArg:this,args:r})).then(o).catch(s)})}return n}const Pl=e=>e();function Nd(e=Pl){const t=Ee(!0);function n(){t.value=!1}function r(){t.value=!0}const o=(...s)=>{t.value&&e(...s)};return{isActive:Fn(t),pause:n,resume:r,eventFilter:o}}function Hd(e,t,n={}){const{eventFilter:r=Pl,...o}=n;return ot(e,Md(r,t),o)}function Dd(e,t,n={}){const{eventFilter:r,...o}=n,{eventFilter:s,pause:i,resume:l,isActive:a}=Nd(r);return{stop:Hd(e,t,{...o,eventFilter:s}),pause:i,resume:l,isActive:a}}function Bd(e=!1,t={}){const{truthyValue:n=!0,falsyValue:r=!1}=t,o=$e(e),s=Ee(e);function i(l){if(arguments.length)return s.value=l,s.value;{const a=hn(n);return s.value=s.value===a?hn(r):a,s.value}}return o?i:[s,i]}function Fd(e){var t;const n=hn(e);return(t=n==null?void 0:n.$el)!=null?t:n}const _r=Rd?window:void 0;function ni(...e){let t,n,r,o;if(typeof e[0]=="string"||Array.isArray(e[0])?([n,r,o]=e,t=_r):[t,n,r,o]=e,!t)return Id;Array.isArray(n)||(n=[n]),Array.isArray(r)||(r=[r]);const s=[],i=()=>{s.forEach(u=>u()),s.length=0},l=(u,f,h,g)=>(u.addEventListener(f,h,g),()=>u.removeEventListener(f,h,g)),a=ot(()=>[Fd(t),hn(o)],([u,f])=>{if(i(),!u)return;const h=$d(f)?{...f}:f;s.push(...n.flatMap(g=>r.map(y=>l(u,g,y,h))))},{immediate:!0,flush:"post"}),c=()=>{a(),i()};return Al(c),c}function zd(){const e=Ee(!1);return Xi()&&Ze(()=>{e.value=!0}),e}function jd(e){const t=zd();return j(()=>(t.value,!!e()))}function Ud(e,t={}){const{window:n=_r}=t,r=jd(()=>n&&"matchMedia"in n&&typeof n.matchMedia=="function");let o;const s=Ee(!1),i=c=>{s.value=c.matches},l=()=>{o&&("removeEventListener"in o?o.removeEventListener("change",i):o.removeListener(i))},a=Mi(()=>{r.value&&(l(),o=n.matchMedia(hn(e)),"addEventListener"in o?o.addEventListener("change",i):o.addListener(i),s.value=o.matches)});return Al(()=>{a(),l(),o=void 0}),s}const tr=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},nr="__vueuse_ssr_handlers__",qd=Wd();function Wd(){return nr in tr||(tr[nr]=tr[nr]||{}),tr[nr]}function Kd(e,t){return qd[e]||t}function Vd(e){return e==null?"any":e instanceof Set?"set":e instanceof Map?"map":e instanceof Date?"date":typeof e=="boolean"?"boolean":typeof e=="string"?"string":typeof e=="object"?"object":Number.isNaN(e)?"any":"number"}const Gd={boolean:{read:e=>e==="true",write:e=>String(e)},object:{read:e=>JSON.parse(e),write:e=>JSON.stringify(e)},number:{read:e=>Number.parseFloat(e),write:e=>String(e)},any:{read:e=>e,write:e=>String(e)},string:{read:e=>e,write:e=>String(e)},map:{read:e=>new Map(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))},set:{read:e=>new Set(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e))},date:{read:e=>new Date(e),write:e=>e.toISOString()}},ri="vueuse-storage";function Jd(e,t,n,r={}){var o;const{flush:s="pre",deep:i=!0,listenToStorageChanges:l=!0,writeDefaults:a=!0,mergeDefaults:c=!1,shallow:u,window:f=_r,eventFilter:h,onError:g=m=>{console.error(m)}}=r,y=(u?So:Ee)(t);if(!n)try{n=Kd("getDefaultStorage",()=>{var m;return(m=_r)==null?void 0:m.localStorage})()}catch(m){g(m)}if(!n)return y;const E=hn(t),S=Vd(E),v=(o=r.serializer)!=null?o:Gd[S],{pause:b,resume:P}=Dd(y,()=>A(y.value),{flush:s,deep:i,eventFilter:h});return f&&l&&(ni(f,"storage",N),ni(f,ri,X)),N(),y;function A(m){try{if(m==null)n.removeItem(e);else{const z=v.write(m),H=n.getItem(e);H!==z&&(n.setItem(e,z),f&&f.dispatchEvent(new CustomEvent(ri,{detail:{key:e,oldValue:H,newValue:z,storageArea:n}})))}}catch(z){g(z)}}function W(m){const z=m?m.newValue:n.getItem(e);if(z==null)return a&&E!==null&&n.setItem(e,v.write(E)),E;if(!m&&c){const H=v.read(z);return typeof c=="function"?c(H,E):S==="object"&&!Array.isArray(H)?{...E,...H}:H}else return typeof z!="string"?z:v.read(z)}function X(m){N(m.detail)}function N(m){if(!(m&&m.storageArea!==n)){if(m&&m.key==null){y.value=E;return}if(!(m&&m.key!==e)){b();try{(m==null?void 0:m.newValue)!==v.write(y.value)&&(y.value=W(m))}catch(z){g(z)}finally{m?Cr(P):P()}}}}}function Yd(e){return Ud("(prefers-color-scheme: dark)",e)}const Qd=()=>Tl(),Fe=()=>yd(),Rl=Symbol(""),jo=()=>{const e=Se(Rl);if(!e)throw new Error("useDarkMode() is called without provider.");return e},Zd=()=>{const e=Fe(),t=Yd(),n=Jd("vuepress-color-scheme",e.value.colorMode),r=j({get(){return e.value.colorModeSwitch?n.value==="auto"?t.value:n.value==="dark":e.value.colorMode==="dark"},set(o){o===t.value?n.value="auto":n.value=o?"dark":"light"}});qt(Rl,r),Xd(r)},Xd=e=>{const t=(n=e.value)=>{const r=window==null?void 0:window.document.querySelector("html");r==null||r.classList.toggle("dark",n)};Ze(()=>{ot(e,t,{immediate:!0})}),kr(()=>t())},Ol=(...e)=>{const n=gn().resolve(...e),r=n.matched[n.matched.length-1];if(!(r!=null&&r.redirect))return n;const{redirect:o}=r,s=oe(o)?o(n):o,i=he(s)?{path:s}:s;return Ol({hash:n.hash,query:n.query,params:n.params,...i})},Uo=e=>{const t=Ol(encodeURI(e));return{text:t.meta.title||e,link:t.name==="404"?e:t.fullPath}};let Gr=null,wn=null;const eh={wait:()=>Gr,pending:()=>{Gr=new Promise(e=>wn=e)},resolve:()=>{wn==null||wn(),Gr=null,wn=null}},$l=()=>eh,Il=Symbol("sidebarItems"),qo=()=>{const e=Se(Il);if(!e)throw new Error("useSidebarItems() is called without provider.");return e},th=()=>{const e=Fe(),t=mt(),n=j(()=>nh(t.value,e.value));qt(Il,n)},nh=(e,t)=>{const n=e.sidebar??t.sidebar??"auto",r=e.sidebarDepth??t.sidebarDepth??2;return e.home||n===!1?[]:n==="auto"?oh(r):Y(n)?Ml(n,r):Io(n)?sh(n,r):[]},rh=(e,t)=>({text:e.title,link:e.link,children:Wo(e.children,t)}),Wo=(e,t)=>t>0?e.map(n=>rh(n,t-1)):[],oh=e=>{const t=Kt();return[{text:t.value.title,children:Wo(t.value.headers,e)}]},Ml=(e,t)=>{const n=Gt(),r=Kt(),o=s=>{var l;let i;if(he(s)?i=Uo(s):i=s,i.children)return{...i,children:i.children.map(a=>o(a))};if(i.link===n.path){const a=((l=r.value.headers[0])==null?void 0:l.level)===1?r.value.headers[0].children:r.value.headers;return{...i,children:Wo(a,t)}}return i};return e.map(s=>o(s))},sh=(e,t)=>{const n=Gt(),r=sl(e,n.path),o=e[r]??[];return Ml(o,t)},ih="719px",lh={mobile:ih};var Nn;(function(e){e.MOBILE="mobile"})(Nn||(Nn={}));var ii;const ah={[Nn.MOBILE]:Number.parseInt((ii=lh.mobile)==null?void 0:ii.replace("px",""),10)},Nl=(e,t)=>{const n=ah[e];Number.isInteger(n)&&Ze(()=>{t(n),window.addEventListener("resize",()=>t(n),!1),window.addEventListener("orientationchange",()=>t(n),!1)})},ch={},uh={class:"theme-default-content"};function fh(e,t){const n=_t("Content");return B(),Q("div",uh,[ee(n)])}const dh=Ce(ch,[["render",fh],["__file","HomeContent.vue"]]),hh={key:0,class:"features"},ph=de({__name:"HomeFeatures",setup(e){const t=mt(),n=j(()=>Y(t.value.features)?t.value.features:[]);return(r,o)=>n.value.length?(B(),Q("div",hh,[(B(!0),Q(be,null,Ot(n.value,s=>(B(),Q("div",{key:s.title,class:"feature"},[se("h2",null,Pe(s.title),1),se("p",null,Pe(s.details),1)]))),128))])):Le("v-if",!0)}}),mh=Ce(ph,[["__file","HomeFeatures.vue"]]),gh=["innerHTML"],vh=["textContent"],_h=de({__name:"HomeFooter",setup(e){const t=mt(),n=j(()=>t.value.footer),r=j(()=>t.value.footerHtml);return(o,s)=>n.value?(B(),Q(be,{key:0},[Le(" eslint-disable-next-line vue/no-v-html "),r.value?(B(),Q("div",{key:0,class:"footer",innerHTML:n.value},null,8,gh)):(B(),Q("div",{key:1,class:"footer",textContent:Pe(n.value)},null,8,vh))],64)):Le("v-if",!0)}}),bh=Ce(_h,[["__file","HomeFooter.vue"]]),yh=["href","rel","target","aria-label"],wh=de({inheritAttrs:!1}),Eh=de({...wh,__name:"AutoLink",props:{item:{type:Object,required:!0}},setup(e){const t=e,n=Gt(),r=dl(),{item:o}=To(t),s=j(()=>qn(o.value.link)),i=j(()=>Tu(o.value.link)||ku(o.value.link)),l=j(()=>{if(!i.value){if(o.value.target)return o.value.target;if(s.value)return"_blank"}}),a=j(()=>l.value==="_blank"),c=j(()=>!s.value&&!i.value&&!a.value),u=j(()=>{if(!i.value){if(o.value.rel)return o.value.rel;if(a.value)return"noopener noreferrer"}}),f=j(()=>o.value.ariaLabel||o.value.text),h=j(()=>{const E=Object.keys(r.value.locales);return E.length?!E.some(S=>S===o.value.link):o.value.link!=="/"}),g=j(()=>h.value?n.path.startsWith(o.value.link):!1),y=j(()=>c.value?o.value.activeMatch?new RegExp(o.value.activeMatch).test(n.path):g.value:!1);return(E,S)=>{const v=_t("RouterLink"),b=_t("AutoLinkExternalIcon");return c.value?(B(),xe(v,io({key:0,class:{"router-link-active":y.value},to:Z(o).link,"aria-label":f.value},E.$attrs),{default:Oe(()=>[_e(E.$slots,"before"),bt(" "+Pe(Z(o).text)+" ",1),_e(E.$slots,"after")]),_:3},16,["class","to","aria-label"])):(B(),Q("a",io({key:1,class:"external-link",href:Z(o).link,rel:u.value,target:l.value,"aria-label":f.value},E.$attrs),[_e(E.$slots,"before"),bt(" "+Pe(Z(o).text)+" ",1),a.value?(B(),xe(b,{key:0})):Le("v-if",!0),_e(E.$slots,"after")],16,yh))}}}),gt=Ce(Eh,[["__file","AutoLink.vue"]]),Ch={class:"hero"},xh={key:0,id:"main-title"},Lh={key:1,class:"description"},Sh={key:2,class:"actions"},Th=de({__name:"HomeHero",setup(e){const t=mt(),n=No(),r=jo(),o=j(()=>r.value&&t.value.heroImageDark!==void 0?t.value.heroImageDark:t.value.heroImage),s=j(()=>t.value.heroAlt||l.value||"hero"),i=j(()=>t.value.heroHeight||280),l=j(()=>t.value.heroText===null?null:t.value.heroText||n.value.title||"Hello"),a=j(()=>t.value.tagline===null?null:t.value.tagline||n.value.description||"Welcome to your VuePress site"),c=j(()=>Y(t.value.actions)?t.value.actions.map(({text:f,link:h,type:g="primary"})=>({text:f,link:h,type:g})):[]),u=()=>{if(!o.value)return null;const f=ge("img",{src:Do(o.value),alt:s.value,height:i.value});return t.value.heroImageDark===void 0?f:ge(Ho,()=>f)};return(f,h)=>(B(),Q("header",Ch,[ee(u),l.value?(B(),Q("h1",xh,Pe(l.value),1)):Le("v-if",!0),a.value?(B(),Q("p",Lh,Pe(a.value),1)):Le("v-if",!0),c.value.length?(B(),Q("p",Sh,[(B(!0),Q(be,null,Ot(c.value,g=>(B(),xe(gt,{key:g.text,class:Ue(["action-button",[g.type]]),item:g},null,8,["class","item"]))),128))])):Le("v-if",!0)]))}}),kh=Ce(Th,[["__file","HomeHero.vue"]]),Ah={class:"home"},Ph=de({__name:"Home",setup(e){return(t,n)=>(B(),Q("main",Ah,[ee(kh),ee(mh),ee(dh),ee(bh)]))}}),Rh=Ce(Ph,[["__file","Home.vue"]]),Oh=de({__name:"NavbarBrand",setup(e){const t=Rr(),n=No(),r=Fe(),o=jo(),s=j(()=>r.value.home||t.value),i=j(()=>n.value.title),l=j(()=>o.value&&r.value.logoDark!==void 0?r.value.logoDark:r.value.logo),a=()=>{if(!l.value)return null;const c=ge("img",{class:"logo",src:Do(l.value),alt:i.value});return r.value.logoDark===void 0?c:ge(Ho,()=>c)};return(c,u)=>{const f=_t("RouterLink");return B(),xe(f,{to:s.value},{default:Oe(()=>[ee(a),i.value?(B(),Q("span",{key:0,class:Ue(["site-name",{"can-hide":l.value}])},Pe(i.value),3)):Le("v-if",!0)]),_:1},8,["to"])}}}),$h=Ce(Oh,[["__file","NavbarBrand.vue"]]),Ih=de({__name:"DropdownTransition",setup(e){const t=r=>{r.style.height=r.scrollHeight+"px"},n=r=>{r.style.height=""};return(r,o)=>(B(),xe(Un,{name:"dropdown",onEnter:t,onAfterEnter:n,onBeforeLeave:t},{default:Oe(()=>[_e(r.$slots,"default")]),_:3}))}}),Hl=Ce(Ih,[["__file","DropdownTransition.vue"]]),Mh=["aria-label"],Nh={class:"title"},Hh=se("span",{class:"arrow down"},null,-1),Dh=["aria-label"],Bh={class:"title"},Fh={class:"navbar-dropdown"},zh={class:"navbar-dropdown-subtitle"},jh={key:1},Uh={class:"navbar-dropdown-subitem-wrapper"},qh=de({__name:"NavbarDropdown",props:{item:{type:Object,required:!0}},setup(e){const t=e,{item:n}=To(t),r=j(()=>n.value.ariaLabel||n.value.text),o=Ee(!1),s=Gt();ot(()=>s.path,()=>{o.value=!1});const i=a=>{a.detail===0?o.value=!o.value:o.value=!1},l=(a,c)=>c[c.length-1]===a;return(a,c)=>(B(),Q("div",{class:Ue(["navbar-dropdown-wrapper",{open:o.value}])},[se("button",{class:"navbar-dropdown-title",type:"button","aria-label":r.value,onClick:i},[se("span",Nh,Pe(Z(n).text),1),Hh],8,Mh),se("button",{class:"navbar-dropdown-title-mobile",type:"button","aria-label":r.value,onClick:c[0]||(c[0]=u=>o.value=!o.value)},[se("span",Bh,Pe(Z(n).text),1),se("span",{class:Ue(["arrow",o.value?"down":"right"])},null,2)],8,Dh),ee(Hl,null,{default:Oe(()=>[fr(se("ul",Fh,[(B(!0),Q(be,null,Ot(Z(n).children,u=>(B(),Q("li",{key:u.text,class:"navbar-dropdown-item"},[u.children?(B(),Q(be,{key:0},[se("h4",zh,[u.link?(B(),xe(gt,{key:0,item:u,onFocusout:f=>l(u,Z(n).children)&&u.children.length===0&&(o.value=!1)},null,8,["item","onFocusout"])):(B(),Q("span",jh,Pe(u.text),1))]),se("ul",Uh,[(B(!0),Q(be,null,Ot(u.children,f=>(B(),Q("li",{key:f.link,class:"navbar-dropdown-subitem"},[ee(gt,{item:f,onFocusout:h=>l(f,u.children)&&l(u,Z(n).children)&&(o.value=!1)},null,8,["item","onFocusout"])]))),128))])],64)):(B(),xe(gt,{key:1,item:u,onFocusout:f=>l(u,Z(n).children)&&(o.value=!1)},null,8,["item","onFocusout"]))]))),128))],512),[[gr,o.value]])]),_:1})],2))}}),Wh=Ce(qh,[["__file","NavbarDropdown.vue"]]),oi=e=>decodeURI(e).replace(/#.*$/,"").replace(/(index)?\.(md|html)$/,""),Kh=(e,t)=>{if(t.hash===e)return!0;const n=oi(t.path),r=oi(e);return n===r},Dl=(e,t)=>e.link&&Kh(e.link,t)?!0:e.children?e.children.some(n=>Dl(n,t)):!1,Bl=e=>!qn(e)||/github\.com/.test(e)?"GitHub":/bitbucket\.org/.test(e)?"Bitbucket":/gitlab\.com/.test(e)?"GitLab":/gitee\.com/.test(e)?"Gitee":null,Vh={GitHub:":repo/edit/:branch/:path",GitLab:":repo/-/edit/:branch/:path",Gitee:":repo/edit/:branch/:path",Bitbucket:":repo/src/:branch/:path?mode=edit&spa=0&at=:branch&fileviewer=file-view-default"},Gh=({docsRepo:e,editLinkPattern:t})=>{if(t)return t;const n=Bl(e);return n!==null?Vh[n]:null},Jh=({docsRepo:e,docsBranch:t,docsDir:n,filePathRelative:r,editLinkPattern:o})=>{if(!r)return null;const s=Gh({docsRepo:e,editLinkPattern:o});return s?s.replace(/:repo/,qn(e)?e:`https://github.com/${e}`).replace(/:branch/,t).replace(/:path/,ol(`${rl(n)}/${r}`)):null},Yh={key:0,class:"navbar-items"},Qh=de({__name:"NavbarItems",setup(e){const t=()=>{const u=gn(),f=Rr(),h=dl(),g=No(),y=Qd(),E=Fe();return j(()=>{const S=Object.keys(h.value.locales);if(S.length<2)return[];const v=u.currentRoute.value.path,b=u.currentRoute.value.fullPath;return[{text:`${E.value.selectLanguageText}`,ariaLabel:`${E.value.selectLanguageAriaLabel??E.value.selectLanguageText}`,children:S.map(A=>{var H,V;const W=((H=h.value.locales)==null?void 0:H[A])??{},X=((V=y.value.locales)==null?void 0:V[A])??{},N=`${W.lang}`,m=X.selectLanguageName??N;let z;if(N===g.value.lang)z=b;else{const L=v.replace(f.value,A);u.getRoutes().some(O=>O.path===L)?z=b.replace(v,L):z=X.home??A}return{text:m,link:z}})}]})},n=()=>{const u=Fe(),f=j(()=>u.value.repo),h=j(()=>f.value?Bl(f.value):null),g=j(()=>f.value&&!qn(f.value)?`https://github.com/${f.value}`:f.value),y=j(()=>g.value?u.value.repoLabel?u.value.repoLabel:h.value===null?"Source":h.value:null);return j(()=>!g.value||!y.value?[]:[{text:y.value,link:g.value}])},r=u=>he(u)?Uo(u):u.children?{...u,children:u.children.map(r)}:u,o=()=>{const u=Fe();return j(()=>(u.value.navbar||[]).map(r))},s=Ee(!1),i=o(),l=t(),a=n(),c=j(()=>[...i.value,...l.value,...a.value]);return Nl(Nn.MOBILE,u=>{window.innerWidthc.value.length?(B(),Q("nav",Yh,[(B(!0),Q(be,null,Ot(c.value,h=>(B(),Q("div",{key:h.text,class:"navbar-item"},[h.children?(B(),xe(Wh,{key:0,item:h,class:Ue(s.value?"mobile":"")},null,8,["item","class"])):(B(),xe(gt,{key:1,item:h},null,8,["item"]))]))),128))])):Le("v-if",!0)}}),Fl=Ce(Qh,[["__file","NavbarItems.vue"]]),Zh=["title"],Xh={class:"icon",focusable:"false",viewBox:"0 0 32 32"},ep=Nc('',9),tp=[ep],np={class:"icon",focusable:"false",viewBox:"0 0 32 32"},rp=se("path",{d:"M13.502 5.414a15.075 15.075 0 0 0 11.594 18.194a11.113 11.113 0 0 1-7.975 3.39c-.138 0-.278.005-.418 0a11.094 11.094 0 0 1-3.2-21.584M14.98 3a1.002 1.002 0 0 0-.175.016a13.096 13.096 0 0 0 1.825 25.981c.164.006.328 0 .49 0a13.072 13.072 0 0 0 10.703-5.555a1.01 1.01 0 0 0-.783-1.565A13.08 13.08 0 0 1 15.89 4.38A1.015 1.015 0 0 0 14.98 3z",fill:"currentColor"},null,-1),op=[rp],sp=de({__name:"ToggleColorModeButton",setup(e){const t=Fe(),n=jo(),r=()=>{n.value=!n.value};return(o,s)=>(B(),Q("button",{class:"toggle-color-mode-button",title:Z(t).toggleColorMode,onClick:r},[fr((B(),Q("svg",Xh,tp,512)),[[gr,!Z(n)]]),fr((B(),Q("svg",np,op,512)),[[gr,Z(n)]])],8,Zh))}}),ip=Ce(sp,[["__file","ToggleColorModeButton.vue"]]),lp=["title"],ap=se("div",{class:"icon","aria-hidden":"true"},[se("span"),se("span"),se("span")],-1),cp=[ap],up=de({__name:"ToggleSidebarButton",emits:["toggle"],setup(e){const t=Fe();return(n,r)=>(B(),Q("div",{class:"toggle-sidebar-button",title:Z(t).toggleSidebar,"aria-expanded":"false",role:"button",tabindex:"0",onClick:r[0]||(r[0]=o=>n.$emit("toggle"))},cp,8,lp))}}),fp=Ce(up,[["__file","ToggleSidebarButton.vue"]]),dp=de({__name:"Navbar",emits:["toggle-sidebar"],setup(e){const t=Fe(),n=Ee(null),r=Ee(null),o=Ee(0),s=j(()=>o.value?{maxWidth:o.value+"px"}:{});Nl(Nn.MOBILE,l=>{var c;const a=i(n.value,"paddingLeft")+i(n.value,"paddingRight");window.innerWidth{const c=_t("NavbarSearch");return B(),Q("header",{ref_key:"navbar",ref:n,class:"navbar"},[ee(fp,{onToggle:a[0]||(a[0]=u=>l.$emit("toggle-sidebar"))}),se("span",{ref_key:"navbarBrand",ref:r},[ee($h)],512),se("div",{class:"navbar-items-wrapper",style:Dn(s.value)},[_e(l.$slots,"before"),ee(Fl,{class:"can-hide"}),_e(l.$slots,"after"),Z(t).colorModeSwitch?(B(),xe(ip,{key:0})):Le("v-if",!0),ee(c)],4)],512)}}}),hp=Ce(dp,[["__file","Navbar.vue"]]),pp={class:"page-meta"},mp={key:0,class:"meta-item edit-link"},gp={key:1,class:"meta-item last-updated"},vp={class:"meta-item-label"},_p={class:"meta-item-info"},bp={key:2,class:"meta-item contributors"},yp={class:"meta-item-label"},wp={class:"meta-item-info"},Ep=["title"],Cp=de({__name:"PageMeta",setup(e){const t=()=>{const a=Fe(),c=Kt(),u=mt();return j(()=>{if(!(u.value.editLink??a.value.editLink??!0))return null;const{repo:h,docsRepo:g=h,docsBranch:y="main",docsDir:E="",editLinkText:S}=a.value;if(!g)return null;const v=Jh({docsRepo:g,docsBranch:y,docsDir:E,filePathRelative:c.value.filePathRelative,editLinkPattern:u.value.editLinkPattern??a.value.editLinkPattern});return v?{text:S??"Edit this page",link:v}:null})},n=()=>{const a=Fe(),c=Kt(),u=mt();return j(()=>{var g,y;return!(u.value.lastUpdated??a.value.lastUpdated??!0)||!((g=c.value.git)!=null&&g.updatedTime)?null:new Date((y=c.value.git)==null?void 0:y.updatedTime).toLocaleString()})},r=()=>{const a=Fe(),c=Kt(),u=mt();return j(()=>{var h;return u.value.contributors??a.value.contributors??!0?((h=c.value.git)==null?void 0:h.contributors)??null:null})},o=Fe(),s=t(),i=n(),l=r();return(a,c)=>{const u=_t("ClientOnly");return B(),Q("footer",pp,[Z(s)?(B(),Q("div",mp,[ee(gt,{class:"meta-item-label",item:Z(s)},null,8,["item"])])):Le("v-if",!0),Z(i)?(B(),Q("div",gp,[se("span",vp,Pe(Z(o).lastUpdatedText)+": ",1),ee(u,null,{default:Oe(()=>[se("span",_p,Pe(Z(i)),1)]),_:1})])):Le("v-if",!0),Z(l)&&Z(l).length?(B(),Q("div",bp,[se("span",yp,Pe(Z(o).contributorsText)+": ",1),se("span",wp,[(B(!0),Q(be,null,Ot(Z(l),(f,h)=>(B(),Q(be,{key:h},[se("span",{class:"contributor",title:`email: ${f.email}`},Pe(f.name),9,Ep),h!==Z(l).length-1?(B(),Q(be,{key:0},[bt(", ")],64)):Le("v-if",!0)],64))),128))])])):Le("v-if",!0)])}}}),xp=Ce(Cp,[["__file","PageMeta.vue"]]),Lp={key:0,class:"page-nav"},Sp={class:"inner"},Tp={key:0,class:"prev"},kp={key:1,class:"next"},Ap=de({__name:"PageNav",setup(e){const t=a=>a===!1?null:he(a)?Uo(a):Io(a)?a:!1,n=(a,c,u)=>{const f=a.findIndex(h=>h.link===c);if(f!==-1){const h=a[f+u];return h!=null&&h.link?h:null}for(const h of a)if(h.children){const g=n(h.children,c,u);if(g)return g}return null},r=mt(),o=qo(),s=Gt(),i=j(()=>{const a=t(r.value.prev);return a!==!1?a:n(o.value,s.path,-1)}),l=j(()=>{const a=t(r.value.next);return a!==!1?a:n(o.value,s.path,1)});return(a,c)=>i.value||l.value?(B(),Q("nav",Lp,[se("p",Sp,[i.value?(B(),Q("span",Tp,[ee(gt,{item:i.value},null,8,["item"])])):Le("v-if",!0),l.value?(B(),Q("span",kp,[ee(gt,{item:l.value},null,8,["item"])])):Le("v-if",!0)])])):Le("v-if",!0)}}),Pp=Ce(Ap,[["__file","PageNav.vue"]]),Rp={class:"page"},Op={class:"theme-default-content"},$p=de({__name:"Page",setup(e){return(t,n)=>{const r=_t("Content");return B(),Q("main",Rp,[_e(t.$slots,"top"),se("div",Op,[_e(t.$slots,"content-top"),ee(r),_e(t.$slots,"content-bottom")]),ee(xp),ee(Pp),_e(t.$slots,"bottom")])}}}),Ip=Ce($p,[["__file","Page.vue"]]),Mp=["onKeydown"],Np={class:"sidebar-item-children"},Hp=de({__name:"SidebarItem",props:{item:{type:Object,required:!0},depth:{type:Number,required:!1,default:0}},setup(e){const t=e,{item:n,depth:r}=To(t),o=Gt(),s=gn(),i=j(()=>Dl(n.value,o)),l=j(()=>({"sidebar-item":!0,"sidebar-heading":r.value===0,active:i.value,collapsible:n.value.collapsible})),a=j(()=>n.value.collapsible?i.value:!0),[c,u]=Bd(a.value),f=g=>{n.value.collapsible&&(g.preventDefault(),u())},h=s.afterEach(g=>{Cr(()=>{c.value=a.value})});return Tr(()=>{h()}),(g,y)=>{var S;const E=_t("SidebarItem",!0);return B(),Q("li",null,[Z(n).link?(B(),xe(gt,{key:0,class:Ue(l.value),item:Z(n)},null,8,["class","item"])):(B(),Q("p",{key:1,tabindex:"0",class:Ue(l.value),onClick:f,onKeydown:_u(f,["enter"])},[bt(Pe(Z(n).text)+" ",1),Z(n).collapsible?(B(),Q("span",{key:0,class:Ue(["arrow",Z(c)?"down":"right"])},null,2)):Le("v-if",!0)],42,Mp)),(S=Z(n).children)!=null&&S.length?(B(),xe(Hl,{key:2},{default:Oe(()=>[fr(se("ul",Np,[(B(!0),Q(be,null,Ot(Z(n).children,v=>(B(),xe(E,{key:`${Z(r)}${v.text}${v.link}`,item:v,depth:Z(r)+1},null,8,["item","depth"]))),128))],512),[[gr,Z(c)]])]),_:1})):Le("v-if",!0)])}}}),Dp=Ce(Hp,[["__file","SidebarItem.vue"]]),Bp={key:0,class:"sidebar-items"},Fp=de({__name:"SidebarItems",setup(e){const t=Gt(),n=qo();return Ze(()=>{ot(()=>t.hash,r=>{const o=document.querySelector(".sidebar");if(!o)return;const s=document.querySelector(`.sidebar a.sidebar-item[href="${t.path}${r}"]`);if(!s)return;const{top:i,height:l}=o.getBoundingClientRect(),{top:a,height:c}=s.getBoundingClientRect();ai+l&&s.scrollIntoView(!1)})}),(r,o)=>Z(n).length?(B(),Q("ul",Bp,[(B(!0),Q(be,null,Ot(Z(n),s=>(B(),xe(Dp,{key:`${s.text}${s.link}`,item:s},null,8,["item"]))),128))])):Le("v-if",!0)}}),zp=Ce(Fp,[["__file","SidebarItems.vue"]]),jp={class:"sidebar"},Up=de({__name:"Sidebar",setup(e){return(t,n)=>(B(),Q("aside",jp,[ee(Fl),_e(t.$slots,"top"),ee(zp),_e(t.$slots,"bottom")]))}}),qp=Ce(Up,[["__file","Sidebar.vue"]]),Wp=de({__name:"Layout",setup(e){const t=Kt(),n=mt(),r=Fe(),o=j(()=>n.value.navbar!==!1&&r.value.navbar!==!1),s=qo(),i=Ee(!1),l=S=>{i.value=typeof S=="boolean"?S:!i.value},a={x:0,y:0},c=S=>{a.x=S.changedTouches[0].clientX,a.y=S.changedTouches[0].clientY},u=S=>{const v=S.changedTouches[0].clientX-a.x,b=S.changedTouches[0].clientY-a.y;Math.abs(v)>Math.abs(b)&&Math.abs(v)>40&&(v>0&&a.x<=80?l(!0):l(!1))},f=j(()=>[{"no-navbar":!o.value,"no-sidebar":!s.value.length,"sidebar-open":i.value},n.value.pageClass]);let h;Ze(()=>{h=gn().afterEach(()=>{l(!1)})}),kr(()=>{h()});const g=$l(),y=g.resolve,E=g.pending;return(S,v)=>(B(),Q("div",{class:Ue(["theme-container",f.value]),onTouchstart:c,onTouchend:u},[_e(S.$slots,"navbar",{},()=>[o.value?(B(),xe(hp,{key:0,onToggleSidebar:l},{before:Oe(()=>[_e(S.$slots,"navbar-before")]),after:Oe(()=>[_e(S.$slots,"navbar-after")]),_:3})):Le("v-if",!0)]),se("div",{class:"sidebar-mask",onClick:v[0]||(v[0]=b=>l(!1))}),_e(S.$slots,"sidebar",{},()=>[ee(qp,null,{top:Oe(()=>[_e(S.$slots,"sidebar-top")]),bottom:Oe(()=>[_e(S.$slots,"sidebar-bottom")]),_:3})]),_e(S.$slots,"page",{},()=>[Z(n).home?(B(),xe(Rh,{key:0})):(B(),xe(Un,{key:1,name:"fade-slide-y",mode:"out-in",onBeforeEnter:Z(y),onBeforeLeave:Z(E)},{default:Oe(()=>[(B(),xe(Ip,{key:Z(t).path},{top:Oe(()=>[_e(S.$slots,"page-top")]),"content-top":Oe(()=>[_e(S.$slots,"page-content-top")]),"content-bottom":Oe(()=>[_e(S.$slots,"page-content-bottom")]),bottom:Oe(()=>[_e(S.$slots,"page-bottom")]),_:3}))]),_:3},8,["onBeforeEnter","onBeforeLeave"]))])],34))}}),zl=Ce(Wp,[["__file","Layout.vue"]]),Kp={class:"theme-container"},Vp={class:"page"},Gp={class:"theme-default-content"},Jp=se("h1",null,"404",-1),Yp=de({__name:"NotFound",setup(e){const t=Rr(),n=Fe(),r=n.value.notFound??["Not Found"],o=()=>r[Math.floor(Math.random()*r.length)],s=n.value.home??t.value,i=n.value.backToHome??"Back to home";return(l,a)=>{const c=_t("RouterLink");return B(),Q("div",Kp,[se("main",Vp,[se("div",Gp,[Jp,se("blockquote",null,Pe(o()),1),ee(c,{to:Z(s)},{default:Oe(()=>[bt(Pe(Z(i)),1)]),_:1},8,["to"])])])])}}}),Qp=Ce(Yp,[["__file","NotFound.vue"]]);const Zp=It({enhance({app:e,router:t}){e.component("Badge",xd),e.component("CodeGroup",Ld),e.component("CodeGroupItem",Ad),e.component("AutoLinkExternalIcon",()=>{const r=e.component("ExternalLinkIcon");return r?ge(r):null}),e.component("NavbarSearch",()=>{const r=e.component("Docsearch")||e.component("SearchBox");return r?ge(r):null});const n=t.options.scrollBehavior;t.options.scrollBehavior=async(...r)=>(await $l().wait(),n(...r))},setup(){Zd(),th()},layouts:{Layout:zl,NotFound:Qp}}),Xp="/images/DO_Powered_by_Badge_blue.svg",em="/images/Incube8-Games-Logo.png";const tm=se("div",{class:"my-footer"},[bt(" Sponsors "),se("br"),se("a",{href:"https://www.digitalocean.com/",target:"_blank"},[se("img",{class:"spons_logo",src:Xp})]),se("a",{href:"https://incube8games.com/",target:"_blank",alt:"Incube8 Games - Physical Retro Gaming Publisher"},[se("img",{alt:"Incube8 Games - Physical Retro Gaming Publisher",class:"spons_logo incube8",src:em})])],-1),nm={__name:"Layout",setup(e){return(t,n)=>(B(),xe(zl,null,{"page-bottom":Oe(()=>[tm]),_:1}))}},rm=Ce(nm,[["__file","Layout.vue"]]),om=It({layouts:{Layout:rm}}),rr=[Gf,Qf,td,hd,vd,Ed,Zp,om],sm=[["v-8daa1a0e","/",{title:"Home"},["/README.md"]],["v-37fb9660","/gbajam22.html",{title:"GBA Jam 2022"},[":md"]],["v-312833e4","/gbajam24.html",{title:"GBA Jam 2024"},[":md"]],["v-5dc4b15a","/getting-started.html",{title:"Getting started"},[":md"]],["v-68dc5d0d","/resources.html",{title:"Resources"},[":md"]],["v-3706649a","/404.html",{title:""},[]]];var si=de({name:"Vuepress",setup(){const e=Iu();return()=>ge(e.value)}}),im=()=>sm.reduce((e,[t,n,r,o])=>(e.push({name:t,path:n,component:si,meta:r},{path:n.endsWith("/")?n+"index.html":n.substring(0,n.length-5),redirect:n},...o.map(s=>({path:s===":md"?n.substring(0,n.length-5)+".md":s,redirect:n}))),e),[{name:"404",path:"/:catchAll(.*)",component:si}]),lm=rf,am=()=>{const e=zf({history:lm(rl("/")),routes:im(),scrollBehavior:(t,n,r)=>r||(t.hash?{el:t.hash}:{top:0})});return e.beforeResolve(async(t,n)=>{var r;(t.path!==n.path||n===ht)&&([t.meta._data]=await Promise.all([dt.resolvePageData(t.name),(r=il[t.name])==null?void 0:r.__asyncLoader()]))}),e},cm=e=>{e.component("ClientOnly",Ho),e.component("Content",Bu)},um=(e,t,n)=>{const r=ti(()=>t.currentRoute.value.path),o=ti(()=>dt.resolveRouteLocale(en.value.locales,r.value)),s=Pd(r,()=>t.currentRoute.value.meta._data),i=j(()=>dt.resolveLayouts(n)),l=j(()=>dt.resolveSiteLocaleData(en.value,o.value)),a=j(()=>dt.resolvePageFrontmatter(s.value)),c=j(()=>dt.resolvePageHeadTitle(s.value,l.value)),u=j(()=>dt.resolvePageHead(c.value,a.value,l.value)),f=j(()=>dt.resolvePageLang(s.value,l.value)),h=j(()=>dt.resolvePageLayout(s.value,i.value));return e.provide(Au,i),e.provide(ll,s),e.provide(al,a),e.provide(Ou,c),e.provide(cl,u),e.provide(ul,f),e.provide(fl,h),e.provide(Mo,o),e.provide(hl,l),Object.defineProperties(e.config.globalProperties,{$frontmatter:{get:()=>a.value},$head:{get:()=>u.value},$headTitle:{get:()=>c.value},$lang:{get:()=>f.value},$page:{get:()=>s.value},$routeLocale:{get:()=>o.value},$site:{get:()=>en.value},$siteLocale:{get:()=>l.value},$withBase:{get:()=>Do}}),{layouts:i,pageData:s,pageFrontmatter:a,pageHead:u,pageHeadTitle:c,pageLang:f,pageLayout:h,routeLocale:o,siteData:en,siteLocaleData:l}},fm=()=>{const e=Ru(),t=$u(),n=Ee([]),r=()=>{e.value.forEach(s=>{const i=dm(s);i&&n.value.push(i)})},o=()=>{document.documentElement.lang=t.value,n.value.forEach(s=>{s.parentNode===document.head&&document.head.removeChild(s)}),n.value.splice(0,n.value.length),e.value.forEach(s=>{const i=hm(s);i!==null&&(document.head.appendChild(i),n.value.push(i))})};qt(Nu,o),Ze(()=>{r(),o(),ot(()=>e.value,o)})},dm=([e,t,n=""])=>{const r=Object.entries(t).map(([l,a])=>he(a)?`[${l}=${JSON.stringify(a)}]`:a===!0?`[${l}]`:"").join(""),o=`head > ${e}${r}`;return Array.from(document.querySelectorAll(o)).find(l=>l.innerText===n)||null},hm=([e,t,n])=>{if(!he(e))return null;const r=document.createElement(e);return Io(t)&&Object.entries(t).forEach(([o,s])=>{he(s)?r.setAttribute(o,s):s===!0&&r.setAttribute(o,"")}),he(n)&&r.appendChild(document.createTextNode(n)),r},pm=wu,mm=async()=>{var n;const e=pm({name:"VuepressApp",setup(){var r;fm();for(const o of rr)(r=o.setup)==null||r.call(o);return()=>[ge(Ll),...rr.flatMap(({rootComponents:o=[]})=>o.map(s=>ge(s)))]}}),t=am();cm(e),um(e,t,rr);for(const r of rr)await((n=r.enhance)==null?void 0:n.call(r,{app:e,router:t,siteData:en}));return e.use(t),{app:e,router:t}};mm().then(({app:e,router:t})=>{t.isReady().then(()=>{e.mount("#app")})});export{Ce as _,Nc as a,Xp as b,Q as c,mm as createVueApp,em as d,se as e,bt as f,ee as g,B as o,_t as r,Oe as w}; diff --git a/assets/gbajam22.html-154329fd.js b/assets/gbajam22.html-154329fd.js new file mode 100644 index 0000000..b58ff41 --- /dev/null +++ b/assets/gbajam22.html-154329fd.js @@ -0,0 +1 @@ +const l=JSON.parse('{"key":"v-37fb9660","path":"/gbajam22.html","title":"GBA Jam 2022","lang":"en-US","frontmatter":{},"headers":[{"level":2,"title":"Results","slug":"results","link":"#results","children":[{"level":3,"title":"Overall","slug":"overall","link":"#overall","children":[]},{"level":3,"title":"Technical","slug":"technical","link":"#technical","children":[]},{"level":3,"title":"Originality","slug":"originality","link":"#originality","children":[]},{"level":3,"title":"Graphics","slug":"graphics","link":"#graphics","children":[]},{"level":3,"title":"Audio","slug":"audio","link":"#audio","children":[]},{"level":3,"title":"Polish","slug":"polish","link":"#polish","children":[]}]},{"level":2,"title":"Prizes","slug":"prizes","link":"#prizes","children":[{"level":3,"title":"Physical Prizes","slug":"physical-prizes","link":"#physical-prizes","children":[]},{"level":3,"title":"Money Prizes","slug":"money-prizes","link":"#money-prizes","children":[]},{"level":3,"title":"Open source bonus","slug":"open-source-bonus","link":"#open-source-bonus","children":[]},{"level":3,"title":"Tie-breaks","slug":"tie-breaks","link":"#tie-breaks","children":[]}]}],"git":{"updatedTime":1726607796000},"filePathRelative":"gbajam22.md"}');export{l as data}; diff --git a/assets/gbajam22.html-93cfdcfb.js b/assets/gbajam22.html-93cfdcfb.js new file mode 100644 index 0000000..be5b7e4 --- /dev/null +++ b/assets/gbajam22.html-93cfdcfb.js @@ -0,0 +1 @@ +import{_ as i,r as n,o as l,c as h,e as a,f as e,g as r,a as t}from"./app-e519d5e8.js";const s={},c=a("h1",{id:"gba-jam-2022",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#gba-jam-2022","aria-hidden":"true"},"#"),e(" GBA Jam 2022")],-1),d=a("p",null,"The GBA Jam 2022 has reached its conclusion!",-1),u={href:"https://gbadev.net",target:"_blank",rel:"noopener noreferrer"},p={href:"https://discord.io/gbadev",target:"_blank",rel:"noopener noreferrer"},b={href:"https://github.com/gbadev-org/awesome-gbadev",target:"_blank",rel:"noopener noreferrer"},g=a("p",null,"To everyone who took part: thanks so much for joining, and congrats on making it this far. Above all else we hope you had fun and learned something new. We're proud of ya!",-1),f=a("br",null,null,-1),m={href:"https://incube8games.com/",target:"_blank",rel:"noopener noreferrer"},y={href:"https://pulp.biz/",target:"_blank",rel:"noopener noreferrer"},v={href:"https://www.etsy.com/fr/shop/RSTGames",target:"_blank",rel:"noopener noreferrer"},k={href:"https://www.epilogue.co/",target:"_blank",rel:"noopener noreferrer"},_={href:"https://gbdev.io",target:"_blank",rel:"noopener noreferrer"},w={href:"https://opencollective.com/gbadev/projects/gbajam22",target:"_blank",rel:"noopener noreferrer"},z=a("h2",{id:"results",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#results","aria-hidden":"true"},"#"),e(" Results")],-1),x=a("p",null,[e("Prize winners are in "),a("strong",null,"bold"),e(". Open-source bonus is denoted by ï¹¢.")],-1),A=a("p",null,"Ties are left as-is, except for 3rd place which needed a tie-break due to the physical prize. Scroll down for more info!",-1),G={href:"https://itch.io/jam/gbajam22/results",target:"_blank",rel:"noopener noreferrer"},T=t('

Overall

  1. Green Memories by Tengukaze Studio
  2. Hero Core GBA portï¹¢ by Evan Bowman
  3. notenogramï¹¢ by kva64
  4. Collie Defenceï¹¢ by vayan
  5. Attack on Voxelburg by nuclear
    A Rushed Hack Job by Pyro_Pyro
  6. Gerbil Space Program by Origamiscienceguy, n67094, Nikku4211
  7. Ravenia by allalonegamez
  8. Chocolate Hunter Runa by Lsh0426
  9. Coin Fall by 3DSage
  10. Lane by setsquare
  11. Nuclear Love by Jono Shields
  12. BugTris by NotImplementedLife
    Jump Kid by allalonegamez
    Pocket Paint by jroatch
  13. HEXES by EigenlightArts
  14. Villager's Ambition by AtsushiHdez
    The Enchanted Place by VideoGameStoryTime
  15. gnoq by Bergasms
  16. Kankandara no Mori by brave_orakio
  17. Glacia Dungeon by NotImplementedLife
    MineBoyAdvance by sulsadood
    Minesweeper Battle by Dewbone3
  18. Pathfinder Demo by pyroceper
  19. YALAXY01-Yearlysis by MysteryStrawberry
  20. The Axe by Maximilian II

Technical

  1. Attack on Voxelburg by nuclear
  2. Coin Fall by 3DSage
  3. Gerbil Space Program by Origamiscienceguy, n67094, Nikku4211
  4. Hero Core GBA port by Evan Bowman
    notenogram by kva64
    Green Memories by Tengukaze Studio

Originality

  1. Green Memories by Tengukaze Studio
  2. The Enchanted Place by VideoGameStoryTime
    Lane by setsquare
  3. Chocolate Hunter Runa by Lsh0426
  4. HEXES by EigenlightArts

Graphics

  1. Gerbil Space Program by Origamiscienceguy, n67094, Nikku4211
  2. Green Memories by Tengukaze Studio
  3. Attack on Voxelburg by nuclear
  4. notenogram by kva64
  5. Nuclear Love by Jono Shields

Audio

  1. Green Memories by Tengukaze Studio
  2. A Rushed Hack Job by Pyro_Pyro
    notenogram by kva64
  3. Gerbil Space Program by Origamiscienceguy, n67094, Nikku4211
    Hero Core GBA port by Evan Bowman

Polish

  1. Hero Core GBA port by Evan Bowman
  2. Green Memories by Tengukaze Studio
  3. Ravenia by allalonegamez
  4. A Rushed Hack Job by Pyro_Pyro
  5. Chocolate Hunter Runa by Lsh0426

Prizes

If you won a prize, we'll be in touch via email over the next few days.

',14),P={href:"https://docs.google.com/spreadsheets/d/1YukTNJqbAJEJmOd_-j2-ist02cB-PaG2OdOLbv5RYB4/edit#gid=0",target:"_blank",rel:"noopener noreferrer"},S=a("h3",{id:"physical-prizes",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#physical-prizes","aria-hidden":"true"},"#"),e(" Physical Prizes")],-1),B=a("p",null,"The top 3 participants can choose from the following pool (first place gets first pick, and so on...)",-1),j={href:"https://incube8games.com/products/deadeus-gb-collectors-edition",target:"_blank",rel:"noopener noreferrer"},E={href:"https://incube8games.com/",target:"_blank",rel:"noopener noreferrer"},H={href:"https://www.epilogue.co/product/gb-operator",target:"_blank",rel:"noopener noreferrer"},N={href:"https://www.epilogue.co/",target:"_blank",rel:"noopener noreferrer"},C=t('

Money Prizes

  • 1st place - $574
  • 2nd place - $230
  • 3rd place - $143
  • 4th place - $115
  • 5th place - $86

Open source bonus

Additional prize money is given to the top 3 entries whose source code was released under a free-software license.

  • 1st - $143
  • 2nd - $86
  • 3rd - $57

Tie-breaks

Notenogram and Collie Defence required a tie-break due to the physical prize. The judges held a vote to break the tie, but this also tied... so we decided to use the average score across all categories (technical, originality, graphics, audio, polish) to decide who should get 3rd place.

For the tie between Attack on Voxelburg and A Rushed Hack Job, we decided it would be most fair to split the prize money 50/50, since there were no physical prizes involved for those.

',8);function J(L,M){const o=n("ExternalLinkIcon");return l(),h("div",null,[c,d,a("blockquote",null,[a("p",null,[e("The event was hosted by the the "),a("a",u,[e("gbadev.net"),r(o)]),e(" community. We're promoting the development of new GBA homebrew games, development tools and documentation. Join us on "),a("a",p,[e("Discord"),r(o)]),e(" and check out our "),a("a",b,[e("curated collection of gbadev resources"),r(o)]),e(".")])]),g,a("p",null,[e("Thanks to our sponsors, who made this possible and provided wonderful prizes for the winners:"),f,a("a",m,[e("Incube8 Games"),r(o)]),e(", "),a("a",y,[e("Pocket Pulp"),r(o)]),e(", "),a("a",v,[e("RST Games"),r(o)]),e(", "),a("a",k,[e("Epilogue"),r(o)]),e(" and the "),a("a",_,[e("gbdev"),r(o)]),e(" community.")]),a("p",null,[e("And thanks to "),a("a",w,[e("everyone who donated"),r(o)]),e(", our fellow organisers and judges, and of course everyone who's played & enjoyed the entries so far (if you haven't yet, what are you waiting for!!)")]),z,x,A,a("p",null,[e("Full detailed results for all 26 entries can be found at the "),a("a",G,[e("jam page on itch.io"),r(o)]),e(".")]),T,a("p",null,[e("More details on how the prizes were calculated can be found "),a("a",P,[e("here"),r(o)]),e(".")]),S,B,a("ul",null,[a("li",null,[e("1x "),a("a",j,[e("Deadeus - Collector's Edition"),r(o)]),e(" courtesy of "),a("a",E,[e("Incube8 Games"),r(o)])]),a("li",null,[e("2x "),a("a",H,[e("GB Operator"),r(o)]),e(" courtesy of "),a("a",N,[e("Epilogue"),r(o)])])]),C])}const O=i(s,[["render",J],["__file","gbajam22.html.vue"]]);export{O as default}; diff --git a/assets/gbajam24.html-87935102.js b/assets/gbajam24.html-87935102.js new file mode 100644 index 0000000..13695bc --- /dev/null +++ b/assets/gbajam24.html-87935102.js @@ -0,0 +1 @@ +const e=JSON.parse('{"key":"v-312833e4","path":"/gbajam24.html","title":"GBA Jam 2024","lang":"en-US","frontmatter":{"head":[["meta",{"name":"og:title","content":"GBA Jam 2024"},{"name":"og:description","content":"GBA Jam 2024 Results"},{"name":"og:image","content":"/images/jam24-card.png"}]]},"headers":[],"git":{"updatedTime":1726607796000},"filePathRelative":"gbajam24.md"}');export{e as data}; diff --git a/assets/gbajam24.html-c2d4d8a0.js b/assets/gbajam24.html-c2d4d8a0.js new file mode 100644 index 0000000..38bdcf2 --- /dev/null +++ b/assets/gbajam24.html-c2d4d8a0.js @@ -0,0 +1 @@ +import{_ as a,o as t,c,e,f as s}from"./app-e519d5e8.js";const o={},n=e("h1",{id:"gba-jam-2024",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#gba-jam-2024","aria-hidden":"true"},"#"),s(" GBA Jam 2024")],-1),r=e("p",null,"Watch this space!",-1),_=[n,r];function d(h,i){return t(),c("div",null,_)}const m=a(o,[["render",d],["__file","gbajam24.html.vue"]]);export{m as default}; diff --git a/assets/getting-started.html-5f53e87b.js b/assets/getting-started.html-5f53e87b.js new file mode 100644 index 0000000..30b5a3b --- /dev/null +++ b/assets/getting-started.html-5f53e87b.js @@ -0,0 +1 @@ +const e=JSON.parse('{"key":"v-5dc4b15a","path":"/getting-started.html","title":"Getting started","lang":"en-US","frontmatter":{"title":"Getting started"},"headers":[{"level":2,"title":"Developing your game","slug":"developing-your-game","link":"#developing-your-game","children":[{"level":3,"title":"High level development","slug":"high-level-development","link":"#high-level-development","children":[]},{"level":3,"title":"Low level development","slug":"low-level-development","link":"#low-level-development","children":[]},{"level":3,"title":"Development from scratch","slug":"development-from-scratch","link":"#development-from-scratch","children":[]}]},{"level":2,"title":"Tutorials","slug":"tutorials","link":"#tutorials","children":[]},{"level":2,"title":"Emulation","slug":"emulation","link":"#emulation","children":[]},{"level":2,"title":"Community","slug":"community","link":"#community","children":[]}],"git":{"updatedTime":1726607796000},"filePathRelative":"getting-started.md"}');export{e as data}; diff --git a/assets/getting-started.html-851423b0.js b/assets/getting-started.html-851423b0.js new file mode 100644 index 0000000..037f996 --- /dev/null +++ b/assets/getting-started.html-851423b0.js @@ -0,0 +1 @@ +import{_ as s,r as n,o as i,c as l,e,f as t,g as o,w as h}from"./app-e519d5e8.js";const d={},u=e("h1",{id:"getting-started-in-gbadev",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#getting-started-in-gbadev","aria-hidden":"true"},"#"),t(" Getting started in GBAdev")],-1),c=e("h2",{id:"developing-your-game",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#developing-your-game","aria-hidden":"true"},"#"),t(" Developing your game")],-1),p=e("p",null,"Broadly speaking there are 3 paths you can take to get started. Which one you choose depends on your previous knowledge about programming, and how much of your game you want to create yourself.",-1),g=e("h3",{id:"high-level-development",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#high-level-development","aria-hidden":"true"},"#"),t(" High level development")],-1),m=e("p",null,"This is ideal if you just want to get a game done, without worrying too much about how the hardware works. Unfortunately, there is nothing similar to PC engines like Unity, Godot, and the GBA doesn't support languages like C#, Python or Java.",-1),b={href:"https://github.com/GValiente/butano",target:"_blank",rel:"noopener noreferrer"},f={href:"https://gvaliente.github.io/butano/getting_started.html",target:"_blank",rel:"noopener noreferrer"},_={href:"https://github.com/evanbowman/BPCore-Engine",target:"_blank",rel:"noopener noreferrer"},v=e("h3",{id:"low-level-development",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#low-level-development","aria-hidden":"true"},"#"),t(" Low level development")],-1),y={href:"https://www.problemkaputt.de/gbatek.htm",target:"_blank",rel:"noopener noreferrer"},k=e("h4",{id:"c-and-c",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#c-and-c","aria-hidden":"true"},"#"),t(" C and C++")],-1),w={href:"https://github.com/gbadev-org/libtonc",target:"_blank",rel:"noopener noreferrer"},x={href:"https://devkitpro.org/wiki/Getting_Started",target:"_blank",rel:"noopener noreferrer"},A={href:"https://github.com/gbadev-org/libtonc-examples",target:"_blank",rel:"noopener noreferrer"},B={href:"https://github.com/gbadev-org/libtonc-template",target:"_blank",rel:"noopener noreferrer"},G={href:"https://gbadev.net/tonc",target:"_blank",rel:"noopener noreferrer"},C=e("p",null,"libgba is another library provided by devkitPro, but it isn't as recommended as using libtonc. Both of them fulfill the same role, the main difference of the codebase is that libtonc has a text engine with lots of features. However, libtonc has way better documentation (libgba doesn't have almost any example or documentation).",-1),I={href:"https://github.com/LunarLambda/sdk-seven",target:"_blank",rel:"noopener noreferrer"},T={href:"https://github.com/felixjones/gba-toolchain",target:"_blank",rel:"noopener noreferrer"},N={href:"https://github.com/LunarLambda/meson-gba",target:"_blank",rel:"noopener noreferrer"},L={href:"https://devkitadv.sourceforge.net/",target:"_blank",rel:"noopener noreferrer"},M=e("h4",{id:"assembly",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#assembly","aria-hidden":"true"},"#"),t(" Assembly")],-1),R=e("p",null,"Even though you don't need to use assembly to develop for GBA, it is still an option, and you will need it if you're creating things like a 3D game, or an audio mixer.",-1),E=e("p",null,"All of the C and C++ options also support assembly, so you can use them without any issues.",-1),P={href:"https://github.com/velipso/gvasm",target:"_blank",rel:"noopener noreferrer"},V=e("h4",{id:"nim",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#nim","aria-hidden":"true"},"#"),t(" Nim")],-1),D={href:"https://natu.exelo.tl",target:"_blank",rel:"noopener noreferrer"},O=e("h4",{id:"rust",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#rust","aria-hidden":"true"},"#"),t(" Rust")],-1),U={href:"https://github.com/agbrs/agb",target:"_blank",rel:"noopener noreferrer"},H=e("h3",{id:"development-from-scratch",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#development-from-scratch","aria-hidden":"true"},"#"),t(" Development from scratch")],-1),S=e("p",null,"If you don't want to use any libraries to create your game, it's possible to ignore all of them and create everything yourself. This is only recommended if you're very comfortable with low level development. It will be hard to get other people to help you if you're not using any of the popular libraries that other people use.",-1),j={href:"https://github.com/AntonioND/gba-bootstrap",target:"_blank",rel:"noopener noreferrer"},F=e("h2",{id:"tutorials",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#tutorials","aria-hidden":"true"},"#"),t(" Tutorials")],-1),J={href:"https://gbadev.net/tonc",target:"_blank",rel:"noopener noreferrer"},K=e("h2",{id:"emulation",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#emulation","aria-hidden":"true"},"#"),t(" Emulation")],-1),W=e("p",null,"The recommended emulators are:",-1),q={href:"https://github.com/nba-emu/NanoBoyAdvance",target:"_blank",rel:"noopener noreferrer"},Y={href:"https://mgba.io/",target:"_blank",rel:"noopener noreferrer"},$={href:"https://problemkaputt.de/gba.htm",target:"_blank",rel:"noopener noreferrer"},z={href:"https://problemkaputt.de/gbapics.htm",target:"_blank",rel:"noopener noreferrer"},Q=e("p",null,"Note: VisualBoyAdvance is a very outdated emulator, and not very accurate. Prefer mGBA over VBA.",-1),X=e("h2",{id:"community",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#community","aria-hidden":"true"},"#"),t(" Community")],-1),Z={href:"https://gbadev.net/",target:"_blank",rel:"noopener noreferrer"},ee={href:"https://forum.gbadev.net/",target:"_blank",rel:"noopener noreferrer"};function te(oe,re){const a=n("RouterLink"),r=n("ExternalLinkIcon");return i(),l("div",null,[u,e("p",null,[t("Welcome to GBAdev! If you have decided to try to develop something for the GBA and you're completely lost, this guide is for you. Note that this will only mention the most popular and recommended options. Check "),o(a,{to:"/resources.html"},{default:h(()=>[t("gbadev resources")]),_:1}),t(" for a long list about many relevant toolkits and libraries you can use!")]),c,p,g,m,e("p",null,[t("Our recommendation is to use "),e("a",b,[t("butano"),o(r)]),t(", a C++ library that simplifies GBA development a lot. It has become quite popular, so you will easily get support for it. You should follow the "),e("a",f,[t("getting started"),o(r)]),t(" instructions. It comes with a lot of examples of how to use all its features, check them out!")]),e("p",null,[t("If you prefer something higher level, "),e("a",_,[t("BPCore-Engine"),o(r)]),t(" is an engine that allows you to develop games using Lua as a language.")]),v,e("p",null,[t("If you're comfortable writing to I/O registers and reading low level documentation like "),e("a",y,[t("GBATEK"),o(r)]),t(" there are a few options:")]),k,e("p",null,[t("The most popular option is to use devkitARM and "),e("a",w,[t("libtonc"),o(r)]),t(". Follow the instructions in the "),e("a",x,[t("getting started guide"),o(r)]),t(" to install devkitARM and check the "),e("a",A,[t("examples"),o(r)]),t(" and the "),e("a",B,[t("template"),o(r)]),t(". Once you have verified that you can compile the examples read the tutorial "),e("a",G,[t("Tonc"),o(r)]),t(" (by the author of libtonc) to understand how GBA development goes.")]),C,e("p",null,[t("If you want to use a completely different library than libtonc or libgba, you can try "),e("a",I,[t("sdk-seven"),o(r)]),t(".")]),e("p",null,[t("If you don't want to use devkitARM, there are some alternatives. For example, check "),e("a",T,[t("gba-toolchain"),o(r)]),t(", which also supports libtonc and libgba, and it uses CMake instead of Makefiles.")]),e("p",null,[e("a",N,[t("meson-gba"),o(r)]),t(" is another option. It uses the Meson build system, it integrates many of the libraries mentioned before (with bugfixes that devkitPro doesn't have), and it supports different compilers and runtime libraries. If you're using sdk-seven, you should really consider using this.")]),e("p",null,[t("Some tutorials out there mention "),e("a",L,[t("DevKit Advance"),o(r)]),t(". This is a very outdated toolchain (the last release was in 2003!), don't use it! Use devkitARM instead, which is updated regularly.")]),M,R,E,e("p",null,[t("There is also "),e("a",P,[t("gvasm"),o(r)]),t(" if you want an option that only focuses on assembly.")]),V,e("p",null,[t("Check "),e("a",D,[t("Natu"),o(r)]),t(". It provides a library to write games and tooling to convert assets.")]),O,e("p",null,[t("Check the "),e("a",U,[t("agb library"),o(r)]),t(".")]),H,S,e("p",null,[t("One example of how to build a GBA ROM from scratch with a regular ARM GCC toolchain can be found in "),e("a",j,[t("GBA bootstrap"),o(r)]),t(".")]),F,e("p",null,[e("a",J,[t("Tonc"),o(r)]),t(" is currently the best tutorial for GBA development.")]),K,W,e("ul",null,[e("li",null,[e("p",null,[e("a",q,[t("NanoBoyAdvance"),o(r)]),t(": The most accurate emulator at the moment. However, it doesn't have debugging options.")])]),e("li",null,[e("p",null,[e("a",Y,[t("mGBA"),o(r)]),t(": Very accurate, and it is possible to connect the GNU debugger (GDB) to it and debug your games as if they were regular PC programs!")])]),e("li",null,[e("p",null,[e("a",$,[t("no$gba"),o(r)]),t(": Not as accurate as the other two, but it has an "),e("a",z,[t("incredible debugger"),o(r)]),t(".")])])]),Q,X,e("p",null,[t("Join us in discord! This "),e("a",Z,[t("link"),o(r)]),t(" has an up-to-date invitation to the gbadev discord server were most of the GBA devs hang out nowadays. There is also a "),e("a",ee,[t("forum"),o(r)]),t(", if you prefer that.")])])}const ae=s(d,[["render",te],["__file","getting-started.html.vue"]]);export{ae as default}; diff --git a/assets/index.html-0f9a77d0.js b/assets/index.html-0f9a77d0.js new file mode 100644 index 0000000..4f96766 --- /dev/null +++ b/assets/index.html-0f9a77d0.js @@ -0,0 +1 @@ +import{_ as s,o as e,c as a,a as t,b as o,d as c}from"./app-e519d5e8.js";const n={},r=t('',1),i=[r];function _(l,m){return e(),a("div",null,i)}const h=s(n,[["render",_],["__file","index.html.vue"]]);export{h as default}; diff --git a/assets/index.html-566c74d8.js b/assets/index.html-566c74d8.js new file mode 100644 index 0000000..38c56aa --- /dev/null +++ b/assets/index.html-566c74d8.js @@ -0,0 +1 @@ +const e=JSON.parse(`{"key":"v-8daa1a0e","path":"/","title":"Home","lang":"en-US","frontmatter":{"home":true,"title":"Home","heroImage":"/images/logo.png","heroHeight":200,"tagline":"GBA development community","head":[["meta",{"name":"og:description","content":"Home of the modern Game Boy Advance homebrew development scene."}]],"actions":[{"text":"Get started","link":"/getting-started","type":"primary"},{"text":"Check resources","link":"/resources","type":"secondary"},{"text":"Join us on Discord","link":"https://discord.gg/ctGSNxRkg2","type":"secondary"}],"features":[{"title":"Events","details":"We periodically host ranked game jams and events to bring together the community, such as the GBA Jam 2021 and the GBA Jam 2022.","link":"/resources"},{"title":"Documentation","details":"We maintain a curated collection of resources to get started with gba development and we're writing new tutorials and documentation."},{"title":"Community","details":"We have an active Discord server and a forum where developers hang out, help each other and share what they are working on."}],"layout":"Layout"},"headers":[],"git":{"updatedTime":1726607796000},"filePathRelative":"README.md"}`);export{e as data}; diff --git a/assets/resources.html-b1e01fd3.js b/assets/resources.html-b1e01fd3.js new file mode 100644 index 0000000..c5e23dd --- /dev/null +++ b/assets/resources.html-b1e01fd3.js @@ -0,0 +1 @@ +const e=JSON.parse('{"key":"v-68dc5d0d","path":"/resources.html","title":"Resources","lang":"en-US","frontmatter":{"title":"Resources"},"headers":[{"level":2,"title":"Table of Content","slug":"table-of-content","link":"#table-of-content","children":[]},{"level":2,"title":"Community","slug":"community","link":"#community","children":[{"level":3,"title":"Other places","slug":"other-places","link":"#other-places","children":[]}]},{"level":2,"title":"Tutorials","slug":"tutorials","link":"#tutorials","children":[]},{"level":2,"title":"Articles","slug":"articles","link":"#articles","children":[]},{"level":2,"title":"Compilers","slug":"compilers","link":"#compilers","children":[]},{"level":2,"title":"Toolkits","slug":"toolkits","link":"#toolkits","children":[]},{"level":2,"title":"Libraries","slug":"libraries","link":"#libraries","children":[]},{"level":2,"title":"Emulators","slug":"emulators","link":"#emulators","children":[]},{"level":2,"title":"Testing","slug":"testing","link":"#testing","children":[]},{"level":2,"title":"Dumping the GBA BIOS","slug":"dumping-the-gba-bios","link":"#dumping-the-gba-bios","children":[]},{"level":2,"title":"Reverse engineering","slug":"reverse-engineering","link":"#reverse-engineering","children":[]},{"level":2,"title":"Historical links","slug":"historical-links","link":"#historical-links","children":[]}],"git":{"updatedTime":1726607796000},"filePathRelative":"resources.md"}');export{e as data}; diff --git a/assets/resources.html-fdb49303.js b/assets/resources.html-fdb49303.js new file mode 100644 index 0000000..e8f4e57 --- /dev/null +++ b/assets/resources.html-fdb49303.js @@ -0,0 +1 @@ +import{_ as a,r as i,o as l,c as s,e,f as r,g as o,a as n}from"./app-e519d5e8.js";const h={},d=n('

gbadev resources

A curated list of development resources for Game Boy Advance.

Table of Content


Introduction

',6),c={href:"https://copetti.org/projects/consoles/game-boy-advance",target:"_blank",rel:"noopener noreferrer"},u=e("h2",{id:"community",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#community","aria-hidden":"true"},"#"),r(" Community")],-1),g={href:"https://forum.gbadev.net",target:"_blank",rel:"noopener noreferrer"},b={href:"https://gbadev.net",target:"_blank",rel:"noopener noreferrer"},m=e("summary",null,[e("em",null,"Info for IRC users")],-1),p={href:"http://www.efnet.org/?module=servers",target:"_blank",rel:"noopener noreferrer"},f=n("

Main channel
#gbadev - general chat

Additional channels
#gba-meta - community feedback/discussion
#gba-help - help & support
#gba-emudev - emulator development
#gba-asm - ARM/Thumb assembly and CPU architecture
#gba-showcase - share what you're working on!
#gba-music - listening, composing and audio programming
#gba-offtopic - off-topic chat
#gba-docs - community documentation projects (tutorials, technical docs etc.)
#gbajam - hang out with other GBA Jam participants & share your progress

Project-specific channels
#gba-toolchain - gba-toolchain, agbabi, and gba-hpp development & support
#butano - Butano engine development & support
#natu - Natu toolkit development & support
#sdk-seven - sdk-seven development & support

",3),_=e("h3",{id:"other-places",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#other-places","aria-hidden":"true"},"#"),r(" Other places")],-1),k={href:"https://gbadev.org",target:"_blank",rel:"noopener noreferrer"},v={href:"https://gbatemp.net/categories/nintendo-gba-discussions.32/",target:"_blank",rel:"noopener noreferrer"},A=e("h1",{id:"documentation",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#documentation","aria-hidden":"true"},"#"),r(" Documentation")],-1),y={href:"https://problemkaputt.de/gbatek.htm",target:"_blank",rel:"noopener noreferrer"},B={href:"https://www.cs.rit.edu/~tjh8300/CowBite/CowBiteSpec.htm",target:"_blank",rel:"noopener noreferrer"},w={href:"http://belogic.com/gba/",target:"_blank",rel:"noopener noreferrer"},G=e("h2",{id:"tutorials",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#tutorials","aria-hidden":"true"},"#"),r(" Tutorials")],-1),x={href:"https://gbadev.net/tonc/",target:"_blank",rel:"noopener noreferrer"},M={href:"https://www.coranac.com/tonc/text/toc.htm",target:"_blank",rel:"noopener noreferrer"},C={href:"https://www.youtube.com/watch?v=EMeie_gSgDU",target:"_blank",rel:"noopener noreferrer"},S={href:"https://stuij.github.io/deku-sound-tutorial/",target:"_blank",rel:"noopener noreferrer"},T=e("h2",{id:"articles",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#articles","aria-hidden":"true"},"#"),r(" Articles")],-1),D={href:"https://www.gamedeveloper.com/programming/gameboy-advance-resource-management",target:"_blank",rel:"noopener noreferrer"},j={href:"https://pineight.com/gba/managing-sprite-vram.txt",target:"_blank",rel:"noopener noreferrer"},P={href:"https://rentry.org/beepbox-gba-music",target:"_blank",rel:"noopener noreferrer"},I=e("h1",{id:"software-development",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#software-development","aria-hidden":"true"},"#"),r(" Software Development")],-1),L=e("h2",{id:"compilers",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#compilers","aria-hidden":"true"},"#"),r(" Compilers")],-1),R={href:"https://devkitpro.org",target:"_blank",rel:"noopener noreferrer"},E={href:"https://github.com/felixjones/gba-toolchain",target:"_blank",rel:"noopener noreferrer"},N={href:"https://github.com/velipso/gvasm",target:"_blank",rel:"noopener noreferrer"},O={href:"https://github.com/tinygo-org/tinygo",target:"_blank",rel:"noopener noreferrer"},H=e("h2",{id:"toolkits",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#toolkits","aria-hidden":"true"},"#"),r(" Toolkits")],-1),W={href:"https://github.com/rust-console/gba",target:"_blank",rel:"noopener noreferrer"},J={href:"https://github.com/exelotl/natu",target:"_blank",rel:"noopener noreferrer"},V={href:"https://github.com/JoaoBaptMG/gba-modern",target:"_blank",rel:"noopener noreferrer"},F={href:"https://github.com/wendigojaeger/ZigGBA",target:"_blank",rel:"noopener noreferrer"},K={href:"https://github.com/GValiente/butano",target:"_blank",rel:"noopener noreferrer"},U={href:"https://github.com/evanbowman/BPCore-Engine",target:"_blank",rel:"noopener noreferrer"},q={href:"https://github.com/redthing1/gba_dlang",target:"_blank",rel:"noopener noreferrer"},z={href:"https://github.com/redthing1/dusk",target:"_blank",rel:"noopener noreferrer"},Z={href:"https://github.com/asiekierka/gbsenpai",target:"_blank",rel:"noopener noreferrer"},$={href:"https://github.com/LunarLambda/meson-gba",target:"_blank",rel:"noopener noreferrer"},X={href:"https://github.com/sdk-seven",target:"_blank",rel:"noopener noreferrer"},Q={href:"https://github.com/stuij/rath",target:"_blank",rel:"noopener noreferrer"},Y={href:"https://github.com/98devin/ada-gba-dev",target:"_blank",rel:"noopener noreferrer"},ee=e("h2",{id:"libraries",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#libraries","aria-hidden":"true"},"#"),r(" Libraries")],-1),re={href:"https://github.com/felixjones/agbabi",target:"_blank",rel:"noopener noreferrer"},te={href:"https://github.com/felixjones/gba-hpp",target:"_blank",rel:"noopener noreferrer"},oe={href:"https://github.com/Sterophonick/HeartLib",target:"_blank",rel:"noopener noreferrer"},ne={href:"https://github.com/sdk-seven/libseven",target:"_blank",rel:"noopener noreferrer"},ae={href:"https://github.com/sverx/GBAdv",target:"_blank",rel:"noopener noreferrer"},ie={href:"https://maxmod.devkitpro.org",target:"_blank",rel:"noopener noreferrer"},le={href:"https://github.com/stuij/apex-audio-system",target:"_blank",rel:"noopener noreferrer"},se=e("em",null,"very",-1),he={href:"https://github.com/sebknzl/krawall",target:"_blank",rel:"noopener noreferrer"},de={href:"https://github.com/kusma/pimpmobile",target:"_blank",rel:"noopener noreferrer"},ce={href:"https://github.com/AntonioND/gbt-player",target:"_blank",rel:"noopener noreferrer"},ue={href:"http://www.danposluns.com/gbadev/posprintf/index.html",target:"_blank",rel:"noopener noreferrer"},ge=e("code",null,"sprintf",-1),be={href:"https://pineight.com/gba/#gbfs",target:"_blank",rel:"noopener noreferrer"},me={href:"https://github.com/agbrs/agb",target:"_blank",rel:"noopener noreferrer"},pe={href:"https://github.com/MnlPhlp/gbaLib",target:"_blank",rel:"noopener noreferrer"},fe={href:"https://github.com/afska/gba-link-connection",target:"_blank",rel:"noopener noreferrer"},_e=e("h2",{id:"emulators",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#emulators","aria-hidden":"true"},"#"),r(" Emulators")],-1),ke={href:"https://mgba.io",target:"_blank",rel:"noopener noreferrer"},ve={href:"https://problemkaputt.de/gba.htm",target:"_blank",rel:"noopener noreferrer"},Ae={href:"https://github.com/nba-emu/NanoBoyAdvance",target:"_blank",rel:"noopener noreferrer"},ye={href:"https://github.com/skylersaleh/SkyEmu",target:"_blank",rel:"noopener noreferrer"},Be={href:"https://github.com/MiSTer-devel/GBA_MiSTer",target:"_blank",rel:"noopener noreferrer"},we={href:"https://github.com/MiSTer-devel/Main_MiSTer/wiki",target:"_blank",rel:"noopener noreferrer"},Ge=e("h1",{id:"emulator-development",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#emulator-development","aria-hidden":"true"},"#"),r(" Emulator Development")],-1),xe=e("h2",{id:"testing",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#testing","aria-hidden":"true"},"#"),r(" Testing")],-1),Me={href:"https://github.com/mgba-emu/suite",target:"_blank",rel:"noopener noreferrer"},Ce={href:"https://github.com/jsmolka/gba-suite",target:"_blank",rel:"noopener noreferrer"},Se={href:"https://github.com/pinobatch/240p-test-mini",target:"_blank",rel:"noopener noreferrer"},Te={href:"https://github.com/nba-emu/hw-test",target:"_blank",rel:"noopener noreferrer"},De=e("h1",{id:"homebrews",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#homebrews","aria-hidden":"true"},"#"),r(" Homebrews")],-1),je={href:"https://github.com/exelotl/goodboy-advance",target:"_blank",rel:"noopener noreferrer"},Pe={href:"https://github.com/JeffRuLz/Celeste-Classic-GBA",target:"_blank",rel:"noopener noreferrer"},Ie={href:"https://github.com/doomhack/GBADoom",target:"_blank",rel:"noopener noreferrer"},Le={href:"https://github.com/evanbowman/blind-jump-portable",target:"_blank",rel:"noopener noreferrer"},Re={href:"https://github.com/pmprog/TigermothGBA",target:"_blank",rel:"noopener noreferrer"},Ee={href:"https://github.com/redthing1/duster",target:"_blank",rel:"noopener noreferrer"},Ne={href:"https://github.com/XProger/OpenLara",target:"_blank",rel:"noopener noreferrer"},Oe=e("h1",{id:"jams",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#jams","aria-hidden":"true"},"#"),r(" Jams")],-1),He={href:"https://itch.io/jam/gbajam21/entries",target:"_blank",rel:"noopener noreferrer"},We={href:"https://itch.io/jam/gba-winter-jam-2021/entries",target:"_blank",rel:"noopener noreferrer"},Je={href:"https://itch.io/jam/gbajam22/entries",target:"_blank",rel:"noopener noreferrer"},Ve={href:"https://itch.io/jam/gba-winter-jam-23",target:"_blank",rel:"noopener noreferrer"},Fe=e("h1",{id:"miscellanea",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#miscellanea","aria-hidden":"true"},"#"),r(" Miscellanea")],-1),Ke={href:"https://github.com/PikalaxALT/gba_bios",target:"_blank",rel:"noopener noreferrer"},Ue={href:"https://github.com/PeterLemon/GBA",target:"_blank",rel:"noopener noreferrer"},qe={href:"https://github.com/redthing1/dkarm_gba_docker",target:"_blank",rel:"noopener noreferrer"},ze={href:"https://github.com/gb-archive/usenti",target:"_blank",rel:"noopener noreferrer"},Ze=e("h2",{id:"dumping-the-gba-bios",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#dumping-the-gba-bios","aria-hidden":"true"},"#"),r(" Dumping the GBA BIOS")],-1),$e={href:"https://gist.github.com/modwizcode/b4afc78ea74fb453be3bcaf3d3bc8adc",target:"_blank",rel:"noopener noreferrer"},Xe={href:"https://mgba.io/2017/06/30/cracking-gba-bios/",target:"_blank",rel:"noopener noreferrer"},Qe={href:"https://gist.github.com/MerryMage/797c523724e2dc02ada86a1cfadea3ee",target:"_blank",rel:"noopener noreferrer"},Ye=e("h2",{id:"reverse-engineering",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#reverse-engineering","aria-hidden":"true"},"#"),r(" Reverse engineering")],-1),er={href:"https://medium.com/@bruno.macabeus/reverse-engineering-a-gameboy-advance-game-introduction-ec185bd8e02",target:"_blank",rel:"noopener noreferrer"},rr={href:"https://github.com/macabeus/klo-gba.js",target:"_blank",rel:"noopener noreferrer"},tr=e("em",null,"Klonoa: Empire of Dreams",-1),or={href:"https://github.com/pret/pokeruby",target:"_blank",rel:"noopener noreferrer"},nr=e("h2",{id:"historical-links",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#historical-links","aria-hidden":"true"},"#"),r(" Historical links")],-1),ar={href:"http://www.console-dev.de/project/hel-library-for-gba/",target:"_blank",rel:"noopener noreferrer"},ir={href:"http://members.iinet.net.au/~freeaxs/gbacomp/",target:"_blank",rel:"noopener noreferrer"};function lr(sr,hr){const t=i("ExternalLinkIcon");return l(),s("div",null,[d,e("ul",null,[e("li",null,[e("a",c,[r("Technical introduction to the GBA"),o(t)])])]),u,e("ul",null,[e("li",null,[e("p",null,[e("a",g,[r("GBAdev Forum"),o(t)]),r(" - Our new hub for announcements and long-form discussion. It's a good place to ask questions and share progress on your projects.")])]),e("li",null,[e("p",null,[e("a",b,[r("GBAdev Discord"),o(t)]),r(" - This is where everyone hangs out to chat nowadays. Come say hi!")]),e("details",null,[m,e("p",null,[r("All rooms are bridged to IRC channels on "),e("a",p,[r("EFnet"),o(t)]),r(".")]),f])])]),_,e("ul",null,[e("li",null,[e("a",k,[r("GBAdev.org"),o(t)]),r(" - The longstanding homepage of the scene. Still updated with news and releases (but the forums have been broken for a while).")]),e("li",null,[e("a",v,[r("GBAtemp"),o(t)]),r(" - The site carries the GBA name, but nowadays the console is relegated to the backbenches. It's a good place to talk about gaming and hardware though.")])]),A,e("ul",null,[e("li",null,[e("a",y,[r("GBATEK"),o(t)]),r(" - Programming specs for the GBA and NDS hardware")]),e("li",null,[e("a",B,[r("CowBite Virtual Hardware Specifications"),o(t)]),r(" - Older GBA hardware documentation")]),e("li",null,[e("a",w,[r("The Audio Advance"),o(t)]),r(" - Audio hardware documentation and basic test ROMs")])]),G,e("ul",null,[e("li",null,[e("a",x,[r("Tonc"),o(t)]),r(" - The new, revamped but WIP version of the GBA Programming guide. The original version is "),e("a",M,[r("here"),o(t)])]),e("li",null,[e("a",C,[r("Compile C++ for GBA in under an hour"),o(t)]),r(" - Cinemint's video for getting started with C++/Butano")]),e("li",null,[e("a",S,[r("Sound on the Gameboy Advance"),o(t)]),r(" - How to write your own sound mixer / MOD music player")])]),T,e("ul",null,[e("li",null,[e("a",D,[r("Gameboy Advance Resource Management"),o(t)]),r(" - Allocation techniques for the GBA's various memory regions")]),e("li",null,[e("a",j,[r("Managing Sprite Cel VRAM on the Game Boy Advance"),o(t)]),r(" - Analysis of the VRAM streaming approach for animated sprites")]),e("li",null,[e("a",P,[r("Using Beepbox for GBA Music Composition"),o(t)])])]),I,L,e("ul",null,[e("li",null,[e("a",R,[r("devkitARM"),o(t)]),r(" - C/C++ cross-compiler toolchain, which includes libgba, libtonc, maxmod, and various tools and example projects.")]),e("li",null,[e("a",E,[r("gba-toolchain"),o(t)]),r(" - GNU Arm Embedded Toolchain based alternative to devkitARM.")]),e("li",null,[e("a",N,[r("gvasm"),o(t)]),r(" - Stand-alone assembler and disassembler (WIP) designed specifically for GBA homebrew")]),e("li",null,[e("a",O,[r("TinyGo"),o(t)]),r(" - An alternative Go compiler for embedded systems, that supports GBA compilation")])]),H,e("ul",null,[e("li",null,[e("a",W,[r("rust-console"),o(t)]),r(" - GBA programming in Rust, plus tutorial.")]),e("li",null,[e("a",J,[r("natu"),o(t)]),r(" - GBA programming in Nim (provides wrapper around libtonc, maxmod and more).")]),e("li",null,[e("a",V,[r("gba-modern"),o(t)]),r(" - Write GBA games using modern C++.")]),e("li",null,[e("a",F,[r("ZigGBA"),o(t)]),r(" - WIP SDK for creating GBA games using Zig (Inspired by Tonc).")]),e("li",null,[e("a",K,[r("Butano"),o(t)]),r(" - Modern C++ high level engine for the GBA.")]),e("li",null,[e("a",U,[r("BPCore Engine"),o(t)]),r(" - Create GBA applications with the Lua programming language")]),e("li",null,[e("a",q,[r("GBA Dlang"),o(t)]),r(" - WIP SDK for GBA development using D, using LLVM toolchain. provides fully functional TONC, GBFS, Maxmod.")]),e("li",null,[e("a",z,[r("dusk"),o(t)]),r(" - Simple, lightweight, intuitive framework for GBA game development")]),e("li",null,[e("a",Z,[r("gbsenpai"),o(t)]),r(" - GB Studio player GBA port with some enhancements.")]),e("li",null,[e("a",$,[r("meson-gba"),o(t)]),r(" - Meson-based GBA toolkit with support for many different libraries and tools.")]),e("li",null,[e("a",X,[r("sdk-seven"),o(t)]),r(" - Modern runtime and tooling, and libraries for GBA development. Works with meson-gba or standalone.")]),e("li",null,[e("a",Q,[r("rath"),o(t)]),r(" - Forth programming environment for the Game Boy Advance")]),e("li",null,[e("a",Y,[r("ada-gba-dev"),o(t)]),r(" - A build system, libraries, and tools for producing programs for the Game Boy Advance using the Ada programming language.")])]),ee,e("ul",null,[e("li",null,[e("a",re,[r("agbabi"),o(t)]),r(" - Drop-in application binary interface library (context switching, division, irq, memcpy, sine).")]),e("li",null,[e("a",te,[r("gba-hpp"),o(t)]),r(" - C++20 header-only library for GBA development.")]),e("li",null,[e("a",oe,[r("HeartLib"),o(t)]),r(" - Comprehensive C library inspired by the classic HAMLib.")]),e("li",null,[e("a",ne,[r("libseven"),o(t)]),r(" - Modern, from-scratch replacement for libgba and libtonc.")]),e("li",null,[e("a",ae,[r("GBAdv"),o(t)]),r(" - High level utilities on top of libgba.")]),e("li",null,[e("a",ie,[r("Maxmod"),o(t)]),r(" - Music and sound library (supports .mod, .xm, .s3m, .it)")]),e("li",null,[e("a",le,[r("Apex Audio System"),o(t)]),r(" - Music and sound library (supports .mod only, but "),se,r(" good performance)")]),e("li",null,[e("a",he,[r("Krawall"),o(t)]),r(" - Music and sound library (supports .xm, .s3m)")]),e("li",null,[e("a",de,[r("Pimpmobile"),o(t)]),r(" - Music library (supports .mod, .xm)")]),e("li",null,[e("a",ce,[r("GBT Player"),o(t)]),r(" - Music library that uses the DMG sound channels (close to 0% CPU usage).")]),e("li",null,[e("a",ue,[r("posprintf"),o(t)]),r(" - An "),ge,r(" routine written in Thumb assembler.")]),e("li",null,[e("a",be,[r("GBFS"),o(t)]),r(" - Practical filesystem")]),e("li",null,[e("a",me,[r("agb"),o(t)]),r(" - Rust library. It attempts to be a high level abstraction over the internal workings of the Game Boy Advance whilst still being high performance and memory efficient.")]),e("li",null,[e("a",pe,[r("gbaLib"),o(t)]),r(" - Library for programming the GBA with TinyGo")]),e("li",null,[e("a",fe,[r("gba-link-connection"),o(t)]),r(": A set of C++ libraries to interact with the Serial Port (Link Cable, Wireless Adapter, GPIO, SPI)")])]),_e,e("ul",null,[e("li",null,[e("a",ke,[r("mGBA"),o(t)]),r(" - Actively developed GBA emulator. Runs on a bunch of platforms. Text debugger through GDB stub.")]),e("li",null,[e("a",ve,[r("No$gba"),o(t)]),r(" - Venerable GBA emulator. Windows only, but runs well under Wine. Not very actively maintained but still gets updates now and then. Sports graphical debugger.")]),e("li",null,[e("a",Ae,[r("NanoBoyAdvance"),o(t)]),r(" - GBA emulator with high accuracy, especially in timing and CPU emulation. Does not have debugging features.")]),e("li",null,[e("a",ye,[r("SkyEmu"),o(t)]),r(" - GB/GBA/NDS Emulator with built in debuggers, REST API for scripting, and high accuracy.")]),e("li",null,[e("a",Be,[r("MiSTer FPGA implementation"),o(t)]),r(" - Needs "),e("a",we,[r("MiSTer"),o(t)]),r(" setup to run.")])]),Ge,xe,e("ul",null,[e("li",null,[e("a",Me,[r("mGBA test suite"),o(t)])]),e("li",null,[e("a",Ce,[r("GBA Suite"),o(t)])]),e("li",null,[e("a",Se,[r("240p-test-mini"),o(t)]),r(" - video signal tests")]),e("li",null,[e("a",Te,[r("NBA hardware tests"),o(t)])])]),De,e("ul",null,[e("li",null,[e("a",je,[r("Goodboy Advance"),o(t)]),r(" - Made in 2018, and has a nice bit of information on how it's made.")]),e("li",null,[e("a",Pe,[r("Celeste Classic"),o(t)]),r(" - 2019 port of Pico8 version of Celeste.")]),e("li",null,[e("a",Ie,[r("GBADoom"),o(t)]),r(" - 2019/2020 GBA port of prBoom version of Doom.")]),e("li",null,[e("a",Le,[r("BlindJump"),o(t)]),r(" - Adventure game, developed in 2020. Implementation of link-cable multiplayer, fully digital audio.")]),e("li",null,[e("a",Re,[r("Tigermoth"),o(t)]),r(" - Bullet hell game, developed for the GBAJam 2021")]),e("li",null,[e("a",Ee,[r("Duster"),o(t)]),r(" - A sleek strategy board game for the gba")]),e("li",null,[e("a",Ne,[r("OpenLara"),o(t)]),r(" - Classic Tomb Raider open-source engine")])]),Oe,e("ul",null,[e("li",null,[e("a",He,[r("GBA Jam 2021"),o(t)])]),e("li",null,[e("a",We,[r("GBA Winter Jam '21"),o(t)])]),e("li",null,[e("a",Je,[r("GBA Jam 2022"),o(t)])]),e("li",null,[e("a",Ve,[r("GBA Winter Jam '23"),o(t)])])]),Fe,e("ul",null,[e("li",null,[e("a",Ke,[r("gba_bios"),o(t)]),r(" - WIP disassembly of the Game Boy Advance BIOS")]),e("li",null,[e("a",Ue,[r("GBA bare metal code"),o(t)]),r(" - Various experiments by Krom, such as video playback and 3D, written in ARM Assembly")]),e("li",null,[e("a",qe,[r("dkarm_gba_docker"),o(t)]),r(" - A Docker image that includes DevkitARM and other GBA SDK tools, packaged together to allow a consistent toolchain configuration and reproducibility in builds. Also can be helpful in ensuring a consistent build environment for continuous integration.")]),e("li",null,[e("a",ze,[r("Usenti"),o(t)]),r(" - Simple bitmap editor for paletted images aimed at GBA development.")])]),Ze,e("ul",null,[e("li",null,[e("a",$e,[r("Software interrupt $1F / MidiKey2Freq"),o(t)]),r(", canonical method")]),e("li",null,[e("a",Xe,[r("Cracking the GBA BIOS"),o(t)]),r(" by endrift")]),e("li",null,[e("a",Qe,[r("Dumping the GBA BIOS"),o(t)]),r(", another method by MerryMage")])]),Ye,e("ul",null,[e("li",null,[e("a",er,[r("Reverse Engineering a GameBoy Advance Game"),o(t)]),r(" - A series of detailed posts and talks about developing a "),e("a",rr,[r("level editor"),o(t)]),r(" for "),tr]),e("li",null,[e("a",or,[r("Pokemon Ruby"),o(t)]),r(" - C programming language annotation of a Pokemon Ruby disassembly")])]),nr,e("ul",null,[e("li",null,[e("a",ar,[r("HEL"),o(t)]),r(" - GBA C library built on top of HAM (a classic SDK from back in the day)")]),e("li",null,[e("a",ir,[r("Headspin's Guide"),o(t)]),r(" to Compression, Files Systems, Screen Effects and MOD Players for the Gameboy Advance")])])])}const cr=a(h,[["render",lr],["__file","resources.html.vue"]]);export{cr as default}; diff --git a/gbajam22.html b/gbajam22.html index feebdeb..06813c9 100644 --- a/gbajam22.html +++ b/gbajam22.html @@ -36,10 +36,10 @@ })(); GBA Jam 2022 | gbadev - +

GBA Jam 2022

The GBA Jam 2022 has reached its conclusion!

The event was hosted by the the gbadev.netopen in new window community. We're promoting the development of new GBA homebrew games, development tools and documentation. Join us on Discordopen in new window and check out our curated collection of gbadev resourcesopen in new window.

To everyone who took part: thanks so much for joining, and congrats on making it this far. Above all else we hope you had fun and learned something new. We're proud of ya!

Thanks to our sponsors, who made this possible and provided wonderful prizes for the winners:
Incube8 Gamesopen in new window, Pocket Pulpopen in new window, RST Gamesopen in new window, Epilogueopen in new window and the gbdevopen in new window community.

And thanks to everyone who donatedopen in new window, our fellow organisers and judges, and of course everyone who's played & enjoyed the entries so far (if you haven't yet, what are you waiting for!!)

Results

Prize winners are in bold. Open-source bonus is denoted by ï¹¢.

Ties are left as-is, except for 3rd place which needed a tie-break due to the physical prize. Scroll down for more info!

Full detailed results for all 26 entries can be found at the jam page on itch.ioopen in new window.

Overall

  1. Green Memories by Tengukaze Studio
  2. Hero Core GBA portï¹¢ by Evan Bowman
  3. notenogramï¹¢ by kva64
  4. Collie Defenceï¹¢ by vayan
  5. Attack on Voxelburg by nuclear
    A Rushed Hack Job by Pyro_Pyro
  6. Gerbil Space Program by Origamiscienceguy, n67094, Nikku4211
  7. Ravenia by allalonegamez
  8. Chocolate Hunter Runa by Lsh0426
  9. Coin Fall by 3DSage
  10. Lane by setsquare
  11. Nuclear Love by Jono Shields
  12. BugTris by NotImplementedLife
    Jump Kid by allalonegamez
    Pocket Paint by jroatch
  13. HEXES by EigenlightArts
  14. Villager's Ambition by AtsushiHdez
    The Enchanted Place by VideoGameStoryTime
  15. gnoq by Bergasms
  16. Kankandara no Mori by brave_orakio
  17. Glacia Dungeon by NotImplementedLife
    MineBoyAdvance by sulsadood
    Minesweeper Battle by Dewbone3
  18. Pathfinder Demo by pyroceper
  19. YALAXY01-Yearlysis by MysteryStrawberry
  20. The Axe by Maximilian II

Technical

  1. Attack on Voxelburg by nuclear
  2. Coin Fall by 3DSage
  3. Gerbil Space Program by Origamiscienceguy, n67094, Nikku4211
  4. Hero Core GBA port by Evan Bowman
    notenogram by kva64
    Green Memories by Tengukaze Studio

Originality

  1. Green Memories by Tengukaze Studio
  2. The Enchanted Place by VideoGameStoryTime
    Lane by setsquare
  3. Chocolate Hunter Runa by Lsh0426
  4. HEXES by EigenlightArts

Graphics

  1. Gerbil Space Program by Origamiscienceguy, n67094, Nikku4211
  2. Green Memories by Tengukaze Studio
  3. Attack on Voxelburg by nuclear
  4. notenogram by kva64
  5. Nuclear Love by Jono Shields

Audio

  1. Green Memories by Tengukaze Studio
  2. A Rushed Hack Job by Pyro_Pyro
    notenogram by kva64
  3. Gerbil Space Program by Origamiscienceguy, n67094, Nikku4211
    Hero Core GBA port by Evan Bowman

Polish

  1. Hero Core GBA port by Evan Bowman
  2. Green Memories by Tengukaze Studio
  3. Ravenia by allalonegamez
  4. A Rushed Hack Job by Pyro_Pyro
  5. Chocolate Hunter Runa by Lsh0426

Prizes

If you won a prize, we'll be in touch via email over the next few days.

More details on how the prizes were calculated can be found hereopen in new window.

Physical Prizes

The top 3 participants can choose from the following pool (first place gets first pick, and so on...)

Money Prizes

  • 1st place - $574
  • 2nd place - $230
  • 3rd place - $143
  • 4th place - $115
  • 5th place - $86

Open source bonus

Additional prize money is given to the top 3 entries whose source code was released under a free-software license.

  • 1st - $143
  • 2nd - $86
  • 3rd - $57

Tie-breaks

Notenogram and Collie Defence required a tie-break due to the physical prize. The judges held a vote to break the tie, but this also tied... so we decided to use the average score across all categories (technical, originality, graphics, audio, polish) to decide who should get 3rd place.

For the tie between Attack on Voxelburg and A Rushed Hack Job, we decided it would be most fair to split the prize money 50/50, since there were no physical prizes involved for those.

Last Updated:
- + diff --git a/gbajam24.html b/gbajam24.html new file mode 100644 index 0000000..36d7c9a --- /dev/null +++ b/gbajam24.html @@ -0,0 +1,45 @@ + + + + + + + + + GBA Jam 2024 | gbadev + + + + + + + + diff --git a/getting-started.html b/getting-started.html index 62f1330..45dbe3c 100644 --- a/getting-started.html +++ b/getting-started.html @@ -36,10 +36,10 @@ })(); Getting started | gbadev - +

Getting started in GBAdev

Welcome to GBAdev! If you have decided to try to develop something for the GBA and you're completely lost, this guide is for you. Note that this will only mention the most popular and recommended options. Check gbadev resources for a long list about many relevant toolkits and libraries you can use!

Developing your game

Broadly speaking there are 3 paths you can take to get started. Which one you choose depends on your previous knowledge about programming, and how much of your game you want to create yourself.

High level development

This is ideal if you just want to get a game done, without worrying too much about how the hardware works. Unfortunately, there is nothing similar to PC engines like Unity, Godot, and the GBA doesn't support languages like C#, Python or Java.

Our recommendation is to use butanoopen in new window, a C++ library that simplifies GBA development a lot. It has become quite popular, so you will easily get support for it. You should follow the getting startedopen in new window instructions. It comes with a lot of examples of how to use all its features, check them out!

If you prefer something higher level, BPCore-Engineopen in new window is an engine that allows you to develop games using Lua as a language.

Low level development

If you're comfortable writing to I/O registers and reading low level documentation like GBATEKopen in new window there are a few options:

C and C++

The most popular option is to use devkitARM and libtoncopen in new window. Follow the instructions in the getting started guideopen in new window to install devkitARM and check the examplesopen in new window and the templateopen in new window. Once you have verified that you can compile the examples read the tutorial Toncopen in new window (by the author of libtonc) to understand how GBA development goes.

libgba is another library provided by devkitPro, but it isn't as recommended as using libtonc. Both of them fulfill the same role, the main difference of the codebase is that libtonc has a text engine with lots of features. However, libtonc has way better documentation (libgba doesn't have almost any example or documentation).

If you want to use a completely different library than libtonc or libgba, you can try sdk-sevenopen in new window.

If you don't want to use devkitARM, there are some alternatives. For example, check gba-toolchainopen in new window, which also supports libtonc and libgba, and it uses CMake instead of Makefiles.

meson-gbaopen in new window is another option. It uses the Meson build system, it integrates many of the libraries mentioned before (with bugfixes that devkitPro doesn't have), and it supports different compilers and runtime libraries. If you're using sdk-seven, you should really consider using this.

Some tutorials out there mention DevKit Advanceopen in new window. This is a very outdated toolchain (the last release was in 2003!), don't use it! Use devkitARM instead, which is updated regularly.

Assembly

Even though you don't need to use assembly to develop for GBA, it is still an option, and you will need it if you're creating things like a 3D game, or an audio mixer.

All of the C and C++ options also support assembly, so you can use them without any issues.

There is also gvasmopen in new window if you want an option that only focuses on assembly.

Nim

Check Natuopen in new window. It provides a library to write games and tooling to convert assets.

Rust

Check the agb libraryopen in new window.

Development from scratch

If you don't want to use any libraries to create your game, it's possible to ignore all of them and create everything yourself. This is only recommended if you're very comfortable with low level development. It will be hard to get other people to help you if you're not using any of the popular libraries that other people use.

One example of how to build a GBA ROM from scratch with a regular ARM GCC toolchain can be found in GBA bootstrapopen in new window.

Tutorials

Toncopen in new window is currently the best tutorial for GBA development.

Emulation

The recommended emulators are:

Note: VisualBoyAdvance is a very outdated emulator, and not very accurate. Prefer mGBA over VBA.

Community

Join us in discord! This linkopen in new window has an up-to-date invitation to the gbadev discord server were most of the GBA devs hang out nowadays. There is also a forumopen in new window, if you prefer that.

Last Updated:
- + diff --git a/images/jam24-card.png b/images/jam24-card.png new file mode 100644 index 0000000..36d81bc Binary files /dev/null and b/images/jam24-card.png differ diff --git a/index.html b/index.html index e691e3c..a4682b4 100644 --- a/index.html +++ b/index.html @@ -36,10 +36,10 @@ })(); Home | gbadev - + -
gbadev

gbadev

GBA development community

Get started Join the GBA Jam 2024! open in new window Check resources Join us on Discord open in new window

Events

We periodically host ranked game jams and events to bring together the community, such as the GBA Jam 2021 and the GBA Jam 2022.

Documentation

We maintain a curated collection of resources to get started with gba development and we're writing new tutorials and documentation.

Community

We have an active Discord server and a forum where developers hang out, help each other and share what they are working on.

- +
gbadev

gbadev

GBA development community

Get started Check resources Join us on Discord open in new window

Events

We periodically host ranked game jams and events to bring together the community, such as the GBA Jam 2021 and the GBA Jam 2022.

Documentation

We maintain a curated collection of resources to get started with gba development and we're writing new tutorials and documentation.

Community

We have an active Discord server and a forum where developers hang out, help each other and share what they are working on.

+ diff --git a/resources.html b/resources.html index 44ac87f..d84b09a 100644 --- a/resources.html +++ b/resources.html @@ -36,10 +36,10 @@ })(); Resources | gbadev - +

gbadev resources

A curated list of development resources for Game Boy Advance.

Table of Content


Introduction

Community

  • GBAdev Forumopen in new window - Our new hub for announcements and long-form discussion. It's a good place to ask questions and share progress on your projects.

  • GBAdev Discordopen in new window - This is where everyone hangs out to chat nowadays. Come say hi!

    Info for IRC users

    All rooms are bridged to IRC channels on EFnetopen in new window.

    Main channel
    #gbadev - general chat

    Additional channels
    #gba-meta - community feedback/discussion
    #gba-help - help & support
    #gba-emudev - emulator development
    #gba-asm - ARM/Thumb assembly and CPU architecture
    #gba-showcase - share what you're working on!
    #gba-music - listening, composing and audio programming
    #gba-offtopic - off-topic chat
    #gba-docs - community documentation projects (tutorials, technical docs etc.)
    #gbajam - hang out with other GBA Jam participants & share your progress

    Project-specific channels
    #gba-toolchain - gba-toolchain, agbabi, and gba-hpp development & support
    #butano - Butano engine development & support
    #natu - Natu toolkit development & support
    #sdk-seven - sdk-seven development & support

Other places

  • GBAdev.orgopen in new window - The longstanding homepage of the scene. Still updated with news and releases (but the forums have been broken for a while).
  • GBAtempopen in new window - The site carries the GBA name, but nowadays the console is relegated to the backbenches. It's a good place to talk about gaming and hardware though.

Documentation

Tutorials

Articles

Software Development

Compilers

Toolkits

Libraries

Emulators

Emulator Development

Testing

Homebrews

Jams

Miscellanea

Dumping the GBA BIOS

Reverse engineering

Last Updated:
- +