From 88ea709bbb9a8a14221c77306d58ca0559bc641e Mon Sep 17 00:00:00 2001 From: zyc <1439655764@qq.com> Date: Thu, 28 May 2026 10:45:51 +0800 Subject: [PATCH] Track web-core frontend source --- web-core/.gitignore | 41 + web-core/.prettierignore | 11 + web-core/.prettierrc.json | 8 + web-core/LICENSE | 259 ++ web-core/NOTICES.txt | 243 + web-core/README.md | 487 ++ web-core/components.d.ts | 54 + web-core/docs/README.en.md | 470 ++ web-core/docs/logo.png | Bin 0 -> 200308 bytes web-core/docs/sponsored/sophnet.png | Bin 0 -> 758 bytes web-core/docs/videoCover.png | Bin 0 -> 103125 bytes web-core/docs/videoQR.png | Bin 0 -> 4964 bytes web-core/index.html | 13 + web-core/package.json | 67 + web-core/public/favicon.ico | Bin 0 -> 172850 bytes web-core/public/favicon.svg | 32 + web-core/scripts/findUnusedI18n.ts | 311 ++ web-core/scripts/license.ts | 72 + web-core/src/App.vue | 132 + web-core/src/assets/atomgit.svg | 4 + web-core/src/assets/bg.png | Bin 0 -> 2009732 bytes web-core/src/assets/logo.png | Bin 0 -> 43613 bytes web-core/src/assets/logo.svg | 31 + web-core/src/assets/main.scss | 1361 ++++++ web-core/src/assets/providers/ace.webp | Bin 0 -> 18216 bytes web-core/src/assets/providers/adobe.webp | Bin 0 -> 16054 bytes .../src/assets/providers/adobefirefly.webp | Bin 0 -> 92542 bytes web-core/src/assets/providers/agentvoice.webp | Bin 0 -> 17206 bytes web-core/src/assets/providers/agui.webp | Bin 0 -> 25132 bytes web-core/src/assets/providers/ai2.webp | Bin 0 -> 11504 bytes web-core/src/assets/providers/ai21.webp | Bin 0 -> 14976 bytes web-core/src/assets/providers/ai302.webp | Bin 0 -> 29344 bytes web-core/src/assets/providers/ai360.webp | Bin 0 -> 53446 bytes web-core/src/assets/providers/aihubmix.webp | Bin 0 -> 31192 bytes web-core/src/assets/providers/aimass.webp | Bin 0 -> 31282 bytes web-core/src/assets/providers/aionlabs.webp | Bin 0 -> 58218 bytes web-core/src/assets/providers/aistudio.webp | Bin 0 -> 12874 bytes web-core/src/assets/providers/akashchat.webp | Bin 0 -> 23532 bytes web-core/src/assets/providers/alephalpha.webp | Bin 0 -> 23048 bytes web-core/src/assets/providers/alibaba.webp | Bin 0 -> 28864 bytes .../src/assets/providers/alibabacloud.webp | Bin 0 -> 16502 bytes web-core/src/assets/providers/amp.webp | Bin 0 -> 28006 bytes web-core/src/assets/providers/antgroup.webp | Bin 0 -> 34150 bytes web-core/src/assets/providers/anthropic.webp | Bin 0 -> 15508 bytes .../src/assets/providers/antigravity.webp | Bin 0 -> 30490 bytes web-core/src/assets/providers/anyscale.webp | Bin 0 -> 26460 bytes web-core/src/assets/providers/apertis.webp | Bin 0 -> 24550 bytes web-core/src/assets/providers/apple.webp | Bin 0 -> 13448 bytes web-core/src/assets/providers/arcee.webp | Bin 0 -> 28766 bytes web-core/src/assets/providers/askverdict.webp | Bin 0 -> 26306 bytes web-core/src/assets/providers/assemblyai.webp | Bin 0 -> 17656 bytes web-core/src/assets/providers/atlascloud.webp | Bin 0 -> 19528 bytes web-core/src/assets/providers/automatic.webp | Bin 0 -> 25084 bytes web-core/src/assets/providers/aws.webp | Bin 0 -> 35410 bytes web-core/src/assets/providers/aya.webp | Bin 0 -> 18130 bytes web-core/src/assets/providers/azure.webp | Bin 0 -> 25658 bytes web-core/src/assets/providers/azureai.webp | Bin 0 -> 18248 bytes web-core/src/assets/providers/baai.webp | Bin 0 -> 24182 bytes web-core/src/assets/providers/baichuan.webp | Bin 0 -> 8152 bytes web-core/src/assets/providers/baidu.webp | Bin 0 -> 31444 bytes web-core/src/assets/providers/baiducloud.webp | Bin 0 -> 24706 bytes web-core/src/assets/providers/bailian.webp | Bin 0 -> 28320 bytes web-core/src/assets/providers/baseten.webp | Bin 0 -> 6626 bytes web-core/src/assets/providers/bedrock.webp | Bin 0 -> 53804 bytes web-core/src/assets/providers/bfl.webp | Bin 0 -> 16062 bytes web-core/src/assets/providers/bilibili.webp | Bin 0 -> 16352 bytes .../src/assets/providers/bilibiliindex.webp | Bin 0 -> 36148 bytes web-core/src/assets/providers/bing.webp | Bin 0 -> 22712 bytes web-core/src/assets/providers/briaai.webp | Bin 0 -> 29716 bytes web-core/src/assets/providers/burncloud.webp | Bin 0 -> 35226 bytes web-core/src/assets/providers/bytedance.webp | Bin 0 -> 10668 bytes web-core/src/assets/providers/capcut.webp | Bin 0 -> 14474 bytes web-core/src/assets/providers/centml.webp | Bin 0 -> 23890 bytes web-core/src/assets/providers/cerebras.webp | Bin 0 -> 46448 bytes web-core/src/assets/providers/chatglm.webp | Bin 0 -> 43378 bytes .../src/assets/providers/cherrystudio.webp | Bin 0 -> 30104 bytes web-core/src/assets/providers/civitai.webp | Bin 0 -> 32688 bytes web-core/src/assets/providers/claude.webp | Bin 0 -> 41170 bytes web-core/src/assets/providers/claudecode.webp | Bin 0 -> 5104 bytes web-core/src/assets/providers/cline.webp | Bin 0 -> 14010 bytes web-core/src/assets/providers/clipdrop.webp | Bin 0 -> 11728 bytes web-core/src/assets/providers/cloudflare.webp | Bin 0 -> 16442 bytes .../src/assets/providers/codeflicker.webp | Bin 0 -> 14886 bytes web-core/src/assets/providers/codegeex.webp | Bin 0 -> 27060 bytes web-core/src/assets/providers/codex.webp | Bin 0 -> 26062 bytes web-core/src/assets/providers/cogvideo.webp | Bin 0 -> 41200 bytes web-core/src/assets/providers/cogview.webp | Bin 0 -> 43328 bytes web-core/src/assets/providers/cohere.webp | Bin 0 -> 15872 bytes web-core/src/assets/providers/colab.webp | Bin 0 -> 32402 bytes web-core/src/assets/providers/cometapi.webp | Bin 0 -> 43160 bytes web-core/src/assets/providers/comfyui.webp | Bin 0 -> 15930 bytes web-core/src/assets/providers/commanda.webp | Bin 0 -> 15872 bytes web-core/src/assets/providers/copilot.webp | Bin 0 -> 37010 bytes web-core/src/assets/providers/copilotkit.webp | Bin 0 -> 37310 bytes web-core/src/assets/providers/coqui.webp | Bin 0 -> 41304 bytes web-core/src/assets/providers/coze.webp | Bin 0 -> 20858 bytes web-core/src/assets/providers/crewai.webp | Bin 0 -> 33490 bytes web-core/src/assets/providers/crusoe.webp | Bin 0 -> 26020 bytes web-core/src/assets/providers/cursor.webp | Bin 0 -> 11842 bytes web-core/src/assets/providers/cybercut.webp | Bin 0 -> 13600 bytes web-core/src/assets/providers/dalle.webp | Bin 0 -> 33930 bytes web-core/src/assets/providers/dbrx.webp | Bin 0 -> 43600 bytes web-core/src/assets/providers/deepai.webp | Bin 0 -> 17606 bytes web-core/src/assets/providers/deepcogito.webp | Bin 0 -> 54910 bytes web-core/src/assets/providers/deepinfra.webp | Bin 0 -> 58576 bytes web-core/src/assets/providers/deepl.webp | Bin 0 -> 19592 bytes web-core/src/assets/providers/deepmind.webp | Bin 0 -> 34496 bytes web-core/src/assets/providers/deepseek.webp | Bin 0 -> 30000 bytes web-core/src/assets/providers/dify.webp | Bin 0 -> 9596 bytes web-core/src/assets/providers/doc2x.webp | Bin 0 -> 20410 bytes web-core/src/assets/providers/docsearch.webp | Bin 0 -> 17890 bytes web-core/src/assets/providers/dolphin.webp | Bin 0 -> 47700 bytes web-core/src/assets/providers/doubao.webp | Bin 0 -> 27738 bytes .../src/assets/providers/dreammachine.webp | Bin 0 -> 10284 bytes web-core/src/assets/providers/elevenlabs.webp | Bin 0 -> 3854 bytes web-core/src/assets/providers/elevenx.webp | Bin 0 -> 15630 bytes .../src/assets/providers/essentialai.webp | Bin 0 -> 30880 bytes web-core/src/assets/providers/exa.webp | Bin 0 -> 21152 bytes web-core/src/assets/providers/fal.webp | Bin 0 -> 22672 bytes web-core/src/assets/providers/fastgpt.webp | Bin 0 -> 13382 bytes .../src/assets/providers/featherless.webp | Bin 0 -> 33408 bytes web-core/src/assets/providers/figma.webp | Bin 0 -> 19418 bytes web-core/src/assets/providers/fireworks.webp | Bin 0 -> 18486 bytes web-core/src/assets/providers/fishaudio.webp | Bin 0 -> 9766 bytes web-core/src/assets/providers/flora.webp | Bin 0 -> 14188 bytes web-core/src/assets/providers/flowith.webp | Bin 0 -> 10422 bytes web-core/src/assets/providers/flux.webp | Bin 0 -> 17248 bytes web-core/src/assets/providers/friendli.webp | Bin 0 -> 19492 bytes web-core/src/assets/providers/gemini.webp | Bin 0 -> 25196 bytes web-core/src/assets/providers/geminicli.webp | Bin 0 -> 22850 bytes web-core/src/assets/providers/gemma.webp | Bin 0 -> 67460 bytes web-core/src/assets/providers/giteeai.webp | Bin 0 -> 26554 bytes web-core/src/assets/providers/github.webp | Bin 0 -> 18952 bytes .../src/assets/providers/githubcopilot.webp | Bin 0 -> 21110 bytes web-core/src/assets/providers/glama.webp | Bin 0 -> 37352 bytes web-core/src/assets/providers/glif.webp | Bin 0 -> 10642 bytes web-core/src/assets/providers/glmv.webp | Bin 0 -> 56098 bytes web-core/src/assets/providers/google.webp | Bin 0 -> 25684 bytes .../src/assets/providers/googlecloud.webp | Bin 0 -> 26550 bytes web-core/src/assets/providers/goose.webp | Bin 0 -> 18352 bytes web-core/src/assets/providers/gradio.webp | Bin 0 -> 39136 bytes web-core/src/assets/providers/greptile.webp | Bin 0 -> 19788 bytes web-core/src/assets/providers/grok.webp | Bin 0 -> 21108 bytes web-core/src/assets/providers/groq.webp | Bin 0 -> 20208 bytes web-core/src/assets/providers/grsai.png | Bin 0 -> 30054 bytes web-core/src/assets/providers/hailuo.webp | Bin 0 -> 43822 bytes web-core/src/assets/providers/haiper.webp | Bin 0 -> 20918 bytes web-core/src/assets/providers/hedra.webp | Bin 0 -> 19954 bytes web-core/src/assets/providers/higress.webp | Bin 0 -> 24754 bytes web-core/src/assets/providers/huawei.webp | Bin 0 -> 42132 bytes .../src/assets/providers/huaweicloud.webp | Bin 0 -> 42132 bytes .../src/assets/providers/huggingface.webp | Bin 0 -> 42374 bytes web-core/src/assets/providers/hunyuan.webp | Bin 0 -> 50684 bytes web-core/src/assets/providers/hyperbolic.webp | Bin 0 -> 25770 bytes web-core/src/assets/providers/ibm.webp | Bin 0 -> 14408 bytes web-core/src/assets/providers/ideogram.webp | Bin 0 -> 23816 bytes .../src/assets/providers/iflytekcloud.webp | Bin 0 -> 24654 bytes web-core/src/assets/providers/inception.webp | Bin 0 -> 6774 bytes web-core/src/assets/providers/inference.webp | Bin 0 -> 3988 bytes web-core/src/assets/providers/infermatic.webp | Bin 0 -> 7446 bytes .../src/assets/providers/infinigence.webp | Bin 0 -> 4920 bytes web-core/src/assets/providers/inflection.webp | Bin 0 -> 7480 bytes web-core/src/assets/providers/internlm.webp | Bin 0 -> 47160 bytes web-core/src/assets/providers/jimeng.webp | Bin 0 -> 28374 bytes web-core/src/assets/providers/jina.webp | Bin 0 -> 8346 bytes web-core/src/assets/providers/junie.webp | Bin 0 -> 9602 bytes web-core/src/assets/providers/kilocode.webp | Bin 0 -> 9850 bytes web-core/src/assets/providers/kimi.webp | Bin 0 -> 11024 bytes web-core/src/assets/providers/kling.webp | Bin 0 -> 44110 bytes web-core/src/assets/providers/kluster.webp | Bin 0 -> 21904 bytes web-core/src/assets/providers/kolors.webp | Bin 0 -> 33652 bytes web-core/src/assets/providers/krea.webp | Bin 0 -> 15250 bytes web-core/src/assets/providers/kwaikat.webp | Bin 0 -> 26784 bytes web-core/src/assets/providers/kwaipilot.webp | Bin 0 -> 26388 bytes web-core/src/assets/providers/lambda.webp | Bin 0 -> 7946 bytes web-core/src/assets/providers/langchain.webp | Bin 0 -> 23838 bytes web-core/src/assets/providers/langfuse.webp | Bin 0 -> 24580 bytes web-core/src/assets/providers/langgraph.webp | Bin 0 -> 20308 bytes web-core/src/assets/providers/langsmith.webp | Bin 0 -> 23880 bytes web-core/src/assets/providers/leptonai.webp | Bin 0 -> 28516 bytes web-core/src/assets/providers/lg.webp | Bin 0 -> 28726 bytes web-core/src/assets/providers/lightricks.webp | Bin 0 -> 21098 bytes web-core/src/assets/providers/liquid.webp | Bin 0 -> 17998 bytes web-core/src/assets/providers/livekit.webp | Bin 0 -> 3884 bytes web-core/src/assets/providers/llamaindex.webp | Bin 0 -> 21334 bytes web-core/src/assets/providers/llava.webp | Bin 0 -> 45066 bytes web-core/src/assets/providers/llmapi.webp | Bin 0 -> 30138 bytes web-core/src/assets/providers/lmstudio.webp | Bin 0 -> 22818 bytes web-core/src/assets/providers/lobehub.webp | Bin 0 -> 56020 bytes web-core/src/assets/providers/longcat.webp | Bin 0 -> 21102 bytes web-core/src/assets/providers/lovable.webp | Bin 0 -> 25154 bytes web-core/src/assets/providers/lovart.webp | Bin 0 -> 10936 bytes web-core/src/assets/providers/luma.webp | Bin 0 -> 24744 bytes web-core/src/assets/providers/magic.webp | Bin 0 -> 16366 bytes web-core/src/assets/providers/make.webp | Bin 0 -> 22084 bytes web-core/src/assets/providers/manus.webp | Bin 0 -> 23348 bytes web-core/src/assets/providers/mastra.webp | Bin 0 -> 36128 bytes web-core/src/assets/providers/mcp.webp | Bin 0 -> 26770 bytes web-core/src/assets/providers/mcpso.webp | Bin 0 -> 21234 bytes web-core/src/assets/providers/menlo.webp | Bin 0 -> 12306 bytes web-core/src/assets/providers/meta.webp | Bin 0 -> 37248 bytes web-core/src/assets/providers/metaai.webp | Bin 0 -> 43048 bytes web-core/src/assets/providers/metagpt.webp | Bin 0 -> 28250 bytes web-core/src/assets/providers/microsoft.webp | Bin 0 -> 5060 bytes web-core/src/assets/providers/midjourney.webp | Bin 0 -> 32728 bytes web-core/src/assets/providers/minimax.webp | Bin 0 -> 25214 bytes web-core/src/assets/providers/mistral.webp | Bin 0 -> 6168 bytes web-core/src/assets/providers/modelscope.webp | Bin 0 -> 6588 bytes web-core/src/assets/providers/monica.webp | Bin 0 -> 40760 bytes web-core/src/assets/providers/moonshot.webp | Bin 0 -> 31696 bytes web-core/src/assets/providers/morph.webp | Bin 0 -> 17444 bytes web-core/src/assets/providers/myshell.webp | Bin 0 -> 21558 bytes web-core/src/assets/providers/n8n.webp | Bin 0 -> 22068 bytes web-core/src/assets/providers/nanobanana.webp | Bin 0 -> 35412 bytes web-core/src/assets/providers/nebius.webp | Bin 0 -> 16088 bytes web-core/src/assets/providers/newapi.webp | Bin 0 -> 32002 bytes web-core/src/assets/providers/notebooklm.webp | Bin 0 -> 19502 bytes web-core/src/assets/providers/notion.webp | Bin 0 -> 17702 bytes .../src/assets/providers/nousresearch.webp | Bin 0 -> 64346 bytes web-core/src/assets/providers/nova.webp | Bin 0 -> 52486 bytes web-core/src/assets/providers/novelai.webp | Bin 0 -> 20624 bytes web-core/src/assets/providers/novita.webp | Bin 0 -> 9772 bytes web-core/src/assets/providers/nplcloud.webp | Bin 0 -> 21072 bytes web-core/src/assets/providers/nvidia.webp | Bin 0 -> 27140 bytes web-core/src/assets/providers/obsidian.webp | Bin 0 -> 24744 bytes web-core/src/assets/providers/ollama.webp | Bin 0 -> 23144 bytes web-core/src/assets/providers/openai.webp | Bin 0 -> 32232 bytes web-core/src/assets/providers/openchat.webp | Bin 0 -> 18718 bytes web-core/src/assets/providers/openclaw.webp | Bin 0 -> 28520 bytes web-core/src/assets/providers/opencode.webp | Bin 0 -> 3694 bytes web-core/src/assets/providers/openhands.webp | Bin 0 -> 34474 bytes web-core/src/assets/providers/openrouter.webp | Bin 0 -> 20960 bytes web-core/src/assets/providers/openwebui.webp | Bin 0 -> 14258 bytes web-core/src/assets/providers/palm.webp | Bin 0 -> 24912 bytes web-core/src/assets/providers/parasail.webp | Bin 0 -> 11672 bytes web-core/src/assets/providers/perplexity.webp | Bin 0 -> 28042 bytes web-core/src/assets/providers/phidata.webp | Bin 0 -> 14762 bytes web-core/src/assets/providers/phind.webp | Bin 0 -> 11870 bytes web-core/src/assets/providers/pika.webp | Bin 0 -> 13282 bytes web-core/src/assets/providers/pixverse.webp | Bin 0 -> 34244 bytes web-core/src/assets/providers/player2.webp | Bin 0 -> 7852 bytes web-core/src/assets/providers/poe.webp | Bin 0 -> 23856 bytes .../src/assets/providers/pollinations.webp | Bin 0 -> 41838 bytes web-core/src/assets/providers/ppio.webp | Bin 0 -> 34872 bytes web-core/src/assets/providers/prunaai.webp | Bin 0 -> 66210 bytes web-core/src/assets/providers/pydanticai.webp | Bin 0 -> 36250 bytes web-core/src/assets/providers/qingyan.webp | Bin 0 -> 36830 bytes web-core/src/assets/providers/qiniu.webp | Bin 0 -> 21552 bytes web-core/src/assets/providers/qoder.webp | Bin 0 -> 19164 bytes web-core/src/assets/providers/qwen.webp | Bin 0 -> 27492 bytes web-core/src/assets/providers/railway.webp | Bin 0 -> 30176 bytes web-core/src/assets/providers/recraft.webp | Bin 0 -> 12062 bytes web-core/src/assets/providers/relace.webp | Bin 0 -> 11354 bytes web-core/src/assets/providers/replicate.webp | Bin 0 -> 5318 bytes web-core/src/assets/providers/replit.webp | Bin 0 -> 8150 bytes web-core/src/assets/providers/reve.webp | Bin 0 -> 6732 bytes web-core/src/assets/providers/roocode.webp | Bin 0 -> 11924 bytes web-core/src/assets/providers/rsshub.webp | Bin 0 -> 18600 bytes web-core/src/assets/providers/runninghub.png | Bin 0 -> 1136 bytes web-core/src/assets/providers/runway.webp | Bin 0 -> 16160 bytes web-core/src/assets/providers/rwkv.webp | Bin 0 -> 21194 bytes web-core/src/assets/providers/sambanova.webp | Bin 0 -> 33410 bytes web-core/src/assets/providers/search1api.webp | Bin 0 -> 24184 bytes web-core/src/assets/providers/searchapi.webp | Bin 0 -> 21020 bytes web-core/src/assets/providers/sensenova.webp | Bin 0 -> 36592 bytes .../src/assets/providers/siliconcloud.webp | Bin 0 -> 7282 bytes web-core/src/assets/providers/skywork.webp | Bin 0 -> 25406 bytes web-core/src/assets/providers/smithery.webp | Bin 0 -> 15890 bytes web-core/src/assets/providers/snowflake.webp | Bin 0 -> 38334 bytes web-core/src/assets/providers/sophnet.webp | Bin 0 -> 17414 bytes web-core/src/assets/providers/sora.webp | Bin 0 -> 37504 bytes web-core/src/assets/providers/spark.webp | Bin 0 -> 31536 bytes web-core/src/assets/providers/stability.webp | Bin 0 -> 23106 bytes web-core/src/assets/providers/statecloud.webp | Bin 0 -> 26702 bytes web-core/src/assets/providers/stepfun.webp | Bin 0 -> 6284 bytes web-core/src/assets/providers/straico.webp | Bin 0 -> 12172 bytes web-core/src/assets/providers/streamlake.webp | Bin 0 -> 24726 bytes web-core/src/assets/providers/submodel.webp | Bin 0 -> 37974 bytes web-core/src/assets/providers/suno.webp | Bin 0 -> 9250 bytes web-core/src/assets/providers/sync.webp | Bin 0 -> 34102 bytes web-core/src/assets/providers/targon.webp | Bin 0 -> 15536 bytes web-core/src/assets/providers/tavily.webp | Bin 0 -> 18324 bytes web-core/src/assets/providers/tencent.webp | Bin 0 -> 15790 bytes .../src/assets/providers/tencentcloud.webp | Bin 0 -> 28744 bytes web-core/src/assets/providers/tiangong.webp | Bin 0 -> 36256 bytes web-core/src/assets/providers/tii.webp | Bin 0 -> 20484 bytes web-core/src/assets/providers/together.webp | Bin 0 -> 28128 bytes web-core/src/assets/providers/topazlabs.webp | Bin 0 -> 3748 bytes web-core/src/assets/providers/trae.webp | Bin 0 -> 10040 bytes web-core/src/assets/providers/tripo.webp | Bin 0 -> 17220 bytes web-core/src/assets/providers/turix.webp | Bin 0 -> 39014 bytes web-core/src/assets/providers/udio.webp | Bin 0 -> 13594 bytes .../src/assets/providers/unstructured.webp | Bin 0 -> 10584 bytes web-core/src/assets/providers/upstage.webp | Bin 0 -> 18262 bytes web-core/src/assets/providers/v0.webp | Bin 0 -> 10390 bytes .../src/assets/providers/vectorizerai.webp | Bin 0 -> 24240 bytes web-core/src/assets/providers/vercel.webp | Bin 0 -> 8222 bytes web-core/src/assets/providers/vertexai.webp | Bin 0 -> 33390 bytes web-core/src/assets/providers/vidu.webp | Bin 0 -> 39996 bytes web-core/src/assets/providers/viggle.webp | Bin 0 -> 19346 bytes web-core/src/assets/providers/vllm.webp | Bin 0 -> 15934 bytes web-core/src/assets/providers/volcengine.webp | Bin 0 -> 25192 bytes web-core/src/assets/providers/voyage.webp | Bin 0 -> 17310 bytes web-core/src/assets/providers/wenxin.webp | Bin 0 -> 28686 bytes web-core/src/assets/providers/windsurf.webp | Bin 0 -> 13056 bytes web-core/src/assets/providers/workersai.webp | Bin 0 -> 15192 bytes web-core/src/assets/providers/xai.webp | Bin 0 -> 14410 bytes web-core/src/assets/providers/xiaomimimo.webp | Bin 0 -> 21350 bytes web-core/src/assets/providers/xinference.webp | Bin 0 -> 33514 bytes web-core/src/assets/providers/xpay.webp | Bin 0 -> 26028 bytes web-core/src/assets/providers/xuanyuan.webp | Bin 0 -> 10674 bytes web-core/src/assets/providers/yandex.webp | Bin 0 -> 14088 bytes web-core/src/assets/providers/yi.webp | Bin 0 -> 13978 bytes web-core/src/assets/providers/youmind.webp | Bin 0 -> 9756 bytes web-core/src/assets/providers/yuanbao.webp | Bin 0 -> 27534 bytes web-core/src/assets/providers/zai.webp | Bin 0 -> 10720 bytes web-core/src/assets/providers/zapier.webp | Bin 0 -> 3854 bytes web-core/src/assets/providers/zeabur.webp | Bin 0 -> 9746 bytes web-core/src/assets/providers/zencoder.webp | Bin 0 -> 24900 bytes web-core/src/assets/providers/zenmux.webp | Bin 0 -> 15122 bytes web-core/src/assets/providers/zeroone.webp | Bin 0 -> 13360 bytes web-core/src/assets/providers/zhipu.webp | Bin 0 -> 34636 bytes web-core/src/components/editMdPreivew.vue | 91 + web-core/src/components/hello.vue | 262 ++ web-core/src/components/imageTools.vue | 145 + web-core/src/components/modelSelect.vue | 207 + web-core/src/components/promptEditor.vue | 548 +++ .../components/setting/components/about.vue | 614 +++ .../setting/components/agentConfog.vue | 437 ++ .../setting/components/dbConfig.vue | 408 ++ .../setting/components/devConfig.vue | 375 ++ .../setting/components/fileManagement.vue | 83 + .../setting/components/languageConfig.vue | 99 + .../setting/components/loginConfig.vue | 90 + .../setting/components/logoutConfig.vue | 64 + .../setting/components/memoryConfig.vue | 187 + .../setting/components/modelMap.vue | 371 ++ .../setting/components/otherConfig.vue | 81 + .../setting/components/promptManage.vue | 106 + .../setting/components/requestConfig.vue | 85 + .../setting/components/skillManagement.vue | 248 ++ .../setting/components/uiConfig.vue | 127 + .../setting/components/vendorConfig.vue | 1560 +++++++ .../components/vendorTest/AudioUploadBox.vue | 119 + .../components/vendorTest/ImageModelTest.vue | 275 ++ .../components/vendorTest/ImageUploadBox.vue | 129 + .../components/vendorTest/TextModelTest.vue | 245 + .../components/vendorTest/VideoModelTest.vue | 494 ++ .../components/vendorTest/VideoUploadBox.vue | 123 + web-core/src/components/setting/index.vue | 169 + .../src/components/storyboardImageCheck.vue | 464 ++ web-core/src/components/titleBar.vue | 128 + web-core/src/lib/vendorTemplate.ts | 334 ++ web-core/src/locales/index.ts | 39 + web-core/src/locales/language/en.json | 1689 +++++++ web-core/src/locales/language/ja_JP.json | 1548 +++++++ web-core/src/locales/language/ru_RU.json | 1547 +++++++ web-core/src/locales/language/th_TH.json | 1536 +++++++ web-core/src/locales/language/vi-VN.json | 1540 +++++++ web-core/src/locales/language/zh-CN.json | 1827 ++++++++ web-core/src/locales/language/zh-TW.json | 1537 +++++++ web-core/src/main.ts | 33 + web-core/src/pages/error/404.vue | 39 + web-core/src/pages/login/index.vue | 864 ++++ web-core/src/pages/workbench/index.vue | 377 ++ web-core/src/router/index.ts | 81 + web-core/src/stores/imageListCache.ts | 311 ++ web-core/src/stores/index.ts | 31 + web-core/src/stores/loadingStore.ts | 47 + web-core/src/stores/productionAgent.ts | 511 +++ web-core/src/stores/project.ts | 28 + web-core/src/stores/scriptAgent.ts | 99 + web-core/src/stores/setting.ts | 38 + web-core/src/stores/user.ts | 8 + web-core/src/stores/video.ts | 425 ++ web-core/src/types/global.d.ts | 250 ++ web-core/src/types/shims-vue.d.ts | 55 + web-core/src/utils/apiBaseUrl.ts | 71 + web-core/src/utils/assetsCheck.ts | 114 + web-core/src/utils/axios.ts | 39 + web-core/src/utils/global.ts | 17 + web-core/src/utils/imageOptimizer.ts | 65 + web-core/src/utils/parseNovel.ts | 149 + web-core/src/utils/parseScript.ts | 112 + web-core/src/utils/providersLogo.ts | 349 ++ web-core/src/utils/scanSkills.ts | 97 + web-core/src/utils/theme.ts | 155 + web-core/src/utils/useChat copy.ts | 726 +++ web-core/src/utils/useChat.ts | 763 ++++ web-core/src/utils/useSocket.ts | 58 + web-core/src/utils/videoPolling.ts | 211 + .../src/views/assets/components/addAssets.vue | 123 + .../assets/components/addAudioAssets.vue | 336 ++ .../assets/components/batchGeneration.vue | 554 +++ .../views/assets/components/generateImage.vue | 466 ++ web-core/src/views/assets/index.vue | 1697 +++++++ web-core/src/views/cornerScape/index.vue | 1345 ++++++ .../src/views/novel/components/editNodel.vue | 100 + web-core/src/views/novel/components/event.vue | 206 + .../views/novel/components/eventAnalysis.vue | 75 + .../views/novel/components/importNovel.vue | 289 ++ web-core/src/views/novel/index.vue | 395 ++ .../components/editImage/generatedNode.vue | 379 ++ .../production/components/editImage/index.vue | 373 ++ .../components/editImage/removeLine.vue | 65 + .../components/editImage/results.vue | 110 + .../components/editImage/uploadNode.vue | 195 + .../components/rightChatBox/index.vue | 312 ++ .../components/workbench/editVideo/index.vue | 534 +++ .../workbench/editVideo/mediaLibrary.vue | 799 ++++ .../workbench/editVideo/propertyPanel.vue | 557 +++ .../workbench/editVideo/utils/clipMeta.ts | 40 + .../workbench/editVideo/utils/filterEffect.ts | 206 + .../workbench/editVideo/utils/mediaData.ts | 169 + .../workbench/editVideo/utils/mediaLoader.ts | 67 + .../workbench/editVideo/utils/trackHelper.ts | 83 + .../editVideo/utils/transitionHelper.ts | 109 + .../editVideo/utils/transitionRenderers.ts | 666 +++ .../workbench/editVideo/videoPreview.vue | 1655 +++++++ .../components/workbench/generate copy.vue | 1960 ++++++++ .../generate copy/components/trackList.vue | 184 + .../components/videogenerate.vue | 664 +++ .../workbench/generate copy/index.vue | 130 + .../generate/components/imageSelect.vue | 426 ++ .../generate/components/modeMenu.vue | 173 + .../workbench/generate/components/track.vue | 516 +++ .../workbench/generate/components/video.vue | 336 ++ .../components/workbench/generate/index.vue | 555 +++ .../production/components/workbench/index.vue | 282 ++ .../components/workbench/preview.vue | 808 ++++ .../components/workbench/type/type.ts | 105 + web-core/src/views/production/index.vue | 669 +++ web-core/src/views/production/node/assets.vue | 315 ++ web-core/src/views/production/node/poster.vue | 110 + web-core/src/views/production/node/script.vue | 146 + .../src/views/production/node/scriptPlan.vue | 142 + .../src/views/production/node/storyboard.vue | 687 +++ .../views/production/node/storyboardTable.vue | 211 + .../src/views/production/node/workbench.vue | 138 + web-core/src/views/production/utils/dagre.ts | 58 + .../views/production/utils/editImageType.ts | 92 + .../src/views/production/utils/flowBuilder.ts | 264 ++ .../views/project/components/addProject.vue | 129 + .../project/components/projectDialog.vue | 1280 ++++++ web-core/src/views/project/index.vue | 831 ++++ .../src/views/script/components/addScript.vue | 338 ++ .../script/components/batchAddScript.vue | 340 ++ .../views/script/components/editScript.vue | 148 + web-core/src/views/script/index.vue | 495 +++ web-core/src/views/scriptAgent/index copy.vue | 729 +++ web-core/src/views/scriptAgent/index.vue | 910 ++++ web-core/src/views/task/index.vue | 225 + web-core/src/views/taskList/index.vue | 163 + web-core/src/views/test/index.vue | 20 + web-core/tsconfig.app.json | 16 + web-core/tsconfig.json | 16 + web-core/tsconfig.node.json | 38 + web-core/vite.config.ts | 94 + web-core/yarn.lock | 3956 +++++++++++++++++ 459 files changed, 60254 insertions(+) create mode 100644 web-core/.gitignore create mode 100644 web-core/.prettierignore create mode 100644 web-core/.prettierrc.json create mode 100644 web-core/LICENSE create mode 100644 web-core/NOTICES.txt create mode 100644 web-core/README.md create mode 100644 web-core/components.d.ts create mode 100644 web-core/docs/README.en.md create mode 100644 web-core/docs/logo.png create mode 100644 web-core/docs/sponsored/sophnet.png create mode 100644 web-core/docs/videoCover.png create mode 100644 web-core/docs/videoQR.png create mode 100644 web-core/index.html create mode 100644 web-core/package.json create mode 100644 web-core/public/favicon.ico create mode 100644 web-core/public/favicon.svg create mode 100644 web-core/scripts/findUnusedI18n.ts create mode 100644 web-core/scripts/license.ts create mode 100644 web-core/src/App.vue create mode 100644 web-core/src/assets/atomgit.svg create mode 100644 web-core/src/assets/bg.png create mode 100644 web-core/src/assets/logo.png create mode 100644 web-core/src/assets/logo.svg create mode 100644 web-core/src/assets/main.scss create mode 100644 web-core/src/assets/providers/ace.webp create mode 100644 web-core/src/assets/providers/adobe.webp create mode 100644 web-core/src/assets/providers/adobefirefly.webp create mode 100644 web-core/src/assets/providers/agentvoice.webp create mode 100644 web-core/src/assets/providers/agui.webp create mode 100644 web-core/src/assets/providers/ai2.webp create mode 100644 web-core/src/assets/providers/ai21.webp create mode 100644 web-core/src/assets/providers/ai302.webp create mode 100644 web-core/src/assets/providers/ai360.webp create mode 100644 web-core/src/assets/providers/aihubmix.webp create mode 100644 web-core/src/assets/providers/aimass.webp create mode 100644 web-core/src/assets/providers/aionlabs.webp create mode 100644 web-core/src/assets/providers/aistudio.webp create mode 100644 web-core/src/assets/providers/akashchat.webp create mode 100644 web-core/src/assets/providers/alephalpha.webp create mode 100644 web-core/src/assets/providers/alibaba.webp create mode 100644 web-core/src/assets/providers/alibabacloud.webp create mode 100644 web-core/src/assets/providers/amp.webp create mode 100644 web-core/src/assets/providers/antgroup.webp create mode 100644 web-core/src/assets/providers/anthropic.webp create mode 100644 web-core/src/assets/providers/antigravity.webp create mode 100644 web-core/src/assets/providers/anyscale.webp create mode 100644 web-core/src/assets/providers/apertis.webp create mode 100644 web-core/src/assets/providers/apple.webp create mode 100644 web-core/src/assets/providers/arcee.webp create mode 100644 web-core/src/assets/providers/askverdict.webp create mode 100644 web-core/src/assets/providers/assemblyai.webp create mode 100644 web-core/src/assets/providers/atlascloud.webp create mode 100644 web-core/src/assets/providers/automatic.webp create mode 100644 web-core/src/assets/providers/aws.webp create mode 100644 web-core/src/assets/providers/aya.webp create mode 100644 web-core/src/assets/providers/azure.webp create mode 100644 web-core/src/assets/providers/azureai.webp create mode 100644 web-core/src/assets/providers/baai.webp create mode 100644 web-core/src/assets/providers/baichuan.webp create mode 100644 web-core/src/assets/providers/baidu.webp create mode 100644 web-core/src/assets/providers/baiducloud.webp create mode 100644 web-core/src/assets/providers/bailian.webp create mode 100644 web-core/src/assets/providers/baseten.webp create mode 100644 web-core/src/assets/providers/bedrock.webp create mode 100644 web-core/src/assets/providers/bfl.webp create mode 100644 web-core/src/assets/providers/bilibili.webp create mode 100644 web-core/src/assets/providers/bilibiliindex.webp create mode 100644 web-core/src/assets/providers/bing.webp create mode 100644 web-core/src/assets/providers/briaai.webp create mode 100644 web-core/src/assets/providers/burncloud.webp create mode 100644 web-core/src/assets/providers/bytedance.webp create mode 100644 web-core/src/assets/providers/capcut.webp create mode 100644 web-core/src/assets/providers/centml.webp create mode 100644 web-core/src/assets/providers/cerebras.webp create mode 100644 web-core/src/assets/providers/chatglm.webp create mode 100644 web-core/src/assets/providers/cherrystudio.webp create mode 100644 web-core/src/assets/providers/civitai.webp create mode 100644 web-core/src/assets/providers/claude.webp create mode 100644 web-core/src/assets/providers/claudecode.webp create mode 100644 web-core/src/assets/providers/cline.webp create mode 100644 web-core/src/assets/providers/clipdrop.webp create mode 100644 web-core/src/assets/providers/cloudflare.webp create mode 100644 web-core/src/assets/providers/codeflicker.webp create mode 100644 web-core/src/assets/providers/codegeex.webp create mode 100644 web-core/src/assets/providers/codex.webp create mode 100644 web-core/src/assets/providers/cogvideo.webp create mode 100644 web-core/src/assets/providers/cogview.webp create mode 100644 web-core/src/assets/providers/cohere.webp create mode 100644 web-core/src/assets/providers/colab.webp create mode 100644 web-core/src/assets/providers/cometapi.webp create mode 100644 web-core/src/assets/providers/comfyui.webp create mode 100644 web-core/src/assets/providers/commanda.webp create mode 100644 web-core/src/assets/providers/copilot.webp create mode 100644 web-core/src/assets/providers/copilotkit.webp create mode 100644 web-core/src/assets/providers/coqui.webp create mode 100644 web-core/src/assets/providers/coze.webp create mode 100644 web-core/src/assets/providers/crewai.webp create mode 100644 web-core/src/assets/providers/crusoe.webp create mode 100644 web-core/src/assets/providers/cursor.webp create mode 100644 web-core/src/assets/providers/cybercut.webp create mode 100644 web-core/src/assets/providers/dalle.webp create mode 100644 web-core/src/assets/providers/dbrx.webp create mode 100644 web-core/src/assets/providers/deepai.webp create mode 100644 web-core/src/assets/providers/deepcogito.webp create mode 100644 web-core/src/assets/providers/deepinfra.webp create mode 100644 web-core/src/assets/providers/deepl.webp create mode 100644 web-core/src/assets/providers/deepmind.webp create mode 100644 web-core/src/assets/providers/deepseek.webp create mode 100644 web-core/src/assets/providers/dify.webp create mode 100644 web-core/src/assets/providers/doc2x.webp create mode 100644 web-core/src/assets/providers/docsearch.webp create mode 100644 web-core/src/assets/providers/dolphin.webp create mode 100644 web-core/src/assets/providers/doubao.webp create mode 100644 web-core/src/assets/providers/dreammachine.webp create mode 100644 web-core/src/assets/providers/elevenlabs.webp create mode 100644 web-core/src/assets/providers/elevenx.webp create mode 100644 web-core/src/assets/providers/essentialai.webp create mode 100644 web-core/src/assets/providers/exa.webp create mode 100644 web-core/src/assets/providers/fal.webp create mode 100644 web-core/src/assets/providers/fastgpt.webp create mode 100644 web-core/src/assets/providers/featherless.webp create mode 100644 web-core/src/assets/providers/figma.webp create mode 100644 web-core/src/assets/providers/fireworks.webp create mode 100644 web-core/src/assets/providers/fishaudio.webp create mode 100644 web-core/src/assets/providers/flora.webp create mode 100644 web-core/src/assets/providers/flowith.webp create mode 100644 web-core/src/assets/providers/flux.webp create mode 100644 web-core/src/assets/providers/friendli.webp create mode 100644 web-core/src/assets/providers/gemini.webp create mode 100644 web-core/src/assets/providers/geminicli.webp create mode 100644 web-core/src/assets/providers/gemma.webp create mode 100644 web-core/src/assets/providers/giteeai.webp create mode 100644 web-core/src/assets/providers/github.webp create mode 100644 web-core/src/assets/providers/githubcopilot.webp create mode 100644 web-core/src/assets/providers/glama.webp create mode 100644 web-core/src/assets/providers/glif.webp create mode 100644 web-core/src/assets/providers/glmv.webp create mode 100644 web-core/src/assets/providers/google.webp create mode 100644 web-core/src/assets/providers/googlecloud.webp create mode 100644 web-core/src/assets/providers/goose.webp create mode 100644 web-core/src/assets/providers/gradio.webp create mode 100644 web-core/src/assets/providers/greptile.webp create mode 100644 web-core/src/assets/providers/grok.webp create mode 100644 web-core/src/assets/providers/groq.webp create mode 100644 web-core/src/assets/providers/grsai.png create mode 100644 web-core/src/assets/providers/hailuo.webp create mode 100644 web-core/src/assets/providers/haiper.webp create mode 100644 web-core/src/assets/providers/hedra.webp create mode 100644 web-core/src/assets/providers/higress.webp create mode 100644 web-core/src/assets/providers/huawei.webp create mode 100644 web-core/src/assets/providers/huaweicloud.webp create mode 100644 web-core/src/assets/providers/huggingface.webp create mode 100644 web-core/src/assets/providers/hunyuan.webp create mode 100644 web-core/src/assets/providers/hyperbolic.webp create mode 100644 web-core/src/assets/providers/ibm.webp create mode 100644 web-core/src/assets/providers/ideogram.webp create mode 100644 web-core/src/assets/providers/iflytekcloud.webp create mode 100644 web-core/src/assets/providers/inception.webp create mode 100644 web-core/src/assets/providers/inference.webp create mode 100644 web-core/src/assets/providers/infermatic.webp create mode 100644 web-core/src/assets/providers/infinigence.webp create mode 100644 web-core/src/assets/providers/inflection.webp create mode 100644 web-core/src/assets/providers/internlm.webp create mode 100644 web-core/src/assets/providers/jimeng.webp create mode 100644 web-core/src/assets/providers/jina.webp create mode 100644 web-core/src/assets/providers/junie.webp create mode 100644 web-core/src/assets/providers/kilocode.webp create mode 100644 web-core/src/assets/providers/kimi.webp create mode 100644 web-core/src/assets/providers/kling.webp create mode 100644 web-core/src/assets/providers/kluster.webp create mode 100644 web-core/src/assets/providers/kolors.webp create mode 100644 web-core/src/assets/providers/krea.webp create mode 100644 web-core/src/assets/providers/kwaikat.webp create mode 100644 web-core/src/assets/providers/kwaipilot.webp create mode 100644 web-core/src/assets/providers/lambda.webp create mode 100644 web-core/src/assets/providers/langchain.webp create mode 100644 web-core/src/assets/providers/langfuse.webp create mode 100644 web-core/src/assets/providers/langgraph.webp create mode 100644 web-core/src/assets/providers/langsmith.webp create mode 100644 web-core/src/assets/providers/leptonai.webp create mode 100644 web-core/src/assets/providers/lg.webp create mode 100644 web-core/src/assets/providers/lightricks.webp create mode 100644 web-core/src/assets/providers/liquid.webp create mode 100644 web-core/src/assets/providers/livekit.webp create mode 100644 web-core/src/assets/providers/llamaindex.webp create mode 100644 web-core/src/assets/providers/llava.webp create mode 100644 web-core/src/assets/providers/llmapi.webp create mode 100644 web-core/src/assets/providers/lmstudio.webp create mode 100644 web-core/src/assets/providers/lobehub.webp create mode 100644 web-core/src/assets/providers/longcat.webp create mode 100644 web-core/src/assets/providers/lovable.webp create mode 100644 web-core/src/assets/providers/lovart.webp create mode 100644 web-core/src/assets/providers/luma.webp create mode 100644 web-core/src/assets/providers/magic.webp create mode 100644 web-core/src/assets/providers/make.webp create mode 100644 web-core/src/assets/providers/manus.webp create mode 100644 web-core/src/assets/providers/mastra.webp create mode 100644 web-core/src/assets/providers/mcp.webp create mode 100644 web-core/src/assets/providers/mcpso.webp create mode 100644 web-core/src/assets/providers/menlo.webp create mode 100644 web-core/src/assets/providers/meta.webp create mode 100644 web-core/src/assets/providers/metaai.webp create mode 100644 web-core/src/assets/providers/metagpt.webp create mode 100644 web-core/src/assets/providers/microsoft.webp create mode 100644 web-core/src/assets/providers/midjourney.webp create mode 100644 web-core/src/assets/providers/minimax.webp create mode 100644 web-core/src/assets/providers/mistral.webp create mode 100644 web-core/src/assets/providers/modelscope.webp create mode 100644 web-core/src/assets/providers/monica.webp create mode 100644 web-core/src/assets/providers/moonshot.webp create mode 100644 web-core/src/assets/providers/morph.webp create mode 100644 web-core/src/assets/providers/myshell.webp create mode 100644 web-core/src/assets/providers/n8n.webp create mode 100644 web-core/src/assets/providers/nanobanana.webp create mode 100644 web-core/src/assets/providers/nebius.webp create mode 100644 web-core/src/assets/providers/newapi.webp create mode 100644 web-core/src/assets/providers/notebooklm.webp create mode 100644 web-core/src/assets/providers/notion.webp create mode 100644 web-core/src/assets/providers/nousresearch.webp create mode 100644 web-core/src/assets/providers/nova.webp create mode 100644 web-core/src/assets/providers/novelai.webp create mode 100644 web-core/src/assets/providers/novita.webp create mode 100644 web-core/src/assets/providers/nplcloud.webp create mode 100644 web-core/src/assets/providers/nvidia.webp create mode 100644 web-core/src/assets/providers/obsidian.webp create mode 100644 web-core/src/assets/providers/ollama.webp create mode 100644 web-core/src/assets/providers/openai.webp create mode 100644 web-core/src/assets/providers/openchat.webp create mode 100644 web-core/src/assets/providers/openclaw.webp create mode 100644 web-core/src/assets/providers/opencode.webp create mode 100644 web-core/src/assets/providers/openhands.webp create mode 100644 web-core/src/assets/providers/openrouter.webp create mode 100644 web-core/src/assets/providers/openwebui.webp create mode 100644 web-core/src/assets/providers/palm.webp create mode 100644 web-core/src/assets/providers/parasail.webp create mode 100644 web-core/src/assets/providers/perplexity.webp create mode 100644 web-core/src/assets/providers/phidata.webp create mode 100644 web-core/src/assets/providers/phind.webp create mode 100644 web-core/src/assets/providers/pika.webp create mode 100644 web-core/src/assets/providers/pixverse.webp create mode 100644 web-core/src/assets/providers/player2.webp create mode 100644 web-core/src/assets/providers/poe.webp create mode 100644 web-core/src/assets/providers/pollinations.webp create mode 100644 web-core/src/assets/providers/ppio.webp create mode 100644 web-core/src/assets/providers/prunaai.webp create mode 100644 web-core/src/assets/providers/pydanticai.webp create mode 100644 web-core/src/assets/providers/qingyan.webp create mode 100644 web-core/src/assets/providers/qiniu.webp create mode 100644 web-core/src/assets/providers/qoder.webp create mode 100644 web-core/src/assets/providers/qwen.webp create mode 100644 web-core/src/assets/providers/railway.webp create mode 100644 web-core/src/assets/providers/recraft.webp create mode 100644 web-core/src/assets/providers/relace.webp create mode 100644 web-core/src/assets/providers/replicate.webp create mode 100644 web-core/src/assets/providers/replit.webp create mode 100644 web-core/src/assets/providers/reve.webp create mode 100644 web-core/src/assets/providers/roocode.webp create mode 100644 web-core/src/assets/providers/rsshub.webp create mode 100644 web-core/src/assets/providers/runninghub.png create mode 100644 web-core/src/assets/providers/runway.webp create mode 100644 web-core/src/assets/providers/rwkv.webp create mode 100644 web-core/src/assets/providers/sambanova.webp create mode 100644 web-core/src/assets/providers/search1api.webp create mode 100644 web-core/src/assets/providers/searchapi.webp create mode 100644 web-core/src/assets/providers/sensenova.webp create mode 100644 web-core/src/assets/providers/siliconcloud.webp create mode 100644 web-core/src/assets/providers/skywork.webp create mode 100644 web-core/src/assets/providers/smithery.webp create mode 100644 web-core/src/assets/providers/snowflake.webp create mode 100644 web-core/src/assets/providers/sophnet.webp create mode 100644 web-core/src/assets/providers/sora.webp create mode 100644 web-core/src/assets/providers/spark.webp create mode 100644 web-core/src/assets/providers/stability.webp create mode 100644 web-core/src/assets/providers/statecloud.webp create mode 100644 web-core/src/assets/providers/stepfun.webp create mode 100644 web-core/src/assets/providers/straico.webp create mode 100644 web-core/src/assets/providers/streamlake.webp create mode 100644 web-core/src/assets/providers/submodel.webp create mode 100644 web-core/src/assets/providers/suno.webp create mode 100644 web-core/src/assets/providers/sync.webp create mode 100644 web-core/src/assets/providers/targon.webp create mode 100644 web-core/src/assets/providers/tavily.webp create mode 100644 web-core/src/assets/providers/tencent.webp create mode 100644 web-core/src/assets/providers/tencentcloud.webp create mode 100644 web-core/src/assets/providers/tiangong.webp create mode 100644 web-core/src/assets/providers/tii.webp create mode 100644 web-core/src/assets/providers/together.webp create mode 100644 web-core/src/assets/providers/topazlabs.webp create mode 100644 web-core/src/assets/providers/trae.webp create mode 100644 web-core/src/assets/providers/tripo.webp create mode 100644 web-core/src/assets/providers/turix.webp create mode 100644 web-core/src/assets/providers/udio.webp create mode 100644 web-core/src/assets/providers/unstructured.webp create mode 100644 web-core/src/assets/providers/upstage.webp create mode 100644 web-core/src/assets/providers/v0.webp create mode 100644 web-core/src/assets/providers/vectorizerai.webp create mode 100644 web-core/src/assets/providers/vercel.webp create mode 100644 web-core/src/assets/providers/vertexai.webp create mode 100644 web-core/src/assets/providers/vidu.webp create mode 100644 web-core/src/assets/providers/viggle.webp create mode 100644 web-core/src/assets/providers/vllm.webp create mode 100644 web-core/src/assets/providers/volcengine.webp create mode 100644 web-core/src/assets/providers/voyage.webp create mode 100644 web-core/src/assets/providers/wenxin.webp create mode 100644 web-core/src/assets/providers/windsurf.webp create mode 100644 web-core/src/assets/providers/workersai.webp create mode 100644 web-core/src/assets/providers/xai.webp create mode 100644 web-core/src/assets/providers/xiaomimimo.webp create mode 100644 web-core/src/assets/providers/xinference.webp create mode 100644 web-core/src/assets/providers/xpay.webp create mode 100644 web-core/src/assets/providers/xuanyuan.webp create mode 100644 web-core/src/assets/providers/yandex.webp create mode 100644 web-core/src/assets/providers/yi.webp create mode 100644 web-core/src/assets/providers/youmind.webp create mode 100644 web-core/src/assets/providers/yuanbao.webp create mode 100644 web-core/src/assets/providers/zai.webp create mode 100644 web-core/src/assets/providers/zapier.webp create mode 100644 web-core/src/assets/providers/zeabur.webp create mode 100644 web-core/src/assets/providers/zencoder.webp create mode 100644 web-core/src/assets/providers/zenmux.webp create mode 100644 web-core/src/assets/providers/zeroone.webp create mode 100644 web-core/src/assets/providers/zhipu.webp create mode 100644 web-core/src/components/editMdPreivew.vue create mode 100644 web-core/src/components/hello.vue create mode 100644 web-core/src/components/imageTools.vue create mode 100644 web-core/src/components/modelSelect.vue create mode 100644 web-core/src/components/promptEditor.vue create mode 100644 web-core/src/components/setting/components/about.vue create mode 100644 web-core/src/components/setting/components/agentConfog.vue create mode 100644 web-core/src/components/setting/components/dbConfig.vue create mode 100644 web-core/src/components/setting/components/devConfig.vue create mode 100644 web-core/src/components/setting/components/fileManagement.vue create mode 100644 web-core/src/components/setting/components/languageConfig.vue create mode 100644 web-core/src/components/setting/components/loginConfig.vue create mode 100644 web-core/src/components/setting/components/logoutConfig.vue create mode 100644 web-core/src/components/setting/components/memoryConfig.vue create mode 100644 web-core/src/components/setting/components/modelMap.vue create mode 100644 web-core/src/components/setting/components/otherConfig.vue create mode 100644 web-core/src/components/setting/components/promptManage.vue create mode 100644 web-core/src/components/setting/components/requestConfig.vue create mode 100644 web-core/src/components/setting/components/skillManagement.vue create mode 100644 web-core/src/components/setting/components/uiConfig.vue create mode 100644 web-core/src/components/setting/components/vendorConfig.vue create mode 100644 web-core/src/components/setting/components/vendorTest/AudioUploadBox.vue create mode 100644 web-core/src/components/setting/components/vendorTest/ImageModelTest.vue create mode 100644 web-core/src/components/setting/components/vendorTest/ImageUploadBox.vue create mode 100644 web-core/src/components/setting/components/vendorTest/TextModelTest.vue create mode 100644 web-core/src/components/setting/components/vendorTest/VideoModelTest.vue create mode 100644 web-core/src/components/setting/components/vendorTest/VideoUploadBox.vue create mode 100644 web-core/src/components/setting/index.vue create mode 100644 web-core/src/components/storyboardImageCheck.vue create mode 100644 web-core/src/components/titleBar.vue create mode 100644 web-core/src/lib/vendorTemplate.ts create mode 100644 web-core/src/locales/index.ts create mode 100644 web-core/src/locales/language/en.json create mode 100644 web-core/src/locales/language/ja_JP.json create mode 100644 web-core/src/locales/language/ru_RU.json create mode 100644 web-core/src/locales/language/th_TH.json create mode 100644 web-core/src/locales/language/vi-VN.json create mode 100644 web-core/src/locales/language/zh-CN.json create mode 100644 web-core/src/locales/language/zh-TW.json create mode 100644 web-core/src/main.ts create mode 100644 web-core/src/pages/error/404.vue create mode 100644 web-core/src/pages/login/index.vue create mode 100644 web-core/src/pages/workbench/index.vue create mode 100644 web-core/src/router/index.ts create mode 100644 web-core/src/stores/imageListCache.ts create mode 100644 web-core/src/stores/index.ts create mode 100644 web-core/src/stores/loadingStore.ts create mode 100644 web-core/src/stores/productionAgent.ts create mode 100644 web-core/src/stores/project.ts create mode 100644 web-core/src/stores/scriptAgent.ts create mode 100644 web-core/src/stores/setting.ts create mode 100644 web-core/src/stores/user.ts create mode 100644 web-core/src/stores/video.ts create mode 100644 web-core/src/types/global.d.ts create mode 100644 web-core/src/types/shims-vue.d.ts create mode 100644 web-core/src/utils/apiBaseUrl.ts create mode 100644 web-core/src/utils/assetsCheck.ts create mode 100644 web-core/src/utils/axios.ts create mode 100644 web-core/src/utils/global.ts create mode 100644 web-core/src/utils/imageOptimizer.ts create mode 100644 web-core/src/utils/parseNovel.ts create mode 100644 web-core/src/utils/parseScript.ts create mode 100644 web-core/src/utils/providersLogo.ts create mode 100644 web-core/src/utils/scanSkills.ts create mode 100644 web-core/src/utils/theme.ts create mode 100644 web-core/src/utils/useChat copy.ts create mode 100644 web-core/src/utils/useChat.ts create mode 100644 web-core/src/utils/useSocket.ts create mode 100644 web-core/src/utils/videoPolling.ts create mode 100644 web-core/src/views/assets/components/addAssets.vue create mode 100644 web-core/src/views/assets/components/addAudioAssets.vue create mode 100644 web-core/src/views/assets/components/batchGeneration.vue create mode 100644 web-core/src/views/assets/components/generateImage.vue create mode 100644 web-core/src/views/assets/index.vue create mode 100644 web-core/src/views/cornerScape/index.vue create mode 100644 web-core/src/views/novel/components/editNodel.vue create mode 100644 web-core/src/views/novel/components/event.vue create mode 100644 web-core/src/views/novel/components/eventAnalysis.vue create mode 100644 web-core/src/views/novel/components/importNovel.vue create mode 100644 web-core/src/views/novel/index.vue create mode 100644 web-core/src/views/production/components/editImage/generatedNode.vue create mode 100644 web-core/src/views/production/components/editImage/index.vue create mode 100644 web-core/src/views/production/components/editImage/removeLine.vue create mode 100644 web-core/src/views/production/components/editImage/results.vue create mode 100644 web-core/src/views/production/components/editImage/uploadNode.vue create mode 100644 web-core/src/views/production/components/rightChatBox/index.vue create mode 100644 web-core/src/views/production/components/workbench/editVideo/index.vue create mode 100644 web-core/src/views/production/components/workbench/editVideo/mediaLibrary.vue create mode 100644 web-core/src/views/production/components/workbench/editVideo/propertyPanel.vue create mode 100644 web-core/src/views/production/components/workbench/editVideo/utils/clipMeta.ts create mode 100644 web-core/src/views/production/components/workbench/editVideo/utils/filterEffect.ts create mode 100644 web-core/src/views/production/components/workbench/editVideo/utils/mediaData.ts create mode 100644 web-core/src/views/production/components/workbench/editVideo/utils/mediaLoader.ts create mode 100644 web-core/src/views/production/components/workbench/editVideo/utils/trackHelper.ts create mode 100644 web-core/src/views/production/components/workbench/editVideo/utils/transitionHelper.ts create mode 100644 web-core/src/views/production/components/workbench/editVideo/utils/transitionRenderers.ts create mode 100644 web-core/src/views/production/components/workbench/editVideo/videoPreview.vue create mode 100644 web-core/src/views/production/components/workbench/generate copy.vue create mode 100644 web-core/src/views/production/components/workbench/generate copy/components/trackList.vue create mode 100644 web-core/src/views/production/components/workbench/generate copy/components/videogenerate.vue create mode 100644 web-core/src/views/production/components/workbench/generate copy/index.vue create mode 100644 web-core/src/views/production/components/workbench/generate/components/imageSelect.vue create mode 100644 web-core/src/views/production/components/workbench/generate/components/modeMenu.vue create mode 100644 web-core/src/views/production/components/workbench/generate/components/track.vue create mode 100644 web-core/src/views/production/components/workbench/generate/components/video.vue create mode 100644 web-core/src/views/production/components/workbench/generate/index.vue create mode 100644 web-core/src/views/production/components/workbench/index.vue create mode 100644 web-core/src/views/production/components/workbench/preview.vue create mode 100644 web-core/src/views/production/components/workbench/type/type.ts create mode 100644 web-core/src/views/production/index.vue create mode 100644 web-core/src/views/production/node/assets.vue create mode 100644 web-core/src/views/production/node/poster.vue create mode 100644 web-core/src/views/production/node/script.vue create mode 100644 web-core/src/views/production/node/scriptPlan.vue create mode 100644 web-core/src/views/production/node/storyboard.vue create mode 100644 web-core/src/views/production/node/storyboardTable.vue create mode 100644 web-core/src/views/production/node/workbench.vue create mode 100644 web-core/src/views/production/utils/dagre.ts create mode 100644 web-core/src/views/production/utils/editImageType.ts create mode 100644 web-core/src/views/production/utils/flowBuilder.ts create mode 100644 web-core/src/views/project/components/addProject.vue create mode 100644 web-core/src/views/project/components/projectDialog.vue create mode 100644 web-core/src/views/project/index.vue create mode 100644 web-core/src/views/script/components/addScript.vue create mode 100644 web-core/src/views/script/components/batchAddScript.vue create mode 100644 web-core/src/views/script/components/editScript.vue create mode 100644 web-core/src/views/script/index.vue create mode 100644 web-core/src/views/scriptAgent/index copy.vue create mode 100644 web-core/src/views/scriptAgent/index.vue create mode 100644 web-core/src/views/task/index.vue create mode 100644 web-core/src/views/taskList/index.vue create mode 100644 web-core/src/views/test/index.vue create mode 100644 web-core/tsconfig.app.json create mode 100644 web-core/tsconfig.json create mode 100644 web-core/tsconfig.node.json create mode 100644 web-core/vite.config.ts create mode 100644 web-core/yarn.lock diff --git a/web-core/.gitignore b/web-core/.gitignore new file mode 100644 index 0000000..c1b65ba --- /dev/null +++ b/web-core/.gitignore @@ -0,0 +1,41 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +.DS_Store +dist +dist-ssr +coverage +output/ +*.local +vite.config.js +vite.config.d.ts +src/assets/login/ + +/cypress/videos/ +/cypress/screenshots/ + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +*.tsbuildinfo + +src/types/auto-imports.d.ts +src/types/components.d.ts +src/views/scriptManage/components/ceshi.png +oss + +backup diff --git a/web-core/.prettierignore b/web-core/.prettierignore new file mode 100644 index 0000000..d1e52fa --- /dev/null +++ b/web-core/.prettierignore @@ -0,0 +1,11 @@ +node_modules +dist +build +.output +.nuxt +coverage +*.min.js +*.min.css +package-lock.json +pnpm-lock.yaml +yarn.lock diff --git a/web-core/.prettierrc.json b/web-core/.prettierrc.json new file mode 100644 index 0000000..e2759a2 --- /dev/null +++ b/web-core/.prettierrc.json @@ -0,0 +1,8 @@ +{ + "$schema": "https://json.schemastore.org/prettierrc", + "semi": true, + "singleQuote": false, + "printWidth": 150, + "bracketSameLine": true, + "htmlWhitespaceSensitivity": "ignore" +} diff --git a/web-core/LICENSE b/web-core/LICENSE new file mode 100644 index 0000000..5bdde5a --- /dev/null +++ b/web-core/LICENSE @@ -0,0 +1,259 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +--- + +## 补充协议 | Supplementary Agreement + +> **补充协议 | Supplementary Agreement** +> +> 若您将本软件或其衍生版本以产品形式分发、销售或提供给**两个及以上独立的第三方主体**使用(无论采用买断、订阅、授权或任何其他商业模式),均须事先取得 HBAI-Ltd 的**书面商业授权**。 +> +> If you distribute, sell, or provide this software (or any derivative) as a product to **two or more independent third parties** (regardless of business model: one-time purchase, subscription, licensing, etc.), you must obtain **written commercial authorization** from HBAI-Ltd prior to such use. +> +> **五个以内(含五个)**的法人主体作为联合运营方共同使用本软件,且不向联合体以外的第三方分发或提供服务的,视为**内部使用,无需商业授权**。 +> +> **Five (5) or fewer** legal entities jointly operating and using this software internally, without distributing or providing services to parties outside the joint operation, are considered **internal use** and do not require commercial authorization. +> +> 在使用 Toonflow 的过程中,您不得删除或修改 Toonflow 控制台或应用程序中的标识或版权信息。 +> +> You may not remove or modify any trademarks, logos, or copyright notices in the Toonflow console or application. + +--- + +## 永久免费场景 | Always Free — No Authorization Required + +以下使用场景**永久免费**,无需任何授权: + +The following uses are **always free** and require no authorization: + +- ✅ 用 Toonflow 制作内容,在平台发布并获得分账 / Using Toonflow to produce content and earn platform revenue shares +- ✅ 二次开发,供自己团队内部使用 / Secondary development and modification for internal team use +- ✅ ≤ 5 个法人联合运营内部使用,不对外提供服务 / ≤5 legal entities operating jointly, internally only +- ✅ 个人学习、研究、非商业用途 / Personal learning, research, and non-commercial purposes + +--- + +## 授权定价 | Licensing Pricing + +商业授权费用与被授权方业务规模挂钩: + +Commercial licensing fees scale with the licensee's business scale: + +| 阶段 | 年销售额 | 年费 | +|------|---------|------| +| 🌱 扶持期 / Nurture | < ¥10 万 / $10k | **免费 / Free** | +| 🚀 初创期 / Startup | ¥10–50 万 / $10k–$50k | ¥5,000 / 年 / year | +| 📈 成长期 / Growth | ¥50–150 万 / $50k–$150k | ¥20,000 / 年 / year | +| 🏢 规模期 / Scale | ¥150–500 万 / $150k–$500k | ¥80,000 / 年 / year | +| 🌐 企业级 / Enterprise | > ¥500 万 / $500k | 面议 / Negotiable | + +--- + +## AGPL 用户保护条款 | AGPL User Protection + +> **不追溯条款 | Non-Retroactivity Clause** +> +> 本协议变更生效日期(v1.0.8 正式发布日)前,基于 AGPL-3.0 条款使用 Toonflow 的用户,其现有使用行为不受本协议变更的约束,继续按 AGPL-3.0 条款执行。 +> +> Users who used Toonflow under AGPL-3.0 prior to the effective date of this change (v1.0.8 official release date) are not affected by this license change. Their existing usage continues under AGPL-3.0. diff --git a/web-core/NOTICES.txt b/web-core/NOTICES.txt new file mode 100644 index 0000000..d3c76f0 --- /dev/null +++ b/web-core/NOTICES.txt @@ -0,0 +1,243 @@ +Name: @eonova/v3-directives +License: MIT +Repository: N/A + +----------------------------- + +Name: @icon-park/vue-next +License: Apache-2.0 +Repository: https://github.com/bytedance/IconPark + +----------------------------- + +Name: @tsconfig/node22 +License: MIT +Repository: https://github.com/tsconfig/bases + +----------------------------- + +Name: @types/license-checker +License: MIT +Repository: https://github.com/DefinitelyTyped/DefinitelyTyped + +----------------------------- + +Name: @types/node +License: MIT +Repository: https://github.com/DefinitelyTyped/DefinitelyTyped + +----------------------------- + +Name: @types/uuid +License: MIT +Repository: N/A + +----------------------------- + +Name: @vitejs/plugin-vue +License: MIT +Repository: https://github.com/vitejs/vite-plugin-vue + +----------------------------- + +Name: @vue/eslint-config-prettier +License: MIT +Repository: https://github.com/vuejs/eslint-config-prettier + +----------------------------- + +Name: @vue/eslint-config-typescript +License: MIT +Repository: https://github.com/vuejs/eslint-config-typescript + +----------------------------- + +Name: @vue/tsconfig +License: MIT +Repository: https://github.com/vuejs/tsconfig + +----------------------------- + +Name: @vueuse/core +License: MIT +Repository: https://github.com/vueuse/vueuse + +----------------------------- + +Name: @vueuse/core +License: MIT +Repository: https://github.com/vueuse/vueuse + +----------------------------- + +Name: ant-design-vue +License: MIT +Repository: https://github.com/vueComponent/ant-design-vue + +----------------------------- + +Name: axios +License: MIT +Repository: https://github.com/axios/axios + +----------------------------- + +Name: class-variance-authority +License: Apache-2.0 +Repository: https://github.com/joe-bell/cva + +----------------------------- + +Name: clsx +License: MIT +Repository: https://github.com/lukeed/clsx + +----------------------------- + +Name: dayjs +License: MIT +Repository: https://github.com/iamkun/dayjs + +----------------------------- + +Name: element-plus +License: MIT +Repository: https://github.com/element-plus/element-plus + +----------------------------- + +Name: eslint-plugin-oxlint +License: MIT +Repository: https://github.com/oxc-project/eslint-plugin-oxlint + +----------------------------- + +Name: eslint-plugin-vue +License: MIT +Repository: https://github.com/vuejs/eslint-plugin-vue + +----------------------------- + +Name: eslint +License: MIT +Repository: https://github.com/eslint/eslint + +----------------------------- + +Name: license-checker +License: BSD-3-Clause +Repository: https://github.com/davglass/license-checker + +----------------------------- + +Name: mammoth +License: BSD-2-Clause +Repository: https://github.com/mwilliamson/mammoth.js + +----------------------------- + +Name: npm-run-all2 +License: MIT +Repository: https://github.com/bcomnes/npm-run-all2 + +----------------------------- + +Name: oxlint +License: MIT +Repository: https://github.com/oxc-project/oxc + +----------------------------- + +Name: pinia-plugin-persistedstate +License: MIT +Repository: https://codeberg.org/praz/pinia-plugin-persistedstate + +----------------------------- + +Name: pinia +License: MIT +Repository: https://github.com/vuejs/pinia + +----------------------------- + +Name: prettier +License: MIT +Repository: https://github.com/prettier/prettier + +----------------------------- + +Name: sass +License: MIT +Repository: https://github.com/sass/dart-sass + +----------------------------- + +Name: typescript +License: Apache-2.0 +Repository: https://github.com/microsoft/TypeScript + +----------------------------- + +Name: unplugin-auto-import +License: MIT +Repository: https://github.com/unplugin/unplugin-auto-import + +----------------------------- + +Name: unplugin-vue-components +License: MIT +Repository: https://github.com/unplugin/unplugin-vue-components + +----------------------------- + +Name: uuid +License: MIT +Repository: https://github.com/uuidjs/uuid + +----------------------------- + +Name: vite-plugin-lazy-import +License: MIT +Repository: https://github.com/x-extends/vite-plugin-lazy-import + +----------------------------- + +Name: vite-plugin-singlefile +License: MIT +Repository: https://github.com/richardtallent/vite-plugin-singlefile + +----------------------------- + +Name: vite +License: MIT +Repository: https://github.com/vitejs/vite + +----------------------------- + +Name: vue-router +License: MIT +Repository: https://github.com/vuejs/router + +----------------------------- + +Name: vue-tsc +License: MIT +Repository: https://github.com/vuejs/language-tools + +----------------------------- + +Name: vue +License: MIT +Repository: https://github.com/vuejs/core + +----------------------------- + +Name: vuedraggable +License: MIT +Repository: https://github.com/SortableJS/Vue.Draggable + +----------------------------- + +Name: vxe-table +License: MIT +Repository: https://github.com/x-extends/vxe-table \ No newline at end of file diff --git a/web-core/README.md b/web-core/README.md new file mode 100644 index 0000000..c99b7fd --- /dev/null +++ b/web-core/README.md @@ -0,0 +1,487 @@ +
+ 中文 | + English +
+ +
+
+# Toonflow Web
+
+
+
+ Toonflow 前端应用
+
+ 基于 Vue 3 + TypeScript + Vite 构建的现代化 Web 界面
+
+ AI短剧工厂的用户操作端 🎨
+
+
|
+ |
+ + 算能云 提供算力赞助 + [官网] + | +
+ 中文 | + English +
+ +
+
+# Toonflow Web
+
+
+
+ Toonflow Frontend Application
+
+ Modern Web interface built with Vue 3 + TypeScript + Vite
+
+ User frontend for AI Short Drama Factory 🎨
+
+
+Scan with WeChat to add. If the QR code expires, submit an Issue for update.
+ +--- + +# 💌 Contact Us + +📧 Email: [ltlctools@outlook.com](mailto:ltlctools@outlook.com?subject=Toonflow%20Frontend%20Consultation) + +--- + +# 📜 License + +Toonflow Web is open-sourced under the AGPL-3.0 license. See details: https://www.gnu.org/licenses/agpl-3.0.html + +You may use Toonflow Web for any purposes, including commercial, as long as you comply with the AGPL-3.0 terms and conditions. + +If you wish to obtain a proprietary commercial license free from AGPL-3.0 restrictions, please contact us via email. + +--- + +# ⭐️ Star History + +[](https://www.star-history.com/#HBAI-Ltd/Toonflow-web&type=date&legend=top-left) + +--- + +# 🙏 Acknowledgements + +Thanks to the following open source projects for their strong support for Toonflow Web: + +- [Vue.js](https://vuejs.org/) - Progressive JavaScript framework +- [Vite](https://vitejs.dev/) - Next generation frontend build tool +- [Ant Design Vue](https://antdv.com/) - Enterprise-level UI component library +- [Element Plus](https://element-plus.org/) - Vue 3-based component library +- [Pinia](https://pinia.vuejs.org/) - Intuitive state management library for Vue + +Thanks to the following organizations/units/individuals for supporting Toonflow: + +|
+ |
+ + Suan Neng Yun provides compute sponsorship + [Official Site] + | +
UIBe6MrlFjgKjC;wst{`!`le!u@>wqs70(?TjVhQ+A$|n*?zD|R# zn~P0FU!bl%v$dgU4MBTgo0_=c87?N3Hk?iKwyJ4s-7UU%;&idvX?($sy-P**`oOU)G1yMcK6oM zWP)7A*MJPB@>UiKyVGjWXj!|MbX{)ND(LGP+@1w^!p_5FRTIYINbByDogAws@-f1N zo{M=M;yYmwG5UwmMa9K<-r%5(k^aPE@xWr>5CHD_8RJ7a L5)8~Ydp#>ImeeIrP4VOjp)&cWL9Y*ZEuY**{tol|lVcZ)OgI9ha_a`B| z3%kFgtTm<5`{oDk^kMsZ!jk@n0%wac3yGU1PI3PI(ADYiV#HAAn#-ZFxg8%^>B@9} z)@*pi#IwS>tNA@`LEapbudVlaGN+?9yubeunE{$SY{}+a!mwHET3~?FIyh4O5!t$+ zIiJheic8#_(&TCevXgV(&`L(5K3;X!Y!op%5fZXcb)wM`P|E@;R=EG*ue?2a3myy; zz6S%%= 7e9^oXr?q4Imk-YUySGFd%Zx|%Syk^LGIJbntAJyz1#!_MAgY-v0 !6 z7=5bZ MVn>Bot4@ku@nx$YQ6S~Ikd(H*zi!)pj2h>JM93wb&TFX&N6K%g| zNg`y9`I6Oj-2wrYq7O)6EnJ^N&JD2 zu6X9)19tP_5C$hbc%T?a!EeOFBOkONJ|ibKaL>E1wWVDs18itynEVr&PLnEx;q{VM zrJkKsDJl8eK`Fitf=%{jnZ@8phK0cB(Z+B71$Rr5j+)-p=-6l2%nH}WZ1{fNV7Sw6 z9D9~LZewSt_Vz)b;m$I>+Q^~gmB?WcyyT$I#~Q+ogzX}3#mkFsR_X}QId7SsoOQ87 z`_KtH1Tgnod!t8O!U3klj5;R6sLHQQ2zTO)p7I)W$O!6fu ({pNuV zyV2V|Kw>g~2P1yWCBGwh;QAJgrx)X~Y9Vdc?@7~3l#0IW*yr&wZw5xeDW6rUPs8Hc z#aSs Jx7xcV&a_edtdpcRk+Y8385I~Sd1_`| zf#qKqh~9dLag(dLY#WOyi1j@LWJnB;D|WN`VEYg{*ME#M&K6hazZjXDmd>VzqL(2c zk-5U59IFEJ2uoI{#*j~YJ9rctT)UX^#U%d{`!xUI<(E%#Wbkt}I<$b#UY@XUI(5Th z`3PRIT9fa pW9HbQ_9sBaGSjI{M}zXPIKNh2-A91S`RfEu@a7va%5g}%c2k`!OXLf zr6`_@ <&IbJB>P%9yHtCQDsNI>`3VsFkTa|F1 z^L1l<%fQT}>OebG{r#S@*d>1Z8jn(wl)mFJAzo7?XRh962(7O)1Q^H3PA?nlT}s;! zVoD%L;G6V$54Kwd5H1Y{Jt7Zl!05GSQP_kr34!$kn?CfFUXudkgIjU+@1AQ-p(kaW z78$P3?FQcN2YV#=1<3U9_E*>wv7QOuHElCj&m`)>$Ico19(N@lB0$QdIm9M3R4xv- zV-fOd@Yba` >h@p+TZz8pP=2dZHM>^!)s;tnKR{W z3$~HsLVB s9r$hM47#Q;&{_v}5SD!?hIvx5{>cLwgWNIS7_4J@O|Uxu zCi~r8>aiY5U%E@>@-6K2ARv|_9cA*1ZNS=I@waD}FFpt2J8I`x-W&uWMwHdHSz`1N zD`#!rEo yxENSo;Jo7pIH5|zK-b{ zTmJ27$9T!Eacrz&BRclCs79U$us`oReXC>YMMtftW~liuyeP(02=k8q!fGkti0%8) ze%BL|Q;It1WJt|Q9Y;JT4N;QA(2jFSVRIFp6q+8p(Mj$7_Ji^*!!jB|TSYa;qMQ15 zhAe}gdFRM>f_vi6N>Dzfm)@75yU30gW!*_#5Pm4$Y;$zwNtK3`b_v0PaS8qzN3PyI zGvtRjS!K)do&2~@<7%36uuqkIaM>GTQa25ohq+qK^vjuR9^}^oK|bt=Gf)JwtT8s_ z$n65kBikh00Qd4-{IWb?N!Qeq926CKlr!lNemdpMtRiMnNgzmef!+2Z1Gi98QJ%4> z-=&X*X1guWXfL?CtK?gTX{6ux!o>0BIRieVZ&6`=9;#kv(?d@P-b{^=EF(7m#W$O9 zAn1B}CFA;itFqRN$|Qvb9MK3=>aaE@aC0gJj5J3M;cq69#6!8n|7Zr2ejs2j3#{sf zm*(gsP83-mNR#tK$>4R9%V=DeKmY60P4Dv08ROS4KFNPP$jC=_6(DT*IfWmN$#EZS z%JYBPmE2#>)MKp$bzAXPL&&E!`+E2u6P`(0kgxOP{SmX|Ci~Y~RYfzwN)W$=QGW*U zd%(S!HjcRzV>~`LrrY9Mf4FQvnaK6J1*433ee=M??P4JvxAJnYce`!ix9FMV*6tl| zk1We63lmqd&3d8 MnS_owJM* zflzX*x!(;d-pv3|>9t7c#jdQkscNBY8v<7tnhcd{n=UTm)%-@H3c9Tr>#75CUsPXT z>ikvF`VN*oL=KJM36;OzBT{zQG?CI?1vX@;3us*aR(RF7{PWZ}vod&G?uaXz0DXKc z_nAB#2s?p35!Epbh<<8WB}K>&&A{O@u1A_}2JaqiA)WtV@iwgC3Ew}czd}s_tS7 lAMrl*4CN(Su`@K{h?Sfk~+Bcw6$V z&|PEf*vI@u@jZc@ZluKt{8jqsT@iIdd#AzWv9A)*9_z$%5>0*%W85li7iy$r7foGk z7%&L+n5*B1HQ_M`Q9 >#<-1+ET0wys^IEL^AbV>WFgF%$X2~e zd`x6kh@vw-t$`zUs#_7m*o6Jz1mvzNc1CJN`*FRgaGN(lFEzR1i&68*_YYVf_6O@} zhQS&@Gg2w}HV;CttQPIKQbZ?+oeTgEg#;b}gLQzkvbh;7N!b#>esxA@Bj@Y)?UF*f zJ9pR%{T&h8!VA2#8MGcG!!ilG!P&Mo3QT@!Bz+$zej0?;$Auf{x$wi)`0}S~4U_`s z3c};F #zHnuB1$6>0dt zC oP2W4YkU6g$U;`;ogor&aSxi9?ieV3$9L!~Tdkngt2jWFqIZ&0U&rSZN@ z?aaBN1-pfguO~@vqCM4rP _#Pi5v}%k+yH#qV{8?_xyI@_> FS24Kv@V&nCW*iKb`>x_bN^+-xO Ih_X1dAFx zR9%BhN%)#oWb$GBmU~o|lh516Nwt{sDEd(G@4*sI=x#Y%tX{enn1`%~vF-y)0%1oN zbpZAQ;Pbc9;`VE!+l?1ASZnX70@sQ`2M!f{Tg} 2%uYrh zJL#-scH>USz*S(ZP?o{E&WA`9 K2`WyPvz+=v pQhhX#UG z*UfaM?7LAIR((1(R=M;*oMpO2_13Z%1A9gxRRr6P7UalpD~rukwnT*%Y9jtMlM0pL zm6ksJDU5{@b}Zs<6Yo`^@Oc`~yRsSRx~dE>l1wh`bG3-kf017ggW^6aC$6Aa%oVug zU)Sdn28+uFA-5T@XJOY5wt-X5KW%oRRzQ<$6Pk0e#{Qbum)5uj&Xp|v=8e>1tcuMC zQ;25w7rPOpS2=iIYHL@+&dp+7bLP`On2T3}BQ1Kil29@eM!JXdCNN|sec@(gl;gYg zEwv4 68&B zfSOqiw<#&F+I>?Nzn3x-41sLJEE;73 ^#)lqf)1MZ7{59%5!@vm%59ws6efW@wD6f#%#!} zcO_~*f5ikUjo4ZmzfCDSBCvEJ?@hMKhlJzZT6)vLG@n-R3#Lq0n~5fKqa)VSq7Gz< zLLH&`+%KxRtPGPS{pu7E>{6MU3s(azj76-dfVCGjkdSlKjAJn#zd|`8Z^!1Tkrr!W zPdvEd#=_DvR!EI}%Q_pmB3jyC;nNRTJW50zz8k>s6yFSX1PbKl>OJ$3vR{-bEAxat zHdoqa!oIuB#N;G)m_L{f-vy)aw+gYZ6NI0!nv12<1fBsdNtk8yqqdh`c)LEQFER4! zK*pyitv-mBV*QSeQ3ssjk`ymxbE$h7o|J`}8jcU}w-mrnOf)rq|G=3)uMV?>E zk>d$95J?mRz>BJMLZh=|Qrq?x+I;uaYu?;vnjOeTWA|Ubeoe2ki7S`RZrzz99Xx_k z{+~pwkC+K$jeHPE@Y?|y({DTovn?+FU0Me?U%$ @lif3t zT3Oub5(}NL?sAa}J^t%#TI)gAN`z40LJ77go?qk$husMMD nD#u0XUYWg}d%BgM1@;bnGGxk6hDbZcY z!@KZS_k~}z#kw}=D70i;e{5E5dEurN5`W?nVHJVm&x^&LsLIxva~N_g9}fxT11_Tw z%)OcP8RS!x<4|T)<9v)&kL=%yORj(r=VyR3s)k{V6DB7F>?3k_4BMO6)VGZmJIz|B zIYpVNT ic{{BYH%)Z?{>O35-0wO(1kt8e805;6ht{ z-k0|J3Geu{p1P+2)ZS Tts3GA*YlCT1Ps^GCM00=-IOmB?YdJ^xX%DD!&iRvzQH)`%RRXz zuq=;vUU3{YMhe3PF9UYKD1vPqbWc*u)lsCaDi)$y2lYOi@&-mFv<4(9$J*P+Pur@S zo`@|cl^CmpJgZ37;_>(`(8I^nc>45`9O-r9>)NJoGU?n&c&NH-9AXe>t` U>Ejx8Yoi2 zW$m3SNH0nvBjYo@-FrtP3M>s6;$yX9(0p4p%B^HT`>)35_9igF?I@m_3&-#vB+Nr@ z*Mq%)WbF9>30VCNo3M~bo+1JTA>)P5*LO*iqO`ln$85@G+V>mrX$$7^QU1 uMbJ zFMg-7dh7*lLe`!e>}+qCZ=8cynxOoclb7h%Hcq2DS|KvRJN~ititKY&c~4q6(wV%l z<#%9yKo2YktL^jJw+q)8iN#kaTuux@*i7LF(>TH(( z3%<}n5TwkN9skJqoObUKR{Ql4RduJo+v0TRIBQrgH!%B4{TltkSiO*(mMj`^FZI-v z^G*0vfm8GOe8nBB|NGu-b;|@$&{1kTx`fM^kH7Xd9BQMaDjGO7L%Vv$yy&K+EcP z%k2F>!(De%1sZ9gF%122Ea@OzXs!%M0}|gD!@xl w}FRg2ss~2W4k|0o!C5rYv&ONcpR^qxC_j zCrR_jkf@S?90A9+q;yR@J#UbYbFfoW(|j9WDDMx^06QCrwkM3(OT_1WfLVi{L_!U% ztZ?$A!Is3|&z@6ZG4|c2@yAg@=Q0pDhh =KD&dH=qx1(7X}! z*gLD!`bJk7Wa6B+Z
lG;^7QKfsI=|`V?Mwv(elDx)F=ys5$?{9 zM(e!$A=au%DC^j=8zbJhHpfb{^3fPWJBtOA8_LjiMV1^JyBX+RWC{ok5VA@^;Im33 zmgIerw+qjh*xbCvF5Zwo2HcEHRpi2<@9 xt-+}=R(2I^VTUtG}4+2Yq4Y~3ZXAcfAXWNlX_OgRik5t z8`*`zBWwwDzJLCI2${l+vcr7+e>L-VLZ%*13YhoK3m+AlZOTl$ln-r=YN$Azh0D#A zVvrsPc)2Yqg;MJ{3E4ct#3uw;rW@ochu}=I_lzb~9`x+LE)W2w{{gKX;X!+ LEZrUYY`zB L*VU~Ul|LOouQL||1uy`@Q zv8XP z@8XmQFy23z<+hlD|3)VGljHQeL5E~jGD@OChn1S2G#sGE76XfeJ(soFjjAeNhi<8w zjcOa)=#vfo=kk0VlQ1|>02KxpV{ tr%V5&?4Ti|F~ zmwn?z$B85o+&`cvqgMOlJdQ{puh+lVN6R(Q1eR>pYCdnxvSm>jh)jr@=l^H;)s*q= zOK-ME{Pv6g3?DMY5%Obs2t(?=ZN;frXTYYwvaa?&N&)$R=gZ3I^M0^UK^yuJafa<~ zxH_PZx1!lN3^0#nrU(>T{AP>6Pf-y1RtB#U8SPV(RB)*5OCqW3CAv*o9LYuXXXOG< z@^I4%rE0z1f2fY#WD;1D|A-9;){6l<1c)T$Z=&{9LpCe#;k6Sd(mHy;v|>=-UXPe5 za#fB*{oy?@p3}DCWeDQ> 7lJut4w5(o_Yg3HAgMVMjdLgoFzm4~+wNoK zXv<;mT#SVkRDFzO!Goi4s{(gZxtfd~%rA*_H(7&x&6Qb~tULOY@^&Uq0a I%iZM2}e 9CwimvdT -q@{A+|@XQ&C>(vv&2 zP2% 2 z)1IaQt1u`&@wo<6iFd_Ac0c9|jAH}gLeM;ymb|v9Lt_tyPEQ 5P8igGDlaS~B z&ql1S+9R~tMW_i*RueEqi8d!q7Gu=2=>t2ft7297v1Rd#%+P}dE_y!hM57?DPb&oG zRJUG)X~ H4_5PpifhQUG!-4{1) zdgf38yf~XO7I}kql58AF@-yd9wp4-XONCr&P+=8TZFYLh=p0JHPmmn)fd|cV`EABs zCOy)ViJkZwQ$Wm)a*~$yWLcg#Jxhe6E2L2!)s?I4n>~GAtK@YG6fGL{Hg3iBPJ0Gj zccc~r!;MBnNw{P1TdYj!X! z-yAwj*4utW&M8Lix4;28ckBqO?K;ghU~_((rZ&P&l;D~sTn4uAYk`}6vU{(aYSxWJ zhD0nriiGLM8Tn2ll~g!m%j{#Lo}(X0&7BwmapV~@aRL4i$RoMQ`L%FWbOzP{P1#T= z#<~}**ENx!fs&J< s?J8_gUEB_xI;lJiU zt&Uk?np%JGSv4A%P}SE y-gpSAg&1={KQ{=5-JqfT4k&`KmH84 zd!jS5L?a{}KU7brBJ4;FxY#HOt~=P9Z!KfgHt?NP)%5Tbd{P>hmfwTf{|WVZV}4=q zmSz=POLT?Gceo4)%9#0uT>RRB;13dgH *9< zMrW?CHU^M3UcT>SdK5m;Un(hC*7n}l5TN3($(2nIe1KKk#wD(5MN}}s?rJnt%!|Q$ z%7U%9P#4rH;L^pwMEWMLsb&y#%U!mAM4zhhT4FI|)JQ~=9W=seXCESB2$D!^yUvqq zYzG5A(1Mlp?DK?MN8*KNyg`vIhaOo_1q7Sj;BrD2T%pht2D1)o%MxTpLS%hfj~M0Y zdOjUw{D9{aFeutX?4jSN#T>v4N+((fn`k40YTr1O0Jjq4y7`N7P>h@Q-?CyeR3VPV zgu6;D^Ne?uEuGt|F@uBlEhtFCzqFuLz+gUrkyy>(l{c8-!wqei4a_N$ZJN2d*)48I zjO&< 8SL+rxUpMbPE^}4 zUKBPR5SralM~f7Hs7<=a|A@Q`CoZ|lv<)gcjiM}MF(gj^MV+BFK#ds*{UE^yDDY>0 zlfnWMn_IU{WX3td9T45!Bv>S1l8`_oR0L|8*y5>)(;AIIqwA6~)vGSk@a^^VA{5OB zUu;)meZGN}s4U6~-&xi-vYQ`_aBK>R9rk6>oveLp>th(}X3slZbxrr&m5NFq @O@TgOn_hNHZlmRBFs)I|GyZ*l(~4MJhVPk_ZtW;e+GgSj zjU-xKP|Q^x EoEK)z?)U-m^#Gf|Na6V KW)0V|Al5gU7dGVF)Og@T|8E4jEZe&uK9-~myux2l_LY8aDlgAi9i7{ zw{^axkGP_=q3wh?BxZ-9@s7S5FS>ZHC;5+#33!vV0XJ_XYk{t_#efb}mXYm2{#J_tI8wVCqy|HW5 z(dfhxA{o5Z#y0Td>(p|?eOPc;eEzeciOE~5tk{hS%U{@Bw|{CG7hvnRPjtjkt{iPx zrYl_aNLaMbd`?B%i1>^`7ZwrE4`BpH1Sh?-yx%K2zdGAE57^nF5&tPo-Van!#huxW zZD>{%Ss;0lGLTnSi0(s!VNnGR8R4?#99d#^QKo2a8?UXHbWCsM_|3~qAn6?L-s9Oe z5j< 2RQt=sx`J7k%bZFXX4M 5nLX10%lhEzqT6T5Z=Zuy!+hT zDkBU~ceqOC4KjDa1q)m=rRRSi0}Q(w`ZG%3?`H{3{ 4>f z=@@a&4MTVL+H!`vMA-J|7%C42IH{=_tb)i?0`90O#@RBDW?Z1G^aguXW ^bG%h?WI=Z@dco{(H><;|q;HMnyhr=W%gVDSAMr|yQGKrxud zq<(tRHKN~Bd~%j0%hEyplQ;&KUFM`I#187FhT+B<`pSyJ!(JGZ0NQ5^D+X8cxthAL z?g@kT?e`r@EDle`z^T%yAvOp$;mX#!x6SIDHkuCI73da{ls%;vi=XEsz?wh2^Y`bb zbVlAY^8Yq1aEDF#j`-p*5?T=sQrI@*X##WmZT#pD@|}k)(tMjw&1mCD_Cwr**2$)W zr7y`Ny)v9{yxW&*54ditr&l3dd#IMILzxYV*sXakidGjsG;!Dn7E6Sz=tB L1&@Jq*F2DY5y`cM)~YM)zR;; zUK;W1z6jvHC*Z0sA@ z25sJzS#yeK5A7MqGq^KHA3Ov_xXiibwDSpvQkAw%MHd>+HEiK PA-KsC7^fs>m8&poYEtC@s!kvqz(m*Lk8u5$vz0 zSM%L09UUHzA1vz|sGM+}-=Zmiq)v)1TvJ>#RGqj?>3l~0)csD+&wRQ7vEyvv8 xOuF#$V-Ro}04L#74^04i#f-M@wxO0)kgcf%$bO%G6NpfIJ} zgo}Xlk23T|z3wKr2`TI4iF3{4sNsB>MdReNVBVgX9J{lhBCl6Wx#rCg4<;co6g)(j zi#9-1{@InCc>=?JBc#X&r_Mf$5uR>8*7AtW <;KWtDc~i8V`1rN+_Y7)T_~^7Y9wS`l2^2^PxtgC9&au@pU@qc zB1+Z4^xiD(W)(2^Hja}D61DGs>ms=U@@dE3W~>?7QR)HT*8)So6MF&QSfmQW)~glf zj|~(zU<1Y(1}WMU9+mPIDYvxrpHeEL_E*E r>4#uBfQ;>HGdM}woj#6m zO7ngXmU 9B@AIK5Hl!Z$SRw>w%ap2`+?6F`$}$g&DLskumsY|e`k zbc*pXz_Y66rWa_2|9oQ^yc=AF7yGf>47CMtrMDPFZ3_e%-yAuNGsXQ)gbSV6IBeiY zz1rj9k-yn&;pxOtDSW3(o_xf;;ZPK;xWZcTOcK3w-pAX%;9T=&5UmSu|Mr7I zsQoJ%<{&Gg4-gxEFp+M=bUkP*w;eA-t? Etd4s>~`78$8F5Wz5 zCNZioe)G?@fWlu^vC4ukO~>i{f#+hQcQp@cLsq35MIscBxdxpCa)~1(fh`r4on(5F z6nPA`H0r4MZ&1khoccoSBgWUl={}!9iH|a=viuP+^#yu6aJQxg zugZ%l+Pxa;rM9v_%NZVuavs@m$6n>JQ`h61zz!n|09DdfKODXV0=~g&2mEbWqR^&@ zK=8X>VMAPfi$Hnf=#ut$h4hNJ&Q_oiM~&t?aRpx>jou`=`$ZI(YtABg(+WO?=eDWU zM3^?7kqhq%VKYL#dpyJV>L0{j%suLWGaU6Ns3n%3nv}p}&_*nXa)+|5lRtDC_>1#_ z_Dc?*Q$xIgk;-uz3OT5UEKBA$#}Igkwp<2T0RB} jbMK zd364=6RYigX~_XrWdDCj+{T- BrwfHE6 zU|}x$n-v7^2%1 1Y&N*RTulv5P=k>gv z*Ym!?S(8%=P@;^tfdouTB3Hb!|S)1i<^auWYsS@ZHWY>=(R+aTA%Z$wCDT$dtfM z(kLOBM;F*Cmg4Fo+=Ja<{^BCL_zuJ<&c~0fv5=( dYT^_5KQ%PC@=b t`U1QpQ; zWOfXOs&Gp57cGXg^}h$0TpabK!(20i*~+h)(g42Yn1I1Xqd4up0YQDS^cF8;t2^#{ z(q+&sVd2r4-eBR6-^#0>1z)xTmpa32F6&v-WUR+j1ax6F)#B*jBJY4_@1Z+-YP9yv zf|mvwpVB3Zbj;?=aWXu)34q0EH+`D1ymkx067)8y2v1f`l0KLWW>NkN_}k|U5|e~# zFF<=eZQPV^h{byW%jSxWe&B| q%MtN;*N1(MRIZG$tIr(rF@Q=ETS)T>m<}tB(B*WhDb^93OhYt<5*jrdUr->S5 zpFDcHyW&zQkdhnEp}DUqxl^=!*}roI@F` m Rk~W*9d80+)3b$^CI% z1=Oet+9sb1-QCj9X-H)40+jY0cTOgJASGGSfqoY0f5O2w%{%Vv3Mx}-B=(`SfyU@G zDi?FK>2hx#x6@n4)YM;VIJm}D)|bISD?#t*ox&AZ$0H|W;cp8spM$F-&j0l|s={%_ zjnRHB^3?&Y+czQBK{(y73cgsH6jXmO?L*7})4;s@+7DCbTT!w7*|iODKIo@W{NV^B zV5n9iW|*_)KtyNuBUaPs1*@}MR}nj|Y42tG=Cpg0s21PDrg16vTrZYR^h%zS`sZGN zue~0|^pw1Dozd?i@bq%tD@{4XO4pRVPF_u$@wTNQ!D{sN%nDo8reuAW^!cO^ FTFqcA60j^2*#61+ZA3xTxk)uLX$+GpJvpIYR)w?o(o?}v3Wo2 z{rnWslIi&yZ`<|1$T{rtl=7t>4^7z7>H^~;lxKKmvF*T?v&TnN_kjVOv{cmt)1@ny zA-44dxH>bLU?Dl-uB<`2u5tau# UeS(tK%U~ ziXGIHFZ2m_d*{L?ZuRm~yWzokfMcdd3=+*^ANwA!miWu79rHrWsbxcDf7VKcVntVn zD`G0_=6bI`ZivJ)=(rUFzYXmyAO~q>s6^0vB09)UwJdqOyRNjVVf@4- zK~|>caKoYY&7YM|_w0jHAUDucBc4e1sBB{6$fasq&vmBReLbgg$9ky)Z>jK<_ks*a z7otR^&uOm1@L(!e#e;I>k92~MJ;Buh5o9MZ(s|;nx#um2zxVDOmKK+K6B9}pyy{5w z0`C+V&R*xXt5TJnH!G;PtMOh{fLg>lM(&app=WC6ipPEKo_XB!g1_mLJUUY5o7(6F zVl8 X^r5)5ze3izktYUW~ zIe)Z%#3Fp$r0>^l5B0fr=_^mMj-eN%>veyB5Aw|HcOlMLtz99Y*spf=t& zmlLlLv+L5`D7R4^Ii4h`K*HD+pW=Zv2R1^s_f)3e(Zz<7r*E6JzhV`TI1UbYcU&&Y zSqs`Mo#B)e&_x`~I)8C%065W=AWCoPuiM$i>+82$JkB06?I+jyyAW;k?e)}DYMZkA ztl9Qkw2~|9?Rb=X|8@1gQiG11cCieNeStyT* s4pY1UjcS_H-npbazYdhH6wMyp1k^=I (&<&ZmQVhKOl42|k3;nfxf+&&Rr`do$NXUAu$DZdS- zwd+1^rOQU%?UOC(D%L4`@?NqnU6930^av~|%N8yzi5<6S9rj}DhKcuNZ8~5-my^0+ zr1(u?UdmR-v=E^M?60YN)VIEh*ypi9qfEHeCPt*p#wd{4r5ae)X)L+ks_$$m&24AV zWskkHbS_zNf1ZpwpJCGU=Ht51&78kQ1l|Qrv5f@>>_0APmaysuU{0)U9*2mx)D+B# zMUlmr{3=FnO`j0xp$_v=0F)FOT+#{6_5TR{1;+uX!RPJuU!V8c`J*tYG=ub5>>&37 zpTPM4$i_97xivG9p%^mwHMXHB#mw_b*Ry*!3W*8_t=?fzJtxyVM^^4BU3RB|XFnjk z_w$ZLsF1i@-})&6HM&>Cnc%{qxS1#9Lu?oeN=y#@n<=%-$Yi5?hiqw= N)IwHlRK5I}5#!->q<|*!8yS_rLvB zk8X5`dm28oW4Za~^$hLJHDZFN!b@@O#neG^EpEI*#uZvhe6IV6Uw#721{3~%7Srz8 zdn6ZtVv;6Dy{DGi@y|MAR%5l3E22T^H15e;aiS-$aj3Aao`{=_G!us>qbe=EnfvY2 zGH(H%R6ZJ|nv4k<@D`brGLCFcq0-i;^ln?nkgne-YyV9K{;Y*RQsP_eXZuckj%8 3hZ}mqw^O3%I%ot9} zPg-bkn@e`|aNgd^?=>!%pVq>#3(L}3{3Bsjhq)pi2{tXmn>m+y(us;CxX&rEzj^a= zU%(hsWtM~TIT6Ym7{?x)R-uvx#a+L6E1nd=6TApOKRQkIB+aCst?T1jxKDJtzV#*K zh8-HDWbNxD#I-WZt}ARB9eI8Be5;DWSG+B9r+6YKQDPukyia|OTWz|Ii3vl~ FN3a%Fn?U`sVzOyv&4fSP zo;+MC?IR|*GMu|RvbCbm#=Mzh8FeaIeX6yx=M1^p5IhMU0_S`AD|fy^g@<&CUL0ai zIut#|jknGd;COKi@|wJ ~E=0o7;zID1ottOZC8hjR zYK3a&w=9|XceZijE}m?%MkuR~oT`>c)UvNI%}C*i>?dXJ^c-DNGyn&4COAo7Z`XJK zghTe1%g~gs)fS-TpB_z#+@+J=YAO?1BfKh<72X@nsCh?R7_8xKJBb_Sv~4_*3;AZ0 zo|8L1^j0bKW=pwuoznX~KR@4(!k-|Kn<5DZ;VD~J_U{fCQ()hJN*XTaoaFU6KRD2d z_Yz3cKt?oq$%AT(^Z%TN0OfT%<}jEKv=^gb*Gtv*o~siN_V$|Ow)9dH#
0$fWer0D^2omZ;b%nv73o{g>n^ z{-+p5kaI>RESI%z^H+~nQ6i1ndSo=9@Iq+YacjIln1txN1kLm9Jg$l%%qcMS;_Ctq zbFN3-5?bD82w0oYQ%fZNrrTQ~2J;16y&_?5;8<(Msk=BN3x-Y7_-@hq#bmVJapWZU zQ5JcUif6(Qo95Qb*jZ%KUqV}{zD9hDT^bd*0-OOp&7mo*h(L=C1okD@ZxXNR3u!P; zXsf8YsPOZFY13wg7Ps 19=Y4A9NPP~-`mk2JzEl};nVH%H5kYvyyEN=Qaa9t&P zKi^Y0VUPoj;zk}}M&p%5->x@~$#5-+w18{!Zj+`CNwyC)Fj O;w!GfPmhe$BzALML~3)){xlmWU%CNl_6) z%bSA~uNulLTDl)4#X&=&g^?I>V2Kyo<+V#MtQIVh*p$1+Te9Vw!dw|Tw-W{{-e9l# z0N<;AAOgwb7`$JFm=7>F0~f}FuEXOW9Ge5J>C%q&-+B()X7+8d>DZPk-uiz|mw?!M z7<6>V$vbW6JGOk)81ZOg?PW;yOm<@oz2sSQ3||5;$E{?^cDAeu*U(`GJVH~iR2hld|cF{aE|7^(4@$GMf7T1}518^`dIA3UHnQA_XG;xQ6%HYq&E(m@1D z8{u>uIm)2%!@Qu4BPEGKflQXe1-D+>hf$RMD61-OMf&NK&&F#=+QZS^)w`wIt}^8C z#l6{@H)L%Vt6uDzm#t&s(lb|Ms+-q CzdR-D(gbspixk@r zA9Cad@n_LE+(aIiFnw-}mYe|V6c2i*5C!_41~XPrY*u|q!pv &4~L3y16mnyZXHjgZxl`klofoqM;A#ob1Ou*%l*+Bhmq&?Zl>eTBfnO;qC0%J z(L9_uQsZ9HbZ!&3L)pUvJDO>mni-ZCV_W00*NMA!hb~dE4WA#gYSMj6dnF?9%7$X& zT9%kBsO$DhSHkqjzzkeu$%#ko2cC|~$^K&TGJ^B_w;< !ZCTlyPTuWfW{f&4hmhTP1GU(! zc$BZV37v1v%E?;e$tK33wFcb{=0>|QCHE1bybGdK_sumCEUD$?YTs;`zk?Ws$p5WA zp7Q-aCV0L?Mzj~8tytk)3Wd))MXT&L-Ljw7i`4?{le`qM2cs#QP|ft*uj!8Cik!cO z0^kap5fYHrbPUCpAs6mM^+!SPN50555T(DY)|7!mq9GUK Fpel7)?>Y8BTRYm$sQtc6s^u}M$;>dj32AkS+p%jj5T<^x1+lM z())0vq2VcjgH=bLn^M)x(A?L%Z38fREiP+mO7<@M{kPYbhPEL&jd6$jE;GLmRTP^y z|J)a4>p0V!>|}9qqGp4^hc?GVU_)xl+dZD<-6VNMAxYoi M_40(yzL`!O1FdV**qeCVDrN*}&A1Siav9Rb*kK|KIegAo!qnCHL z#rUektV?;V)gwqDtwj5{RD+rgW=wSjrw##kM>xW6dke{~@3uE<9A5eJn87!7X89M8 zhbsjJji-FOaI9&T$&{?ce-I+UfJ@L~D|ys|4_HmN`a#gYC`O72ikCTk*nX1+l5+sA zERsA;G$$X<$@51?!Y8^CUqSmTPtKVS`e;2*-c$Zzl(DNOK|Yn6Nku*p4ZoURq#rt- zoxCU_9LC{aSwG0Jz5jfZzMz5SYKpUyRkSXLs_ftzI11eR&)q`rluq)35^aKC8sxCq z& a#JXE~bsD8DXbYfe$mnQxk2&lPmuUQ9WxMYP F7?Z5`$bkUE(&>9!@K_dnU82 z{$xVo_zoat`?AUVceF6Ui!DO$o}F~>`R(ZLD99h^;R6VauHpS30` U zFIXyIxHdJBy78GT`o4{!@6wQmqBJjsC7tqob`)bgCnrgrven_jwADuVbUHYm(!Ut= z+<2QuG#~y;Os61wCw_(WDummqFM}{iJ_(m(m}&&(3BRZ(Z>@uSJZ0|waboL$vx@n* z8(t(cs-P{{372{lusw;Kh|ZXgKnBpfBH|$ob3jK-Ji)U`o_#4T!7X$cxtmog7)(^^ z{n>z}`X;=xyVsa~MWZ$gJScLfIVpJOOlSRi_?*10PTEh7=U0PXTgftSorLSJMbWAx zB#KWZE8Rq1c{!FrIqh|_zM4|z%*S2Zg8+eWV~ZIjSxDicu6H0>`4%AIsLb@;?Qn^v zCH6x{j?&@cJ+sNF3K|ST_k}23Dvcoy4K+bYGB#t=_%-v|(LA ?<6|;g-x1r32)hYdd#Wbz_ZklF88ANV{Gob`+76J1g3`^#D%}4)#()-?ixAn8K>Pa z@=6g2wt )>+?$`hLPR7VM^)`2QT=ym=58oiqfgEG_K0!885`U z2f9sQ>)=bSVyHJU{M-R;(<69KnBw3#F*RiG&+8qzpPcx?otLs8fiNX`VDb=DTS9 zCdOKRas 9>k-2hg+ z*R-Vn`b8@}J6Ju9N>Ot6fOD}bPn4v%09o64BkGir?DK~EZ0m{uD*Eyp3y|#%IF>Ty zn|R7=;nFN|lMWokU^RTjC1l&m(A4+DI}wWRLd2-3hT_kXAqRp)&iGjd|K2XwI(QAz zHy$aov=`II0%GLjW)vxsHi|9|7Z8R m(T_VwsDin9l-M#WYP_WN%%z2@UpB*s*px;#K*x(-BUh!e5yZgf_ol5OY7nNT7 zL)}G _l4~bK6iWV`kRLzDK+Z4CVpMJcfkh1 zg=%Mh=4P(-e)hMx_0B%^hK{vqM|>5c45Rc7H-uKM=)Z7Zb^EAL>wr7U;dSE|qxY%b z6F5O!*YDj7iA@R?&OSMMFHJSJUpCax@TzE-Phr#Mavc6*(`$)V8k@>7wN67Nge7|T zh(`WDVr>apQ+p@>h3%mEjLa>jdzT)Vo3I6ipb~VHL)D;sYyL^CZO*&g?=doDYB{c| zw&v=*T_ss hsqmRsT?e67Yqsg%|5QA+46uZoM`BC;}?T6oh-QAs_b(yr~m z^?f$a6%P8$*Qxru9XT65JYo~Rr2UD!Pz5qb)z~OlH`*---=xX2O5>z7jwRrKsGQ>! z%TP9GQhIqd_QI4I@VL#7%6t08zWO%}t5OFuBx&%p9gnzlyKASnKiYu44iiD;YBds~ zi5d7A=rL@DO!U6`JGzTyM?$Y~MW_NBbOdsKHf >%5GvO z6FoD}(TdeF3r6L +qSJIU={dA%cpTPHl6z+4sn_+)q4 zYL7*|MK8)X53g%6nNn8qqF%VSIMv2qr{`)dVOYCe>()E*Do@J@%e0U15DCH+@OBjt z7jm=G&>4 (%2} YDK?X!6jf zp{Q T==?Y;FpT;xU(2%^rq?31xC#1#_%E{zt;ae>yBSThcJzOko%&mw;pw@S zGoM24By3#>s=YHoe3#*{ng?sqCwN?f^OwiMq4pg-MzFH7ta;LU6K35x55pz#Qp+~( z$J+pJQbE)xE^9eEhqc%3b}F}KF>IF`r&54I?)a)kK?-~sExZ=(A7{zxMY}SmD)u1H zP}DT9-D)Cgg4mroL6w}q$&$3l` *QF^Wo m#U&mbMkyqe=uPKTcB3q16siqz0{>d{M9@2Bt^cEI(q4Hk2i97= z{>-I*DS9lon$^jcdY3sf$Nz`xe3MSLM~$;!+*9*R*u 9&NQBqYF$ z(k6arUE> ^CZ<0z1T*=s?Eb+)59Q!&v}b6!vYwNddQ%UoT|TE*=`7 ztWIb}{cg$i#qwU0QFUVF`?-dm>vpfKwmdLLCCPb%m&Vc8i^|^4xvj@Whp$d1bTDcG zpMU;a4Cs41jRfGm7(>-W+y}g<@u+O5_FmZ$r<~yz@?yEAybCvM#xZamzKv-6vXaUc zk8G-K{?u%FHECvp+$K~ENix@=jpB_LI}nC&Kd*12+&Q~M-E!tSxw7l_sxt#WEjkzy zd*R%tvn95QQ}qh>aZ+9(RS)y_*IS~F9QA{}Tr%8EW1Gg?uduLD(1n&&(0iYIRr ;7AsU$~!kzWC=vyg~0JF|Wlv#9$=P+<8(yrG= z{ILu_Twe-N)K|%4NQ^N;!qz;$dbD@Rc5^3VMT{}xXccYT;UU-HIAx1+Nqtjp>i7Lr zT#qeLtj0Lbi;i(vODZR2NQQz#hAD94trgXDpWgh6(~GUpAso9wT-g<2tTzj%x2`ZY zdFq*1TDCM8eYlMtPi9Q%4P5Gi{6=NfI4NS3so8Blp;m2FwQz-_i4!^lIK5H-+3_X1 z12j*{Z?jPC`f8~(qsoJ&QJ067Q6{E&+uXSOB53cYl|dbEyjE5v> yfWRdP`)9! zP*b7cj9o;*`Ks-HpF2dujb5%SUo8&+2R{}QjS8ecS4VX8FON5BRq;(~iAjHxn~O{R zUQztlO06^@3eFnG3lBsnmUR~?AI+|LOQiXCW`urUYHYR|>4l=gxAswu^TRS-sKGV4 zUvCVcXWW#uf<5(5Rf6n&X!;6pEhTVnmjK z&d0PqG|6q9+ OL(;h~}?WEXO%^U>kB3E~E~@< nkan@;QJq9Alm#k>wK`-PCDL62lGQYrO&g J2V@xmarQ-7=H20v)lbr%2J_e8XH@-!dC*- zSbuwm;j^oI8H)k?2>Vj>ZJKxD$iagiCeArCR>L}9cm4}Zw`^7jo2Gz>Uw64a3EN$G zc)w_cwZuW#In&>4Q+3Md%L7d^jcW>3H *IoAw&`h|+fTEL_^Wl~q&X!^(agoPjZFK0PEl@@L3K2Dtd4Q)GNZF#o^ncT$ z>m)I@3<^&gnznVE*m0}=XC`maaKgLT83)t9MXov44`jHBOdc{AyFQZ45;6+(SaC~q zs1#i;BjM$udCd5)-&+>*N#d(-PQbt_pL0dpUvQ~*Xh}N9LaXX<)De@=+g$pc`M)Y! zk|HsTW0dNNKvfxA%EAuKW!rPEJOPHoGGw!^b^;aE=E+vv#KlYX4TmNLpoH12;y9I9 z`a(iGX_3jD1c_}noB9>@%=#PeGUS5iIiAQ_wo&*_yHh^w0GoVo11Xk7uoauO7QQ u%<tfpR&@X` Xg&Ntm7Q2G8edw3uGl+NbEj2pE`|Dh(u z)K(|bs_sjSRr;b|58Ul%W2o-Z44RVXpRjiM>@*$@2D~*(f Yr zcvwl #yv@kCNOI^qSB%EmbzYB$rZ*S16eN@^w!*>HJ+e#r5A~cju z)@zy+vU0t^tRELH>xw%Em5kgI$1oJ|Ap+H}ltB6?&40B^aPIYHh270ncELdcl0FXa zmaP-;#c4=YOlwX#Pcs_P>zO!VeYlnPA>B=@^@DW7=lGSNJJpQP7`TLBGt6l9Idpa_ zL(~e Ws6TMtKUw}}cLCJ*5Dq$>xiEd2`N;u$ z_r?{Mr>x#4s< UK(&f^K`>JAR7XU2+fy zVl %EP>=>7LB?ud=g)5*Sln zY=~~@Kb7fcRupFanZ6P;=Mus&!@y77vUC%N&Z)-e-1i8o9Ez@6Qu_3OFu!g`O#sAb z0o`}l$BT4NcH%c29Yuo>Wi(nF+=x&?EFvPyXAUxjBrD5kSyC2%!RQ;%xdt01P ^8D__)Y5r=>Co!Mo5i5BnUDxLbyHLI z{TACKp}*~TM)Tld{glw5>#*sD{V8(6*DE#h{NvZg?Hu1wW91{UyZv|F`=X`S_ByAs zgd6HS7rnoJ@sw{pS0tVMVa~h%iNxYBWO}5mLANFvrTWA))}!yqTTYRslyzSDiFSsT z;T`Cc9~?OsE^`xzi!z+>Q;rL{U8U02q9n}cdW=vwa9{*`MlG48*uCG+Z|v2z6K7SR zNI}|^pl1eu?SCwf{|nX>N)c*>c)It+%OdNGSKH;YXDe-LdBQrlal5UGH?)-z#}yge z@2DA>lh*enr}ycnKg6yCT>zmgPGI!j@YS%p2PR0e2+e~djyB9PF~UVb2Z@_$%zcQr zTM)WeTD3G!Q5iS^uD4gXjF3efYVJQkyW~CIACofFJVynE3wqb~#431o2=Ln;Xd)l7 z2^)oIJ<0cMqON*zRO-{CO)1;g-qKT}e1yX{JuP?S*GCUZc35AtL_u3G4)Z@4CEy2v z@Vf}g0poenQMY9e>P)JApDL_9kPXju64zQ)$6-R7D~{4+5pm?TL%w?Lqq4>sF``+a z`9V^dv-j~5vr_!Cz6gTffloILCs!hXT)|Bns*HxA`>wl6c4)Zo%rxdDzIrA^={qiV z+c#m%;(no^w{00=2N|o$V?~%IyyMNO;8~GEkzt ~)NIDL0&2}TAtXeEWaFu3$$ z65wzt5lZ&@nG6oC=*yu1_F;|yr?b-{nq*Np0`Z~;84Q>jz#bdasO!Wi&q_b;enuD) zfmRufUXo0j+_ufgI8J(!(7(R1l5!!2AMy`HC|rft8NMW~)EOWeS{aupFJ2#Q>hF!5 z<~M$4LdBi(Vr!hZib63E^*vcp%Ymqe?#^7W?amtEb+ ZDV hw{;2`0|KE&$+TmrEF*_1s$A|Pgz6fpYXx)|Gl z>#s6rx1!NXUOjH)O3=_z&t-@9s` y 2|{@#97!My3j)F@e(iMCPlR>9ubjk{zuGcaA>e zH@au_KaG_er|-r{2JMbs^R1qr^CY<#X%go=QL^;Xo&Ku7RtTUCeeIl*Un9lYfP`?b zws&;Pl}KS5c+O1sF>!NUo}UPX*%0Yh))3hj88Ms_(bM-E_eN{Bxlm3Y<<(b%v`N2J zfjR{#Lo>a9?SmyWHKxd|CqJqx3|V51RmBxK#Iu55270X&3GQ>E3AHgW`&<@|-Uv}d z<`{ qXIylyV8SO9F5yp&t<% wv( (Sd05>g|hQ%Ys>KKSLTn&^^`qjzCXB#L)$kCP;go~2Z zZU8&kpsdEoN#Zu}mnSKecF9u8=Ux@2NYrG=fsRAWN`i<@u(e4Ihr6#N9&S_4XuZZ2 zSw&G|sy0oeem`#-2U;W9!1k|v9kNWgD{bAoiZ5Hk#PH{1u`3Pfv<_@N9`*R`bz7_< zng&-8@3By3v_ZuZN@r<5l+LNzH@U~o`*W%HIS%KBO^vv!`aFkEc05*jSv%uzBXvqv z!6XM+Hi4VK2)@wVI^0b>ngBgLYhLiip(KS*Mv?9FcjPK#2Dc?6=!^vuwxkP3(n}6( z%_SiU5V=^kAp6s&GXC>{PMgtT|EPyLw*uZXT->{|{4>ZF?KhN$W7UB!5t|dc;>tj+ zNW6nd0H3$C5@CZNDo3EWccI9>(qb}A8m#%kdl8%HrmWsjwcNFIs>3F>Y2WJn*kw)o zW2W1kYTpSfKx?W%a(Y{onb~ KD}Oi4Za1bo#Wj~szAgSi>>b*7A)2Jo;iQIsN=>tB`R-nZvM8L zA}cy-e051Qw`r)s+e+$2Gi(MMDNII{%K}m|M6GO)DULKO4*R*u1CV%;mMZ=-dOKr{ z60+M$vDO!%G$pF7TMxzUM}J}o+I43_2aYE5<%ko<*O_T 3F$grZxV#? 1=$qEldwgn%+RkN#Nfie3_vyY5*D%dq z7m|8xS;&7 e%YB#Z^A*Es)@-Hel1xMuZ>YAoH6CHxZ|$h~ zu6n9{YZBMhL-wf<#omGS!f#TS<+E%RX-tfAbuVNblDPCsTZSwF;;8CMJ8?_f0IN2o z^~sG2gw7GI!^33{N(8(i00JB%kr_#naQKp4bP4);vC`}W4EcPQwBxpl3iHPq-~MRW zaW9@wB}uj_j$);ezM7Y~*raqbDCljtPly7UxbmTN1kS_ ubZHT( zvP TZnufYVgM^J&E*gedAg1HS z @dFp32u~z^75wNj4!h!O+op zGc+yH!mzW4Jk0;jJT7tkBR8{a-uHl4AMcD?4KwoLdbl%{JWcr_zkTj0>@`DbgSi zD@{3!`oqCU+C|O(v2uY{_SqYNTpEhI)AYq+5`Mn)v|pi9R8oLrD)o)V%{OwDc0M>_ z@yi9p;vUx-ZeGC+MOOun<@Ac%!53;!Koy9tOIK0+eYlzFLqGvfMWgv#b=`*Q^?lvj zqyV*+S3)!f!H T~9;Q-0ZcscISlV2bY5qfgMLqmbP}Be(BYLS8rq_1xBmssU zP@jLtPF)ggG1CTJ%v&}ip-j>4S4CQ#6g1LCq2C&GBL6F4;xTSZnYGk|Wv_yqyzWd? z2GpWmk%)DUtuVb6d2x1zdZZo*&6c+f{Bd{+ZQl-FSLr`=Z>boiHHKSrm+K0%R#(e5 z;>-Meq2fwrSMs^2h0c^ I#HIWZ2!#$h|HrNu c_zlZC)&5JsRgG~#*Wz*Sn9))u@zz?bB~G5|_pVUIEU zL(@Zrw|df|(x7J1t -HfL;GpjMH=fXxTtcOVZH9v^D6x z5Jjx7@Jvw0|JH7EPdG8g9kFt$b*BUuvuP(r*+d|OmO5p|sjvsm0`3o=EraMy;5ZzG zr8!iBsIDci4jp0#S}|m{ev`a)cu*WEHgOqb+eprLE<|umqhZvW%@IegR_BKa0~vZ< z=?6ElrK#`c@Vjw~i@DP;e)_fnH*k2RY0xYk(Mm(Ct!IW=e~8C>`d@DMX0mA`Z43j> z(5aREAWFbxSY%vW5u(Jp;6RO)KphtbOI8vo3o|d4)@KJUr3nT*RG>NOFq;!uHB Nx_Bi1_VF>2^-Jr#?iQaxy;15ftDQ%wHIl5RC@8U RnUpXwSgEKpKfiT-#2K$!!H=wVtL z+9J6H89D9dIoO9}X7t?Nmeix`q~J^HFTf&jQk3&lXw1*8jCcPT>fHJV9k(xuMiCMa zrKSc$% R?|tOF zg{Hw~b>)^!_CG5;um}i_pZivnOXi0?GIO#~miGC*Nfds+0JsDF*(QooS^1mL)X~9B zhSrZKa7dE!+ l7tk9;ASE9iY%#@K9O?STZb*lXp7_sOlgD}|H` zh=y7D&(l^t8w86Aw4P7^hB3Cax1o4T_v{Nn<*cfW>m?oT&=Jn=;)A?Cop4pDg8?vY z8g2?W6Sb=Q<*q9#NVH(GjV#BOiceqGX_`V7VbPJ4d-}SO*ZW#@$bHK=W0M&hojd$* z9eZ?{Y-w$hD1%!4zK7k@hP<`Ue`P*m_b8NRh*R2Fb(=%gmc5JJc4xvN3~OO$nVajo zr*RxW3XeksgZ)Hi`==l-?e-K>9>z`}Iyiv}!3l&7R@2$Ev?QDgtOMXp(HLqswDWyq z9asMjw~Ld*?Lqv?N+_)w>j>m<`55+p{dV*4%Z+OqfBaZI#bVO_wLcKIj{zsqVOwmK z8TGJezcE|klN|u(WhPSj9KVwqxlO|8v5fXZJN)ra%XxnB$fz~RF599vP eCnW*A_>9I#!@)P5oz{ z_-(0A(J6+p+_(eW{y{E2@nZ{8Kg$GJf|8Q(ho(wb^Bc%@LX=gxx}F*vs#c7AyD$~o zt*W^6H|e!^HWg_f)H?W~l<<8@Q!4eyd!O356)#2))@ah?$LTo6M9h5+T^_x|nZY-$ zg&> }IS2^H-IsZg0;IKJ)r;E1iS{ zTIrM>9zo^$ot@#!ia*qzC$}GntrSWC08z>84Q{U90<0uLM!R~_0+v$wWKaYvH8@8g zTPu(o&|y-*+mm;**=Es=$1 IyoB z0;5kAD;AN`&5l-7ZN60>L_PGIi{d5R8O`UN`sqPzR1#3`cp_%~eEayK`-7a;k4bxU z?S?@iNam_E!rP#qAB1LpB;gn>#2Q{?y7Da9-N))@!xSWXLgfzp73)R?l85($j}I!| z%R}B=*$o`i-kv|x;(*uWI ;{-+eN*_%T@`T z0OJzOYkI!K34EhVxgLvH{!$h;(Sp-Ep6Xe%6zbUFO$&Ts`$8(qKiY;Dx1S!SSz!f5 z);vIJFv**1YPwDCTBSxX+Wl)vK8#N+9!l=cO6Pl4Kq5W(FUD}lrvQH$Rh@Fj`ToJC zbLtyJjg=*WDF5k1|BtY})anzkuZ}k2$plM=dTdqrZP5t~eZHW5hGBS3;j%)cL;}vv zefin` 5`%7#UED3S3&yE} z6n&obsn$ua7V`oF^;unTxggaHrYVeS^^)je5XCY!Yu*ALX+Z*HqH<_kCQy6zDg`S| zprB8yz&*%%0qck&Je|HraL4j{25ZUO`1MlOr#pAWdxh+8X4gDs%BZZ>OCo%Y%{ &R-(1}e%;o71 zC#L~oN8YD4{i_b5Zc+JtYgc2NT3@MzaqqrwE8nj=botn8yZlYH559kDj%QX+?Y8GF ziRa3W3_k(2@0WwY`T8x0W%aKGId^!N5%X!0wH{DipZB;Ua>(Qw96e6ie4#8mJ8)mp zpRNg6j}y+fwCfvW6uWc|-jG5mYtg_F9`UZ5aA`#*7`HJC#-0Nh$@R7}cJUGY&d`Bn zAB(K0I2YYFA>$TlG=w#Q5cFCWEt1Mnf6o-y@j824k|okZ_&Jfb0yEtUoOi4bo!wg% z6B9tzyT_LXA1H223!Sg+x7lmTnwvdE)cATO=km{IA{=j{AB!kJbFn&5?^?RYHC9{7 zVa6%}(l(tFvSn^vR=HxWl*O6lc4pw4SQMRFxy2)DxuuQ5?ecL|&tX~vk6^i;(9pQ# zi)kRt-|ujcV1I)PcAnDLa|oIWR@h-YTZh2b;b%4WCB`gW|JOUU%mDt-DR8;-^YlH> zvoZx?As`;7V86y(D^!fhXaa{Cg7u4(90RF_#)O96*+k60xsW;bVWQdR!?4+2SO|mF zIQlAeIINItHsNm)b@7?8#Q1WH2MJ;v`dRF*0t_bX%TT7VN89^}MqMZNHJO`qUZ&bO z%OUXL@QbZt;#cUxczH|EN<2 1z1g|E$pX2b2q^gXHt(L>YR8HR| z2{W~TAK5c>E^r=pIm+N-w=kN^dZ0Q^jRs(%84fUNv inq8{Cwn z+fXNQOQ$i+SF {%ie8A#*S~eu7&6Kie`4CYBU{`5<4_z8wq1c7#G}2 zZGI4zoxQw_`Q~!qWXvn{6mj4*z)#nTyl)S$qcs>`qilJJr#i#k?Q#`5671d6+U{vz z_*&~cbqC*g$i0nXqT76awWR*GZUD@~?38%^6Y>uxC13Cl5V5e3us-T$9!(B9*4dFy z-?dWk`Ozoof8TfwA#Gu-zcRdt6hIeG &6NGUW?KrC=y2Z$zuXwfAEd(POC79zg8RV-~Q#i?f`LN4Ea2J$nFo3 zPVL;okl8MFacVw)Kw5&X!#pPC+Zi=dTO;&$ch36`V?(w!{gU(Z3@zh39T``+#Kx|7 z$JV##|5}YgVN>`rq)4g5K91ehw|h>_5@ZK#PSJ+TU4a__XROA2N4NLq@@L68GHsiY zLx%0o@q?4L{Lq;_J%qe?r>T606MZ450p8rmzuJ}w5O?gW%H? =*)Gc2} z<~xbIEYTW3d{3pmm;{{Q(e7gXtU!`$mM6Vr%FNxTc4!&iV!Ml-XR+ypPm$pk-17^~ zK7+>Cz^%b`5mHtey6w}(LyP)fZ;#|0e}(pDFy4!TYIN1#Na8w|qfLz8eQh8stwWi! z7Oj#&^~HKT%}oNYhM3)oJEL^d^dzJXQeb$4Q4FSs4>+`odTBXb+g8sW9?>eju_Cpz zQ$HGMHgEk$WCw3`c*)y2j;rJ9**2 !W#m^vTw>`h)v zuN>*vAcWs&>qcUW_(u(krgUkhDCH+6Q n#ydL%Wd<%rR!NITXoLmTAbiL4&94y z9*4EBDCcFCWXDagf8^Oiiy*-UBP9rICwQ#VWgLftFuo`1DhNGHCzQ~@Yxu2s7}l4h z#<%-EPuF&eqC2x03fsCu748L8YT#uW*v+%i=HX&u*k$_fV5lMVP;^7U8Rt2!3r6MN z*%@bKIg~CATC5^&dx*kuNZ^jZIKbGa-e$ZoJIPKrgO< ~` z%m2sLo4`Z4zH#H)_eF&^DUw1dlC4a;N>Rv?GL@~8B$Z@&R7XfCYeZ9okYrDmX;IlH zdnjbh7Dkp~=DFYNen#ha-uM4M^ZA^m!!!4D-`DcJzSnXO(jK#E#awK+4j+xK>YXh* zX{qRBOfCcezBIkIsB*Khe_7954l-R{f=V_%tVPpiY`PnYzOd6ciEDa$#n0o41VAv1 zIhdxgKyzFGamra;(BNkYa4dw634Y))n+Ujd_pQr@#_9q3(fL${=wt))@=uz}jTHJl z)hV%fkD tr+&X=i)7agBo~-JsUYU3L0JRj|d1W?ts%IK1+cl zRRF@3+d3j ^_-0Eo+%SX!L_w=Rb2SAtr_0^IrGaA}3rk_!p_AGTw^AarNZ zo=o)>SC<{~QDRx3Ykb!VpnoJ3na>aB`TC*4$?tX!4jVVyrJ=rBlGMUJO8$3jy|$ {Z^uN=2L_Ac;*jwX{m&KX2ijDZ@aKs-3~?-vk!pt zsuZ`mRJ$Q%d1-z`OU?7W)>OX&PJwEE09zv%)CS{|*>wG$`)4)c&dsDW6Z^C(xlbPd z{|SZSvxAL$DdAyWJnGV|v-E+@Rfi~c!a6zAon&LM*w##`$6GU3d~9F(du_kzR49ok zAhbI?SQUz`b~6|^w~LVb(rF(i#5#JMN6-|S7OaPBVQZ(jYVA;+7Xm$GaaWfuo_Xw| z61n+DbcpHQ`7(bVNd-e9Vv+0E+MODVV&$v)(RyixdC50JTH|6k^y<}XCQ4vKlNYdQ zN^R&@E2=klG}E%m3JA+y2AN#^X3W>n!-9JoFuCPF@M-v}L-dgx2k7BhLsbu_<=~(O zD#b9)Al5^nD`azpFaWfF%M~*> xHfGk<6j#7DQN2LT9gzsb$*_mv5WPLaowNLs&ccZXdyHP3ch<~_`k~2 za}?4hn$PS!wUuRU`Y+3!kG6)Q5M0|C?A>r|`^S*?2`mFa*-{=P1tPdaNJR;v#cijO z*c=mo_buEF)*OPRH%Ln#>dR|Kfsi)R`PsYjRoqcB{Isc2?Eu4ad|VATE9Jkj{M=cA zoGdo?JKNF|%YTbSz`n6∾̳J-(@ob6kWaKM`BhvSbh- 7yAqKASHrUvE%1(X+oQ);A0A9q05NP``+EHr`rZTk`5Hala7MG DB3ikwyk-l+I*Q`eG(Q z47)gvS31 QGdcfO?c57_Dk7z17~Ul-Fy8m?^v;;rMmdT7}d!kck~8otoPP@*?};|5wdJt)$lGhU z2ZZ$m`}r%Gm6gRqQrQ7|P^A`1^?W%_#^3}3))mN0ol8MS)~II$0`U9Wx$?gxN8Rje zW!p2Rb;BC^Jlcu-fG|O|q1b1I6co^(05u8UGTs 3ntO}cCu1NOqw-0b*Ny*jM98~ligkd=GP$Gj9=v%C-DGb z-i1mMvh)V%-<@^|i{`BJ3an;|^ICwD;`d;{W+tE2c;sI2jCu{s-fEDJ?t6W`2X5Sj zc$Dx0-uyfVg-5m_>nV_Fn1*rCYGkKDj&FZ2=r&us->+VjYo5-`;!FQVyR5e^>IzLZ zAwTLj!g4?2N`ej$4F}3_&` zewyogtp#l>v{w`6?Z|!I&`57`4m-Ecqxigauv=s^@pHh+(+-vxif*p_dK wG6YKyKnlq8Y+YQRp<`RfQmHwKmZa7pM% z{pfnd8A5Nf`8Ml9|JQtxJZj(EgYyJbTvhReHzJ(ZL(J5^d>{mk z1aWGVl _E!m0EihmM r5XNv9-|VY z0JO113K4p1ndQH2{2 |TaZL;u!)=1)nlD#$w)z?2HCwqoBsp6*tAX@$Q~`iZDDSr?OnH *XwR`a}nyKIa_(Db|U@SRSq>N+6^)bW})VwZ6VAI ypBtgVP{O8!j^OqwY~L_z z&(Oq9{bC`ZeQPVyST^8r=T6}7cMohd$C>xZ;Ug4HmVbC;9JyG$L;m8V<+bVV&}~f< zcw`zhKjn{MWR6CA-Jx5BM2@L|+Z<>1na5WaUOvtXw~IEu=W{*(zH>)w&MB$g?vsYb z+e+R#vn@(ig_z_RM<4H99(g6E@M`?%lIyjFk7o<%*M^@e>}^Xpm%YE|ps4Q_8!7Wd z?;ih*oHe+f-ClZrzGLnkwoBWYkYkR!?=3GqU>h$EV|`ja20w2#W6G*H8{--}NvW}_ zyG-*=pyXR$Z_^b2e%O0Y=b&d{g5i9NnXQBm^!DTaCMsBLJO-~0HWNytT7aKky8mU% zA+b;-*Y>y9TlC4k(LIy3O=lj&zk+TDAf3*6^9=&+4+Yi}=~XqPeJ$CbWpLf6@^38w z-Y&nP!)gSXXfb_q)Tf*sg{f#E-eLIVS$_(+gN3@2)&wB(r<>-pNY`|k *2PRG%>tG?v$1-s3P!Ygyv&++*a>*Vw&Syt8dNcaH#O1s6m zQWUToD#ArJd_Xq>`jr&==<9(v_@=g>`~t09OxYh|pK|Bk;?s$c%x1J+8*KCg5h|)% z?iRcz4wsZlOPEB>PeBo@CI_rY+2zkKg_=8^t$ykO+TxGgl*iGG`c^^@A};3p9^{?P z;E6%ctLbBI;^9pws&MhjxWOS0mgu(=eEKbik5alrng)5Cmp(ob4hD&ZFH1{zL8894 zU}p55V09?p3whUQeiO5ww+e`j0ef8SM9fWA7NTv)iT=+5;;otYVA;uZw`sFGbbcPX zQX1MK5g(R$K}O77#rm#QtZm^Vx9B%d@(-?1w%vI9iook%qsNV2T$arf58P^o%?j?u zz hu*>i3i-ip!fHL*xJdwiFcFI=@~(c!B?kr_adAUqW42T!4v^Ir*m$0&g`GHUe6ls zf-joBuhmR$D*lzY#`zdQ*D4JuN^bh|%Vv?f{HLg|eVsDwvRIjC^v9!yKP!beqpiPe zCI@Q}iP4`6;@Jb9Wpq*Dt}Et$Mox&|OEp-|k?PqMh#pF~p1ZgR{Ka_+0}#e8;j_ne z+k6UjB+ijV>>VR{VU Ez+sXYiQfB*_v=&$~| zH7iD=Qo?n2IB!JFd6;QG_f8Nq5~};C7Cy|-Ge`Tqr~ZGNV|1WCSgvTe>ovcvXle ZNOc#?MFhOZ0Dnbb5}_cRF4Cqb^A{$C9h~<)o?PuDnJT`^LpdSDdu|| zmNfjSeYCUkF!RToG{9j8F1#sshr&V*RKBZj4{q#cA8uO^y8W8rAkzA5fii?E0i_h7 zvMH`Vm(w%!Zca%nF+W9P{qHURf%MlSp_#Ie9XtKR$r;%EW4xQg&qnZcB0e2+G+fDg zxFTfF9^eNbBF&KoZx{iC3*R3iwnOpYB J6cv^;1pOQ7Oia=m!+<3BGF@4%O7@9F`-=@e11i&Y VQywrpAf)+*=+U36;p(Z60h7+Pv )jKyiH!+L5VM-T}v~ouseLAj(X^ z*(;! hjt-}0xEIKE`A&-yt6DQapOkH7%}52nufD&6tnWU}|P*_H{HYqwka-2sFo z1J9 fQKwZ4`fzp!0!cW_DH0h*#~ccki2jUjl6HuDC$pcIVe9 z?bUmeevE#+`q;w9NVT}!)O&bUh}DW5(^T`FT$z)bo6i;&qYbCVQdMkL!NGu4JV2c- zoIO(?CNAN;IMOvzEEK7)_!$EIa)WWOI62pU3*kn-Ke&+&AZQwg5!lYu3mkX1atd!A zyxNnHuw%sQf6FU|Ifa%flW);kOedrL2K>4x*lP= b%_tb>V%~1R~qRi~y>L zL()AGx@jizP09;d)|@oa9;#Am2v (8Nj&Ma6h(ZZD(mvJ$>z(nue8tj>FLKtlJxTZLW72pj|E{?pyKe;1 z1`|)|<{<$nlEdL7&gr7EPMPxqwvTiR-h?if^2Y}(x5^sHd0tjf#QbB9z2w~;7H@*z zQ6oXhK2!Ef7}GfQ4&n@qpNy9K4Q!o*4M6l$j$C)#{@DL^cQHb0ksyAXe1aup8-KF; zv*W=}kq7B>8 R2m4qmLU|h~yKTt1*HT zJzmg(HqjPb=ZdY;hNB!hra h`PUD1UG4mr>nscBP~)mZD$bJHo#inl4ug-L zj8g@2xa$US1JU_(sMZ8E1In2&FN$2MuArG>w8|Jt)cMPRRM}VcLhstA1u&*&StxG= ziix}u*huW!GN1m(Q|~Ss<>$L@;@Stx>%-`k@+mUw?3)PBOWic66}tER0;!p%v{{c{ zB@y_ 0d) zQC|K@^_zZwxy@Zrf->$JhCrT*?GUL5O>AqH@jDW!)Z%LD^`-DcB^U`nvT19nqRI25 zZwyX$Pn{k}5AM!q77UME<@->UaYrfdY!L183+1a*H{a(frA+>6Iu9G~j!m8)Zf~A2 zmV*x^U;U$OEeB{T@P2%(t-Q({e@rZZv0sGUQ3)Xmj5Nxg1sesm#xtSh8Cy>aWETa0 zLRsLsim1rDjkuOcyr~vh!iaHZuxiGYYRM;52E=cWqdh*%%TSmcZr4H2l-~DV%U=dq z@sfWB70_=qpP1{_tg@=)+PHGGw&%Ko%i(AsjeV5EEZzi@N?;Dvg8-p|Zx81$_`>A$ z-Qb|99L8?IsAwrL={nW=^+j(tA1}BOsEUoKrSdRGU}6rQ!I)D*F-+j?fhJ-5H(c#) zfE3}T`)IXs!ddT+)vm$D16<4fq tkAyMJ53H*1j*(`7=G+h!=zf>`3^4S4Aooq$_h zhO?5Qbzp?)!uH$wwFPJUKVLrPzom@9U^Cxln}Q%bIAmYHiqW@q5aAr&8vQ4e*3X`5 zQNp}ga(Wt{mXE1~M-+XD(ZG^dN(CS=y@$EwcL|crtmCruy8nWELjC~&x1X_?CW(j! zlf JI=z^-HC%2p|%X8rnNv>_oa mx% zflI@?;}KYV&T4!lC2*SS>6p({y&vX2Ep;Xel<|u)7g{1~D_)1gAffRVW=uh*EqV7I z`6tm+*(menE5}VZIrvm!jIxil==K9dk3S%89viWhJG9hi^Ew!shEZB)K4MRPh{p(p z-g6BIdUA$jP(1Yoi!gPb(mwLtlRSJx`Dh>jIgf=YvE22QMZDAQQU(_D#8?xsO*Tje zil1Mt1zCy*dxtR~oW2^-3$g5PUdY9+Qse-oy0mdB{9)2AkhJyS7^;(#Uoi$h@xS@( zy3tmaW%@X6w7+iXg{1&=PG)V~@@1~5{;w_CP|=ze*s##L`jMsEoSTOJ;I%;2(>M$# zKEMy*p`ly#)!!Ji?Zv5v>Zf2SXfD&9LRY5K0~CY{#(mC_HTwp?KVu_vj|+~wF!$X^ zu~%DbFOmyFK3XkU(UK(o=OJ<^<7$Ut!>s*#hBWQPFKF&yf+v 6aYaOVX*c;A;-nx5-;?aCJx zc$vOg6Y9^qei^D+w|q}6g=$tlKbe2)hU_61Y!8=(@s#i~C?XjIT&`OtZRvr$V5|}l zHTCxp@&k$eSu^FXa&o#eC$aR%2k$DT=6dz-_5XizS$AhZ(M3`M0gVI?Q99h#=kqZ1 z3OXGa<9vENeV8bzaiMJU5`|taRNHhe2q@|8)on!!`R5Gdd(eFq_2j(3g&StNv?9fi zo#@}$T{9@F&=?pMDVyT;w_u~bfM=u=F2oG+bRd(*las6|fKitHfj}xWY z7((G!fzr-wPU6v)p#_S1BL@OAoCk+{V~~m%mogdU`7=aCkvSO{56MLVoXhC=*n`~l zRVZ=9?r$->aVJ$}SAhrQJ;amBY!%?=tZ1`NAA~jVDJjSlHxxs@sl!SLOYfXmPGZei zpVB#=S`w!*Jc~`s+o}6wpKWFxsUSAa|K`I u|3TS_YV>Alq(H=ZbK~z @EpF**j`79G`3J#lg9@w0tDAD*AUFH<;)>1Ze_*XYTAIoDab{JzD~iCHyR^BS8( zb!wOT{wN2#cV(Dni?tx37HL4*_Au!P#VheSg *~?j zXxf|8WEH@do|Sv4rQ)m>PzY!J{xgD&KiPqQzWlOMejbLlo*vXaLDEcufqH >X*dX>5KBq}*CqnS1Onwq0gu()k)!fY z?wxxCCYT`xS)Ur$Nr`&7N1DthGrjtE2RCLtS XY2Swx18>ESHDr_Uy(2sBor$bo|L} zUzXV!2BDbn_0a7B{_Bv>zB4+|I>fK|L@{c88khm0FoO4)VcHabG+TT3)=*1ePVe6c zl`ke^aDElNjWei@JzP5WoZ^_BLBpY539M}98kpu31b4}uARD(e1zkMWf9_{$J3%*5 zg4>H$BdcuDJ@xT#pBLJ_?;cD;ihp;xc>LBoBD}_apNhcJ=ahzGtL$kd;1!{=ignFV z+2SzRp%!u2K8TrAXTOO|uJmwTcJ|-2h)hpAdUXT%PF65gAj4FB3y%rDRu!oyDS@Y$ zuv%)-&teZ^8X%fao6m{{r(nto (ZVkViJQhHBJ>X-R99-fD-!g YgC9ETEAhNJR_ zC{1qdt 94u)#jj@EWf>KlXegO9i1}UPd5iP2I~aELoBJZypKbHStXtO%Ojn zAI*s1GwpLA$z4XJN41}Em<>y&c=Fp_p*(s4p0E-Fb7eqh7`4<1G7Q+nUL%1Q>{NQ~ z@A;(P#Gx!Jq}ZOacGUl|sHWU_5)_05vuQg962Hc<9Dq#>v^%q@_VZ-76#dMLJ__xl z`HPYgoYkJI%T zcO0@3dWo #yuZoY#XJhgcTPDU^>APWDEzamr6at1WCt(kEU=CKce#NI%3VDaX z9)s&)fG>s_UuUq*gq#`rw#PN`EKGKbzidhE^&ID6!l{+e-c^7?*~1Sn*nByi*73oV z(f6HTec^k`xg80)kihI+@KWs5q@}w_5t3hp$!9iUddx#)Upb6)B! >e-R&GR(ZxWXDSi zks*k?{XMQh9TL5>amZOmw_(`9&aQ^mc83Cx`O2+4yAHCZmehjzN6YbffZ(1 Da7QSFfkWq(SxQ zvH|I9(%wck_izv4fcaLTfw^^izT=@kS~jFFCj85KPz!v~1dHABgPT|^2=3juLH%fN z=H?!m@lK-MbYi)$1eQ#@-B`+WI&!b%B{j_gr%%>V>P?{>$f!o2pb#r|dp0+u_hYcl zXBxo{lr03CgA<>vgn9|-%jCi&;S1x9727Ix?2lc@7Ny(NCils4ny67<@;)K9Yetz+ zHL~{9q|2#XF(D96tn66FD!57#<5=%^Um#=f)GlOMvhHa8*md^Wy%6>qJ$paX^gR_> zV*E0%VNJ!w`)eMvX>PdF%oZjMsr#fL&UY@;KdBv6-@ZW7bq+#m6(L5>$b3HqR^Ono z;px6%pFf?4LuKFU1)bA*zA-sZ!dgeZsQsY$DV@Mx+H>)HOO6bld_J}B_vuCQ!p|nj zUO91E;q{!;A{FOVwf28rz40vTaLmCS&!o;y{?HntWka0mt3RWfZ8K8;!-jQrbo)z< z6t5p|{eK4?KT2b=GKR!kn7gb;R_JX@G&w)GJU4~sJNg=5JuGlq@s&WTefZf#f!7Nr zEkuGSm^pj(x=~Y(ZyT+YZ0Ui&Nsy)-`bkUVwVD(=@M&GrJrB|Y8IptBrz(HAaJWj+ zc6pw|R!Og+9vZ8FfC<|ET{CrOay^jpxbGa;Glc?C1`js1tPyx4`Q|+=xt$ zdtb)L%7m3GqZX)&_DH}rh+#Z!$02yPy#vVTO2)ct|1`#wXKpN)dgybg!}LtXoH6lC z-{-a(FJ)GeM)r3_wOKPlvbx{z&F&2Q1Fu$@Jt$qcL&w4Rexk#V$N8zkq#@~LLegd6 zuAJFF#Rm8v=E4?2UmtnE$L;1Y&1J|p1%3F*G;Cq6ThPLM=nQr8j)_&O2NTmpmF-`3 z&KP~iKT;u1(=nC}v#}vful#3!V5