From 84cbf9be8998210134841d607010d1c06b9512c8 Mon Sep 17 00:00:00 2001 From: Pablo de la Torre Jamardo Date: Sat, 19 Jul 2025 20:30:53 +0200 Subject: [PATCH] Migrate frontend from Thymeleaf and basic JS to Vue.js application --- frontend/.gitignore | 27 + frontend/dist/assets/index-BoaPXc3b.js | 18 + frontend/dist/assets/index-Kwm2enAh.css | 1 + frontend/dist/favicon/apple-touch-icon.png | Bin 0 -> 7146 bytes frontend/dist/favicon/favicon-96x96.png | Bin 0 -> 3236 bytes frontend/dist/favicon/favicon.ico | Bin 0 -> 15086 bytes frontend/dist/favicon/favicon.svg | 3 + .../dist/favicon/web-app-manifest-192x192.png | Bin 0 -> 8018 bytes .../dist/favicon/web-app-manifest-512x512.png | Bin 0 -> 27378 bytes frontend/dist/index.html | 19 + frontend/dist/robots.txt | 2 + frontend/dist/site.webmanifest | 21 + frontend/index.html | 18 + frontend/package-lock.json | 1132 +++++++++++++++++ frontend/package.json | 17 + frontend/public/favicon/apple-touch-icon.png | Bin 0 -> 7146 bytes frontend/public/favicon/favicon-96x96.png | Bin 0 -> 3236 bytes frontend/public/favicon/favicon.ico | Bin 0 -> 15086 bytes frontend/public/favicon/favicon.svg | 3 + .../favicon/web-app-manifest-192x192.png | Bin 0 -> 8018 bytes .../favicon/web-app-manifest-512x512.png | Bin 0 -> 27378 bytes frontend/public/robots.txt | 2 + frontend/public/site.webmanifest | 21 + frontend/src/App.vue | 16 + frontend/src/assets/styles.css | 36 + frontend/src/components/ChatForm.vue | 116 ++ frontend/src/components/ChatLayout.vue | 145 +++ frontend/src/components/ChatMain.vue | 56 + frontend/src/components/ChatMessages.vue | 143 +++ frontend/src/components/ChatSidebar.vue | 95 ++ frontend/src/main.ts | 5 + frontend/src/services/chatService.js | 63 + frontend/src/utils/dateUtils.ts | 14 + frontend/vite.config.js | 15 + 34 files changed, 1988 insertions(+) create mode 100644 frontend/.gitignore create mode 100644 frontend/dist/assets/index-BoaPXc3b.js create mode 100644 frontend/dist/assets/index-Kwm2enAh.css create mode 100644 frontend/dist/favicon/apple-touch-icon.png create mode 100644 frontend/dist/favicon/favicon-96x96.png create mode 100644 frontend/dist/favicon/favicon.ico create mode 100644 frontend/dist/favicon/favicon.svg create mode 100644 frontend/dist/favicon/web-app-manifest-192x192.png create mode 100644 frontend/dist/favicon/web-app-manifest-512x512.png create mode 100644 frontend/dist/index.html create mode 100644 frontend/dist/robots.txt create mode 100644 frontend/dist/site.webmanifest create mode 100644 frontend/index.html create mode 100644 frontend/package-lock.json create mode 100644 frontend/package.json create mode 100644 frontend/public/favicon/apple-touch-icon.png create mode 100644 frontend/public/favicon/favicon-96x96.png create mode 100644 frontend/public/favicon/favicon.ico create mode 100644 frontend/public/favicon/favicon.svg create mode 100644 frontend/public/favicon/web-app-manifest-192x192.png create mode 100644 frontend/public/favicon/web-app-manifest-512x512.png create mode 100644 frontend/public/robots.txt create mode 100644 frontend/public/site.webmanifest create mode 100644 frontend/src/App.vue create mode 100644 frontend/src/assets/styles.css create mode 100644 frontend/src/components/ChatForm.vue create mode 100644 frontend/src/components/ChatLayout.vue create mode 100644 frontend/src/components/ChatMain.vue create mode 100644 frontend/src/components/ChatMessages.vue create mode 100644 frontend/src/components/ChatSidebar.vue create mode 100644 frontend/src/main.ts create mode 100644 frontend/src/services/chatService.js create mode 100644 frontend/src/utils/dateUtils.ts create mode 100644 frontend/vite.config.js diff --git a/frontend/.gitignore b/frontend/.gitignore new file mode 100644 index 0000000..f650315 --- /dev/null +++ b/frontend/.gitignore @@ -0,0 +1,27 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules + +# next.js +/.next/ +/out/ + +# production +/build + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* +.pnpm-debug.log* + +# env files +.env* + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts \ No newline at end of file diff --git a/frontend/dist/assets/index-BoaPXc3b.js b/frontend/dist/assets/index-BoaPXc3b.js new file mode 100644 index 0000000..36cadaa --- /dev/null +++ b/frontend/dist/assets/index-BoaPXc3b.js @@ -0,0 +1,18 @@ +(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const r of document.querySelectorAll('link[rel="modulepreload"]'))n(r);new MutationObserver(r=>{for(const i of r)if(i.type==="childList")for(const o of i.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&n(o)}).observe(document,{childList:!0,subtree:!0});function s(r){const i={};return r.integrity&&(i.integrity=r.integrity),r.referrerPolicy&&(i.referrerPolicy=r.referrerPolicy),r.crossOrigin==="use-credentials"?i.credentials="include":r.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function n(r){if(r.ep)return;r.ep=!0;const i=s(r);fetch(r.href,i)}})();/** +* @vue/shared v3.5.17 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**//*! #__NO_SIDE_EFFECTS__ */function Ds(e){const t=Object.create(null);for(const s of e.split(","))t[s]=1;return s=>s in t}const j={},tt=[],Te=()=>{},Wr=()=>!1,kt=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Ls=e=>e.startsWith("onUpdate:"),se=Object.assign,Hs=(e,t)=>{const s=e.indexOf(t);s>-1&&e.splice(s,1)},qr=Object.prototype.hasOwnProperty,D=(e,t)=>qr.call(e,t),A=Array.isArray,st=e=>es(e)==="[object Map]",Dn=e=>es(e)==="[object Set]",P=e=>typeof e=="function",G=e=>typeof e=="string",Ve=e=>typeof e=="symbol",B=e=>e!==null&&typeof e=="object",Ln=e=>(B(e)||P(e))&&P(e.then)&&P(e.catch),Hn=Object.prototype.toString,es=e=>Hn.call(e),Gr=e=>es(e).slice(8,-1),jn=e=>es(e)==="[object Object]",js=e=>G(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,gt=Ds(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),ts=e=>{const t=Object.create(null);return s=>t[s]||(t[s]=e(s))},Jr=/-(\w)/g,Ne=ts(e=>e.replace(Jr,(t,s)=>s?s.toUpperCase():"")),Yr=/\B([A-Z])/g,Be=ts(e=>e.replace(Yr,"-$1").toLowerCase()),Nn=ts(e=>e.charAt(0).toUpperCase()+e.slice(1)),as=ts(e=>e?`on${Nn(e)}`:""),je=(e,t)=>!Object.is(e,t),Kt=(e,...t)=>{for(let s=0;s{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:n,value:s})},Cs=e=>{const t=parseFloat(e);return isNaN(t)?e:t};let rn;const ss=()=>rn||(rn=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Ns(e){if(A(e)){const t={};for(let s=0;s{if(s){const n=s.split(Xr);n.length>1&&(t[n[0].trim()]=n[1].trim())}}),t}function Ot(e){let t="";if(G(e))t=e;else if(A(e))for(let s=0;s!!(e&&e.__v_isRef===!0),qt=e=>G(e)?e:e==null?"":A(e)||B(e)&&(e.toString===Hn||!P(e.toString))?Un(e)?qt(e.value):JSON.stringify(e,Vn,2):String(e),Vn=(e,t)=>Un(t)?Vn(e,t.value):st(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((s,[n,r],i)=>(s[ds(n,i)+" =>"]=r,s),{})}:Dn(t)?{[`Set(${t.size})`]:[...t.values()].map(s=>ds(s))}:Ve(t)?ds(t):B(t)&&!A(t)&&!jn(t)?String(t):t,ds=(e,t="")=>{var s;return Ve(e)?`Symbol(${(s=e.description)!=null?s:t})`:e};/** +* @vue/reactivity v3.5.17 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let ie;class ti{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.parent=ie,!t&&ie&&(this.index=(ie.scopes||(ie.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,s;if(this.scopes)for(t=0,s=this.scopes.length;t0&&--this._on===0&&(ie=this.prevScope,this.prevScope=void 0)}stop(t){if(this._active){this._active=!1;let s,n;for(s=0,n=this.effects.length;s0)return;if(_t){let t=_t;for(_t=void 0;t;){const s=t.next;t.next=void 0,t.flags&=-9,t=s}}let e;for(;mt;){let t=mt;for(mt=void 0;t;){const s=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(n){e||(e=n)}t=s}}if(e)throw e}function Gn(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function Jn(e){let t,s=e.depsTail,n=s;for(;n;){const r=n.prevDep;n.version===-1?(n===s&&(s=r),Vs(n),ni(n)):t=n,n.dep.activeLink=n.prevActiveLink,n.prevActiveLink=void 0,n=r}e.deps=t,e.depsTail=s}function Ts(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(Yn(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function Yn(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===wt)||(e.globalVersion=wt,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!Ts(e))))return;e.flags|=2;const t=e.dep,s=U,n=ge;U=e,ge=!0;try{Gn(e);const r=e.fn(e._value);(t.version===0||je(r,e._value))&&(e.flags|=128,e._value=r,t.version++)}catch(r){throw t.version++,r}finally{U=s,ge=n,Jn(e),e.flags&=-3}}function Vs(e,t=!1){const{dep:s,prevSub:n,nextSub:r}=e;if(n&&(n.nextSub=r,e.prevSub=void 0),r&&(r.prevSub=n,e.nextSub=void 0),s.subs===e&&(s.subs=n,!n&&s.computed)){s.computed.flags&=-5;for(let i=s.computed.deps;i;i=i.nextDep)Vs(i,!0)}!t&&!--s.sc&&s.map&&s.map.delete(s.key)}function ni(e){const{prevDep:t,nextDep:s}=e;t&&(t.nextDep=s,e.prevDep=void 0),s&&(s.prevDep=t,e.nextDep=void 0)}let ge=!0;const zn=[];function Ie(){zn.push(ge),ge=!1}function Re(){const e=zn.pop();ge=e===void 0?!0:e}function on(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const s=U;U=void 0;try{t()}finally{U=s}}}let wt=0;class ri{constructor(t,s){this.sub=t,this.dep=s,this.version=s.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class Bs{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(t){if(!U||!ge||U===this.computed)return;let s=this.activeLink;if(s===void 0||s.sub!==U)s=this.activeLink=new ri(U,this),U.deps?(s.prevDep=U.depsTail,U.depsTail.nextDep=s,U.depsTail=s):U.deps=U.depsTail=s,Xn(s);else if(s.version===-1&&(s.version=this.version,s.nextDep)){const n=s.nextDep;n.prevDep=s.prevDep,s.prevDep&&(s.prevDep.nextDep=n),s.prevDep=U.depsTail,s.nextDep=void 0,U.depsTail.nextDep=s,U.depsTail=s,U.deps===s&&(U.deps=n)}return s}trigger(t){this.version++,wt++,this.notify(t)}notify(t){Ks();try{for(let s=this.subs;s;s=s.prevSub)s.sub.notify()&&s.sub.dep.notify()}finally{Us()}}}function Xn(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let n=t.deps;n;n=n.nextDep)Xn(n)}const s=e.dep.subs;s!==e&&(e.prevSub=s,s&&(s.nextSub=e)),e.dep.subs=e}}const Es=new WeakMap,Xe=Symbol(""),Os=Symbol(""),St=Symbol("");function X(e,t,s){if(ge&&U){let n=Es.get(e);n||Es.set(e,n=new Map);let r=n.get(s);r||(n.set(s,r=new Bs),r.map=n,r.key=s),r.track()}}function Ae(e,t,s,n,r,i){const o=Es.get(e);if(!o){wt++;return}const l=f=>{f&&f.trigger()};if(Ks(),t==="clear")o.forEach(l);else{const f=A(e),h=f&&js(s);if(f&&s==="length"){const a=Number(n);o.forEach((p,S)=>{(S==="length"||S===St||!Ve(S)&&S>=a)&&l(p)})}else switch((s!==void 0||o.has(void 0))&&l(o.get(s)),h&&l(o.get(St)),t){case"add":f?h&&l(o.get("length")):(l(o.get(Xe)),st(e)&&l(o.get(Os)));break;case"delete":f||(l(o.get(Xe)),st(e)&&l(o.get(Os)));break;case"set":st(e)&&l(o.get(Xe));break}}Us()}function Ze(e){const t=$(e);return t===e?t:(X(t,"iterate",St),pe(e)?t:t.map(Y))}function ns(e){return X(e=$(e),"iterate",St),e}const ii={__proto__:null,[Symbol.iterator](){return ps(this,Symbol.iterator,Y)},concat(...e){return Ze(this).concat(...e.map(t=>A(t)?Ze(t):t))},entries(){return ps(this,"entries",e=>(e[1]=Y(e[1]),e))},every(e,t){return Oe(this,"every",e,t,void 0,arguments)},filter(e,t){return Oe(this,"filter",e,t,s=>s.map(Y),arguments)},find(e,t){return Oe(this,"find",e,t,Y,arguments)},findIndex(e,t){return Oe(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return Oe(this,"findLast",e,t,Y,arguments)},findLastIndex(e,t){return Oe(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return Oe(this,"forEach",e,t,void 0,arguments)},includes(...e){return gs(this,"includes",e)},indexOf(...e){return gs(this,"indexOf",e)},join(e){return Ze(this).join(e)},lastIndexOf(...e){return gs(this,"lastIndexOf",e)},map(e,t){return Oe(this,"map",e,t,void 0,arguments)},pop(){return at(this,"pop")},push(...e){return at(this,"push",e)},reduce(e,...t){return ln(this,"reduce",e,t)},reduceRight(e,...t){return ln(this,"reduceRight",e,t)},shift(){return at(this,"shift")},some(e,t){return Oe(this,"some",e,t,void 0,arguments)},splice(...e){return at(this,"splice",e)},toReversed(){return Ze(this).toReversed()},toSorted(e){return Ze(this).toSorted(e)},toSpliced(...e){return Ze(this).toSpliced(...e)},unshift(...e){return at(this,"unshift",e)},values(){return ps(this,"values",Y)}};function ps(e,t,s){const n=ns(e),r=n[t]();return n!==e&&!pe(e)&&(r._next=r.next,r.next=()=>{const i=r._next();return i.value&&(i.value=s(i.value)),i}),r}const oi=Array.prototype;function Oe(e,t,s,n,r,i){const o=ns(e),l=o!==e&&!pe(e),f=o[t];if(f!==oi[t]){const p=f.apply(e,i);return l?Y(p):p}let h=s;o!==e&&(l?h=function(p,S){return s.call(this,Y(p),S,e)}:s.length>2&&(h=function(p,S){return s.call(this,p,S,e)}));const a=f.call(o,h,n);return l&&r?r(a):a}function ln(e,t,s,n){const r=ns(e);let i=s;return r!==e&&(pe(e)?s.length>3&&(i=function(o,l,f){return s.call(this,o,l,f,e)}):i=function(o,l,f){return s.call(this,o,Y(l),f,e)}),r[t](i,...n)}function gs(e,t,s){const n=$(e);X(n,"iterate",St);const r=n[t](...s);return(r===-1||r===!1)&&Js(s[0])?(s[0]=$(s[0]),n[t](...s)):r}function at(e,t,s=[]){Ie(),Ks();const n=$(e)[t].apply(e,s);return Us(),Re(),n}const li=Ds("__proto__,__v_isRef,__isVue"),Zn=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(Ve));function ci(e){Ve(e)||(e=String(e));const t=$(this);return X(t,"has",e),t.hasOwnProperty(e)}class Qn{constructor(t=!1,s=!1){this._isReadonly=t,this._isShallow=s}get(t,s,n){if(s==="__v_skip")return t.__v_skip;const r=this._isReadonly,i=this._isShallow;if(s==="__v_isReactive")return!r;if(s==="__v_isReadonly")return r;if(s==="__v_isShallow")return i;if(s==="__v_raw")return n===(r?i?bi:sr:i?tr:er).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(n)?t:void 0;const o=A(t);if(!r){let f;if(o&&(f=ii[s]))return f;if(s==="hasOwnProperty")return ci}const l=Reflect.get(t,s,Z(t)?t:n);return(Ve(s)?Zn.has(s):li(s))||(r||X(t,"get",s),i)?l:Z(l)?o&&js(s)?l:l.value:B(l)?r?nr(l):qs(l):l}}class kn extends Qn{constructor(t=!1){super(!1,t)}set(t,s,n,r){let i=t[s];if(!this._isShallow){const f=Ke(i);if(!pe(n)&&!Ke(n)&&(i=$(i),n=$(n)),!A(t)&&Z(i)&&!Z(n))return f?!1:(i.value=n,!0)}const o=A(t)&&js(s)?Number(s)e,Lt=e=>Reflect.getPrototypeOf(e);function hi(e,t,s){return function(...n){const r=this.__v_raw,i=$(r),o=st(i),l=e==="entries"||e===Symbol.iterator&&o,f=e==="keys"&&o,h=r[e](...n),a=s?Ms:t?Gt:Y;return!t&&X(i,"iterate",f?Os:Xe),{next(){const{value:p,done:S}=h.next();return S?{value:p,done:S}:{value:l?[a(p[0]),a(p[1])]:a(p),done:S}},[Symbol.iterator](){return this}}}}function Ht(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function pi(e,t){const s={get(r){const i=this.__v_raw,o=$(i),l=$(r);e||(je(r,l)&&X(o,"get",r),X(o,"get",l));const{has:f}=Lt(o),h=t?Ms:e?Gt:Y;if(f.call(o,r))return h(i.get(r));if(f.call(o,l))return h(i.get(l));i!==o&&i.get(r)},get size(){const r=this.__v_raw;return!e&&X($(r),"iterate",Xe),Reflect.get(r,"size",r)},has(r){const i=this.__v_raw,o=$(i),l=$(r);return e||(je(r,l)&&X(o,"has",r),X(o,"has",l)),r===l?i.has(r):i.has(r)||i.has(l)},forEach(r,i){const o=this,l=o.__v_raw,f=$(l),h=t?Ms:e?Gt:Y;return!e&&X(f,"iterate",Xe),l.forEach((a,p)=>r.call(i,h(a),h(p),o))}};return se(s,e?{add:Ht("add"),set:Ht("set"),delete:Ht("delete"),clear:Ht("clear")}:{add(r){!t&&!pe(r)&&!Ke(r)&&(r=$(r));const i=$(this);return Lt(i).has.call(i,r)||(i.add(r),Ae(i,"add",r,r)),this},set(r,i){!t&&!pe(i)&&!Ke(i)&&(i=$(i));const o=$(this),{has:l,get:f}=Lt(o);let h=l.call(o,r);h||(r=$(r),h=l.call(o,r));const a=f.call(o,r);return o.set(r,i),h?je(i,a)&&Ae(o,"set",r,i):Ae(o,"add",r,i),this},delete(r){const i=$(this),{has:o,get:l}=Lt(i);let f=o.call(i,r);f||(r=$(r),f=o.call(i,r)),l&&l.call(i,r);const h=i.delete(r);return f&&Ae(i,"delete",r,void 0),h},clear(){const r=$(this),i=r.size!==0,o=r.clear();return i&&Ae(r,"clear",void 0,void 0),o}}),["keys","values","entries",Symbol.iterator].forEach(r=>{s[r]=hi(r,e,t)}),s}function Ws(e,t){const s=pi(e,t);return(n,r,i)=>r==="__v_isReactive"?!e:r==="__v_isReadonly"?e:r==="__v_raw"?n:Reflect.get(D(s,r)&&r in n?s:n,r,i)}const gi={get:Ws(!1,!1)},mi={get:Ws(!1,!0)},_i={get:Ws(!0,!1)};const er=new WeakMap,tr=new WeakMap,sr=new WeakMap,bi=new WeakMap;function yi(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function vi(e){return e.__v_skip||!Object.isExtensible(e)?0:yi(Gr(e))}function qs(e){return Ke(e)?e:Gs(e,!1,ui,gi,er)}function xi(e){return Gs(e,!1,di,mi,tr)}function nr(e){return Gs(e,!0,ai,_i,sr)}function Gs(e,t,s,n,r){if(!B(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const i=vi(e);if(i===0)return e;const o=r.get(e);if(o)return o;const l=new Proxy(e,i===2?n:s);return r.set(e,l),l}function nt(e){return Ke(e)?nt(e.__v_raw):!!(e&&e.__v_isReactive)}function Ke(e){return!!(e&&e.__v_isReadonly)}function pe(e){return!!(e&&e.__v_isShallow)}function Js(e){return e?!!e.__v_raw:!1}function $(e){const t=e&&e.__v_raw;return t?$(t):e}function wi(e){return!D(e,"__v_skip")&&Object.isExtensible(e)&&Ss(e,"__v_skip",!0),e}const Y=e=>B(e)?qs(e):e,Gt=e=>B(e)?nr(e):e;function Z(e){return e?e.__v_isRef===!0:!1}function et(e){return Si(e,!1)}function Si(e,t){return Z(e)?e:new Ci(e,t)}class Ci{constructor(t,s){this.dep=new Bs,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=s?t:$(t),this._value=s?t:Y(t),this.__v_isShallow=s}get value(){return this.dep.track(),this._value}set value(t){const s=this._rawValue,n=this.__v_isShallow||pe(t)||Ke(t);t=n?t:$(t),je(t,s)&&(this._rawValue=t,this._value=n?t:Y(t),this.dep.trigger())}}function Ti(e){return Z(e)?e.value:e}const Ei={get:(e,t,s)=>t==="__v_raw"?e:Ti(Reflect.get(e,t,s)),set:(e,t,s,n)=>{const r=e[t];return Z(r)&&!Z(s)?(r.value=s,!0):Reflect.set(e,t,s,n)}};function rr(e){return nt(e)?e:new Proxy(e,Ei)}class Oi{constructor(t,s,n){this.fn=t,this.setter=s,this._value=void 0,this.dep=new Bs(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=wt-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!s,this.isSSR=n}notify(){if(this.flags|=16,!(this.flags&8)&&U!==this)return qn(this,!0),!0}get value(){const t=this.dep.track();return Yn(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function Mi(e,t,s=!1){let n,r;return P(e)?n=e:(n=e.get,r=e.set),new Oi(n,r,s)}const jt={},Jt=new WeakMap;let ze;function Ai(e,t=!1,s=ze){if(s){let n=Jt.get(s);n||Jt.set(s,n=[]),n.push(e)}}function Pi(e,t,s=j){const{immediate:n,deep:r,once:i,scheduler:o,augmentJob:l,call:f}=s,h=O=>r?O:pe(O)||r===!1||r===0?Pe(O,1):Pe(O);let a,p,S,C,F=!1,R=!1;if(Z(e)?(p=()=>e.value,F=pe(e)):nt(e)?(p=()=>h(e),F=!0):A(e)?(R=!0,F=e.some(O=>nt(O)||pe(O)),p=()=>e.map(O=>{if(Z(O))return O.value;if(nt(O))return h(O);if(P(O))return f?f(O,2):O()})):P(e)?t?p=f?()=>f(e,2):e:p=()=>{if(S){Ie();try{S()}finally{Re()}}const O=ze;ze=a;try{return f?f(e,3,[C]):e(C)}finally{ze=O}}:p=Te,t&&r){const O=p,J=r===!0?1/0:r;p=()=>Pe(O(),J)}const z=si(),H=()=>{a.stop(),z&&z.active&&Hs(z.effects,a)};if(i&&t){const O=t;t=(...J)=>{O(...J),H()}}let W=R?new Array(e.length).fill(jt):jt;const q=O=>{if(!(!(a.flags&1)||!a.dirty&&!O))if(t){const J=a.run();if(r||F||(R?J.some(($e,_e)=>je($e,W[_e])):je(J,W))){S&&S();const $e=ze;ze=a;try{const _e=[J,W===jt?void 0:R&&W[0]===jt?[]:W,C];W=J,f?f(t,3,_e):t(..._e)}finally{ze=$e}}}else a.run()};return l&&l(q),a=new Bn(p),a.scheduler=o?()=>o(q,!1):q,C=O=>Ai(O,!1,a),S=a.onStop=()=>{const O=Jt.get(a);if(O){if(f)f(O,4);else for(const J of O)J();Jt.delete(a)}},t?n?q(!0):W=a.run():o?o(q.bind(null,!0),!0):a.run(),H.pause=a.pause.bind(a),H.resume=a.resume.bind(a),H.stop=H,H}function Pe(e,t=1/0,s){if(t<=0||!B(e)||e.__v_skip||(s=s||new Set,s.has(e)))return e;if(s.add(e),t--,Z(e))Pe(e.value,t,s);else if(A(e))for(let n=0;n{Pe(n,t,s)});else if(jn(e)){for(const n in e)Pe(e[n],t,s);for(const n of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,n)&&Pe(e[n],t,s)}return e}/** +* @vue/runtime-core v3.5.17 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/function Mt(e,t,s,n){try{return n?e(...n):e()}catch(r){rs(r,t,s)}}function Ee(e,t,s,n){if(P(e)){const r=Mt(e,t,s,n);return r&&Ln(r)&&r.catch(i=>{rs(i,t,s)}),r}if(A(e)){const r=[];for(let i=0;i>>1,r=ee[n],i=Ct(r);i=Ct(s)?ee.push(e):ee.splice(Ri(t),0,e),e.flags|=1,lr()}}function lr(){Yt||(Yt=ir.then(fr))}function Fi(e){A(e)?rt.push(...e):Le&&e.id===-1?Le.splice(Qe+1,0,e):e.flags&1||(rt.push(e),e.flags|=1),lr()}function cn(e,t,s=Se+1){for(;sCt(s)-Ct(n));if(rt.length=0,Le){Le.push(...t);return}for(Le=t,Qe=0;Qee.id==null?e.flags&2?-1:1/0:e.id;function fr(e){try{for(Se=0;Se{n._d&&_n(-1);const i=zt(t);let o;try{o=e(...r)}finally{zt(i),n._d&&_n(1)}return o};return n._n=!0,n._c=!0,n._d=!0,n}function ar(e,t){if(he===null)return e;const s=cs(he),n=e.dirs||(e.dirs=[]);for(let r=0;re.__isTeleport;function zs(e,t){e.shapeFlag&6&&e.component?(e.transition=t,zs(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 dr(e){e.ids=[e.ids[0]+e.ids[2]+++"-",0,0]}function bt(e,t,s,n,r=!1){if(A(e)){e.forEach((F,R)=>bt(F,t&&(A(t)?t[R]:t),s,n,r));return}if(yt(n)&&!r){n.shapeFlag&512&&n.type.__asyncResolved&&n.component.subTree.component&&bt(e,t,s,n.component.subTree);return}const i=n.shapeFlag&4?cs(n.component):n.el,o=r?null:i,{i:l,r:f}=e,h=t&&t.r,a=l.refs===j?l.refs={}:l.refs,p=l.setupState,S=$(p),C=p===j?()=>!1:F=>D(S,F);if(h!=null&&h!==f&&(G(h)?(a[h]=null,C(h)&&(p[h]=null)):Z(h)&&(h.value=null)),P(f))Mt(f,l,12,[o,a]);else{const F=G(f),R=Z(f);if(F||R){const z=()=>{if(e.f){const H=F?C(f)?p[f]:a[f]:f.value;r?A(H)&&Hs(H,i):A(H)?H.includes(i)||H.push(i):F?(a[f]=[i],C(f)&&(p[f]=a[f])):(f.value=[i],e.k&&(a[e.k]=f.value))}else F?(a[f]=o,C(f)&&(p[f]=o)):R&&(f.value=o,e.k&&(a[e.k]=o))};o?(z.id=-1,ce(z,s)):z()}}}ss().requestIdleCallback;ss().cancelIdleCallback;const yt=e=>!!e.type.__asyncLoader,hr=e=>e.type.__isKeepAlive;function Hi(e,t){pr(e,"a",t)}function ji(e,t){pr(e,"da",t)}function pr(e,t,s=te){const n=e.__wdc||(e.__wdc=()=>{let r=s;for(;r;){if(r.isDeactivated)return;r=r.parent}return e()});if(is(t,n,s),s){let r=s.parent;for(;r&&r.parent;)hr(r.parent.vnode)&&Ni(n,t,s,r),r=r.parent}}function Ni(e,t,s,n){const r=is(t,e,n,!0);mr(()=>{Hs(n[t],r)},s)}function is(e,t,s=te,n=!1){if(s){const r=s[e]||(s[e]=[]),i=t.__weh||(t.__weh=(...o)=>{Ie();const l=At(s),f=Ee(t,s,e,o);return l(),Re(),f});return n?r.unshift(i):r.push(i),i}}const Fe=e=>(t,s=te)=>{(!Et||e==="sp")&&is(e,(...n)=>t(...n),s)},Ki=Fe("bm"),gr=Fe("m"),Ui=Fe("bu"),Vi=Fe("u"),Bi=Fe("bum"),mr=Fe("um"),Wi=Fe("sp"),qi=Fe("rtg"),Gi=Fe("rtc");function Ji(e,t=te){is("ec",e,t)}const Yi=Symbol.for("v-ndc");function _r(e,t,s,n){let r;const i=s,o=A(e);if(o||G(e)){const l=o&&nt(e);let f=!1,h=!1;l&&(f=!pe(e),h=Ke(e),e=ns(e)),r=new Array(e.length);for(let a=0,p=e.length;at(l,f,void 0,i));else{const l=Object.keys(e);r=new Array(l.length);for(let f=0,h=l.length;fe?jr(e)?cs(e):As(e.parent):null,vt=se(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=>As(e.parent),$root:e=>As(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>yr(e),$forceUpdate:e=>e.f||(e.f=()=>{Ys(e.update)}),$nextTick:e=>e.n||(e.n=or.bind(e.proxy)),$watch:e=>_o.bind(e)}),ms=(e,t)=>e!==j&&!e.__isScriptSetup&&D(e,t),zi={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:s,setupState:n,data:r,props:i,accessCache:o,type:l,appContext:f}=e;let h;if(t[0]!=="$"){const C=o[t];if(C!==void 0)switch(C){case 1:return n[t];case 2:return r[t];case 4:return s[t];case 3:return i[t]}else{if(ms(n,t))return o[t]=1,n[t];if(r!==j&&D(r,t))return o[t]=2,r[t];if((h=e.propsOptions[0])&&D(h,t))return o[t]=3,i[t];if(s!==j&&D(s,t))return o[t]=4,s[t];Ps&&(o[t]=0)}}const a=vt[t];let p,S;if(a)return t==="$attrs"&&X(e.attrs,"get",""),a(e);if((p=l.__cssModules)&&(p=p[t]))return p;if(s!==j&&D(s,t))return o[t]=4,s[t];if(S=f.config.globalProperties,D(S,t))return S[t]},set({_:e},t,s){const{data:n,setupState:r,ctx:i}=e;return ms(r,t)?(r[t]=s,!0):n!==j&&D(n,t)?(n[t]=s,!0):D(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=s,!0)},has({_:{data:e,setupState:t,accessCache:s,ctx:n,appContext:r,propsOptions:i}},o){let l;return!!s[o]||e!==j&&D(e,o)||ms(t,o)||(l=i[0])&&D(l,o)||D(n,o)||D(vt,o)||D(r.config.globalProperties,o)},defineProperty(e,t,s){return s.get!=null?e._.accessCache[t]=0:D(s,"value")&&this.set(e,t,s.value,null),Reflect.defineProperty(e,t,s)}};function fn(e){return A(e)?e.reduce((t,s)=>(t[s]=null,t),{}):e}let Ps=!0;function Xi(e){const t=yr(e),s=e.proxy,n=e.ctx;Ps=!1,t.beforeCreate&&un(t.beforeCreate,e,"bc");const{data:r,computed:i,methods:o,watch:l,provide:f,inject:h,created:a,beforeMount:p,mounted:S,beforeUpdate:C,updated:F,activated:R,deactivated:z,beforeDestroy:H,beforeUnmount:W,destroyed:q,unmounted:O,render:J,renderTracked:$e,renderTriggered:_e,errorCaptured:De,serverPrefetch:It,expose:We,inheritAttrs:lt,components:Rt,directives:Ft,filters:fs}=t;if(h&&Zi(h,n,null),o)for(const V in o){const N=o[V];P(N)&&(n[V]=N.bind(s))}if(r){const V=r.call(s,s);B(V)&&(e.data=qs(V))}if(Ps=!0,i)for(const V in i){const N=i[V],qe=P(N)?N.bind(s,s):P(N.get)?N.get.bind(s,s):Te,$t=!P(N)&&P(N.set)?N.set.bind(s):Te,Ge=No({get:qe,set:$t});Object.defineProperty(n,V,{enumerable:!0,configurable:!0,get:()=>Ge.value,set:be=>Ge.value=be})}if(l)for(const V in l)br(l[V],n,s,V);if(f){const V=P(f)?f.call(s):f;Reflect.ownKeys(V).forEach(N=>{no(N,V[N])})}a&&un(a,e,"c");function Q(V,N){A(N)?N.forEach(qe=>V(qe.bind(s))):N&&V(N.bind(s))}if(Q(Ki,p),Q(gr,S),Q(Ui,C),Q(Vi,F),Q(Hi,R),Q(ji,z),Q(Ji,De),Q(Gi,$e),Q(qi,_e),Q(Bi,W),Q(mr,O),Q(Wi,It),A(We))if(We.length){const V=e.exposed||(e.exposed={});We.forEach(N=>{Object.defineProperty(V,N,{get:()=>s[N],set:qe=>s[N]=qe})})}else e.exposed||(e.exposed={});J&&e.render===Te&&(e.render=J),lt!=null&&(e.inheritAttrs=lt),Rt&&(e.components=Rt),Ft&&(e.directives=Ft),It&&dr(e)}function Zi(e,t,s=Te){A(e)&&(e=Is(e));for(const n in e){const r=e[n];let i;B(r)?"default"in r?i=Ut(r.from||n,r.default,!0):i=Ut(r.from||n):i=Ut(r),Z(i)?Object.defineProperty(t,n,{enumerable:!0,configurable:!0,get:()=>i.value,set:o=>i.value=o}):t[n]=i}}function un(e,t,s){Ee(A(e)?e.map(n=>n.bind(t.proxy)):e.bind(t.proxy),t,s)}function br(e,t,s,n){let r=n.includes(".")?Rr(s,n):()=>s[n];if(G(e)){const i=t[e];P(i)&&Vt(r,i)}else if(P(e))Vt(r,e.bind(s));else if(B(e))if(A(e))e.forEach(i=>br(i,t,s,n));else{const i=P(e.handler)?e.handler.bind(s):t[e.handler];P(i)&&Vt(r,i,e)}}function yr(e){const t=e.type,{mixins:s,extends:n}=t,{mixins:r,optionsCache:i,config:{optionMergeStrategies:o}}=e.appContext,l=i.get(t);let f;return l?f=l:!r.length&&!s&&!n?f=t:(f={},r.length&&r.forEach(h=>Xt(f,h,o,!0)),Xt(f,t,o)),B(t)&&i.set(t,f),f}function Xt(e,t,s,n=!1){const{mixins:r,extends:i}=t;i&&Xt(e,i,s,!0),r&&r.forEach(o=>Xt(e,o,s,!0));for(const o in t)if(!(n&&o==="expose")){const l=Qi[o]||s&&s[o];e[o]=l?l(e[o],t[o]):t[o]}return e}const Qi={data:an,props:dn,emits:dn,methods:pt,computed:pt,beforeCreate:k,created:k,beforeMount:k,mounted:k,beforeUpdate:k,updated:k,beforeDestroy:k,beforeUnmount:k,destroyed:k,unmounted:k,activated:k,deactivated:k,errorCaptured:k,serverPrefetch:k,components:pt,directives:pt,watch:eo,provide:an,inject:ki};function an(e,t){return t?e?function(){return se(P(e)?e.call(this,this):e,P(t)?t.call(this,this):t)}:t:e}function ki(e,t){return pt(Is(e),Is(t))}function Is(e){if(A(e)){const t={};for(let s=0;s1)return s&&P(t)?t.call(n&&n.proxy):t}}const xr={},wr=()=>Object.create(xr),Sr=e=>Object.getPrototypeOf(e)===xr;function ro(e,t,s,n=!1){const r={},i=wr();e.propsDefaults=Object.create(null),Cr(e,t,r,i);for(const o in e.propsOptions[0])o in r||(r[o]=void 0);s?e.props=n?r:xi(r):e.type.props?e.props=r:e.props=i,e.attrs=i}function io(e,t,s,n){const{props:r,attrs:i,vnode:{patchFlag:o}}=e,l=$(r),[f]=e.propsOptions;let h=!1;if((n||o>0)&&!(o&16)){if(o&8){const a=e.vnode.dynamicProps;for(let p=0;p{f=!0;const[S,C]=Tr(p,t,!0);se(o,S),C&&l.push(...C)};!s&&t.mixins.length&&t.mixins.forEach(a),e.extends&&a(e.extends),e.mixins&&e.mixins.forEach(a)}if(!i&&!f)return B(e)&&n.set(e,tt),tt;if(A(i))for(let a=0;ae[0]==="_"||e==="$stable",Zs=e=>A(e)?e.map(Ce):[Ce(e)],lo=(e,t,s)=>{if(t._n)return t;const n=$i((...r)=>Zs(t(...r)),s);return n._c=!1,n},Er=(e,t,s)=>{const n=e._ctx;for(const r in e){if(Xs(r))continue;const i=e[r];if(P(i))t[r]=lo(r,i,n);else if(i!=null){const o=Zs(i);t[r]=()=>o}}},Or=(e,t)=>{const s=Zs(t);e.slots.default=()=>s},Mr=(e,t,s)=>{for(const n in t)(s||!Xs(n))&&(e[n]=t[n])},co=(e,t,s)=>{const n=e.slots=wr();if(e.vnode.shapeFlag&32){const r=t.__;r&&Ss(n,"__",r,!0);const i=t._;i?(Mr(n,t,s),s&&Ss(n,"_",i,!0)):Er(t,n)}else t&&Or(e,t)},fo=(e,t,s)=>{const{vnode:n,slots:r}=e;let i=!0,o=j;if(n.shapeFlag&32){const l=t._;l?s&&l===1?i=!1:Mr(r,t,s):(i=!t.$stable,Er(t,r)),o=t}else t&&(Or(e,t),o={default:1});if(i)for(const l in r)!Xs(l)&&o[l]==null&&delete r[l]},ce=Co;function uo(e){return ao(e)}function ao(e,t){const s=ss();s.__VUE__=!0;const{insert:n,remove:r,patchProp:i,createElement:o,createText:l,createComment:f,setText:h,setElementText:a,parentNode:p,nextSibling:S,setScopeId:C=Te,insertStaticContent:F}=e,R=(c,u,d,_=null,g=null,m=null,x=void 0,v=null,y=!!u.dynamicChildren)=>{if(c===u)return;c&&!dt(c,u)&&(_=Dt(c),be(c,g,m,!0),c=null),u.patchFlag===-2&&(y=!1,u.dynamicChildren=null);const{type:b,ref:E,shapeFlag:w}=u;switch(b){case ls:z(c,u,d,_);break;case Ue:H(c,u,d,_);break;case bs:c==null&&W(u,d,_,x);break;case ae:Rt(c,u,d,_,g,m,x,v,y);break;default:w&1?J(c,u,d,_,g,m,x,v,y):w&6?Ft(c,u,d,_,g,m,x,v,y):(w&64||w&128)&&b.process(c,u,d,_,g,m,x,v,y,ft)}E!=null&&g?bt(E,c&&c.ref,m,u||c,!u):E==null&&c&&c.ref!=null&&bt(c.ref,null,m,c,!0)},z=(c,u,d,_)=>{if(c==null)n(u.el=l(u.children),d,_);else{const g=u.el=c.el;u.children!==c.children&&h(g,u.children)}},H=(c,u,d,_)=>{c==null?n(u.el=f(u.children||""),d,_):u.el=c.el},W=(c,u,d,_)=>{[c.el,c.anchor]=F(c.children,u,d,_,c.el,c.anchor)},q=({el:c,anchor:u},d,_)=>{let g;for(;c&&c!==u;)g=S(c),n(c,d,_),c=g;n(u,d,_)},O=({el:c,anchor:u})=>{let d;for(;c&&c!==u;)d=S(c),r(c),c=d;r(u)},J=(c,u,d,_,g,m,x,v,y)=>{u.type==="svg"?x="svg":u.type==="math"&&(x="mathml"),c==null?$e(u,d,_,g,m,x,v,y):It(c,u,g,m,x,v,y)},$e=(c,u,d,_,g,m,x,v)=>{let y,b;const{props:E,shapeFlag:w,transition:T,dirs:M}=c;if(y=c.el=o(c.type,m,E&&E.is,E),w&8?a(y,c.children):w&16&&De(c.children,y,null,_,g,_s(c,m),x,v),M&&Je(c,null,_,"created"),_e(y,c,c.scopeId,x,_),E){for(const K in E)K!=="value"&&!gt(K)&&i(y,K,null,E[K],m,_);"value"in E&&i(y,"value",null,E.value,m),(b=E.onVnodeBeforeMount)&&we(b,_,c)}M&&Je(c,null,_,"beforeMount");const I=ho(g,T);I&&T.beforeEnter(y),n(y,u,d),((b=E&&E.onVnodeMounted)||I||M)&&ce(()=>{b&&we(b,_,c),I&&T.enter(y),M&&Je(c,null,_,"mounted")},g)},_e=(c,u,d,_,g)=>{if(d&&C(c,d),_)for(let m=0;m<_.length;m++)C(c,_[m]);if(g){let m=g.subTree;if(u===m||$r(m.type)&&(m.ssContent===u||m.ssFallback===u)){const x=g.vnode;_e(c,x,x.scopeId,x.slotScopeIds,g.parent)}}},De=(c,u,d,_,g,m,x,v,y=0)=>{for(let b=y;b{const v=u.el=c.el;let{patchFlag:y,dynamicChildren:b,dirs:E}=u;y|=c.patchFlag&16;const w=c.props||j,T=u.props||j;let M;if(d&&Ye(d,!1),(M=T.onVnodeBeforeUpdate)&&we(M,d,u,c),E&&Je(u,c,d,"beforeUpdate"),d&&Ye(d,!0),(w.innerHTML&&T.innerHTML==null||w.textContent&&T.textContent==null)&&a(v,""),b?We(c.dynamicChildren,b,v,d,_,_s(u,g),m):x||N(c,u,v,null,d,_,_s(u,g),m,!1),y>0){if(y&16)lt(v,w,T,d,g);else if(y&2&&w.class!==T.class&&i(v,"class",null,T.class,g),y&4&&i(v,"style",w.style,T.style,g),y&8){const I=u.dynamicProps;for(let K=0;K{M&&we(M,d,u,c),E&&Je(u,c,d,"updated")},_)},We=(c,u,d,_,g,m,x)=>{for(let v=0;v{if(u!==d){if(u!==j)for(const m in u)!gt(m)&&!(m in d)&&i(c,m,u[m],null,g,_);for(const m in d){if(gt(m))continue;const x=d[m],v=u[m];x!==v&&m!=="value"&&i(c,m,v,x,g,_)}"value"in d&&i(c,"value",u.value,d.value,g)}},Rt=(c,u,d,_,g,m,x,v,y)=>{const b=u.el=c?c.el:l(""),E=u.anchor=c?c.anchor:l("");let{patchFlag:w,dynamicChildren:T,slotScopeIds:M}=u;M&&(v=v?v.concat(M):M),c==null?(n(b,d,_),n(E,d,_),De(u.children||[],d,E,g,m,x,v,y)):w>0&&w&64&&T&&c.dynamicChildren?(We(c.dynamicChildren,T,d,g,m,x,v),(u.key!=null||g&&u===g.subTree)&&Ar(c,u,!0)):N(c,u,d,E,g,m,x,v,y)},Ft=(c,u,d,_,g,m,x,v,y)=>{u.slotScopeIds=v,c==null?u.shapeFlag&512?g.ctx.activate(u,d,_,x,y):fs(u,d,_,g,m,x,y):ks(c,u,y)},fs=(c,u,d,_,g,m,x)=>{const v=c.component=Fo(c,_,g);if(hr(c)&&(v.ctx.renderer=ft),$o(v,!1,x),v.asyncDep){if(g&&g.registerDep(v,Q,x),!c.el){const y=v.subTree=oe(Ue);H(null,y,u,d)}}else Q(v,c,u,d,g,m,x)},ks=(c,u,d)=>{const _=u.component=c.component;if(wo(c,u,d))if(_.asyncDep&&!_.asyncResolved){V(_,u,d);return}else _.next=u,_.update();else u.el=c.el,_.vnode=u},Q=(c,u,d,_,g,m,x)=>{const v=()=>{if(c.isMounted){let{next:w,bu:T,u:M,parent:I,vnode:K}=c;{const ve=Pr(c);if(ve){w&&(w.el=K.el,V(c,w,x)),ve.asyncDep.then(()=>{c.isUnmounted||v()});return}}let L=w,ne;Ye(c,!1),w?(w.el=K.el,V(c,w,x)):w=K,T&&Kt(T),(ne=w.props&&w.props.onVnodeBeforeUpdate)&&we(ne,I,w,K),Ye(c,!0);const re=gn(c),ye=c.subTree;c.subTree=re,R(ye,re,p(ye.el),Dt(ye),c,g,m),w.el=re.el,L===null&&So(c,re.el),M&&ce(M,g),(ne=w.props&&w.props.onVnodeUpdated)&&ce(()=>we(ne,I,w,K),g)}else{let w;const{el:T,props:M}=u,{bm:I,m:K,parent:L,root:ne,type:re}=c,ye=yt(u);Ye(c,!1),I&&Kt(I),!ye&&(w=M&&M.onVnodeBeforeMount)&&we(w,L,u),Ye(c,!0);{ne.ce&&ne.ce._def.shadowRoot!==!1&&ne.ce._injectChildStyle(re);const ve=c.subTree=gn(c);R(null,ve,d,_,c,g,m),u.el=ve.el}if(K&&ce(K,g),!ye&&(w=M&&M.onVnodeMounted)){const ve=u;ce(()=>we(w,L,ve),g)}(u.shapeFlag&256||L&&yt(L.vnode)&&L.vnode.shapeFlag&256)&&c.a&&ce(c.a,g),c.isMounted=!0,u=d=_=null}};c.scope.on();const y=c.effect=new Bn(v);c.scope.off();const b=c.update=y.run.bind(y),E=c.job=y.runIfDirty.bind(y);E.i=c,E.id=c.uid,y.scheduler=()=>Ys(E),Ye(c,!0),b()},V=(c,u,d)=>{u.component=c;const _=c.vnode.props;c.vnode=u,c.next=null,io(c,u.props,_,d),fo(c,u.children,d),Ie(),cn(c),Re()},N=(c,u,d,_,g,m,x,v,y=!1)=>{const b=c&&c.children,E=c?c.shapeFlag:0,w=u.children,{patchFlag:T,shapeFlag:M}=u;if(T>0){if(T&128){$t(b,w,d,_,g,m,x,v,y);return}else if(T&256){qe(b,w,d,_,g,m,x,v,y);return}}M&8?(E&16&&ct(b,g,m),w!==b&&a(d,w)):E&16?M&16?$t(b,w,d,_,g,m,x,v,y):ct(b,g,m,!0):(E&8&&a(d,""),M&16&&De(w,d,_,g,m,x,v,y))},qe=(c,u,d,_,g,m,x,v,y)=>{c=c||tt,u=u||tt;const b=c.length,E=u.length,w=Math.min(b,E);let T;for(T=0;TE?ct(c,g,m,!0,!1,w):De(u,d,_,g,m,x,v,y,w)},$t=(c,u,d,_,g,m,x,v,y)=>{let b=0;const E=u.length;let w=c.length-1,T=E-1;for(;b<=w&&b<=T;){const M=c[b],I=u[b]=y?He(u[b]):Ce(u[b]);if(dt(M,I))R(M,I,d,null,g,m,x,v,y);else break;b++}for(;b<=w&&b<=T;){const M=c[w],I=u[T]=y?He(u[T]):Ce(u[T]);if(dt(M,I))R(M,I,d,null,g,m,x,v,y);else break;w--,T--}if(b>w){if(b<=T){const M=T+1,I=MT)for(;b<=w;)be(c[b],g,m,!0),b++;else{const M=b,I=b,K=new Map;for(b=I;b<=T;b++){const le=u[b]=y?He(u[b]):Ce(u[b]);le.key!=null&&K.set(le.key,b)}let L,ne=0;const re=T-I+1;let ye=!1,ve=0;const ut=new Array(re);for(b=0;b=re){be(le,g,m,!0);continue}let xe;if(le.key!=null)xe=K.get(le.key);else for(L=I;L<=T;L++)if(ut[L-I]===0&&dt(le,u[L])){xe=L;break}xe===void 0?be(le,g,m,!0):(ut[xe-I]=b+1,xe>=ve?ve=xe:ye=!0,R(le,u[xe],d,null,g,m,x,v,y),ne++)}const sn=ye?po(ut):tt;for(L=sn.length-1,b=re-1;b>=0;b--){const le=I+b,xe=u[le],nn=le+1{const{el:m,type:x,transition:v,children:y,shapeFlag:b}=c;if(b&6){Ge(c.component.subTree,u,d,_);return}if(b&128){c.suspense.move(u,d,_);return}if(b&64){x.move(c,u,d,ft);return}if(x===ae){n(m,u,d);for(let w=0;wv.enter(m),g);else{const{leave:w,delayLeave:T,afterLeave:M}=v,I=()=>{c.ctx.isUnmounted?r(m):n(m,u,d)},K=()=>{w(m,()=>{I(),M&&M()})};T?T(m,I,K):K()}else n(m,u,d)},be=(c,u,d,_=!1,g=!1)=>{const{type:m,props:x,ref:v,children:y,dynamicChildren:b,shapeFlag:E,patchFlag:w,dirs:T,cacheIndex:M}=c;if(w===-2&&(g=!1),v!=null&&(Ie(),bt(v,null,d,c,!0),Re()),M!=null&&(u.renderCache[M]=void 0),E&256){u.ctx.deactivate(c);return}const I=E&1&&T,K=!yt(c);let L;if(K&&(L=x&&x.onVnodeBeforeUnmount)&&we(L,u,c),E&6)Br(c.component,d,_);else{if(E&128){c.suspense.unmount(d,_);return}I&&Je(c,null,u,"beforeUnmount"),E&64?c.type.remove(c,u,d,ft,_):b&&!b.hasOnce&&(m!==ae||w>0&&w&64)?ct(b,u,d,!1,!0):(m===ae&&w&384||!g&&E&16)&&ct(y,u,d),_&&en(c)}(K&&(L=x&&x.onVnodeUnmounted)||I)&&ce(()=>{L&&we(L,u,c),I&&Je(c,null,u,"unmounted")},d)},en=c=>{const{type:u,el:d,anchor:_,transition:g}=c;if(u===ae){Vr(d,_);return}if(u===bs){O(c);return}const m=()=>{r(d),g&&!g.persisted&&g.afterLeave&&g.afterLeave()};if(c.shapeFlag&1&&g&&!g.persisted){const{leave:x,delayLeave:v}=g,y=()=>x(d,m);v?v(c.el,m,y):y()}else m()},Vr=(c,u)=>{let d;for(;c!==u;)d=S(c),r(c),c=d;r(u)},Br=(c,u,d)=>{const{bum:_,scope:g,job:m,subTree:x,um:v,m:y,a:b,parent:E,slots:{__:w}}=c;pn(y),pn(b),_&&Kt(_),E&&A(w)&&w.forEach(T=>{E.renderCache[T]=void 0}),g.stop(),m&&(m.flags|=8,be(x,c,u,d)),v&&ce(v,u),ce(()=>{c.isUnmounted=!0},u),u&&u.pendingBranch&&!u.isUnmounted&&c.asyncDep&&!c.asyncResolved&&c.suspenseId===u.pendingId&&(u.deps--,u.deps===0&&u.resolve())},ct=(c,u,d,_=!1,g=!1,m=0)=>{for(let x=m;x{if(c.shapeFlag&6)return Dt(c.component.subTree);if(c.shapeFlag&128)return c.suspense.next();const u=S(c.anchor||c.el),d=u&&u[Di];return d?S(d):u};let us=!1;const tn=(c,u,d)=>{c==null?u._vnode&&be(u._vnode,null,null,!0):R(u._vnode||null,c,u,null,null,null,d),u._vnode=c,us||(us=!0,cn(),cr(),us=!1)},ft={p:R,um:be,m:Ge,r:en,mt:fs,mc:De,pc:N,pbc:We,n:Dt,o:e};return{render:tn,hydrate:void 0,createApp:so(tn)}}function _s({type:e,props:t},s){return s==="svg"&&e==="foreignObject"||s==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:s}function Ye({effect:e,job:t},s){s?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function ho(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function Ar(e,t,s=!1){const n=e.children,r=t.children;if(A(n)&&A(r))for(let i=0;i>1,e[s[l]]0&&(t[n]=s[i-1]),s[i]=n)}}for(i=s.length,o=s[i-1];i-- >0;)s[i]=o,o=t[o];return s}function Pr(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:Pr(t)}function pn(e){if(e)for(let t=0;tUt(go);function Vt(e,t,s){return Ir(e,t,s)}function Ir(e,t,s=j){const{immediate:n,deep:r,flush:i,once:o}=s,l=se({},s),f=t&&n||!t&&i!=="post";let h;if(Et){if(i==="sync"){const C=mo();h=C.__watcherHandles||(C.__watcherHandles=[])}else if(!f){const C=()=>{};return C.stop=Te,C.resume=Te,C.pause=Te,C}}const a=te;l.call=(C,F,R)=>Ee(C,a,F,R);let p=!1;i==="post"?l.scheduler=C=>{ce(C,a&&a.suspense)}:i!=="sync"&&(p=!0,l.scheduler=(C,F)=>{F?C():Ys(C)}),l.augmentJob=C=>{t&&(C.flags|=4),p&&(C.flags|=2,a&&(C.id=a.uid,C.i=a))};const S=Pi(e,t,l);return Et&&(h?h.push(S):f&&S()),S}function _o(e,t,s){const n=this.proxy,r=G(e)?e.includes(".")?Rr(n,e):()=>n[e]:e.bind(n,n);let i;P(t)?i=t:(i=t.handler,s=t);const o=At(this),l=Ir(r,i.bind(n),s);return o(),l}function Rr(e,t){const s=t.split(".");return()=>{let n=e;for(let r=0;rt==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${Ne(t)}Modifiers`]||e[`${Be(t)}Modifiers`];function yo(e,t,...s){if(e.isUnmounted)return;const n=e.vnode.props||j;let r=s;const i=t.startsWith("update:"),o=i&&bo(n,t.slice(7));o&&(o.trim&&(r=s.map(a=>G(a)?a.trim():a)),o.number&&(r=s.map(Cs)));let l,f=n[l=as(t)]||n[l=as(Ne(t))];!f&&i&&(f=n[l=as(Be(t))]),f&&Ee(f,e,6,r);const h=n[l+"Once"];if(h){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,Ee(h,e,6,r)}}function Fr(e,t,s=!1){const n=t.emitsCache,r=n.get(e);if(r!==void 0)return r;const i=e.emits;let o={},l=!1;if(!P(e)){const f=h=>{const a=Fr(h,t,!0);a&&(l=!0,se(o,a))};!s&&t.mixins.length&&t.mixins.forEach(f),e.extends&&f(e.extends),e.mixins&&e.mixins.forEach(f)}return!i&&!l?(B(e)&&n.set(e,null),null):(A(i)?i.forEach(f=>o[f]=null):se(o,i),B(e)&&n.set(e,o),o)}function os(e,t){return!e||!kt(t)?!1:(t=t.slice(2).replace(/Once$/,""),D(e,t[0].toLowerCase()+t.slice(1))||D(e,Be(t))||D(e,t))}function gn(e){const{type:t,vnode:s,proxy:n,withProxy:r,propsOptions:[i],slots:o,attrs:l,emit:f,render:h,renderCache:a,props:p,data:S,setupState:C,ctx:F,inheritAttrs:R}=e,z=zt(e);let H,W;try{if(s.shapeFlag&4){const O=r||n,J=O;H=Ce(h.call(J,O,a,p,C,S,F)),W=l}else{const O=t;H=Ce(O.length>1?O(p,{attrs:l,slots:o,emit:f}):O(p,null)),W=t.props?l:vo(l)}}catch(O){xt.length=0,rs(O,e,1),H=oe(Ue)}let q=H;if(W&&R!==!1){const O=Object.keys(W),{shapeFlag:J}=q;O.length&&J&7&&(i&&O.some(Ls)&&(W=xo(W,i)),q=ot(q,W,!1,!0))}return s.dirs&&(q=ot(q,null,!1,!0),q.dirs=q.dirs?q.dirs.concat(s.dirs):s.dirs),s.transition&&zs(q,s.transition),H=q,zt(z),H}const vo=e=>{let t;for(const s in e)(s==="class"||s==="style"||kt(s))&&((t||(t={}))[s]=e[s]);return t},xo=(e,t)=>{const s={};for(const n in e)(!Ls(n)||!(n.slice(9)in t))&&(s[n]=e[n]);return s};function wo(e,t,s){const{props:n,children:r,component:i}=e,{props:o,children:l,patchFlag:f}=t,h=i.emitsOptions;if(t.dirs||t.transition)return!0;if(s&&f>=0){if(f&1024)return!0;if(f&16)return n?mn(n,o,h):!!o;if(f&8){const a=t.dynamicProps;for(let p=0;pe.__isSuspense;function Co(e,t){t&&t.pendingBranch?A(e)?t.effects.push(...e):t.effects.push(e):Fi(e)}const ae=Symbol.for("v-fgt"),ls=Symbol.for("v-txt"),Ue=Symbol.for("v-cmt"),bs=Symbol.for("v-stc"),xt=[];let ue=null;function fe(e=!1){xt.push(ue=e?null:[])}function To(){xt.pop(),ue=xt[xt.length-1]||null}let Tt=1;function _n(e,t=!1){Tt+=e,e<0&&ue&&t&&(ue.hasOnce=!0)}function Dr(e){return e.dynamicChildren=Tt>0?ue||tt:null,To(),Tt>0&&ue&&ue.push(e),e}function de(e,t,s,n,r,i){return Dr(me(e,t,s,n,r,i,!0))}function Eo(e,t,s,n,r){return Dr(oe(e,t,s,n,r,!0))}function Lr(e){return e?e.__v_isVNode===!0:!1}function dt(e,t){return e.type===t.type&&e.key===t.key}const Hr=({key:e})=>e??null,Bt=({ref:e,ref_key:t,ref_for:s})=>(typeof e=="number"&&(e=""+e),e!=null?G(e)||Z(e)||P(e)?{i:he,r:e,k:t,f:!!s}:e:null);function me(e,t=null,s=null,n=0,r=null,i=e===ae?0:1,o=!1,l=!1){const f={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&Hr(t),ref:t&&Bt(t),scopeId:ur,slotScopeIds:null,children:s,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:n,dynamicProps:r,dynamicChildren:null,appContext:null,ctx:he};return l?(Qs(f,s),i&128&&e.normalize(f)):s&&(f.shapeFlag|=G(s)?8:16),Tt>0&&!o&&ue&&(f.patchFlag>0||i&6)&&f.patchFlag!==32&&ue.push(f),f}const oe=Oo;function Oo(e,t=null,s=null,n=0,r=null,i=!1){if((!e||e===Yi)&&(e=Ue),Lr(e)){const l=ot(e,t,!0);return s&&Qs(l,s),Tt>0&&!i&&ue&&(l.shapeFlag&6?ue[ue.indexOf(e)]=l:ue.push(l)),l.patchFlag=-2,l}if(jo(e)&&(e=e.__vccOpts),t){t=Mo(t);let{class:l,style:f}=t;l&&!G(l)&&(t.class=Ot(l)),B(f)&&(Js(f)&&!A(f)&&(f=se({},f)),t.style=Ns(f))}const o=G(e)?1:$r(e)?128:Li(e)?64:B(e)?4:P(e)?2:0;return me(e,t,s,n,r,o,i,!0)}function Mo(e){return e?Js(e)||Sr(e)?se({},e):e:null}function ot(e,t,s=!1,n=!1){const{props:r,ref:i,patchFlag:o,children:l,transition:f}=e,h=t?Po(r||{},t):r,a={__v_isVNode:!0,__v_skip:!0,type:e.type,props:h,key:h&&Hr(h),ref:t&&t.ref?s&&i?A(i)?i.concat(Bt(t)):[i,Bt(t)]:Bt(t):i,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==ae?o===-1?16:o|16:o,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:f,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&ot(e.ssContent),ssFallback:e.ssFallback&&ot(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return f&&n&&zs(a,f.clone(a)),a}function Ao(e=" ",t=0){return oe(ls,null,e,t)}function bn(e="",t=!1){return t?(fe(),Eo(Ue,null,e)):oe(Ue,null,e)}function Ce(e){return e==null||typeof e=="boolean"?oe(Ue):A(e)?oe(ae,null,e.slice()):Lr(e)?He(e):oe(ls,null,String(e))}function He(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:ot(e)}function Qs(e,t){let s=0;const{shapeFlag:n}=e;if(t==null)t=null;else if(A(t))s=16;else if(typeof t=="object")if(n&65){const r=t.default;r&&(r._c&&(r._d=!1),Qs(e,r()),r._c&&(r._d=!0));return}else{s=32;const r=t._;!r&&!Sr(t)?t._ctx=he:r===3&&he&&(he.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else P(t)?(t={default:t,_ctx:he},s=32):(t=String(t),n&64?(s=16,t=[Ao(t)]):s=8);e.children=t,e.shapeFlag|=s}function Po(...e){const t={};for(let s=0;s{let r;return(r=e[s])||(r=e[s]=[]),r.push(n),i=>{r.length>1?r.forEach(o=>o(i)):r[0](i)}};Zt=t("__VUE_INSTANCE_SETTERS__",s=>te=s),Fs=t("__VUE_SSR_SETTERS__",s=>Et=s)}const At=e=>{const t=te;return Zt(e),e.scope.on(),()=>{e.scope.off(),Zt(t)}},yn=()=>{te&&te.scope.off(),Zt(null)};function jr(e){return e.vnode.shapeFlag&4}let Et=!1;function $o(e,t=!1,s=!1){t&&Fs(t);const{props:n,children:r}=e.vnode,i=jr(e);ro(e,n,i,t),co(e,r,s||t);const o=i?Do(e,t):void 0;return t&&Fs(!1),o}function Do(e,t){const s=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,zi);const{setup:n}=s;if(n){Ie();const r=e.setupContext=n.length>1?Ho(e):null,i=At(e),o=Mt(n,e,0,[e.props,r]),l=Ln(o);if(Re(),i(),(l||e.sp)&&!yt(e)&&dr(e),l){if(o.then(yn,yn),t)return o.then(f=>{vn(e,f)}).catch(f=>{rs(f,e,0)});e.asyncDep=o}else vn(e,o)}else Nr(e)}function vn(e,t,s){P(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:B(t)&&(e.setupState=rr(t)),Nr(e)}function Nr(e,t,s){const n=e.type;e.render||(e.render=n.render||Te);{const r=At(e);Ie();try{Xi(e)}finally{Re(),r()}}}const Lo={get(e,t){return X(e,"get",""),e[t]}};function Ho(e){const t=s=>{e.exposed=s||{}};return{attrs:new Proxy(e.attrs,Lo),slots:e.slots,emit:e.emit,expose:t}}function cs(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(rr(wi(e.exposed)),{get(t,s){if(s in t)return t[s];if(s in vt)return vt[s](e)},has(t,s){return s in t||s in vt}})):e.proxy}function jo(e){return P(e)&&"__vccOpts"in e}const No=(e,t)=>Mi(e,t,Et),Ko="3.5.17";/** +* @vue/runtime-dom v3.5.17 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let $s;const xn=typeof window<"u"&&window.trustedTypes;if(xn)try{$s=xn.createPolicy("vue",{createHTML:e=>e})}catch{}const Kr=$s?e=>$s.createHTML(e):e=>e,Uo="http://www.w3.org/2000/svg",Vo="http://www.w3.org/1998/Math/MathML",Me=typeof document<"u"?document:null,wn=Me&&Me.createElement("template"),Bo={insert:(e,t,s)=>{t.insertBefore(e,s||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,s,n)=>{const r=t==="svg"?Me.createElementNS(Uo,e):t==="mathml"?Me.createElementNS(Vo,e):s?Me.createElement(e,{is:s}):Me.createElement(e);return e==="select"&&n&&n.multiple!=null&&r.setAttribute("multiple",n.multiple),r},createText:e=>Me.createTextNode(e),createComment:e=>Me.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Me.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,s,n,r,i){const o=s?s.previousSibling:t.lastChild;if(r&&(r===i||r.nextSibling))for(;t.insertBefore(r.cloneNode(!0),s),!(r===i||!(r=r.nextSibling)););else{wn.innerHTML=Kr(n==="svg"?`${e}`:n==="mathml"?`${e}`:e);const l=wn.content;if(n==="svg"||n==="mathml"){const f=l.firstChild;for(;f.firstChild;)l.appendChild(f.firstChild);l.removeChild(f)}t.insertBefore(l,s)}return[o?o.nextSibling:t.firstChild,s?s.previousSibling:t.lastChild]}},Wo=Symbol("_vtc");function qo(e,t,s){const n=e[Wo];n&&(t=(t?[t,...n]:[...n]).join(" ")),t==null?e.removeAttribute("class"):s?e.setAttribute("class",t):e.className=t}const Qt=Symbol("_vod"),Ur=Symbol("_vsh"),Go={beforeMount(e,{value:t},{transition:s}){e[Qt]=e.style.display==="none"?"":e.style.display,s&&t?s.beforeEnter(e):ht(e,t)},mounted(e,{value:t},{transition:s}){s&&t&&s.enter(e)},updated(e,{value:t,oldValue:s},{transition:n}){!t!=!s&&(n?t?(n.beforeEnter(e),ht(e,!0),n.enter(e)):n.leave(e,()=>{ht(e,!1)}):ht(e,t))},beforeUnmount(e,{value:t}){ht(e,t)}};function ht(e,t){e.style.display=t?e[Qt]:"none",e[Ur]=!t}const Jo=Symbol(""),Yo=/(^|;)\s*display\s*:/;function zo(e,t,s){const n=e.style,r=G(s);let i=!1;if(s&&!r){if(t)if(G(t))for(const o of t.split(";")){const l=o.slice(0,o.indexOf(":")).trim();s[l]==null&&Wt(n,l,"")}else for(const o in t)s[o]==null&&Wt(n,o,"");for(const o in s)o==="display"&&(i=!0),Wt(n,o,s[o])}else if(r){if(t!==s){const o=n[Jo];o&&(s+=";"+o),n.cssText=s,i=Yo.test(s)}}else t&&e.removeAttribute("style");Qt in e&&(e[Qt]=i?n.display:"",e[Ur]&&(n.display="none"))}const Sn=/\s*!important$/;function Wt(e,t,s){if(A(s))s.forEach(n=>Wt(e,t,n));else if(s==null&&(s=""),t.startsWith("--"))e.setProperty(t,s);else{const n=Xo(e,t);Sn.test(s)?e.setProperty(Be(n),s.replace(Sn,""),"important"):e[n]=s}}const Cn=["Webkit","Moz","ms"],ys={};function Xo(e,t){const s=ys[t];if(s)return s;let n=Ne(t);if(n!=="filter"&&n in e)return ys[t]=n;n=Nn(n);for(let r=0;rvs||(el.then(()=>vs=0),vs=Date.now());function sl(e,t){const s=n=>{if(!n._vts)n._vts=Date.now();else if(n._vts<=s.attached)return;Ee(nl(n,s.value),t,5,[n])};return s.value=e,s.attached=tl(),s}function nl(e,t){if(A(t)){const s=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{s.call(e),e._stopped=!0},t.map(n=>r=>!r._stopped&&n&&n(r))}else return t}const Pn=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,rl=(e,t,s,n,r,i)=>{const o=r==="svg";t==="class"?qo(e,n,o):t==="style"?zo(e,s,n):kt(t)?Ls(t)||Qo(e,t,s,n,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):il(e,t,n,o))?(On(e,t,n),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&En(e,t,n,o,i,t!=="value")):e._isVueCE&&(/[A-Z]/.test(t)||!G(n))?On(e,Ne(t),n,i,t):(t==="true-value"?e._trueValue=n:t==="false-value"&&(e._falseValue=n),En(e,t,n,o))};function il(e,t,s,n){if(n)return!!(t==="innerHTML"||t==="textContent"||t in e&&Pn(t)&&P(s));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const r=e.tagName;if(r==="IMG"||r==="VIDEO"||r==="CANVAS"||r==="SOURCE")return!1}return Pn(t)&&G(s)?!1:t in e}const In=e=>{const t=e.props["onUpdate:modelValue"]||!1;return A(t)?s=>Kt(t,s):t};function ol(e){e.target.composing=!0}function Rn(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const xs=Symbol("_assign"),ll={created(e,{modifiers:{lazy:t,trim:s,number:n}},r){e[xs]=In(r);const i=n||r.props&&r.props.type==="number";ke(e,t?"change":"input",o=>{if(o.target.composing)return;let l=e.value;s&&(l=l.trim()),i&&(l=Cs(l)),e[xs](l)}),s&&ke(e,"change",()=>{e.value=e.value.trim()}),t||(ke(e,"compositionstart",ol),ke(e,"compositionend",Rn),ke(e,"change",Rn))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,oldValue:s,modifiers:{lazy:n,trim:r,number:i}},o){if(e[xs]=In(o),e.composing)return;const l=(i||e.type==="number")&&!/^0\d/.test(e.value)?Cs(e.value):e.value,f=t??"";l!==f&&(document.activeElement===e&&e.type!=="range"&&(n&&t===s||r&&e.value.trim()===f)||(e.value=f))}},cl=["ctrl","shift","alt","meta"],fl={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>cl.some(s=>e[`${s}Key`]&&!t.includes(s))},ws=(e,t)=>{const s=e._withMods||(e._withMods={}),n=t.join(".");return s[n]||(s[n]=(r,...i)=>{for(let o=0;o{const s=e._withKeys||(e._withKeys={}),n=t.join(".");return s[n]||(s[n]=r=>{if(!("key"in r))return;const i=Be(r.key);if(t.some(o=>o===i||ul[o]===i))return e(r)})},al=se({patchProp:rl},Bo);let $n;function dl(){return $n||($n=uo(al))}const hl=(...e)=>{const t=dl().createApp(...e),{mount:s}=t;return t.mount=n=>{const r=gl(n);if(!r)return;const i=t._component;!P(i)&&!i.render&&!i.template&&(i.template=r.innerHTML),r.nodeType===1&&(r.textContent="");const o=s(r,!1,pl(r));return r instanceof Element&&(r.removeAttribute("v-cloak"),r.setAttribute("data-v-app","")),o},t};function pl(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function gl(e){return G(e)?document.querySelector(e):e}const Pt=(e,t)=>{const s=e.__vccOpts||e;for(const[n,r]of t)s[n]=r;return s},ml={class:"sidebar"},_l={class:"chat-list"},bl=["onClick"],yl={__name:"ChatSidebar",props:{chats:{type:Array,required:!0},currentChatId:{type:String,default:""}},emits:["select-chat","create-chat"],setup(e){return(t,s)=>(fe(),de("aside",ml,[s[1]||(s[1]=me("h2",null,"🗂️ Chats",-1)),me("button",{class:"new-chat-btn",onClick:s[0]||(s[0]=n=>t.$emit("create-chat"))}," ➕ Nuevo chat "),me("ul",_l,[(fe(!0),de(ae,null,_r(e.chats,n=>(fe(),de("li",{key:n.id,class:Ot({active:n.id===e.currentChatId}),onClick:r=>t.$emit("select-chat",n.id)},qt(n.name),11,bl))),128))])]))}},vl=Pt(yl,[["__scopeId","data-v-cd451cf6"]]),xl={formatDate(e){if(!e)return"";const t=new Date(e),s=t.getDate().toString().padStart(2,"0"),n=(t.getMonth()+1).toString().padStart(2,"0"),r=t.getFullYear(),i=t.getHours().toString().padStart(2,"0"),o=t.getMinutes().toString().padStart(2,"0");return`${s}/${n}/${r} ${i}:${o}`}},wl={class:"timestamp"},Sl={key:0,class:"spinner"},Cl={key:1,class:"thinking-text"},Tl={__name:"ChatMessages",props:{messages:{type:Array,required:!0},isLoading:{type:Boolean,default:!1}},setup(e){const t=e,s=et(null);Vt(()=>t.messages.length,async()=>{await or(),s.value&&(s.value.scrollTop=s.value.scrollHeight)});const n=r=>xl.formatDate(r);return(r,i)=>(fe(),de(ae,null,[me("div",{class:"chat-log",ref_key:"chatLog",ref:s},[(fe(!0),de(ae,null,_r(e.messages,(o,l)=>ar((fe(),de("div",{key:l,class:Ot(["bubble",o.role])},[me("span",null,qt(o.text),1),me("em",wl,qt(n(o.date)),1)],2)),[[Go,o.text]])),128))],512),e.isLoading?(fe(),de("div",Sl)):bn("",!0),e.isLoading?(fe(),de("div",Cl,"Pensando...")):bn("",!0)],64))}},El=Pt(Tl,[["__scopeId","data-v-96cd1719"]]),Ol=["disabled","onKeydown"],Ml=["disabled"],Al={__name:"ChatForm",props:{disabled:{type:Boolean,default:!1}},emits:["send-message"],setup(e,{emit:t}){const s=t,n=et(""),r=()=>{n.value.trim()&&(s("send-message",n.value.trim()),n.value="")},i=()=>{n.value+=` +`};return(o,l)=>(fe(),de("form",{class:"chat-form",onSubmit:ws(r,["prevent"])},[ar(me("textarea",{"onUpdate:modelValue":l[0]||(l[0]=f=>n.value=f),"aria-label":"Pregunta del usuario",placeholder:"Escribe tu mensaje...",autocomplete:"off",required:"",disabled:e.disabled,onKeydown:[Fn(ws(r,["exact","prevent"]),["enter"]),Fn(ws(i,["shift","exact"]),["enter"])]},null,40,Ol),[[ll,n.value]]),me("button",{type:"submit",disabled:e.disabled||!n.value.trim()}," Enviar ",8,Ml)],32))}},Pl=Pt(Al,[["__scopeId","data-v-dca915bb"]]),Il={class:"main-content"},Rl={__name:"ChatMain",props:{messages:{type:Array,required:!0},isLoading:{type:Boolean,default:!1}},emits:["send-message"],setup(e,{emit:t}){const s=t,n=r=>{s("send-message",r)};return(r,i)=>(fe(),de("main",Il,[i[0]||(i[0]=me("h1",{class:"main-title"},"🤖 Chat IA Offline",-1)),oe(El,{messages:e.messages,"is-loading":e.isLoading},null,8,["messages","is-loading"]),oe(Pl,{onSendMessage:n,disabled:e.isLoading},null,8,["disabled"])]))}},Fl=Pt(Rl,[["__scopeId","data-v-2c6be2f2"]]);class $l{async getChats(){try{const t=await fetch("/api/v1/chats",{method:"GET"});if(!t.ok)throw new Error(`HTTP error! status: ${t.status}`);return await t.json()}catch(t){throw console.error("Error fetching chats:",t),t}}async createChat(){try{const t=await fetch("/api/v1/chats",{method:"POST"});if(!t.ok)throw new Error(`HTTP error! status: ${t.status}`);return await t.text()}catch(t){throw console.error("Error creating chat:",t),t}}async getChatMessages(t){try{const s=await fetch(`/api/v1/chats/${t}`);if(!s.ok)throw new Error(`HTTP error! status: ${s.status}`);return await s.json()}catch(s){throw console.error("Error fetching messages:",s),s}}async sendMessage(t,s){try{const n=await fetch(`/api/v1/chats/${t}`,{method:"PUT",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({prompt:s})});if(!n.ok)throw new Error(`HTTP error! status: ${n.status}`);return await n.json()}catch(n){throw console.error("Error sending message:",n),n}}}const Nt=new $l,Dl={class:"layout-container"},Ll={__name:"ChatLayout",setup(e){const t=et(""),s=et([]),n=et([]),r=et(!1),i=async()=>{try{const a=await Nt.getChats();s.value=a,!t.value&&a.length>0&&(t.value=a[0].id,await o(t.value))}catch(a){console.error("Error cargando historial:",a)}},o=async a=>{try{const p=await Nt.getChatMessages(a);n.value=p}catch(p){console.error("Error al cargar mensajes:",p),n.value.push({role:"bot",text:"❌ Error cargando mensajes del chat.",date:new Date().toISOString()})}},l=async a=>{a!==t.value&&(t.value=a,await o(t.value))},f=async()=>{try{const a=await Nt.createChat();t.value=a,await i(),await o(t.value)}catch(a){console.error("Error al crear nuevo chat:",a),n.value&&n.value.push({role:"bot",text:"❌ Error creando nuevo chat.",date:new Date().toISOString()})}},h=async a=>{t.value||await f();const p={role:"user",text:a,date:new Date().toISOString()};n.value.push(p),r.value=!0;try{const S=await Nt.sendMessage(t.value,a);t.value=S.chatId;const C={role:"bot",text:S.text,date:S.date};n.value.push(C),await i()}catch(S){console.error("Error enviando mensaje:",S),n.value.push({role:"bot",text:"❌ Error procesando la respuesta.",date:new Date().toISOString()})}finally{r.value=!1}};return gr(async()=>{await i()}),(a,p)=>(fe(),de("div",Dl,[oe(vl,{chats:s.value,"current-chat-id":t.value,onSelectChat:l,onCreateChat:f},null,8,["chats","current-chat-id"]),oe(Fl,{messages:n.value,"is-loading":r.value,onSendMessage:h},null,8,["messages","is-loading"])]))}},Hl=Pt(Ll,[["__scopeId","data-v-6fe96f7a"]]),jl={id:"app"},Nl={__name:"App",setup(e){return(t,s)=>(fe(),de("div",jl,[oe(Hl)]))}};hl(Nl).mount("#app"); diff --git a/frontend/dist/assets/index-Kwm2enAh.css b/frontend/dist/assets/index-Kwm2enAh.css new file mode 100644 index 0000000..0069149 --- /dev/null +++ b/frontend/dist/assets/index-Kwm2enAh.css @@ -0,0 +1 @@ +.sidebar[data-v-cd451cf6]{width:25%;min-width:200px;background-color:#1b1d23;color:#fff;padding:1.5rem 1rem;box-sizing:border-box;border-right:1px solid #2c2e34;display:flex;flex-direction:column}.sidebar h2[data-v-cd451cf6]{font-size:1.25rem;margin-bottom:1rem;color:#5a90ff}.new-chat-btn[data-v-cd451cf6]{margin-bottom:10px;padding:8px;font-size:14px;cursor:pointer;background-color:#5a90ff;color:#fff;border:none;border-radius:8px;transition:background-color .2s ease}.new-chat-btn[data-v-cd451cf6]:hover{background-color:#4076e0}.chat-list[data-v-cd451cf6]{list-style:none;padding:0;margin:0;overflow-y:auto;flex-grow:1}.chat-list li[data-v-cd451cf6]{padding:.5rem .75rem;cursor:pointer;border-radius:8px;transition:background-color .2s ease;font-size:.95rem}.chat-list li[data-v-cd451cf6]:hover{background-color:#2c2f3a}.chat-list li.active[data-v-cd451cf6]{background-color:#3451d1;color:#fff;font-weight:700}.chat-log[data-v-96cd1719]{flex:1 1 auto;overflow-y:auto;display:flex;flex-direction:column;gap:12px;padding:1.25rem 1.5rem;box-sizing:border-box;background-color:#1a1c22;border-radius:16px;scrollbar-width:thin;scrollbar-color:#5a90ff33 transparent}.chat-log[data-v-96cd1719]::-webkit-scrollbar{width:6px}.chat-log[data-v-96cd1719]::-webkit-scrollbar-thumb{background-color:#5a90ff55;border-radius:3px}.bubble[data-v-96cd1719]{max-width:75%;padding:14px 18px;border-radius:20px;line-height:1.5;font-size:1rem;word-wrap:break-word;-webkit-user-select:text;user-select:text;transition:background-color .3s ease,color .3s ease;opacity:0;transform:translateY(10px);animation:slideFadeIn-96cd1719 .3s forwards}@keyframes slideFadeIn-96cd1719{to{opacity:1;transform:translateY(0)}}.user[data-v-96cd1719]{background-color:#3451d1;align-self:flex-end;color:#fff;border-radius:20px 20px 4px}.bot[data-v-96cd1719]{background-color:#2a2d35;align-self:flex-start;color:#a4c8ff;font-style:italic;border-radius:20px 20px 20px 4px}.timestamp[data-v-96cd1719]{display:block;text-align:right;font-size:.75rem;color:#999;margin-top:6px;font-style:normal;opacity:.7;-webkit-user-select:none;user-select:none}.spinner[data-v-96cd1719]{margin:1rem auto;width:36px;height:36px;border:4px solid rgba(90,144,255,.2);border-top-color:#5a90ff;border-radius:50%;animation:spin-96cd1719 1s linear infinite}@keyframes spin-96cd1719{to{transform:rotate(360deg)}}.thinking-text[data-v-96cd1719]{text-align:center;color:#5a90ff;font-style:italic;margin-top:.5rem;font-weight:600;-webkit-user-select:none;user-select:none}.chat-form[data-v-dca915bb]{flex-shrink:0;margin-top:1.25rem;display:flex;gap:12px;padding:0;box-sizing:border-box;background:transparent;border-radius:0}textarea[data-v-dca915bb]{flex-grow:1;min-height:4.25rem;border-radius:16px;border:1px solid #2d2f36;padding:1rem 1.25rem;font-size:1rem;resize:none;outline:none;background-color:#1c1e24;color:#e6e9ef;font-family:inherit;max-width:100%;overflow-y:auto;box-sizing:border-box;transition:border-color .25s ease,background-color .25s ease}textarea[data-v-dca915bb]::placeholder{color:#6a6e7c;font-style:italic;opacity:.9}textarea[data-v-dca915bb]:focus{border-color:#5a90ff;background-color:#20232a}button[data-v-dca915bb]{background-color:#5a90ff;border:none;border-radius:14px;color:#fff;padding:0 1.75rem;font-weight:600;font-size:1rem;cursor:pointer;transition:background-color .25s ease,transform .1s ease;white-space:nowrap}button[data-v-dca915bb]:hover:not(:disabled){background-color:#4076e0}button[data-v-dca915bb]:active:not(:disabled){transform:translateY(1px);background-color:#305dc0}button[data-v-dca915bb]:disabled{opacity:.5;cursor:not-allowed;background-color:#3a4a6a}.main-content[data-v-2c6be2f2]{width:75%;box-sizing:border-box;display:flex;flex-direction:column;padding:2rem 1.25rem 1rem;background-color:#121217;overflow:hidden}.main-title[data-v-2c6be2f2]{text-align:center;margin-bottom:1.25rem;color:#5a90ff;font-weight:700;font-size:1.75rem;letter-spacing:.05em;-webkit-user-select:none;user-select:none}.layout-container[data-v-6fe96f7a]{display:flex;height:100vh;width:100vw;overflow:hidden}#app{height:100vh;width:100vw}html,body{margin:0;padding:0;height:100%;background:#121217;color:#e0e4e8;font-family:Segoe UI Variable,Segoe UI,Tahoma,Geneva,Verdana,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body{margin:0;padding:0;height:100vh;background-color:#121217}@media (max-width: 768px){.layout-container{flex-direction:column}.sidebar{width:100%!important;border-right:none;border-bottom:1px solid #2c2e34}.main-content{width:100%!important}} diff --git a/frontend/dist/favicon/apple-touch-icon.png b/frontend/dist/favicon/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..92165950f50a4ea9dc21ba89393d87b4972b1b34 GIT binary patch literal 7146 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 literal 0 HcmV?d00001 diff --git a/frontend/dist/favicon/favicon-96x96.png b/frontend/dist/favicon/favicon-96x96.png new file mode 100644 index 0000000000000000000000000000000000000000..c36543c71564b9f87114ad0b38db53fd50b49b1a GIT binary patch literal 3236 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 WPyJ`EXXtqV0000LLm zwTW->NJ|KTLQMq%4~$w9fkMN|q@p!#?N1=>h6Uw%zX#vTd6${t&b*oTie-|+IrrRi z&iCCrGxxoBXHcq4m8-pbmC?28>@KCAS4!2^uC=R_x@vq?Mx(!JyHcGdV2_D0De4U) z@JBgD#;0!%jZNxO%E-j@^(fqtQ%c?v`%&dTb>%Nz3XyXUJL>#vt;$`AAjN}g6wSLlZn}z@QZ&%*(l2gae zXczga^Msb-RSUkj=X*FawZeOa(r9JuoLilZ;RP_Db~sXT#?{Zexr4-{@5XkQcPw$F^6D zbw3U&YP{jm$;HYY^)XRqyD=0#q4^+wx7lrj`#1&ii=w2q&pN$-fZp%)LDH z!DmTv^{Na0H_|VBL;N6}eMr`B<{3c&I=lI0{^$<#J`uF;DAQhgUa1Nh$M`k9q|8yH z6!jw7l}fp4=8bgOvq->Xr7@Hv5-q zvTfohb0B_Alb4@n9C_nCty&{5843HI7WX^i)`p7H5jQUDIf0v?u)jAqir;Mbm?tx) zxsAr<+CMUJ`L65S2gPxZ&P#Jo8ak*(A$?xB^u>)ooSBU6-G(UdEby9*OS{fH=aabS z%^q^lo?%emfXQVYo}VBd#D?azjrz=$+I|i#`)DKA#z&tY2S0r2r)}?H(+^z?e2Hh< z&2KhmIV3rL8&kHE#OJ(AJlN776(83H>+<@;v%^o0w&$L)04Ke;E!SpzdSP4cIUn%x z?nZC#$hzy#@7lBd#D~UtB#w&)zC8E12kiPTZE_eLpYr4&=UnmvHgb6HxnOz45Fh&D z(62cT#I-dz02{H$DHI=^BnQ~2A0#q9>b%=?A!~-Q?K*|FU9k(r*~)jDfrZrWmlsoY zuee3W8+AMN%)9(OeJAy7bG+4+V(qwe7=CeK+I3txc>VT|;(PFIW!~OjX#C7OTHpFT zyH}}iUefx;&#N|kLkDvUyloHU^T0NT+2TN)#DNVT_9?22)EaTwr{HI*t2Slx4nxc7 ze{WFV<$q-4_l}_N_IV^sgYU@8_v`TvJ^gmPY)2hCx#Dva-y!%rfxl(gMjtTPCbpf= zwypj0Q3tWahmG%0%%?5$i7hq12Qbgp=m&q9W816&EWT3%n|?dqtIb$jd&MT{!!y+| z&r-P_ZKS<8bB*Ec4Go`tuy#-l*7DN!nw2sCtp-_cFnhXYUw6JjsgAN$fgf%7muj%b MYSz#8RUiBQ1HaspF literal 0 HcmV?d00001 diff --git a/frontend/dist/favicon/favicon.svg b/frontend/dist/favicon/favicon.svg new file mode 100644 index 0000000..558d58f --- /dev/null +++ b/frontend/dist/favicon/favicon.svg @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/frontend/dist/favicon/web-app-manifest-192x192.png b/frontend/dist/favicon/web-app-manifest-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..00d737d0d1949eb9c2aac88d3d150ed900972b51 GIT binary patch literal 8018 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 literal 0 HcmV?d00001 diff --git a/frontend/dist/favicon/web-app-manifest-512x512.png b/frontend/dist/favicon/web-app-manifest-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..76db085670b4228f9458b928f77b53d56091a9fc GIT binary patch literal 27378 zcmeFZ^;cV6)HRxf;0`TLu>!>k#hn1ft;OBl-62SU7Wd*V#VJ}G+T!kR#ob-TYm z1JFfTN(@jrLbeD0<)fLVjJbjWfDwL<0sw|t0l+Vpz+WWr7XW~e0|X$zkHD9|<$(U5 zcR_$0g#Y*arR4|`Am##zqLwo(WQl;NI+5|fhO?? zT|L}Az_5!u+rx{@k!vH92eP#jz=)wU77`icBNc>i2XjKUYcYKw3Sq6RAizy zS|yx)C$Ho&U8b=*J9*Wd_Zvr0bj_knefVSwfr-EF)avNl+R%*YbIP@T*j~b zCSKa@2O5Zy@&hnx|9OERY7ce}jAl~Mrz})rv0Ua5>Nr|`cD}3Yc;kU9@`V8EEcI$u?Z z@HU$Lxcznf1~^4`{F8!nM_^XaKy#Mw-}f>ddg!He>llxvsV*1@pHDh!os`?m6jvR> zSefKl@z1;NsC07zil?=c_gNm*H-hcmRB$uMbS^E=C#PAH-yD{Et_?Tz@6^9NSM8b# z=BEUJv}7r>rnK~Q?y(@OMFFL?d=d%*iv2>)*ABvhRk`q6EYky!JN-z>Cf8cZ)L{>0 zER)YSkUCD!!?#!v02l(n0dWnJY-|7{zhndyv9buVhv2cGl%xb+g8bk0j=nZ##>#nXfE%of&y;Mx5OgfJN z0bq3k3^VwjGQZC}-rf~88T=vhEB;DD0iSq2IIYEPhTy{v;I!3mip6oex_JlYKm0{5 zazDs*8?_V2HaZpy*8WxOso^@u#M(HNW+4s03k1NE>JONm9ECU0d&5~k;5$}TS?kTj zz(Vf7f6Z55w!R_nB5~Qrex|C78?nXmKR+JBK8B#cO$Fhe>IhPlGzf^m=7UvA?LFNG z>p`zMY*Ygg)~ZV!pifr^6jqw2#%?#&WMQ?E?(mOL8iqq4_3h)oIQCR11lTrm%ib*C z38@TFIrV_c8_jzdO_hR9D!eajl*ojxdiDBoep$rKe^$mh#Q+K;1dM{KX&hJo9pcvC zJRj}L@GMYKuq)985CkNo&N*)ju(n;)hV2tRgOfT~JgHuRA)P=FHz$B>GEIQ6Y`=He zahyg?>5afQ1Rc09s$ZY@{MM-Sw%Ia~QhbsXYy5>U3|x*wLdfB~@XXpX-0SVDnwXYjbKt~kejkaG@Nz1m-;6JGe`=;2r1mz@OoWC;(k65fwO(Ex@O^%DrnHd`sIj2HbS37zrQo-Q6YOn<~|exVL4u5x1^ zwe3g83g}LLUN4=k^m*Q0!q#FY`1g|Qoo*mW4-jYBZRqy;MWvtj&g}4j==}!V#k^Tz zB?e55LU_IvZu>$h#};Tbc)M`5Qu;Qf- z9(EAVj}Un(G`L&IK&Zu%uq&0#hF=C16=`+N*>b#QvG5fXyrw9By`ffSUS*x-wDoQ0 zj1&wvrd5nG%enDwy7u4>^gPvW=T}*XhjSQ$VH``Nl%&vf+)!7YY=oy620Y_E!FcZl z01RnCr|xpy8~@_sRA_hs1an8xJo;Kci`>pl(Laj9;TCSL9Od37Stsz_p&ct@`}Mar z9t=m~Vh&0GG9`j0g2eLjhkrbp`yQ11yx1VhHAIjvr9SiCDOsm~rxWH(ee&x3C~d|7 z+~fd^z)Yei`l?pv`?MK`Nkze!)t3daMhp5}`k1MYU`Xj-uXiUw0X097K+x;GyF}>( zO2PsWY)`981jhCdq1eFYc@BXk=s&;q4PdCIv z1(JaW9RfiE;Rcccuxu@S&ia_Leo(we6ckPRf?)WYO-gwkW-YgEyxD;oD*b}p!a(6C zk?nsZfG1p8Yc!jf?vuR}l956w02ahM<36gMhyStJpLOl+i#t5OLOkR%o?-2pH?H5a zR&RKsIcVUn;Lz_iUcKACNZ|2^B=$N4{|AGe`Cxt%V}kN_0eauTNm3?!&v`d7wU8B1Sq>*0I zasp?!U>h1IuHdmwOnpFKWB+nR823}EB^$%bZ2|&bfp1%3?p@>oG~-Jk21B$TZ^-}% zl6T`aRheoOOkximKzC^ne8$*7{kw~+8wsqR1*N(-n^?Ag%{!&xcZ1k`3#;OZ#gO?A z#YsSqM;$EG?iWzjA@Q@v(VI6L0)8Mzz=VYxv$+qW#mG+zUU>Zk0I~6Qzed2WS0mb} zNV4XAB2O++bBG1})O(G&Y0rDeAE<5vWd~mkvzXWl`wdt&8t0c0oN+;-CEczS5u%#y z>Kn&|mCqBMd$t`j#U;7SBe8XbWgXaTqS+d%mi;pc$I?ubXd{!-#`r|}d16P(4v5S4 zsx@}-3&Z>(S#rNss6-GA-jMG2=jlEshXJ6g4tcPqcbWo$LS?#IgMj!~7l6yLJ9 z9mN+5`H{=*iWZC7ZnmhfFT7)#DzjT(+ZEChruSLA*OccH0G*N&Jwbfb7)n zxnhfV%&csxwz@aMfj7q;%f%0KJnA-wRcikPKu6yoeGl$G+rOM>EqFI&CEfOxs_}{F z*D}XX?YYUUofh(;Jv`c)-$p@y zQ}%q)kzae#CJyxs3>Jg-u(GTs!xFqMn!)NSywhw*l;R1T)9+k9Ry|f_{+=VWEq~-= z7g^?8Ego<<`-%a?!g(qp9-0}*wjia>KI)A~$~q1KPWA0xR&1KiYu&k+{hpG%sVziH z|C|wLZ6&ddg|QPjAi|=nMf`1*W;GXfr%-zv_bU)vvs@shQCAnUdkO;!66!9)ZXgjV zLl&hkhG_)*u$n5ubW#R;BShwjUz5s4Ex#hbl`DYzs}knY{QGteg(J|T%r`l0I1{DS zA?v_ac`HFx2+C~InvMblhf+KCvM2T6V7?w)J{XsF4r(Fk``*$o)#!`JUFIZf^k-C%U?;HW_ zb*ND^`TbV^LO&-*eN^g*G`}EA`tGl<-p!d_Jbx)U@PU7{8JX?GeO-?ig);Vi;2EOv zDjUOguv~iOht(KlWJ+;ES=ra#iWu2dC$3}i+o+k7wJAv%LkrA8QMiM0U}fKe%+A0i zd~Xr)zArCJ!t%3jHmgMKS~n)LUJBTy(=-cNAalnHemvf_T}HT-{_^wJ97jt=2Se;e z4!G1-KgM`$X!6&thBBtrNAW~q@EYJUFm5C_W-n^*uM5*iSy*}5+Xt9`2@JRWQ)odzOa( z?D^qxf0UDSHKhI)`=n4o>fgxT<9i{xTkBBs-v~agJ%oEsjIHwMK&`fnGl#~ACx}Nl z%QIduy9K01yDG}lk`rbwB)kA(?GBnEJJb@a_ItA*6fw`(=fSY_3_!bXm0qAm zL1Vk3%>j>2!k@|MlL{Y)El49i*G2_KwvU2^56k|buOYTc$6Wah^LKA!ef6j93O=5W zQjV4$GDnNuDlT;^bUuBW*c^+#9Sy5Pt*#q{HFO`^{1Tqlp4H>?uR>LSjweVHp)2^9 zacP!KYX`<3xYN~{Z#}eMJL0m;+9c(AAwJz8L_WDDj94pR6&zrTtRkKs6kJ#lDDJLD zk6qN)6};c`{n65)JDe#HeCr>@&6Z}d4*o0*IZ0*g@o$$XCdVA!<59KtchD7%`^h?@ zPGm5L3Iu!lOb#NuULQ5OHna!A@B}vRxGJt(M3KMa|I@o!S_wX> zQ;IjoRcn_cugZ`d<1xTqm0o*V4zsL-d6R(p(+iHUe6xgRy@-Z2cuHM(>XlE?pyW{t zYs(n!VNR-E=PZ#;HkOy4|LUmoTD1EZ5t0iK-~KTquq)*cX+YRE`!p`R`__N)Jbc3M z)wg1eZx{A${LQeLu})ooiUB;yEy-pZVKs;n<`;RCF>gbZRJ?bnuCt%g##4)2nEZv* zf*xs9*03p3-#{{09B_Z;tNmqYIb#fR_-@;q+^?7fynBp*#4}#>yeBD7ldd|4X~^D1 z%Ob?lJ%5tyiv;*S4tZYveSax6Ln_ZdId+r2t%nK)OLj`Y zYco!D9Kay0gX4OI6zUh2m6RmXE5KMhnb+UPO(OScoCs_=#zy0^U{Fwygp@!-{K9dF zs5_Cb+$QA7R+b#xao>xhp(I<{+V7AGfG1@L+{QqLW6Ctab|PpG6B#-tY}juRUO2!? z>8gaoz3)e;T}03RViQ8ZK=vxJFEHnPX|7}a{Rc^a2_VwxK*nw3qNQ}jI+MTa3(8wW z_y+?`z_(Lvylpe|R?C>}M5>Wc`ZkfM6QTeN?4B(*x5Ji_A8db2zdj2CU4bdTUSF#2 z?}cJL4bpw2WIzdkB*Wct+lmTniy2W?UC%EaJv2|zcf4HpOQjV({J-F|XJlt`n|`Lc zKltsHw=%m~*zJEY3WY$XHCJ{+SySWUj;ubrr2azCzuWw~I}}8~3^5C$iVu2WRJb4x zG#%?VdNqHyGub08>6GA0oz9NyL-D!^nxt|{!Pm`~o5jK@q{&EKm@S)t46XF=cnq=Nb%G%6d+6BF2bMP^`-cp80VN* zz!w@1>C^{3eimRo*^Rp1jwhe^Y^Pm4i5v#BHcj2@+6@ED>Yj&4W4s~)kF(%Tg>Y-7I=f8hFm zG?<8njhQ}+_cB%Yu+tjDprd3AG{#C0O#fO!#KQB4-p{cN1N4#oWy-v%0BF&BCXug! zQ2P82Zb)iL48BkF!VkF!tnFT|n}|;a-CF;-CQu%QnZkdUg4ICa_)&g>@^}nhTQG+E zK1KFJE$u3f23Xk>iN5`ht==f|43-WHXWu5A*Q&Ds&46-?1sbQjugSzA!1gv|c%$$? zu|vGX(Bm(vpODrrAWnmqyIf-8@Uvn$x|wVd=hYC=w1%Mn78PYIF;KYT{$HF=)$MXq zLbPcz-p@(6SVO6&jPy^)^R674p{DK=q0~*6jdV(d`d{9iGV!;#{%s$9-Z~$!sCgAg z(;bRn$g#a6!oGEU5jN|qglLs6BQ6L}AwrZ>v*}TCEx%rIjgi(~^ex;b3?lGutlN7Z z-%&lNfZ$mK2?+ujb+j#fa;7wE`8+TeChKG0<5C8LWCai6t8SkXadn^Vfs)27k<$AE zper)(N3wbN6#G5~h>)_9)SsmPc+9LN(FSCgEGJCXE7`*OE-+Qze5I>~=KR@>BZnK2 z0~YgF=rH{_P5Nye^ZW+s;EyZv9Ao1n_*-1G$8g+R%li6$yDO zm@Vlk)Npw40^Tn^1xc0qUrBE4j&`dMMX%Q|#0tS}5eMIr!CXRT9}nltik{QOwW!nm z;oaUYa`S?URzteY2u_8jmS%KIEDv^ag9s`HS{!jMGaE4THh-cpGyco z;Rhg$i4bax=s)g0!+eXqrUn{*t?q<_`rzsZ0BlSBiA=U&ghc%*s<$%b4$5r?{7H-# zfDlW?){?*4>TYKUYd0EgpVW2ofBP*e_^qJfCE95BDDrM%= zNee8*;8cRHjx5sWx>W6XY#bG;HOqfq+CZcYCi@su4j+!0GFFN7Ziva+(=Mgz350Q8 z3;2Oay#|;AOk2l&7p&RQ5a18fGnmcHj!6Pn6rp>;2UEvglgo-3Jh08qf?l@oRHofa zlx>Pd3&B%=?$0zq$*gdbnX_Nrt%r|*-1j$8p&(7QIf5Y^c-I;W1hyB zY{)Ly-)|tgV422}eb##muQL+2<~7fM4aykzTP|UIL=3H)(#%zPLT^rU-8wNo7r>!c zIt)P3Z$Ktp(6iYM9y z`T4*k^QQEH=@eQzQzQc&HMAtpj(VKX&k7o%!~}l(F#WZNKarycmSmZecj~Df58r;P z&L-UG*5*{e=3Yb`!(_NhQVWiI17@e}{2p-Ze>jzGXHV|r;>SrgKv`muuf8dne<2&a zMBZ+^Jj#K3q{uBYu4}hW(YuH6hm}=;&L##kkVR}hSJ>x zEzQlNPJm>q57%jp9=G-C_s@4e)4$(+w*|L8HB+T?Z|L1_8*68b^ ze`g?Qee&IsCZ(ljr4IlA1>poBP=2M#K|;C2yY1T$5I!4<>xar0w623MRi9r^8+aZL zlyvN~(6qx>|I+`6yAT8%-fx|~6sum-lb8u_zR})^m7Ry?l>WqyE^j_t$5!glSW$+! z;GEI{ODNv2aH7g0f=+OMU8iP#7ct=3>;F-p2r!u23C_PUxH;Y8I1W>Q-}^7kS`@eB z*)K5~95#iu^+9t%zq=no6a#02jf3J}U7yFkwo!;~Ioxvx0C1|K;04WA9KDOu5Hs)~ zd)|G7BdqALR$x8hA1n=j>~c^_-QfQFVDZy52`Cn>Y8WB|8Q#2ee?`VF3ZVnRajjR2 zl~Z1On)Vky4pzaXoRpe@Gt6w#Aod%pD`KE6Jl2$?718W+GHdxtwmR2he-dXux`DhI zVdD?1t+0ty=yyD}M5I9G7ky_CBl_Qf!Wxazk>+{hy-bw{ov&EbYJVXQY*6w@=%#&; z(I7dUtqwWx5H7A$`q)Ordw=Pq&st)G&C_tq*3&p_Kdp zp=5%?ULP7qeyl#t=~=P+(A{F(H`0ZF{u&;5%sB(Fyw5%a%h35lkG3A7Eg-N84tHyA z==r``w5Mk~H$(RiT|d)xOpbYhh+PHld#85jFyC&g13`3RL$M@?OK?#KP5iG_J=eJ;P^gga_hIKm#Fpp1uE>N!!Of@>l=vnzQE?}PI_ z6dBOF6BLtL-=;`se%Ii_PwG(l8;6ZDCk|kNOTi(kIF5;(^solA!&Phg69E!Tq{E?K zZxf}n1ok^Gk%f8fIx_Dd+;G5udV#Z1BEEnC8nE!)o^3k$LuabZ(9?c$XK=mAE~CG9BV~-t0e&Z0qK6n+u35F-s z-)e+90B{iH@i}c^I|9vJJ#yeEI_D zrqq_M_8K?c30Tp$)8PXn@)K0=;SLdmJEYHq$r23|isDFbxN)p?HBEjOvWG&HFgxuw z{x|sbkH^W}5MD}3Rv<6nd;u#h7_tDaoS`_gd%9@C^btUlLzd&r&8fBXw_iS$sw#=Z zCcvJB*Pu=M0MUT+MI2f{AQh@$scwR{un)95BYqnJL1KIM(;fClsYAMhAxO(;F@ zBPH9rz_P3*r-Q7K^FU)M4jX*K zE&ymL9iIs<<*`fq@uPpT#5uc|%?wLrj;!cL^>QBdW2CZ19A<-K7{qA7T<@Yoz-XnF z@q=nG0VO3jJo$|mkr$diLZF+t26kI@#LP+B1Fy`8)vgCW&$pOH4%Jpz$ZN@wV>+;9 zUz-bRUcT?4G{wSYXjOubdt(=gS0oB4zJAz0BHbxrcoHkx-BCewMxwp=OWDd9esc9r zZ?m;cA>`3V){Ip#&2OKsijZgvA<*?@?;#BDpJzPesYt==gTXl&iO-Fww@&LWEMMo!yC(o!9DR?!Nucd$xGRg>Y1k?;H&1-22lgE_w%cWN8Dq!EEe-)z? zkja@6$B`bt;@Ttiv%oz<4x>>?l zy5V6wPl1N(zECip>p4a9@8>b1=`5{kLm(^)0LpratjhLBBP`ohwj_e3yH{KX{_&O= z$hbJw0TA?Iuva1hZL`f%tCtQ-EHW-U72z=uO99HJP<4JE#{9@%l{fy7olANzA0P6t zfbpq-{40P9rCNha@6PT!>#e4lnVE0SSNL8KJ5Fb?G7^($uRrSHd~FdM5vE`K{S_>e zI&zN(PcbM!2pm1;cSEW++~i_wW>zbt1z|*)gUfXRZN5~?NT8F7zVG*F-=1Ijo!j<- zs6{FDK$%lQrx3=%XV-~Vua*ggFP@Z?Ah>bVnn3;ni5&0A1(nwlZBZn*RXJea3o^zfgXvwR>VFnQDv|)`%1PWf4-1mPix; zuzQ{RsHQUSv4(;HK`9QQ3J5D9|wRe%d8-o{R)IvWJgKKoo|gdk7I z2U}9Ep}@_LHk72>!{M!Sx3j1Iu_EiB2$MOxn3M^IV?Syj%JQs-nT^U}=gmLhE?` zK@e^{Uiox&Kd0XrlUaQ|zw?KVap7d-%|rR17c7~D#+SM4;jU`5`FDONCEHuz79UsP z61)5JV>4AgH3&uX1u_tEsEjQ^Tsk~U(ieA7$q#a&(NRQ{vGw5Fc8~$F$j;P5O)>!O znCQiUxg#Ty|ASHt9R<_lw;BFmxUA%gvU~Vpn(&^Pn?x3w;2#mZo$q|dS3nvMxtfV$ zdZpL$o!Yp#oyv*|gp%=b4gQeBLGOsr)pSDT8u))r_~!|_hc|l*=VIDJQtRmVhO`|U zXKREgreXnAuN^gtN$$Pj`7W67d zv1zPqq1;G>KNf)iXYXtPq721sfWbhc`Nh4%J2anY<)or)ybo|r%})7A5?W7a-B1am zdfGWX908E!T`R#E)RRlsJSXbu>nE}Cv207K1f~i3AWL{HFG77cY9-??no>R7J}*hFw8l z>f@<~Bj73RIbKTe-D)&TC>K)qL`8CXLlq$*z61bsD&*@Ew4-D^iss(smWKC87BkD- z45PD@T*qWO51f*5*D z>QvK`f*xh<@IvLw%mN4g8LmvLHzk+IHMz1Q0smA|m99Qez>bBk%b3@0Y7N;sLBRX5 zpLzezIB|NrMqGA&wzaiQQw(HlH8~nR89F(!w4kn0Brji6)Lot&Z59hF#U*2q;1c?v zoQ4a(iKu<&XRJEjoA=>9y7sNwDM~8-X#zeD8e)u}a~~hdgu_Z+02>?d7{JNH!;!tZ zI^ug@ekUjViO11ax8EFeOK(FA>rnzl5@x61C~+vNDJoq zg|n8v|9d_}KCM-;v031nWL|QBv?!ay^Crj0982VQ&Q~0G^iYhDoDw}d=3%rGD5Uo| z;1!Y8E~dxm_cP1nXTB6|ydHTU6mAXwEG=cc3Cqc$?68Oo{2+5)#6J#Pqs>*1m$v8S z^;y^(ycyJCx3uSi+o+D8q`BgQ@XTp_J^Nio7h|&Y0@)H-?Up=KPsrh(lWet49>p;W z0R6S~DFR|7`iAMvPaP87cUVpCz-2Nk4n}2a%jIErTgO?ZA3UC>*~2kOzq}7Zm6)2J7ft8|eLI;R zd-8{cF0O@iie`J}E5uU^gyvd*kt%~*ih*cla1$C*41k?pL8zIlb0l2&kH zyn@_N(ei0B(Lx4M$phg`!aJI~{!)J31(&BLITB!CX{qTYGb$z?Uoyh(1n`{y&A09_ zqTTw4H9vsrHwXbmmpJ0P5RJZ7PFyB@QgbpIkokv3TjF(-Z}kNWM8Ii| z3T4J5<0#Hw5!k1H4*e#1sRB?=!%T69N#0SYGj?l(QuzT(eRZaeHEg<^J`;PzC;vKd zYk~n}0f*HtN(@(OWsh8260o=V*<1C-7X$6}^_g4~yY|Q6zBkQ3OeAmmI#j4OHfhZo zrIl#=2L@#=Spvm!zmszR12`Ul9|M!|3@k6_Xyw?%)Snl*D)2m;VLU7#tyd)t<+r_P zlR_GI7u(PG_xW{HO7faEJ*queJNxCrLn4vns5a$s=2`WK#5UNw<-x*7z@C3A>B;^X z3PGFcujz=Gq~BduROj)UY?(HM+lQ!qe9cXrR~>hWin{yftRg*zlk=y$Hf@dZ$0pTf zP%p7j0L3@cyaF{f{rtgVY#hX5A<0gf6QVb@;h5be%gxU;b#u$X++W=l-Ws%3eM@^t zx74N(A)q~#_4A4AxhC8%XUrBxo8BKybof=gM{tFddM;>m?r0EjHB#WXXd*EoicD6=QUGdn$Ae(4UD#m zWdn+K%35AivU@$IA!4H3)|-yG+6Y7ZfYQAET*uo9EeqzSvJZ^XwCHf0snHzB$rA8r z|BR!!S((47f*Fp(NDQ5H$OZcQ((*K}+<$Zi7IiEN5nzga| z!h>GRN(+~XameLJA)^rqBOe%4NNX%#`r!a@`VfYM*z>!o+oXt9b1a4BMuj^W-vl6N zf8{86^PZ&V@Y_Ik)gm-y<-WzzN1sQGRPEk3)<|3&J)*aSCjECLLZkx8hQ&iM!LMB9 znQcBN2m17%rP1VLuI_6Pp$dnS;-p8k)v~X9=^6uyh{rhGV{?G^Z&N?w{@jKND4N;n z2y?Dby^3)=KLga-4uXU9=+~Ay{$AyoXM?77W({O$swpnS`n?LFyN(D^rylNm=O}Jm zQxx{bQkDvVfz71UMidVlghe$ocqH9nh5~_kGvJ3!)|;B8%Xsi?m%u|cu-%pIwoi3t-QSyWvX#7BE-Un*qYK$zoOcQEG?MHe@y>sL=@hXn#dII=KRRSB)FM^3M`=Wu=Of>5n&Q%Oq z4KxZ=5Q}E)=TEV%??rlFBQg&piu8FVK#>(%oT*P|LhkP+-PhJ|2_npee^q-s3;W#m zpfYd$SslRgDPhRe^KrmT|J6uia&}24=dj(X7Qizuz%d(tLf?suG9l|jd|*Qtm;^_@ z;AT$k?e{t#BAeB~85vfguO|M&xl7zPw<+G4snLI+pqY-Fr{+^xE9+#DUiH9feDi9*h%W9z$78 zl5cm+fgkdj$ok7P$jit9?|JCych2C>)}KyCZf_HXJDcawv;5Tq950VmR7m$ej=-Hw ze(LX`f4A6{NAZ1>>1koXd-65Z;P1)%_ZF~U1t3L;!8`Nll5-JQ(;wTeG&&CDXgRt3 zB_FatrwvA12e?dz>;dv*`hwqug&ZJI=hehVIIQ{WQG$LTKrjO?qjnOHL~l+^UUs-` zl+}GbWS3&Eqe_S#dGCJv31M00jQUNg)R)6#0ef)&=X z=dp+XDW~5OEv!8%DGKT5+?7`{b9?DZxF-Jz`@XN&%WV-DxIQj1W2s2RrsT+H9f#rwcTE~j;OVdd`*=LNC`dU^;t9rj@xNg|EI zmq&Jo8y$Zs>ePvY zi)>^CalN!9mvb-r;rgN@JO19tl&zKrW)!cFCV#h#(KF>HRseZ!u)6tTTWy+~ds9b? zm5x)ako&TyyJ1^Zg6`lj)B?rQu9&rh;bGdI%oA%%ne zsvnOP*)hkfjVC#F4o**70#i+i24<`Vyg_GLAQXE1l(wHCdXH07+r`_^&q1>Jt9SB& zXZUbLR`&8jWn!&$XGNta1E^im1_z#g9iWxlv>mAKPCG|Uf{t6?rRbFYRL8kTLQSkZ z-yz+b`+Rr7b?Tq6Q%RH>f#?@CWaS zX4amz{5|3UB@K65g9kGzB0r{cQ|}!-4(A*WcKyp-kC{(v30X;p-A8L2*izJ*7Z@zg zkE65Z@j^hHci3u*?dxNasrYupojk@L`Is0Qw)GwJ5CdxeB}u(YbdlVO=U62UC$Ef< zfv@`%cNw`dc#}$zLog6i^ja%c`sgTADE(fu1k2%kN8q=b8hMR!IZaK&2y2lJ64o%L3Y}5HpF$fXyF7$Fg zy^jGoV22n5d_B(IrE0|i{!MqN1=CokEznxn)Gl{z%jxELjqV0J( zYJuDss7Got?W)=Wx6Z5!}m*6xeJuPXqwq;YcvyZjG_5Ds0%_jGr+e%oJM9VkLpxr! zS|B#{QnOvh5!~Rys?U51f5Z-t%r;TRu!3tU-V#OH*b-cwuzKgmC2{veQpZx0Lv6AZ z6d_JdfoAvHTcPtQKWQ+pPMX#MKZFfT{ryw|ork$*xX!dB@q>`yf}|lOdr(%@O7pX< zcbT{Rrz=I}h^o`x?|1c#oa2}6aK%@ZdoRvRCWFf z1~Ovv7QnG`eQAumc7*pJ-JLzu_5i+ws-p`l;#W={RwYx1>bPjozg&3TO{?DZ=FMC_ zovS@He6EFZcia`5Bq!GxDiMnQ`AX)V2(@H0()k=ktA(b??qjm~lzgMo`1s!Qy3fA9uF57Fbj+pw^l!iDlpxfg7?Z`MzDiFjK7Ch-r+1gHbUZ^!*-8gvR%`rt$Q66 z6@Ti|9u+JO8vM%3n0$&8QbSRIVz|4zyT&Kwi^ej8nmRTug%Q^Ch>WSyk*oLH>B`LN z=7b2uo4=(YUW8~S!|$6yF6Bv))x%!fHJ7J@eUhPYQEwca z_|B|0u4LPgOzF3pCJDECz;B+udkgh8E+L#qiTf|#N?Rk%g+%C!?qd>ac4ztDn_DMy zlHTeATijg*rAKJx==EuY;Ons9B`$XmTta<03M5qr^j+(oG zIJa0iUC?Y?&9*nwBqSun(+fpYo5QKT-wcFrv4P-Lc}f`pllB(>vOPNAV|mU`5vjXW zsnRQNo1^E;DaZh#6$WiqlOKy}Uk8=W<`X~@_Ua6)_0`leX&oe}YlG}5$K-O7w1>)x zu*c@76@tx%8|g0h&3Zl9Q<<0VdPv1YdJo?GrJ=M(G$|L%k}j;$-YO3A z72Et>H>MLgFD$*X*#S$;^|j%={qMuxaHme(-*btTUbQPf9%Wa_n$y)adi)d*E7ua} zjC>=F4zkCa({Kym;%ZD&rV>R!*J088GMI=b{#LOFFPoGa?S0FOu8%&3JQ%+{d@cdK zy%eEBp!n%<9oW69?tUaT*%6BrsvM0!S8av75n+{zs!;bnpsxZ@V(L8eBCwece65># zk!^%jRPY9a_nY2A<}&MUQOs*e<4?Q&o2~W?;j%xl=T^B(Z5ml2cWn|~M|+sH+fMeI zDBfg5@Ip~>JGb;JUFSeJS0v2APA<$tTY6M-U|?a{zJJE&v@9vwJ~c#f#01wwcVcPN z@tQkdlo6~X8P?EtDV{PUzw%d85g266v*m?y=eYI#o4_ z8q;0~2R|hX%2&yN6M|opoBBXsT}6Q>DG5w%c0Mz%X5bfgY%)OL&Cxn<{_D3ou93 zPRT+#(>2ZIm6JFd5Fm(3jn~ri)7%Y|EkX7bSdLQ!>?4 z%+-md`_iuWYwBndAXp-k#nLm7<90Rg^X ztXYbqR1!;7m-aUh<}|jnrEAx3n&;>Z7C{&j)Sa^#QaAyCCo9%hkSKpOOOB?2xvpTT zf|G}s5LI_e+c!3h*fpNf1D0jx1YfPn>lk_@$-h=F*}E{&T%*6CM}9k&xnmL5^F_-= z>nm*^H=3Gv*N>h7k`2?C_XO07eI%ZU?H*7T0kakPKN4Rj@D|q{#~i%{@Rbk#YPk=D z9bUp&gLL+^(+7u^s|KUeQiWONebi#wwrtzez|CzT&a}~ChK`IyW?pM9 zZ=M_bQ&v!d$(;_5fdJ*}jePEKprrpBOyQ->z%AHOZp)%(r@?N z1s2L0+Byx7eSp?}laSN(mMBDy!{ z&sg86&QH!poA{W&O8L$A&oNQY&j6FjHlg^i2+daI-^g!(&t*y6$7N3K_483F3f zNLfYd^FB;;8m(fZE;|?w(k32w-)4n3vBFH6{GToisx*J@mM<#DO=a(H5|*52ORe(t zQqMWEIjp#+Z)?j2A3iH786)?mm)Y`GSAs+q zg^RyNl^q)+k`qxFZqo4!^24`$x6fnaHhT-L7|?5krrg-9Jm}G-BKhiiQRO#~4N_TC z+3kJWcaWg(Uv2Ib#x3@L?t>lgfpXsTB(OI7($T*%PH#A5Co)O{02n{L{4anS1@zL# zI}RUVH^Qa4`3bMdpgZ(|?a{OjyQi6}ZFTJ$1rrbOAE0OULu1G3(b*sY%R{A-+DV~G ztI$dui5As~|9t%25Jg|P)#SIu!qgdpm^4oxcsouR@o|Xd&E`iwuQzekG0U*j{-N-J zB8?r-zFv1Vf~!jj0kyr$ZI%ZQxKi-6#gV{ne@;=p8_7F9%E+J;bl&cqZ!nB9Kc%Ncn)IyKht<@jqP(rId2aCrFn{Nr7Z)I-`ZH0QGQF8c;{ zVeU&4D1ha2Gesh^?@1DsCQH%cFUZBAvucor@uS>Z7MKp#67E!bH2JaqZee)w3NyPq! zx>agz`hrnYJjAcfUQOkE{yro*YQ28ib_rM|;QH6`jjt$W?V<e2%QgiRwSz;u0=xPKYDq?9yT*VCourH;`9}C z=5(C0HHWOwMc;#RBlGYy^@aL~LH4ZAvB`!p68{un2ZYIU`lUQ0#3Q#0SnOY#`8Tit ztOnHfzGOj}zLFR&Pg})e<4GdW>(J5m+r1cnekLJTzGoo8O33Q{M58dy=^an}phsnh zF=hlKD-(Cd%*dBay&m!al=?R*di--EHCIVb#}m$S52+6W$38=|IGRTR`QtoF#4)Ry zA2JFbuSJq?Jp(rwHJvEV*XfuO<(%GXxT1aI5=2am1Oaw^+CTF7`!t{RF2uG z3mxS18@2fJ^9jc3^p5dz24*l-^5mf`gW?c_J;uP`WLj<{slGP(JS4v?Ad3zoA{U5_ z%Om)>O>>or)?#S~6kY-RpZ2~oE~@Bj_slS~(j__4jUp)mBhrEh2oe$!lF}(L14u{+ z(jZ8OAYIZZjZ&hd!XVwpnH*}|*Zia=c7lCd z4muq#LYSK|4^9ZQ7r%bJmzr;G?-ZTh)X1^=*`{=h$n*y%~Mas>>v(jrl zwLLaE?seg>NK(@)hI};a8ou2c5}}Li`0ZxU!kcLwASFiKZnTBB9MP$C*KaG4!SQ6S zuj*;|k?CgfM}_XMPeN!Cme_CCO~10Uw(X1$weH#K=Q46Tk+=Dn>HNc^SmjR!FB)))ushCUBF`8awefam!zT;2OoPauL7+qI13(p6GyJzwj zpHI76UL8Cw$)I7^vyt8ahE_Gc$R!TqpBiz{9WlGBKI~k_h|dAl)z$B9rJa5}Qm5g+ z75A}4xAabo&2)CRV}4X(8j1SCKn;+>!@$z-_`>w1+>kTS9!e}lGPkQNvCCe=EQQog zt=AM*TLb+!FH&@rsxc}5^h3r?%I@qW!f{O5FemE^8qB-AlMDvQ*fn216ZWxsPKRy> ziwI$tAa(YqACye}f_5BGRGvW38!`bZP4U9E*}%%*m9l#c@}^Ac9~UPAH5V|*pG(LR zp1WdPf;2;rupb2ecSyrWYahM;sLy5WI=iWHa+|;jPQ0s*Oe5ieB=s_d-KTWNp}XF+ zs*$WW){eC`Vmw@ypscFspIc?Ec7-lIul@upWnL7vTy#46e_-Y?sgUKGlLVpSxVV44 zTct@*U(9w&kU6pZ7vCc2+@22}#{|6}rW47r>-}93>J>DHCk$ky+P(02q}3LHQWU>S zANEdtNf!C-dY$hm=R|4vK^o3>i4fARw3J)cIl-1bWp6?9qMEtZ`le#S=iwp2;VD@m zbLZkcsRQadiHrhGpS$U$g`LOER!^R$tbbAJ7q6?nA;9}k^XP+hK+?z0df%CdHB1j& zU7(L7XVdm&r5AutP41RANA|mWdA~+a^K;*7ol9f#%t*P!h^Z)Ij$9bLhmOsZnuUcg zn8E)71ydF|49_*)1;=w93Hpc(;~6R9WMr|Kk=gU25n(RY5woEV4J({HO$h-+&VRi% zBmqK>Lv3DkJS8#D-z_=FdyKd2^WPnt$aE$bHOyKwOP7vkl~bK7se;1D#Jmwx^Tga4 z465x}eP^KOW7|vF{4Vc;cC{0OsmK{w6-YPWM6=MoZgM(tZEw1|+6-NdV1@gxxs@2W$fL1QV#~%-p@zk=_g_~1WYu7n;M&s3N~iUKUVf` z(74LfZUk$v1$`i@AFU_yCXzHS3L;UWCkO#UmR}+0AfJBwZP8p8JT@v?$-2{=`_$1K zITeN(`OP>qEK)a50>GGa%a4pwJI^?QTpo@4SzboK3mW1#3UksvN#72U5_3_CQ+2@` zmX+J;b0eQ$S$bXg%-UMf?UbN2Jh_GVUUqdaC*LUK%f@*eBjg+X(uDHIXN3jK&fS77 z75(VEkGJq~?zzwZG_+<~Itl6|-!L#P^%9q6>2wrvbMO6?G-)_M9-3pnNHd31{A%Ia zf%GZjwfdAz(}@T7iE+J*pJ5|g|84@9I?#Dja%-a2WA5l(7!D*jgUIV|#zU)u#Kn03 z#f}l-%fxBO=aa?vI6tcoSSr7e4)X)Ufhl>4Czp`Q5Nc$xm896C!95O9kIO3e{L!Z| z2_@vsgMOD}dwG$b3fB{?9V2zKfM&EXFs|7 z-DswdhFppdXX~gHUH`y-*I`b5S$Ea^iEiDS{ss|<6?7=ox-!JEx5X~=CrMj%xDD-{ ze6@s)&Dmm;H=nON{pfHo7cK!LhAvztQ#n2Q{Y3dKz7PfYx}A9MFAg@+l0}kBgpM2S zKVi}qSSBIp5O#Ouu{xq- z(AMZt)@WSxMOOHADKp>5-tkmHk2%M~ij}DimUSEVle4%n>f172@3wfk4bb$|Va+^4 zrah%B>)Fd=x#@k|{eym0@|p=g1m$~%4Jp;O{{DjRjd(_1DV+DWE%TcDS~#nN;ZGm- zd3Vlz8F8x%g74SCcQyH--bu4GB1X|_nfV1_|*j`cj=F8GfsBi zZtkXGSwPN?gwi>x^sKq~U*O6ViltP_m|U8q%eV*5CWSdkSWA=`9f6;y@IdFM^>?c( zxoJJ#vh`V&bCfgbFTp~ao`llfb%8jcwo*8xUC%Ov@j4s=AD z#gpAE^r^eQFQeuA>KEKfcpW)i!foQ{TM+$Uf2HKgJ!=G`XTTjJsK?4e?r*yO@!P9F zvi`!BpCV;0KXsRQM^UqhwsZV@H?L_KwCnzYElZMQtpP+{h z#?BdYYbS%!i4NGq@9^PKJvz)(4;(PAcgc%){}`{T!Eigu@f&wH3B|>41sMnvaK{lh z+d=pT>8ms-M1xE@Wqcxma&b(v%^!Ev zch)kH-$0=vVDisKX0DNtXS_*?S9%^E?;aaZ0*HQACTu(k`O60(qE&0^j2JKAW;Ef3 zL1`#%Ex5gRIuzjl>YVKx>j`=MJoi&vt}CGHzhSokGn|B=&P!=4zWj~{gJ7<#SkkB) z%;pXHxPimEbf3I z-3fcYc&2}&+JRA!9)pn_G&l$FngB5f2r)wzOZ=;$dkny&tjf`SZi%br2r)2F7t=qg zH1SVpFjtom^+{Bkhy>df9@CG_1gkpG^th5d;1d>VYo{I^2!b2_9}HbP+K&}Hn^HnT zFiA(f*D4*i`dcAuLoL^G!JWjJccyWN9+ks2f4H7?Xn+EdgP%>vz7P#TV5ekZA%5#A z#od+7BgCg^347ZIq>-lDo*v~7SxPJ=HPr{?5O!qS+#oXD>t{K4Vj4_D=Xvxq*)Nm{ z$THl+@7$)*S}AV43|QVG32@3`=ET-esQubGtA~?s>5?*Ia!hya0N?Jj`p0mxm=rKB znNouPM_S3WJI!n`;bR>_>V;38eY0hUIEeHGgJ^1_fu$d~hIHj{F7MGBJPcwMxDk#E zl2w7&zJfoQHA;lJPqr>Ov}Gb8+siK_%v4m{8Z{VHu0w0URcN}8uo9uAfWTm!V4U4_ z4j~Fo)tk_oK3}@eu6cckkp$r}ej^WLkaJ2#2q(BnC|Te`Q^;cmAVVU!8@4GEbQNGP zjGS$JNTcqYzUS+uFA9|P#8sAnNDY+f0P0Mp_sKneP*kK)!LB60BLVnrN-~1LFakN$(TS&r`|Zd}+738LF_@E`YnPrl03o-;`;xJ$^nx#FLIw?y{hoYM8T?bX{a0M8R&; zKw5@0?!7Z*GD`oHQ-$MrIW6p%pEpsrOKmLPOMUM0ajLkaGU9Fi(dE~=Mp$ewY)!tk zfI~5?h-YzYcadPXu*mzb%xu+}mkCn!;c#OZ$BR(1Ucw;&Va%mMo9hNp1#jfa&RYH$ zJ}msoW3Ut1N_aDwD<*qkH-TM;pZOZk>D*tLoy_N&?3)CtD}eGCZrhem7NY5c3r z0zg^GKxj`5!7GcRpm-8Q56i1yqSgMfTs48PDw2uJ|6nJ(s42UWn7^byhUM zM`-YnehZ*8z|tRpd{+sm(iPHP12G#W)D+VD>{V(&m4fc}&=ubp0^tCyrs=3{#JC)B z>OZ_$g3}hjr`Brn-}hahL}zi|IbtRurZNY{fm{7L+7>OvnNn9>XCTxxdM_w=YjB*- z1|4P9svw^!QCIE-^b&8$A5$$vADu5SuZ&{0h?Q;eQMBv}V@PF_A0=OYj}b_KByynB ziwQ@tW^wqlCv;tK^EKmaw`W{9$!gCt1y4k)JAo8x;N%hZP}1|wmKmKlC4Yw|Rkna_ z)_kgqsr_G~ZqDR5S5*KIwYU6&*U&~a5dKDb7WlmrA!YlK8jT-#E0`YZvH&PEN9L`C z#@3S&$D-!P_jo*U)=7QKMV7jE^2goXUMeEToCjo}3JSRPtMNOBmN5#kW%n4ffBYb# z{cw$FlQLqx593NOK$+={X~akQ?6L+)X+sE+kPCL_T$kS2@`FEU%SZfKOPjD&q9He(`T!yWceCd^KBiEASw>XA z3Yv((D->0feI5S5ZgcPKLVUY{quuSR(oq^t+nbroh^gqp@1D#|%;eM1KyEq$Jh}r% z!tComLCMO408Ho^==}o^t;6#KTh^jInflq^@jFYe08YmNkvru(JmKrvzD(jt|n3K)xhhelz zMFobytJ^dFOB;qYD1Xk2=_wzQ87@k+IpE?teBDX-Mj8ZiLb#0)>pHpSpai-aEe*kw zelQ=}cVSS)A{eKQxKI2#QRR@0+c5zqYDhL9?Qsn5#|$#;`9%sA_;Wuaj&lD|fIT;% z=!t9|=Pw20@p&$zd-?~tCf;Lx9#Gefy4L;vBsU|Fw_>Nk=WF^`E+`e%d}VE|V4_;y zqtD?Ppz&6cZ=XF0*^v%15KwfyoXO-w8gp6bV5~-~fqhX7X8NSvCs{*ZKHtA_%bT%P z2_*$lQ1Fgy6@`O}?|F!-Tin42V>HoNR|s>1qv;{jV;M^Uwl+6c)jBc z`A8)RP3_X6S7&hJHJ=9&CQcL(W1pRbi{rmCO=THUfN;pglato!zES20&R5>`+Ug%Y zFHQqY>Uw&5NYZ!CH$zuT>Za*=ErORu3WwHK5|V`2Emr3BQDcd;GIITc&*q9)UM@c6w-Lp8`1#S1kAGsN?;+?R7!)5o5Y&F+@ix24wP&u> z=`pnh?$rY#Mkb(rzsWx(mD6ODV)D+>J+EjlzS2Asnkn;aT=;{Id9v@>cy+i$BL#7H zZbilJ4eFiFk8qVFLaPBX9_%MmGOr9ohyXySI;xU^vp>7Gzm>0wEa>}L)7r50RBBmV zE)_hx>eqiux#b&)>M=gU9x?;$Zz6=Wqc1L7xLR-P zd27FW;&YE`>wF~Rl8T9+xik-iWFk&K@ki8el#E@HMJdYKq#y`D;1B?LLpVP_e_r9T zlOnG24926ApMq4ScpZ#wDh4 zJG*ER5VVZ8$DYbT-clJ8Q%WRFL#c8iFPLqs&|VyV%0^qIG>TO#nitZ#+S;yzTY1k_ z?SbnF-uQV}QI|Zc=3*s%4>NWUMh^55{@Ve=7PHSeDXdj<1ev&K3B~~o!Rh&oyUf#h z0<3jzQe<`_FTWXGkC8F}V4v~DnlD}agi{!AqIe%)aUI!np-GQP`wcw?tf%hC;RR73 zh}$x~((365V6q+Pa7i47dT@C@KSXFI&#*L&8gax(fe=Up>dbUB+tSV@FslIfF)lCG zPEaK<7ZI zi65lHM={;>+yis6JWAC-+Ut&V%5&1J!Y>O&CQ*$!5Et->2tdvVj(u%^m%#=R3yv&v zY8>s5p7`Xboh5#w2BD`1LOBNzEwL9k!&i#qh8P@(Q1|s3-L_l#L9cX2@kJ1LLchh$ zyd?C<1DY2Dt}jMz81^2CCLANwH6#4u>pbw~ajn!lF#Efj&Z zyYhJ87q4X2&|Vcyx;GErxxVVC%X5%3O3605ZNqL_Lg-zXEP@X&TeOY2BZdf+C>GJi zVoi8_AwKY|>0Cc9JLWe8>IA;;*;~>Wjy0V&KVdzfc7g4d#1rdZNfeKoSz6o255zpJ z_c~F{5sn$~2J5F;IjFpy8f`iimCp0Kov8c>F^1w$z6rZ};jPYfgrm!JFIuFmGMpC& zg;l~on_(GELYS`ERd{Sfu({67Iu3n>EOBYS=}i_jrQ@Igch|N1ZA*Kde*PHaU>;;N zUL&&F^h7f2`BS{glKszwXiN3H`DbfI<+qSX3Gtt3??xM2EuDQ5TO<1))HRyVPaALk!3^>| zOnTM2{y}`Rm52ZzZNl%wE*UV@;xuKZV5w&>?<8fL+GQX$2^*_K9>`@4^|u~x2>DN8 zbkcAk^#rCIi28Nhm)OmT-JcYoR`|aV+{7vkyx_E;lXICMp8R(%N1-^tb=M0dm%~;D zFN7dif4-8o`pRIzm3)Xz|AVo;#_kR5_IL)?@39oJzG65AdrSm1XiBI^0D)ka9RLLY zGj6{b4_$c>ut$Du3O+?78OW@1C4mbFaD^u|XA1nsE9+tNIymUCOLQf{JeDs=(C7Y@ z_re+y$S(C)bGI}Hl7^@*8XQgri9>x5=~!|{TrSvCIYPg{}u3mSU@<37F=Ee z>T~#s=bGDD0e84TQSqm+Yv~2c{2F8WSx$WhxkJNUi_T|9V}8@D&Sd745Th|YcA6TM zhGw(wx20ZYee*k8`!*!o=f!uu(b*5WJrh{dS!Z3# z{JpCFo>N$~CNQ!-=C&XGNWzNR^Bl$}5Pk5S+A9S$K+yI#|= zx)7}-LmwVKLXM9`ulepL+Sh_3$*%&km-&(hIFRuNpiJyP|g`cgArU zuM9s3hUW^L7R~Mz?_|mzzs~MzmDr1PeSd1)UZDr>i7?A(^GOl=sYI6HzZqr?mn_SJ zvLU$mpp^=eD~~~zb)pS$t4(k1yGXRoH>kKSGOkERJ33>7MBOyfsml$eqYhI&e3vXk zZ-oDwK3^L@lQvF6M-&NnGFkY-mZ4Qz&-u%Td1e#zJm{9|Z*9tvYp32a=@+Sw_+>mO zu%p4@AcZ{%qHI;BwM?oI&oQOO?ZmHnX?sHuoZsf|RXM28565S3&VHbSns5F$dv>dw ziW3P5DoF8f&_!Uy+cWEx>0+kuG+1*)p=_WYcY$Y;turQDM+;AM1@(W}8|V`#M}TaA zKfYSX`~VY6aRQXPwF}Stt6pQzxm)DQoN?4V0xdxw66&Y<(vvyB10Bl9D+5!Wd1^Rm zyC;WV`GDqXB{%})S!L1;RO(iWbx-p6Q5LH05T`a%(J8U>*NJ=0!vUXSu9)(b)#2nC zYU4CoV=6`jD)FH>rd3(C;$>&N8xaSNVpcdi*xt}LpcQ)do3(Yu$niV46xDDiz+U8g zz)J?&)$rX13{@yBvpv~1dw{iwOaJ1pGPBzFsL@~?Q_A0|{qG-&7|k);59Ra2ul({o zbvU)gxl8v{nZ};mO(T9rMt}jmcOR*ya+#udu2Fvfo;>#XfY1elYuqNRAAD<;Qc|fo zJZfXWLD7Du-xOugTUreA53X1oEvN(Jg*7YO``21~isYo8=<&lWZd*_9YdB)0RMwq9 zpgiN%QYyA>2BYx!l8bl^ZlN=b>n%E`zxTa66clr-vFURRzlO-|>OPquDjb;aa++bcB^Y7`+3J;_Z0hY{rW%n+lHn3> z=kBj$%;kF5l4uG$h!o> z>A%0x4NnhCKQebjMpn(HaCW=a9i=CHzq@6Z_`Bcg!^9YW-OPGfQ_O64od@&Z}@ST4gw<^=STaC87*|~{#{J0w&racDEjy_#G_T+->Xl0^=RRG|1q`} z0>K@#baEjZUDhHHN!h55f}+L9R%Cq=F4`>X3$=)pNx(|h@R%eWzjW#{8W=ZVfH=P> z*wXmiu3c6$L~R7VOhXAik#k3!2bi=nw0_PfWD%vx1gr^aN>gg{TeeBRxhwmIfOV?j zk4=cn`4d@chIDp~%14NP!yGQ`^J*ROJRUG&CCSV}yj#-HD1A0zH=gz)l;API2p!qq zkbV1SFWkIewXX9u4TM=tzvqV zizyQw6)wstw)z(pASY!8wigI6lc`yUFu z7sQq?jqo~-iu!hEj}?DKk!u2BODeM5Zz-^fX<$WroL5coPYyRoK{g{ioZgW}LJ@cG z>oUDl?8R!`h&=g`RS`d16R-^o{o;BSDeya)8+h#`s0e}AvAqGHOk{feG`20t-O^gc zr_Q9eriUS184Uj6S`JEJc%GFu`B8zbOtkOP)-^u6iD<$)4)p(Me4FU=+)7I0BvR~s zL;I!k^kH4!q62K6gCY|ktKg~WS#0cUV0i3xB?yfZ?a>(N3D0l8%M+Iy8^11%IN!Rj zgX&62xx6#==Af2tmX{o>GBRal)B`R;b+O`b&}!fyV`(O^O~FqN5;$GmgTk|VU+DZR zZi5SL9LRyK20#f39|PUm&Vd7OQ z0(N!;BxcB>s_0+Q3qk}4eF5i=HG$XQzM)99*QLHHLWB??k%J!Aa6r2A7yuU`7uR3( zuZYIw2AW_Gv8^C53Qz&c)|L7?|B6ijE-J|sR5myQLJk!9|1vp*#Dsy(^H{8Tp%8{p zU)paRJV368LDCOy$t#gOVAaD4Qqp;2#Gow=_$Us()-=14{3W5asAF;Q&(kb`Y~b@| z%KNX}x35|x!cOx&bMi`K*FvBOiG{9Yjo|;?WZ%b^mRO)ZR-NE!xBvO#T5Dgn1kDhx z=9S=CZKk)5_uecGu+VnJMLWabrj&HoPtR1fAK;QvU^Qt0-7Kz?oveow#}$F|ht>vl zKa#~PSc{xXWD;jzNd*lUc3S$|Yc=4<5k?_NhHfnruqP64Z9Y^nKII)+xo2aP*HawgI2-Y&D@;+%5T{Vpa)Jce^{;^ zX~_5-MwGO}bitL>FO@S5{4WkqN@)N9 literal 0 HcmV?d00001 diff --git a/frontend/dist/index.html b/frontend/dist/index.html new file mode 100644 index 0000000..e277321 --- /dev/null +++ b/frontend/dist/index.html @@ -0,0 +1,19 @@ + + + + + + Chat IA Offline - Vue App + + + + + + + + + + +
+ + diff --git a/frontend/dist/robots.txt b/frontend/dist/robots.txt new file mode 100644 index 0000000..1f53798 --- /dev/null +++ b/frontend/dist/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Disallow: / diff --git a/frontend/dist/site.webmanifest b/frontend/dist/site.webmanifest new file mode 100644 index 0000000..ccf313a --- /dev/null +++ b/frontend/dist/site.webmanifest @@ -0,0 +1,21 @@ +{ + "name": "MyWebSite", + "short_name": "MySite", + "icons": [ + { + "src": "/web-app-manifest-192x192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "/web-app-manifest-512x512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable" + } + ], + "theme_color": "#ffffff", + "background_color": "#ffffff", + "display": "standalone" +} \ No newline at end of file diff --git a/frontend/index.html b/frontend/index.html new file mode 100644 index 0000000..05a4e60 --- /dev/null +++ b/frontend/index.html @@ -0,0 +1,18 @@ + + + + + + Chat IA Offline - Vue App + + + + + + + + +
+ + + diff --git a/frontend/package-lock.json b/frontend/package-lock.json new file mode 100644 index 0000000..ad40dee --- /dev/null +++ b/frontend/package-lock.json @@ -0,0 +1,1132 @@ +{ + "name": "chat-ia-vue", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "chat-ia-vue", + "version": "1.0.0", + "dependencies": { + "vue": "^3.4.0" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^5.0.0", + "vite": "^5.0.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.0.tgz", + "integrity": "sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.28.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.1.tgz", + "integrity": "sha512-x0LvFTekgSX+83TI28Y9wYPUfzrnl2aT5+5QLnO6v7mSJYtEEevuDRN0F0uSHRk1G1IWZC43o00Y0xDDrpBGPQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz", + "integrity": "sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==", + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.45.1.tgz", + "integrity": "sha512-NEySIFvMY0ZQO+utJkgoMiCAjMrGvnbDLHvcmlA33UXJpYBCvlBEbMMtV837uCkS+plG2umfhn0T5mMAxGrlRA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.45.1.tgz", + "integrity": "sha512-ujQ+sMXJkg4LRJaYreaVx7Z/VMgBBd89wGS4qMrdtfUFZ+TSY5Rs9asgjitLwzeIbhwdEhyj29zhst3L1lKsRQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.45.1.tgz", + "integrity": "sha512-FSncqHvqTm3lC6Y13xncsdOYfxGSLnP+73k815EfNmpewPs+EyM49haPS105Rh4aF5mJKywk9X0ogzLXZzN9lA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.45.1.tgz", + "integrity": "sha512-2/vVn/husP5XI7Fsf/RlhDaQJ7x9zjvC81anIVbr4b/f0xtSmXQTFcGIQ/B1cXIYM6h2nAhJkdMHTnD7OtQ9Og==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.45.1.tgz", + "integrity": "sha512-4g1kaDxQItZsrkVTdYQ0bxu4ZIQ32cotoQbmsAnW1jAE4XCMbcBPDirX5fyUzdhVCKgPcrwWuucI8yrVRBw2+g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.45.1.tgz", + "integrity": "sha512-L/6JsfiL74i3uK1Ti2ZFSNsp5NMiM4/kbbGEcOCps99aZx3g8SJMO1/9Y0n/qKlWZfn6sScf98lEOUe2mBvW9A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.45.1.tgz", + "integrity": "sha512-RkdOTu2jK7brlu+ZwjMIZfdV2sSYHK2qR08FUWcIoqJC2eywHbXr0L8T/pONFwkGukQqERDheaGTeedG+rra6Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.45.1.tgz", + "integrity": "sha512-3kJ8pgfBt6CIIr1o+HQA7OZ9mp/zDk3ctekGl9qn/pRBgrRgfwiffaUmqioUGN9hv0OHv2gxmvdKOkARCtRb8Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.45.1.tgz", + "integrity": "sha512-k3dOKCfIVixWjG7OXTCOmDfJj3vbdhN0QYEqB+OuGArOChek22hn7Uy5A/gTDNAcCy5v2YcXRJ/Qcnm4/ma1xw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.45.1.tgz", + "integrity": "sha512-PmI1vxQetnM58ZmDFl9/Uk2lpBBby6B6rF4muJc65uZbxCs0EA7hhKCk2PKlmZKuyVSHAyIw3+/SiuMLxKxWog==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.45.1.tgz", + "integrity": "sha512-9UmI0VzGmNJ28ibHW2GpE2nF0PBQqsyiS4kcJ5vK+wuwGnV5RlqdczVocDSUfGX/Na7/XINRVoUgJyFIgipoRg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.45.1.tgz", + "integrity": "sha512-7nR2KY8oEOUTD3pBAxIBBbZr0U7U+R9HDTPNy+5nVVHDXI4ikYniH1oxQz9VoB5PbBU1CZuDGHkLJkd3zLMWsg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.45.1.tgz", + "integrity": "sha512-nlcl3jgUultKROfZijKjRQLUu9Ma0PeNv/VFHkZiKbXTBQXhpytS8CIj5/NfBeECZtY2FJQubm6ltIxm/ftxpw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.45.1.tgz", + "integrity": "sha512-HJV65KLS51rW0VY6rvZkiieiBnurSzpzore1bMKAhunQiECPuxsROvyeaot/tcK3A3aGnI+qTHqisrpSgQrpgA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.45.1.tgz", + "integrity": "sha512-NITBOCv3Qqc6hhwFt7jLV78VEO/il4YcBzoMGGNxznLgRQf43VQDae0aAzKiBeEPIxnDrACiMgbqjuihx08OOw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.45.1.tgz", + "integrity": "sha512-+E/lYl6qu1zqgPEnTrs4WysQtvc/Sh4fC2nByfFExqgYrqkKWp1tWIbe+ELhixnenSpBbLXNi6vbEEJ8M7fiHw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.45.1.tgz", + "integrity": "sha512-a6WIAp89p3kpNoYStITT9RbTbTnqarU7D8N8F2CV+4Cl9fwCOZraLVuVFvlpsW0SbIiYtEnhCZBPLoNdRkjQFw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.45.1.tgz", + "integrity": "sha512-T5Bi/NS3fQiJeYdGvRpTAP5P02kqSOpqiopwhj0uaXB6nzs5JVi2XMJb18JUSKhCOX8+UE1UKQufyD6Or48dJg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.45.1.tgz", + "integrity": "sha512-lxV2Pako3ujjuUe9jiU3/s7KSrDfH6IgTSQOnDWr9aJ92YsFd7EurmClK0ly/t8dzMkDtd04g60WX6yl0sGfdw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.45.1.tgz", + "integrity": "sha512-M/fKi4sasCdM8i0aWJjCSFm2qEnYRR8AMLG2kxp6wD13+tMGA4Z1tVAuHkNRjud5SW2EM3naLuK35w9twvf6aA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vitejs/plugin-vue": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.2.4.tgz", + "integrity": "sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.17", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.17.tgz", + "integrity": "sha512-Xe+AittLbAyV0pabcN7cP7/BenRBNcteM4aSDCtRvGw0d9OL+HG1u/XHLY/kt1q4fyMeZYXyIYrsHuPSiDPosA==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.27.5", + "@vue/shared": "3.5.17", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.17", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.17.tgz", + "integrity": "sha512-+2UgfLKoaNLhgfhV5Ihnk6wB4ljyW1/7wUIog2puUqajiC29Lp5R/IKDdkebh9jTbTogTbsgB+OY9cEWzG95JQ==", + "license": "MIT", + "dependencies": { + "@vue/compiler-core": "3.5.17", + "@vue/shared": "3.5.17" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.17", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.17.tgz", + "integrity": "sha512-rQQxbRJMgTqwRugtjw0cnyQv9cP4/4BxWfTdRBkqsTfLOHWykLzbOc3C4GGzAmdMDxhzU/1Ija5bTjMVrddqww==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.27.5", + "@vue/compiler-core": "3.5.17", + "@vue/compiler-dom": "3.5.17", + "@vue/compiler-ssr": "3.5.17", + "@vue/shared": "3.5.17", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.17", + "postcss": "^8.5.6", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.17", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.17.tgz", + "integrity": "sha512-hkDbA0Q20ZzGgpj5uZjb9rBzQtIHLS78mMilwrlpWk2Ep37DYntUz0PonQ6kr113vfOEdM+zTBuJDaceNIW0tQ==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.17", + "@vue/shared": "3.5.17" + } + }, + "node_modules/@vue/reactivity": { + "version": "3.5.17", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.17.tgz", + "integrity": "sha512-l/rmw2STIscWi7SNJp708FK4Kofs97zc/5aEPQh4bOsReD/8ICuBcEmS7KGwDj5ODQLYWVN2lNibKJL1z5b+Lw==", + "license": "MIT", + "dependencies": { + "@vue/shared": "3.5.17" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.5.17", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.17.tgz", + "integrity": "sha512-QQLXa20dHg1R0ri4bjKeGFKEkJA7MMBxrKo2G+gJikmumRS7PTD4BOU9FKrDQWMKowz7frJJGqBffYMgQYS96Q==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.17", + "@vue/shared": "3.5.17" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.5.17", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.17.tgz", + "integrity": "sha512-8El0M60TcwZ1QMz4/os2MdlQECgGoVHPuLnQBU3m9h3gdNRW9xRmI8iLS4t/22OQlOE6aJvNNlBiCzPHur4H9g==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.17", + "@vue/runtime-core": "3.5.17", + "@vue/shared": "3.5.17", + "csstype": "^3.1.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.5.17", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.17.tgz", + "integrity": "sha512-BOHhm8HalujY6lmC3DbqF6uXN/K00uWiEeF22LfEsm9Q93XeJ/plHTepGwf6tqFcF7GA5oGSSAAUock3VvzaCA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-ssr": "3.5.17", + "@vue/shared": "3.5.17" + }, + "peerDependencies": { + "vue": "3.5.17" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.17", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.17.tgz", + "integrity": "sha512-CabR+UN630VnsJO/jHWYBC1YVXyMq94KKp6iF5MQgZJs5I8cmjw6oVMO1oDbtBkENSHSSn/UadWlW/OAgdmKrg==", + "license": "MIT" + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "license": "MIT" + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/magic-string": { + "version": "0.30.17", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/rollup": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.45.1.tgz", + "integrity": "sha512-4iya7Jb76fVpQyLoiVpzUrsjQ12r3dM7fIVz+4NwoYvZOShknRmiv+iu9CClZml5ZLGb0XMcYLutK6w9tgxHDw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.45.1", + "@rollup/rollup-android-arm64": "4.45.1", + "@rollup/rollup-darwin-arm64": "4.45.1", + "@rollup/rollup-darwin-x64": "4.45.1", + "@rollup/rollup-freebsd-arm64": "4.45.1", + "@rollup/rollup-freebsd-x64": "4.45.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.45.1", + "@rollup/rollup-linux-arm-musleabihf": "4.45.1", + "@rollup/rollup-linux-arm64-gnu": "4.45.1", + "@rollup/rollup-linux-arm64-musl": "4.45.1", + "@rollup/rollup-linux-loongarch64-gnu": "4.45.1", + "@rollup/rollup-linux-powerpc64le-gnu": "4.45.1", + "@rollup/rollup-linux-riscv64-gnu": "4.45.1", + "@rollup/rollup-linux-riscv64-musl": "4.45.1", + "@rollup/rollup-linux-s390x-gnu": "4.45.1", + "@rollup/rollup-linux-x64-gnu": "4.45.1", + "@rollup/rollup-linux-x64-musl": "4.45.1", + "@rollup/rollup-win32-arm64-msvc": "4.45.1", + "@rollup/rollup-win32-ia32-msvc": "4.45.1", + "@rollup/rollup-win32-x64-msvc": "4.45.1", + "fsevents": "~2.3.2" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/vite": { + "version": "5.4.19", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.19.tgz", + "integrity": "sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vue": { + "version": "3.5.17", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.17.tgz", + "integrity": "sha512-LbHV3xPN9BeljML+Xctq4lbz2lVHCR6DtbpTf5XIO6gugpXUN49j2QQPcMj086r9+AkJ0FfUT8xjulKKBkkr9g==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.17", + "@vue/compiler-sfc": "3.5.17", + "@vue/runtime-dom": "3.5.17", + "@vue/server-renderer": "3.5.17", + "@vue/shared": "3.5.17" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + } + } +} diff --git a/frontend/package.json b/frontend/package.json new file mode 100644 index 0000000..003f6cf --- /dev/null +++ b/frontend/package.json @@ -0,0 +1,17 @@ +{ + "name": "chat-ia-vue", + "version": "1.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview" + }, + "dependencies": { + "vue": "^3.4.0" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^5.0.0", + "vite": "^5.0.0" + } +} \ No newline at end of file diff --git a/frontend/public/favicon/apple-touch-icon.png b/frontend/public/favicon/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..92165950f50a4ea9dc21ba89393d87b4972b1b34 GIT binary patch literal 7146 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 literal 0 HcmV?d00001 diff --git a/frontend/public/favicon/favicon-96x96.png b/frontend/public/favicon/favicon-96x96.png new file mode 100644 index 0000000000000000000000000000000000000000..c36543c71564b9f87114ad0b38db53fd50b49b1a GIT binary patch literal 3236 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 WPyJ`EXXtqV0000LLm zwTW->NJ|KTLQMq%4~$w9fkMN|q@p!#?N1=>h6Uw%zX#vTd6${t&b*oTie-|+IrrRi z&iCCrGxxoBXHcq4m8-pbmC?28>@KCAS4!2^uC=R_x@vq?Mx(!JyHcGdV2_D0De4U) z@JBgD#;0!%jZNxO%E-j@^(fqtQ%c?v`%&dTb>%Nz3XyXUJL>#vt;$`AAjN}g6wSLlZn}z@QZ&%*(l2gae zXczga^Msb-RSUkj=X*FawZeOa(r9JuoLilZ;RP_Db~sXT#?{Zexr4-{@5XkQcPw$F^6D zbw3U&YP{jm$;HYY^)XRqyD=0#q4^+wx7lrj`#1&ii=w2q&pN$-fZp%)LDH z!DmTv^{Na0H_|VBL;N6}eMr`B<{3c&I=lI0{^$<#J`uF;DAQhgUa1Nh$M`k9q|8yH z6!jw7l}fp4=8bgOvq->Xr7@Hv5-q zvTfohb0B_Alb4@n9C_nCty&{5843HI7WX^i)`p7H5jQUDIf0v?u)jAqir;Mbm?tx) zxsAr<+CMUJ`L65S2gPxZ&P#Jo8ak*(A$?xB^u>)ooSBU6-G(UdEby9*OS{fH=aabS z%^q^lo?%emfXQVYo}VBd#D?azjrz=$+I|i#`)DKA#z&tY2S0r2r)}?H(+^z?e2Hh< z&2KhmIV3rL8&kHE#OJ(AJlN776(83H>+<@;v%^o0w&$L)04Ke;E!SpzdSP4cIUn%x z?nZC#$hzy#@7lBd#D~UtB#w&)zC8E12kiPTZE_eLpYr4&=UnmvHgb6HxnOz45Fh&D z(62cT#I-dz02{H$DHI=^BnQ~2A0#q9>b%=?A!~-Q?K*|FU9k(r*~)jDfrZrWmlsoY zuee3W8+AMN%)9(OeJAy7bG+4+V(qwe7=CeK+I3txc>VT|;(PFIW!~OjX#C7OTHpFT zyH}}iUefx;&#N|kLkDvUyloHU^T0NT+2TN)#DNVT_9?22)EaTwr{HI*t2Slx4nxc7 ze{WFV<$q-4_l}_N_IV^sgYU@8_v`TvJ^gmPY)2hCx#Dva-y!%rfxl(gMjtTPCbpf= zwypj0Q3tWahmG%0%%?5$i7hq12Qbgp=m&q9W816&EWT3%n|?dqtIb$jd&MT{!!y+| z&r-P_ZKS<8bB*Ec4Go`tuy#-l*7DN!nw2sCtp-_cFnhXYUw6JjsgAN$fgf%7muj%b MYSz#8RUiBQ1HaspF literal 0 HcmV?d00001 diff --git a/frontend/public/favicon/favicon.svg b/frontend/public/favicon/favicon.svg new file mode 100644 index 0000000..558d58f --- /dev/null +++ b/frontend/public/favicon/favicon.svg @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/frontend/public/favicon/web-app-manifest-192x192.png b/frontend/public/favicon/web-app-manifest-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..00d737d0d1949eb9c2aac88d3d150ed900972b51 GIT binary patch literal 8018 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 literal 0 HcmV?d00001 diff --git a/frontend/public/favicon/web-app-manifest-512x512.png b/frontend/public/favicon/web-app-manifest-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..76db085670b4228f9458b928f77b53d56091a9fc GIT binary patch literal 27378 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 literal 0 HcmV?d00001 diff --git a/frontend/public/robots.txt b/frontend/public/robots.txt new file mode 100644 index 0000000..1f53798 --- /dev/null +++ b/frontend/public/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Disallow: / diff --git a/frontend/public/site.webmanifest b/frontend/public/site.webmanifest new file mode 100644 index 0000000..ccf313a --- /dev/null +++ b/frontend/public/site.webmanifest @@ -0,0 +1,21 @@ +{ + "name": "MyWebSite", + "short_name": "MySite", + "icons": [ + { + "src": "/web-app-manifest-192x192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "/web-app-manifest-512x512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable" + } + ], + "theme_color": "#ffffff", + "background_color": "#ffffff", + "display": "standalone" +} \ No newline at end of file diff --git a/frontend/src/App.vue b/frontend/src/App.vue new file mode 100644 index 0000000..351f186 --- /dev/null +++ b/frontend/src/App.vue @@ -0,0 +1,16 @@ + + + + + diff --git a/frontend/src/assets/styles.css b/frontend/src/assets/styles.css new file mode 100644 index 0000000..731903f --- /dev/null +++ b/frontend/src/assets/styles.css @@ -0,0 +1,36 @@ +/* Base y fuente */ +html, +body { + margin: 0; + padding: 0; + height: 100%; + background: #121217; + color: #e0e4e8; + font-family: "Segoe UI Variable", "Segoe UI", Tahoma, Geneva, Verdana, sans-serif; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +body { + margin: 0; + padding: 0; + height: 100vh; + background-color: #121217; +} + +/* Responsive */ +@media (max-width: 768px) { + .layout-container { + flex-direction: column; + } + + .sidebar { + width: 100% !important; + border-right: none; + border-bottom: 1px solid #2c2e34; + } + + .main-content { + width: 100% !important; + } +} diff --git a/frontend/src/components/ChatForm.vue b/frontend/src/components/ChatForm.vue new file mode 100644 index 0000000..2dfe56f --- /dev/null +++ b/frontend/src/components/ChatForm.vue @@ -0,0 +1,116 @@ + + + + + diff --git a/frontend/src/components/ChatLayout.vue b/frontend/src/components/ChatLayout.vue new file mode 100644 index 0000000..e778757 --- /dev/null +++ b/frontend/src/components/ChatLayout.vue @@ -0,0 +1,145 @@ + + + + + diff --git a/frontend/src/components/ChatMain.vue b/frontend/src/components/ChatMain.vue new file mode 100644 index 0000000..8b7c320 --- /dev/null +++ b/frontend/src/components/ChatMain.vue @@ -0,0 +1,56 @@ + + + + + diff --git a/frontend/src/components/ChatMessages.vue b/frontend/src/components/ChatMessages.vue new file mode 100644 index 0000000..78684a8 --- /dev/null +++ b/frontend/src/components/ChatMessages.vue @@ -0,0 +1,143 @@ + + + + + diff --git a/frontend/src/components/ChatSidebar.vue b/frontend/src/components/ChatSidebar.vue new file mode 100644 index 0000000..1106762 --- /dev/null +++ b/frontend/src/components/ChatSidebar.vue @@ -0,0 +1,95 @@ + + + + + diff --git a/frontend/src/main.ts b/frontend/src/main.ts new file mode 100644 index 0000000..a81cf37 --- /dev/null +++ b/frontend/src/main.ts @@ -0,0 +1,5 @@ +import { createApp } from "vue" +import App from "./App.vue" +import "./assets/styles.css" + +createApp(App).mount("#app") diff --git a/frontend/src/services/chatService.js b/frontend/src/services/chatService.js new file mode 100644 index 0000000..d9a77b6 --- /dev/null +++ b/frontend/src/services/chatService.js @@ -0,0 +1,63 @@ +class ChatService { + async getChats() { + try { + const response = await fetch("/api/v1/chats", { method: "GET" }) + if (!response.ok) { + throw new Error(`HTTP error! status: ${response.status}`) + } + return await response.json() + } catch (error) { + console.error("Error fetching chats:", error) + throw error + } + } + + async createChat() { + try { + const response = await fetch("/api/v1/chats", { + method: "POST", + }) + if (!response.ok) { + throw new Error(`HTTP error! status: ${response.status}`) + } + return await response.text() + } catch (error) { + console.error("Error creating chat:", error) + throw error + } + } + + async getChatMessages(chatId) { + try { + const response = await fetch(`/api/v1/chats/${chatId}`) + if (!response.ok) { + throw new Error(`HTTP error! status: ${response.status}`) + } + return await response.json() + } catch (error) { + console.error("Error fetching messages:", error) + throw error + } + } + + async sendMessage(chatId, prompt) { + try { + const response = await fetch(`/api/v1/chats/${chatId}`, { + method: "PUT", + headers: { + "Content-Type": "application/x-www-form-urlencoded", + }, + body: new URLSearchParams({ prompt }), + }) + if (!response.ok) { + throw new Error(`HTTP error! status: ${response.status}`) + } + return await response.json() + } catch (error) { + console.error("Error sending message:", error) + throw error + } + } +} + +export const chatService = new ChatService() diff --git a/frontend/src/utils/dateUtils.ts b/frontend/src/utils/dateUtils.ts new file mode 100644 index 0000000..95130bc --- /dev/null +++ b/frontend/src/utils/dateUtils.ts @@ -0,0 +1,14 @@ +export const dateUtils = { + formatDate(date) { + if (!date) return "" + + const d = new Date(date) + const day = d.getDate().toString().padStart(2, "0") + const month = (d.getMonth() + 1).toString().padStart(2, "0") + const year = d.getFullYear() + const hours = d.getHours().toString().padStart(2, "0") + const minutes = d.getMinutes().toString().padStart(2, "0") + + return `${day}/${month}/${year} ${hours}:${minutes}` + }, +} diff --git a/frontend/vite.config.js b/frontend/vite.config.js new file mode 100644 index 0000000..3e6399d --- /dev/null +++ b/frontend/vite.config.js @@ -0,0 +1,15 @@ +import { defineConfig } from "vite" +import vue from "@vitejs/plugin-vue" + +export default defineConfig({ + plugins: [vue()], + server: { + port: 3000, + proxy: { + "/api": { + target: "http://localhost:8080", + changeOrigin: true, + }, + }, + }, +})