From d008995a41d1471408fb447f5d7000b26055e854 Mon Sep 17 00:00:00 2001 From: hermes Date: Sun, 27 Sep 2026 00:09:10 +0300 Subject: [PATCH] =?UTF-8?q?v3:=20=D0=BF=D0=BE=D0=BB=D0=BD=D0=BE=D1=81?= =?UTF-8?q?=D1=82=D1=8C=D1=8E=203D=20=D0=BC=D0=B8=D1=80=20(=D0=B3=D0=B5?= =?UTF-8?q?=D0=BD=D0=B5=D1=80=D0=B0=D1=86=D0=B8=D1=8F=20=D0=BF=D0=BE=20XYZ?= =?UTF-8?q?,=20=D1=84=D0=B8=D0=B7=D0=B8=D0=BA=D0=B0=20=D0=BF=D0=BE=203=20?= =?UTF-8?q?=D0=BE=D1=81=D1=8F=D0=BC,=20=D0=B4=D0=BE=D0=B1=D1=8B=D1=87?= =?UTF-8?q?=D0=B0=20=D0=BF=D0=BE=20=D0=B1=D0=BB=D0=B8=D0=B7=D0=BE=D1=81?= =?UTF-8?q?=D1=82=D0=B8)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 4 + Dockerfile | 5 + backup/20260103_082922/Dockerfile | 11 - backup/20260103_082922/Minegrechka.html | 2688 ----- .../20260103_082922/Minegrechka_Telegram.html | 2623 ----- .../backup/20260103_082922/Dockerfile | 11 - .../backup/20260103_082922/Minegrechka.html | 2688 ----- .../20260103_082922/Minegrechka_Telegram.html | 2623 ----- .../backup/20260103_082922/docker-compose.yml | 27 - .../backup/20260103_082922/game.js | 2614 ----- .../backup/20260103_082922/index.html | 79 - backup/20260103_082922/docker-compose.yml | 27 - backup/20260103_082922/game.js | 2614 ----- backup/20260103_082922/index.html | 79 - backup/20260103_082922/style.css | 72 - build3d.js | 107 + game.js | 8734 +++++++---------- game.js.bak.v30 | 5865 +++++++++++ game3d.js | 6757 +++++++++++++ index-v2.html | 153 + index.html | 22 +- index.html.bak.v30 | 110 + nginx.conf | 19 +- node_modules/.bin/esbuild | 1 + node_modules/.package-lock.json | 64 + node_modules/@esbuild/linux-x64/README.md | 3 + node_modules/@esbuild/linux-x64/bin/esbuild | Bin 0 -> 11366512 bytes node_modules/@esbuild/linux-x64/package.json | 20 + node_modules/esbuild/LICENSE.md | 21 + node_modules/esbuild/README.md | 3 + node_modules/esbuild/bin/esbuild | Bin 0 -> 11366512 bytes node_modules/esbuild/install.js | 300 + node_modules/esbuild/lib/main.d.ts | 716 ++ node_modules/esbuild/lib/main.js | 2532 +++++ node_modules/esbuild/package.json | 74 + package-lock.json | 469 + package.json | 5 + src/config.js | 61 +- src/core/canvas.js | 54 +- src/core/state.js | 85 +- src/data/blocks.js | 57 +- src/data/items.js | 10 +- src/data/recipes.js | 20 +- src/data/tools.js | 48 +- src/game/loop.js | 139 +- src/input/mouse-handler.js | 180 +- src/main.js | 140 +- src/main.js.bak.broken | 299 + src/multiplayer/socket-helpers.js | 2 +- src/multiplayer/socket.js | 56 +- src/multiplayer/voice-chat.js | 4 +- src/render/textures.js | 227 +- src/ui/craft.js | 28 +- src/ui/dom-refs.js | 6 +- src/ui/hotbar.js | 30 +- src/ui/inventory.js | 29 +- src/ui/market.js | 115 + src/ui/save-controls.js | 79 +- src/ui/trade.js | 277 + src/world/water.js | 5 +- src/world/world-storage.js | 9 +- srcv3/audio/sound-engine.js | 37 + srcv3/config.js | 12 + srcv3/core/canvas.js | 31 + srcv3/core/constants.js | 32 + srcv3/core/state.js | 254 + srcv3/data/blocks.js | 55 + srcv3/data/items.js | 37 + srcv3/data/recipes.js | 44 + srcv3/data/tools.js | 66 + srcv3/entities/boat.js | 19 + srcv3/entities/mob-ai3d.js | 226 + srcv3/entities/mobs3d.js | 56 + srcv3/entities/player.js | 40 + srcv3/game/loop3d.js | 402 + srcv3/game/modes.js | 20 + srcv3/game/save.js | 198 + srcv3/input/controls.js | 37 + srcv3/input/mouse-handler3d.js | 414 + srcv3/main3d.js | 275 + srcv3/multiplayer/socket-helpers.js | 47 + srcv3/multiplayer/socket.js | 283 + srcv3/multiplayer/voice-chat.js | 122 + srcv3/physics/collision3d.js | 146 + srcv3/physics/water-detect3d.js | 52 + srcv3/render/draw-fire.js | 19 + srcv3/render/hero-rig.js | 16 + srcv3/render/particles.js | 14 + srcv3/render/render3d.js | 625 ++ srcv3/render/textures.js | 506 + srcv3/ui/chat.js | 67 + srcv3/ui/craft.js | 114 + srcv3/ui/dom-refs.js | 18 + srcv3/ui/furnace.js | 126 + srcv3/ui/hotbar.js | 151 + srcv3/ui/inventory.js | 80 + srcv3/ui/market.js | 84 + srcv3/ui/minimap.js | 122 + srcv3/ui/respawn.js | 56 + srcv3/ui/save-controls.js | 156 + srcv3/ui/settings.js | 127 + srcv3/ui/share.js | 108 + srcv3/ui/start-menu.js | 575 ++ srcv3/ui/trade.js | 277 + srcv3/world/generation3d.js | 238 + srcv3/world/tnt3d.js | 85 + srcv3/world/weather.js | 219 + srcv3/world/world-storage3d.js | 65 + style.css | 16 +- .../style.css => style.css.bak.v30 | 78 +- three147.min.js | 6 + 111 files changed, 29075 insertions(+), 21878 deletions(-) create mode 100644 .gitignore delete mode 100644 backup/20260103_082922/Dockerfile delete mode 100644 backup/20260103_082922/Minegrechka.html delete mode 100644 backup/20260103_082922/Minegrechka_Telegram.html delete mode 100644 backup/20260103_082922/backup/20260103_082922/Dockerfile delete mode 100644 backup/20260103_082922/backup/20260103_082922/Minegrechka.html delete mode 100644 backup/20260103_082922/backup/20260103_082922/Minegrechka_Telegram.html delete mode 100644 backup/20260103_082922/backup/20260103_082922/docker-compose.yml delete mode 100644 backup/20260103_082922/backup/20260103_082922/game.js delete mode 100644 backup/20260103_082922/backup/20260103_082922/index.html delete mode 100644 backup/20260103_082922/docker-compose.yml delete mode 100644 backup/20260103_082922/game.js delete mode 100644 backup/20260103_082922/index.html delete mode 100644 backup/20260103_082922/style.css create mode 100644 build3d.js create mode 100644 game.js.bak.v30 create mode 100644 game3d.js create mode 100644 index-v2.html create mode 100644 index.html.bak.v30 create mode 120000 node_modules/.bin/esbuild create mode 100644 node_modules/.package-lock.json create mode 100644 node_modules/@esbuild/linux-x64/README.md create mode 100755 node_modules/@esbuild/linux-x64/bin/esbuild create mode 100644 node_modules/@esbuild/linux-x64/package.json create mode 100644 node_modules/esbuild/LICENSE.md create mode 100644 node_modules/esbuild/README.md create mode 100755 node_modules/esbuild/bin/esbuild create mode 100644 node_modules/esbuild/install.js create mode 100644 node_modules/esbuild/lib/main.d.ts create mode 100644 node_modules/esbuild/lib/main.js create mode 100644 node_modules/esbuild/package.json create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 src/main.js.bak.broken create mode 100644 src/ui/market.js create mode 100644 src/ui/trade.js create mode 100644 srcv3/audio/sound-engine.js create mode 100644 srcv3/config.js create mode 100644 srcv3/core/canvas.js create mode 100644 srcv3/core/constants.js create mode 100644 srcv3/core/state.js create mode 100644 srcv3/data/blocks.js create mode 100644 srcv3/data/items.js create mode 100644 srcv3/data/recipes.js create mode 100644 srcv3/data/tools.js create mode 100644 srcv3/entities/boat.js create mode 100644 srcv3/entities/mob-ai3d.js create mode 100644 srcv3/entities/mobs3d.js create mode 100644 srcv3/entities/player.js create mode 100644 srcv3/game/loop3d.js create mode 100644 srcv3/game/modes.js create mode 100644 srcv3/game/save.js create mode 100644 srcv3/input/controls.js create mode 100644 srcv3/input/mouse-handler3d.js create mode 100644 srcv3/main3d.js create mode 100644 srcv3/multiplayer/socket-helpers.js create mode 100644 srcv3/multiplayer/socket.js create mode 100644 srcv3/multiplayer/voice-chat.js create mode 100644 srcv3/physics/collision3d.js create mode 100644 srcv3/physics/water-detect3d.js create mode 100644 srcv3/render/draw-fire.js create mode 100644 srcv3/render/hero-rig.js create mode 100644 srcv3/render/particles.js create mode 100644 srcv3/render/render3d.js create mode 100644 srcv3/render/textures.js create mode 100644 srcv3/ui/chat.js create mode 100644 srcv3/ui/craft.js create mode 100644 srcv3/ui/dom-refs.js create mode 100644 srcv3/ui/furnace.js create mode 100644 srcv3/ui/hotbar.js create mode 100644 srcv3/ui/inventory.js create mode 100644 srcv3/ui/market.js create mode 100644 srcv3/ui/minimap.js create mode 100644 srcv3/ui/respawn.js create mode 100644 srcv3/ui/save-controls.js create mode 100644 srcv3/ui/settings.js create mode 100644 srcv3/ui/share.js create mode 100644 srcv3/ui/start-menu.js create mode 100644 srcv3/ui/trade.js create mode 100644 srcv3/world/generation3d.js create mode 100644 srcv3/world/tnt3d.js create mode 100644 srcv3/world/weather.js create mode 100644 srcv3/world/world-storage3d.js rename backup/20260103_082922/backup/20260103_082922/style.css => style.css.bak.v30 (52%) create mode 100644 three147.min.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b028e32 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +backup/ +backup_v*/ +*.bak* +node_modules/ diff --git a/Dockerfile b/Dockerfile index 1e8ecff..cdc5e28 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,6 +4,11 @@ COPY nginx.conf /etc/nginx/conf.d/default.conf COPY index.html /usr/share/nginx/html/index.html COPY style.css /usr/share/nginx/html/style.css COPY game.js /usr/share/nginx/html/game.js +COPY three147.min.js /usr/share/nginx/html/three147.min.js +COPY game3d.js /usr/share/nginx/html/game3d.js +COPY index-v2.html /usr/share/nginx/html/v2.html +COPY manifest.json /usr/share/nginx/html/manifest.json +COPY sw.js /usr/share/nginx/html/sw.js COPY src/ /usr/share/nginx/html/src/ EXPOSE 80 diff --git a/backup/20260103_082922/Dockerfile b/backup/20260103_082922/Dockerfile deleted file mode 100644 index fd37297..0000000 --- a/backup/20260103_082922/Dockerfile +++ /dev/null @@ -1,11 +0,0 @@ -FROM nginx:alpine - -# Копируем файлы игры в директорию nginx -COPY index.html /usr/share/nginx/html/index.html -COPY style.css /usr/share/nginx/html/style.css -COPY game.js /usr/share/nginx/html/game.js - -# Используем конфигурацию nginx по умолчанию -EXPOSE 80 - -CMD ["nginx", "-g", "daemon off;"] diff --git a/backup/20260103_082922/Minegrechka.html b/backup/20260103_082922/Minegrechka.html deleted file mode 100644 index 3638896..0000000 --- a/backup/20260103_082922/Minegrechka.html +++ /dev/null @@ -1,2688 +0,0 @@ - - - - - -GrechkaCraft: Multiplayer - - - - - - -
- - -
-
-
❤️ 100   🍗 100
-
🫁 100
-
📍 X:0 Y:0
-
🕒 День
-
🌐 default
- -
- -
🏃
-
💾
-
🔄
-
🔨
- -
-
-
Крафт
- -
-
-
- -
-
-
Инвентарь
- -
-
-
- -
-
ВЫ ПОГИБЛИ
- -
- -
-
🎒
-
- - - -
💬
-
- -
-
←
- -
↑
-
- - - - diff --git a/backup/20260103_082922/Minegrechka_Telegram.html b/backup/20260103_082922/Minegrechka_Telegram.html deleted file mode 100644 index aac7653..0000000 --- a/backup/20260103_082922/Minegrechka_Telegram.html +++ /dev/null @@ -1,2623 +0,0 @@ - - - - - -GrechkaCraft: Multiplayer - - - - - - - - -
- - -
-
-
❤️ 100   🍗 100
-
🫁 100
-
📍 X:0 Y:0
-
🕒 День
-
🌐 default
- -
- -
🏃
-
💾
-
🔨
- -
-
-
Крафт
- -
-
-
- -
-
-
Инвентарь
- -
-
-
- -
-
ВЫ ПОГИБЛИ
- -
- -
-
🎒
-
- - - -
💬
-
- -
-
←
- -
↑
-
- - - - diff --git a/backup/20260103_082922/backup/20260103_082922/Dockerfile b/backup/20260103_082922/backup/20260103_082922/Dockerfile deleted file mode 100644 index fd37297..0000000 --- a/backup/20260103_082922/backup/20260103_082922/Dockerfile +++ /dev/null @@ -1,11 +0,0 @@ -FROM nginx:alpine - -# Копируем файлы игры в директорию nginx -COPY index.html /usr/share/nginx/html/index.html -COPY style.css /usr/share/nginx/html/style.css -COPY game.js /usr/share/nginx/html/game.js - -# Используем конфигурацию nginx по умолчанию -EXPOSE 80 - -CMD ["nginx", "-g", "daemon off;"] diff --git a/backup/20260103_082922/backup/20260103_082922/Minegrechka.html b/backup/20260103_082922/backup/20260103_082922/Minegrechka.html deleted file mode 100644 index 3638896..0000000 --- a/backup/20260103_082922/backup/20260103_082922/Minegrechka.html +++ /dev/null @@ -1,2688 +0,0 @@ - - - - - -GrechkaCraft: Multiplayer - - - - - - -
- - -
-
-
❤️ 100   🍗 100
-
🫁 100
-
📍 X:0 Y:0
-
🕒 День
-
🌐 default
- -
- -
🏃
-
💾
-
🔄
-
🔨
- -
-
-
Крафт
- -
-
-
- -
-
-
Инвентарь
- -
-
-
- -
-
ВЫ ПОГИБЛИ
- -
- -
-
🎒
-
- - - -
💬
-
- -
-
←
- -
↑
-
- - - - diff --git a/backup/20260103_082922/backup/20260103_082922/Minegrechka_Telegram.html b/backup/20260103_082922/backup/20260103_082922/Minegrechka_Telegram.html deleted file mode 100644 index aac7653..0000000 --- a/backup/20260103_082922/backup/20260103_082922/Minegrechka_Telegram.html +++ /dev/null @@ -1,2623 +0,0 @@ - - - - - -GrechkaCraft: Multiplayer - - - - - - - - -
- - -
-
-
❤️ 100   🍗 100
-
🫁 100
-
📍 X:0 Y:0
-
🕒 День
-
🌐 default
- -
- -
🏃
-
💾
-
🔨
- -
-
-
Крафт
- -
-
-
- -
-
-
Инвентарь
- -
-
-
- -
-
ВЫ ПОГИБЛИ
- -
- -
-
🎒
-
- - - -
💬
-
- -
-
←
- -
↑
-
- - - - diff --git a/backup/20260103_082922/backup/20260103_082922/docker-compose.yml b/backup/20260103_082922/backup/20260103_082922/docker-compose.yml deleted file mode 100644 index 3de5ddb..0000000 --- a/backup/20260103_082922/backup/20260103_082922/docker-compose.yml +++ /dev/null @@ -1,27 +0,0 @@ -name: grechka-game -services: - grechka-game: - build: - context: . - dockerfile: Dockerfile - container_name: grechka-game - restart: unless-stopped - networks: - - shared_network - labels: - # Включаем Traefik для этого сервиса - - "traefik.enable=true" - - "traefik.docker.network=shared_network" - - # HTTPS роутер - - "traefik.http.routers.grechka-game.entrypoints=websecure" - - "traefik.http.routers.grechka-game.rule=Host(`grechka.mkn8n.ru`)" - - "traefik.http.routers.grechka-game.tls=true" - - "traefik.http.routers.grechka-game.tls.certresolver=mytlschallenge" - - # Сервис - - "traefik.http.services.grechka-game.loadbalancer.server.port=80" - -networks: - shared_network: - external: true diff --git a/backup/20260103_082922/backup/20260103_082922/game.js b/backup/20260103_082922/backup/20260103_082922/game.js deleted file mode 100644 index 49d8e40..0000000 --- a/backup/20260103_082922/backup/20260103_082922/game.js +++ /dev/null @@ -1,2614 +0,0 @@ -(() => { - // ==================== КОНФИГУРАЦИЯ СЕРВЕРА ==================== - // Возможность переопределить сервер через query string - const urlParams = new URLSearchParams(window.location.search); - const SERVER_URL = urlParams.get('server') || 'https://apigrech.mkn8n.ru'; - const TELEGRAM_BOT_USERNAME = 'Grechkacraft_bot'; // Имя бота для share-ссылки - const TELEGRAM_APP_SHORT_NAME = 'minegrechka'; // Короткое имя Mini App - - // Защита от mixed content - if (location.protocol === 'https:' && SERVER_URL.startsWith('http://')) { - console.warn('⚠️ Mixed content warning: page is HTTPS but server URL is HTTP'); - alert('⚠️ Предупреждение: страница загружена по HTTPS, но сервер использует HTTP. Это может вызвать проблемы.'); - } - - // ==================== WORLD ID И ИГРОКА ==================== - let worldId = null; - let playerName = localStorage.getItem('minegrechka_playerName') || null; - - // Запрашиваем имя игрока, если его нет - if (!playerName) { - playerName = prompt('Введите ваше имя для игры:') || 'Игрок'; - localStorage.setItem('minegrechka_playerName', playerName); - console.log('Player name set:', playerName); - } - - // Берём worldId из URL или генерируем новый - console.log('Current URL:', window.location.href); - const worldParam = urlParams.get('world'); - console.log('world param:', worldParam); - - // Проверяем на null, undefined или пустую строку - worldId = (worldParam && worldParam.trim() !== '') ? worldParam : null; - - console.log('worldId after params:', worldId, 'type:', typeof worldId); - - // Если worldId отсутствует - генерируем новый и записываем в URL - if (!worldId) { - worldId = Math.random().toString(36).substring(2, 10); - console.log('Generated worldId:', worldId); - - try { - const newUrl = new URL(window.location.href); - newUrl.searchParams.set('world', worldId); - const newUrlString = newUrl.toString(); - console.log('New URL to set:', newUrlString); - - // Проверяем, поддерживается ли history API - if (typeof window.history !== 'undefined' && typeof window.history.replaceState === 'function') { - window.history.replaceState(null, '', newUrlString); - console.log('URL after replaceState:', window.location.href); - console.log('URL after replaceState (direct check):', window.location.search); - } else { - console.error('History API not supported!'); - } - } catch (e) { - console.error('Error updating URL:', e); - } - - console.log('Generated new worldId for browser:', worldId); - } - - console.log('Final worldId:', worldId, 'Player name:', playerName); - - console.log(`Server URL: ${SERVER_URL}, World ID: ${worldId}`); - - // Обработчик клика на worldId для копирования ссылки - document.getElementById('worldId').onclick = () => { - const shareUrl = new URL(window.location.href); - shareUrl.searchParams.set('world', worldId); - const shareUrlString = shareUrl.toString(); - - if (navigator.clipboard && navigator.clipboard.writeText) { - navigator.clipboard.writeText(shareUrlString).then(() => { - alert('Ссылка скопирована!'); - }).catch(() => { - alert('Ссылка на мир:\n' + shareUrlString); - }); - } else { - alert('Ссылка на мир:\n' + shareUrlString); - } - }; - - // ==================== SOCKET.IO КЛИЕНТ ==================== - let socket = null; - let isMultiplayer = false; // Флаг для мультиплеерного режима - const otherPlayers = new Map(); // socket_id -> {x, y, color} - let mySocketId = null; - - // Throttle для отправки позиции (10-20 раз в секунду) - let lastMoveSendTime = 0; - const MOVE_SEND_INTERVAL = 0.05; // 50ms = 20 раз в секунду - let lastSentX = 0, lastSentY = 0; - - function initSocket() { - try { - socket = io(SERVER_URL, { - path: '/socket.io/', - transports: ['websocket', 'polling'] - }); - - socket.on('connect', () => { - console.log(`Connected to server: ${SERVER_URL}, socket.id: ${socket.id}, worldId: ${worldId}`); - mySocketId = socket.id; - isMultiplayer = true; - - // Присоединяемся к миру - socket.emit('join_world', { world_id: worldId, player_name: playerName }); - - // Показываем в UI - worldIdEl.textContent = worldId; - multiplayerStatus.style.display = 'block'; - }); - - socket.on('connect_error', (error) => { - console.error('Socket connection error:', error); - isMultiplayer = false; - }); - - socket.on('disconnect', () => { - console.log('Disconnected from server'); - isMultiplayer = false; - otherPlayers.clear(); - multiplayerStatus.style.display = 'none'; - }); - - // Обработка world_state - socket.on('world_state', (data) => { - console.log('Received world_state:', data); - - // Устанавливаем seed и перегенерируем мир если он изменился - if (data.seed !== undefined && data.seed !== worldSeed) { - const oldSeed = worldSeed; - worldSeed = data.seed; - console.log('World seed changed from', oldSeed, 'to', worldSeed); - - // Очищаем и перегенерируем мир с новым seed - generated.clear(); - grid.clear(); - blocks.length = 0; - placedBlocks = []; - removedBlocks = []; - console.log('World regenerated with new seed:', worldSeed); - } - - // Применяем блоки - if (data.blocks && Array.isArray(data.blocks)) { - for (const block of data.blocks) { - if (block.op === 'set') { - setBlock(block.gx, block.gy, block.t, false); - } else if (block.op === 'remove') { - removeBlock(block.gx, block.gy); - } - } - } - - // Устанавливаем время - if (data.time !== undefined) { - worldTime = data.time; - isNightTime = worldTime > 0.5; - } - - // Если есть spawnPoint от сервера - используем его и генерируем эту позицию - if (data.spawnPoint) { - spawnPoint.x = data.spawnPoint.x; - spawnPoint.y = data.spawnPoint.y; - // Генерируем колонну в точке спавна - const spawnGX = Math.floor(spawnPoint.x / TILE); - genColumn(spawnGX); - console.log('Server spawnPoint received and column generated:', spawnPoint); - } else { - // Если spawnPoint не пришёл от сервера - генерируем безопасную позицию - const startGX = 6; - genColumn(startGX); - const surfaceY = surfaceGyAt(startGX); - spawnPoint.x = startGX * TILE; - spawnPoint.y = (surfaceY - 1) * TILE; - console.log('Generated safe spawn point:', spawnPoint, 'surfaceY:', surfaceY); - } - - // Устанавливаем игрока в точку спавна - player.x = spawnPoint.x; - player.y = spawnPoint.y; - player.vx = 0; - player.vy = 0; - player.fallStartY = player.y; - console.log('Player moved to spawn point:', player.x, player.y); - - // Обновляем список игроков - if (data.players && Array.isArray(data.players)) { - otherPlayers.clear(); - for (const p of data.players) { - if (p.socket_id !== mySocketId) { - otherPlayers.set(p.socket_id, { - x: p.x, - y: p.y, - color: getRandomPlayerColor(p.socket_id), - name: p.player_name || 'Игрок' - }); - } - } - // Обновляем счётчик игроков - playerCountEl.textContent = data.players.length; - } - }); - - // Игрок присоединился - socket.on('player_joined', (data) => { - console.log('Player joined:', data.socket_id); - if (data.socket_id !== mySocketId) { - // Генерируем безопасную позицию для нового игрока - const spawnGX = 6; - genColumn(spawnGX); - const surfaceY = surfaceGyAt(spawnGX); - const safeSpawnX = spawnGX * TILE; - const safeSpawnY = (surfaceY - 1) * TILE; - - otherPlayers.set(data.socket_id, { - x: safeSpawnX, - y: safeSpawnY, - color: getRandomPlayerColor(data.socket_id), - name: data.player_name || 'Игрок' - }); - addChatMessage('Система', `Игрок присоединился`); - // Обновляем видимость кнопки сохранения - updateSaveButtonVisibility(); - } - }); - - // Игрок переместился - socket.on('player_moved', (data) => { - if (data.socket_id !== mySocketId && otherPlayers.has(data.socket_id)) { - const p = otherPlayers.get(data.socket_id); - p.x = data.x; - p.y = data.y; - // Обновляем имя, если оно пришло - if (data.player_name) { - p.name = data.player_name; - } - } - }); - - // Игрок покинул - socket.on('player_left', (data) => { - console.log('Player left:', data.socket_id); - otherPlayers.delete(data.socket_id); - addChatMessage('Система', `Игрок покинул игру`); - // Обновляем видимость кнопки сохранения - updateSaveButtonVisibility(); - }); - - // Блок изменён - socket.on('block_changed', (data) => { - if (data.op === 'set') { - setBlock(data.gx, data.gy, data.t, false); - } else if (data.op === 'remove') { - removeBlock(data.gx, data.gy); - } - }); - - // Сообщение в чат - socket.on('chat_message', (data) => { - const senderName = data.socket_id === mySocketId ? 'Вы' : `Игрок ${data.socket_id.substring(0, 6)}`; - addChatMessage(senderName, data.message); - }); - - // Обновление времени - socket.on('time_update', (data) => { - if (data.time !== undefined) { - worldTime = data.time; - isNightTime = worldTime > 0.5; - } - }); - - } catch (e) { - console.error('Error initializing socket:', e); - isMultiplayer = false; - } - } - - // Генерация случайного цвета для игрока на основе socket_id - function getRandomPlayerColor(socketId) { - const colors = ['#e74c3c', '#3498db', '#2ecc71', '#f39c12', '#9b59b6', '#1abc9c', '#e91e63', '#00bcd4']; - let hash = 0; - for (let i = 0; i < socketId.length; i++) { - hash = ((hash << 5) - hash) + socketId.charCodeAt(i); - hash = hash & hash; - } - return colors[Math.abs(hash) % colors.length]; - } - - // Отправка позиции игрока (с throttle) - function sendPlayerPosition() { - if (!isMultiplayer || !socket || !socket.connected) return; - - const now = performance.now() / 1000; - if (now - lastMoveSendTime < MOVE_SEND_INTERVAL) return; - - // Отправляем только если позиция изменилась - const dx = Math.abs(player.x - lastSentX); - const dy = Math.abs(player.y - lastSentY); - if (dx < 1 && dy < 1) return; - - lastMoveSendTime = now; - lastSentX = player.x; - lastSentY = player.y; - - socket.emit('player_move', { x: player.x, y: player.y, player_name: playerName }); - } - - // Отправка изменения блока - function sendBlockChange(gx, gy, t, op) { - if (!isMultiplayer || !socket || !socket.connected) return; - - socket.emit('block_change', { gx, gy, t, op }); - } - - // ==================== ЧАТ ==================== - const chatMessages = []; - const MAX_CHAT_MESSAGES = 20; - - function addChatMessage(sender, message) { - const time = new Date().toLocaleTimeString('ru-RU', { hour: '2-digit', minute: '2-digit' }); - chatMessages.push({ sender, message, time }); - if (chatMessages.length > MAX_CHAT_MESSAGES) { - chatMessages.shift(); - } - renderChatMessages(); - } - - function renderChatMessages() { - const chatMessagesEl = document.getElementById('chatMessages'); - if (!chatMessagesEl) return; - - chatMessagesEl.innerHTML = chatMessages.map(m => - `
${m.time} ${m.sender}: ${m.message}
` - ).join(''); - - // Прокручиваем вниз - chatMessagesEl.scrollTop = chatMessagesEl.scrollHeight; - } - - function sendChatMessage(message) { - if (!message || message.trim() === '') return; - - if (isMultiplayer && socket && socket.connected) { - socket.emit('chat_message', { message: message.trim() }); - } else { - addChatMessage('Вы', message.trim()); - } - } - - // ==================== ПОДЕЛИТЬСЯ МИРОМ ==================== - function shareWorld() { - const shareUrl = new URL(window.location.href); - shareUrl.searchParams.set('world', worldId); - const shareUrlString = shareUrl.toString(); - - // Копируем в буфер обмена - if (navigator.clipboard && navigator.clipboard.writeText) { - navigator.clipboard.writeText(shareUrlString).then(() => { - alert('Ссылка скопирована!'); - }).catch(() => { - alert('Ссылка на мир:\n' + shareUrlString); - }); - } else { - alert('Ссылка на мир:\n' + shareUrlString); - } - } - - // ==================== ИНИЦИАЛИЗАЦИЯ UI ==================== - let chatOpen = false; - - document.getElementById('chatToggle').onclick = () => { - playSound('click'); - chatOpen = !chatOpen; - document.getElementById('chatPanel').style.display = chatOpen ? 'block' : 'none'; - if (chatOpen) { - document.getElementById('chatInput').focus(); - } - }; - - document.getElementById('chatClose').onclick = () => { - playSound('click'); - chatOpen = false; - document.getElementById('chatPanel').style.display = 'none'; - }; - - document.getElementById('chatSend').onclick = () => { - const input = document.getElementById('chatInput'); - sendChatMessage(input.value); - input.value = ''; - }; - - document.getElementById('chatInput').addEventListener('keypress', (e) => { - if (e.key === 'Enter') { - sendChatMessage(e.target.value); - e.target.value = ''; - } - }); - - // ==================== ИНИЦИАЛИЗАЦИЯ СОКЕТА ==================== - // Инициализируем socket - initSocket(); - - // ==================== ЗВУКОВОЙ ДВИЖОК ==================== - const sounds = {}; - function loadSound(id, src) { - const audio = new Audio(); - audio.src = src; - audio.volume = 0.3; - sounds[id] = audio; - } - - // Загрузка звуков - loadSound('splash', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//splash.mp3'); - loadSound('sand1', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//sand1.mp3'); - loadSound('snow1', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//snow1.mp3'); - loadSound('stone1', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//stone1.mp3'); - loadSound('wood1', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//wood1.mp3'); - loadSound('cloth1', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//cloth1.mp3'); - loadSound('fire', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//fire.mp3'); - loadSound('hit1', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//hit1.mp3'); - loadSound('attack', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//attack.mp3'); - loadSound('hurt_chicken', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//hurt1_chicken.mp3'); - loadSound('stone_build', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//stone1%20(1).mp3'); - loadSound('wood_build', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//wood1%20(1).mp3'); - loadSound('click', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//click.mp3'); - loadSound('explode1', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//explode1.mp3'); - loadSound('glass1', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//glass1.mp3'); - loadSound('eat1', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//eat1.mp3'); - loadSound('step', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//sand2.mp3'); - - function playSound(id) { - if(sounds[id]) { - sounds[id].currentTime = 0; - sounds[id].play().catch(e => console.error('Sound error:', e)); - } - } - - // Играем звук при прыжке - const gameEl = document.getElementById('game'); - const canvas = document.getElementById('c'); - const ctx = canvas.getContext('2d'); - - // offscreen light map (не вставляем в DOM) - const lightC = document.createElement('canvas'); - const lightCtx = lightC.getContext('2d'); - - const dpr = Math.max(1, window.devicePixelRatio || 1); - let W=0, H=0; - - const TILE = 40; - - // Мир - const SEA_GY = 14; // уровень воды (gy) - уменьшил для меньших водоёмов - const BEDROCK_GY = 140; // глубина бедрока (gy), чем больше - тем глубже - const GEN_MARGIN_X = 26; // запас генерации по X (в тайлах) - - const heroImg = new Image(); - heroImg.src = 'https://supamg.mkn8n.ru/storage/v1/object/public/img//grechka.png'; - - // Состояние инвентаря - let showFullInventory = false; - let recentItems = []; // Последние 5 выбранных предметов - - const BLOCKS = { - air: { n:'Воздух', solid:false }, - grass: { n:'Трава', c:'#7cfc00', solid:true }, - dirt: { n:'Грязь', c:'#8b4513', solid:true }, - stone: { n:'Камень', c:'#7f8c8d', solid:true }, - sand: { n:'Песок', c:'#f4d06f', solid:true }, - gravel: { n:'Гравий', c:'#95a5a6', solid:true }, - clay: { n:'Глина', c:'#74b9ff', solid:true }, - wood: { n:'Дерево', c:'#d35400', solid:true }, - planks: { n:'Доски', c:'#e67e22', solid:true }, - ladder: { n:'Лестница',c:'#d35400', solid:false, climbable:true }, - leaves: { n:'Листва', c:'#2ecc71', solid:true }, - glass: { n:'Стекло', c:'rgba(200,240,255,0.25)', solid:true, alpha:0.55 }, - water: { n:'Вода', c:'rgba(52,152,219,0.55)', solid:false, fluid:true }, - coal: { n:'Уголь', c:'#2c3e50', solid:true }, - copper_ore:{ n:'Медь', c:'#e17055', solid:true }, - iron_ore: { n:'Железо', c:'#dcdde1', solid:true }, - gold_ore: { n:'Золото', c:'#f1c40f', solid:true }, - diamond_ore:{n:'Алмаз', c:'#00a8ff', solid:true }, - brick: { n:'Кирпич', c:'#c0392b', solid:true }, - tnt: { n:'TNT', c:'#e74c3c', solid:true, explosive:true }, - campfire: { n:'Костёр', c:'#e67e22', solid:true, lightRadius:190 }, - torch: { n:'Факел', c:'#f9ca24', solid:true, lightRadius:140 }, - bedrock: { n:'Бедрок', c:'#2d3436', solid:true, unbreakable:true }, - flower: { n:'Цветок', c:'#ff4757', solid:false, decor:true }, - bed: { n:'Кровать', c:'#e91e63', solid:true, bed:true }, - boat: { n:'Лодка', c:'#8B4513', solid:false } - }; - - const ITEMS = { - meat: { n:'Сырое мясо', icon:'🥩', food:15 }, - cooked: { n:'Жареное мясо', icon:'🍖', food:45 } - }; - - // Seed мира для детерминированной генерации - // Инициализируем случайным seed, но он будет перезаписан сервером в мультиплеере - let worldSeed = Math.floor(Math.random() * 1000000); - - // Отслеживание изменений мира (для оптимизированного сохранения) - let placedBlocks = []; // [{gx, gy, t}] - блоки, установленные игроком - let removedBlocks = []; // [{gx, gy}] - блоки, удалённые игроком - - // Инструменты - const TOOLS = { - wood_pickaxe: { n:'Деревянная кирка', icon:'⛏️', durability: 60, miningPower: 1, craft: { wood: 3, planks: 2 } }, - stone_pickaxe: { n:'Каменная кирка', icon:'⛏️', durability: 130, miningPower: 2, craft: { wood: 1, stone: 3 } }, - iron_pickaxe: { n:'Железная кирка', icon:'⛏️', durability: 250, miningPower: 3, craft: { wood: 1, iron_ore: 2 } }, - wood_sword: { n:'Деревянный меч', icon:'⚔️', durability: 40, damage: 5, craft: { wood: 2, planks: 1 } }, - stone_sword: { n:'Каменный меч', icon:'⚔️', durability: 100, damage: 8, craft: { wood: 1, stone: 2 } }, - iron_sword: { n:'Железный меч', icon:'⚔️', durability: 200, damage: 12, craft: { wood: 1, iron_ore: 1 } } - }; - - // Текстуры блоков (простые) - const tex = {}; - function makeTex(type) { - const t = BLOCKS[type]; - const c = document.createElement('canvas'); - c.width = 32; c.height = 32; - const g = c.getContext('2d'); - - if (type === 'tnt') { - g.fillStyle='#c0392b'; g.fillRect(0,0,32,32); - g.fillStyle='#fff'; g.fillRect(0,12,32,8); - g.fillStyle='#000'; g.font='bold 10px sans-serif'; g.fillText('TNT',6,20); - return c; - } - if (type === 'campfire') { - g.fillStyle='#5d4037'; g.fillRect(4,26,24,6); - g.fillStyle='#3e2723'; g.fillRect(7,23,18,4); - return c; - } - if (type === 'torch') { - g.fillStyle='#6d4c41'; g.fillRect(14,10,4,18); - g.fillStyle='#f39c12'; g.fillRect(12,6,8,8); - return c; - } - if (type === 'glass') { - g.fillStyle='rgba(200,240,255,0.25)'; g.fillRect(0,0,32,32); - g.strokeStyle='rgba(255,255,255,0.65)'; g.strokeRect(2,2,28,28); - g.beginPath(); g.moveTo(5,27); g.lineTo(27,5); g.stroke(); - return c; - } - if (type === 'water') { - g.fillStyle = t.c; g.fillRect(0,0,32,32); - g.fillStyle = 'rgba(255,255,255,0.08)'; - g.fillRect(0,6,32,2); - return c; - } - if (type === 'bed') { - // Основание кровати - g.fillStyle = '#e91e63'; - g.fillRect(0, 0, 32, 32); - // Подушка - g.fillStyle = '#f8bbd0'; - g.fillRect(2, 2, 14, 14); - // Одеяло - g.fillStyle = '#c2185b'; - g.fillRect(16, 4, 14, 24); - // Детали одеяла - g.fillStyle = '#e91e63'; - g.fillRect(18, 6, 10, 20); - return c; - } - if (type === 'flower') { - g.fillStyle='#2ecc71'; g.fillRect(14,14,4,18); - g.fillStyle=t.c; g.beginPath(); g.arc(16,12,6,0,6.28); g.fill(); - return c; - } - if (type === 'boat') { - // Корпус лодки - g.fillStyle = '#8B4513'; - g.fillRect(2, 12, 28, 8); - // Борта - g.fillStyle = '#A0522D'; - g.fillRect(0, 10, 32, 12); - // Внутренность - g.fillStyle = '#DEB887'; - g.fillRect(4, 14, 24, 4); - // Дно - g.fillStyle = '#654321'; - g.fillRect(2, 20, 28, 4); - return c; - } - if (type === 'ladder') { - // Боковые стойки лестницы - g.fillStyle = '#8B4513'; - g.fillRect(4, 0, 4, 32); - g.fillRect(24, 0, 4, 32); - // Ступени - g.fillStyle = '#A0522D'; - g.fillRect(4, 4, 24, 3); - g.fillRect(4, 12, 24, 3); - g.fillRect(4, 20, 24, 3); - g.fillRect(4, 28, 24, 3); - return c; - } - - g.fillStyle = t.c || '#000'; - g.fillRect(0,0,32,32); - - g.fillStyle = 'rgba(0,0,0,0.10)'; - for (let i=0;i<6;i++) g.fillRect((Math.random()*28)|0, (Math.random()*28)|0, 4,4); - - if (type.endsWith('_ore') || type==='coal') { - g.fillStyle = 'rgba(0,0,0,0.35)'; - for (let i=0;i<4;i++) g.fillRect((Math.random()*24)|0, (Math.random()*24)|0, 6,6); - } - return c; - } - Object.keys(BLOCKS).forEach(k => tex[k] = makeTex(k)); - - // Мир-хранилище - const grid = new Map(); // key "gx,gy" => {gx,gy,t, ...} - const blocks = []; // для рендера/перебора видимых - function k(gx,gy){ return gx+','+gy; } - function getBlock(gx,gy){ return grid.get(k(gx,gy)); } - function hasBlock(gx,gy){ return grid.has(k(gx,gy)); } - function isSolid(gx,gy){ - const b = getBlock(gx,gy); - if(!b || b.dead) return false; - const def = BLOCKS[b.t]; - return !!def.solid && !def.fluid && !def.decor; - } - function setBlock(gx,gy,t, isPlayerPlaced = false){ - const key = k(gx,gy); - if(grid.has(key)) return false; - const b = { gx, gy, t, dead:false, active:false, fuse:0 }; - grid.set(key, b); - blocks.push(b); - - // Отслеживаем блоки, установленные игроком - if(isPlayerPlaced){ - placedBlocks.push({gx, gy, t}); - } - - return true; - } - function removeBlock(gx,gy){ - const key = k(gx,gy); - const b = grid.get(key); - if(!b) return null; - if(BLOCKS[b.t].unbreakable) return null; - grid.delete(key); - b.dead = true; - - // Отслеживаем удалённые блоки - const wasPlayerPlaced = placedBlocks.some(pb => pb.gx === gx && pb.gy === gy); - if(wasPlayerPlaced){ - // Удаляем из placedBlocks - placedBlocks = placedBlocks.filter(pb => !(pb.gx === gx && pb.gy === gy)); - } else { - // Это природный блок - добавляем в removedBlocks - removedBlocks.push({gx, gy}); - } - - return b; - } - - // Физика жидкости - const waterUpdateQueue = new Set(); - let waterUpdateTimer = 0; - const WATER_UPDATE_INTERVAL = 0.05; // Обновляем воду каждые 0.05 секунды - - function updateWaterPhysics(dt){ - waterUpdateTimer += dt; - if(waterUpdateTimer < WATER_UPDATE_INTERVAL) return; - waterUpdateTimer = 0; - - // Ограничиваем количество водных блоков для обработки (оптимизация) - const MAX_WATER_BLOCKS_PER_UPDATE = 50; - let processedCount = 0; - - // Собираем только видимые водные блоки в очередь (оптимизация) - waterUpdateQueue.clear(); - const minGX = Math.floor(camX/TILE) - 10; - const maxGX = Math.floor((camX+W)/TILE) + 10; - const minGY = Math.floor(camY/TILE) - 10; - const maxGY = Math.floor((camY+H)/TILE) + 10; - - for(const b of blocks){ - if(processedCount >= MAX_WATER_BLOCKS_PER_UPDATE) break; - if(!b.dead && b.t === 'water' && - b.gx >= minGX && b.gx <= maxGX && - b.gy >= minGY && b.gy <= maxGY){ - waterUpdateQueue.add(k(b.gx, b.gy)); - processedCount++; - } - } - - // Обновляем воду с ограничением глубины распространения - const processed = new Set(); - const toAdd = []; - const MAX_WATER_DEPTH = 20; // Максимальная глубина распространения воды - - for(const key of waterUpdateQueue){ - if(processed.has(key)) continue; - const b = grid.get(key); - if(!b || b.dead) continue; - processed.add(key); - - const gx = b.gx; - const gy = b.gy; - - // Проверяем глубину - не распространяем воду слишком глубоко - if(gy > SEA_GY + MAX_WATER_DEPTH) continue; - - // Проверяем, можно ли воде упасть вниз - const belowKey = k(gx, gy + 1); - const below = grid.get(belowKey); - - // Внизу пусто - вода создаёт новый блок внизу (но не удаляется сверху) - if(!below || below.dead){ - // Ограничиваем создание новых водных блоков - if(toAdd.length < 20){ // Максимум 20 новых блоков за обновление - toAdd.push({gx, gy: gy + 1, t: 'water'}); - processed.add(belowKey); - } - continue; - } - - // Если внизу не вода и не твёрдый блок - вода может течь вниз - if(!isSolid(gx, gy + 1) && below && below.t !== 'water'){ - if(toAdd.length < 20){ - toAdd.push({gx, gy: gy + 1, t: 'water'}); - processed.add(belowKey); - } - continue; - } - - // Если внизу твёрдый блок или вода - вода растекается горизонтально - // Проверяем левую сторону - const leftKey = k(gx - 1, gy); - const left = grid.get(leftKey); - if(!left || left.dead){ - if(toAdd.length < 20){ - toAdd.push({gx: gx - 1, gy, t: 'water'}); - processed.add(leftKey); - } - continue; - } - - // Проверяем правую сторону - const rightKey = k(gx + 1, gy); - const right = grid.get(rightKey); - if(!right || right.dead){ - if(toAdd.length < 20){ - toAdd.push({gx: gx + 1, gy, t: 'water'}); - processed.add(rightKey); - } - continue; - } - } - - // Применяем изменения (только добавляем новые блоки) - for(const newData of toAdd){ - const key = k(newData.gx, newData.gy); - if(!grid.has(key)){ - const b = { - gx: newData.gx, - gy: newData.gy, - t: newData.t, - dead: false, - active: false, - fuse: 0 - }; - grid.set(key, b); - blocks.push(b); - } - } - - // Очищаем мёртвые блоки из массива - for(let i = blocks.length - 1; i >= 0; i--){ - if(blocks[i].dead){ - blocks.splice(i, 1); - } - } - } - - // Инвентарь - const inv = { - dirt:6, stone:0, sand:0, gravel:0, clay:0, - wood:0, planks:0, ladder:0, leaves:0, coal:0, - copper_ore:0, iron_ore:0, gold_ore:0, diamond_ore:0, - brick:0, glass:0, - tnt:1, campfire:0, torch:0, - meat:0, cooked:0, - wood_pickaxe:0, stone_pickaxe:0, iron_pickaxe:0, - wood_sword:0, stone_sword:0, iron_sword:0, - bed:0, boat:0 - }; - let selected = 'dirt'; - - const RECIPES = [ - { out:'planks', qty:4, cost:{ wood:1 } }, - { out:'ladder', qty:3, cost:{ planks:7 } }, - { out:'torch', qty:2, cost:{ coal:1, planks:1 } }, - { out:'glass', qty:1, cost:{ sand:3 } }, - { out:'brick', qty:1, cost:{ stone:2, clay:1 } }, - { out:'campfire', qty:1, cost:{ wood:1, coal:1 } }, - { out:'tnt', qty:1, cost:{ sand:2, coal:1 } }, - { out:'bed', qty:1, cost:{ wood: 3, planks: 3 } }, - { out:'boat', qty:1, cost:{ wood: 5 } }, - { out:'wood_pickaxe', qty:1, cost:{ wood: 3, planks: 2 } }, - { out:'stone_pickaxe', qty:1, cost:{ wood: 1, stone: 3 } }, - { out:'iron_pickaxe', qty:1, cost:{ wood: 1, iron_ore: 2 } }, - { out:'wood_sword', qty:1, cost:{ wood: 2, planks: 1 } }, - { out:'stone_sword', qty:1, cost:{ wood: 1, stone: 2 } }, - { out:'iron_sword', qty:1, cost:{ wood: 1, iron_ore: 1 } } - ]; - - // UI - const hpEl = document.getElementById('hp'); - const foodEl = document.getElementById('food'); - const sxEl = document.getElementById('sx'); - const syEl = document.getElementById('sy'); - const todEl = document.getElementById('tod'); - const worldIdEl = document.getElementById('worldId'); - const playerCountEl = document.getElementById('playerCount'); - const hotbarEl = document.getElementById('hotbar'); - const craftPanel = document.getElementById('craftPanel'); - const recipesEl = document.getElementById('recipes'); - const deathEl = document.getElementById('death'); - const inventoryPanel = document.getElementById('inventoryPanel'); - const inventoryGrid = document.getElementById('inventoryGrid'); - - // Клик на часы для включения ночи - todEl.style.cursor = 'pointer'; - todEl.onclick = () => { - playSound('click'); - worldTime = 0.6; // Устанавливаем ночь - isNightTime = true; - }; - - function rebuildHotbar(){ - hotbarEl.innerHTML=''; - - // Показываем последние 5 выбранных предметов (если они есть в инвентаре) - const items = recentItems.filter(id => inv[id] > 0).slice(0, 5); - - for(const id of items){ - const s = document.createElement('div'); - s.className = 'slot'+(id===selected?' sel':''); - if(BLOCKS[id]) { - s.style.backgroundImage = `url(${tex[id].toDataURL()})`; - s.style.backgroundSize = 'cover'; - } else if(ITEMS[id]) { - s.textContent = ITEMS[id].icon; - } else if(TOOLS[id]) { - s.textContent = TOOLS[id].icon; - } - const c = document.createElement('div'); - c.className='count'; - c.textContent = inv[id]; - s.appendChild(c); - s.onclick = () => { - playSound('click'); // Звук клика по инвентарю - selected=id; - // Обновляем список последних предметов - recentItems = recentItems.filter(item => item !== id); // Удаляем если уже есть - recentItems.unshift(id); // Добавляем в начало - recentItems = recentItems.slice(0, 5); // Оставляем только 5 - rebuildHotbar(); - }; - hotbarEl.appendChild(s); - } - } - - function renderInventory() { - inventoryGrid.innerHTML = ''; - - // Создаём сетку инвентаря 7x3 - const items = Object.keys(inv).filter(id => inv[id] > 0); - - // Добавляем пустые слоты для полной сетки - for(let i = 0; i < 21; i++) { - const slot = document.createElement('div'); - slot.className = 'inv-slot' + (i < items.length && items[i] === selected ? ' sel' : ''); - - if(i < items.length) { - const id = items[i]; - if(BLOCKS[id]) { - slot.style.backgroundImage = `url(${tex[id].toDataURL()})`; - slot.style.backgroundSize = 'cover'; - } else if(ITEMS[id]) { - slot.textContent = ITEMS[id].icon; - } else if(TOOLS[id]) { - slot.textContent = TOOLS[id].icon; - } - - const count = document.createElement('div'); - count.className = 'inv-count'; - count.textContent = inv[id]; - slot.appendChild(count); - - slot.onclick = () => { - playSound('click'); // Звук клика по инвентарю - selected = id; - // Обновляем список последних предметов - recentItems = recentItems.filter(item => item !== id); // Удаляем если уже есть - recentItems.unshift(id); // Добавляем в начало - recentItems = recentItems.slice(0, 5); // Оставляем только 5 - rebuildHotbar(); - renderInventory(); - }; - } - - inventoryGrid.appendChild(slot); - } - } - - function canCraft(r){ - for(const res in r.cost){ - if((inv[res]||0) < r.cost[res]) return false; - } - return true; - } - function renderCraft(){ - recipesEl.innerHTML=''; - for(const r of RECIPES){ - const row = document.createElement('div'); - row.className='recipe'; - const icon = document.createElement('div'); - icon.className='ricon'; - icon.style.backgroundImage = `url(${tex[r.out].toDataURL()})`; - const info = document.createElement('div'); - info.className='rinfo'; - const nm = document.createElement('div'); - nm.className='rname'; - nm.textContent = `${BLOCKS[r.out].n} x${r.qty}`; - const cs = document.createElement('div'); - cs.className='rcost'; - cs.textContent = Object.keys(r.cost).map(x => `${BLOCKS[x].n}: ${(inv[x]||0)}/${r.cost[x]}`).join(' '); - info.appendChild(nm); info.appendChild(cs); - const btn = document.createElement('button'); - btn.className='rcraft'; - btn.textContent='Создать'; - btn.disabled = !canCraft(r); - btn.onclick = () => { - if(!canCraft(r)) return; - playSound('click'); // Звук клика по кнопке крафта - for(const res in r.cost) inv[res]-=r.cost[res]; - inv[r.out] = (inv[r.out]||0) + r.qty; - rebuildHotbar(); - renderCraft(); - }; - row.appendChild(icon); row.appendChild(info); row.appendChild(btn); - recipesEl.appendChild(row); - } - } - - let craftOpen=false; - let inventoryOpen = false; - - document.getElementById('craftBtn').onclick = () => { - playSound('click'); // Звук клика по кнопке - craftOpen = !craftOpen; - craftPanel.style.display = craftOpen ? 'block' : 'none'; - if(craftOpen) { - renderCraft(); - // Закрываем инвентарь если открыт крафт - inventoryOpen = false; - inventoryPanel.style.display = 'none'; - } - }; - document.getElementById('craftClose').onclick = () => { - playSound('click'); // Звук клика по кнопке - craftOpen = false; - craftPanel.style.display = 'none'; - }; - - // Кнопка открытия инвентаря - document.getElementById('invToggle').onclick = () => { - playSound('click'); // Звук клика по кнопке - inventoryOpen = true; - inventoryPanel.style.display = 'block'; - renderInventory(); - // Закрываем крафт если открыт инвентарь - craftOpen = false; - craftPanel.style.display = 'none'; - }; - - document.getElementById('inventoryClose').onclick = () => { - playSound('click'); // Звук клика по кнопке - inventoryOpen = false; - inventoryPanel.style.display = 'none'; - }; - - // Кнопка сохранения игры (только для одиночного режима) - const saveBtn = document.getElementById('saveBtn'); - saveBtn.onclick = () => { - playSound('click'); - saveGame(); - alert('Игра сохранена!'); - }; - - // Кнопка сброса игры (удаление сохранения и создание нового мира) - const resetBtn = document.getElementById('resetBtn'); - resetBtn.onclick = () => { - if (confirm('Вы уверены, что хотите удалить сохранение и начать новую игру?')) { - playSound('click'); - - // Удаляем сохранение из localStorage - try { - localStorage.removeItem(SAVE_KEY); - console.log('Сохранение удалено из localStorage'); - } catch (e) { - console.warn('Ошибка удаления сохранения:', e); - } - - // Сбрасываем in-memory сохранение - inMemorySave = null; - - // Генерируем новый worldId - worldId = Math.random().toString(36).substring(2, 10); - console.log('Новый worldId после сброса:', worldId); - - // Обновляем URL - try { - const newUrl = new URL(window.location.href); - newUrl.searchParams.set('world', worldId); - const newUrlString = newUrl.toString(); - - if (typeof window.history !== 'undefined' && typeof window.history.replaceState === 'function') { - window.history.replaceState(null, '', newUrlString); - console.log('URL обновлён:', newUrlString); - } - } catch (e) { - console.error('Ошибка обновления URL:', e); - } - - // Перезагружаем страницу - location.reload(); - } - }; - - // Показываем кнопку сохранения только если играем одни - function updateSaveButtonVisibility() { - if (isMultiplayer && otherPlayers.size > 0) { - saveBtn.style.display = 'none'; - } else { - saveBtn.style.display = 'flex'; - } - } - - // Режимы - const MODES = [{id:'move',icon:'🏃'},{id:'mine',icon:'⛏️'},{id:'build',icon:'🧱'}]; - let modeIdx=0; - const modeBtn = document.getElementById('modeBtn'); - function mode(){ return MODES[modeIdx].id; } - modeBtn.onclick = () => { - playSound('click'); // Звук клика по кнопке режима - modeIdx=(modeIdx+1)%MODES.length; modeBtn.textContent=MODES[modeIdx].icon; - }; - - // День/ночь (автоматический цикл) - let isNightTime = false; - - // Управление - const inp = { l:false, r:false, j:false }; - function bindHold(el, key){ - const down=(e)=>{ e.preventDefault(); inp[key]=true; }; - const up=(e)=>{ e.preventDefault(); inp[key]=false; }; - el.addEventListener('pointerdown', down); - el.addEventListener('pointerup', up); - el.addEventListener('pointerleave', up); - } - bindHold(document.getElementById('left'),'l'); - bindHold(document.getElementById('right'),'r'); - bindHold(document.getElementById('jump'),'j'); - - window.addEventListener('keydown', (e)=>{ - if(e.code==='KeyA'||e.code==='ArrowLeft') inp.l=true; - if(e.code==='KeyD'||e.code==='ArrowRight') inp.r=true; - if(e.code==='Space'||e.code==='KeyW'||e.code==='ArrowUp') inp.j=true; - }); - window.addEventListener('keyup', (e)=>{ - if(e.code==='KeyA'||e.code==='ArrowLeft') inp.l=false; - if(e.code==='KeyD'||e.code==='ArrowRight') inp.r=false; - if(e.code==='Space'||e.code==='KeyW'||e.code==='ArrowUp') inp.j=false; - }); - - // Лодка - const boat = { - x: 0, y: 0, - w: 34, h: 34, - vx: 0, vy: 0, - active: false, - inWater: false - }; - - // Игрок - const player = { - x: 6*TILE, y: 0*TILE, - w: 34, h: 34, - vx: 0, vy: 0, - grounded: false, - inWater: false, - headInWater: false, - hp: 100, - hunger: 100, - o2: 100, - invuln: 0, - fallStartY: 0, - lastStepTime: 0, - sleeping: false, - inBoat: false - }; - - // Сохраняем начальную позицию для возрождения - const spawnPoint = { x: 6*TILE, y: 0*TILE }; - - // Система сохранения игры (localStorage + in-memory fallback) - const SAVE_KEY = 'minegrechka_save'; - let db = null; // Оставляем для совместимости, но не используем - let inMemorySave = null; // Запасное сохранение в памяти - - // Инициализация (localStorage + in-memory fallback) - function initDB(){ - return new Promise((resolve) => { - console.log('Используем localStorage для сохранений (sandbox режим)'); - resolve(null); - }); - } - - // Детерминированный генератор псевдослучайных чисел на основе seed - function seededRandom(gx, gy){ - const n = Math.sin(gx * 12.9898 + gy * 78.233 + worldSeed * 0.1) * 43758.5453; - return n - Math.floor(n); - } - - function saveGame(){ - const saveData = { - version: 2, - worldSeed: worldSeed, - player: { - x: player.x, - y: player.y, - hp: player.hp, - hunger: player.hunger, - o2: player.o2 - }, - inventory: inv, - time: worldTime, - isNight: isNightTime, - // Сохраняем только изменения - placedBlocks: placedBlocks.slice(), - removedBlocks: removedBlocks.slice() - }; - - const saveSize = JSON.stringify(saveData).length; - console.log('Сохранение: player HP:', player.hp, 'hunger:', player.hunger, 'o2:', player.o2); - - // Пробуем сохранить в localStorage (основной метод для персистентности) - try { - localStorage.setItem(SAVE_KEY, JSON.stringify(saveData)); - console.log(`Игра сохранена в localStorage (размер: ${saveSize} байт)`); - } catch(e){ - console.warn('Ошибка сохранения в localStorage, используем только in-memory:', e); - - // Если localStorage недоступен, используем in-memory fallback - inMemorySave = saveData; - console.log(`Игра сохранена в памяти (размер: ${saveSize} байт)`); - } - } - - function loadGame(){ - return new Promise((resolve, reject) => { - // Пробуем localStorage - try { - const localSave = localStorage.getItem(SAVE_KEY); - if(localSave){ - const parsed = JSON.parse(localSave); - console.log('Загружено из localStorage, player HP:', parsed.player?.hp); - resolve(parsed); - return; - } - } catch(e){ - console.warn('Ошибка доступа к localStorage:', e); - } - - // Если localStorage недоступен, используем in-memory сохранение - if(inMemorySave){ - console.log('Загружено из in-memory сохранения, player HP:', inMemorySave.player?.hp); - resolve(inMemorySave); - return; - } - - console.log('Сохранение не найдено'); - resolve(null); - }); - } - - // Миграция с версии 1 на версию 2 - function migrateV1toV2(saveData){ - console.log('Миграция сохранения с версии 1 на версию 2...'); - - // Сохраняем seed из текущей игры (так как v1 его не хранил) - saveData.worldSeed = worldSeed; - - // Инициализируем массивы изменений - saveData.placedBlocks = []; - saveData.removedBlocks = []; - - // Для v1 нам нужно сравнить сгенерированные блоки с тем, что должно быть по seed - // Это сложно сделать без полной перегенерации, поэтому для v1 сохраняем только seed - // и при загрузке просто перегенерируем мир - - // Удаляем старые данные - delete saveData.generatedBlocks; - - saveData.version = 2; - console.log('Миграция завершена'); - } - - async function applySave(saveData){ - if(!saveData) return; - - console.log('=== applySave START ==='); - console.log('player HP before applySave:', player.hp); - console.log('saveData.player.hp:', saveData.player?.hp); - - // Миграция версий - if(saveData.version === 1){ - migrateV1toV2(saveData); - } - - // Восстанавливаем seed - if(saveData.worldSeed !== undefined){ - worldSeed = saveData.worldSeed; - } - - // Восстанавливаем игрока - if(saveData.player){ - player.x = saveData.player.x; - player.y = saveData.player.y; - player.hunger = saveData.player.hunger; - player.o2 = saveData.player.o2; - - // Обновляем spawnPoint на позицию из сохранения - spawnPoint.x = player.x; - spawnPoint.y = player.y; - - // Проверяем HP из сохранения - если <= 0, устанавливаем 100 - const savedHP = saveData.player.hp; - console.log('Saved HP from file:', savedHP); - if(savedHP <= 0){ - console.log('WARNING: Saved HP is <= 0, setting to 100!'); - player.hp = 100; - } else { - player.hp = savedHP; - } - console.log('player HP after restore:', player.hp); - console.log('spawnPoint обновлён из сохранения: x=', spawnPoint.x, 'y=', spawnPoint.y); - } else { - console.log('No player data in save, setting default HP: 100'); - player.hp = 100; - } - - console.log('=== applySave END ==='); - - // Восстанавливаем инвентарь - if(saveData.inventory){ - for(const key in saveData.inventory){ - inv[key] = saveData.inventory[key]; - } - } - - // Восстанавливаем время - if(saveData.time !== undefined){ - worldTime = saveData.time; - } - - // Восстанавливаем день/ночь - if(saveData.isNight !== undefined){ - isNightTime = saveData.isNight; - } - - // Перегенерируем мир по seed - regenerateVisibleChunks(); - - // Применяем изменения (только для v2) - if(saveData.version === 2){ - // Применяем блоки, установленные игроком - for(const block of saveData.placedBlocks){ - setBlock(block.gx, block.gy, block.t, true); - } - - // Применяем удалённые блоки - for(const block of saveData.removedBlocks){ - removeBlock(block.gx, block.gy); - } - - // Восстанавливаем массивы изменений - placedBlocks = saveData.placedBlocks || []; - removedBlocks = saveData.removedBlocks || []; - } - - rebuildHotbar(); - console.log('Игра загружена'); - } - - // Камера (двухосевая) - let camX=0, camY=0; - - // День/ночь - let worldTime=0; - const DAY_LEN=360; // замедлил смену дня/ночи в 3 раза - - // Облака - const clouds = Array.from({length:10}, ()=>({ - x: Math.random()*2000, - y: -200 - Math.random()*260, // выше экрана, потому что мир по Y теперь двигается - w: 80+Math.random()*120, - s: 12+Math.random()*20 - })); - - // Частицы (взрыв) - const parts = []; - function spawnExplosion(x,y, power){ - const n = Math.floor(16 + power*10); - for(let i=0;i 100){ - playSound('splash'); - } - } - - function resolveY(e){ - // Всегда пересчитываем grounded (не держим "липким") - e.grounded = false; - - const x1 = e.x + 2; - const x2 = e.x + e.w - 2; - - // Проверяем, находится ли игрок на лестнице - const cx = e.x + e.w/2; - const cy = e.y + e.h/2; - const gx = Math.floor(cx / TILE); - const gy = Math.floor(cy / TILE); - const b = getBlock(gx, gy); - const onLadder = b && BLOCKS[b.t] && BLOCKS[b.t].climbable; - - // Если на лестнице - можно двигаться вверх/вниз - if(onLadder && e === player){ - e.grounded = true; - e.vy *= 0.8; // замедляем падение на лестнице - - // Если нажимаем прыжок на лестнице - поднимаемся - if(inp.j && e.vy > -200){ - e.vy = -200; - } - // Если не нажимаем прыжок - медленно спускаемся - else if(!inp.j && e.vy > 0){ - e.vy = Math.min(e.vy, 100); - } - return; - } - - // 1) Если движемся вниз ИЛИ стоим (vy >= 0) — проверяем опору под ногами - // Берём точку на 1px ниже стопы, чтобы не зависеть от ровного попадания в границу тайла. - if(e.vy >= 0){ - const probeY = e.y + e.h + 1; - const gy = Math.floor(probeY / TILE); - const gxA = Math.floor(x1 / TILE); - const gxB = Math.floor(x2 / TILE); - - if(isSolid(gxA, gy) || isSolid(gxB, gy)){ - e.y = gy * TILE - e.h; // прижимаем к полу - e.vy = 0; - e.grounded = true; - - // урон от падения — только игроку и только не в воде - if(e === player && !player.inWater){ - const fallTiles = (e.y - e.fallStartY) / TILE; - if(fallTiles > 6) player.hp -= (fallTiles - 6) * 10; - } - if(e === player) e.fallStartY = e.y; - } - } - - // 2) Проверка на возможность запрыгнуть на блок, если игрок рядом с ним - if(e.vy < 0 && e === player){ - const gy = Math.floor(e.y / TILE); - const gxA = Math.floor(x1 / TILE); - const gxB = Math.floor(x2 / TILE); - - // Проверяем, есть ли блок рядом с игроком - if((isSolid(gxA, gy) || isSolid(gxB, gy)) && !isSolid(gxA, gy - 1) && !isSolid(gxB, gy - 1)){ - e.y = (gy + 1) * TILE; - e.vy = 0; - e.grounded = true; - if(e === player) e.fallStartY = e.y; - console.log("Jumped onto block!"); - } - } - - // 2) Если движемся вверх — проверяем потолок - if(e.vy < 0){ - const gy = Math.floor(e.y / TILE); - const gxA = Math.floor(x1 / TILE); - const gxB = Math.floor(x2 / TILE); - if(isSolid(gxA, gy) || isSolid(gxB, gy)){ - e.y = (gy + 1) * TILE; - e.vy = 0; - } - } - } - - function resolveX(e){ - const y1 = e.y + 2; - const y2 = e.y + e.h - 2; - - if(e.vx > 0){ - const gx = Math.floor((e.x + e.w)/TILE); - const gyA = Math.floor(y1/TILE); - const gyB = Math.floor(y2/TILE); - if(isSolid(gx, gyA) || isSolid(gx, gyB)){ - e.x = gx*TILE - e.w; - e.vx = 0; - } - } else if(e.vx < 0){ - const gx = Math.floor(e.x/TILE); - const gyA = Math.floor(y1/TILE); - const gyB = Math.floor(y2/TILE); - if(isSolid(gx, gyA) || isSolid(gx, gyB)){ - e.x = (gx+1)*TILE; - e.vx = 0; - } - } - } - - // TNT логика: цепь + усиление - const activeTNT = new Set(); // хранит key - function activateTNT(b, fuse=3.2){ - if(b.dead) return; - if(b.active) return; - b.active=true; - b.fuse=fuse; - activeTNT.add(k(b.gx,b.gy)); - } - - function explodeAt(gx,gy){ - const center = getBlock(gx,gy); - if(!center) return; - - // усиление: считаем сколько TNT рядом (в радиусе 2) и активируем их «почти сразу» - let bonus = 0; - for(let x=gx-2; x<=gx+2; x++){ - for(let y=gy-2; y<=gy+2; y++){ - const b = getBlock(x,y); - if(b && !b.dead && b.t==='tnt' && !(x===gx && y===gy)){ - bonus += 0.8; - activateTNT(b, 0.12); // цепь - } - } - } - - const power = 1 + bonus; // условная мощность - const radius = 3.2 + bonus*0.7; // радиус разрушения в тайлах - const dmgR = 150 + bonus*60; // радиус урона в пикселях - - removeBlock(gx,gy); - activeTNT.delete(k(gx,gy)); - playSound('explode1'); // Звук взрыва - spawnExplosion(gx*TILE + TILE/2, gy*TILE + TILE/2, power); - - for(let x=Math.floor(gx-radius); x<=Math.ceil(gx+radius); x++){ - for(let y=Math.floor(gy-radius); y<=Math.ceil(gy+radius); y++){ - const d = Math.hypot(x-gx, y-gy); - if(d > radius) continue; - const b = getBlock(x,y); - if(!b || b.dead) continue; - if(BLOCKS[b.t].fluid) continue; - if(BLOCKS[b.t].unbreakable) continue; - if(b.t==='tnt') { activateTNT(b, 0.12); continue; } - removeBlock(x,y); - if(inv[b.t] !== undefined && Math.random()<0.20) inv[b.t]++; // немного дропа - } - } - rebuildHotbar(); - - // урон - const hurt = (e)=>{ - const dx = (e.x+e.w/2) - (gx*TILE+TILE/2); - const dy = (e.y+e.h/2) - (gy*TILE+TILE/2); - const dist = Math.hypot(dx,dy); - if(dist < dmgR){ - const dmg = (dmgR - dist) * 0.06 * power; - if(e === player) player.hp -= dmg; - else e.hp -= dmg; - e.vx += (dx/dist || 0) * 600; - e.vy -= 320; - } - }; - hurt(player); - mobs.forEach(hurt); - } - - // Взаимодействие мышь/тап - const mouse = { x:null, y:null }; - canvas.addEventListener('pointermove', (e)=>{ - const r = canvas.getBoundingClientRect(); - mouse.x = e.clientX - r.left; - mouse.y = e.clientY - r.top; - }); - - canvas.addEventListener('pointerdown', (e)=>{ - if(craftOpen) return; - if(player.hp<=0) return; - - const r = canvas.getBoundingClientRect(); - const sx = e.clientX - r.left; - const sy = e.clientY - r.top; - - const wx = sx + camX; - const wy = sy + camY; - - const gx = Math.floor(wx / TILE); - const gy = Math.floor(wy / TILE); - - // Пробуждение: клик по любой кровати когда спишь - const b = getBlock(gx,gy); - if(player.sleeping && b && b.t==='bed'){ - player.sleeping = false; - return; - } - - if(player.sleeping) return; // Нельзя взаимодействовать во время сна - - // клик по мобу (в режиме mine) - if(mode()==='mine'){ - for(let i=mobs.length-1;i>=0;i--){ - const m = mobs[i]; - if(wx>=m.x && wx<=m.x+m.w && wy>=m.y && wy<=m.y+m.h){ - m.hp -= 1; - m.vx += (m.x - player.x) * 2; - m.vy -= 200; - playSound('attack'); // Звук атаки игрока - if(m.hp<=0){ - // дроп еды - if(m.kind === 'chicken') playSound('hurt_chicken'); // Звук при убийстве курицы - inv.meat += (m.kind==='chicken' ? 1 : 2); - mobs.splice(i,1); - rebuildHotbar(); - } - return; - } - } - } - - // еда (предмет) - if(ITEMS[selected] && inv[selected]>0){ - const it = ITEMS[selected]; - if(player.hp < 100 || player.hunger < 100){ - playSound('eat1'); // Звук употребления еды - player.hunger = Math.min(100, player.hunger + it.food); - player.hp = Math.min(100, player.hp + 15); - inv[selected]--; - rebuildHotbar(); - } - return; - } - - // жарка на костре: выбран meat + клик по campfire - if(b && b.t==='campfire' && selected==='meat' && inv.meat>0){ - playSound('fire'); // Звук при жарке на костре - inv.meat--; inv.cooked++; - rebuildHotbar(); - return; - } - - // Сон на кровати: клик по bed - if(b && b.t==='bed' && isNight()){ - player.sleeping = true; - saveGame(); // Сохраняем при отходе ко сну - return; - } - - if(mode()==='mine'){ - if(!b) return; - if(BLOCKS[b.t].fluid || BLOCKS[b.t].decor) return; - - if(b.t==='tnt'){ activateTNT(b, 3.2); return; } // не взрывается сразу - - const removed = removeBlock(gx,gy); - if(removed){ - inv[removed.t] = (inv[removed.t]||0) + 1; - - // Отправляем изменение блока на сервер - sendBlockChange(gx, gy, removed.t, 'remove'); - - // Звуки при добыче блоков - if(removed.t === 'glass') playSound('glass1'); - else if(removed.t === 'sand') playSound('sand1'); - else if(removed.t === 'snow') playSound('snow1'); - else if(removed.t === 'stone' || removed.t.endsWith('_ore')) playSound('stone1'); - else if(removed.t === 'wood') playSound('wood1'); - else playSound('cloth1'); - - rebuildHotbar(); - } - return; - } - - if(mode()==='build'){ - if(inv[selected] <= 0) return; - if(!BLOCKS[selected]) return; - if(b) return; // занято - - // Проверяем, ставим ли лодку - if(selected === 'boat'){ - // Лодку можно ставить только на воду - const waterBelow = getBlock(gx, gy+1); - if(!waterBelow || waterBelow.t !== 'water'){ - return; - } - - // Создаём лодку - boat.x = gx * TILE; - boat.y = gy * TILE; - boat.vx = 0; - boat.vy = 0; - boat.active = true; - boat.inWater = true; - - // Сажаем игрока в лодку - player.inBoat = true; - player.x = boat.x; - player.y = boat.y; - player.vx = 0; - player.vy = 0; - - playSound('splash'); - inv[selected]--; - rebuildHotbar(); - return; - } - - // запрет ставить в игрока - const bx = gx*TILE, by = gy*TILE; - const overlap = !(bx >= player.x+player.w || bx+TILE <= player.x || by >= player.y+player.h || by+TILE <= player.y); - if(overlap) return; - - setBlock(gx,gy,selected, true); // true = блок установлен игроком - inv[selected]--; - - // Отправляем изменение блока на сервер - sendBlockChange(gx, gy, selected, 'set'); - - // Звук при строительстве - if(selected === 'stone' || selected === 'brick') playSound('stone_build'); - else if(selected === 'wood' || selected === 'planks') playSound('wood_build'); - else if(selected === 'glass') playSound('glass1'); - else if(selected === 'sand') playSound('sand1'); - else if(selected === 'snow') playSound('snow1'); - else if(selected === 'dirt' || selected === 'grass') playSound('cloth1'); - - rebuildHotbar(); - return; - } - }); - - // Генерация (по X, на всю глубину до bedrock) - const generated = new Set(); // gx already generated - function surfaceGyAt(gx){ - // базовая поверхность выше уровня воды с вариациями + "горы" - // Используем seed для детерминированной генерации - // Увеличили амплитуду и добавили больше частот для разнообразия - const n1 = Math.sin(gx*0.025 + worldSeed*0.001)*8; // крупные горы - const n2 = Math.sin(gx*0.012 + worldSeed*0.002)*12; // средние горы - const n3 = Math.sin(gx*0.006 + worldSeed*0.003)*6; // мелкие холмы - const n4 = Math.sin(gx*0.045 + worldSeed*0.004)*4; // детали - const n5 = Math.cos(gx*0.018 + worldSeed*0.005)*5; // дополнительные вариации - const h = Math.floor(SEA_GY - 8 + n1 + n2 + n3 + n4 + n5); // чем меньше gy - тем выше - return h; - } - - function genColumn(gx){ - if(generated.has(gx)) return; - generated.add(gx); - - const sgy = surfaceGyAt(gx); - - // вода (если поверхность ниже уровня моря => sgy > SEA_GY) - if(sgy > SEA_GY){ - for(let gy=SEA_GY; gy SEA_GY && gy === sgy+1 && seededRandom(gx, gy) < 0.25) t='clay'; - if(gy > sgy+6 && seededRandom(gx, gy) < 0.07) t='gravel'; - - // руды: чем глубже, тем интереснее - const depth = gy - sgy; - const r = seededRandom(gx, gy); - if(t==='stone'){ - if(r < 0.06) t='coal'; - else if(r < 0.10) t='copper_ore'; - else if(r < 0.13) t='iron_ore'; - else if(depth > 40 && r < 0.145) t='gold_ore'; - else if(depth > 70 && r < 0.152) t='diamond_ore'; - } - - setBlock(gx,gy,t); - } - - // Деревья и цветы (только на траве, и не в воде) - const top = getBlock(gx, sgy); - if(top && top.t==='grass'){ - if(seededRandom(gx, sgy-1) < 0.10){ - setBlock(gx, sgy-1,'flower'); - } - if(seededRandom(gx, sgy-2) < 0.12){ - // простое дерево - setBlock(gx, sgy-1, 'wood'); - setBlock(gx, sgy-2, 'wood'); - setBlock(gx, sgy-3, 'leaves'); - setBlock(gx-1, sgy-3,'leaves'); - setBlock(gx+1, sgy-3,'leaves'); - } - } - } - - // Перегенерация видимых чанков (используется при загрузке сохранения) - function regenerateVisibleChunks(){ - const gx0 = Math.floor(camX/TILE); - for(let gx=gx0-GEN_MARGIN_X; gx<=gx0+GEN_MARGIN_X; gx++){ - // Принудительно перегенерируем колонну - generated.delete(gx); - genColumn(gx); - } - } - - function ensureGenAroundCamera(){ - const gx0 = Math.floor(camX/TILE); - for(let gx=gx0-GEN_MARGIN_X; gx<=gx0+GEN_MARGIN_X; gx++){ - genColumn(gx); - } - } - - // Лут с дерева/листвы: дерево -> wood; листья -> leaves - // (уже в mine добавляется inv[type] автоматически) - - // Рисование костра: огонь поверх текстуры - function drawFire(wx,wy,now){ - const baseX = wx; - const baseY = wy; - const flick = 6 + (Math.sin(now/90)+1)*4; - ctx.fillStyle = 'rgba(255,140,0,0.85)'; - ctx.beginPath(); - ctx.moveTo(baseX+10, baseY+30); - ctx.lineTo(baseX+20, baseY+30-flick); - ctx.lineTo(baseX+30, baseY+30); - ctx.fill(); - - ctx.fillStyle = 'rgba(255,230,150,0.75)'; - ctx.beginPath(); - ctx.moveTo(baseX+14, baseY+30); - ctx.lineTo(baseX+20, baseY+30-(flick*0.7)); - ctx.lineTo(baseX+26, baseY+30); - ctx.fill(); - } - - // Моб AI - function mobAI(m, dt){ - updateWaterFlag(m); - - if(m.kind==='zombie'){ - // активность ночью - const night = isNight(); - if(!night){ m.hp=0; return; } - const dir = Math.sign((player.x) - m.x); - m.vx = dir * m.speed; - if(m.inWater && Math.random()<0.06) m.vy = -260; - // атака - if(Math.abs((m.x+ m.w/2) - (player.x+player.w/2)) < 28 && - Math.abs((m.y+ m.h/2) - (player.y+player.h/2)) < 40 && - player.invuln <= 0){ - player.hp -= 15; - player.invuln = 0.8; - player.vx += dir*420; - player.vy -= 260; - playSound('hit1'); // Звук при атаке зомби - } - } else if(m.kind==='creeper'){ - // активность ночью - const night = isNight(); - if(!night){ m.hp=0; return; } - const dir = Math.sign((player.x) - m.x); - const dist = Math.hypot((player.x+player.w/2) - (m.x+m.w/2), (player.y+player.h/2) - (m.y+m.h/2)); - - // Движение к игроку - m.vx = dir * m.speed; - if(m.inWater && Math.random()<0.06) m.vy = -260; - - // Взрыв если близко к игроку - if(dist < 60){ - m.fuse -= dt; - if(m.fuse <= 0){ - explodeAt(Math.floor((m.x+m.w/2)/TILE), Math.floor((m.y+m.h/2)/TILE)); - m.hp = 0; - } - } else { - // Поджигаем если очень близко - if(dist < 40){ - m.fuse = 0.5; // Быстрый взрыв - } - } - } else if(m.kind==='skeleton'){ - // активность ночью - const night = isNight(); - if(!night){ m.hp=0; return; } - const dir = Math.sign((player.x) - m.x); - const dist = Math.hypot((player.x+player.w/2) - (m.x+m.w/2), (player.y+player.h/2) - (m.y+m.h/2)); - - // Движение к игроку - m.vx = dir * m.speed; - if(m.inWater && Math.random()<0.06) m.vy = -260; - - // Стрельба стрелами с проверкой препятствий - m.shootCooldown -= dt; - if(dist < 200 && m.shootCooldown <= 0){ - m.shootCooldown = 1.5; - // Создаём стрелу (упрощённо - просто урон) - const dx = (player.x+player.w/2) - (m.x+m.w/2); - const dy = (player.y+player.h/2) - (m.y+m.h/2); - const angle = Math.atan2(dy, dx); - - // Проверяем препятствия (до 5 блоков) - let blocked = false; - const checkSteps = 5; - const stepSize = dist / checkSteps; - for(let i = 1; i <= checkSteps; i++){ - const checkX = m.x + m.w/2 + Math.cos(angle) * stepSize * i; - const checkY = m.y + m.h/2 + Math.sin(angle) * stepSize * i; - const checkGX = Math.floor(checkX / TILE); - const checkGY = Math.floor(checkY / TILE); - if(isSolid(checkGX, checkGY)){ - blocked = true; - break; - } - } - - // Урон игроку если попали и нет препятствий - if(!blocked && dist < 150 && player.invuln <= 0){ - player.hp -= 8; - player.invuln = 0.5; - player.vx += Math.cos(angle) * 300; - player.vy -= 200; - playSound('hit1'); - } - } - } else { - // животные - m.aiT -= dt; - if(m.aiT <= 0){ - m.aiT = 1.8 + Math.random()*2.5; - m.dir = Math.random()<0.5 ? -1 : 1; - if(Math.random()<0.25) m.dir = 0; - } - m.vx = m.dir * (m.kind==='chicken' ? 55 : 40); - if(m.inWater) m.vy = -120; - } - - // физика моба - const g = m.inWater ? GRAV_WATER : GRAV; - m.vy += g*dt; - - m.y += m.vy*dt; m.grounded=false; resolveY(m); - m.x += m.vx*dt; resolveX(m); - } - - function isNight(){ - // Автоматический цикл: ночь когда worldTime > 0.5 - return worldTime > 0.5; - } - - // Respawn - document.getElementById('respawnBtn').onclick = async () => { - playSound('click'); // Звук клика по кнопке - - console.log('=== RESPAWN CLICKED ==='); - console.log('isMultiplayer:', isMultiplayer); - console.log('otherPlayers.size:', otherPlayers.size); - console.log('player.hp before respawn:', player.hp); - - // В мультиплеере не загружаем сохранение, а возрождаемся в начальной точке - if (isMultiplayer && otherPlayers.size > 0) { - console.log('Мультиплеер режим - возрождение в начальной точке'); - player.hp = 100; - player.hunger = 100; - player.o2 = 100; - player.vx = player.vy = 0; - player.invuln = 0; - player.x = spawnPoint.x; - player.y = spawnPoint.y; - player.fallStartY = player.y; - console.log('Возрождение в начальной точке, HP:', player.hp); - } else { - console.log('Одиночный режим - загружаем последнее сохранение'); - // Одиночный режим - загружаем последнее сохранение - const loadedSave = await loadGame(); - if(loadedSave){ - await applySave(loadedSave); - console.log('Загружено последнее сохранение после смерти, final HP:', player.hp); - } else { - // Если сохранения нет, возрождаемся в начальной точке - player.hp = 100; - player.hunger = 100; - player.o2 = 100; - player.vx = player.vy = 0; - player.invuln = 0; - player.x = spawnPoint.x; - player.y = spawnPoint.y; - player.fallStartY = player.y; - console.log('Возрождение в начальной точке, HP:', player.hp); - } - } - - console.log('player.hp after respawn logic:', player.hp); - console.log('Hiding death screen...'); - deathEl.style.display='none'; - console.log('=== RESPAWN END ==='); - }; - - // Resize - function resize(){ - W = gameEl.clientWidth; - H = gameEl.clientHeight; - canvas.width = W*dpr; - canvas.height = H*dpr; - lightC.width = W*dpr; - lightC.height = H*dpr; - ctx.setTransform(dpr,0,0,dpr,0,0); - } - window.addEventListener('resize', resize); - - // init - resize(); - rebuildHotbar(); - - // Инициализируем и загружаем сохранение - initDB().then(async () => { - // Пытаемся загрузить сохранённую игру - const loadedSave = await loadGame(); - if(loadedSave){ - await applySave(loadedSave); - console.log('Загружено сохранение, HP:', player.hp); - - // Проверяем HP после загрузки - если <= 0, возрождаемся - if (player.hp <= 0) { - console.log('WARNING: HP <= 0 после загрузки, возрождаемся'); - player.hp = 100; - player.hunger = 100; - player.o2 = 100; - player.x = spawnPoint.x; - player.y = spawnPoint.y; - player.vx = player.vy = 0; - player.invuln = 0; - player.fallStartY = player.y; - } - } else { - console.log('Сохранение не найдено, начинаем новую игру'); - - // Инициализируем игрока для новой игры - player.hp = 100; - player.hunger = 100; - player.o2 = 100; - player.vx = player.vy = 0; - player.invuln = 0; - - // старт — на поверхности (ровно на 1 тайл выше поверхности) - const startGX = 6; - genColumn(startGX); - const surfaceY = surfaceGyAt(startGX); - player.y = (surfaceY - 1) * TILE; - player.x = startGX * TILE; - player.fallStartY = player.y; - - // Обновляем spawnPoint, чтобы возрождение было на поверхности - spawnPoint.x = player.x; - spawnPoint.y = player.y; - - console.log('Новая игра: startGX=', startGX, 'surfaceY=', surfaceY, 'player.y=', player.y, 'player.hp=', player.hp); - console.log('spawnPoint обновлён: x=', spawnPoint.x, 'y=', spawnPoint.y); - - // Генерируем карту вокруг стартовой позиции при инициализации - for(let gx = startGX - 50; gx <= startGX + 50; gx++){ - genColumn(gx); - } - } - - // Автосейв при скрытии страницы (защита от потери прогресса) - document.addEventListener('visibilitychange', () => { - if(document.hidden){ - saveGame(); - } - }); - - // Автосейв перед закрытием страницы (защита от потери прогресса) - window.addEventListener('beforeunload', () => { - saveGame(); - }); - }).catch(err => { - console.error('Ошибка инициализации:', err); - // При ошибке начинаем новую игру - const startGX = 6; - genColumn(startGX); - player.y = (surfaceGyAt(startGX)-1)*TILE; - player.fallStartY = player.y; - - for(let gx = startGX - 50; gx <= startGX + 50; gx++){ - genColumn(gx); - } - }); - - // main loop - let last = performance.now(); - let prevJump = false; - function loop(now){ - const dt = Math.min(0.05, (now-last)/1000); - last = now; - - const jumpPressed = inp.j && !prevJump; - prevJump = inp.j; - - // Ускорение времени во время сна - if(player.sleeping && isNight()){ - worldTime += dt * 8 / DAY_LEN; // В 8 раз быстрее - // Восстанавливаем здоровье во время сна - player.hp = Math.min(100, player.hp + dt * 20); - // Автоматическое пробуждение когда наступает день - if(!isNight()){ - player.sleeping = false; - } - } else { - worldTime += dt / DAY_LEN; - } - if(worldTime >= 1) worldTime -= 1; - - // камера следует за игроком по X/Y - camX = Math.floor((player.x + player.w/2) - W/2); - camY = Math.floor((player.y + player.h/2) - H/2); - - ensureGenAroundCamera(); - - // clouds parallax - for(const c of clouds){ - c.x -= c.s * dt; - if(c.x + c.w < camX - 400) c.x = camX + W + Math.random()*700; - } - - // player - updateWaterFlag(player); - - // кислород/утопление: тратим O2 только если голова под водой, иначе восстанавливаем [web:223] - if(player.headInWater){ - player.o2 = Math.max(0, player.o2 - 6*dt); // замедлил в 3.7 раза - if(player.o2 === 0){ - player.hp -= 4*dt; // уменьшил урон от утопления - } - } else { - player.o2 = Math.min(100, player.o2 + 10*dt); // замедлил восстановление в 4 раза - } - - // голод убывает, но HP не отнимает (как просили) - player.hunger = Math.max(0, player.hunger - dt*0.2); // замедлил в 4 раза - - // Игрок не может двигаться во время сна - if(player.sleeping){ - player.vx = 0; - player.vy = 0; - } else { - const dir = (inp.r?1:0) - (inp.l?1:0); - if(dir) player.vx = dir*MOVE; - else player.vx *= 0.82; - } - - // Звук шагов при движении по земле - if(player.grounded && !player.inWater && Math.abs(player.vx) > 50){ - const stepInterval = 0.35; // Интервал между шагами в секундах - if(now/1000 - player.lastStepTime > stepInterval){ - playSound('step'); - player.lastStepTime = now/1000; - } - } - - // прыжок/плавание (новая логика) - if(player.inBoat){ - // Игрок в лодке - лодка следует за игроком - const dir = (inp.r?1:0) - (inp.l?1:0); - if(dir) boat.vx = dir * MOVE; - else boat.vx *= 0.95; - - // Лодка плавает на воде - boat.vy = 0; - - // Игрок следует за лодкой (сидит внутри неё) - player.x = boat.x + 2; // Игрок по центру лодки - player.y = boat.y - 4; // Игрок выше лодки (сидит внутри) - player.vx = boat.vx; - player.vy = boat.vy; - player.grounded = true; - player.inWater = false; // Игрок не в воде когда в лодке - - // Прыжок из лодки (высадка) - if(jumpPressed){ - // Возвращаем лодку в инвентарь - inv.boat = (inv.boat || 0) + 1; - - player.inBoat = false; - boat.active = false; - player.y += TILE; // Прыгаем из лодки - player.vy = -JUMP * 0.5; - playSound('splash'); - } - - } else if(player.inWater){ - // сопротивление в воде - player.vx *= 0.90; - player.vy *= 0.92; - - // Если не нажимаем прыжок - тонем (гравитация в воде) - if(!jumpPressed && !inp.j){ - // Применяем гравитацию в воде - игрок тонет - player.vy += GRAV_WATER * dt; - } else { - // Если нажимаем прыжок - поднимаемся на поверхность - if(jumpPressed){ - player.vy = Math.min(player.vy, -520); // рывок вверх - } else if(inp.j){ - // если держим — мягкое всплытие - player.vy = Math.min(player.vy, -260); - } - } - - } else { - // обычный прыжок (только по нажатию) - if(jumpPressed && player.grounded && !player.sleeping){ - player.vy = -JUMP; - player.grounded = false; - player.fallStartY = player.y; - } - } - - // Гравитация применяется только вне воды и вне лодки - if(!player.inWater && !player.inBoat){ - player.vy += GRAV*dt; - } - - // Обновляем позицию лодки - if(boat.active){ - boat.x += boat.vx * dt; - boat.y += boat.vy * dt; - - // Лодка не выходит за пределы воды - const boatGX = Math.floor(boat.x / TILE); - const boatGY = Math.floor(boat.y / TILE); - const below = getBlock(boatGX, boatGY + 1); - - if(!below || below.t !== 'water'){ - // Если лодка вышла из воды - выкидываем игрока - inv.boat = (inv.boat || 0) + 1; - player.inBoat = false; - boat.active = false; - player.y += TILE; - player.vy = -200; - playSound('splash'); - } - } - - // Проверяем, не доплыл ли игрок из лодки - if(player.inBoat && !boat.active){ - inv.boat = (inv.boat || 0) + 1; - player.inBoat = false; - player.y += TILE; - player.vy = -200; - playSound('splash'); - } - - player.y += player.vy*dt; - resolveY(player); - player.x += player.vx*dt; resolveX(player); - - // Отправляем позицию на сервер (мультиплеер) - sendPlayerPosition(); - - // Обновляем физику воды - updateWaterPhysics(dt); - - player.invuln = Math.max(0, player.invuln - dt); - - // TNT tick - for(const key of Array.from(activeTNT)){ - const b = grid.get(key); - if(!b || b.dead){ activeTNT.delete(key); continue; } - b.fuse -= dt; - if(b.fuse <= 0){ - explodeAt(b.gx,b.gy); - } - } - - // mobs spawn (с обеих сторон камеры) - spawnT += dt; - if(spawnT > 1.8 && mobs.length < 30){ - spawnT = 0; - - // Выбираем сторону спавна (левая или правая) - const spawnLeft = Math.random() < 0.5; - const gx = spawnLeft - ? Math.floor((camX - 200)/TILE) - : Math.floor((camX + W + 200)/TILE); - - genColumn(gx); - const sgy = surfaceGyAt(gx); - const wx = gx*TILE + 4; - const wy = (sgy-2)*TILE; - - // не спавнить в воде - const top = getBlock(gx, sgy); - if(top && top.t==='water') { - // skip - } else { - if(isNight()){ - // Ночью спавним больше враждебных мобов - const rand = Math.random(); - if(rand < 0.35){ - mobs.push(new Zombie(wx, wy)); - } else if(rand < 0.55){ - mobs.push(new Creeper(wx, wy)); - } else { - mobs.push(new Skeleton(wx, wy)); - } - } else { - // Днём только животные - mobs.push(Math.random()<0.5 ? new Pig(wx, wy) : new Chicken(wx, wy)); - } - } - } - - // mobs update - for(let i=mobs.length-1;i>=0;i--){ - const m = mobs[i]; - mobAI(m, dt); - if(m.hp<=0) mobs.splice(i,1); - } - - // particles - for(let i=parts.length-1;i>=0;i--){ - const p = parts[i]; - p.t -= dt; - p.x += p.vx*dt; - p.y += p.vy*dt; - p.vy += GRAV*dt; - if(p.t <= 0) parts.splice(i,1); - } - - // death - if(player.hp <= 0){ - deathEl.style.display='flex'; - } else if(deathEl.style.display === 'flex') { - // Если HP > 0 но экран смерти всё ещё показан - скрываем его - deathEl.style.display='none'; - } - - // render - const night = isNight(); - - // sky - ctx.fillStyle = night ? '#070816' : '#87CEEB'; - ctx.fillRect(0,0,W,H); - - // clouds (parallax x/y) - ctx.save(); - ctx.translate(-camX*0.5, -camY*0.15); - ctx.fillStyle = 'rgba(255,255,255,0.65)'; - for(const c of clouds){ - ctx.fillRect(c.x, c.y, c.w, 26); - ctx.fillRect(c.x+20, c.y-10, c.w*0.6, 22); - } - ctx.restore(); - - // world - ctx.save(); - ctx.translate(-camX, -camY); - - const minGX = Math.floor(camX/TILE)-2; - const maxGX = Math.floor((camX+W)/TILE)+2; - const minGY = Math.floor(camY/TILE)-6; - const maxGY = Math.floor((camY+H)/TILE)+6; - - // draw blocks (по массиву, но фильтруем диапазоном) - for(const b of blocks){ - if(b.dead) continue; - if(b.gx < minGX || b.gx > maxGX || b.gy < minGY || b.gy > maxGY) continue; - - const def = BLOCKS[b.t]; - if(def.alpha){ - ctx.save(); - ctx.globalAlpha = def.alpha; - ctx.drawImage(tex[b.t], b.gx*TILE, b.gy*TILE, TILE, TILE); - ctx.restore(); - } else { - ctx.drawImage(tex[b.t], b.gx*TILE, b.gy*TILE, TILE, TILE); - } - - // TNT мигает, если активирован - if(b.t==='tnt' && b.active && Math.sin(now/60)>0){ - ctx.fillStyle='rgba(255,255,255,0.45)'; - ctx.fillRect(b.gx*TILE, b.gy*TILE, TILE, TILE); - } - - // огонь костра - if(b.t==='campfire'){ - drawFire(b.gx*TILE, b.gy*TILE, now); - } - } - - // mobs - for(const m of mobs){ - if(m.kind==='zombie'){ - ctx.fillStyle = '#2ecc71'; - ctx.fillRect(m.x, m.y, m.w, m.h); - ctx.fillStyle = '#c0392b'; - ctx.fillRect(m.x+6, m.y+12, 6,6); - ctx.fillRect(m.x+22, m.y+12, 6,6); - } else if(m.kind==='pig'){ - ctx.fillStyle = '#ffb6c1'; - ctx.fillRect(m.x, m.y, m.w, m.h); - ctx.fillStyle = '#000'; - ctx.fillRect(m.x+22, m.y+5, 3,3); - ctx.fillStyle = '#ff69b4'; - ctx.fillRect(m.x+28, m.y+12, 6,6); - } else if(m.kind==='chicken'){ - // chicken - ctx.fillStyle = '#ecf0f1'; - ctx.fillRect(m.x, m.y, m.w, m.h); - ctx.fillStyle = '#f39c12'; - ctx.fillRect(m.x+18, m.y+10, 6,4); - ctx.fillStyle = '#000'; - ctx.fillRect(m.x+8, m.y+6, 3,3); - } else if(m.kind==='creeper'){ - // creeper - ctx.fillStyle = '#4CAF50'; - ctx.fillRect(m.x, m.y, m.w, m.h); - // Глаза - ctx.fillStyle = '#000'; - ctx.fillRect(m.x+8, m.y+8, 4,4); - ctx.fillRect(m.x+22, m.y+8, 4,4); - // Рот - ctx.fillStyle = '#000'; - ctx.fillRect(m.x+12, m.y+20, 10,4); - // Ноги - ctx.fillStyle = '#4CAF50'; - ctx.fillRect(m.x+4, m.y+30, 6,20); - ctx.fillRect(m.x+24, m.y+30, 6,20); - } else if(m.kind==='skeleton'){ - // skeleton - детализированный - // Тело - ctx.fillStyle = '#ECEFF1'; - ctx.fillRect(m.x+10, m.y+20, 14, 12); - // Череп - ctx.fillRect(m.x+8, m.y+0, 18, 18); - // Глазницы - ctx.fillStyle = '#000'; - ctx.fillRect(m.x+10, m.y+6, 4,4); - ctx.fillRect(m.x+20, m.y+6, 4,4); - // Нос - ctx.fillRect(m.x+15, m.y+12, 4,2); - // Руки - ctx.fillStyle = '#ECEFF1'; - ctx.fillRect(m.x+2, m.y+20, 6,14); - ctx.fillRect(m.x+26, m.y+20, 6,14); - // Ноги - ctx.fillRect(m.x+10, m.y+32, 6, 18); - ctx.fillRect(m.x+18, m.y+32, 6, 18); - } - } - - // boat (рисуем первой, чтобы игрок был внутри неё) - if(boat.active){ - ctx.drawImage(tex['boat'], boat.x - (TILE-boat.w)/2, boat.y - (TILE-boat.h)/2, TILE, TILE); - } - - // other players (multiplayer) - for(const [socketId, p] of otherPlayers){ - if(heroImg.complete){ - ctx.drawImage(heroImg, p.x - (TILE-player.w)/2, p.y - (TILE-player.h)/2, TILE, TILE); - } else { - ctx.fillStyle = p.color; - ctx.fillRect(p.x, p.y, 34, 34); - } - // Имя игрока (мелко над персонажем) - ctx.fillStyle = '#fff'; - ctx.font = '12px system-ui'; - ctx.textAlign = 'center'; - ctx.fillText(p.name, p.x + 17, p.y - 8); - } - - // player - if(heroImg.complete){ - ctx.drawImage(heroImg, player.x - (TILE-player.w)/2, player.y - (TILE-player.h)/2, TILE, TILE); - } else { - ctx.fillStyle='#fff'; - ctx.fillRect(player.x, player.y, player.w, player.h); - } - - // particles - for(const p of parts){ - ctx.fillStyle = p.c; - ctx.fillRect(p.x-2, p.y-2, 4, 4); - } - - // Стрелы скелета - for(const m of mobs){ - if(m.kind==='skeleton' && m.shootCooldown > 0.5){ - // Рисуем стрелу - const arrowX = m.x + m.w/2; - const arrowY = m.y + 15; - const targetX = player.x + player.w/2; - const targetY = player.y + player.h/2; - const angle = Math.atan2(targetY - arrowY, targetX - arrowX); - const speed = 400; - - // Проверяем, попала ли стрела - const dx = targetX - arrowX; - const dy = targetY - arrowY; - const dist = Math.hypot(dx, dy); - - // Рисуем стрелу - ctx.save(); - ctx.translate(arrowX, arrowY); - ctx.rotate(angle); - ctx.fillStyle = '#ECEFF1'; - ctx.fillRect(0, -1, 16, 2); - ctx.restore(); - - // Урон игроку если попали - if(dist < 150 && player.invuln <= 0){ - player.hp -= 8; - player.invuln = 0.5; - player.vx += Math.cos(angle) * 300; - player.vy -= 200; - playSound('hit1'); - } - } - } - - // build ghost - if(mode()==='build' && mouse.x!==null && !craftOpen && player.hp>0){ - const wx = mouse.x + camX; - const wy = mouse.y + camY; - const gx = Math.floor(wx/TILE); - const gy = Math.floor(wy/TILE); - ctx.strokeStyle = 'rgba(255,255,255,0.9)'; - ctx.lineWidth = 2; - ctx.strokeRect(gx*TILE, gy*TILE, TILE, TILE); - } - - ctx.restore(); - - // lighting overlay at night - if(night){ - // Рисуем полупрозрачный тёмный оверлей - ctx.save(); - ctx.fillStyle = 'rgba(0,0,0,0.50)'; - ctx.fillRect(0, 0, W, H); - ctx.restore(); - - // Освещение от факелов и костров - ctx.save(); - ctx.globalCompositeOperation = 'lighter'; - - // Функция для рисования света - function drawLight(x, y, radius, intensity) { - const gradient = ctx.createRadialGradient(x, y, 0, x, y, radius); - gradient.addColorStop(0, `rgba(255, 255, 200, ${intensity})`); - gradient.addColorStop(1, `rgba(255, 255, 200, 0)`); - ctx.fillStyle = gradient; - ctx.beginPath(); - ctx.arc(x, y, radius, 0, Math.PI * 2); - ctx.fill(); - } - - // Освещение от факелов (1/3 яркости) - for(const b of blocks){ - if(b.dead) continue; - if(b.gx < minGX || b.gx > maxGX || b.gy < minGY || b.gy > maxGY) continue; - const def = BLOCKS[b.t]; - if(def.lightRadius){ - const wx = b.gx*TILE + TILE/2 - camX; - const wy = b.gy*TILE + TILE/2 - camY; - drawLight(wx, wy, def.lightRadius, 0.33); - } - } - - ctx.restore(); - } - - // UI tick - if(Math.random()<0.25){ - hpEl.textContent = Math.max(0, Math.ceil(player.hp)); - foodEl.textContent = Math.ceil(player.hunger); - document.getElementById('o2').textContent = Math.ceil(player.o2); - sxEl.textContent = Math.floor(player.x/TILE); - syEl.textContent = Math.floor(player.y/TILE); - todEl.textContent = night ? 'Ночь' : 'День'; - worldIdEl.textContent = worldId; - if(isMultiplayer){ - document.getElementById('multiplayerStatus').style.display = 'flex'; - playerCountEl.textContent = otherPlayers.size + 1; // +1 = мы сами - } else { - document.getElementById('multiplayerStatus').style.display = 'none'; - } - } - - // Индикатор сна - if(player.sleeping){ - ctx.fillStyle = 'rgba(0,0,0,0.7)'; - ctx.fillRect(0, 0, W, H); - ctx.fillStyle = '#fff'; - ctx.font = 'bold 32px system-ui'; - ctx.textAlign = 'center'; - ctx.fillText('💤 Спим...', W/2, H/2); - ctx.font = '18px system-ui'; - ctx.fillText('Нажмите на кровать чтобы проснуться', W/2, H/2 + 40); - } - - requestAnimationFrame(loop); - } - - requestAnimationFrame(loop); -})(); diff --git a/backup/20260103_082922/backup/20260103_082922/index.html b/backup/20260103_082922/backup/20260103_082922/index.html deleted file mode 100644 index 3313464..0000000 --- a/backup/20260103_082922/backup/20260103_082922/index.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - -GrechkaCraft: Multiplayer - - - - - - -
- - -
-
-
❤️ 100   🍗 100
-
🫁 100
-
📍 X:0 Y:0
-
🕒 День
-
🌐 default
- -
- -
🏃
-
💾
-
🔨
-
🔄
- -
-
-
Крафт
- -
-
-
- -
-
-
Инвентарь
- -
-
-
- -
-
ВЫ ПОГИБЛИ
- -
- -
-
🎒
-
- - - -
💬
-
- -
-
←
- -
↑
-
- - - - diff --git a/backup/20260103_082922/docker-compose.yml b/backup/20260103_082922/docker-compose.yml deleted file mode 100644 index 3de5ddb..0000000 --- a/backup/20260103_082922/docker-compose.yml +++ /dev/null @@ -1,27 +0,0 @@ -name: grechka-game -services: - grechka-game: - build: - context: . - dockerfile: Dockerfile - container_name: grechka-game - restart: unless-stopped - networks: - - shared_network - labels: - # Включаем Traefik для этого сервиса - - "traefik.enable=true" - - "traefik.docker.network=shared_network" - - # HTTPS роутер - - "traefik.http.routers.grechka-game.entrypoints=websecure" - - "traefik.http.routers.grechka-game.rule=Host(`grechka.mkn8n.ru`)" - - "traefik.http.routers.grechka-game.tls=true" - - "traefik.http.routers.grechka-game.tls.certresolver=mytlschallenge" - - # Сервис - - "traefik.http.services.grechka-game.loadbalancer.server.port=80" - -networks: - shared_network: - external: true diff --git a/backup/20260103_082922/game.js b/backup/20260103_082922/game.js deleted file mode 100644 index 49d8e40..0000000 --- a/backup/20260103_082922/game.js +++ /dev/null @@ -1,2614 +0,0 @@ -(() => { - // ==================== КОНФИГУРАЦИЯ СЕРВЕРА ==================== - // Возможность переопределить сервер через query string - const urlParams = new URLSearchParams(window.location.search); - const SERVER_URL = urlParams.get('server') || 'https://apigrech.mkn8n.ru'; - const TELEGRAM_BOT_USERNAME = 'Grechkacraft_bot'; // Имя бота для share-ссылки - const TELEGRAM_APP_SHORT_NAME = 'minegrechka'; // Короткое имя Mini App - - // Защита от mixed content - if (location.protocol === 'https:' && SERVER_URL.startsWith('http://')) { - console.warn('⚠️ Mixed content warning: page is HTTPS but server URL is HTTP'); - alert('⚠️ Предупреждение: страница загружена по HTTPS, но сервер использует HTTP. Это может вызвать проблемы.'); - } - - // ==================== WORLD ID И ИГРОКА ==================== - let worldId = null; - let playerName = localStorage.getItem('minegrechka_playerName') || null; - - // Запрашиваем имя игрока, если его нет - if (!playerName) { - playerName = prompt('Введите ваше имя для игры:') || 'Игрок'; - localStorage.setItem('minegrechka_playerName', playerName); - console.log('Player name set:', playerName); - } - - // Берём worldId из URL или генерируем новый - console.log('Current URL:', window.location.href); - const worldParam = urlParams.get('world'); - console.log('world param:', worldParam); - - // Проверяем на null, undefined или пустую строку - worldId = (worldParam && worldParam.trim() !== '') ? worldParam : null; - - console.log('worldId after params:', worldId, 'type:', typeof worldId); - - // Если worldId отсутствует - генерируем новый и записываем в URL - if (!worldId) { - worldId = Math.random().toString(36).substring(2, 10); - console.log('Generated worldId:', worldId); - - try { - const newUrl = new URL(window.location.href); - newUrl.searchParams.set('world', worldId); - const newUrlString = newUrl.toString(); - console.log('New URL to set:', newUrlString); - - // Проверяем, поддерживается ли history API - if (typeof window.history !== 'undefined' && typeof window.history.replaceState === 'function') { - window.history.replaceState(null, '', newUrlString); - console.log('URL after replaceState:', window.location.href); - console.log('URL after replaceState (direct check):', window.location.search); - } else { - console.error('History API not supported!'); - } - } catch (e) { - console.error('Error updating URL:', e); - } - - console.log('Generated new worldId for browser:', worldId); - } - - console.log('Final worldId:', worldId, 'Player name:', playerName); - - console.log(`Server URL: ${SERVER_URL}, World ID: ${worldId}`); - - // Обработчик клика на worldId для копирования ссылки - document.getElementById('worldId').onclick = () => { - const shareUrl = new URL(window.location.href); - shareUrl.searchParams.set('world', worldId); - const shareUrlString = shareUrl.toString(); - - if (navigator.clipboard && navigator.clipboard.writeText) { - navigator.clipboard.writeText(shareUrlString).then(() => { - alert('Ссылка скопирована!'); - }).catch(() => { - alert('Ссылка на мир:\n' + shareUrlString); - }); - } else { - alert('Ссылка на мир:\n' + shareUrlString); - } - }; - - // ==================== SOCKET.IO КЛИЕНТ ==================== - let socket = null; - let isMultiplayer = false; // Флаг для мультиплеерного режима - const otherPlayers = new Map(); // socket_id -> {x, y, color} - let mySocketId = null; - - // Throttle для отправки позиции (10-20 раз в секунду) - let lastMoveSendTime = 0; - const MOVE_SEND_INTERVAL = 0.05; // 50ms = 20 раз в секунду - let lastSentX = 0, lastSentY = 0; - - function initSocket() { - try { - socket = io(SERVER_URL, { - path: '/socket.io/', - transports: ['websocket', 'polling'] - }); - - socket.on('connect', () => { - console.log(`Connected to server: ${SERVER_URL}, socket.id: ${socket.id}, worldId: ${worldId}`); - mySocketId = socket.id; - isMultiplayer = true; - - // Присоединяемся к миру - socket.emit('join_world', { world_id: worldId, player_name: playerName }); - - // Показываем в UI - worldIdEl.textContent = worldId; - multiplayerStatus.style.display = 'block'; - }); - - socket.on('connect_error', (error) => { - console.error('Socket connection error:', error); - isMultiplayer = false; - }); - - socket.on('disconnect', () => { - console.log('Disconnected from server'); - isMultiplayer = false; - otherPlayers.clear(); - multiplayerStatus.style.display = 'none'; - }); - - // Обработка world_state - socket.on('world_state', (data) => { - console.log('Received world_state:', data); - - // Устанавливаем seed и перегенерируем мир если он изменился - if (data.seed !== undefined && data.seed !== worldSeed) { - const oldSeed = worldSeed; - worldSeed = data.seed; - console.log('World seed changed from', oldSeed, 'to', worldSeed); - - // Очищаем и перегенерируем мир с новым seed - generated.clear(); - grid.clear(); - blocks.length = 0; - placedBlocks = []; - removedBlocks = []; - console.log('World regenerated with new seed:', worldSeed); - } - - // Применяем блоки - if (data.blocks && Array.isArray(data.blocks)) { - for (const block of data.blocks) { - if (block.op === 'set') { - setBlock(block.gx, block.gy, block.t, false); - } else if (block.op === 'remove') { - removeBlock(block.gx, block.gy); - } - } - } - - // Устанавливаем время - if (data.time !== undefined) { - worldTime = data.time; - isNightTime = worldTime > 0.5; - } - - // Если есть spawnPoint от сервера - используем его и генерируем эту позицию - if (data.spawnPoint) { - spawnPoint.x = data.spawnPoint.x; - spawnPoint.y = data.spawnPoint.y; - // Генерируем колонну в точке спавна - const spawnGX = Math.floor(spawnPoint.x / TILE); - genColumn(spawnGX); - console.log('Server spawnPoint received and column generated:', spawnPoint); - } else { - // Если spawnPoint не пришёл от сервера - генерируем безопасную позицию - const startGX = 6; - genColumn(startGX); - const surfaceY = surfaceGyAt(startGX); - spawnPoint.x = startGX * TILE; - spawnPoint.y = (surfaceY - 1) * TILE; - console.log('Generated safe spawn point:', spawnPoint, 'surfaceY:', surfaceY); - } - - // Устанавливаем игрока в точку спавна - player.x = spawnPoint.x; - player.y = spawnPoint.y; - player.vx = 0; - player.vy = 0; - player.fallStartY = player.y; - console.log('Player moved to spawn point:', player.x, player.y); - - // Обновляем список игроков - if (data.players && Array.isArray(data.players)) { - otherPlayers.clear(); - for (const p of data.players) { - if (p.socket_id !== mySocketId) { - otherPlayers.set(p.socket_id, { - x: p.x, - y: p.y, - color: getRandomPlayerColor(p.socket_id), - name: p.player_name || 'Игрок' - }); - } - } - // Обновляем счётчик игроков - playerCountEl.textContent = data.players.length; - } - }); - - // Игрок присоединился - socket.on('player_joined', (data) => { - console.log('Player joined:', data.socket_id); - if (data.socket_id !== mySocketId) { - // Генерируем безопасную позицию для нового игрока - const spawnGX = 6; - genColumn(spawnGX); - const surfaceY = surfaceGyAt(spawnGX); - const safeSpawnX = spawnGX * TILE; - const safeSpawnY = (surfaceY - 1) * TILE; - - otherPlayers.set(data.socket_id, { - x: safeSpawnX, - y: safeSpawnY, - color: getRandomPlayerColor(data.socket_id), - name: data.player_name || 'Игрок' - }); - addChatMessage('Система', `Игрок присоединился`); - // Обновляем видимость кнопки сохранения - updateSaveButtonVisibility(); - } - }); - - // Игрок переместился - socket.on('player_moved', (data) => { - if (data.socket_id !== mySocketId && otherPlayers.has(data.socket_id)) { - const p = otherPlayers.get(data.socket_id); - p.x = data.x; - p.y = data.y; - // Обновляем имя, если оно пришло - if (data.player_name) { - p.name = data.player_name; - } - } - }); - - // Игрок покинул - socket.on('player_left', (data) => { - console.log('Player left:', data.socket_id); - otherPlayers.delete(data.socket_id); - addChatMessage('Система', `Игрок покинул игру`); - // Обновляем видимость кнопки сохранения - updateSaveButtonVisibility(); - }); - - // Блок изменён - socket.on('block_changed', (data) => { - if (data.op === 'set') { - setBlock(data.gx, data.gy, data.t, false); - } else if (data.op === 'remove') { - removeBlock(data.gx, data.gy); - } - }); - - // Сообщение в чат - socket.on('chat_message', (data) => { - const senderName = data.socket_id === mySocketId ? 'Вы' : `Игрок ${data.socket_id.substring(0, 6)}`; - addChatMessage(senderName, data.message); - }); - - // Обновление времени - socket.on('time_update', (data) => { - if (data.time !== undefined) { - worldTime = data.time; - isNightTime = worldTime > 0.5; - } - }); - - } catch (e) { - console.error('Error initializing socket:', e); - isMultiplayer = false; - } - } - - // Генерация случайного цвета для игрока на основе socket_id - function getRandomPlayerColor(socketId) { - const colors = ['#e74c3c', '#3498db', '#2ecc71', '#f39c12', '#9b59b6', '#1abc9c', '#e91e63', '#00bcd4']; - let hash = 0; - for (let i = 0; i < socketId.length; i++) { - hash = ((hash << 5) - hash) + socketId.charCodeAt(i); - hash = hash & hash; - } - return colors[Math.abs(hash) % colors.length]; - } - - // Отправка позиции игрока (с throttle) - function sendPlayerPosition() { - if (!isMultiplayer || !socket || !socket.connected) return; - - const now = performance.now() / 1000; - if (now - lastMoveSendTime < MOVE_SEND_INTERVAL) return; - - // Отправляем только если позиция изменилась - const dx = Math.abs(player.x - lastSentX); - const dy = Math.abs(player.y - lastSentY); - if (dx < 1 && dy < 1) return; - - lastMoveSendTime = now; - lastSentX = player.x; - lastSentY = player.y; - - socket.emit('player_move', { x: player.x, y: player.y, player_name: playerName }); - } - - // Отправка изменения блока - function sendBlockChange(gx, gy, t, op) { - if (!isMultiplayer || !socket || !socket.connected) return; - - socket.emit('block_change', { gx, gy, t, op }); - } - - // ==================== ЧАТ ==================== - const chatMessages = []; - const MAX_CHAT_MESSAGES = 20; - - function addChatMessage(sender, message) { - const time = new Date().toLocaleTimeString('ru-RU', { hour: '2-digit', minute: '2-digit' }); - chatMessages.push({ sender, message, time }); - if (chatMessages.length > MAX_CHAT_MESSAGES) { - chatMessages.shift(); - } - renderChatMessages(); - } - - function renderChatMessages() { - const chatMessagesEl = document.getElementById('chatMessages'); - if (!chatMessagesEl) return; - - chatMessagesEl.innerHTML = chatMessages.map(m => - `
${m.time} ${m.sender}: ${m.message}
` - ).join(''); - - // Прокручиваем вниз - chatMessagesEl.scrollTop = chatMessagesEl.scrollHeight; - } - - function sendChatMessage(message) { - if (!message || message.trim() === '') return; - - if (isMultiplayer && socket && socket.connected) { - socket.emit('chat_message', { message: message.trim() }); - } else { - addChatMessage('Вы', message.trim()); - } - } - - // ==================== ПОДЕЛИТЬСЯ МИРОМ ==================== - function shareWorld() { - const shareUrl = new URL(window.location.href); - shareUrl.searchParams.set('world', worldId); - const shareUrlString = shareUrl.toString(); - - // Копируем в буфер обмена - if (navigator.clipboard && navigator.clipboard.writeText) { - navigator.clipboard.writeText(shareUrlString).then(() => { - alert('Ссылка скопирована!'); - }).catch(() => { - alert('Ссылка на мир:\n' + shareUrlString); - }); - } else { - alert('Ссылка на мир:\n' + shareUrlString); - } - } - - // ==================== ИНИЦИАЛИЗАЦИЯ UI ==================== - let chatOpen = false; - - document.getElementById('chatToggle').onclick = () => { - playSound('click'); - chatOpen = !chatOpen; - document.getElementById('chatPanel').style.display = chatOpen ? 'block' : 'none'; - if (chatOpen) { - document.getElementById('chatInput').focus(); - } - }; - - document.getElementById('chatClose').onclick = () => { - playSound('click'); - chatOpen = false; - document.getElementById('chatPanel').style.display = 'none'; - }; - - document.getElementById('chatSend').onclick = () => { - const input = document.getElementById('chatInput'); - sendChatMessage(input.value); - input.value = ''; - }; - - document.getElementById('chatInput').addEventListener('keypress', (e) => { - if (e.key === 'Enter') { - sendChatMessage(e.target.value); - e.target.value = ''; - } - }); - - // ==================== ИНИЦИАЛИЗАЦИЯ СОКЕТА ==================== - // Инициализируем socket - initSocket(); - - // ==================== ЗВУКОВОЙ ДВИЖОК ==================== - const sounds = {}; - function loadSound(id, src) { - const audio = new Audio(); - audio.src = src; - audio.volume = 0.3; - sounds[id] = audio; - } - - // Загрузка звуков - loadSound('splash', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//splash.mp3'); - loadSound('sand1', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//sand1.mp3'); - loadSound('snow1', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//snow1.mp3'); - loadSound('stone1', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//stone1.mp3'); - loadSound('wood1', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//wood1.mp3'); - loadSound('cloth1', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//cloth1.mp3'); - loadSound('fire', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//fire.mp3'); - loadSound('hit1', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//hit1.mp3'); - loadSound('attack', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//attack.mp3'); - loadSound('hurt_chicken', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//hurt1_chicken.mp3'); - loadSound('stone_build', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//stone1%20(1).mp3'); - loadSound('wood_build', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//wood1%20(1).mp3'); - loadSound('click', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//click.mp3'); - loadSound('explode1', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//explode1.mp3'); - loadSound('glass1', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//glass1.mp3'); - loadSound('eat1', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//eat1.mp3'); - loadSound('step', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//sand2.mp3'); - - function playSound(id) { - if(sounds[id]) { - sounds[id].currentTime = 0; - sounds[id].play().catch(e => console.error('Sound error:', e)); - } - } - - // Играем звук при прыжке - const gameEl = document.getElementById('game'); - const canvas = document.getElementById('c'); - const ctx = canvas.getContext('2d'); - - // offscreen light map (не вставляем в DOM) - const lightC = document.createElement('canvas'); - const lightCtx = lightC.getContext('2d'); - - const dpr = Math.max(1, window.devicePixelRatio || 1); - let W=0, H=0; - - const TILE = 40; - - // Мир - const SEA_GY = 14; // уровень воды (gy) - уменьшил для меньших водоёмов - const BEDROCK_GY = 140; // глубина бедрока (gy), чем больше - тем глубже - const GEN_MARGIN_X = 26; // запас генерации по X (в тайлах) - - const heroImg = new Image(); - heroImg.src = 'https://supamg.mkn8n.ru/storage/v1/object/public/img//grechka.png'; - - // Состояние инвентаря - let showFullInventory = false; - let recentItems = []; // Последние 5 выбранных предметов - - const BLOCKS = { - air: { n:'Воздух', solid:false }, - grass: { n:'Трава', c:'#7cfc00', solid:true }, - dirt: { n:'Грязь', c:'#8b4513', solid:true }, - stone: { n:'Камень', c:'#7f8c8d', solid:true }, - sand: { n:'Песок', c:'#f4d06f', solid:true }, - gravel: { n:'Гравий', c:'#95a5a6', solid:true }, - clay: { n:'Глина', c:'#74b9ff', solid:true }, - wood: { n:'Дерево', c:'#d35400', solid:true }, - planks: { n:'Доски', c:'#e67e22', solid:true }, - ladder: { n:'Лестница',c:'#d35400', solid:false, climbable:true }, - leaves: { n:'Листва', c:'#2ecc71', solid:true }, - glass: { n:'Стекло', c:'rgba(200,240,255,0.25)', solid:true, alpha:0.55 }, - water: { n:'Вода', c:'rgba(52,152,219,0.55)', solid:false, fluid:true }, - coal: { n:'Уголь', c:'#2c3e50', solid:true }, - copper_ore:{ n:'Медь', c:'#e17055', solid:true }, - iron_ore: { n:'Железо', c:'#dcdde1', solid:true }, - gold_ore: { n:'Золото', c:'#f1c40f', solid:true }, - diamond_ore:{n:'Алмаз', c:'#00a8ff', solid:true }, - brick: { n:'Кирпич', c:'#c0392b', solid:true }, - tnt: { n:'TNT', c:'#e74c3c', solid:true, explosive:true }, - campfire: { n:'Костёр', c:'#e67e22', solid:true, lightRadius:190 }, - torch: { n:'Факел', c:'#f9ca24', solid:true, lightRadius:140 }, - bedrock: { n:'Бедрок', c:'#2d3436', solid:true, unbreakable:true }, - flower: { n:'Цветок', c:'#ff4757', solid:false, decor:true }, - bed: { n:'Кровать', c:'#e91e63', solid:true, bed:true }, - boat: { n:'Лодка', c:'#8B4513', solid:false } - }; - - const ITEMS = { - meat: { n:'Сырое мясо', icon:'🥩', food:15 }, - cooked: { n:'Жареное мясо', icon:'🍖', food:45 } - }; - - // Seed мира для детерминированной генерации - // Инициализируем случайным seed, но он будет перезаписан сервером в мультиплеере - let worldSeed = Math.floor(Math.random() * 1000000); - - // Отслеживание изменений мира (для оптимизированного сохранения) - let placedBlocks = []; // [{gx, gy, t}] - блоки, установленные игроком - let removedBlocks = []; // [{gx, gy}] - блоки, удалённые игроком - - // Инструменты - const TOOLS = { - wood_pickaxe: { n:'Деревянная кирка', icon:'⛏️', durability: 60, miningPower: 1, craft: { wood: 3, planks: 2 } }, - stone_pickaxe: { n:'Каменная кирка', icon:'⛏️', durability: 130, miningPower: 2, craft: { wood: 1, stone: 3 } }, - iron_pickaxe: { n:'Железная кирка', icon:'⛏️', durability: 250, miningPower: 3, craft: { wood: 1, iron_ore: 2 } }, - wood_sword: { n:'Деревянный меч', icon:'⚔️', durability: 40, damage: 5, craft: { wood: 2, planks: 1 } }, - stone_sword: { n:'Каменный меч', icon:'⚔️', durability: 100, damage: 8, craft: { wood: 1, stone: 2 } }, - iron_sword: { n:'Железный меч', icon:'⚔️', durability: 200, damage: 12, craft: { wood: 1, iron_ore: 1 } } - }; - - // Текстуры блоков (простые) - const tex = {}; - function makeTex(type) { - const t = BLOCKS[type]; - const c = document.createElement('canvas'); - c.width = 32; c.height = 32; - const g = c.getContext('2d'); - - if (type === 'tnt') { - g.fillStyle='#c0392b'; g.fillRect(0,0,32,32); - g.fillStyle='#fff'; g.fillRect(0,12,32,8); - g.fillStyle='#000'; g.font='bold 10px sans-serif'; g.fillText('TNT',6,20); - return c; - } - if (type === 'campfire') { - g.fillStyle='#5d4037'; g.fillRect(4,26,24,6); - g.fillStyle='#3e2723'; g.fillRect(7,23,18,4); - return c; - } - if (type === 'torch') { - g.fillStyle='#6d4c41'; g.fillRect(14,10,4,18); - g.fillStyle='#f39c12'; g.fillRect(12,6,8,8); - return c; - } - if (type === 'glass') { - g.fillStyle='rgba(200,240,255,0.25)'; g.fillRect(0,0,32,32); - g.strokeStyle='rgba(255,255,255,0.65)'; g.strokeRect(2,2,28,28); - g.beginPath(); g.moveTo(5,27); g.lineTo(27,5); g.stroke(); - return c; - } - if (type === 'water') { - g.fillStyle = t.c; g.fillRect(0,0,32,32); - g.fillStyle = 'rgba(255,255,255,0.08)'; - g.fillRect(0,6,32,2); - return c; - } - if (type === 'bed') { - // Основание кровати - g.fillStyle = '#e91e63'; - g.fillRect(0, 0, 32, 32); - // Подушка - g.fillStyle = '#f8bbd0'; - g.fillRect(2, 2, 14, 14); - // Одеяло - g.fillStyle = '#c2185b'; - g.fillRect(16, 4, 14, 24); - // Детали одеяла - g.fillStyle = '#e91e63'; - g.fillRect(18, 6, 10, 20); - return c; - } - if (type === 'flower') { - g.fillStyle='#2ecc71'; g.fillRect(14,14,4,18); - g.fillStyle=t.c; g.beginPath(); g.arc(16,12,6,0,6.28); g.fill(); - return c; - } - if (type === 'boat') { - // Корпус лодки - g.fillStyle = '#8B4513'; - g.fillRect(2, 12, 28, 8); - // Борта - g.fillStyle = '#A0522D'; - g.fillRect(0, 10, 32, 12); - // Внутренность - g.fillStyle = '#DEB887'; - g.fillRect(4, 14, 24, 4); - // Дно - g.fillStyle = '#654321'; - g.fillRect(2, 20, 28, 4); - return c; - } - if (type === 'ladder') { - // Боковые стойки лестницы - g.fillStyle = '#8B4513'; - g.fillRect(4, 0, 4, 32); - g.fillRect(24, 0, 4, 32); - // Ступени - g.fillStyle = '#A0522D'; - g.fillRect(4, 4, 24, 3); - g.fillRect(4, 12, 24, 3); - g.fillRect(4, 20, 24, 3); - g.fillRect(4, 28, 24, 3); - return c; - } - - g.fillStyle = t.c || '#000'; - g.fillRect(0,0,32,32); - - g.fillStyle = 'rgba(0,0,0,0.10)'; - for (let i=0;i<6;i++) g.fillRect((Math.random()*28)|0, (Math.random()*28)|0, 4,4); - - if (type.endsWith('_ore') || type==='coal') { - g.fillStyle = 'rgba(0,0,0,0.35)'; - for (let i=0;i<4;i++) g.fillRect((Math.random()*24)|0, (Math.random()*24)|0, 6,6); - } - return c; - } - Object.keys(BLOCKS).forEach(k => tex[k] = makeTex(k)); - - // Мир-хранилище - const grid = new Map(); // key "gx,gy" => {gx,gy,t, ...} - const blocks = []; // для рендера/перебора видимых - function k(gx,gy){ return gx+','+gy; } - function getBlock(gx,gy){ return grid.get(k(gx,gy)); } - function hasBlock(gx,gy){ return grid.has(k(gx,gy)); } - function isSolid(gx,gy){ - const b = getBlock(gx,gy); - if(!b || b.dead) return false; - const def = BLOCKS[b.t]; - return !!def.solid && !def.fluid && !def.decor; - } - function setBlock(gx,gy,t, isPlayerPlaced = false){ - const key = k(gx,gy); - if(grid.has(key)) return false; - const b = { gx, gy, t, dead:false, active:false, fuse:0 }; - grid.set(key, b); - blocks.push(b); - - // Отслеживаем блоки, установленные игроком - if(isPlayerPlaced){ - placedBlocks.push({gx, gy, t}); - } - - return true; - } - function removeBlock(gx,gy){ - const key = k(gx,gy); - const b = grid.get(key); - if(!b) return null; - if(BLOCKS[b.t].unbreakable) return null; - grid.delete(key); - b.dead = true; - - // Отслеживаем удалённые блоки - const wasPlayerPlaced = placedBlocks.some(pb => pb.gx === gx && pb.gy === gy); - if(wasPlayerPlaced){ - // Удаляем из placedBlocks - placedBlocks = placedBlocks.filter(pb => !(pb.gx === gx && pb.gy === gy)); - } else { - // Это природный блок - добавляем в removedBlocks - removedBlocks.push({gx, gy}); - } - - return b; - } - - // Физика жидкости - const waterUpdateQueue = new Set(); - let waterUpdateTimer = 0; - const WATER_UPDATE_INTERVAL = 0.05; // Обновляем воду каждые 0.05 секунды - - function updateWaterPhysics(dt){ - waterUpdateTimer += dt; - if(waterUpdateTimer < WATER_UPDATE_INTERVAL) return; - waterUpdateTimer = 0; - - // Ограничиваем количество водных блоков для обработки (оптимизация) - const MAX_WATER_BLOCKS_PER_UPDATE = 50; - let processedCount = 0; - - // Собираем только видимые водные блоки в очередь (оптимизация) - waterUpdateQueue.clear(); - const minGX = Math.floor(camX/TILE) - 10; - const maxGX = Math.floor((camX+W)/TILE) + 10; - const minGY = Math.floor(camY/TILE) - 10; - const maxGY = Math.floor((camY+H)/TILE) + 10; - - for(const b of blocks){ - if(processedCount >= MAX_WATER_BLOCKS_PER_UPDATE) break; - if(!b.dead && b.t === 'water' && - b.gx >= minGX && b.gx <= maxGX && - b.gy >= minGY && b.gy <= maxGY){ - waterUpdateQueue.add(k(b.gx, b.gy)); - processedCount++; - } - } - - // Обновляем воду с ограничением глубины распространения - const processed = new Set(); - const toAdd = []; - const MAX_WATER_DEPTH = 20; // Максимальная глубина распространения воды - - for(const key of waterUpdateQueue){ - if(processed.has(key)) continue; - const b = grid.get(key); - if(!b || b.dead) continue; - processed.add(key); - - const gx = b.gx; - const gy = b.gy; - - // Проверяем глубину - не распространяем воду слишком глубоко - if(gy > SEA_GY + MAX_WATER_DEPTH) continue; - - // Проверяем, можно ли воде упасть вниз - const belowKey = k(gx, gy + 1); - const below = grid.get(belowKey); - - // Внизу пусто - вода создаёт новый блок внизу (но не удаляется сверху) - if(!below || below.dead){ - // Ограничиваем создание новых водных блоков - if(toAdd.length < 20){ // Максимум 20 новых блоков за обновление - toAdd.push({gx, gy: gy + 1, t: 'water'}); - processed.add(belowKey); - } - continue; - } - - // Если внизу не вода и не твёрдый блок - вода может течь вниз - if(!isSolid(gx, gy + 1) && below && below.t !== 'water'){ - if(toAdd.length < 20){ - toAdd.push({gx, gy: gy + 1, t: 'water'}); - processed.add(belowKey); - } - continue; - } - - // Если внизу твёрдый блок или вода - вода растекается горизонтально - // Проверяем левую сторону - const leftKey = k(gx - 1, gy); - const left = grid.get(leftKey); - if(!left || left.dead){ - if(toAdd.length < 20){ - toAdd.push({gx: gx - 1, gy, t: 'water'}); - processed.add(leftKey); - } - continue; - } - - // Проверяем правую сторону - const rightKey = k(gx + 1, gy); - const right = grid.get(rightKey); - if(!right || right.dead){ - if(toAdd.length < 20){ - toAdd.push({gx: gx + 1, gy, t: 'water'}); - processed.add(rightKey); - } - continue; - } - } - - // Применяем изменения (только добавляем новые блоки) - for(const newData of toAdd){ - const key = k(newData.gx, newData.gy); - if(!grid.has(key)){ - const b = { - gx: newData.gx, - gy: newData.gy, - t: newData.t, - dead: false, - active: false, - fuse: 0 - }; - grid.set(key, b); - blocks.push(b); - } - } - - // Очищаем мёртвые блоки из массива - for(let i = blocks.length - 1; i >= 0; i--){ - if(blocks[i].dead){ - blocks.splice(i, 1); - } - } - } - - // Инвентарь - const inv = { - dirt:6, stone:0, sand:0, gravel:0, clay:0, - wood:0, planks:0, ladder:0, leaves:0, coal:0, - copper_ore:0, iron_ore:0, gold_ore:0, diamond_ore:0, - brick:0, glass:0, - tnt:1, campfire:0, torch:0, - meat:0, cooked:0, - wood_pickaxe:0, stone_pickaxe:0, iron_pickaxe:0, - wood_sword:0, stone_sword:0, iron_sword:0, - bed:0, boat:0 - }; - let selected = 'dirt'; - - const RECIPES = [ - { out:'planks', qty:4, cost:{ wood:1 } }, - { out:'ladder', qty:3, cost:{ planks:7 } }, - { out:'torch', qty:2, cost:{ coal:1, planks:1 } }, - { out:'glass', qty:1, cost:{ sand:3 } }, - { out:'brick', qty:1, cost:{ stone:2, clay:1 } }, - { out:'campfire', qty:1, cost:{ wood:1, coal:1 } }, - { out:'tnt', qty:1, cost:{ sand:2, coal:1 } }, - { out:'bed', qty:1, cost:{ wood: 3, planks: 3 } }, - { out:'boat', qty:1, cost:{ wood: 5 } }, - { out:'wood_pickaxe', qty:1, cost:{ wood: 3, planks: 2 } }, - { out:'stone_pickaxe', qty:1, cost:{ wood: 1, stone: 3 } }, - { out:'iron_pickaxe', qty:1, cost:{ wood: 1, iron_ore: 2 } }, - { out:'wood_sword', qty:1, cost:{ wood: 2, planks: 1 } }, - { out:'stone_sword', qty:1, cost:{ wood: 1, stone: 2 } }, - { out:'iron_sword', qty:1, cost:{ wood: 1, iron_ore: 1 } } - ]; - - // UI - const hpEl = document.getElementById('hp'); - const foodEl = document.getElementById('food'); - const sxEl = document.getElementById('sx'); - const syEl = document.getElementById('sy'); - const todEl = document.getElementById('tod'); - const worldIdEl = document.getElementById('worldId'); - const playerCountEl = document.getElementById('playerCount'); - const hotbarEl = document.getElementById('hotbar'); - const craftPanel = document.getElementById('craftPanel'); - const recipesEl = document.getElementById('recipes'); - const deathEl = document.getElementById('death'); - const inventoryPanel = document.getElementById('inventoryPanel'); - const inventoryGrid = document.getElementById('inventoryGrid'); - - // Клик на часы для включения ночи - todEl.style.cursor = 'pointer'; - todEl.onclick = () => { - playSound('click'); - worldTime = 0.6; // Устанавливаем ночь - isNightTime = true; - }; - - function rebuildHotbar(){ - hotbarEl.innerHTML=''; - - // Показываем последние 5 выбранных предметов (если они есть в инвентаре) - const items = recentItems.filter(id => inv[id] > 0).slice(0, 5); - - for(const id of items){ - const s = document.createElement('div'); - s.className = 'slot'+(id===selected?' sel':''); - if(BLOCKS[id]) { - s.style.backgroundImage = `url(${tex[id].toDataURL()})`; - s.style.backgroundSize = 'cover'; - } else if(ITEMS[id]) { - s.textContent = ITEMS[id].icon; - } else if(TOOLS[id]) { - s.textContent = TOOLS[id].icon; - } - const c = document.createElement('div'); - c.className='count'; - c.textContent = inv[id]; - s.appendChild(c); - s.onclick = () => { - playSound('click'); // Звук клика по инвентарю - selected=id; - // Обновляем список последних предметов - recentItems = recentItems.filter(item => item !== id); // Удаляем если уже есть - recentItems.unshift(id); // Добавляем в начало - recentItems = recentItems.slice(0, 5); // Оставляем только 5 - rebuildHotbar(); - }; - hotbarEl.appendChild(s); - } - } - - function renderInventory() { - inventoryGrid.innerHTML = ''; - - // Создаём сетку инвентаря 7x3 - const items = Object.keys(inv).filter(id => inv[id] > 0); - - // Добавляем пустые слоты для полной сетки - for(let i = 0; i < 21; i++) { - const slot = document.createElement('div'); - slot.className = 'inv-slot' + (i < items.length && items[i] === selected ? ' sel' : ''); - - if(i < items.length) { - const id = items[i]; - if(BLOCKS[id]) { - slot.style.backgroundImage = `url(${tex[id].toDataURL()})`; - slot.style.backgroundSize = 'cover'; - } else if(ITEMS[id]) { - slot.textContent = ITEMS[id].icon; - } else if(TOOLS[id]) { - slot.textContent = TOOLS[id].icon; - } - - const count = document.createElement('div'); - count.className = 'inv-count'; - count.textContent = inv[id]; - slot.appendChild(count); - - slot.onclick = () => { - playSound('click'); // Звук клика по инвентарю - selected = id; - // Обновляем список последних предметов - recentItems = recentItems.filter(item => item !== id); // Удаляем если уже есть - recentItems.unshift(id); // Добавляем в начало - recentItems = recentItems.slice(0, 5); // Оставляем только 5 - rebuildHotbar(); - renderInventory(); - }; - } - - inventoryGrid.appendChild(slot); - } - } - - function canCraft(r){ - for(const res in r.cost){ - if((inv[res]||0) < r.cost[res]) return false; - } - return true; - } - function renderCraft(){ - recipesEl.innerHTML=''; - for(const r of RECIPES){ - const row = document.createElement('div'); - row.className='recipe'; - const icon = document.createElement('div'); - icon.className='ricon'; - icon.style.backgroundImage = `url(${tex[r.out].toDataURL()})`; - const info = document.createElement('div'); - info.className='rinfo'; - const nm = document.createElement('div'); - nm.className='rname'; - nm.textContent = `${BLOCKS[r.out].n} x${r.qty}`; - const cs = document.createElement('div'); - cs.className='rcost'; - cs.textContent = Object.keys(r.cost).map(x => `${BLOCKS[x].n}: ${(inv[x]||0)}/${r.cost[x]}`).join(' '); - info.appendChild(nm); info.appendChild(cs); - const btn = document.createElement('button'); - btn.className='rcraft'; - btn.textContent='Создать'; - btn.disabled = !canCraft(r); - btn.onclick = () => { - if(!canCraft(r)) return; - playSound('click'); // Звук клика по кнопке крафта - for(const res in r.cost) inv[res]-=r.cost[res]; - inv[r.out] = (inv[r.out]||0) + r.qty; - rebuildHotbar(); - renderCraft(); - }; - row.appendChild(icon); row.appendChild(info); row.appendChild(btn); - recipesEl.appendChild(row); - } - } - - let craftOpen=false; - let inventoryOpen = false; - - document.getElementById('craftBtn').onclick = () => { - playSound('click'); // Звук клика по кнопке - craftOpen = !craftOpen; - craftPanel.style.display = craftOpen ? 'block' : 'none'; - if(craftOpen) { - renderCraft(); - // Закрываем инвентарь если открыт крафт - inventoryOpen = false; - inventoryPanel.style.display = 'none'; - } - }; - document.getElementById('craftClose').onclick = () => { - playSound('click'); // Звук клика по кнопке - craftOpen = false; - craftPanel.style.display = 'none'; - }; - - // Кнопка открытия инвентаря - document.getElementById('invToggle').onclick = () => { - playSound('click'); // Звук клика по кнопке - inventoryOpen = true; - inventoryPanel.style.display = 'block'; - renderInventory(); - // Закрываем крафт если открыт инвентарь - craftOpen = false; - craftPanel.style.display = 'none'; - }; - - document.getElementById('inventoryClose').onclick = () => { - playSound('click'); // Звук клика по кнопке - inventoryOpen = false; - inventoryPanel.style.display = 'none'; - }; - - // Кнопка сохранения игры (только для одиночного режима) - const saveBtn = document.getElementById('saveBtn'); - saveBtn.onclick = () => { - playSound('click'); - saveGame(); - alert('Игра сохранена!'); - }; - - // Кнопка сброса игры (удаление сохранения и создание нового мира) - const resetBtn = document.getElementById('resetBtn'); - resetBtn.onclick = () => { - if (confirm('Вы уверены, что хотите удалить сохранение и начать новую игру?')) { - playSound('click'); - - // Удаляем сохранение из localStorage - try { - localStorage.removeItem(SAVE_KEY); - console.log('Сохранение удалено из localStorage'); - } catch (e) { - console.warn('Ошибка удаления сохранения:', e); - } - - // Сбрасываем in-memory сохранение - inMemorySave = null; - - // Генерируем новый worldId - worldId = Math.random().toString(36).substring(2, 10); - console.log('Новый worldId после сброса:', worldId); - - // Обновляем URL - try { - const newUrl = new URL(window.location.href); - newUrl.searchParams.set('world', worldId); - const newUrlString = newUrl.toString(); - - if (typeof window.history !== 'undefined' && typeof window.history.replaceState === 'function') { - window.history.replaceState(null, '', newUrlString); - console.log('URL обновлён:', newUrlString); - } - } catch (e) { - console.error('Ошибка обновления URL:', e); - } - - // Перезагружаем страницу - location.reload(); - } - }; - - // Показываем кнопку сохранения только если играем одни - function updateSaveButtonVisibility() { - if (isMultiplayer && otherPlayers.size > 0) { - saveBtn.style.display = 'none'; - } else { - saveBtn.style.display = 'flex'; - } - } - - // Режимы - const MODES = [{id:'move',icon:'🏃'},{id:'mine',icon:'⛏️'},{id:'build',icon:'🧱'}]; - let modeIdx=0; - const modeBtn = document.getElementById('modeBtn'); - function mode(){ return MODES[modeIdx].id; } - modeBtn.onclick = () => { - playSound('click'); // Звук клика по кнопке режима - modeIdx=(modeIdx+1)%MODES.length; modeBtn.textContent=MODES[modeIdx].icon; - }; - - // День/ночь (автоматический цикл) - let isNightTime = false; - - // Управление - const inp = { l:false, r:false, j:false }; - function bindHold(el, key){ - const down=(e)=>{ e.preventDefault(); inp[key]=true; }; - const up=(e)=>{ e.preventDefault(); inp[key]=false; }; - el.addEventListener('pointerdown', down); - el.addEventListener('pointerup', up); - el.addEventListener('pointerleave', up); - } - bindHold(document.getElementById('left'),'l'); - bindHold(document.getElementById('right'),'r'); - bindHold(document.getElementById('jump'),'j'); - - window.addEventListener('keydown', (e)=>{ - if(e.code==='KeyA'||e.code==='ArrowLeft') inp.l=true; - if(e.code==='KeyD'||e.code==='ArrowRight') inp.r=true; - if(e.code==='Space'||e.code==='KeyW'||e.code==='ArrowUp') inp.j=true; - }); - window.addEventListener('keyup', (e)=>{ - if(e.code==='KeyA'||e.code==='ArrowLeft') inp.l=false; - if(e.code==='KeyD'||e.code==='ArrowRight') inp.r=false; - if(e.code==='Space'||e.code==='KeyW'||e.code==='ArrowUp') inp.j=false; - }); - - // Лодка - const boat = { - x: 0, y: 0, - w: 34, h: 34, - vx: 0, vy: 0, - active: false, - inWater: false - }; - - // Игрок - const player = { - x: 6*TILE, y: 0*TILE, - w: 34, h: 34, - vx: 0, vy: 0, - grounded: false, - inWater: false, - headInWater: false, - hp: 100, - hunger: 100, - o2: 100, - invuln: 0, - fallStartY: 0, - lastStepTime: 0, - sleeping: false, - inBoat: false - }; - - // Сохраняем начальную позицию для возрождения - const spawnPoint = { x: 6*TILE, y: 0*TILE }; - - // Система сохранения игры (localStorage + in-memory fallback) - const SAVE_KEY = 'minegrechka_save'; - let db = null; // Оставляем для совместимости, но не используем - let inMemorySave = null; // Запасное сохранение в памяти - - // Инициализация (localStorage + in-memory fallback) - function initDB(){ - return new Promise((resolve) => { - console.log('Используем localStorage для сохранений (sandbox режим)'); - resolve(null); - }); - } - - // Детерминированный генератор псевдослучайных чисел на основе seed - function seededRandom(gx, gy){ - const n = Math.sin(gx * 12.9898 + gy * 78.233 + worldSeed * 0.1) * 43758.5453; - return n - Math.floor(n); - } - - function saveGame(){ - const saveData = { - version: 2, - worldSeed: worldSeed, - player: { - x: player.x, - y: player.y, - hp: player.hp, - hunger: player.hunger, - o2: player.o2 - }, - inventory: inv, - time: worldTime, - isNight: isNightTime, - // Сохраняем только изменения - placedBlocks: placedBlocks.slice(), - removedBlocks: removedBlocks.slice() - }; - - const saveSize = JSON.stringify(saveData).length; - console.log('Сохранение: player HP:', player.hp, 'hunger:', player.hunger, 'o2:', player.o2); - - // Пробуем сохранить в localStorage (основной метод для персистентности) - try { - localStorage.setItem(SAVE_KEY, JSON.stringify(saveData)); - console.log(`Игра сохранена в localStorage (размер: ${saveSize} байт)`); - } catch(e){ - console.warn('Ошибка сохранения в localStorage, используем только in-memory:', e); - - // Если localStorage недоступен, используем in-memory fallback - inMemorySave = saveData; - console.log(`Игра сохранена в памяти (размер: ${saveSize} байт)`); - } - } - - function loadGame(){ - return new Promise((resolve, reject) => { - // Пробуем localStorage - try { - const localSave = localStorage.getItem(SAVE_KEY); - if(localSave){ - const parsed = JSON.parse(localSave); - console.log('Загружено из localStorage, player HP:', parsed.player?.hp); - resolve(parsed); - return; - } - } catch(e){ - console.warn('Ошибка доступа к localStorage:', e); - } - - // Если localStorage недоступен, используем in-memory сохранение - if(inMemorySave){ - console.log('Загружено из in-memory сохранения, player HP:', inMemorySave.player?.hp); - resolve(inMemorySave); - return; - } - - console.log('Сохранение не найдено'); - resolve(null); - }); - } - - // Миграция с версии 1 на версию 2 - function migrateV1toV2(saveData){ - console.log('Миграция сохранения с версии 1 на версию 2...'); - - // Сохраняем seed из текущей игры (так как v1 его не хранил) - saveData.worldSeed = worldSeed; - - // Инициализируем массивы изменений - saveData.placedBlocks = []; - saveData.removedBlocks = []; - - // Для v1 нам нужно сравнить сгенерированные блоки с тем, что должно быть по seed - // Это сложно сделать без полной перегенерации, поэтому для v1 сохраняем только seed - // и при загрузке просто перегенерируем мир - - // Удаляем старые данные - delete saveData.generatedBlocks; - - saveData.version = 2; - console.log('Миграция завершена'); - } - - async function applySave(saveData){ - if(!saveData) return; - - console.log('=== applySave START ==='); - console.log('player HP before applySave:', player.hp); - console.log('saveData.player.hp:', saveData.player?.hp); - - // Миграция версий - if(saveData.version === 1){ - migrateV1toV2(saveData); - } - - // Восстанавливаем seed - if(saveData.worldSeed !== undefined){ - worldSeed = saveData.worldSeed; - } - - // Восстанавливаем игрока - if(saveData.player){ - player.x = saveData.player.x; - player.y = saveData.player.y; - player.hunger = saveData.player.hunger; - player.o2 = saveData.player.o2; - - // Обновляем spawnPoint на позицию из сохранения - spawnPoint.x = player.x; - spawnPoint.y = player.y; - - // Проверяем HP из сохранения - если <= 0, устанавливаем 100 - const savedHP = saveData.player.hp; - console.log('Saved HP from file:', savedHP); - if(savedHP <= 0){ - console.log('WARNING: Saved HP is <= 0, setting to 100!'); - player.hp = 100; - } else { - player.hp = savedHP; - } - console.log('player HP after restore:', player.hp); - console.log('spawnPoint обновлён из сохранения: x=', spawnPoint.x, 'y=', spawnPoint.y); - } else { - console.log('No player data in save, setting default HP: 100'); - player.hp = 100; - } - - console.log('=== applySave END ==='); - - // Восстанавливаем инвентарь - if(saveData.inventory){ - for(const key in saveData.inventory){ - inv[key] = saveData.inventory[key]; - } - } - - // Восстанавливаем время - if(saveData.time !== undefined){ - worldTime = saveData.time; - } - - // Восстанавливаем день/ночь - if(saveData.isNight !== undefined){ - isNightTime = saveData.isNight; - } - - // Перегенерируем мир по seed - regenerateVisibleChunks(); - - // Применяем изменения (только для v2) - if(saveData.version === 2){ - // Применяем блоки, установленные игроком - for(const block of saveData.placedBlocks){ - setBlock(block.gx, block.gy, block.t, true); - } - - // Применяем удалённые блоки - for(const block of saveData.removedBlocks){ - removeBlock(block.gx, block.gy); - } - - // Восстанавливаем массивы изменений - placedBlocks = saveData.placedBlocks || []; - removedBlocks = saveData.removedBlocks || []; - } - - rebuildHotbar(); - console.log('Игра загружена'); - } - - // Камера (двухосевая) - let camX=0, camY=0; - - // День/ночь - let worldTime=0; - const DAY_LEN=360; // замедлил смену дня/ночи в 3 раза - - // Облака - const clouds = Array.from({length:10}, ()=>({ - x: Math.random()*2000, - y: -200 - Math.random()*260, // выше экрана, потому что мир по Y теперь двигается - w: 80+Math.random()*120, - s: 12+Math.random()*20 - })); - - // Частицы (взрыв) - const parts = []; - function spawnExplosion(x,y, power){ - const n = Math.floor(16 + power*10); - for(let i=0;i 100){ - playSound('splash'); - } - } - - function resolveY(e){ - // Всегда пересчитываем grounded (не держим "липким") - e.grounded = false; - - const x1 = e.x + 2; - const x2 = e.x + e.w - 2; - - // Проверяем, находится ли игрок на лестнице - const cx = e.x + e.w/2; - const cy = e.y + e.h/2; - const gx = Math.floor(cx / TILE); - const gy = Math.floor(cy / TILE); - const b = getBlock(gx, gy); - const onLadder = b && BLOCKS[b.t] && BLOCKS[b.t].climbable; - - // Если на лестнице - можно двигаться вверх/вниз - if(onLadder && e === player){ - e.grounded = true; - e.vy *= 0.8; // замедляем падение на лестнице - - // Если нажимаем прыжок на лестнице - поднимаемся - if(inp.j && e.vy > -200){ - e.vy = -200; - } - // Если не нажимаем прыжок - медленно спускаемся - else if(!inp.j && e.vy > 0){ - e.vy = Math.min(e.vy, 100); - } - return; - } - - // 1) Если движемся вниз ИЛИ стоим (vy >= 0) — проверяем опору под ногами - // Берём точку на 1px ниже стопы, чтобы не зависеть от ровного попадания в границу тайла. - if(e.vy >= 0){ - const probeY = e.y + e.h + 1; - const gy = Math.floor(probeY / TILE); - const gxA = Math.floor(x1 / TILE); - const gxB = Math.floor(x2 / TILE); - - if(isSolid(gxA, gy) || isSolid(gxB, gy)){ - e.y = gy * TILE - e.h; // прижимаем к полу - e.vy = 0; - e.grounded = true; - - // урон от падения — только игроку и только не в воде - if(e === player && !player.inWater){ - const fallTiles = (e.y - e.fallStartY) / TILE; - if(fallTiles > 6) player.hp -= (fallTiles - 6) * 10; - } - if(e === player) e.fallStartY = e.y; - } - } - - // 2) Проверка на возможность запрыгнуть на блок, если игрок рядом с ним - if(e.vy < 0 && e === player){ - const gy = Math.floor(e.y / TILE); - const gxA = Math.floor(x1 / TILE); - const gxB = Math.floor(x2 / TILE); - - // Проверяем, есть ли блок рядом с игроком - if((isSolid(gxA, gy) || isSolid(gxB, gy)) && !isSolid(gxA, gy - 1) && !isSolid(gxB, gy - 1)){ - e.y = (gy + 1) * TILE; - e.vy = 0; - e.grounded = true; - if(e === player) e.fallStartY = e.y; - console.log("Jumped onto block!"); - } - } - - // 2) Если движемся вверх — проверяем потолок - if(e.vy < 0){ - const gy = Math.floor(e.y / TILE); - const gxA = Math.floor(x1 / TILE); - const gxB = Math.floor(x2 / TILE); - if(isSolid(gxA, gy) || isSolid(gxB, gy)){ - e.y = (gy + 1) * TILE; - e.vy = 0; - } - } - } - - function resolveX(e){ - const y1 = e.y + 2; - const y2 = e.y + e.h - 2; - - if(e.vx > 0){ - const gx = Math.floor((e.x + e.w)/TILE); - const gyA = Math.floor(y1/TILE); - const gyB = Math.floor(y2/TILE); - if(isSolid(gx, gyA) || isSolid(gx, gyB)){ - e.x = gx*TILE - e.w; - e.vx = 0; - } - } else if(e.vx < 0){ - const gx = Math.floor(e.x/TILE); - const gyA = Math.floor(y1/TILE); - const gyB = Math.floor(y2/TILE); - if(isSolid(gx, gyA) || isSolid(gx, gyB)){ - e.x = (gx+1)*TILE; - e.vx = 0; - } - } - } - - // TNT логика: цепь + усиление - const activeTNT = new Set(); // хранит key - function activateTNT(b, fuse=3.2){ - if(b.dead) return; - if(b.active) return; - b.active=true; - b.fuse=fuse; - activeTNT.add(k(b.gx,b.gy)); - } - - function explodeAt(gx,gy){ - const center = getBlock(gx,gy); - if(!center) return; - - // усиление: считаем сколько TNT рядом (в радиусе 2) и активируем их «почти сразу» - let bonus = 0; - for(let x=gx-2; x<=gx+2; x++){ - for(let y=gy-2; y<=gy+2; y++){ - const b = getBlock(x,y); - if(b && !b.dead && b.t==='tnt' && !(x===gx && y===gy)){ - bonus += 0.8; - activateTNT(b, 0.12); // цепь - } - } - } - - const power = 1 + bonus; // условная мощность - const radius = 3.2 + bonus*0.7; // радиус разрушения в тайлах - const dmgR = 150 + bonus*60; // радиус урона в пикселях - - removeBlock(gx,gy); - activeTNT.delete(k(gx,gy)); - playSound('explode1'); // Звук взрыва - spawnExplosion(gx*TILE + TILE/2, gy*TILE + TILE/2, power); - - for(let x=Math.floor(gx-radius); x<=Math.ceil(gx+radius); x++){ - for(let y=Math.floor(gy-radius); y<=Math.ceil(gy+radius); y++){ - const d = Math.hypot(x-gx, y-gy); - if(d > radius) continue; - const b = getBlock(x,y); - if(!b || b.dead) continue; - if(BLOCKS[b.t].fluid) continue; - if(BLOCKS[b.t].unbreakable) continue; - if(b.t==='tnt') { activateTNT(b, 0.12); continue; } - removeBlock(x,y); - if(inv[b.t] !== undefined && Math.random()<0.20) inv[b.t]++; // немного дропа - } - } - rebuildHotbar(); - - // урон - const hurt = (e)=>{ - const dx = (e.x+e.w/2) - (gx*TILE+TILE/2); - const dy = (e.y+e.h/2) - (gy*TILE+TILE/2); - const dist = Math.hypot(dx,dy); - if(dist < dmgR){ - const dmg = (dmgR - dist) * 0.06 * power; - if(e === player) player.hp -= dmg; - else e.hp -= dmg; - e.vx += (dx/dist || 0) * 600; - e.vy -= 320; - } - }; - hurt(player); - mobs.forEach(hurt); - } - - // Взаимодействие мышь/тап - const mouse = { x:null, y:null }; - canvas.addEventListener('pointermove', (e)=>{ - const r = canvas.getBoundingClientRect(); - mouse.x = e.clientX - r.left; - mouse.y = e.clientY - r.top; - }); - - canvas.addEventListener('pointerdown', (e)=>{ - if(craftOpen) return; - if(player.hp<=0) return; - - const r = canvas.getBoundingClientRect(); - const sx = e.clientX - r.left; - const sy = e.clientY - r.top; - - const wx = sx + camX; - const wy = sy + camY; - - const gx = Math.floor(wx / TILE); - const gy = Math.floor(wy / TILE); - - // Пробуждение: клик по любой кровати когда спишь - const b = getBlock(gx,gy); - if(player.sleeping && b && b.t==='bed'){ - player.sleeping = false; - return; - } - - if(player.sleeping) return; // Нельзя взаимодействовать во время сна - - // клик по мобу (в режиме mine) - if(mode()==='mine'){ - for(let i=mobs.length-1;i>=0;i--){ - const m = mobs[i]; - if(wx>=m.x && wx<=m.x+m.w && wy>=m.y && wy<=m.y+m.h){ - m.hp -= 1; - m.vx += (m.x - player.x) * 2; - m.vy -= 200; - playSound('attack'); // Звук атаки игрока - if(m.hp<=0){ - // дроп еды - if(m.kind === 'chicken') playSound('hurt_chicken'); // Звук при убийстве курицы - inv.meat += (m.kind==='chicken' ? 1 : 2); - mobs.splice(i,1); - rebuildHotbar(); - } - return; - } - } - } - - // еда (предмет) - if(ITEMS[selected] && inv[selected]>0){ - const it = ITEMS[selected]; - if(player.hp < 100 || player.hunger < 100){ - playSound('eat1'); // Звук употребления еды - player.hunger = Math.min(100, player.hunger + it.food); - player.hp = Math.min(100, player.hp + 15); - inv[selected]--; - rebuildHotbar(); - } - return; - } - - // жарка на костре: выбран meat + клик по campfire - if(b && b.t==='campfire' && selected==='meat' && inv.meat>0){ - playSound('fire'); // Звук при жарке на костре - inv.meat--; inv.cooked++; - rebuildHotbar(); - return; - } - - // Сон на кровати: клик по bed - if(b && b.t==='bed' && isNight()){ - player.sleeping = true; - saveGame(); // Сохраняем при отходе ко сну - return; - } - - if(mode()==='mine'){ - if(!b) return; - if(BLOCKS[b.t].fluid || BLOCKS[b.t].decor) return; - - if(b.t==='tnt'){ activateTNT(b, 3.2); return; } // не взрывается сразу - - const removed = removeBlock(gx,gy); - if(removed){ - inv[removed.t] = (inv[removed.t]||0) + 1; - - // Отправляем изменение блока на сервер - sendBlockChange(gx, gy, removed.t, 'remove'); - - // Звуки при добыче блоков - if(removed.t === 'glass') playSound('glass1'); - else if(removed.t === 'sand') playSound('sand1'); - else if(removed.t === 'snow') playSound('snow1'); - else if(removed.t === 'stone' || removed.t.endsWith('_ore')) playSound('stone1'); - else if(removed.t === 'wood') playSound('wood1'); - else playSound('cloth1'); - - rebuildHotbar(); - } - return; - } - - if(mode()==='build'){ - if(inv[selected] <= 0) return; - if(!BLOCKS[selected]) return; - if(b) return; // занято - - // Проверяем, ставим ли лодку - if(selected === 'boat'){ - // Лодку можно ставить только на воду - const waterBelow = getBlock(gx, gy+1); - if(!waterBelow || waterBelow.t !== 'water'){ - return; - } - - // Создаём лодку - boat.x = gx * TILE; - boat.y = gy * TILE; - boat.vx = 0; - boat.vy = 0; - boat.active = true; - boat.inWater = true; - - // Сажаем игрока в лодку - player.inBoat = true; - player.x = boat.x; - player.y = boat.y; - player.vx = 0; - player.vy = 0; - - playSound('splash'); - inv[selected]--; - rebuildHotbar(); - return; - } - - // запрет ставить в игрока - const bx = gx*TILE, by = gy*TILE; - const overlap = !(bx >= player.x+player.w || bx+TILE <= player.x || by >= player.y+player.h || by+TILE <= player.y); - if(overlap) return; - - setBlock(gx,gy,selected, true); // true = блок установлен игроком - inv[selected]--; - - // Отправляем изменение блока на сервер - sendBlockChange(gx, gy, selected, 'set'); - - // Звук при строительстве - if(selected === 'stone' || selected === 'brick') playSound('stone_build'); - else if(selected === 'wood' || selected === 'planks') playSound('wood_build'); - else if(selected === 'glass') playSound('glass1'); - else if(selected === 'sand') playSound('sand1'); - else if(selected === 'snow') playSound('snow1'); - else if(selected === 'dirt' || selected === 'grass') playSound('cloth1'); - - rebuildHotbar(); - return; - } - }); - - // Генерация (по X, на всю глубину до bedrock) - const generated = new Set(); // gx already generated - function surfaceGyAt(gx){ - // базовая поверхность выше уровня воды с вариациями + "горы" - // Используем seed для детерминированной генерации - // Увеличили амплитуду и добавили больше частот для разнообразия - const n1 = Math.sin(gx*0.025 + worldSeed*0.001)*8; // крупные горы - const n2 = Math.sin(gx*0.012 + worldSeed*0.002)*12; // средние горы - const n3 = Math.sin(gx*0.006 + worldSeed*0.003)*6; // мелкие холмы - const n4 = Math.sin(gx*0.045 + worldSeed*0.004)*4; // детали - const n5 = Math.cos(gx*0.018 + worldSeed*0.005)*5; // дополнительные вариации - const h = Math.floor(SEA_GY - 8 + n1 + n2 + n3 + n4 + n5); // чем меньше gy - тем выше - return h; - } - - function genColumn(gx){ - if(generated.has(gx)) return; - generated.add(gx); - - const sgy = surfaceGyAt(gx); - - // вода (если поверхность ниже уровня моря => sgy > SEA_GY) - if(sgy > SEA_GY){ - for(let gy=SEA_GY; gy SEA_GY && gy === sgy+1 && seededRandom(gx, gy) < 0.25) t='clay'; - if(gy > sgy+6 && seededRandom(gx, gy) < 0.07) t='gravel'; - - // руды: чем глубже, тем интереснее - const depth = gy - sgy; - const r = seededRandom(gx, gy); - if(t==='stone'){ - if(r < 0.06) t='coal'; - else if(r < 0.10) t='copper_ore'; - else if(r < 0.13) t='iron_ore'; - else if(depth > 40 && r < 0.145) t='gold_ore'; - else if(depth > 70 && r < 0.152) t='diamond_ore'; - } - - setBlock(gx,gy,t); - } - - // Деревья и цветы (только на траве, и не в воде) - const top = getBlock(gx, sgy); - if(top && top.t==='grass'){ - if(seededRandom(gx, sgy-1) < 0.10){ - setBlock(gx, sgy-1,'flower'); - } - if(seededRandom(gx, sgy-2) < 0.12){ - // простое дерево - setBlock(gx, sgy-1, 'wood'); - setBlock(gx, sgy-2, 'wood'); - setBlock(gx, sgy-3, 'leaves'); - setBlock(gx-1, sgy-3,'leaves'); - setBlock(gx+1, sgy-3,'leaves'); - } - } - } - - // Перегенерация видимых чанков (используется при загрузке сохранения) - function regenerateVisibleChunks(){ - const gx0 = Math.floor(camX/TILE); - for(let gx=gx0-GEN_MARGIN_X; gx<=gx0+GEN_MARGIN_X; gx++){ - // Принудительно перегенерируем колонну - generated.delete(gx); - genColumn(gx); - } - } - - function ensureGenAroundCamera(){ - const gx0 = Math.floor(camX/TILE); - for(let gx=gx0-GEN_MARGIN_X; gx<=gx0+GEN_MARGIN_X; gx++){ - genColumn(gx); - } - } - - // Лут с дерева/листвы: дерево -> wood; листья -> leaves - // (уже в mine добавляется inv[type] автоматически) - - // Рисование костра: огонь поверх текстуры - function drawFire(wx,wy,now){ - const baseX = wx; - const baseY = wy; - const flick = 6 + (Math.sin(now/90)+1)*4; - ctx.fillStyle = 'rgba(255,140,0,0.85)'; - ctx.beginPath(); - ctx.moveTo(baseX+10, baseY+30); - ctx.lineTo(baseX+20, baseY+30-flick); - ctx.lineTo(baseX+30, baseY+30); - ctx.fill(); - - ctx.fillStyle = 'rgba(255,230,150,0.75)'; - ctx.beginPath(); - ctx.moveTo(baseX+14, baseY+30); - ctx.lineTo(baseX+20, baseY+30-(flick*0.7)); - ctx.lineTo(baseX+26, baseY+30); - ctx.fill(); - } - - // Моб AI - function mobAI(m, dt){ - updateWaterFlag(m); - - if(m.kind==='zombie'){ - // активность ночью - const night = isNight(); - if(!night){ m.hp=0; return; } - const dir = Math.sign((player.x) - m.x); - m.vx = dir * m.speed; - if(m.inWater && Math.random()<0.06) m.vy = -260; - // атака - if(Math.abs((m.x+ m.w/2) - (player.x+player.w/2)) < 28 && - Math.abs((m.y+ m.h/2) - (player.y+player.h/2)) < 40 && - player.invuln <= 0){ - player.hp -= 15; - player.invuln = 0.8; - player.vx += dir*420; - player.vy -= 260; - playSound('hit1'); // Звук при атаке зомби - } - } else if(m.kind==='creeper'){ - // активность ночью - const night = isNight(); - if(!night){ m.hp=0; return; } - const dir = Math.sign((player.x) - m.x); - const dist = Math.hypot((player.x+player.w/2) - (m.x+m.w/2), (player.y+player.h/2) - (m.y+m.h/2)); - - // Движение к игроку - m.vx = dir * m.speed; - if(m.inWater && Math.random()<0.06) m.vy = -260; - - // Взрыв если близко к игроку - if(dist < 60){ - m.fuse -= dt; - if(m.fuse <= 0){ - explodeAt(Math.floor((m.x+m.w/2)/TILE), Math.floor((m.y+m.h/2)/TILE)); - m.hp = 0; - } - } else { - // Поджигаем если очень близко - if(dist < 40){ - m.fuse = 0.5; // Быстрый взрыв - } - } - } else if(m.kind==='skeleton'){ - // активность ночью - const night = isNight(); - if(!night){ m.hp=0; return; } - const dir = Math.sign((player.x) - m.x); - const dist = Math.hypot((player.x+player.w/2) - (m.x+m.w/2), (player.y+player.h/2) - (m.y+m.h/2)); - - // Движение к игроку - m.vx = dir * m.speed; - if(m.inWater && Math.random()<0.06) m.vy = -260; - - // Стрельба стрелами с проверкой препятствий - m.shootCooldown -= dt; - if(dist < 200 && m.shootCooldown <= 0){ - m.shootCooldown = 1.5; - // Создаём стрелу (упрощённо - просто урон) - const dx = (player.x+player.w/2) - (m.x+m.w/2); - const dy = (player.y+player.h/2) - (m.y+m.h/2); - const angle = Math.atan2(dy, dx); - - // Проверяем препятствия (до 5 блоков) - let blocked = false; - const checkSteps = 5; - const stepSize = dist / checkSteps; - for(let i = 1; i <= checkSteps; i++){ - const checkX = m.x + m.w/2 + Math.cos(angle) * stepSize * i; - const checkY = m.y + m.h/2 + Math.sin(angle) * stepSize * i; - const checkGX = Math.floor(checkX / TILE); - const checkGY = Math.floor(checkY / TILE); - if(isSolid(checkGX, checkGY)){ - blocked = true; - break; - } - } - - // Урон игроку если попали и нет препятствий - if(!blocked && dist < 150 && player.invuln <= 0){ - player.hp -= 8; - player.invuln = 0.5; - player.vx += Math.cos(angle) * 300; - player.vy -= 200; - playSound('hit1'); - } - } - } else { - // животные - m.aiT -= dt; - if(m.aiT <= 0){ - m.aiT = 1.8 + Math.random()*2.5; - m.dir = Math.random()<0.5 ? -1 : 1; - if(Math.random()<0.25) m.dir = 0; - } - m.vx = m.dir * (m.kind==='chicken' ? 55 : 40); - if(m.inWater) m.vy = -120; - } - - // физика моба - const g = m.inWater ? GRAV_WATER : GRAV; - m.vy += g*dt; - - m.y += m.vy*dt; m.grounded=false; resolveY(m); - m.x += m.vx*dt; resolveX(m); - } - - function isNight(){ - // Автоматический цикл: ночь когда worldTime > 0.5 - return worldTime > 0.5; - } - - // Respawn - document.getElementById('respawnBtn').onclick = async () => { - playSound('click'); // Звук клика по кнопке - - console.log('=== RESPAWN CLICKED ==='); - console.log('isMultiplayer:', isMultiplayer); - console.log('otherPlayers.size:', otherPlayers.size); - console.log('player.hp before respawn:', player.hp); - - // В мультиплеере не загружаем сохранение, а возрождаемся в начальной точке - if (isMultiplayer && otherPlayers.size > 0) { - console.log('Мультиплеер режим - возрождение в начальной точке'); - player.hp = 100; - player.hunger = 100; - player.o2 = 100; - player.vx = player.vy = 0; - player.invuln = 0; - player.x = spawnPoint.x; - player.y = spawnPoint.y; - player.fallStartY = player.y; - console.log('Возрождение в начальной точке, HP:', player.hp); - } else { - console.log('Одиночный режим - загружаем последнее сохранение'); - // Одиночный режим - загружаем последнее сохранение - const loadedSave = await loadGame(); - if(loadedSave){ - await applySave(loadedSave); - console.log('Загружено последнее сохранение после смерти, final HP:', player.hp); - } else { - // Если сохранения нет, возрождаемся в начальной точке - player.hp = 100; - player.hunger = 100; - player.o2 = 100; - player.vx = player.vy = 0; - player.invuln = 0; - player.x = spawnPoint.x; - player.y = spawnPoint.y; - player.fallStartY = player.y; - console.log('Возрождение в начальной точке, HP:', player.hp); - } - } - - console.log('player.hp after respawn logic:', player.hp); - console.log('Hiding death screen...'); - deathEl.style.display='none'; - console.log('=== RESPAWN END ==='); - }; - - // Resize - function resize(){ - W = gameEl.clientWidth; - H = gameEl.clientHeight; - canvas.width = W*dpr; - canvas.height = H*dpr; - lightC.width = W*dpr; - lightC.height = H*dpr; - ctx.setTransform(dpr,0,0,dpr,0,0); - } - window.addEventListener('resize', resize); - - // init - resize(); - rebuildHotbar(); - - // Инициализируем и загружаем сохранение - initDB().then(async () => { - // Пытаемся загрузить сохранённую игру - const loadedSave = await loadGame(); - if(loadedSave){ - await applySave(loadedSave); - console.log('Загружено сохранение, HP:', player.hp); - - // Проверяем HP после загрузки - если <= 0, возрождаемся - if (player.hp <= 0) { - console.log('WARNING: HP <= 0 после загрузки, возрождаемся'); - player.hp = 100; - player.hunger = 100; - player.o2 = 100; - player.x = spawnPoint.x; - player.y = spawnPoint.y; - player.vx = player.vy = 0; - player.invuln = 0; - player.fallStartY = player.y; - } - } else { - console.log('Сохранение не найдено, начинаем новую игру'); - - // Инициализируем игрока для новой игры - player.hp = 100; - player.hunger = 100; - player.o2 = 100; - player.vx = player.vy = 0; - player.invuln = 0; - - // старт — на поверхности (ровно на 1 тайл выше поверхности) - const startGX = 6; - genColumn(startGX); - const surfaceY = surfaceGyAt(startGX); - player.y = (surfaceY - 1) * TILE; - player.x = startGX * TILE; - player.fallStartY = player.y; - - // Обновляем spawnPoint, чтобы возрождение было на поверхности - spawnPoint.x = player.x; - spawnPoint.y = player.y; - - console.log('Новая игра: startGX=', startGX, 'surfaceY=', surfaceY, 'player.y=', player.y, 'player.hp=', player.hp); - console.log('spawnPoint обновлён: x=', spawnPoint.x, 'y=', spawnPoint.y); - - // Генерируем карту вокруг стартовой позиции при инициализации - for(let gx = startGX - 50; gx <= startGX + 50; gx++){ - genColumn(gx); - } - } - - // Автосейв при скрытии страницы (защита от потери прогресса) - document.addEventListener('visibilitychange', () => { - if(document.hidden){ - saveGame(); - } - }); - - // Автосейв перед закрытием страницы (защита от потери прогресса) - window.addEventListener('beforeunload', () => { - saveGame(); - }); - }).catch(err => { - console.error('Ошибка инициализации:', err); - // При ошибке начинаем новую игру - const startGX = 6; - genColumn(startGX); - player.y = (surfaceGyAt(startGX)-1)*TILE; - player.fallStartY = player.y; - - for(let gx = startGX - 50; gx <= startGX + 50; gx++){ - genColumn(gx); - } - }); - - // main loop - let last = performance.now(); - let prevJump = false; - function loop(now){ - const dt = Math.min(0.05, (now-last)/1000); - last = now; - - const jumpPressed = inp.j && !prevJump; - prevJump = inp.j; - - // Ускорение времени во время сна - if(player.sleeping && isNight()){ - worldTime += dt * 8 / DAY_LEN; // В 8 раз быстрее - // Восстанавливаем здоровье во время сна - player.hp = Math.min(100, player.hp + dt * 20); - // Автоматическое пробуждение когда наступает день - if(!isNight()){ - player.sleeping = false; - } - } else { - worldTime += dt / DAY_LEN; - } - if(worldTime >= 1) worldTime -= 1; - - // камера следует за игроком по X/Y - camX = Math.floor((player.x + player.w/2) - W/2); - camY = Math.floor((player.y + player.h/2) - H/2); - - ensureGenAroundCamera(); - - // clouds parallax - for(const c of clouds){ - c.x -= c.s * dt; - if(c.x + c.w < camX - 400) c.x = camX + W + Math.random()*700; - } - - // player - updateWaterFlag(player); - - // кислород/утопление: тратим O2 только если голова под водой, иначе восстанавливаем [web:223] - if(player.headInWater){ - player.o2 = Math.max(0, player.o2 - 6*dt); // замедлил в 3.7 раза - if(player.o2 === 0){ - player.hp -= 4*dt; // уменьшил урон от утопления - } - } else { - player.o2 = Math.min(100, player.o2 + 10*dt); // замедлил восстановление в 4 раза - } - - // голод убывает, но HP не отнимает (как просили) - player.hunger = Math.max(0, player.hunger - dt*0.2); // замедлил в 4 раза - - // Игрок не может двигаться во время сна - if(player.sleeping){ - player.vx = 0; - player.vy = 0; - } else { - const dir = (inp.r?1:0) - (inp.l?1:0); - if(dir) player.vx = dir*MOVE; - else player.vx *= 0.82; - } - - // Звук шагов при движении по земле - if(player.grounded && !player.inWater && Math.abs(player.vx) > 50){ - const stepInterval = 0.35; // Интервал между шагами в секундах - if(now/1000 - player.lastStepTime > stepInterval){ - playSound('step'); - player.lastStepTime = now/1000; - } - } - - // прыжок/плавание (новая логика) - if(player.inBoat){ - // Игрок в лодке - лодка следует за игроком - const dir = (inp.r?1:0) - (inp.l?1:0); - if(dir) boat.vx = dir * MOVE; - else boat.vx *= 0.95; - - // Лодка плавает на воде - boat.vy = 0; - - // Игрок следует за лодкой (сидит внутри неё) - player.x = boat.x + 2; // Игрок по центру лодки - player.y = boat.y - 4; // Игрок выше лодки (сидит внутри) - player.vx = boat.vx; - player.vy = boat.vy; - player.grounded = true; - player.inWater = false; // Игрок не в воде когда в лодке - - // Прыжок из лодки (высадка) - if(jumpPressed){ - // Возвращаем лодку в инвентарь - inv.boat = (inv.boat || 0) + 1; - - player.inBoat = false; - boat.active = false; - player.y += TILE; // Прыгаем из лодки - player.vy = -JUMP * 0.5; - playSound('splash'); - } - - } else if(player.inWater){ - // сопротивление в воде - player.vx *= 0.90; - player.vy *= 0.92; - - // Если не нажимаем прыжок - тонем (гравитация в воде) - if(!jumpPressed && !inp.j){ - // Применяем гравитацию в воде - игрок тонет - player.vy += GRAV_WATER * dt; - } else { - // Если нажимаем прыжок - поднимаемся на поверхность - if(jumpPressed){ - player.vy = Math.min(player.vy, -520); // рывок вверх - } else if(inp.j){ - // если держим — мягкое всплытие - player.vy = Math.min(player.vy, -260); - } - } - - } else { - // обычный прыжок (только по нажатию) - if(jumpPressed && player.grounded && !player.sleeping){ - player.vy = -JUMP; - player.grounded = false; - player.fallStartY = player.y; - } - } - - // Гравитация применяется только вне воды и вне лодки - if(!player.inWater && !player.inBoat){ - player.vy += GRAV*dt; - } - - // Обновляем позицию лодки - if(boat.active){ - boat.x += boat.vx * dt; - boat.y += boat.vy * dt; - - // Лодка не выходит за пределы воды - const boatGX = Math.floor(boat.x / TILE); - const boatGY = Math.floor(boat.y / TILE); - const below = getBlock(boatGX, boatGY + 1); - - if(!below || below.t !== 'water'){ - // Если лодка вышла из воды - выкидываем игрока - inv.boat = (inv.boat || 0) + 1; - player.inBoat = false; - boat.active = false; - player.y += TILE; - player.vy = -200; - playSound('splash'); - } - } - - // Проверяем, не доплыл ли игрок из лодки - if(player.inBoat && !boat.active){ - inv.boat = (inv.boat || 0) + 1; - player.inBoat = false; - player.y += TILE; - player.vy = -200; - playSound('splash'); - } - - player.y += player.vy*dt; - resolveY(player); - player.x += player.vx*dt; resolveX(player); - - // Отправляем позицию на сервер (мультиплеер) - sendPlayerPosition(); - - // Обновляем физику воды - updateWaterPhysics(dt); - - player.invuln = Math.max(0, player.invuln - dt); - - // TNT tick - for(const key of Array.from(activeTNT)){ - const b = grid.get(key); - if(!b || b.dead){ activeTNT.delete(key); continue; } - b.fuse -= dt; - if(b.fuse <= 0){ - explodeAt(b.gx,b.gy); - } - } - - // mobs spawn (с обеих сторон камеры) - spawnT += dt; - if(spawnT > 1.8 && mobs.length < 30){ - spawnT = 0; - - // Выбираем сторону спавна (левая или правая) - const spawnLeft = Math.random() < 0.5; - const gx = spawnLeft - ? Math.floor((camX - 200)/TILE) - : Math.floor((camX + W + 200)/TILE); - - genColumn(gx); - const sgy = surfaceGyAt(gx); - const wx = gx*TILE + 4; - const wy = (sgy-2)*TILE; - - // не спавнить в воде - const top = getBlock(gx, sgy); - if(top && top.t==='water') { - // skip - } else { - if(isNight()){ - // Ночью спавним больше враждебных мобов - const rand = Math.random(); - if(rand < 0.35){ - mobs.push(new Zombie(wx, wy)); - } else if(rand < 0.55){ - mobs.push(new Creeper(wx, wy)); - } else { - mobs.push(new Skeleton(wx, wy)); - } - } else { - // Днём только животные - mobs.push(Math.random()<0.5 ? new Pig(wx, wy) : new Chicken(wx, wy)); - } - } - } - - // mobs update - for(let i=mobs.length-1;i>=0;i--){ - const m = mobs[i]; - mobAI(m, dt); - if(m.hp<=0) mobs.splice(i,1); - } - - // particles - for(let i=parts.length-1;i>=0;i--){ - const p = parts[i]; - p.t -= dt; - p.x += p.vx*dt; - p.y += p.vy*dt; - p.vy += GRAV*dt; - if(p.t <= 0) parts.splice(i,1); - } - - // death - if(player.hp <= 0){ - deathEl.style.display='flex'; - } else if(deathEl.style.display === 'flex') { - // Если HP > 0 но экран смерти всё ещё показан - скрываем его - deathEl.style.display='none'; - } - - // render - const night = isNight(); - - // sky - ctx.fillStyle = night ? '#070816' : '#87CEEB'; - ctx.fillRect(0,0,W,H); - - // clouds (parallax x/y) - ctx.save(); - ctx.translate(-camX*0.5, -camY*0.15); - ctx.fillStyle = 'rgba(255,255,255,0.65)'; - for(const c of clouds){ - ctx.fillRect(c.x, c.y, c.w, 26); - ctx.fillRect(c.x+20, c.y-10, c.w*0.6, 22); - } - ctx.restore(); - - // world - ctx.save(); - ctx.translate(-camX, -camY); - - const minGX = Math.floor(camX/TILE)-2; - const maxGX = Math.floor((camX+W)/TILE)+2; - const minGY = Math.floor(camY/TILE)-6; - const maxGY = Math.floor((camY+H)/TILE)+6; - - // draw blocks (по массиву, но фильтруем диапазоном) - for(const b of blocks){ - if(b.dead) continue; - if(b.gx < minGX || b.gx > maxGX || b.gy < minGY || b.gy > maxGY) continue; - - const def = BLOCKS[b.t]; - if(def.alpha){ - ctx.save(); - ctx.globalAlpha = def.alpha; - ctx.drawImage(tex[b.t], b.gx*TILE, b.gy*TILE, TILE, TILE); - ctx.restore(); - } else { - ctx.drawImage(tex[b.t], b.gx*TILE, b.gy*TILE, TILE, TILE); - } - - // TNT мигает, если активирован - if(b.t==='tnt' && b.active && Math.sin(now/60)>0){ - ctx.fillStyle='rgba(255,255,255,0.45)'; - ctx.fillRect(b.gx*TILE, b.gy*TILE, TILE, TILE); - } - - // огонь костра - if(b.t==='campfire'){ - drawFire(b.gx*TILE, b.gy*TILE, now); - } - } - - // mobs - for(const m of mobs){ - if(m.kind==='zombie'){ - ctx.fillStyle = '#2ecc71'; - ctx.fillRect(m.x, m.y, m.w, m.h); - ctx.fillStyle = '#c0392b'; - ctx.fillRect(m.x+6, m.y+12, 6,6); - ctx.fillRect(m.x+22, m.y+12, 6,6); - } else if(m.kind==='pig'){ - ctx.fillStyle = '#ffb6c1'; - ctx.fillRect(m.x, m.y, m.w, m.h); - ctx.fillStyle = '#000'; - ctx.fillRect(m.x+22, m.y+5, 3,3); - ctx.fillStyle = '#ff69b4'; - ctx.fillRect(m.x+28, m.y+12, 6,6); - } else if(m.kind==='chicken'){ - // chicken - ctx.fillStyle = '#ecf0f1'; - ctx.fillRect(m.x, m.y, m.w, m.h); - ctx.fillStyle = '#f39c12'; - ctx.fillRect(m.x+18, m.y+10, 6,4); - ctx.fillStyle = '#000'; - ctx.fillRect(m.x+8, m.y+6, 3,3); - } else if(m.kind==='creeper'){ - // creeper - ctx.fillStyle = '#4CAF50'; - ctx.fillRect(m.x, m.y, m.w, m.h); - // Глаза - ctx.fillStyle = '#000'; - ctx.fillRect(m.x+8, m.y+8, 4,4); - ctx.fillRect(m.x+22, m.y+8, 4,4); - // Рот - ctx.fillStyle = '#000'; - ctx.fillRect(m.x+12, m.y+20, 10,4); - // Ноги - ctx.fillStyle = '#4CAF50'; - ctx.fillRect(m.x+4, m.y+30, 6,20); - ctx.fillRect(m.x+24, m.y+30, 6,20); - } else if(m.kind==='skeleton'){ - // skeleton - детализированный - // Тело - ctx.fillStyle = '#ECEFF1'; - ctx.fillRect(m.x+10, m.y+20, 14, 12); - // Череп - ctx.fillRect(m.x+8, m.y+0, 18, 18); - // Глазницы - ctx.fillStyle = '#000'; - ctx.fillRect(m.x+10, m.y+6, 4,4); - ctx.fillRect(m.x+20, m.y+6, 4,4); - // Нос - ctx.fillRect(m.x+15, m.y+12, 4,2); - // Руки - ctx.fillStyle = '#ECEFF1'; - ctx.fillRect(m.x+2, m.y+20, 6,14); - ctx.fillRect(m.x+26, m.y+20, 6,14); - // Ноги - ctx.fillRect(m.x+10, m.y+32, 6, 18); - ctx.fillRect(m.x+18, m.y+32, 6, 18); - } - } - - // boat (рисуем первой, чтобы игрок был внутри неё) - if(boat.active){ - ctx.drawImage(tex['boat'], boat.x - (TILE-boat.w)/2, boat.y - (TILE-boat.h)/2, TILE, TILE); - } - - // other players (multiplayer) - for(const [socketId, p] of otherPlayers){ - if(heroImg.complete){ - ctx.drawImage(heroImg, p.x - (TILE-player.w)/2, p.y - (TILE-player.h)/2, TILE, TILE); - } else { - ctx.fillStyle = p.color; - ctx.fillRect(p.x, p.y, 34, 34); - } - // Имя игрока (мелко над персонажем) - ctx.fillStyle = '#fff'; - ctx.font = '12px system-ui'; - ctx.textAlign = 'center'; - ctx.fillText(p.name, p.x + 17, p.y - 8); - } - - // player - if(heroImg.complete){ - ctx.drawImage(heroImg, player.x - (TILE-player.w)/2, player.y - (TILE-player.h)/2, TILE, TILE); - } else { - ctx.fillStyle='#fff'; - ctx.fillRect(player.x, player.y, player.w, player.h); - } - - // particles - for(const p of parts){ - ctx.fillStyle = p.c; - ctx.fillRect(p.x-2, p.y-2, 4, 4); - } - - // Стрелы скелета - for(const m of mobs){ - if(m.kind==='skeleton' && m.shootCooldown > 0.5){ - // Рисуем стрелу - const arrowX = m.x + m.w/2; - const arrowY = m.y + 15; - const targetX = player.x + player.w/2; - const targetY = player.y + player.h/2; - const angle = Math.atan2(targetY - arrowY, targetX - arrowX); - const speed = 400; - - // Проверяем, попала ли стрела - const dx = targetX - arrowX; - const dy = targetY - arrowY; - const dist = Math.hypot(dx, dy); - - // Рисуем стрелу - ctx.save(); - ctx.translate(arrowX, arrowY); - ctx.rotate(angle); - ctx.fillStyle = '#ECEFF1'; - ctx.fillRect(0, -1, 16, 2); - ctx.restore(); - - // Урон игроку если попали - if(dist < 150 && player.invuln <= 0){ - player.hp -= 8; - player.invuln = 0.5; - player.vx += Math.cos(angle) * 300; - player.vy -= 200; - playSound('hit1'); - } - } - } - - // build ghost - if(mode()==='build' && mouse.x!==null && !craftOpen && player.hp>0){ - const wx = mouse.x + camX; - const wy = mouse.y + camY; - const gx = Math.floor(wx/TILE); - const gy = Math.floor(wy/TILE); - ctx.strokeStyle = 'rgba(255,255,255,0.9)'; - ctx.lineWidth = 2; - ctx.strokeRect(gx*TILE, gy*TILE, TILE, TILE); - } - - ctx.restore(); - - // lighting overlay at night - if(night){ - // Рисуем полупрозрачный тёмный оверлей - ctx.save(); - ctx.fillStyle = 'rgba(0,0,0,0.50)'; - ctx.fillRect(0, 0, W, H); - ctx.restore(); - - // Освещение от факелов и костров - ctx.save(); - ctx.globalCompositeOperation = 'lighter'; - - // Функция для рисования света - function drawLight(x, y, radius, intensity) { - const gradient = ctx.createRadialGradient(x, y, 0, x, y, radius); - gradient.addColorStop(0, `rgba(255, 255, 200, ${intensity})`); - gradient.addColorStop(1, `rgba(255, 255, 200, 0)`); - ctx.fillStyle = gradient; - ctx.beginPath(); - ctx.arc(x, y, radius, 0, Math.PI * 2); - ctx.fill(); - } - - // Освещение от факелов (1/3 яркости) - for(const b of blocks){ - if(b.dead) continue; - if(b.gx < minGX || b.gx > maxGX || b.gy < minGY || b.gy > maxGY) continue; - const def = BLOCKS[b.t]; - if(def.lightRadius){ - const wx = b.gx*TILE + TILE/2 - camX; - const wy = b.gy*TILE + TILE/2 - camY; - drawLight(wx, wy, def.lightRadius, 0.33); - } - } - - ctx.restore(); - } - - // UI tick - if(Math.random()<0.25){ - hpEl.textContent = Math.max(0, Math.ceil(player.hp)); - foodEl.textContent = Math.ceil(player.hunger); - document.getElementById('o2').textContent = Math.ceil(player.o2); - sxEl.textContent = Math.floor(player.x/TILE); - syEl.textContent = Math.floor(player.y/TILE); - todEl.textContent = night ? 'Ночь' : 'День'; - worldIdEl.textContent = worldId; - if(isMultiplayer){ - document.getElementById('multiplayerStatus').style.display = 'flex'; - playerCountEl.textContent = otherPlayers.size + 1; // +1 = мы сами - } else { - document.getElementById('multiplayerStatus').style.display = 'none'; - } - } - - // Индикатор сна - if(player.sleeping){ - ctx.fillStyle = 'rgba(0,0,0,0.7)'; - ctx.fillRect(0, 0, W, H); - ctx.fillStyle = '#fff'; - ctx.font = 'bold 32px system-ui'; - ctx.textAlign = 'center'; - ctx.fillText('💤 Спим...', W/2, H/2); - ctx.font = '18px system-ui'; - ctx.fillText('Нажмите на кровать чтобы проснуться', W/2, H/2 + 40); - } - - requestAnimationFrame(loop); - } - - requestAnimationFrame(loop); -})(); diff --git a/backup/20260103_082922/index.html b/backup/20260103_082922/index.html deleted file mode 100644 index 3313464..0000000 --- a/backup/20260103_082922/index.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - -GrechkaCraft: Multiplayer - - - - - - -
- - -
-
-
❤️ 100   🍗 100
-
🫁 100
-
📍 X:0 Y:0
-
🕒 День
-
🌐 default
- -
- -
🏃
-
💾
-
🔨
-
🔄
- -
-
-
Крафт
- -
-
-
- -
-
-
Инвентарь
- -
-
-
- -
-
ВЫ ПОГИБЛИ
- -
- -
-
🎒
-
- - - -
💬
-
- -
-
←
- -
↑
-
- - - - diff --git a/backup/20260103_082922/style.css b/backup/20260103_082922/style.css deleted file mode 100644 index af8325b..0000000 --- a/backup/20260103_082922/style.css +++ /dev/null @@ -1,72 +0,0 @@ -/* Minegrechka Game Styles - v1.2 */ -html, body { margin:0; padding:0; width:100%; height:100%; overflow:hidden; background:#111; font-family: system-ui, sans-serif; user-select:none; -webkit-user-select:none; touch-action:none; } -#game { position:absolute; top:0; left:0; right:0; bottom:140px; background:#87CEEB; overflow:hidden; } -canvas { display:block; width:100%; height:100%; image-rendering:pixelated; } -#controls { position:absolute; left:0; right:0; bottom:0; height:140px; background:#222; border-top:4px solid #444; z-index:10; } - -.ui { position:absolute; inset:0; pointer-events:none; z-index:20; } -.pe { pointer-events:auto; } - -#stats { position:absolute; left:10px; top:10px; color:#fff; font-weight:800; font-size:14px; - background: rgba(0,0,0,0.55); padding:8px; border-radius:10px; text-shadow:1px 1px 0 #000; } -#stats .row{ display:flex; gap:10px; align-items:center; } - -.rbtn { position:absolute; right:10px; width:52px; height:52px; border-radius:12px; - display:flex; align-items:center; justify-content:center; border:2px solid rgba(255,255,255,0.9); - font-size:24px; cursor:pointer; pointer-events:auto; box-shadow:0 4px 0 rgba(0,0,0,0.5); } -.rbtn:active { transform: translateY(4px); box-shadow:none; } -#modeBtn { top:10px; background:#f39c12; } -#saveBtn { top:10px; right:70px !important; background:#27ae60; } -#resetBtn { top:10px; right:130px !important; background:#e74c3c; } -#craftBtn { top:74px; right:10px !important; background:#9b59b6; } -#chatToggle { top:10px; right:190px !important; background:#9b59b6; } - -#hotbar { position:absolute; left:50%; transform:translateX(-50%); bottom:10px; display:flex; gap:6px; - background: rgba(0,0,0,0.60); padding:6px; border-radius:12px; pointer-events:auto; - overflow-x: auto; overflow-y: hidden; max-width: 80%; } -.slot { width:38px; height:38px; border:2px solid rgba(255,255,255,0.22); border-radius:10px; - position:relative; overflow:hidden; cursor:pointer; background: rgba(255,255,255,0.07); - display:flex; align-items:center; justify-content:center; font-size:18px; } -.slot.sel { border-color:#f1c40f; box-shadow: 0 0 0 2px rgba(241,196,15,0.18) inset; } -.count { position:absolute; right:3px; bottom:1px; font-size:10px; color:#fff; font-weight:900; text-shadow:1px 1px 0 #000; } - -/* Craft modal */ -#craftPanel { display:none; position:absolute; left:14px; right:14px; top:14px; bottom:14px; - background: rgba(10,10,12,0.92); border:2px solid rgba(255,255,255,0.85); border-radius:14px; - pointer-events:auto; padding:12px; overflow:auto; } - -/* Inventory modal */ -#inventoryPanel { display:none; position:absolute; left:50%; top:50%; transform: translate(-50%, -50%); - width: 420px; max-width: 90%; background: rgba(10,10,12,0.92); border:2px solid rgba(255,255,255,0.85); - border-radius:14px; pointer-events:auto; padding:12px; z-index: 100; } -#inventoryPanel .top { display:flex; justify-content:space-between; align-items:center; color:#fff; margin-bottom:10px; } -#inventoryGrid { display: grid; grid-template-columns: repeat(6, 1fr); gap: 6px; margin-top: 10px; } -.inv-slot { width: 48px; height: 48px; border: 2px solid rgba(255,255,255,0.22); border-radius: 8px; - position: relative; overflow: hidden; cursor: pointer; background: rgba(255,255,255,0.07); - display: flex; align-items: center; justify-content: center; font-size: 24px; } -.inv-slot.sel { border-color: #f1c40f; box-shadow: 0 0 0 2px rgba(241,196,15,0.18) inset; } -.inv-count { position: absolute; right: 3px; bottom: 1px; font-size: 12px; color: #fff; - font-weight: 900; text-shadow: 1px 1px 0 #000; background: rgba(0,0,0,0.5); padding: 1px 3px; border-radius: 4px; } -#craftPanel .top { display:flex; justify-content:space-between; align-items:center; color:#fff; margin-bottom:10px; } -#craftPanel .close { background:#c0392b; border:none; color:#fff; font-weight:900; padding:8px 10px; border-radius:10px; cursor:pointer; } -.recipe { display:flex; align-items:center; gap:10px; padding:10px; border-radius:12px; - background: rgba(255,255,255,0.06); border:1px solid rgba(255,255,255,0.10); margin-bottom:8px; } -.ricon { width:32px; height:32px; border-radius:8px; background-size:cover; image-rendering:pixelated; } -.rinfo { flex:1; } -.rname { color:#fff; font-weight:900; font-size:14px; } -.rcost { color:#bbb; font-size:11px; line-height:1.25; } -.rcraft { background:#2ecc71; border:none; color:#fff; font-weight:900; padding:8px 10px; border-radius:10px; cursor:pointer; } -.rcraft:disabled { background:#444; color:#888; cursor:not-allowed; } - -/* Controls buttons */ -.cbtn { position:absolute; top:50%; transform:translateY(-50%); width:74px; height:74px; border-radius:14px; - background:#333; border:3px solid #555; color:#fff; font-size:32px; display:flex; align-items:center; justify-content:center; - box-shadow:0 7px 0 #111; pointer-events:auto; } -.cbtn:active { transform:translateY(-46%); box-shadow:0 3px 0 #111; background:#444; } -#left { left:18px; } -#right { left:102px; } -#jump { right:18px; background:#d35400; border-color:#e67e22; } - -#death { display:none; position:absolute; inset:0; background: rgba(60,0,0,0.88); - z-index:200; color:#fff; pointer-events:auto; align-items:center; justify-content:center; flex-direction:column; gap:12px; } -#death button { padding:12px 18px; font-size:18px; font-weight:900; border:none; border-radius:12px; cursor:pointer; } diff --git a/build3d.js b/build3d.js new file mode 100644 index 0000000..1f84169 --- /dev/null +++ b/build3d.js @@ -0,0 +1,107 @@ +#!/usr/bin/env node +/** + * Simple ES-module → IIFE bundler for GrechkaCraft + * Resolves import/export, wraps in single IIFE, no external deps. + * Usage: node build.js > game.js + */ +const fs = require('fs'); +const path = require('path'); + +const SRC = path.join(__dirname, 'srcv3'); +const ENTRY = 'main3d.js'; + +const visited = new Set(); +const chunks = []; + +const fileExports = {}; +const fileImports = {}; + +function resolveImportPath(fromPath, importerDir) { + let resolved = path.resolve(importerDir, fromPath); + if (!fs.existsSync(resolved) && fs.existsSync(resolved + '.js')) { + resolved += '.js'; + } + return resolved; +} + +function collectExports(content) { + const exports = []; + const re1 = /export\s*\{([^}]+)\}/g; + let m; + while ((m = re1.exec(content)) !== null) { + const names = m[1].split(',').map(s => { + const parts = s.trim().split(/\s+as\s+/); + return { local: parts[0].trim(), exported: (parts[1] || parts[0]).trim() }; + }); + exports.push(...names); + } + const re2 = /export\s+(?:async\s+)?(?:const|let|var|function|class)\s+(\w+)/g; + while ((m = re2.exec(content)) !== null) { + exports.push({ local: m[1], exported: m[1] }); + } + if (/export\s+default\s+/.test(content)) { + exports.push({ local: '__default__', exported: 'default' }); + } + return exports; +} + +function collectImports(content) { + const imports = []; + const re = /import\s*\{([^}]+)\}\s*from\s*['"]([^'"]+)['"]/g; + let m; + while ((m = re.exec(content)) !== null) { + const names = m[1].split(',').map(s => { + const parts = s.trim().split(/\s+as\s+/); + return { local: (parts[1] || parts[0]).trim(), imported: parts[0].trim() }; + }); + imports.push({ names, from: m[2] }); + } + const re2 = /import\s+(\w+)\s+from\s*['"]([^'"]+)['"]/g; + while ((m = re2.exec(content)) !== null) { + imports.push({ names: [{ local: m[1], imported: 'default' }], from: m[2] }); + } + return imports; +} + +function processFile(filePath) { + const relPath = path.relative(SRC, filePath); + if (visited.has(relPath)) return; + visited.add(relPath); + + let content = fs.readFileSync(filePath, 'utf8'); + const dir = path.dirname(filePath); + + fileExports[relPath] = collectExports(content); + fileImports[relPath] = collectImports(content); + + for (const imp of fileImports[relPath]) { + const depPath = resolveImportPath(imp.from, dir); + processFile(depPath); + } + + // Strip import statements + content = content.replace(/import\s*\{[^}]+\}\s*from\s*['"][^'"]+['"];?/g, ''); + content = content.replace(/import\s+\w+\s+from\s*['"][^'"]+['"];?/g, ''); + // Strip export keyword but keep declarations + content = content.replace(/export\s+default\s+/, 'const __default__ = '); + content = content.replace(/export\s+(?:async\s+)?(const|let|var|function|class)\s/g, '$1 '); + content = content.replace(/export\s*\{[^}]*\};?/g, ''); + + chunks.push({ relPath, content }); +} + +processFile(path.join(SRC, ENTRY)); + +let output = '// GrechkaCraft — auto-bundled from ES modules\n'; +output += '(function() {\n'; +output += '"use strict";\n\n'; + +for (const chunk of chunks) { + output += `// === ${chunk.relPath} ===\n`; + output += chunk.content.trim(); + output += '\n\n'; +} + +output += '})();\n'; + +process.stdout.write(output); \ No newline at end of file diff --git a/game.js b/game.js index 7f1bd07..1cda237 100644 --- a/game.js +++ b/game.js @@ -1,1560 +1,1865 @@ (() => { - // ==================== КОНФИГУРАЦИЯ СЕРВЕРА ==================== -// === Custom modal functions === -function customAlert(msg) { - const overlay = document.createElement("div"); - overlay.className = "custom-modal-overlay"; - const box = document.createElement("div"); - box.className = "custom-modal-box"; - const text = document.createElement("div"); - text.textContent = msg; - text.style.marginBottom = "16px"; - const btn = document.createElement("button"); - btn.className = "btn-ok"; - btn.textContent = "OK"; - btn.onclick = () => overlay.remove(); - box.appendChild(text); - box.appendChild(btn); - overlay.appendChild(box); - document.querySelector("#game").appendChild(overlay); -} -function customConfirm(msg, onYes) { - const overlay = document.createElement("div"); - overlay.className = "custom-modal-overlay"; - const box = document.createElement("div"); - box.className = "custom-modal-box"; - const text = document.createElement("div"); - text.textContent = msg; - text.style.marginBottom = "16px"; - const btns = document.createElement("div"); - btns.className = "modal-btns"; - const yesBtn = document.createElement("button"); - yesBtn.className = "btn-yes"; - yesBtn.textContent = "Да"; - yesBtn.onclick = () => { overlay.remove(); onYes(); }; - const noBtn = document.createElement("button"); - noBtn.className = "btn-no"; - noBtn.textContent = "Отмена"; - noBtn.onclick = () => overlay.remove(); - btns.appendChild(yesBtn); - btns.appendChild(noBtn); - box.appendChild(text); - box.appendChild(btns); - overlay.appendChild(box); - document.querySelector("#game").appendChild(overlay); -} - // Возможность переопределить сервер через query string - const urlParams = new URLSearchParams(window.location.search); - const SERVER_URL = urlParams.get('server') || 'https://apigrech.mkn8n.ru'; - const TELEGRAM_BOT_USERNAME = 'Grechkacraft_bot'; // Имя бота для share-ссылки - const TELEGRAM_APP_SHORT_NAME = 'minegrechka'; // Короткое имя Mini App - - // Защита от mixed content - if (location.protocol === 'https:' && SERVER_URL.startsWith('http://')) { - console.warn('⚠️ Mixed content warning: page is HTTPS but server URL is HTTP'); - alert('⚠️ Предупреждение: страница загружена по HTTPS, но сервер использует HTTP. Это может вызвать проблемы.'); - } - - // ==================== TELEGRAM MINI APP ==================== - const isTgWebApp = !!(window.Telegram && window.Telegram.WebApp && window.Telegram.WebApp.initData); - let tgUser = null; - let tgSaveLoaded = false; - - if (isTgWebApp) { - try { - Telegram.WebApp.ready(); - Telegram.WebApp.expand(); - tgUser = Telegram.WebApp.initDataUnsafe?.user || null; - console.log('[TG] Mini App detected, user:', tgUser?.id, tgUser?.username); - // Set player name from TG - if (tgUser && tgUser.first_name) { - const tgName = tgUser.username || tgUser.first_name; - localStorage.setItem('minegrechka_playerName', tgName); - } - } catch(e) { - console.warn('[TG] WebApp init error:', e); - } - } + // src/core/constants.js + var TILE = 40; + var SEA_GY = 14; + var BEDROCK_GY = 140; + var GEN_MARGIN_X = 40; + var GRAV = 2200; + var GRAV_WATER = 550; + var MOVE = 320; + var JUMP = 760; + var DAY_LEN = 360; + var SAVE_KEY = "minegrechka_save"; + var MOVE_SEND_INTERVAL = 0.05; + var MAX_RAINDROPS = 200; + var MAX_CHAT_MESSAGES = 50; + var VOICE_SERVER = "wss://voicegrech.mkn8n.ru"; - // ==================== WORLD ID И ИГРОКА ==================== - let worldId = null; - let playerName = localStorage.getItem('minegrechka_playerName') || null; - - // Priority: URL param > TG saved world > new world - const worldParam = urlParams.get('world'); - - // ==================== START MENU ==================== - let startMenuResolved = false; - - function generateShortWorldCode() { - // Generate readable 6-char code: consonants + digits (easy to copy/share) - const c = 'bcdfghjkmnpqrstvwxyz'; - const d = '23456789'; - let code = ''; - for (let i = 0; i < 3; i++) code += c[Math.floor(Math.random() * c.length)]; - for (let i = 0; i < 3; i++) code += d[Math.floor(Math.random() * d.length)]; - return code; - } - - function showStartMenu() { - return new Promise((resolve) => { - // If world is in URL — skip menu, auto-join - if (worldParam && worldParam.trim() !== '') { - worldId = worldParam.trim(); - console.log('[Menu] Joining world from URL:', worldId); - resolve(worldId); - return; - } - - // ===== Minecraft-style CSS ===== - const mcCSS = ` - .mc-overlay { position:fixed;top:0;left:0;width:100%;height:100%;z-index:99999; - display:flex;align-items:center;justify-content:center;font-family:'Courier New',monospace; - image-rendering:pixelated; } - .mc-bg { position:absolute;inset:0;background:#000;opacity:0.75; } - .mc-dirt { position:absolute;bottom:0;left:0;right:0;height:40%; - background:repeating-linear-gradient(0deg,#8B6914 0px,#8B6914 2px,#7A5B12 2px,#7A5B12 4px);opacity:0.3; } - .mc-box { position:relative;z-index:1;background:#C6C6C6;border:4px solid #000; - padding:0;max-width:420px;width:92%;box-shadow:4px 4px 0 #000; } - .mc-titlebar { background:#1a1a2e;padding:12px 16px;text-align:center; - border-bottom:4px solid #000; } - .mc-title { font-size:24px;font-weight:bold;color:#FFAA00;text-shadow:2px 2px 0 #000; - letter-spacing:2px; } - .mc-subtitle { font-size:13px;color:#AAA;margin-top:4px; } - .mc-body { padding:16px;background:#C6C6C6; } - .mc-btn { display:block;width:100%;padding:10px 16px;margin-bottom:8px; - font-family:'Courier New',monospace;font-size:16px;font-weight:bold; - cursor:pointer;text-align:center;border:3px solid #000; - image-rendering:pixelated;box-shadow:3px 3px 0 #000; - transition:transform 0.05s,box-shadow 0.05s; } - .mc-btn:active { transform:translate(2px,2px);box-shadow:1px 1px 0 #000; } - .mc-btn-green { background:#5A8F3C;color:#E0E0E0;border-color:#3A5F1C;text-shadow:1px 1px 0 #222; } - .mc-btn-green:hover { background:#6DAF4E; } - .mc-btn-blue { background:#3C5F9E;color:#E0E0E0;border-color:#2A4070;text-shadow:1px 1px 0 #222; } - .mc-btn-blue:hover { background:#4B73BE; } - .mc-btn-purple { background:#7B3FA0;color:#E0E0E0;border-color:#5A2C78;text-shadow:1px 1px 0 #222; } - .mc-btn-purple:hover { background:#9555BE; } - .mc-btn-orange { background:#B86E00;color:#E0E0E0;border-color:#8A5200;text-shadow:1px 1px 0 #222; } - .mc-btn-orange:hover { background:#DA8500; } - .mc-btn-red { background:#9E2B2B;color:#E0E0E0;border-color:#6E1B1B;text-shadow:1px 1px 0 #222; } - .mc-btn-red:hover { background:#BE3B3B; } - .mc-btn-gray { background:#555;color:#AAA;border-color:#333;text-shadow:1px 1px 0 #111; } - .mc-btn-gray:hover { background:#666;color:#DDD; } - .mc-btn-outline { background:transparent;color:#555;border-color:#555; - text-shadow:none;box-shadow:2px 2px 0 #333; } - .mc-btn-outline:hover { background:#DDD;color:#222; } - .mc-input { width:100%;padding:8px 12px;font-family:'Courier New',monospace; - font-size:16px;background:#FFF;border:3px solid #000;color:#222; - box-shadow:inset 2px 2px 0 #999;margin:4px 0; } - .mc-input:focus { outline:none;border-color:#FFAA00; } - .mc-label { font-size:13px;color:#444;font-weight:bold;margin:8px 0 4px; } - .mc-divider { border:none;border-top:2px solid #999;margin:12px 0; } - .mc-friend-row { display:flex;justify-content:space-between;align-items:center; - padding:6px 8px;margin-bottom:4px;background:#E8E8E8;border:2px solid #999; - box-shadow:2px 2px 0 #999; } - .mc-friend-btn { padding:4px 10px;font-family:'Courier New',monospace; - font-size:13px;font-weight:bold;cursor:pointer;border:2px solid #000; - box-shadow:1px 1px 0 #000; } - .mc-friend-btn:active { transform:translate(1px,1px);box-shadow:none; } - .mc-friend-btn-green { background:#5A8F3C;color:#E0E0E0; } - .mc-friend-btn-red { background:#9E2B2B;color:#E0E0E0; } - .mc-checkbox-row { display:flex;align-items:center;gap:8px;font-size:13px;color:#444;cursor:pointer; } - .mc-checkbox { width:18px;height:18px;accent-color:#5A8F3C; } - `; - - const styleEl = document.createElement('style'); - styleEl.textContent = mcCSS; - document.head.appendChild(styleEl); - - const overlay = document.createElement('div'); - overlay.className = 'mc-overlay'; - overlay.id = 'startMenu'; - overlay.innerHTML = '
'; - - const box = document.createElement('div'); - box.className = 'mc-box'; - - // Title bar - const titleBar = document.createElement('div'); - titleBar.className = 'mc-titlebar'; - titleBar.innerHTML = '
⛏️ GrechkaCraft
' + - '
' + (isTgWebApp ? ('Привет, ' + (tgUser?.first_name || 'Игрок') + '!') : 'Voxel-мир в браузере') + '
'; - box.appendChild(titleBar); - - const body = document.createElement('div'); - body.className = 'mc-body'; - - // === Buttons === - // New World - const btnNew = document.createElement('button'); - btnNew.className = 'mc-btn mc-btn-green'; - btnNew.textContent = '🌍 Новый мир'; - btnNew.onclick = () => { - worldId = generateShortWorldCode(); - overlay.remove(); - styleEl.remove(); - resolve(worldId); - }; - body.appendChild(btnNew); - - // Join by code - const btnJoin = document.createElement('button'); - btnJoin.className = 'mc-btn mc-btn-blue'; - btnJoin.textContent = '🔗 Вступить по коду'; - btnJoin.onclick = () => { - body.innerHTML = ''; - const lbl = document.createElement('div'); - lbl.className = 'mc-label'; - lbl.textContent = 'Код мира:'; - body.appendChild(lbl); - const codeInput = document.createElement('input'); - codeInput.className = 'mc-input'; - codeInput.type = 'text'; - codeInput.placeholder = 'bkh237'; - codeInput.maxLength = 12; - body.appendChild(codeInput); - const btnGo = document.createElement('button'); - btnGo.className = 'mc-btn mc-btn-blue'; - btnGo.textContent = 'Войти →'; - btnGo.onclick = () => { - const code = codeInput.value.trim().toLowerCase(); - if (code.length >= 3) { - worldId = code; - overlay.remove(); - styleEl.remove(); - resolve(worldId); - } - }; - body.appendChild(btnGo); - const btnBack = document.createElement('button'); - btnBack.className = 'mc-btn mc-btn-gray'; - btnBack.textContent = '← Назад'; - btnBack.onclick = () => { overlay.remove(); styleEl.remove(); showStartMenu().then(resolve); }; - body.appendChild(btnBack); - codeInput.focus(); - codeInput.addEventListener('keydown', (e) => { if (e.key === 'Enter') btnGo.click(); }); - }; - body.appendChild(btnJoin); - - // Continue saved game - const hasLocalSave = !!localStorage.getItem('minegrechka_save'); - if (isTgWebApp || hasLocalSave) { - const btnHistory = document.createElement('button'); - btnHistory.className = 'mc-btn mc-btn-purple'; - btnHistory.textContent = '💾 Продолжить игру'; - btnHistory.onclick = async () => { - if (isTgWebApp && tgUser) { - try { - const resp = await fetch(SERVER_URL + '/api/tg/save?tg_id=' + tgUser.id); - const data = await resp.json(); - if (data.ok && data.world_id) { - worldId = data.world_id; - tgSaveLoaded = true; - overlay.remove(); - styleEl.remove(); - resolve(worldId); - return; - } - } catch(e) { console.warn('[TG] Load save failed:', e); } - } - if (hasLocalSave) { - worldId = generateShortWorldCode(); - overlay.remove(); - styleEl.remove(); - resolve(worldId); - return; - } - customAlert('Сохранений не найдено'); - }; - body.appendChild(btnHistory); - } - - // === TG-only buttons === - if (isTgWebApp && window.Telegram && Telegram.WebApp.switchInlineQuery) { - // Invite friends — with margin - const btnInvite = document.createElement('button'); - btnInvite.className = 'mc-btn mc-btn-outline'; - btnInvite.style.marginTop = '16px'; - btnInvite.textContent = '📤 Пригласить друзей'; - btnInvite.onclick = () => { - const code = worldId || generateShortWorldCode(); - const url = 'https://t.me/Grechkacraft_bot/app?startapp=' + encodeURIComponent(code); - if (Telegram.WebApp && Telegram.WebApp.openTelegramLink) { - Telegram.WebApp.openTelegramLink('https://t.me/share/url?url=' + encodeURIComponent(url) + '&text=' + encodeURIComponent('🏗️ Заходи в GrechkaCraft! Мир: ' + code)); - } else { - navigator.clipboard.writeText(url).then(() => showToast('📋 Скопировано!')).catch(() => showToast(url)); - } - }; - body.appendChild(btnInvite); - - // Friends — with margin - const btnFriends = document.createElement('button'); - btnFriends.className = 'mc-btn mc-btn-orange'; - btnFriends.style.marginTop = '8px'; - btnFriends.textContent = '👥 Друзья'; - btnFriends.onclick = async () => { - try { - const resp = await fetch(SERVER_URL + '/api/tg/friends?tg_id=' + tgUser.id); - const data = await resp.json(); - body.innerHTML = ''; - - // Back button at top - const btnBackTop = document.createElement('button'); - btnBackTop.className = 'mc-btn mc-btn-gray'; - btnBackTop.textContent = '← Назад'; - btnBackTop.style.marginBottom = '12px'; - btnBackTop.onclick = () => { overlay.remove(); styleEl.remove(); showStartMenu().then(resolve); }; - body.appendChild(btnBackTop); - - // Nickname section - if (data.nickname) { - const nickDiv = document.createElement('div'); - nickDiv.className = 'mc-friend-row'; - nickDiv.innerHTML = '🔗 Твой ник: ' + data.nickname + ''; - nickDiv.style.background = '#D5E8C5'; - body.appendChild(nickDiv); - } else { - const nickLabel = document.createElement('div'); - nickLabel.className = 'mc-label'; - nickLabel.style.color = '#9E2B2B'; - nickLabel.textContent = '⚡ Задай ник, чтобы друзья могли тебя найти:'; - body.appendChild(nickLabel); - const nickRow = document.createElement('div'); - nickRow.style.display = 'flex'; - nickRow.style.gap = '4px'; - nickRow.style.marginBottom = '8px'; - const nickInput = document.createElement('input'); - nickInput.className = 'mc-input'; - nickInput.style.flex = '1'; - nickInput.type = 'text'; - nickInput.maxLength = 16; - nickInput.placeholder = 'Твой ник'; - const nickBtn = document.createElement('button'); - nickBtn.className = 'mc-btn mc-btn-green'; - nickBtn.style.width = 'auto'; - nickBtn.style.marginBottom = '0'; - nickBtn.style.padding = '8px 16px'; - nickBtn.textContent = '✓'; - nickBtn.onclick = async () => { - const n = nickInput.value.trim().toLowerCase(); - if (!n || n.length < 2) { showToast('❌ Минимум 2 символа'); return; } - const check = await fetch(SERVER_URL + '/api/nick/check?nick=' + encodeURIComponent(n)); - const cd = await check.json(); - if (!cd.available) { showToast('❌ Ник занят'); return; } - const set = await fetch(SERVER_URL + '/api/nick/set', {method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({tg_id:tgUser.id,nickname:n})}); - const sd = await set.json(); - if (sd.ok) { showToast('✅ Ник: ' + sd.nickname); btnFriends.onclick(); } else { showToast('❌ Ошибка'); } - }; - nickRow.appendChild(nickInput); - nickRow.appendChild(nickBtn); - body.appendChild(nickRow); - } - - // Friends list - if (data.friends && data.friends.length) { - const listLabel = document.createElement('div'); - listLabel.className = 'mc-label'; - listLabel.textContent = '👥 Друзья:'; - body.appendChild(listLabel); - for (const f of data.friends) { - const fDiv = document.createElement('div'); - fDiv.className = 'mc-friend-row'; - const statusDot = f.online ? '🟢' : '⚫'; - let info = statusDot + ' ' + f.nickname + ''; - if (f.online && f.world_id) info += ' — мир ' + f.world_id; - const fInfo = document.createElement('div'); - fInfo.innerHTML = info; - fDiv.appendChild(fInfo); - if (f.online && f.world_id) { - const joinBtn = document.createElement('button'); - joinBtn.className = 'mc-friend-btn mc-friend-btn-green'; - joinBtn.textContent = '🎮 Вступить'; - joinBtn.onclick = () => { worldId = f.world_id; overlay.remove(); styleEl.remove(); resolve(worldId); }; - fDiv.appendChild(joinBtn); - } - body.appendChild(fDiv); - } - } else if (data.friends && !data.friends.length) { - const noFriends = document.createElement('div'); - noFriends.className = 'mc-label'; - noFriends.style.color = '#888'; - noFriends.textContent = 'Пока нет друзей'; - body.appendChild(noFriends); - } - - // Pending requests - if (data.pending && data.pending.length) { - const pLabel = document.createElement('div'); - pLabel.className = 'mc-label'; - pLabel.style.color = '#B86E00'; - pLabel.textContent = '📨 Запросы в друзья:'; - body.appendChild(pLabel); - for (const p of data.pending) { - const pItem = document.createElement('div'); - pItem.className = 'mc-friend-row'; - const span = document.createElement('span'); - span.textContent = p.from; - pItem.appendChild(span); - const btns = document.createElement('div'); - btns.style.display = 'flex'; - btns.style.gap = '4px'; - const acceptBtn = document.createElement('button'); - acceptBtn.className = 'mc-friend-btn mc-friend-btn-green'; - acceptBtn.textContent = '✓'; - acceptBtn.onclick = async () => { - const r = await fetch(SERVER_URL + '/api/friends/accept', {method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({tg_id:tgUser.id,request_id:p.id})}); - const d = await r.json(); - if (d.ok) { showToast('✅ Друг добавлен!'); btnFriends.onclick(); } else { showToast('❌ Ошибка'); } - }; - const declineBtn = document.createElement('button'); - declineBtn.className = 'mc-friend-btn mc-friend-btn-red'; - declineBtn.textContent = '✕'; - declineBtn.onclick = async () => { - await fetch(SERVER_URL + '/api/friends/decline', {method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({tg_id:tgUser.id,request_id:p.id})}); - showToast('Отклонено'); - btnFriends.onclick(); - }; - btns.appendChild(acceptBtn); - btns.appendChild(declineBtn); - pItem.appendChild(btns); - body.appendChild(pItem); - } - } - - // Add friend - body.appendChild(document.createElement('hr')); - body.className = 'mc-label'; - const addLabel = document.createElement('div'); - addLabel.className = 'mc-label'; - addLabel.textContent = '➕ Добавить друга по нику:'; - body.appendChild(addLabel); - const addRow = document.createElement('div'); - addRow.style.display = 'flex'; - addRow.style.gap = '4px'; - const addInput = document.createElement('input'); - addInput.className = 'mc-input'; - addInput.style.flex = '1'; - addInput.type = 'text'; - addInput.maxLength = 16; - addInput.placeholder = 'Ник друга'; - const addBtn = document.createElement('button'); - addBtn.className = 'mc-btn mc-btn-blue'; - addBtn.style.width = 'auto'; - addBtn.style.marginBottom = '0'; - addBtn.style.padding = '8px 16px'; - addBtn.textContent = '+'; - addBtn.onclick = async () => { - const nick = addInput.value.trim().toLowerCase(); - if (!nick || nick.length < 2) { showToast('❌ Минимум 2 символа'); return; } - const r = await fetch(SERVER_URL + '/api/friends/request', {method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({tg_id:tgUser.id,nickname:nick})}); - const d = await r.json(); - if (d.ok) { showToast(d.message === 'Already friends' ? '✅ Уже друзья!' : '📨 Запрос отправлен!'); } - else { showToast('❌ ' + (d.error || 'Ошибка')); } - }; - addRow.appendChild(addInput); - addRow.appendChild(addBtn); - body.appendChild(addRow); - - // Privacy checkboxes - const settings = data.settings || { allow_requests: 1, notify_online: 1 }; - const settingsDiv = document.createElement('div'); - settingsDiv.style.marginTop = '12px'; - const reqLabel = document.createElement('label'); - reqLabel.className = 'mc-checkbox-row'; - const reqCb = document.createElement('input'); - reqCb.className = 'mc-checkbox'; - reqCb.type = 'checkbox'; - reqCb.checked = settings.allow_requests; - reqCb.onchange = async () => { - await fetch(SERVER_URL + '/api/friends/settings', {method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({tg_id:tgUser.id,allow_requests:reqCb.checked?1:0,notify_online:settings.notify_online})}); - }; - reqLabel.appendChild(reqCb); - reqLabel.appendChild(document.createTextNode(' Запросы в друзья')); - settingsDiv.appendChild(reqLabel); - body.appendChild(settingsDiv); - } catch(e) { showToast('❌ Ошибка загрузки друзей'); console.error(e); } - }; - body.appendChild(btnFriends); - } - - // Player name input - if (!playerName) { - const nameDivider = document.createElement('hr'); - nameDivider.className = 'mc-divider'; - body.appendChild(nameDivider); - const nameLabel = document.createElement('div'); - nameLabel.className = 'mc-label'; - nameLabel.textContent = 'Твоё имя:'; - body.appendChild(nameLabel); - const nameInput = document.createElement('input'); - nameInput.className = 'mc-input'; - nameInput.type = 'text'; - nameInput.placeholder = 'Ваше имя'; - nameInput.value = tgUser ? (tgUser.username || tgUser.first_name || '') : ''; - nameInput.maxLength = 20; - nameInput.addEventListener('input', () => { - if (nameInput.value.trim()) { - playerName = nameInput.value.trim(); - localStorage.setItem('minegrechka_playerName', playerName); - } - }); - body.appendChild(nameInput); - } - - box.appendChild(body); - overlay.appendChild(box); - document.body.appendChild(overlay); - - // Auto-load TG save - if (isTgWebApp && tgUser && !worldParam) { - fetch(SERVER_URL + '/api/tg/save?tg_id=' + tgUser.id) - .then(r => r.json()) - .then(data => { - if (data.ok && data.world_id) { - // could update UI but menu is already shown - } - }) - .catch(() => {}); - } - }); - } - - // ==================== GAME LAUNCH ==================== - // Override the old auto-join logic - let gameLaunched = false; - - async function launchGame() { - if (gameLaunched) return; - gameLaunched = true; - - if (!playerName) { - playerName = tgUser ? (tgUser.username || tgUser.first_name || 'Игрок') : 'Игрок'; - localStorage.setItem('minegrechka_playerName', playerName); - } - - // Validate TG initData if in TG context - if (isTgWebApp && Telegram.WebApp.initData) { - try { - const resp = await fetch(SERVER_URL + '/api/tg/auth', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ initData: Telegram.WebApp.initData }) - }); - const data = await resp.json(); - if (data.ok && data.tg_id) { - console.log('[TG] Authenticated, tg_id:', data.tg_id); - tgUser = tgUser || {}; - tgUser.id = data.tg_id; - } - } catch(e) { console.warn('[TG] Auth failed:', e); } - } - - // Update URL with world code - try { - const newUrl = new URL(window.location.href); - newUrl.searchParams.set('world', worldId); - if (typeof history !== 'undefined' && history.replaceState) { - history.replaceState(null, '', newUrl.toString()); - } - } catch(e) {} - - console.log('[Launch] worldId:', worldId, 'player:', playerName, 'tg:', !!tgUser); - - // The rest of the game init will pick up worldId and playerName - // Signal that menu is done - startMenuResolved = true; - window.dispatchEvent(new Event('startMenuDone')); - } - - // ==================== SOCKET.IO КЛИЕНТ ==================== - let socket = null; - let isMultiplayer = false; // Флаг для мультиплеерного режима - const otherPlayers = new Map(); // socket_id -> {x, y, color} - const serverMobs = new Map(); // id -> mob (server-spawned, client-authoritative physics) - - // Helper to get all mobs (local + server-spawned in MP) - function getAllMobs() { - return isMultiplayer ? mobs.concat(Array.from(serverMobs.values())) : mobs; - } - - // Create a client-side mob object from server spawn data with correct properties matching client constructors - function createMobFromServer(data) { - const kindProps = { - zombie: { w: 34, h: 50, hp: 4, speed: 80 + Math.random() * 40, hostile: true, fuse: 0, shootCooldown: 2 }, - creeper: { w: 34, h: 50, hp: 4, speed: 60 + Math.random() * 30, hostile: true, fuse: 3.2, shootCooldown: 2 }, - skeleton: { w: 34, h: 50, hp: 4, speed: 70 + Math.random() * 30, hostile: true, fuse: 0, shootCooldown: 0 }, - pig: { w: 34, h: 24, hp: 2, speed: 40, hostile: false, fuse: 0, shootCooldown: 2 }, - chicken: { w: 26, h: 22, hp: 1, speed: 55, hostile: false, fuse: 0, shootCooldown: 2 }, - scorpion: { w: 26, h: 26, hp: 3, speed: 90, hostile: true, fuse: 0, shootCooldown: 0, biome:'desert' }, - polar_bear:{ w: 40, h: 34, hp: 8, speed: 50, hostile: false, fuse: 0, shootCooldown: 2, biome:'tundra' }, - slime: { w: 24, h: 24, hp: 2, speed: 30, hostile: true, fuse: 0, shootCooldown: 2, biome:'swamp' }, - eagle: { w: 30, h: 22, hp: 3, speed: 120, hostile: true, fuse: 0, shootCooldown: 0, biome:'mountains' } - }; - const props = kindProps[data.kind] || kindProps['pig']; // fallback - return { - id: data.id, - kind: data.kind, - x: data.x, - y: data.y, - w: props.w, - h: props.h, - hp: data.hp || props.hp, - maxHp: data.maxHp || data.hp || props.hp, - speed: props.speed, - hostile: props.hostile, + // src/core/state.js + var state = { + // Константы (для доступа из модулей) + TILE, + SEA_GY, + BEDROCK_GY, + GEN_MARGIN_X, + GRAV, + GRAV_WATER, + MOVE, + JUMP, + DAY_LEN, + SAVE_KEY, + MOVE_SEND_INTERVAL, + MAX_RAINDROPS, + MAX_CHAT_MESSAGES, + VOICE_SERVER, + // Камера + camX: 0, + camY: 0, + W: 0, + H: 0, + dpr: 1, + // Canvas/DOM (заполняется в main.js) + gameEl: null, + canvas: null, + ctx: null, + lightC: null, + lightCtx: null, + // День/ночь + worldTime: 0, + isNightTime: false, + // Мультиплеер + isMultiplayer: false, + mySocketId: null, + socket: null, + voiceSocket: null, + voicePosT: 0, + // Сервер + SERVER_URL: "", + TELEGRAM_BOT_USERNAME: "", + TELEGRAM_APP_SHORT_NAME: "", + // Игрок + playerName: null, + worldId: null, + // Инвентарь/UI + selected: 0, + showFullInventory: false, + craftOpen: false, + inventoryOpen: false, + chatOpen: false, + minimapOpen: false, + modeIdx: 0, + currentFurnaceKey: null, + // Мир + worldSeed: Math.floor(Math.random() * 1e6), + // Погода + isRaining: false, + rainIntensity: 0, + weatherTimer: 0, + weatherChangeInterval: 60 + Math.random() * 120, + // Мобы/спавн + spawnT: 0, + // Цикл + last: 0, + prevJump: false, + // Сеть — throttle отправки позиции + lastMoveSendTime: 0, + lastSentX: 0, + lastSentY: 0, + // Mining progress + mining: { gx: null, gy: null, progress: 0, hardness: 0 }, + // Trade/Market + myTgId: null, + tradePanel: null, + tradeContent: null, + marketPanel: null, + marketContent: null, + // DOM-ссылки (заполняются в main.js) + hpEl: null, + foodEl: null, + sxEl: null, + syEl: null, + todEl: null, + worldIdEl: null, + playerCountEl: null, + deathEl: null, + hotbarEl: null, + craftPanel: null, + recipesEl: null, + inventoryPanel: null, + inventoryGrid: null, + multiplayerStatus: null, + // Игрок + player: { + x: 6 * TILE, + y: 0 * TILE, + w: 34, + h: 34, vx: 0, vy: 0, grounded: false, inWater: false, - aiT: 0, - dir: data.dir || 1, - dead: false, - fuse: props.fuse, - shootCooldown: props.shootCooldown - }; + headInWater: false, + hp: 100, + hunger: 100, + o2: 100, + invuln: 0, + fallStartY: 0, + lastStepTime: 0, + sleeping: false, + inBoat: false, + armor: 0, + equippedArmor: null + }, + // Точка спавна + spawnPoint: { x: 6 * TILE, y: 0 * TILE }, + // Инвентарь + inv: { + dirt: 6, + stone: 0, + sand: 0, + gravel: 0, + clay: 0, + wood: 0, + planks: 0, + ladder: 0, + leaves: 0, + coal: 0, + copper_ore: 0, + iron_ore: 0, + gold_ore: 0, + diamond_ore: 0, + brick: 0, + glass: 0, + tnt: 1, + campfire: 0, + torch: 0, + meat: 0, + cooked: 0, + arrow: 0, + wood_pickaxe: 0, + stone_pickaxe: 0, + iron_pickaxe: 0, + wood_sword: 0, + stone_sword: 0, + iron_sword: 0, + wood_axe: 0, + stone_axe: 0, + iron_axe: 0, + wood_shovel: 0, + stone_shovel: 0, + iron_shovel: 0, + iron_armor: 0, + bow: 0, + furnace: 0, + bed: 0, + boat: 0, + iron_ingot: 0, + gold_ingot: 0, + copper_ingot: 0, + cobblestone: 0 + }, + // Лодка + boat: { + x: 0, + y: 0, + w: 34, + h: 34, + vx: 0, + vy: 0, + active: false, + inWater: false + }, + // Ввод + inp: { up: false, down: false, left: false, right: false, jump: false, mine: false, build: false, bow: false, l: false, r: false, j: false, s: false }, + // Мышь + mouse: { x: 0, y: 0 }, + // Другие игроки (MP) + otherPlayers: /* @__PURE__ */ new Map(), + // Серверные мобы (MP) + serverMobs: /* @__PURE__ */ new Map(), + // Мобы + mobs: [], + // Снаряды + projectiles: [], + // Отслеживание изменений мира + placedBlocks: [], + removedBlocks: [], + // Серверные изменения + serverOverrides: /* @__PURE__ */ new Map(), + // Чат + chatMessages: [], + // Погода — капли + raindrops: [], + // Облака + clouds: Array.from({ length: 10 }, () => ({ + x: Math.random() * 2e3, + y: -200 - Math.random() * 260, + w: 80 + Math.random() * 120, + s: 12 + Math.random() * 20 + })), + // Частицы + parts: [], + // Активный TNT + activeTNT: /* @__PURE__ */ new Set(), + // Прочность инструментов + toolDurability: /* @__PURE__ */ new Map(), + // Последние выбранные предметы + recentItems: [], + // Активные печи + activeFurnaces: /* @__PURE__ */ new Map(), + // Сгенерированные колонны + generated: /* @__PURE__ */ new Set(), + // Изображение героя + heroImg: null, + // Сетка мира + grid: /* @__PURE__ */ new Map(), + blocks: [], + // In-memory save fallback + inMemorySave: null + }; + + // src/core/canvas.js + function initCanvas() { + const gameEl = document.getElementById("game"); + const canvas = document.getElementById("c"); + const ctx = canvas.getContext("2d"); + const lightC = document.createElement("canvas"); + const lightCtx = lightC.getContext("2d"); + const dpr = Math.max(1, window.devicePixelRatio || 1); + function resize() { + state.W = gameEl.clientWidth; + state.H = gameEl.clientHeight; + canvas.width = state.W * dpr; + canvas.height = state.H * dpr; + lightC.width = state.W * dpr; + lightC.height = state.H * dpr; + ctx.setTransform(dpr, 0, 0, dpr, 0, 0); + } + window.addEventListener("resize", resize); + resize(); + state.gameEl = gameEl; + state.canvas = canvas; + state.ctx = ctx; + state.lightC = lightC; + state.lightCtx = lightCtx; + state.dpr = dpr; } - let mySocketId = null; - - // Throttle для отправки позиции (10-20 раз в секунду) - let lastMoveSendTime = 0; - const MOVE_SEND_INTERVAL = 0.05; // 50ms = 20 раз в секунду - let lastSentX = 0, lastSentY = 0; - - function initSocket() { - try { - socket = io(SERVER_URL, { - path: '/socket.io/', - transports: ['websocket', 'polling'] - }); - - socket.on('connect', () => { - console.log(`Connected to server: ${SERVER_URL}, socket.id: ${socket.id}, worldId: ${worldId}`); - mySocketId = socket.id; - isMultiplayer = true; - - // Присоединяемся к миру - socket.emit('join_world', { world_id: worldId, player_name: playerName, tg_id: (tgUser && tgUser.id) ? tgUser.id : null }); - - // TG: отправляем tg_auth + онлайн статус для уведомления друзей - if (tgUser && tgUser.id) { - socket.emit('tg_auth', { tg_id: tgUser.id }); - try { - fetch(SERVER_URL + '/api/tg/online', {method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({tg_id:tgUser.id,world_id:worldId,player_name:playerName||'Игрок'})}); - } catch(e) { console.warn('[TG] online notify error:', e); } - } - - // Показываем в UI - worldIdEl.textContent = worldId; - // XP/Level display - const lvXpNext = xpForLevel(player.level + 1); - const lvXpCur = xpForLevel(player.level); - const xpInLevel = player.xp - lvXpCur; - const xpNeeded = lvXpNext - lvXpCur; - document.getElementById('xplevel').textContent = player.level; - document.getElementById('xpbar').textContent = xpInLevel + '/' + xpNeeded; - multiplayerStatus.style.display = 'block'; - }); - - socket.on('connect_error', (error) => { - console.error('Socket connection error:', error); - isMultiplayer = false; - }); - - socket.on('disconnect', () => { - console.log('Disconnected from server'); - isMultiplayer = false; - otherPlayers.clear(); - multiplayerStatus.style.display = 'none'; - // TG: убираем онлайн статус - if (tgUser && tgUser.id) { - try { fetch(SERVER_URL + '/api/tg/offline', {method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({tg_id:tgUser.id})}); } catch(e) {} - } - }); - - // Обработка world_state - socket.on('world_state', (data) => { - console.log('Received world_state:', data); - - // Устанавливаем seed и перегенерируем мир если он изменился - if (data.seed !== undefined && data.seed !== worldSeed) { - const oldSeed = worldSeed; - worldSeed = data.seed; - console.log('World seed set from', oldSeed, 'to', worldSeed); - // Full regeneration with correct seed - grid.clear(); - blocks.length = 0; - placedBlocks = []; - removedBlocks = []; - generated.clear(); - for (let gx = spawnPoint.gx - 25; gx <= spawnPoint.gx + 25; gx++) { - genColumn(gx); - decorations(gx); - } - console.log('World regenerated with seed:', worldSeed); + + // src/config.js + var urlParams = new URLSearchParams(window.location.search); + var SERVER_URL = urlParams.get("server") || "https://apigrech.mkn8n.ru"; + if (location.protocol === "https:" && SERVER_URL.startsWith("http://")) { + console.warn("\u26A0\uFE0F Mixed content warning: page is HTTPS but server URL is HTTP"); + alert("\u26A0\uFE0F \u041F\u0440\u0435\u0434\u0443\u043F\u0440\u0435\u0436\u0434\u0435\u043D\u0438\u0435: \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0430 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043D\u0430 \u043F\u043E HTTPS, \u043D\u043E \u0441\u0435\u0440\u0432\u0435\u0440 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442 HTTP. \u042D\u0442\u043E \u043C\u043E\u0436\u0435\u0442 \u0432\u044B\u0437\u0432\u0430\u0442\u044C \u043F\u0440\u043E\u0431\u043B\u0435\u043C\u044B."); + } + + // src/data/blocks.js + var BLOCKS = { + air: { n: "\u0412\u043E\u0437\u0434\u0443\u0445", solid: false, hardness: 0 }, + grass: { n: "\u0422\u0440\u0430\u0432\u0430", c: "#7cfc00", solid: true, hardness: 3, toolType: "shovel" }, + dirt: { n: "\u0413\u0440\u044F\u0437\u044C", c: "#8b4513", solid: true, hardness: 3, toolType: "shovel" }, + stone: { n: "\u041A\u0430\u043C\u0435\u043D\u044C", c: "#7f8c8d", solid: true, hardness: 6, toolType: "pickaxe" }, + sand: { n: "\u041F\u0435\u0441\u043E\u043A", c: "#f4d06f", solid: true, hardness: 2, toolType: "shovel" }, + gravel: { n: "\u0413\u0440\u0430\u0432\u0438\u0439", c: "#95a5a6", solid: true, hardness: 3, toolType: "shovel" }, + clay: { n: "\u0413\u043B\u0438\u043D\u0430", c: "#74b9ff", solid: true, hardness: 3, toolType: "shovel" }, + wood: { n: "\u0414\u0435\u0440\u0435\u0432\u043E", c: "#d35400", solid: true, hardness: 4, toolType: "axe" }, + planks: { n: "\u0414\u043E\u0441\u043A\u0438", c: "#e67e22", solid: true, hardness: 3, toolType: "axe" }, + ladder: { n: "\u041B\u0435\u0441\u0442\u043D\u0438\u0446\u0430", c: "#d35400", solid: false, climbable: true, hardness: 1, toolType: null }, + leaves: { n: "\u041B\u0438\u0441\u0442\u0432\u0430", c: "#2ecc71", solid: true, hardness: 1, toolType: "axe", minTool: null }, + glass: { n: "\u0421\u0442\u0435\u043A\u043B\u043E", c: "rgba(200,240,255,0.25)", solid: true, alpha: 0.55, hardness: 1, toolType: null }, + water: { n: "\u0412\u043E\u0434\u0430", c: "rgba(52,152,219,0.55)", solid: false, fluid: true, hardness: 0 }, + coal: { n: "\u0423\u0433\u043E\u043B\u044C", c: "#2c3e50", solid: true, hardness: 8, toolType: "pickaxe", minTool: "wood" }, + copper_ore: { n: "\u041C\u0435\u0434\u044C", c: "#e17055", solid: true, hardness: 10, toolType: "pickaxe", minTool: "wood" }, + iron_ore: { n: "\u0416\u0435\u043B\u0435\u0437\u043E", c: "#dcdde1", solid: true, hardness: 12, toolType: "pickaxe", minTool: "stone" }, + iron_armor: { n: "\u0416\u0435\u043B\u0435\u0437\u043D\u0430\u044F \u0431\u0440\u043E\u043D\u044F", c: "#95a5a6", solid: false, armor: 0.5, hardness: 0 }, + gold_ore: { n: "\u0417\u043E\u043B\u043E\u0442\u043E", c: "#f1c40f", solid: true, hardness: 15, toolType: "pickaxe", minTool: "stone" }, + diamond_ore: { n: "\u0410\u043B\u043C\u0430\u0437", c: "#00a8ff", solid: true, hardness: 20, toolType: "pickaxe", minTool: "iron" }, + brick: { n: "\u041A\u0438\u0440\u043F\u0438\u0447", c: "#c0392b", solid: true, hardness: 8, toolType: "pickaxe" }, + tnt: { n: "TNT", c: "#e74c3c", solid: true, explosive: true, hardness: 1, toolType: null }, + campfire: { n: "\u041A\u043E\u0441\u0442\u0451\u0440", c: "#e67e22", solid: true, lightRadius: 190, hardness: 2, toolType: null }, + torch: { n: "\u0424\u0430\u043A\u0435\u043B", c: "#f9ca24", solid: true, lightRadius: 140, hardness: 1, toolType: null }, + bedrock: { n: "\u0411\u0435\u0434\u0440\u043E\u043A", c: "#2d3436", solid: true, unbreakable: true, hardness: Infinity }, + flower: { n: "\u0426\u0432\u0435\u0442\u043E\u043A", c: "#ff4757", solid: false, decor: true, hardness: 0 }, + bed: { n: "\u041A\u0440\u043E\u0432\u0430\u0442\u044C", c: "#e91e63", solid: true, bed: true, hardness: 2, toolType: "axe" }, + boat: { n: "\u041B\u043E\u0434\u043A\u0430", c: "#8B4513", solid: false, hardness: 0 }, + furnace: { n: "\u041F\u0435\u0447\u044C", c: "#696969", solid: true, smelting: true, hardness: 8, toolType: "pickaxe", minTool: "wood" }, + cobblestone: { n: "\u0411\u0443\u043B\u044B\u0436\u043D\u0438\u043A", c: "#7f8c8d", solid: true, hardness: 6, toolType: "pickaxe" } + }; + + // src/world/world-storage.js + var grid = state.grid; + var blocks = state.blocks; + function k(gx, gy) { + return gx + "," + gy; + } + function getBlock(gx, gy) { + return grid.get(k(gx, gy)); + } + function isSolid(gx, gy) { + const b = getBlock(gx, gy); + if (!b || b.dead) return false; + const def = BLOCKS[b.t]; + return !!def.solid && !def.fluid && !def.decor; + } + function setBlock(gx, gy, t, isPlayerPlaced = false) { + const key = k(gx, gy); + if (grid.has(key)) return false; + const b = { gx, gy, t, dead: false, active: false, fuse: 0 }; + grid.set(key, b); + blocks.push(b); + if (isPlayerPlaced) { + state.placedBlocks.push({ gx, gy, t }); + } + return true; + } + function removeBlock(gx, gy) { + const key = k(gx, gy); + const b = grid.get(key); + if (!b) return null; + if (BLOCKS[b.t].unbreakable) return null; + grid.delete(key); + b.dead = true; + const wasPlayerPlaced = state.placedBlocks.some((pb) => pb.gx === gx && pb.gy === gy); + if (wasPlayerPlaced) { + state.placedBlocks = state.placedBlocks.filter((pb) => !(pb.gx === gx && pb.gy === gy)); + } else { + state.removedBlocks.push({ gx, gy }); + } + return b; + } + + // src/world/generation.js + var generated = state.generated; + function surfaceGyAt(gx) { + const n1 = Math.sin(gx * 0.025 + state.worldSeed * 1e-3) * 8; + const n2 = Math.sin(gx * 0.012 + state.worldSeed * 2e-3) * 12; + const n3 = Math.sin(gx * 6e-3 + state.worldSeed * 3e-3) * 6; + const n4 = Math.sin(gx * 0.045 + state.worldSeed * 4e-3) * 4; + const n5 = Math.cos(gx * 0.018 + state.worldSeed * 5e-3) * 5; + const h = Math.floor(SEA_GY - 8 + n1 + n2 + n3 + n4 + n5); + return h; + } + function genColumn(gx) { + if (generated.has(gx)) return; + generated.add(gx); + const sgy = surfaceGyAt(gx); + if (sgy > SEA_GY) { + for (let gy = SEA_GY; gy < sgy; gy++) { + setBlock(gx, gy, "water"); + } + setBlock(gx, sgy, "sand"); + } else { + if (sgy < SEA_GY - 10) setBlock(gx, sgy, "stone"); + else setBlock(gx, sgy, "grass"); + } + for (let gy = sgy + 1; gy <= BEDROCK_GY; gy++) { + if (gy === BEDROCK_GY) { + setBlock(gx, gy, "bedrock"); + continue; + } + let t = "stone"; + if (gy <= sgy + 3) t = "dirt"; + if (sgy > SEA_GY && gy === sgy + 1 && seededRandom(gx, gy) < 0.25) t = "clay"; + if (gy > sgy + 6 && seededRandom(gx, gy) < 0.07) t = "gravel"; + const depth = gy - sgy; + const r = seededRandom(gx, gy); + if (t === "stone") { + if (r < 0.06) t = "coal"; + else if (r < 0.1) t = "copper_ore"; + else if (r < 0.13) t = "iron_ore"; + else if (depth > 40 && r < 0.145) t = "gold_ore"; + else if (depth > 70 && r < 0.152) t = "diamond_ore"; + } + setBlock(gx, gy, t); + } + const top = getBlock(gx, sgy); + if (top && top.t === "grass") { + if (seededRandom(gx, sgy - 1) < 0.1) { + setBlock(gx, sgy - 1, "flower"); + } + if (seededRandom(gx, sgy - 2) < 0.12) { + setBlock(gx, sgy - 1, "wood"); + setBlock(gx, sgy - 2, "wood"); + setBlock(gx, sgy - 3, "leaves"); + setBlock(gx - 1, sgy - 3, "leaves"); + setBlock(gx + 1, sgy - 3, "leaves"); + } + } + const colPrefix = gx + ","; + for (const [key, ov] of state.serverOverrides) { + if (!key.startsWith(colPrefix)) continue; + if (ov.op === "remove") { + const b = grid.get(key); + if (b) { + grid.delete(key); + b.dead = true; } - - // Применяем блоки — сохраняем в serverOverrides для применения после genColumn - if (data.blocks && Array.isArray(data.blocks)) { - for (const block of data.blocks) { - const key = k(block.gx, block.gy); - serverOverrides.set(key, { op: block.op, t: block.t }); - // Также пробуем применить сразу (если колонна уже сгенерирована) - if (block.op === 'set') { - setBlock(block.gx, block.gy, block.t, false); - } else if (block.op === 'remove') { - removeBlock(block.gx, block.gy); - } - } - } - - // Устанавливаем время - if (data.time !== undefined) { - worldTime = data.time; - isNightTime = worldTime > 0.5; - } - - // Всегда считаем spawnPoint на клиенте по той же формуле что и surfaceGyAt - // Это гарантирует совпадение с terrain generation - { - const startGX = 6; - // Генерируем колонну и соседние для безопасного спавна - for (let dx = -3; dx <= 3; dx++) genColumn(startGX + dx); - const surfaceY = surfaceGyAt(startGX); - // Ищем ближайшую небудущую позицию сверху вниз от поверхности - let safeGY = surfaceY - 1; - // Проверяем что над поверхностью воздух (не в воде) - const aboveBlock = getBlock(startGX, surfaceY - 1); - if (aboveBlock && aboveBlock.t === 'water') { - // Если в воде — ищем поверхность выше уровня моря - for (let gy = SEA_GY - 1; gy >= 0; gy--) { - const b = getBlock(startGX, gy); - if (!b || b.dead || b.t === 'air' || b.t === 'water') continue; - safeGY = gy - 1; - break; - } - } - spawnPoint.x = startGX * TILE; - spawnPoint.y = safeGY * TILE; - console.log('Client-side spawn point:', spawnPoint, 'surfaceY:', surfaceY, 'safeGY:', safeGY); + } else if (ov.op === "set") { + if (!grid.has(key)) { + const gy = parseInt(key.split(",")[1]); + const nb = { gx, gy, t: ov.t, dead: false, active: false, fuse: 0 }; + grid.set(key, nb); + blocks.push(nb); } - - // Устанавливаем игрока в точку спавна - player.x = spawnPoint.x; - player.y = spawnPoint.y; - player.vx = 0; - player.vy = 0; - player.fallStartY = player.y; - console.log('Player moved to spawn point:', player.x, player.y); - - // Устанавливаем HP на 100% при каждом подключении к миру - player.hp = 100; - player.hunger = 100; - player.o2 = 100; - player.invuln = 0; - console.log('[MULTIPLAYER CONNECT] Player HP set to 100% on connect'); - - // Обновляем список игроков - if (data.players && Array.isArray(data.players)) { - otherPlayers.clear(); - for (const p of data.players) { - if (p.socket_id !== mySocketId) { - otherPlayers.set(p.socket_id, { - x: p.x, - y: p.y, - color: getRandomPlayerColor(p.socket_id), - name: p.player_name || 'Игрок' - }); - } - } - // Обновляем счётчик игроков - playerCountEl.textContent = data.players.length; - } - // Server mobs — client-authoritative: create with full client-side properties - if (data.mobs && Array.isArray(data.mobs)) { - serverMobs.clear(); - for (const m of data.mobs) { - const sm = createMobFromServer(m); - // Пересчитываем Y по клиентской surfaceGyAt - const spawnGX = Math.floor(sm.x / TILE); - genColumn(spawnGX - 1); genColumn(spawnGX); genColumn(spawnGX + 1); - const clientSurfaceY = surfaceGyAt(spawnGX); - sm.y = (clientSurfaceY - 1) * TILE; - sm.vy = 0; - serverMobs.set(m.id, sm); - } - } - }); - - // Игрок присоединился - socket.on('player_joined', (data) => { - console.log('Player joined:', data.socket_id); - if (data.socket_id !== mySocketId) { - // Генерируем безопасную позицию для нового игрока - const spawnGX = 6; - genColumn(spawnGX); - const surfaceY = surfaceGyAt(spawnGX); - const safeSpawnX = spawnGX * TILE; - const safeSpawnY = (surfaceY - 1) * TILE; - - otherPlayers.set(data.socket_id, { - x: safeSpawnX, - y: safeSpawnY, - tx: safeSpawnX, - ty: safeSpawnY, - color: getRandomPlayerColor(data.socket_id), - name: data.player_name || 'Игрок' - }); - addChatMessage('Система', `Игрок присоединился`); - // Обновляем видимость кнопки сохранения - updateSaveButtonVisibility(); - } - }); - - // Игрок переместился - socket.on('player_moved', (data) => { - if (data.socket_id !== mySocketId && otherPlayers.has(data.socket_id)) { - const p = otherPlayers.get(data.socket_id); - // Lerp: запоминаем целевую позицию, рисуем в рендере с интерполяцией - p.tx = data.x; - p.ty = data.y; - // Обновляем имя, если оно пришло - if (data.player_name) { - p.name = data.player_name; - } - } - }); - - // Игрок покинул - socket.on('player_left', (data) => { - console.log('Player left:', data.socket_id); - otherPlayers.delete(data.socket_id); - addChatMessage('Система', `Игрок покинул игру`); - // Обновляем видимость кнопки сохранения - updateSaveButtonVisibility(); - }); - - // === MOB SYNC (multiplayer) === - - socket.on('mob_spawned', (data) => { - const sm = createMobFromServer(data); - // Пересчитываем Y по клиентской surfaceGyAt — сервер может ошибаться - const spawnGX = Math.floor(sm.x / TILE); - // Убеждаемся что чанк сгенерирован (иначе getBlock=null → моб падает сквозь землю) - genColumn(spawnGX - 1); genColumn(spawnGX); genColumn(spawnGX + 1); - const clientSurfaceY = surfaceGyAt(spawnGX); - sm.y = (clientSurfaceY - 1) * TILE; // 1 блок выше поверхности (под ногами) - sm.vy = 0; - sm.grounded = false; // resolveY в mobAI поставит grounded=true - serverMobs.set(data.id, sm); - }); - - socket.on('mob_positions', (arr) => { - for (const u of arr) { - let sm = serverMobs.get(u.id); - if (!sm) { - sm = createMobFromServer({ id: u.id, kind: u.kind || 'zombie', x: u.x, y: u.y, - hp: u.hp || 1, maxHp: u.hp || 1, dir: u.dir || 1 }); - serverMobs.set(u.id, sm); - } - sm.x += (u.x - sm.x) * 0.35; - sm.y += (u.y - sm.y) * 0.35; - sm.dir = u.dir != null ? u.dir : sm.dir; - sm.hp = u.hp != null ? u.hp : sm.hp; - sm.fuse = u.fuse != null ? u.fuse : sm.fuse; - sm.grounded = !!u.grounded; - } - }); - - socket.on('mob_despawned', (data) => { serverMobs.delete(data.id); }); - - socket.on('mob_died', (data) => { - const sm = serverMobs.get(data.id); - if (sm && data.killer === mySocketId) { - // Give loot to the killer - if (sm.kind === 'chicken') playSound('hurt_chicken'); - spawnDrops(sm.x, sm.y, sm.kind); - rebuildHotbar(); - } - serverMobs.delete(data.id); - }); - - socket.on('mob_hurt_ack', (data) => { - const sm = serverMobs.get(data.id); - if (sm) sm.hp = data.hp; - }); - - socket.on('mob_explode', (data) => { - explodeAt(data.gx, data.gy); - serverMobs.delete(data.id); - }); - - socket.on('mob_shoot', (data) => { - projectiles.push({ - x: data.x, y: data.y, vx: data.vx, vy: data.vy, - dmg: data.dmg, owner: 'mob', life: data.life - }); - }); - - // Блок изменён - socket.on('block_changed', (data) => { - const key = k(data.gx, data.gy); - serverOverrides.set(key, { op: data.op, t: data.t }); - if (data.op === 'set') { - setBlock(data.gx, data.gy, data.t, false); - } else if (data.op === 'remove') { - removeBlock(data.gx, data.gy); - } - }); - - // Сообщение в чат - socket.on('chat_message', (data) => { - const senderName = data.socket_id === mySocketId ? 'Вы' : `Игрок ${data.socket_id.substring(0, 6)}`; - addChatMessage(senderName, data.message); - }); - - // Обновление времени - socket.on('time_update', (data) => { - if (data.time !== undefined) { - worldTime = data.time; - isNightTime = worldTime > 0.5; - } - }); - - } catch (e) { - console.error('Error initializing socket:', e); - isMultiplayer = false; - } - } - - // Генерация случайного цвета для игрока на основе socket_id - function getRandomPlayerColor(socketId) { - const colors = ['#e74c3c', '#3498db', '#2ecc71', '#f39c12', '#9b59b6', '#1abc9c', '#e91e63', '#00bcd4']; - let hash = 0; - for (let i = 0; i < socketId.length; i++) { - hash = ((hash << 5) - hash) + socketId.charCodeAt(i); - hash = hash & hash; - } - return colors[Math.abs(hash) % colors.length]; - } - - // Отправка позиции игрока (с throttle) - function sendPlayerPosition() { - if (!isMultiplayer || !socket || !socket.connected) return; - - const now = performance.now() / 1000; - if (now - lastMoveSendTime < MOVE_SEND_INTERVAL) return; - - // Отправляем только если позиция изменилась - const dx = Math.abs(player.x - lastSentX); - const dy = Math.abs(player.y - lastSentY); - if (dx < 1 && dy < 1) return; - - lastMoveSendTime = now; - lastSentX = player.x; - lastSentY = player.y; - - socket.emit('player_move', { x: player.x, y: player.y, player_name: playerName }); - } - - // Отправка изменения блока - function sendBlockChange(gx, gy, t, op) { - if (!isMultiplayer || !socket || !socket.connected) return; - - socket.emit('block_change', { gx, gy, t, op }); - } - - // ==================== ЧАТ ==================== - const chatMessages = []; - const MAX_CHAT_MESSAGES = 20; - - function addChatMessage(sender, message) { - const time = new Date().toLocaleTimeString('ru-RU', { hour: '2-digit', minute: '2-digit' }); - chatMessages.push({ sender, message, time }); - if (chatMessages.length > MAX_CHAT_MESSAGES) { - chatMessages.shift(); - } - renderChatMessages(); - } - - function renderChatMessages() { - const chatMessagesEl = document.getElementById('chatMessages'); - if (!chatMessagesEl) return; - - chatMessagesEl.innerHTML = chatMessages.map(m => - `
${m.time} ${m.sender}: ${m.message}
` - ).join(''); - - // Прокручиваем вниз - chatMessagesEl.scrollTop = chatMessagesEl.scrollHeight; - } - - function sendChatMessage(message) { - if (!message || message.trim() === '') return; - - if (isMultiplayer && socket && socket.connected) { - socket.emit('chat_message', { message: message.trim() }); - } else { - addChatMessage('Вы', message.trim()); - } - } - - // ==================== ПОДЕЛИТЬСЯ МИРОМ ==================== - function shareWorld() { - const shareUrl = new URL(window.location.href); - shareUrl.searchParams.set('world', worldId); - const shareUrlString = shareUrl.toString(); - - // Копируем в буфер обмена - if (navigator.clipboard && navigator.clipboard.writeText) { - navigator.clipboard.writeText(shareUrlString).then(() => { - alert('Ссылка скопирована!'); - }).catch(() => { - alert('Ссылка на мир:\n' + shareUrlString); - }); - } else { - alert('Ссылка на мир:\n' + shareUrlString); - } - } - - // ==================== ИНИЦИАЛИЗАЦИЯ UI ==================== - let chatOpen = false; - - document.getElementById('chatToggle').onclick = () => { - playSound('click'); - chatOpen = !chatOpen; - document.getElementById('chatPanel').style.display = chatOpen ? 'block' : 'none'; - if (chatOpen) { - document.getElementById('chatInput').focus(); - } - }; - - document.getElementById('chatClose').onclick = () => { - playSound('click'); - chatOpen = false; - document.getElementById('chatPanel').style.display = 'none'; - }; - - document.getElementById('chatSend').onclick = () => { - const input = document.getElementById('chatInput'); - sendChatMessage(input.value); - input.value = ''; - }; - - document.getElementById('chatInput').addEventListener('keypress', (e) => { - if (e.key === 'Enter') { - sendChatMessage(e.target.value); - e.target.value = ''; - } - }); - - // ==================== ИНИЦИАЛИЗАЦИЯ СОКЕТА ==================== - // Show start menu first, then init socket - showStartMenu().then((wid) => { - worldId = wid; - // Send tg_id if TG user - initSocket(); - launchGame(); - }); - - // ==================== ЗВУКОВОЙ ДВИЖОК ==================== - const sounds = {}; + } + } + } + function regenerateVisibleChunks() { + const gx0 = Math.floor(state.camX / TILE); + for (let gx = gx0 - GEN_MARGIN_X; gx <= gx0 + GEN_MARGIN_X; gx++) { + generated.delete(gx); + genColumn(gx); + } + } + function ensureGenAroundCamera() { + const gx0 = Math.floor(state.camX / TILE); + for (let gx = gx0 - GEN_MARGIN_X; gx <= gx0 + GEN_MARGIN_X; gx++) { + genColumn(gx); + } + } + function seededRandom(gx, gy) { + const n = Math.sin(gx * 12.9898 + gy * 78.233 + state.worldSeed * 0.1) * 43758.5453; + return n - Math.floor(n); + } + + // src/audio/sound-engine.js + var sounds = {}; function loadSound(id, src) { const audio = new Audio(); audio.src = src; audio.volume = 0.3; sounds[id] = audio; } - - // Загрузка звуков - loadSound('splash', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//splash.mp3'); - loadSound('sand1', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//sand1.mp3'); - loadSound('snow1', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//snow1.mp3'); - loadSound('stone1', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//stone1.mp3'); - loadSound('wood1', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//wood1.mp3'); - loadSound('cloth1', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//cloth1.mp3'); - loadSound('fire', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//fire.mp3'); - loadSound('hit1', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//hit1.mp3'); - loadSound('attack', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//attack.mp3'); - loadSound('hurt_chicken', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//hurt1_chicken.mp3'); - loadSound('stone_build', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//stone1%20(1).mp3'); - loadSound('wood_build', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//wood1%20(1).mp3'); - loadSound('click', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//click.mp3'); - loadSound('explode1', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//explode1.mp3'); - loadSound('glass1', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//glass1.mp3'); - loadSound('eat1', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//eat1.mp3'); - loadSound('step', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//sand2.mp3'); - + loadSound("splash", "https://supamg.mkn8n.ru/storage/v1/object/public/sounds//splash.mp3"); + loadSound("sand1", "https://supamg.mkn8n.ru/storage/v1/object/public/sounds//sand1.mp3"); + loadSound("snow1", "https://supamg.mkn8n.ru/storage/v1/object/public/sounds//snow1.mp3"); + loadSound("stone1", "https://supamg.mkn8n.ru/storage/v1/object/public/sounds//stone1.mp3"); + loadSound("wood1", "https://supamg.mkn8n.ru/storage/v1/object/public/sounds//wood1.mp3"); + loadSound("cloth1", "https://supamg.mkn8n.ru/storage/v1/object/public/sounds//cloth1.mp3"); + loadSound("fire", "https://supamg.mkn8n.ru/storage/v1/object/public/sounds//fire.mp3"); + loadSound("hit1", "https://supamg.mkn8n.ru/storage/v1/object/public/sounds//hit1.mp3"); + loadSound("attack", "https://supamg.mkn8n.ru/storage/v1/object/public/sounds//attack.mp3"); + loadSound("hurt_chicken", "https://supamg.mkn8n.ru/storage/v1/object/public/sounds//hurt1_chicken.mp3"); + loadSound("stone_build", "https://supamg.mkn8n.ru/storage/v1/object/public/sounds//stone1%20(1).mp3"); + loadSound("wood_build", "https://supamg.mkn8n.ru/storage/v1/object/public/sounds//wood1%20(1).mp3"); + loadSound("click", "https://supamg.mkn8n.ru/storage/v1/object/public/sounds//click.mp3"); + loadSound("explode1", "https://supamg.mkn8n.ru/storage/v1/object/public/sounds//explode1.mp3"); + loadSound("glass1", "https://supamg.mkn8n.ru/storage/v1/object/public/sounds//glass1.mp3"); + loadSound("eat1", "https://supamg.mkn8n.ru/storage/v1/object/public/sounds//eat1.mp3"); + loadSound("step", "https://supamg.mkn8n.ru/storage/v1/object/public/sounds//sand2.mp3"); function playSound(id) { - if(sounds[id]) { + if (sounds[id]) { sounds[id].currentTime = 0; - sounds[id].play().catch(e => console.error('Sound error:', e)); + sounds[id].play().catch((e) => console.error("Sound error:", e)); } } - - // Играем звук при прыжке - const gameEl = document.getElementById('game'); - const canvas = document.getElementById('c'); - const ctx = canvas.getContext('2d'); - - // offscreen light map (не вставляем в DOM) - const lightC = document.createElement('canvas'); - const lightCtx = lightC.getContext('2d'); - - const dpr = Math.max(1, window.devicePixelRatio || 1); - let W=0, H=0; - - const TILE = 40; - - // Мир - const SEA_GY = 14; // уровень воды (gy) - уменьшил для меньших водоёмов - const BEDROCK_GY = 140; // глубина бедрока (gy), чем больше - тем глубже - const GEN_MARGIN_X = 40; // запас генерации по X (в тайлах) — увеличен для плавной прогрузки - - const heroImg = new Image(); - heroImg.src = 'https://supamg.mkn8n.ru/storage/v1/object/public/img//grechka.png'; - - // Состояние инвентаря - let showFullInventory = false; - let recentItems = []; // Последние 5 выбранных предметов - - const BLOCKS = { - air: { n:'Воздух', solid:false }, - grass: { n:'Трава', c:'#7cfc00', solid:true }, - dirt: { n:'Грязь', c:'#8b4513', solid:true }, - stone: { n:'Камень', c:'#7f8c8d', solid:true }, - sand: { n:'Песок', c:'#f4d06f', solid:true }, - gravel: { n:'Гравий', c:'#95a5a6', solid:true }, - clay: { n:'Глина', c:'#74b9ff', solid:true }, - wood: { n:'Дерево', c:'#d35400', solid:true }, - planks: { n:'Доски', c:'#e67e22', solid:true }, - ladder: { n:'Лестница',c:'#d35400', solid:false, climbable:true }, - leaves: { n:'Листва', c:'#2ecc71', solid:true }, - glass: { n:'Стекло', c:'rgba(200,240,255,0.25)', solid:true, alpha:0.55 }, - water: { n:'Вода', c:'rgba(52,152,219,0.55)', solid:false, fluid:true }, - coal: { n:'Уголь', c:'#2c3e50', solid:true }, - copper_ore:{ n:'Медь', c:'#e17055', solid:true }, - iron_ore: { n:'Железо', c:'#dcdde1', solid:true }, - iron_armor:{ n:'Железная броня', c:'#95a5a6', solid:false, armor:0.5 }, - gold_ore: { n:'Золото', c:'#f1c40f', solid:true }, - diamond_ore:{n:'Алмаз', c:'#00a8ff', solid:true }, - brick: { n:'Кирпич', c:'#c0392b', solid:true }, - tnt: { n:'TNT', c:'#e74c3c', solid:true, explosive:true }, - campfire: { n:'Костёр', c:'#e67e22', solid:true, lightRadius:280 }, - torch: { n:'Факел', c:'#f9ca24', solid:true, lightRadius:220 }, - bedrock: { n:'Бедрок', c:'#2d3436', solid:true, unbreakable:true }, - flower: { n:'Цветок', c:'#ff4757', solid:false, decor:true }, - bed: { n:'Кровать', c:'#e91e63', solid:true, bed:true }, - boat: { n:'Лодка', c:'#8B4513', solid:false }, - furnace: { n:'Печь', c:'#696969', solid:true, smelting:true }, - // === BIOME BLOCKS === - snow: { n:'Снег', c:'#ecf0f1', solid:true }, - ice: { n:'Лёд', c:'#74b9ff', solid:true, slip:true }, - cactus: { n:'Кактус', c:'#27ae60', solid:true, hurt:true }, - mushroom: { n:'Гриб', c:'#e74c3c', solid:false, decor:true }, - moss: { n:'Мох', c:'#0a6640', solid:true }, - swamp_water:{ n:'Болотная вода', c:'rgba(100,120,40,0.6)', solid:false, fluid:true, poison:true }, - farmland: { n:'Грядка', c:'#8B6914', solid:true, farmable:true }, - dead_bush: { n:'Сухой куст', c:'#b2bec3', solid:false, decor:true }, - spruce_leaves:{ n:'Ель', c:'#0a6640', solid:true }, - // === CROP STAGES === - wheat_stage0:{ n:'Росток пшеницы', c:'#a8e6a0', solid:false, decor:true, growthStage:0, growthTime:30, growsTo:'wheat_stage1' }, - wheat_stage1:{ n:'Пшеница', c:'#7dcea0', solid:false, decor:true, growthStage:1, growthTime:30, growsTo:'wheat_stage2' }, - wheat_stage2:{ n:'Пшеница', c:'#b8d730', solid:false, decor:true, growthStage:2, growthTime:30, growsTo:'wheat_stage3' }, - wheat_stage3:{ n:'Пшеница', c:'#f1c40f', solid:false, decor:true, harvestable:true, harvestItem:'wheat', harvestQty:2 }, - carrot_stage0:{ n:'Росток моркови', c:'#a8e6a0', solid:false, decor:true, growthStage:0, growthTime:30, growsTo:'carrot_stage1' }, - carrot_stage1:{ n:'Морковь', c:'#f0c27a', solid:false, decor:true, growthStage:1, growthTime:30, growsTo:'carrot_stage2' }, - carrot_stage2:{ n:'Морковь', c:'#e8a040', solid:false, decor:true, growthStage:2, growthTime:30, growsTo:'carrot_stage3' }, - carrot_stage3:{ n:'Морковь', c:'#e67e22', solid:false, decor:true, harvestable:true, harvestItem:'carrot', harvestQty:3 }, - potato_stage0:{ n:'Росток картофеля', c:'#a8e6a0', solid:false, decor:true, growthStage:0, growthTime:30, growsTo:'potato_stage1' }, - potato_stage1:{ n:'Картофель', c:'#c8b888', solid:false, decor:true, growthStage:1, growthTime:30, growsTo:'potato_stage2' }, - potato_stage2:{ n:'Картофель', c:'#bfaa78', solid:false, decor:true, growthStage:2, growthTime:30, growsTo:'potato_stage3' }, - potato_stage3:{ n:'Картофель', c:'#dfe6e9', solid:false, decor:true, harvestable:true, harvestItem:'potato', harvestQty:2 } - }; - - const ITEMS = { - meat: { n:'Сырое мясо', icon:'🥩', food:15 }, - cooked: { n:'Жареное мясо', icon:'🍖', food:45 }, - arrow: { n:'Стрела', icon:'➡️', stack:64 }, - chicken_meat: { n:'Курица', icon:'🍗', food:12, stack:64 }, - feather: { n:'Перо', icon:'🪶', stack:64 }, - bone: { n:'Кость', icon:'🦴', stack:64 }, - gunpowder: { n:'Порох', icon:'💥', stack:64 }, - // === FARMING ITEMS === - wheat: { n:'Пшеница', icon:'🌾', stack:64 }, - bread: { n:'Хлеб', icon:'🍞', food:30 }, - carrot: { n:'Морковь', icon:'🥕', food:8, stack:64 }, - potato: { n:'Картофель', icon:'🥔', stack:64 }, - baked_potato:{ n:'Печёная картошка', icon:'🥔', food:25 }, - mushroom_stew:{ n:'Грибной суп', icon:'🍲', food:40 }, - // === MOB DROP ITEMS === - scorpion_stinger:{ n:'Жало скорпиона', icon:'🔺', stack:64 }, - polar_fur: { n:'Шкура медведя', icon:'🧥', stack:64 }, - slime_ball: { n:'Слизь', icon:'🟢', stack:64 }, - eagle_feather:{ n:'Перо орла', icon:'🪶', stack:64 }, - // === NEW ARMOR & TOOLS === - gold_armor: { n:'Золотая броня', icon:'🛡️', stack:1, armor:0.65 } - }; - - // Seed мира для детерминированной генерации - // Seed: null in MP until server sends it; SP uses random seed - let worldSeed = isMultiplayer ? null : Math.floor(Math.random() * 1000000); - - // Отслеживание изменений мира (для оптимизированного сохранения) - let placedBlocks = []; // [{gx, gy, t}] - блоки, установленные игроком - let removedBlocks = []; // [{gx, gy}] - блоки, удалённые игроком - // Серверные изменения — применяются после genColumn чтобы не перезатирались - const serverOverrides = new Map(); // key "gx,gy" => {op:'set'|'remove', t?:string} - - // Инструменты - const TOOLS = { - wood_pickaxe: { n:'Деревянная кирка', icon:'⛏️', durability: 60, miningPower: 1, craft: { wood: 3, planks: 2 }, requiredLevel: 1 }, - stone_pickaxe: { n:'Каменная кирка', icon:'⛏️', durability: 130, miningPower: 2, craft: { wood: 1, stone: 3 }, requiredLevel: 2 }, - iron_pickaxe: { n:'Железная кирка', icon:'⛏️', durability: 250, miningPower: 3, craft: { wood: 1, iron_ore: 2 }, requiredLevel: 3 }, - wood_sword: { n:'Деревянный меч', icon:'⚔️', durability: 40, damage: 5, craft: { wood: 2, planks: 1 }, requiredLevel: 1 }, - stone_sword: { n:'Каменный меч', icon:'⚔️', durability: 100, damage: 8, craft: { wood: 1, stone: 2 }, requiredLevel: 2 }, - iron_sword: { n:'Железный меч', icon:'⚔️', durability: 200, damage: 12, craft: { wood: 1, iron_ore: 1 }, requiredLevel: 3 }, - bow: { n:'Лук', icon:'🏹', durability: 150, craft: { wood: 3, planks: 2 }, requiredLevel: 4 }, - diamond_pickaxe: { n:'Алмазная кирка', icon:'⛏️', durability: 500, miningPower: 5, craft: { wood: 1, diamond_ore: 2 }, requiredLevel: 7 }, - diamond_sword: { n:'Алмазный меч', icon:'⚔️', durability: 400, damage: 18, craft: { wood: 1, diamond_ore: 2 }, requiredLevel: 7 }, - hoe: { n:'Мотыга', icon:'🔨', durability: 80, tillTo: 'farmland', craft: { wood: 2, planks: 1 }, requiredLevel: 1 } + // src/ui/chat.js + var chatMessages = []; + var MAX_CHAT_MESSAGES2 = 20; + function addChatMessage(sender, message) { + const time = (/* @__PURE__ */ new Date()).toLocaleTimeString("ru-RU", { hour: "2-digit", minute: "2-digit" }); + chatMessages.push({ sender, message, time }); + if (chatMessages.length > MAX_CHAT_MESSAGES2) { + chatMessages.shift(); + } + renderChatMessages(); + } + function renderChatMessages() { + const chatMessagesEl = document.getElementById("chatMessages"); + if (!chatMessagesEl) return; + chatMessagesEl.innerHTML = chatMessages.map( + (m) => `
${m.time} ${m.sender}: ${m.message}
` + ).join(""); + chatMessagesEl.scrollTop = chatMessagesEl.scrollHeight; + } + function sendChatMessage(message) { + if (!message || message.trim() === "") return; + if (state.isMultiplayer && state.socket && state.socket.connected) { + state.socket.emit("chat_message", { message: message.trim() }); + } else { + addChatMessage("\u0412\u044B", message.trim()); + } + } + function initChat() { + document.getElementById("chatToggle").onclick = () => { + playSound("click"); + state.chatOpen = !state.chatOpen; + document.getElementById("chatPanel").style.display = state.chatOpen ? "block" : "none"; + if (state.chatOpen) { + document.getElementById("chatInput").focus(); + } + }; + document.getElementById("chatClose").onclick = () => { + playSound("click"); + state.chatOpen = false; + document.getElementById("chatPanel").style.display = "none"; + }; + document.getElementById("chatSend").onclick = () => { + const input = document.getElementById("chatInput"); + sendChatMessage(input.value); + input.value = ""; + }; + document.getElementById("chatInput").addEventListener("keypress", (e) => { + if (e.key === "Enter") { + sendChatMessage(e.target.value); + e.target.value = ""; + } + }); + } + + // src/entities/player.js + function calculateDamage(baseDamage) { + const reduction = state.player.armor; + const actualDamage = baseDamage * (1 - reduction); + console.log("[DAMAGE] Base:", baseDamage, "- Armor:", reduction, "- Actual:", actualDamage.toFixed(1)); + return actualDamage; + } + + // src/data/items.js + var ITEMS = { + meat: { n: "\u0421\u044B\u0440\u043E\u0435 \u043C\u044F\u0441\u043E", icon: "\u{1F969}", food: 15 }, + cooked: { n: "\u0416\u0430\u0440\u0435\u043D\u043E\u0435 \u043C\u044F\u0441\u043E", icon: "\u{1F356}", food: 45 }, + arrow: { n: "\u0421\u0442\u0440\u0435\u043B\u0430", icon: "\u27A1\uFE0F", stack: 64 } }; - - // Текстуры блоков (простые) - const tex = {}; + ITEMS.iron_ingot = { n: "\u0416\u0435\u043B\u0435\u0437\u043D\u044B\u0439 \u0441\u043B\u0438\u0442\u043E\u043A", icon: "\u{1F529}" }; + ITEMS.gold_ingot = { n: "\u0417\u043E\u043B\u043E\u0442\u043E\u0439 \u0441\u043B\u0438\u0442\u043E\u043A", icon: "\u{1FA99}" }; + ITEMS.copper_ingot = { n: "\u041C\u0435\u0434\u043D\u044B\u0439 \u0441\u043B\u0438\u0442\u043E\u043A", icon: "\u{1F7E4}" }; + ITEMS.wood_axe = { n: "\u0414\u0435\u0440\u0435\u0432\u044F\u043D\u043D\u044B\u0439 \u0442\u043E\u043F\u043E\u0440", icon: "\u{1FA93}" }; + ITEMS.stone_axe = { n: "\u041A\u0430\u043C\u0435\u043D\u043D\u044B\u0439 \u0442\u043E\u043F\u043E\u0440", icon: "\u{1FA93}" }; + ITEMS.iron_axe = { n: "\u0416\u0435\u043B\u0435\u0437\u043D\u044B\u0439 \u0442\u043E\u043F\u043E\u0440", icon: "\u{1FA93}" }; + ITEMS.wood_shovel = { n: "\u0414\u0435\u0440\u0435\u0432\u044F\u043D\u043D\u0430\u044F \u043B\u043E\u043F\u0430\u0442\u0430", icon: "\u{1F531}" }; + ITEMS.stone_shovel = { n: "\u041A\u0430\u043C\u0435\u043D\u043D\u0430\u044F \u043B\u043E\u043F\u0430\u0442\u0430", icon: "\u{1F531}" }; + ITEMS.iron_shovel = { n: "\u0416\u0435\u043B\u0435\u0437\u043D\u0430\u044F \u043B\u043E\u043F\u0430\u0442\u0430", icon: "\u{1F531}" }; + + // src/data/tools.js + var TOOLS = { + wood_pickaxe: { n: "\u0414\u0435\u0440\u0435\u0432\u044F\u043D\u043D\u0430\u044F \u043A\u0438\u0440\u043A\u0430", icon: "\u26CF\uFE0F", damage: 1, durability: 60, toolType: "pickaxe", toolTier: "wood", speed: 2 }, + stone_pickaxe: { n: "\u041A\u0430\u043C\u0435\u043D\u043D\u0430\u044F \u043A\u0438\u0440\u043A\u0430", icon: "\u26CF\uFE0F", damage: 2, durability: 132, toolType: "pickaxe", toolTier: "stone", speed: 4 }, + iron_pickaxe: { n: "\u0416\u0435\u043B\u0435\u0437\u043D\u0430\u044F \u043A\u0438\u0440\u043A\u0430", icon: "\u26CF\uFE0F", damage: 3, durability: 250, toolType: "pickaxe", toolTier: "iron", speed: 6 }, + wood_sword: { n: "\u0414\u0435\u0440\u0435\u0432\u044F\u043D\u043D\u044B\u0439 \u043C\u0435\u0447", icon: "\u{1F5E1}\uFE0F", damage: 4, durability: 60 }, + stone_sword: { n: "\u041A\u0430\u043C\u0435\u043D\u043D\u044B\u0439 \u043C\u0435\u0447", icon: "\u{1F5E1}\uFE0F", damage: 5, durability: 132 }, + iron_sword: { n: "\u0416\u0435\u043B\u0435\u0437\u043D\u044B\u0439 \u043C\u0435\u0447", icon: "\u{1F5E1}\uFE0F", damage: 7, durability: 250 }, + wood_axe: { n: "\u0414\u0435\u0440\u0435\u0432\u044F\u043D\u043D\u044B\u0439 \u0442\u043E\u043F\u043E\u0440", icon: "\u{1FA93}", damage: 3, durability: 60, toolType: "axe", toolTier: "wood", speed: 2 }, + stone_axe: { n: "\u041A\u0430\u043C\u0435\u043D\u043D\u044B\u0439 \u0442\u043E\u043F\u043E\u0440", icon: "\u{1FA93}", damage: 4, durability: 132, toolType: "axe", toolTier: "stone", speed: 4 }, + iron_axe: { n: "\u0416\u0435\u043B\u0435\u0437\u043D\u044B\u0439 \u0442\u043E\u043F\u043E\u0440", icon: "\u{1FA93}", damage: 5, durability: 250, toolType: "axe", toolTier: "iron", speed: 6 }, + wood_shovel: { n: "\u0414\u0435\u0440\u0435\u0432\u044F\u043D\u043D\u0430\u044F \u043B\u043E\u043F\u0430\u0442\u0430", icon: "\u{1F531}", damage: 1, durability: 60, toolType: "shovel", toolTier: "wood", speed: 2 }, + stone_shovel: { n: "\u041A\u0430\u043C\u0435\u043D\u043D\u0430\u044F \u043B\u043E\u043F\u0430\u0442\u0430", icon: "\u{1F531}", damage: 2, durability: 132, toolType: "shovel", toolTier: "stone", speed: 4 }, + iron_shovel: { n: "\u0416\u0435\u043B\u0435\u0437\u043D\u0430\u044F \u043B\u043E\u043F\u0430\u0442\u0430", icon: "\u{1F531}", damage: 3, durability: 250, toolType: "shovel", toolTier: "iron", speed: 6 }, + bow: { n: "\u041B\u0443\u043A", icon: "\u{1F3F9}", damage: 10, durability: 200 } + }; + function addTool(type) { + const maxDur = TOOLS[type]?.durability || 60; + const key = `${type}_${Date.now()}_${Math.random().toString(36).slice(2, 6)}`; + state.toolDurability.set(key, { type, current: maxDur, max: maxDur }); + } + function useTool(type) { + for (const [tid, dur] of state.toolDurability) { + if (dur.type === type && dur.current > 0) { + dur.current--; + if (dur.current <= 0) { + state.toolDurability.delete(tid); + state.inv[type] = Math.max(0, (state.inv[type] || 0) - 1); + return true; + } + return false; + } + } + return false; + } + function getBestTool(blockType) { + const block = BLOCKS[blockType]; + if (!block || !block.toolType) return null; + const toolType = block.toolType; + for (const tier of ["iron", "stone", "wood"]) { + const toolId = `${tier}_${toolType}`; + if (TOOLS[toolId] && state.inv[toolId] > 0) return toolId; + } + return null; + } + function toolTierLessThan(toolTier, minTier) { + const tiers = { wood: 1, stone: 2, iron: 3 }; + return (tiers[toolTier] || 0) < (tiers[minTier] || 0); + } + function getMiningSpeed(blockType) { + const block = BLOCKS[blockType]; + if (!block) return 1; + const toolId = getBestTool(blockType); + if (toolId) { + const tool = TOOLS[toolId]; + if (tool.toolType === block.toolType) return tool.speed; + } + return 1; + } + + // src/render/textures.js + var tex = {}; + var itemTex = {}; + function drawArrow(ctx, color) { + ctx.fillStyle = "#8B4513"; + ctx.fillRect(8, 14, 16, 3); + ctx.fillStyle = color; + ctx.beginPath(); + ctx.moveTo(24, 15); + ctx.lineTo(18, 10); + ctx.lineTo(18, 20); + ctx.closePath(); + ctx.fill(); + ctx.fillStyle = "#e74c3c"; + ctx.beginPath(); + ctx.moveTo(8, 15); + ctx.lineTo(4, 10); + ctx.lineTo(10, 14); + ctx.closePath(); + ctx.fill(); + ctx.beginPath(); + ctx.moveTo(8, 16); + ctx.lineTo(4, 21); + ctx.lineTo(10, 17); + ctx.closePath(); + ctx.fill(); + } + function drawPickaxe(ctx, headColor, handleColor) { + ctx.fillStyle = handleColor || "#8B4513"; + ctx.save(); + ctx.translate(16, 16); + ctx.rotate(Math.PI / 4); + ctx.fillRect(-2, 0, 4, 18); + ctx.fillStyle = headColor; + ctx.fillRect(-8, -3, 16, 5); + ctx.fillRect(-8, -3, 3, 8); + ctx.fillRect(5, -3, 3, 8); + ctx.restore(); + } + function drawAxe(ctx, headColor, handleColor) { + ctx.fillStyle = handleColor || "#8B4513"; + ctx.save(); + ctx.translate(16, 16); + ctx.rotate(Math.PI / 4); + ctx.fillRect(-2, 0, 4, 18); + ctx.fillStyle = headColor; + ctx.fillRect(-2, -8, 10, 8); + ctx.fillRect(-2, -8, 4, 12); + ctx.restore(); + } + function drawShovel(ctx, headColor, handleColor) { + ctx.fillStyle = handleColor || "#8B4513"; + ctx.save(); + ctx.translate(16, 16); + ctx.rotate(Math.PI / 4); + ctx.fillRect(-2, 0, 4, 18); + ctx.fillStyle = headColor; + ctx.fillRect(-6, -8, 12, 8); + ctx.fillRect(-4, -12, 8, 4); + ctx.restore(); + } + function drawSword(ctx, bladeColor, guardColor) { + ctx.fillStyle = "#8B4513"; + ctx.fillRect(14, 18, 4, 10); + ctx.fillStyle = guardColor || "#f1c40f"; + ctx.fillRect(10, 16, 12, 3); + ctx.fillStyle = bladeColor; + ctx.beginPath(); + ctx.moveTo(16, 2); + ctx.lineTo(12, 16); + ctx.lineTo(20, 16); + ctx.closePath(); + ctx.fill(); + } + function drawBow(ctx) { + ctx.strokeStyle = "#8B4513"; + ctx.lineWidth = 3; + ctx.beginPath(); + ctx.arc(12, 16, 12, -Math.PI * 0.7, Math.PI * 0.7); + ctx.stroke(); + ctx.strokeStyle = "#ddd"; + ctx.lineWidth = 1; + ctx.beginPath(); + ctx.moveTo(12, 4); + ctx.lineTo(12, 28); + ctx.stroke(); + } + function drawIngot(ctx, color) { + ctx.fillStyle = color; + ctx.beginPath(); + ctx.moveTo(6, 12); + ctx.lineTo(26, 12); + ctx.lineTo(24, 24); + ctx.lineTo(8, 24); + ctx.closePath(); + ctx.fill(); + ctx.fillStyle = "rgba(255,255,255,0.3)"; + ctx.fillRect(8, 8, 16, 4); + } + function drawMeat(ctx, cooked) { + ctx.fillStyle = cooked ? "#8B4513" : "#e74c3c"; + ctx.beginPath(); + ctx.ellipse(16, 18, 10, 8, 0, 0, Math.PI * 2); + ctx.fill(); + ctx.fillStyle = "#f5f5dc"; + ctx.fillRect(8, 6, 3, 12); + ctx.fillRect(14, 4, 3, 8); + } + function makeItemTex(id) { + const c = document.createElement("canvas"); + c.width = 32; + c.height = 32; + const g = c.getContext("2d"); + const tierColors = { + wood: { head: "#a0522d", blade: "#a0522d" }, + stone: { head: "#7f8c8d", blade: "#95a5a6" }, + iron: { head: "#bdc3c7", blade: "#ecf0f1" } + }; + switch (id) { + case "arrow": + drawArrow(g, "#7f8c8d"); + break; + case "bow": + drawBow(g); + break; + case "wood_pickaxe": + drawPickaxe(g, tierColors.wood.head, tierColors.wood.blade); + break; + case "stone_pickaxe": + drawPickaxe(g, tierColors.stone.head); + break; + case "iron_pickaxe": + drawPickaxe(g, tierColors.iron.head); + break; + case "wood_axe": + drawAxe(g, tierColors.wood.head); + break; + case "stone_axe": + drawAxe(g, tierColors.stone.head); + break; + case "iron_axe": + drawAxe(g, tierColors.iron.head); + break; + case "wood_shovel": + drawShovel(g, tierColors.wood.head); + break; + case "stone_shovel": + drawShovel(g, tierColors.stone.head); + break; + case "iron_shovel": + drawShovel(g, tierColors.iron.head); + break; + case "wood_sword": + drawSword(g, tierColors.wood.blade, "#a0522d"); + break; + case "stone_sword": + drawSword(g, tierColors.stone.blade, "#7f8c8d"); + break; + case "iron_sword": + drawSword(g, tierColors.iron.blade, "#bdc3c7"); + break; + case "iron_ingot": + drawIngot(g, "#bdc3c7"); + break; + case "gold_ingot": + drawIngot(g, "#f1c40f"); + break; + case "copper_ingot": + drawIngot(g, "#e67e22"); + break; + case "meat": + drawMeat(g, false); + break; + case "cooked": + drawMeat(g, true); + break; + default: + g.fillStyle = "#7f8c8d"; + g.fillRect(4, 4, 24, 24); + g.fillStyle = "rgba(255,255,255,0.2)"; + g.fillRect(4, 4, 24, 4); + } + return c; + } function makeTex(type) { const t = BLOCKS[type]; - const c = document.createElement('canvas'); - c.width = 32; c.height = 32; - const g = c.getContext('2d'); - - if (type === 'tnt') { - g.fillStyle='#c0392b'; g.fillRect(0,0,32,32); - g.fillStyle='#fff'; g.fillRect(0,12,32,8); - g.fillStyle='#000'; g.font='bold 10px sans-serif'; g.fillText('TNT',6,20); - return c; - } - if (type === 'campfire') { - g.fillStyle='#5d4037'; g.fillRect(4,26,24,6); - g.fillStyle='#3e2723'; g.fillRect(7,23,18,4); - return c; - } - if (type === 'torch') { - g.fillStyle='#6d4c41'; g.fillRect(14,10,4,18); - g.fillStyle='#f39c12'; g.fillRect(12,6,8,8); - return c; - } - if (type === 'glass') { - g.fillStyle='rgba(200,240,255,0.25)'; g.fillRect(0,0,32,32); - g.strokeStyle='rgba(255,255,255,0.65)'; g.strokeRect(2,2,28,28); - g.beginPath(); g.moveTo(5,27); g.lineTo(27,5); g.stroke(); - return c; - } - if (type === 'water') { - g.fillStyle = t.c; g.fillRect(0,0,32,32); - g.fillStyle = 'rgba(255,255,255,0.08)'; - g.fillRect(0,6,32,2); - return c; - } - if (type === 'bed') { - // Основание кровати - g.fillStyle = '#e91e63'; + const c = document.createElement("canvas"); + c.width = 32; + c.height = 32; + const g = c.getContext("2d"); + if (type === "tnt") { + g.fillStyle = "#c0392b"; g.fillRect(0, 0, 32, 32); - // Подушка - g.fillStyle = '#f8bbd0'; + g.fillStyle = "#fff"; + g.fillRect(0, 12, 32, 8); + g.fillStyle = "#000"; + g.font = "bold 10px sans-serif"; + g.fillText("TNT", 6, 20); + return c; + } + if (type === "campfire") { + g.fillStyle = "#5d4037"; + g.fillRect(4, 26, 24, 6); + g.fillStyle = "#3e2723"; + g.fillRect(7, 23, 18, 4); + return c; + } + if (type === "torch") { + g.fillStyle = "#6d4c41"; + g.fillRect(14, 10, 4, 18); + g.fillStyle = "#f39c12"; + g.fillRect(12, 6, 8, 8); + return c; + } + if (type === "glass") { + g.fillStyle = "rgba(200,240,255,0.25)"; + g.fillRect(0, 0, 32, 32); + g.strokeStyle = "rgba(255,255,255,0.65)"; + g.strokeRect(2, 2, 28, 28); + g.beginPath(); + g.moveTo(5, 27); + g.lineTo(27, 5); + g.stroke(); + return c; + } + if (type === "water") { + g.fillStyle = t.c; + g.fillRect(0, 0, 32, 32); + g.fillStyle = "rgba(255,255,255,0.08)"; + g.fillRect(0, 6, 32, 2); + return c; + } + if (type === "bed") { + g.fillStyle = "#e91e63"; + g.fillRect(0, 0, 32, 32); + g.fillStyle = "#f8bbd0"; g.fillRect(2, 2, 14, 14); - // Одеяло - g.fillStyle = '#c2185b'; + g.fillStyle = "#c2185b"; g.fillRect(16, 4, 14, 24); - // Детали одеяла - g.fillStyle = '#e91e63'; + g.fillStyle = "#e91e63"; g.fillRect(18, 6, 10, 20); return c; } - if (type === 'flower') { - g.fillStyle='#2ecc71'; g.fillRect(14,14,4,18); - g.fillStyle=t.c; g.beginPath(); g.arc(16,12,6,0,6.28); g.fill(); + if (type === "flower") { + g.fillStyle = "#2ecc71"; + g.fillRect(14, 14, 4, 18); + g.fillStyle = t.c; + g.beginPath(); + g.arc(16, 12, 6, 0, 6.28); + g.fill(); return c; } - if (type === 'boat') { - // Корпус лодки - g.fillStyle = '#8B4513'; + if (type === "boat") { + g.fillStyle = "#8B4513"; g.fillRect(2, 12, 28, 8); - // Борта - g.fillStyle = '#A0522D'; + g.fillStyle = "#A0522D"; g.fillRect(0, 10, 32, 12); - // Внутренность - g.fillStyle = '#DEB887'; + g.fillStyle = "#DEB887"; g.fillRect(4, 14, 24, 4); - // Дно - g.fillStyle = '#654321'; + g.fillStyle = "#654321"; g.fillRect(2, 20, 28, 4); return c; } - if (type === 'ladder') { - // Боковые стойки лестницы - g.fillStyle = '#8B4513'; + if (type === "ladder") { + g.fillStyle = "#8B4513"; g.fillRect(4, 0, 4, 32); g.fillRect(24, 0, 4, 32); - // Ступени - g.fillStyle = '#A0522D'; + g.fillStyle = "#A0522D"; g.fillRect(4, 4, 24, 3); g.fillRect(4, 12, 24, 3); g.fillRect(4, 20, 24, 3); g.fillRect(4, 28, 24, 3); return c; } - // === BIOME BLOCK TEXTURES === - if (type === 'snow') { - g.fillStyle = '#ecf0f1'; - g.fillRect(0, 0, 32, 32); - g.fillStyle = '#dfe6e9'; - for (let i = 0; i < 4; i++) g.fillRect((Math.random()*26)|0, (Math.random()*26)|0, 5, 3); - return c; - } - if (type === 'ice') { - g.fillStyle = '#74b9ff'; - g.fillRect(0, 0, 32, 32); - g.strokeStyle = 'rgba(255,255,255,0.4)'; - g.beginPath(); g.moveTo(4,10); g.lineTo(20,16); g.lineTo(10,28); g.stroke(); - g.beginPath(); g.moveTo(18,4); g.lineTo(28,12); g.stroke(); - return c; - } - if (type === 'cactus') { - g.fillStyle = '#27ae60'; - g.fillRect(6, 2, 20, 28); - g.fillStyle = '#2ecc71'; - g.fillRect(2, 8, 6, 4); - g.fillRect(24, 14, 6, 4); - g.fillStyle = '#1e8449'; - g.fillRect(12, 0, 2, 30); - g.fillRect(18, 0, 2, 30); - return c; - } - if (type === 'mushroom') { - g.fillStyle = '#f5e6cc'; g.fillRect(14, 20, 4, 12); - g.fillStyle = '#e74c3c'; g.beginPath(); g.arc(16, 14, 10, Math.PI, 0); g.fill(); - g.fillStyle = '#fff'; g.fillRect(10, 10, 3, 3); g.fillRect(17, 8, 4, 3); - return c; - } - if (type === 'moss') { - g.fillStyle = '#0a6640'; - g.fillRect(0, 0, 32, 32); - g.fillStyle = '#1e8449'; - for (let i = 0; i < 6; i++) g.fillRect((Math.random()*26)|0, (Math.random()*26)|0, 4, 3); - return c; - } - if (type === 'swamp_water') { - g.fillStyle = 'rgba(100,120,40,0.6)'; - g.fillRect(0, 0, 32, 32); - g.fillStyle = 'rgba(80,100,20,0.3)'; - g.fillRect(0, 10, 32, 2); - g.fillRect(0, 22, 32, 2); - return c; - } - if (type === 'farmland') { - g.fillStyle = '#8B6914'; - g.fillRect(0, 0, 32, 32); - g.fillStyle = '#7a5c10'; - for (let i = 0; i < 4; i++) g.fillRect(0, 6+i*8, 32, 2); - g.fillStyle = '#6B4E0A'; - g.fillRect(8, 2, 2, 28); - g.fillRect(18, 2, 2, 28); - return c; - } - if (type === 'dead_bush') { - g.fillStyle = '#b2bec3'; - g.fillRect(12, 16, 2, 16); - g.fillRect(8, 14, 8, 2); - g.fillRect(16, 12, 8, 2); - g.fillRect(6, 18, 4, 2); - return c; - } - if (type === 'spruce_leaves') { - g.fillStyle = '#0a6640'; - g.fillRect(0, 0, 32, 32); - g.fillStyle = '#0d7a4d'; - for (let i = 0; i < 5; i++) g.fillRect((Math.random()*24)|0, (Math.random()*24)|0, 6, 4); - return c; - } - // CROP STAGES - if (type.startsWith('wheat_stage') || type.startsWith('carrot_stage') || type.startsWith('potato_stage')) { - const st = parseInt(type.charAt(type.length-1)); - const colors = type.startsWith('wheat') ? ['#a8e6a0','#7dcea0','#b8d730','#f1c40f'] : - type.startsWith('carrot') ? ['#a8e6a0','#f0c27a','#e8a040','#e67e22'] : - ['#a8e6a0','#c8b888','#bfaa78','#dfe6e9']; - g.fillStyle = '#5d4037'; - g.fillRect(15, 18, 2, 14); - if (st >= 1) { - g.fillStyle = colors[st]; - g.fillRect(10, 8 + (3-st)*3, 12, 10); - } else { - g.fillStyle = '#a8e6a0'; - g.fillRect(14, 22, 4, 4); - } - return c; - } - - g.fillStyle = t.c || '#000'; - g.fillRect(0,0,32,32); - - g.fillStyle = 'rgba(0,0,0,0.10)'; - for (let i=0;i<6;i++) g.fillRect((Math.random()*28)|0, (Math.random()*28)|0, 4,4); - - if (type.endsWith('_ore') || type==='coal') { - g.fillStyle = 'rgba(0,0,0,0.35)'; - for (let i=0;i<4;i++) g.fillRect((Math.random()*24)|0, (Math.random()*24)|0, 6,6); + g.fillStyle = t.c || "#000"; + g.fillRect(0, 0, 32, 32); + g.fillStyle = "rgba(0,0,0,0.10)"; + for (let i = 0; i < 6; i++) g.fillRect(Math.random() * 28 | 0, Math.random() * 28 | 0, 4, 4); + if (type.endsWith("_ore") || type === "coal") { + g.fillStyle = "rgba(0,0,0,0.35)"; + for (let i = 0; i < 4; i++) g.fillRect(Math.random() * 24 | 0, Math.random() * 24 | 0, 6, 6); } return c; } - Object.keys(BLOCKS).forEach(k => tex[k] = makeTex(k)); - - // Мир-хранилище - const grid = new Map(); // key "gx,gy" => {gx,gy,t, ...} - const blocks = []; // для рендера/перебора видимых - function k(gx,gy){ return gx+','+gy; } - function getBlock(gx,gy){ return grid.get(k(gx,gy)); } - function hasBlock(gx,gy){ return grid.has(k(gx,gy)); } - function isSolid(gx,gy){ - const b = getBlock(gx,gy); - if(!b || b.dead) return false; - const def = BLOCKS[b.t]; - return !!def.solid && !def.fluid && !def.decor; + function initTextures() { + Object.keys(BLOCKS).forEach((k2) => tex[k2] = makeTex(k2)); + const itemIds = [ + "arrow", + "bow", + "wood_pickaxe", + "stone_pickaxe", + "iron_pickaxe", + "wood_axe", + "stone_axe", + "iron_axe", + "wood_shovel", + "stone_shovel", + "iron_shovel", + "wood_sword", + "stone_sword", + "iron_sword", + "iron_ingot", + "gold_ingot", + "copper_ingot", + "meat", + "cooked" + ]; + itemIds.forEach((id) => { + itemTex[id] = makeItemTex(id); + }); } - function setBlock(gx,gy,t, isPlayerPlaced = false){ - const key = k(gx,gy); - if(grid.has(key)) return false; - const b = { gx, gy, t, dead:false, active:false, fuse:0 }; - grid.set(key, b); - blocks.push(b); - - // Отслеживаем блоки, установленные игроком - if(isPlayerPlaced){ - placedBlocks.push({gx, gy, t}); + + // src/ui/hotbar.js + function rebuildHotbar() { + const hotbarEl = state.hotbarEl; + const inv = state.inv; + const selected = state.selected; + const recentItems = state.recentItems; + const toolDurability = state.toolDurability; + hotbarEl.innerHTML = ""; + const items = recentItems.filter((id) => inv[id] > 0).slice(0, 5); + for (const id of items) { + const s = document.createElement("div"); + s.className = "slot" + (id === selected ? " sel" : ""); + if (BLOCKS[id] && tex[id]) { + s.style.backgroundImage = `url(${tex[id].toDataURL()})`; + s.style.backgroundSize = "cover"; + } else if (itemTex[id]) { + s.style.backgroundImage = `url(${itemTex[id].toDataURL()})`; + s.style.backgroundSize = "cover"; + } else if (ITEMS[id]) { + s.textContent = ITEMS[id].icon || "\u{1F4E6}"; + } else if (TOOLS[id]) { + s.textContent = TOOLS[id].icon || "\u{1F527}"; + } else if (id === "iron_armor") { + s.textContent = "\u{1F6E1}\uFE0F"; + s.style.background = "linear-gradient(135deg, #95a5a6 0%, #7f8c8d 100%)"; + } + const c = document.createElement("div"); + c.className = "count"; + c.textContent = inv[id]; + s.appendChild(c); + s.onclick = () => { + playSound("click"); + state.selected = id; + state.recentItems = state.recentItems.filter((item) => item !== id); + state.recentItems.unshift(id); + state.recentItems = state.recentItems.slice(0, 5); + rebuildHotbar(); + }; + if (id === "iron_armor" && state.player.equippedArmor === "iron_armor") { + const equipped = document.createElement("div"); + equipped.className = "equipped-indicator"; + equipped.textContent = "\u2713"; + s.appendChild(equipped); + } + if (TOOLS[id] && inv[id] > 0) { + let curDur = 0, maxDur = TOOLS[id].durability; + for (const [tid, dur] of toolDurability) { + if (dur.type === id) { + curDur = dur.current; + maxDur = dur.max; + break; + } + } + if (maxDur > 0) { + const bar = document.createElement("div"); + bar.style.cssText = `position:absolute;bottom:0;left:0;right:0;height:3px;background:#333;border-radius:0 0 6px 6px;overflow:hidden;`; + const fill = document.createElement("div"); + const pct = curDur / maxDur; + const color = pct > 0.5 ? "#2ecc71" : pct > 0.25 ? "#f39c12" : "#e74c3c"; + fill.style.cssText = `width:${pct * 100}%;height:100%;background:${color};`; + bar.appendChild(fill); + s.appendChild(bar); + } + } + hotbarEl.appendChild(s); } - - return true; } - function removeBlock(gx,gy){ - const key = k(gx,gy); - const b = grid.get(key); - if(!b) return null; - if(BLOCKS[b.t].unbreakable) return null; - grid.delete(key); - b.dead = true; - - // Отслеживаем удалённые блоки - const wasPlayerPlaced = placedBlocks.some(pb => pb.gx === gx && pb.gy === gy); - if(wasPlayerPlaced){ - // Удаляем из placedBlocks - placedBlocks = placedBlocks.filter(pb => !(pb.gx === gx && pb.gy === gy)); + + // src/render/particles.js + var parts = []; + function spawnExplosion(x, y, power) { + const n = Math.floor(16 + power * 10); + for (let i = 0; i < n; i++) { + parts.push({ + x, + y, + vx: (Math.random() - 0.5) * (300 + power * 200), + vy: (Math.random() - 0.5) * (300 + power * 200), + t: 0.7, + c: "#ffa500" + }); + } + } + + // src/world/tnt.js + function activateTNT(b, fuse = 3.2) { + if (b.dead) return; + if (b.active) return; + b.active = true; + b.fuse = fuse; + state.activeTNT.add(k(b.gx, b.gy)); + } + function explodeAt(gx, gy) { + const center = getBlock(gx, gy); + if (!center) return; + let bonus = 0; + for (let x = gx - 2; x <= gx + 2; x++) { + for (let y = gy - 2; y <= gy + 2; y++) { + const b = getBlock(x, y); + if (b && !b.dead && b.t === "tnt" && !(x === gx && y === gy)) { + bonus += 0.8; + activateTNT(b, 0.12); + } + } + } + const power = 1 + bonus; + const radius = 3.2 + bonus * 0.7; + const dmgR = 150 + bonus * 60; + removeBlock(gx, gy); + state.activeTNT.delete(k(gx, gy)); + playSound("explode1"); + spawnExplosion(gx * TILE + TILE / 2, gy * TILE + TILE / 2, power); + for (let x = Math.floor(gx - radius); x <= Math.ceil(gx + radius); x++) { + for (let y = Math.floor(gy - radius); y <= Math.ceil(gy + radius); y++) { + const d = Math.hypot(x - gx, y - gy); + if (d > radius) continue; + const b = getBlock(x, y); + if (!b || b.dead) continue; + if (BLOCKS[b.t].fluid) continue; + if (BLOCKS[b.t].unbreakable) continue; + if (b.t === "tnt") { + activateTNT(b, 0.12); + continue; + } + removeBlock(x, y); + if (state.inv[b.t] !== void 0 && Math.random() < 0.2) state.inv[b.t]++; + } + } + rebuildHotbar(); + const hurt = (e) => { + const dx = e.x + e.w / 2 - (gx * TILE + TILE / 2); + const dy = e.y + e.h / 2 - (gy * TILE + TILE / 2); + const dist = Math.hypot(dx, dy); + if (dist < dmgR) { + const dmg = (dmgR - dist) * 0.06 * power; + if (e === state.player) { + const actualDamage = calculateDamage(dmg); + state.player.hp -= actualDamage; + } else { + e.hp -= dmg; + } + e.vx += (dx / dist || 0) * 600; + e.vy -= 320; + } + }; + hurt(state.player); + state.mobs.forEach(hurt); + } + + // src/game/save.js + var SAVE_KEY2 = state.SAVE_KEY; + function initDB() { + return new Promise((resolve) => { + console.log("\u0418\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u043C localStorage \u0434\u043B\u044F \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0438\u0439 (sandbox \u0440\u0435\u0436\u0438\u043C)"); + resolve(null); + }); + } + function saveGame() { + const saveData = { + version: 2, + worldSeed: state.worldSeed, + player: { + x: state.player.x, + y: state.player.y, + hp: state.player.hp, + hunger: state.player.hunger, + o2: state.player.o2 + }, + inventory: state.inv, + time: state.worldTime, + isNight: state.isNightTime, + // Сохраняем только изменения + placedBlocks: state.placedBlocks.slice(), + removedBlocks: state.removedBlocks.slice() + }; + const saveSize = JSON.stringify(saveData).length; + console.log("\u0421\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0438\u0435: player HP:", state.player.hp, "hunger:", state.player.hunger, "o2:", state.player.o2); + try { + localStorage.setItem(SAVE_KEY2, JSON.stringify(saveData)); + console.log(`\u0418\u0433\u0440\u0430 \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0430 \u0432 localStorage (\u0440\u0430\u0437\u043C\u0435\u0440: ${saveSize} \u0431\u0430\u0439\u0442)`); + } catch (e) { + console.warn("\u041E\u0448\u0438\u0431\u043A\u0430 \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0438\u044F \u0432 localStorage, \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u043C \u0442\u043E\u043B\u044C\u043A\u043E in-memory:", e); + state.inMemorySave = saveData; + console.log(`\u0418\u0433\u0440\u0430 \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0430 \u0432 \u043F\u0430\u043C\u044F\u0442\u0438 (\u0440\u0430\u0437\u043C\u0435\u0440: ${saveSize} \u0431\u0430\u0439\u0442)`); + } + } + function loadGame() { + return new Promise((resolve, reject) => { + try { + const localSave = localStorage.getItem(SAVE_KEY2); + if (localSave) { + const parsed = JSON.parse(localSave); + console.log("\u0417\u0430\u0433\u0440\u0443\u0436\u0435\u043D\u043E \u0438\u0437 localStorage, player HP:", parsed.player?.hp); + resolve(parsed); + return; + } + } catch (e) { + console.warn("\u041E\u0448\u0438\u0431\u043A\u0430 \u0434\u043E\u0441\u0442\u0443\u043F\u0430 \u043A localStorage:", e); + } + if (state.inMemorySave) { + console.log("\u0417\u0430\u0433\u0440\u0443\u0436\u0435\u043D\u043E \u0438\u0437 in-memory \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0438\u044F, player HP:", state.inMemorySave.player?.hp); + resolve(state.inMemorySave); + return; + } + console.log("\u0421\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0438\u0435 \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E"); + resolve(null); + }); + } + function migrateV1toV2(saveData) { + console.log("\u041C\u0438\u0433\u0440\u0430\u0446\u0438\u044F \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0438\u044F \u0441 \u0432\u0435\u0440\u0441\u0438\u0438 1 \u043D\u0430 \u0432\u0435\u0440\u0441\u0438\u044E 2..."); + saveData.worldSeed = state.worldSeed; + saveData.placedBlocks = []; + saveData.removedBlocks = []; + delete saveData.generatedBlocks; + saveData.version = 2; + console.log("\u041C\u0438\u0433\u0440\u0430\u0446\u0438\u044F \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043D\u0430"); + } + async function applySave(saveData) { + if (!saveData) return; + console.log("=== applySave START ==="); + console.log("player HP before applySave:", state.player.hp); + console.log("saveData.player.hp:", saveData.player?.hp); + if (saveData.version === 1) { + migrateV1toV2(saveData); + } + if (saveData.worldSeed !== void 0) { + state.worldSeed = saveData.worldSeed; + } + if (saveData.player) { + state.player.x = saveData.player.x; + state.player.y = saveData.player.y; + state.player.hunger = saveData.player.hunger; + state.player.o2 = saveData.player.o2; + state.spawnPoint.x = state.player.x; + state.spawnPoint.y = state.player.y; + const savedHP = saveData.player.hp; + console.log("Saved HP from file:", savedHP); + if (savedHP <= 0) { + console.log("WARNING: Saved HP is <= 0, setting to 100!"); + state.player.hp = 100; + } else { + state.player.hp = savedHP; + } + console.log("player HP after restore:", state.player.hp); + console.log("spawnPoint \u043E\u0431\u043D\u043E\u0432\u043B\u0451\u043D \u0438\u0437 \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0438\u044F: x=", state.spawnPoint.x, "y=", state.spawnPoint.y); } else { - // Это природный блок - добавляем в removedBlocks - removedBlocks.push({gx, gy}); + console.log("No player data in save, setting default HP: 100"); + state.player.hp = 100; } - - return b; + console.log("=== applySave END ==="); + if (saveData.inventory) { + for (const key in saveData.inventory) { + state.inv[key] = saveData.inventory[key]; + } + } + if (saveData.time !== void 0) { + state.worldTime = saveData.time; + } + if (saveData.isNight !== void 0) { + state.isNightTime = saveData.isNight; + } + regenerateVisibleChunks(); + if (saveData.version === 2) { + for (const block of saveData.placedBlocks) { + setBlock(block.gx, block.gy, block.t, true); + } + for (const block of saveData.removedBlocks) { + removeBlock(block.gx, block.gy); + } + state.placedBlocks = saveData.placedBlocks || []; + state.removedBlocks = saveData.removedBlocks || []; + } + rebuildHotbar(); + console.log("\u0418\u0433\u0440\u0430 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043D\u0430"); } - - // Физика жидкости - const waterUpdateQueue = new Set(); - let waterUpdateTimer = 0; - const WATER_UPDATE_INTERVAL = 0.05; // Обновляем воду каждые 0.05 секунды - - function updateWaterPhysics(dt){ + + // src/ui/save-controls.js + var dropdownOpen = false; + function initSaveControls() { + const menuBtn = document.getElementById("menuBtn"); + const menuDropdown = document.getElementById("menuDropdown"); + const saveItem = document.getElementById("saveItem"); + const resetItem = document.getElementById("resetItem"); + const marketItem = document.getElementById("marketItem"); + menuBtn.onclick = null; + menuBtn.addEventListener("click", (e) => { + e.stopPropagation(); + dropdownOpen = !dropdownOpen; + menuDropdown.classList.toggle("open", dropdownOpen); + }); + document.addEventListener("click", () => { + if (dropdownOpen) { + dropdownOpen = false; + menuDropdown.classList.remove("open"); + } + }); + menuDropdown.addEventListener("click", (e) => { + e.stopPropagation(); + }); + saveItem.addEventListener("click", () => { + playSound("click"); + saveGame(); + dropdownOpen = false; + menuDropdown.classList.remove("open"); + alert("\u0418\u0433\u0440\u0430 \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0430!"); + }); + resetItem.addEventListener("click", () => { + if (confirm("\u0412\u044B \u0443\u0432\u0435\u0440\u0435\u043D\u044B, \u0447\u0442\u043E \u0445\u043E\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043B\u0438\u0442\u044C \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0438\u0435 \u0438 \u043D\u0430\u0447\u0430\u0442\u044C \u043D\u043E\u0432\u0443\u044E \u0438\u0433\u0440\u0443?")) { + playSound("click"); + try { + localStorage.removeItem(state.SAVE_KEY); + console.log("\u0421\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0438\u0435 \u0443\u0434\u0430\u043B\u0435\u043D\u043E \u0438\u0437 localStorage"); + } catch (e) { + console.warn("\u041E\u0448\u0438\u0431\u043A\u0430 \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u044F \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0438\u044F:", e); + } + state.inMemorySave = null; + state.worldId = Math.random().toString(36).substring(2, 10); + console.log("\u041D\u043E\u0432\u044B\u0439 worldId \u043F\u043E\u0441\u043B\u0435 \u0441\u0431\u0440\u043E\u0441\u0430:", state.worldId); + try { + const newUrl = new URL(window.location.href); + newUrl.searchParams.set("world", state.worldId); + if (typeof window.history !== "undefined" && typeof window.history.replaceState === "function") { + window.history.replaceState(null, "", newUrl.toString()); + console.log("URL \u043E\u0431\u043D\u043E\u0432\u043B\u0451\u043D:", newUrl.toString()); + } + } catch (e) { + console.error("\u041E\u0448\u0438\u0431\u043A\u0430 \u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u044F URL:", e); + } + location.reload(); + } else { + dropdownOpen = false; + menuDropdown.classList.remove("open"); + } + }); + marketItem.addEventListener("click", () => { + dropdownOpen = false; + menuDropdown.classList.remove("open"); + document.dispatchEvent(new CustomEvent("toggleMarket")); + }); + } + function updateSaveButtonVisibility() { + const saveItem = document.getElementById("saveItem"); + if (!saveItem) return; + if (state.isMultiplayer && state.otherPlayers.size > 0) { + saveItem.style.display = "none"; + } else { + saveItem.style.display = "block"; + } + } + + // src/multiplayer/socket-helpers.js + function getRandomPlayerColor(socketId) { + const colors = ["#e74c3c", "#3498db", "#2ecc71", "#f39c12", "#9b59b6", "#1abc9c", "#e91e63", "#00bcd4"]; + let hash = 0; + for (let i = 0; i < socketId.length; i++) { + hash = (hash << 5) - hash + socketId.charCodeAt(i); + hash = hash & hash; + } + return colors[Math.abs(hash) % colors.length]; + } + var lastMoveSendTime = 0; + var MOVE_SEND_INTERVAL2 = 0.05; + var lastSentX = 0; + var lastSentY = 0; + function sendPlayerPosition() { + if (!state.isMultiplayer || !state.socket || !state.socket.connected) return; + const now = performance.now() / 1e3; + if (now - lastMoveSendTime < MOVE_SEND_INTERVAL2) return; + const dx = Math.abs(state.player.x - lastSentX); + const dy = Math.abs(state.player.y - lastSentY); + if (dx < 1 && dy < 1) return; + lastMoveSendTime = now; + lastSentX = state.player.x; + lastSentY = state.player.y; + state.socket.emit("player_move", { x: state.player.x, y: state.player.y, player_name: state.playerName }); + } + function sendBlockChange(gx, gy, t, op) { + if (!state.isMultiplayer || !state.socket || !state.socket.connected) return; + state.socket.emit("block_change", { gx, gy, t, op }); + } + + // src/ui/trade.js + function itemName(id) { + return BLOCKS[id]?.n || TOOLS[id]?.n || ITEMS[id]?.n || id; + } + function itemIcon(id) { + if (BLOCKS[id]) return "\u{1F7EB}"; + if (TOOLS[id]) return TOOLS[id].icon || "\u{1F527}"; + if (ITEMS[id]) return ITEMS[id].icon || "\u{1F4E6}"; + return "\u{1F4E6}"; + } + var tradeOpen = false; + var currentTradeId = null; + var myOffer = {}; + var partnerOffer = {}; + var iConfirmed = false; + function initTradeSocket(socket2) { + socket2.on("trade_request", (data) => { + playSound("click"); + const overlay = document.createElement("div"); + overlay.id = "tradeRequestOverlay"; + overlay.className = "custom-modal-overlay"; + overlay.innerHTML = ` +
+
\u{1F91D} ${data.from_name} \u0445\u043E\u0447\u0435\u0442 \u0442\u043E\u0440\u0433\u043E\u0432\u0430\u0442\u044C
+ +
`; + document.getElementById("game").appendChild(overlay); + document.getElementById("tradeAcceptBtn").addEventListener("click", () => { + overlay.remove(); + socket2.emit("trade_accept", { from_socket_id: data.from }); + }); + document.getElementById("tradeDeclineBtn").addEventListener("click", () => { + overlay.remove(); + socket2.emit("trade_decline", { from_socket_id: data.from }); + }); + }); + socket2.on("trade_start", (data) => { + currentTradeId = data.trade_id; + myOffer = {}; + partnerOffer = {}; + iConfirmed = false; + tradeOpen = true; + renderTradeUI(data.partner_name); + state.tradePanel.style.display = "block"; + }); + socket2.on("trade_update", (data) => { + partnerOffer = data.player1Offer || data.player2Offer || {}; + const isP1 = state.socket && state.socket.id === data.player1Offer; + if (state.mySocketId) { + } + renderTradeOffers(); + }); + socket2.on("trade_status", (data) => { + const confirmBtn = document.getElementById("tradeConfirmBtn"); + if (confirmBtn) { + const amIPlayer1 = true; + if (iConfirmed) { + confirmBtn.textContent = "\u2705 \u041E\u0436\u0438\u0434\u0430\u043D\u0438\u0435..."; + confirmBtn.disabled = true; + confirmBtn.style.background = "#555"; + } + } + const partnerStatus = document.getElementById("partnerConfirmStatus"); + if (partnerStatus) { + const partnerConfirmed = data.player1Confirm || data.player2Confirm; + partnerStatus.textContent = partnerConfirmed ? "\u2705 \u041F\u043E\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u043B" : "\u23F3 \u0415\u0449\u0451 \u043D\u0435 \u043F\u043E\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u043B"; + } + }); + socket2.on("trade_complete", (data) => { + const received = data.received || {}; + for (const [item, qty] of Object.entries(received)) { + if (qty > 0) { + state.inv[item] = (state.inv[item] || 0) + qty; + } + } + const sent = data.sent || {}; + for (const [item, qty] of Object.entries(sent)) { + if (qty > 0) { + state.inv[item] = (state.inv[item] || 0) - qty; + if (state.inv[item] < 0) state.inv[item] = 0; + } + } + addChatMessage("\u0421\u0438\u0441\u0442\u0435\u043C\u0430", "\u{1F91D} \u0421\u0434\u0435\u043B\u043A\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043D\u0430!"); + closeTrade(); + }); + socket2.on("trade_declined", () => { + addChatMessage("\u0421\u0438\u0441\u0442\u0435\u043C\u0430", "\u0422\u043E\u0440\u0433\u043E\u0432\u043B\u044F \u043E\u0442\u043A\u043B\u043E\u043D\u0435\u043D\u0430"); + closeTrade(); + }); + socket2.on("trade_cancelled", () => { + addChatMessage("\u0421\u0438\u0441\u0442\u0435\u043C\u0430", "\u0422\u043E\u0440\u0433\u043E\u0432\u043B\u044F \u043E\u0442\u043C\u0435\u043D\u0435\u043D\u0430"); + closeTrade(); + }); + socket2.on("trade_error", (data) => { + addChatMessage("\u0421\u0438\u0441\u0442\u0435\u043C\u0430", "\u274C " + data.msg); + }); + } + function renderTradeUI(partnerName) { + const panel = state.tradePanel; + const content = state.tradeContent; + content.innerHTML = ` +
\u{1F91D} \u0422\u043E\u0440\u0433\u043E\u0432\u043B\u044F \u0441 ${partnerName}
+
+
+
\u0412\u044B \u043F\u0440\u0435\u0434\u043B\u0430\u0433\u0430\u0435\u0442\u0435:
+
+ +
+
\u21C4
+
+
\u041F\u0430\u0440\u0442\u043D\u0451\u0440 \u043F\u0440\u0435\u0434\u043B\u0430\u0433\u0430\u0435\u0442:
+
+ \u041E\u0436\u0438\u0434\u0430\u043D\u0438\u0435... +
+
+
+
\u23F3 \u041F\u0430\u0440\u0442\u043D\u0451\u0440 \u0435\u0449\u0451 \u043D\u0435 \u043F\u043E\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u043B
+
+ + +
`; + document.getElementById("tradeAddItemBtn")?.addEventListener("click", showAddItemDialog); + document.getElementById("tradeConfirmBtn")?.addEventListener("click", confirmTrade); + document.getElementById("tradeCancelBtn")?.addEventListener("click", cancelTrade); + } + function renderTradeOffers() { + const myItems = document.getElementById("myOfferItems"); + if (myItems) { + const keys = Object.keys(myOffer).filter((k2) => myOffer[k2] > 0); + if (keys.length === 0) { + myItems.innerHTML = '\u041D\u0438\u0447\u0435\u0433\u043E'; + } else { + myItems.innerHTML = keys.map((k2) => `
${itemIcon(k2)} ${itemName(k2)} x${myOffer[k2]}
`).join(""); + } + } + } + function showAddItemDialog() { + const inv = state.inv; + const items = Object.keys(inv).filter((id) => inv[id] > 0); + if (items.length === 0) { + addChatMessage("\u0421\u0438\u0441\u0442\u0435\u043C\u0430", "\u0418\u043D\u0432\u0435\u043D\u0442\u0430\u0440\u044C \u043F\u0443\u0441\u0442!"); + return; + } + const overlay = document.createElement("div"); + overlay.id = "tradeItemPicker"; + overlay.className = "custom-modal-overlay"; + let html = '
\u0427\u0442\u043E \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0438\u0442\u044C?
'; + for (const id of items) { + const offered = myOffer[id] || 0; + const available = inv[id] - offered; + if (available <= 0) continue; + html += `
+ ${itemIcon(id)} + ${itemName(id)} + x${available} +
`; + } + html += "
"; + overlay.innerHTML = html; + document.getElementById("game").appendChild(overlay); + overlay.querySelectorAll(".trade-pick-item").forEach((el) => { + el.addEventListener("click", () => { + const itemId = el.dataset.item; + const available = inv[itemId] - (myOffer[itemId] || 0); + const qty = Math.min(available, available > 1 ? promptForQty(itemId, available) : 1); + if (qty > 0) { + myOffer[itemId] = (myOffer[itemId] || 0) + qty; + renderTradeOffers(); + iConfirmed = false; + const btn = document.getElementById("tradeConfirmBtn"); + if (btn) { + btn.textContent = "\u2705 \u041F\u043E\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044C"; + btn.disabled = false; + btn.style.background = "#2ecc71"; + } + } + overlay.remove(); + }); + }); + } + function promptForQty(itemId, max) { + const val = parseInt(prompt(`\u0421\u043A\u043E\u043B\u044C\u043A\u043E ${itemName(itemId)}? (\u043C\u0430\u043A\u0441: ${max})`, "1")); + return isNaN(val) || val < 1 ? 1 : Math.min(val, max); + } + function confirmTrade() { + if (!currentTradeId || !state.socket) return; + for (const [item, qty] of Object.entries(myOffer)) { + if (qty > 0) { + if (state.inv[item] < qty) { + addChatMessage("\u0421\u0438\u0441\u0442\u0435\u043C\u0430", `\u041D\u0435\u0434\u043E\u0441\u0442\u0430\u0442\u043E\u0447\u043D\u043E ${itemName(item)}!`); + return; + } + } + } + state.socket.emit("trade_offer", { trade_id: currentTradeId, offer: myOffer }); + setTimeout(() => { + state.socket.emit("trade_confirm", { trade_id: currentTradeId }); + iConfirmed = true; + const btn = document.getElementById("tradeConfirmBtn"); + if (btn) { + btn.textContent = "\u2705 \u041E\u0436\u0438\u0434\u0430\u043D\u0438\u0435..."; + btn.disabled = true; + btn.style.background = "#555"; + } + }, 200); + } + function cancelTrade() { + if (!currentTradeId || !state.socket) return; + state.socket.emit("trade_cancel", { trade_id: currentTradeId }); + closeTrade(); + } + function closeTrade() { + tradeOpen = false; + currentTradeId = null; + myOffer = {}; + partnerOffer = {}; + iConfirmed = false; + if (state.tradePanel) state.tradePanel.style.display = "none"; + document.getElementById("tradeItemPicker")?.remove(); + } + + // src/multiplayer/socket.js + var socket = null; + function initSocket() { + try { + socket = io(SERVER_URL, { + path: "/socket.io/", + transports: ["websocket", "polling"] + }); + state.socket = socket; + socket.on("connect", () => { + console.log(`Connected to server: ${SERVER_URL}, socket.id: ${socket.id}, worldId: ${state.worldId}`); + state.mySocketId = socket.id; + state.isMultiplayer = true; + socket.emit("join_world", { world_id: state.worldId, player_name: state.playerName }); + if (state.worldIdEl) state.worldIdEl.textContent = state.worldId; + if (state.multiplayerStatus) state.multiplayerStatus.style.display = "block"; + initTradeSocket(socket); + }); + socket.on("connect_error", (error) => { + console.error("Socket connection error:", error); + state.isMultiplayer = false; + }); + socket.on("disconnect", () => { + console.log("Disconnected from server"); + state.isMultiplayer = false; + state.otherPlayers.clear(); + if (state.multiplayerStatus) state.multiplayerStatus.style.display = "none"; + }); + socket.on("world_state", (data) => { + console.log("Received world_state:", data); + if (data.seed !== void 0 && data.seed !== state.worldSeed) { + const oldSeed = state.worldSeed; + state.worldSeed = data.seed; + console.log("World seed changed from", oldSeed, "to", state.worldSeed); + state.generated.clear(); + grid.clear(); + blocks.length = 0; + state.placedBlocks = []; + state.removedBlocks = []; + console.log("World regenerated with new seed:", state.worldSeed); + } + if (data.blocks && Array.isArray(data.blocks)) { + for (const block of data.blocks) { + const key = k(block.gx, block.gy); + state.serverOverrides.set(key, { op: block.op, t: block.t }); + if (block.op === "set") { + setBlock(block.gx, block.gy, block.t, false); + } else if (block.op === "remove") { + removeBlock(block.gx, block.gy); + } + } + } + if (data.time !== void 0) { + state.worldTime = data.time; + state.isNightTime = state.worldTime > 0.5; + } + { + const startGX = 6; + for (let dx = -3; dx <= 3; dx++) genColumn(startGX + dx); + const surfaceY = surfaceGyAt(startGX); + let safeGY = surfaceY - 1; + const aboveBlock = getBlock(startGX, surfaceY - 1); + if (aboveBlock && aboveBlock.t === "water") { + for (let gy = SEA_GY - 1; gy >= 0; gy--) { + const b = getBlock(startGX, gy); + if (!b || b.dead || b.t === "air" || b.t === "water") continue; + safeGY = gy - 1; + break; + } + } + state.spawnPoint.x = startGX * TILE; + state.spawnPoint.y = safeGY * TILE; + console.log("Client-side spawn point:", state.spawnPoint, "surfaceY:", surfaceY, "safeGY:", safeGY); + } + state.player.x = state.spawnPoint.x; + state.player.y = state.spawnPoint.y; + state.player.vx = 0; + state.player.vy = 0; + state.player.fallStartY = state.player.y; + console.log("Player moved to spawn point:", state.player.x, state.player.y); + state.player.hp = 100; + state.player.hunger = 100; + state.player.o2 = 100; + state.player.invuln = 0; + console.log("[MULTIPLAYER CONNECT] Player HP set to 100% on connect"); + if (data.players && Array.isArray(data.players)) { + state.otherPlayers.clear(); + for (const p of data.players) { + if (p.socket_id !== state.mySocketId) { + state.otherPlayers.set(p.socket_id, { + x: p.x, + y: p.y, + color: getRandomPlayerColor(p.socket_id), + name: p.player_name || "\u0418\u0433\u0440\u043E\u043A" + }); + } + } + state.playerCountEl.textContent = data.players.length; + } + if (data.mobs && Array.isArray(data.mobs)) { + state.serverMobs.clear(); + for (const m of data.mobs) { + const sm = { ...m, maxHp: m.maxHp || m.hp, vx: m.vx || 0, vy: m.vy || 0, grounded: false, inWater: false, aiT: 0, dir: m.dir || 1, dead: false, fuse: m.fuse || 0, shootCooldown: 2, speed: m.speed || 80 }; + state.serverMobs.set(m.id, sm); + } + } + if (data.tg_id) state.myTgId = data.tg_id; + }); + socket.on("player_joined", (data) => { + console.log("Player joined:", data.socket_id); + if (data.socket_id !== state.mySocketId) { + const spawnGX = 6; + genColumn(spawnGX); + const surfaceY = surfaceGyAt(spawnGX); + const safeSpawnX = spawnGX * TILE; + const safeSpawnY = (surfaceY - 1) * TILE; + state.otherPlayers.set(data.socket_id, { + x: safeSpawnX, + y: safeSpawnY, + color: getRandomPlayerColor(data.socket_id), + name: data.player_name || "\u0418\u0433\u0440\u043E\u043A" + }); + addChatMessage("\u0421\u0438\u0441\u0442\u0435\u043C\u0430", `\u0418\u0433\u0440\u043E\u043A \u043F\u0440\u0438\u0441\u043E\u0435\u0434\u0438\u043D\u0438\u043B\u0441\u044F`); + updateSaveButtonVisibility(); + } + }); + socket.on("player_moved", (data) => { + if (data.socket_id !== state.mySocketId && state.otherPlayers.has(data.socket_id)) { + const p = state.otherPlayers.get(data.socket_id); + p.x = data.x; + p.y = data.y; + if (data.player_name) { + p.name = data.player_name; + } + } + }); + socket.on("player_left", (data) => { + console.log("Player left:", data.socket_id); + state.otherPlayers.delete(data.socket_id); + addChatMessage("\u0421\u0438\u0441\u0442\u0435\u043C\u0430", `\u0418\u0433\u0440\u043E\u043A \u043F\u043E\u043A\u0438\u043D\u0443\u043B \u0438\u0433\u0440\u0443`); + updateSaveButtonVisibility(); + }); + socket.on("mob_spawned", (data) => { + const sm = { ...data, maxHp: data.maxHp || data.hp, vx: data.vx || 0, vy: data.vy || 0, grounded: false, inWater: false, aiT: 0, dir: data.dir || 1, dead: false, fuse: data.fuse || 0, shootCooldown: 2, speed: data.speed || 80 }; + state.serverMobs.set(data.id, sm); + }); + socket.on("mob_positions", (arr) => { + for (const u of arr) { + const sm = state.serverMobs.get(u.id); + if (sm) { + sm.x = u.x; + sm.y = u.y; + sm.vx = u.vx; + sm.vy = u.vy; + sm.dir = u.dir; + sm.hp = u.hp; + sm.fuse = u.fuse || 0; + } + } + }); + socket.on("mob_despawned", (data) => { + state.serverMobs.delete(data.id); + }); + socket.on("mob_died", (data) => { + const sm = state.serverMobs.get(data.id); + if (sm && data.killer === state.mySocketId) { + if (sm.kind === "chicken") playSound("hurt_chicken"); + state.inv.meat += sm.kind === "chicken" ? 1 : 2; + if (sm.kind === "skeleton") { + state.inv.arrow += 2 + Math.floor(Math.random() * 3); + if (Math.random() < 0.15) state.inv.bow = (state.inv.bow || 0) + 1; + } + rebuildHotbar(); + } + state.serverMobs.delete(data.id); + }); + socket.on("mob_hurt_ack", (data) => { + const sm = state.serverMobs.get(data.id); + if (sm) sm.hp = data.hp; + }); + socket.on("mob_explode", (data) => { + explodeAt(data.gx, data.gy); + state.serverMobs.delete(data.id); + }); + socket.on("mob_shoot", (data) => { + state.projectiles.push({ + x: data.x, + y: data.y, + vx: data.vx, + vy: data.vy, + dmg: data.dmg, + owner: "mob", + life: data.life + }); + }); + socket.on("block_changed", (data) => { + const key = k(data.gx, data.gy); + state.serverOverrides.set(key, { op: data.op, t: data.t }); + if (data.op === "set") { + setBlock(data.gx, data.gy, data.t, false); + } else if (data.op === "remove") { + removeBlock(data.gx, data.gy); + } + }); + socket.on("chat_message", (data) => { + const senderName = data.socket_id === state.mySocketId ? "\u0412\u044B" : `\u0418\u0433\u0440\u043E\u043A ${data.socket_id.substring(0, 6)}`; + addChatMessage(senderName, data.message); + }); + socket.on("time_update", (data) => { + if (data.time !== void 0) { + state.worldTime = data.time; + state.isNightTime = state.worldTime > 0.5; + } + }); + } catch (e) { + console.error("Error initializing socket:", e); + state.isMultiplayer = false; + } + } + + // src/data/recipes.js + var RECIPES = [ + { out: "planks", qty: 4, cost: { wood: 1 } }, + { out: "ladder", qty: 3, cost: { planks: 7 } }, + { out: "torch", qty: 2, cost: { coal: 1, planks: 1 } }, + { out: "glass", qty: 1, cost: { sand: 3 } }, + { out: "brick", qty: 1, cost: { stone: 2, clay: 1 } }, + { out: "campfire", qty: 1, cost: { wood: 1, coal: 1 } }, + { out: "tnt", qty: 1, cost: { sand: 2, coal: 1 } }, + { out: "bed", qty: 1, cost: { wood: 3, planks: 3 } }, + { out: "boat", qty: 1, cost: { wood: 5 } }, + { out: "wood_pickaxe", qty: 1, cost: { wood: 3, planks: 2 } }, + { out: "stone_pickaxe", qty: 1, cost: { wood: 1, stone: 3 } }, + { out: "iron_pickaxe", qty: 1, cost: { wood: 1, iron_ore: 2 } }, + { out: "wood_sword", qty: 1, cost: { wood: 2, planks: 1 } }, + { out: "stone_sword", qty: 1, cost: { wood: 1, stone: 2 } }, + { out: "iron_sword", qty: 1, cost: { wood: 1, iron_ore: 1 } }, + { out: "wood_axe", qty: 1, cost: { wood: 3, planks: 2 } }, + { out: "stone_axe", qty: 1, cost: { wood: 1, stone: 3 } }, + { out: "iron_axe", qty: 1, cost: { wood: 1, iron_ore: 2 } }, + { out: "wood_shovel", qty: 1, cost: { wood: 1, planks: 1 } }, + { out: "stone_shovel", qty: 1, cost: { wood: 1, stone: 2 } }, + { out: "iron_shovel", qty: 1, cost: { wood: 1, iron_ore: 1 } }, + { out: "iron_armor", qty: 1, cost: { iron_ore: 5 } }, + { out: "furnace", qty: 1, cost: { stone: 8 } }, + { out: "bow", qty: 1, cost: { wood: 3, planks: 2 } }, + { out: "arrow", qty: 4, cost: { stone: 1, wood: 1 } } + ]; + var SMELTING_RECIPES = [ + { in: "sand", qty: 1, out: "glass", outQty: 1, time: 3 }, + { in: "clay", qty: 1, out: "brick", outQty: 1, time: 3 }, + { in: "iron_ore", qty: 1, out: "iron_ingot", outQty: 1, time: 5 }, + { in: "gold_ore", qty: 1, out: "gold_ingot", outQty: 1, time: 5 }, + { in: "copper_ore", qty: 1, out: "copper_ingot", outQty: 1, time: 4 }, + { in: "meat", qty: 1, out: "cooked", outQty: 1, time: 2 }, + { in: "cobblestone", qty: 1, out: "stone", outQty: 1, time: 2 } + ]; + + // src/world/water.js + var waterUpdateQueue = /* @__PURE__ */ new Set(); + var waterUpdateTimer = 0; + var WATER_UPDATE_INTERVAL = 0.05; + function updateWaterPhysics(dt) { waterUpdateTimer += dt; - if(waterUpdateTimer < WATER_UPDATE_INTERVAL) return; + if (waterUpdateTimer < WATER_UPDATE_INTERVAL) return; waterUpdateTimer = 0; - - // Ограничиваем количество водных блоков для обработки (оптимизация) const MAX_WATER_BLOCKS_PER_UPDATE = 50; let processedCount = 0; - - // Собираем только видимые водные блоки в очередь (оптимизация) waterUpdateQueue.clear(); - const minGX = Math.floor(camX/TILE) - 10; - const maxGX = Math.floor((camX+W)/TILE) + 10; - const minGY = Math.floor(camY/TILE) - 10; - const maxGY = Math.floor((camY+H)/TILE) + 10; - - for(const b of blocks){ - if(processedCount >= MAX_WATER_BLOCKS_PER_UPDATE) break; - if(!b.dead && b.t === 'water' && - b.gx >= minGX && b.gx <= maxGX && - b.gy >= minGY && b.gy <= maxGY){ + const W = state.W; + const H = state.H; + const minGX = Math.floor(state.camX / TILE) - 10; + const maxGX = Math.floor((state.camX + W) / TILE) + 10; + const minGY = Math.floor(state.camY / TILE) - 10; + const maxGY = Math.floor((state.camY + H) / TILE) + 10; + for (const b of blocks) { + if (processedCount >= MAX_WATER_BLOCKS_PER_UPDATE) break; + if (!b.dead && b.t === "water" && b.gx >= minGX && b.gx <= maxGX && b.gy >= minGY && b.gy <= maxGY) { waterUpdateQueue.add(k(b.gx, b.gy)); processedCount++; } } - - // Обновляем воду с ограничением глубины распространения - const processed = new Set(); + const processed = /* @__PURE__ */ new Set(); const toAdd = []; - const MAX_WATER_DEPTH = 20; // Максимальная глубина распространения воды - - for(const key of waterUpdateQueue){ - if(processed.has(key)) continue; + const MAX_WATER_DEPTH = 20; + for (const key of waterUpdateQueue) { + if (processed.has(key)) continue; const b = grid.get(key); - if(!b || b.dead) continue; + if (!b || b.dead) continue; processed.add(key); - const gx = b.gx; const gy = b.gy; - - // Проверяем глубину - не распространяем воду слишком глубоко - if(gy > SEA_GY + MAX_WATER_DEPTH) continue; - - // Проверяем, можно ли воде упасть вниз + if (gy > SEA_GY + MAX_WATER_DEPTH) continue; const belowKey = k(gx, gy + 1); const below = grid.get(belowKey); - - // Внизу пусто - вода создаёт новый блок внизу (но не удаляется сверху) - if(!below || below.dead){ - // Ограничиваем создание новых водных блоков - if(toAdd.length < 20){ // Максимум 20 новых блоков за обновление - toAdd.push({gx, gy: gy + 1, t: 'water'}); + if (!below || below.dead) { + if (toAdd.length < 20) { + toAdd.push({ gx, gy: gy + 1, t: "water" }); processed.add(belowKey); } continue; } - - // Если внизу не вода и не твёрдый блок - вода может течь вниз - if(!isSolid(gx, gy + 1) && below && below.t !== 'water'){ - if(toAdd.length < 20){ - toAdd.push({gx, gy: gy + 1, t: 'water'}); + if (!isSolid(gx, gy + 1) && below && below.t !== "water") { + if (toAdd.length < 20) { + toAdd.push({ gx, gy: gy + 1, t: "water" }); processed.add(belowKey); } continue; } - - // Если внизу твёрдый блок или вода - вода растекается горизонтально - // Проверяем левую сторону const leftKey = k(gx - 1, gy); const left = grid.get(leftKey); - if(!left || left.dead){ - if(toAdd.length < 20){ - toAdd.push({gx: gx - 1, gy, t: 'water'}); + if (!left || left.dead) { + if (toAdd.length < 20) { + toAdd.push({ gx: gx - 1, gy, t: "water" }); processed.add(leftKey); } continue; } - - // Проверяем правую сторону const rightKey = k(gx + 1, gy); const right = grid.get(rightKey); - if(!right || right.dead){ - if(toAdd.length < 20){ - toAdd.push({gx: gx + 1, gy, t: 'water'}); + if (!right || right.dead) { + if (toAdd.length < 20) { + toAdd.push({ gx: gx + 1, gy, t: "water" }); processed.add(rightKey); } continue; } } - - // Применяем изменения (только добавляем новые блоки) - for(const newData of toAdd){ + for (const newData of toAdd) { const key = k(newData.gx, newData.gy); - if(!grid.has(key)){ + if (!grid.has(key)) { const b = { gx: newData.gx, gy: newData.gy, @@ -1567,239 +1872,500 @@ function customConfirm(msg, onYes) { blocks.push(b); } } - - // Очищаем мёртвые блоки из массива - for(let i = blocks.length - 1; i >= 0; i--){ - if(blocks[i].dead){ + for (let i = blocks.length - 1; i >= 0; i--) { + if (blocks[i].dead) { blocks.splice(i, 1); } } } - - // Инвентарь - const inv = { - dirt:6, stone:0, sand:0, gravel:0, clay:0, - wood:0, planks:0, ladder:0, leaves:0, coal:0, - copper_ore:0, iron_ore:0, gold_ore:0, diamond_ore:0, - brick:0, glass:0, - tnt:1, campfire:0, torch:0, - meat:0, cooked:0, arrow:0, - wood_pickaxe:0, stone_pickaxe:0, iron_pickaxe:0, - wood_sword:0, stone_sword:0, iron_sword:0, - iron_armor:0, gold_armor:0, - bow:0, furnace:0, - bed:0, boat:0, - iron_ingot:0, gold_ingot:0, copper_ingot:0, - diamond_pickaxe:0, diamond_sword:0, hoe:0, - wheat:0, bread:0, carrot:0, potato:0, baked_potato:0, - scorpion_stinger:0, polar_fur:0, slime_ball:0, eagle_feather:0, - snow:0, ice:0, cactus:0, mushroom:0, moss:0, farmland:0, - spruce_leaves:0, dead_bush:0, - wheat_stage0:0, carrot_stage0:0, potato_stage0:0 - }; - let selected = 'dirt'; - - // Прочность инструментов: Map<"tooltype_id", {current, max}> - // При крафте инструмента создаём запись с max durability - const toolDurability = new Map(); - - function addTool(type) { - const def = TOOLS[type]; - if (!def) return; - const id = `${type}_${Date.now()}_${Math.random().toString(36).slice(2,6)}`; - toolDurability.set(id, { type, current: def.durability, max: def.durability }); - return id; + + // src/physics/water-detect.js + function isWaterAt(px, py) { + const gx = Math.floor(px / TILE); + const gy = Math.floor(py / TILE); + const b = getBlock(gx, gy); + return !!(b && b.t === "water"); } - - function getToolDurability(id) { - return toolDurability.get(id); + function updateWaterFlag(e) { + const cx = e.x + e.w / 2; + const wasInWater = e.inWater; + const mid = isWaterAt(cx, e.y + e.h / 2); + const feet = isWaterAt(cx, e.y + e.h - 2); + e.inWater = mid || feet; + e.headInWater = isWaterAt(cx, e.y + 4); + if (e === state.player && !wasInWater && e.inWater && e.vy > 100) { + playSound("splash"); + } } - - // Найти лучший инструмент данного типа в инвентаре - function findBestTool(toolType) { - if (inv[toolType] <= 0) return null; - // Возвращаем первый попавшийся — упрощённо - return toolType; - } - - // Использовать инструмент (уменьшить прочность). Возвращает true если сломался - function useTool(toolType) { - // Ищем любой инструмент этого типа с прочностью - for (const [id, dur] of toolDurability) { - if (dur.type === toolType) { - dur.current--; - if (dur.current <= 0) { - toolDurability.delete(id); - inv[toolType]--; - rebuildHotbar(); - return true; // сломался + + // src/physics/collision.js + function resolveY(e) { + e.grounded = false; + const x1 = e.x + 2; + const x2 = e.x + e.w - 2; + const cx = e.x + e.w / 2; + const cy = e.y + e.h / 2; + const gx = Math.floor(cx / TILE); + const gy = Math.floor(cy / TILE); + const b = getBlock(gx, gy); + const onLadder = b && BLOCKS[b.t] && BLOCKS[b.t].climbable; + if (onLadder) { + e.grounded = true; + if (state.inp.jump) { + e.vy = -200; + } else if (state.inp.down) { + e.vy = 100; + } else { + e.vy = 0; + } + return; + } + const leftGX = Math.floor((e.x - 4) / TILE); + const rightGX = Math.floor((e.x + e.w + 4) / TILE); + const playerGY = Math.floor((e.y + e.h / 2) / TILE); + const leftBlock = getBlock(leftGX, playerGY); + const rightBlock = getBlock(rightGX, playerGY); + const leftLadder = leftBlock && BLOCKS[leftBlock.t] && BLOCKS[leftBlock.t].climbable; + const rightLadder = rightBlock && BLOCKS[rightBlock.t] && BLOCKS[rightBlock.t].climbable; + if ((leftLadder || rightLadder) && state.inp.jump && e.vy < 0) { + if (leftLadder && e.x > leftGX * TILE + TILE / 2) { + e.x = leftGX * TILE + TILE / 2 - e.w / 2; + } else if (rightLadder && e.x < rightGX * TILE + TILE / 2) { + e.x = rightGX * TILE + TILE / 2 - e.w / 2; + } + e.grounded = true; + e.vy = -150; + return; + } + if (e.vy >= 0) { + const probeY = e.y + e.h + 1; + const gy2 = Math.floor(probeY / TILE); + const gxA = Math.floor(x1 / TILE); + const gxB = Math.floor(x2 / TILE); + if (isSolid(gxA, gy2) || isSolid(gxB, gy2)) { + e.y = gy2 * TILE - e.h; + e.vy = 0; + e.grounded = true; + if (e === state.player && !state.player.inWater) { + const fallTiles = (e.y - e.fallStartY) / TILE; + if (fallTiles > 6) { + const damage = calculateDamage((fallTiles - 6) * 10); + state.player.hp -= damage; + } } - return false; + if (e === state.player) e.fallStartY = e.y; } } - return false; - } - - const RECIPES = [ - { out:'planks', qty:4, cost:{ wood:1 }, requiredLevel:1 }, - { out:'ladder', qty:3, cost:{ planks:7 }, requiredLevel:1 }, - { out:'torch', qty:2, cost:{ coal:1, planks:1 }, requiredLevel:1 }, - { out:'glass', qty:1, cost:{ sand:3 }, requiredLevel:1 }, - { out:'brick', qty:1, cost:{ stone:2, clay:1 }, requiredLevel:1 }, - { out:'campfire', qty:1, cost:{ wood:1, coal:1 }, requiredLevel:1 }, - { out:'tnt', qty:1, cost:{ sand:2, coal:1 }, requiredLevel:8 }, - { out:'bed', qty:1, cost:{ wood: 3, planks: 3 }, requiredLevel:1 }, - { out:'boat', qty:1, cost:{ wood: 5 }, requiredLevel:2 }, - { out:'wood_pickaxe', qty:1, cost:{ wood: 3, planks: 2 }, requiredLevel:1 }, - { out:'stone_pickaxe', qty:1, cost:{ wood: 1, stone: 3 }, requiredLevel:2 }, - { out:'iron_pickaxe', qty:1, cost:{ wood: 1, iron_ore: 2 }, requiredLevel:3 }, - { out:'wood_sword', qty:1, cost:{ wood: 2, planks: 1 }, requiredLevel:1 }, - { out:'stone_sword', qty:1, cost:{ wood: 1, stone: 2 }, requiredLevel:2 }, - { out:'iron_sword', qty:1, cost:{ wood: 1, iron_ore: 1 }, requiredLevel:3 }, - { out:'iron_armor', qty:1, cost:{ iron_ore: 5 }, requiredLevel:5 }, - { out:'gold_armor', qty:1, cost:{ gold_ore: 8 }, requiredLevel:6 }, - { out:'furnace', qty:1, cost:{ stone: 8 }, requiredLevel:3 }, - { out:'bow', qty:1, cost:{ wood: 3, planks: 2 }, requiredLevel:4 }, - { out:'arrow', qty:4, cost:{ stone: 1, wood: 1 }, requiredLevel:1 }, - // === NEW RECIPES === - { out:'bread', qty:1, cost:{ wheat: 3 }, requiredLevel:1 }, - { out:'diamond_pickaxe', qty:1, cost:{ wood: 1, diamond_ore: 2 }, requiredLevel:7 }, - { out:'diamond_sword', qty:1, cost:{ wood: 1, diamond_ore: 2 }, requiredLevel:7 }, - { out:'hoe', qty:1, cost:{ wood: 2, planks: 1 }, requiredLevel:1 } - ]; - - // Рецепты печи (обжиг) - const SMELTING_RECIPES = [ - { in:'sand', qty:1, out:'glass', outQty:1, time:3 }, // песок → стекло - { in:'clay', qty:1, out:'brick', outQty:1, time:3 }, // глина → кирпич - { in:'iron_ore', qty:1, out:'iron_ingot', outQty:1, time:5 }, // железо → слиток - { in:'gold_ore', qty:1, out:'gold_ingot', outQty:1, time:5 }, // золото → слиток - { in:'copper_ore', qty:1, out:'copper_ingot', outQty:1, time:4 }, // медь → слиток - { in:'meat', qty:1, out:'cooked', outQty:1, time:2 }, // сырое мясо → жареное - { in:'cobblestone', qty:1, out:'stone', outQty:1, time:2 }, // булыжник → камень - { in:'potato', qty:1, out:'baked_potato', outQty:1, time:2 } // картофель → печёная картошка - ]; - - // Новые предметы от обжига - ITEMS.iron_ingot = { n:'Железный слиток', icon:'🔩' }; - ITEMS.gold_ingot = { n:'Золотой слиток', icon:'🪙' }; - ITEMS.copper_ingot = { n:'Медный слиток', icon:'🟤' }; - ITEMS.diamond_pickaxe = { n:'Алмазная кирка', icon:'⛏️', durability:500, miningPower:5 }; - ITEMS.diamond_sword = { n:'Алмазный меч', icon:'⚔️', durability:400, damage:18 }; - ITEMS.hoe = { n:'Мотыга', icon:'🔨', durability:80, tillTo:'farmland' }; - - // Активные печи: Map ключа блока → { recipe, progress, totalTime } - const activeFurnaces = new Map(); - - // UI - const hpEl = document.getElementById('hp'); - const foodEl = document.getElementById('food'); - const tempEl = document.getElementById("temp"); - const sxEl = document.getElementById('sx'); - const syEl = document.getElementById('sy'); - const todEl = document.getElementById('tod'); - const worldIdEl = document.getElementById('worldId'); - // Toast уведомление - function showToast(msg, duration) { - duration = duration || 1800; - const t = document.createElement('div'); - t.textContent = msg; - t.style.cssText = 'position:fixed;bottom:80px;left:50%;transform:translateX(-50%);background:rgba(0,0,0,0.85);color:#2ecc71;padding:10px 24px;border-radius:10px;font:bold 16px Arial,sans-serif;z-index:99999;pointer-events:none;transition:opacity 0.4s;'; - document.body.appendChild(t); - setTimeout(() => { t.style.opacity = '0'; setTimeout(() => t.remove(), 400); }, duration); - } - // Клик на worldId → копировать код мира + toast - worldIdEl.addEventListener('click', () => { - const code = worldId || ''; - if (!code) return; - const text = code; // копируем только код, не URL - if (navigator.clipboard && navigator.clipboard.writeText) { - navigator.clipboard.writeText(text).then(() => showToast('📋 Скопировано: ' + code)).catch(() => showToast(code)); - } else { - // fallback - const ta = document.createElement('textarea'); - ta.value = text; ta.style.position = 'fixed'; ta.style.opacity = '0'; - document.body.appendChild(ta); ta.select(); - try { document.execCommand('copy'); showToast('📋 Скопировано: ' + code); } catch(e) { showToast(code); } - ta.remove(); + if (e.vy < 0 && e === state.player) { + const gy2 = Math.floor(e.y / TILE); + const gxA = Math.floor(x1 / TILE); + const gxB = Math.floor(x2 / TILE); + if ((isSolid(gxA, gy2) || isSolid(gxB, gy2)) && !isSolid(gxA, gy2 - 1) && !isSolid(gxB, gy2 - 1)) { + e.y = (gy2 + 1) * TILE; + e.vy = 0; + e.grounded = true; + if (e === state.player) e.fallStartY = e.y; + console.log("Jumped onto block!"); + } } - }); - const playerCountEl = document.getElementById('playerCount'); - const hotbarEl = document.getElementById('hotbar'); - const craftPanel = document.getElementById('craftPanel'); - const recipesEl = document.getElementById('recipes'); - const deathEl = document.getElementById('death'); - const inventoryPanel = document.getElementById('inventoryPanel'); - const inventoryGrid = document.getElementById('inventoryGrid'); - - // ==================== МИНИКАРТА ==================== - const minimapWrap = document.getElementById('minimapWrap'); - const minimapCanvas = document.getElementById('minimap'); - const minimapCtx = minimapCanvas.getContext('2d'); - let minimapOpen = false; - - document.getElementById('mapToggle').onclick = () => { - playSound('click'); - minimapOpen = !minimapOpen; - minimapWrap.style.display = minimapOpen ? 'block' : 'none'; + if (e.vy < 0) { + const gy2 = Math.floor(e.y / TILE); + const gxA = Math.floor(x1 / TILE); + const gxB = Math.floor(x2 / TILE); + if (isSolid(gxA, gy2) || isSolid(gxB, gy2)) { + e.y = (gy2 + 1) * TILE; + e.vy = 0; + } + } + } + function resolveX(e) { + const y1 = e.y + 2; + const y2 = e.y + e.h - 2; + const cx = e.x + e.w / 2; + const cy = e.y + e.h / 2; + const gx = Math.floor(cx / TILE); + const gy = Math.floor(cy / TILE); + const b = getBlock(gx, gy); + const onLadder = b && BLOCKS[b.t] && BLOCKS[b.t].climbable; + if (e.vx > 0) { + const gx2 = Math.floor((e.x + e.w) / TILE); + const gyA = Math.floor(y1 / TILE); + const gyB = Math.floor(y2 / TILE); + const solidA = isSolid(gx2, gyA); + const solidB = isSolid(gx2, gyB); + if (solidA || solidB) { + e.x = gx2 * TILE - e.w; + e.vx = 0; + } + } else if (e.vx < 0) { + const gx2 = Math.floor(e.x / TILE); + const gyA = Math.floor(y1 / TILE); + const gyB = Math.floor(y2 / TILE); + const solidA = isSolid(gx2, gyA); + const solidB = isSolid(gx2, gyB); + if (solidA || solidB) { + e.x = (gx2 + 1) * TILE; + e.vx = 0; + } + } + } + + // src/entities/mob-ai.js + function mobAI(m, dt) { + updateWaterFlag(m); + if (m.kind === "zombie") { + const night = isNight(); + if (!night) { + m.hp -= 30 * dt; + m.vx *= 0.5; + return; + } + const dir = Math.sign(state.player.x - m.x); + m.vx = dir * m.speed; + if (m.inWater && Math.random() < 0.06) m.vy = -260; + if (Math.abs(m.x + m.w / 2 - (state.player.x + state.player.w / 2)) < 28 && Math.abs(m.y + m.h / 2 - (state.player.y + state.player.h / 2)) < 40 && state.player.invuln <= 0) { + const damage = calculateDamage(15); + state.player.hp -= damage; + state.player.invuln = 0.8; + state.player.vx += dir * 420; + state.player.vy -= 260; + playSound("hit1"); + } + } else if (m.kind === "creeper") { + const night = isNight(); + if (!night) { + m.hp -= 30 * dt; + m.vx *= 0.5; + return; + } + const dir = Math.sign(state.player.x - m.x); + const dist = Math.hypot(state.player.x + state.player.w / 2 - (m.x + m.w / 2), state.player.y + state.player.h / 2 - (m.y + m.h / 2)); + m.vx = dir * m.speed; + if (m.inWater && Math.random() < 0.06) m.vy = -260; + if (dist < 60) { + m.fuse -= dt; + if (m.fuse <= 0) { + explodeAt(Math.floor((m.x + m.w / 2) / TILE), Math.floor((m.y + m.h / 2) / TILE)); + m.hp = 0; + } + } else { + if (dist < 40) { + m.fuse = 0.5; + } + } + } else if (m.kind === "skeleton") { + const night = isNight(); + if (!night) { + m.hp -= 30 * dt; + m.vx *= 0.5; + return; + } + const dir = Math.sign(state.player.x - m.x); + const dist = Math.hypot(state.player.x + state.player.w / 2 - (m.x + m.w / 2), state.player.y + state.player.h / 2 - (m.y + m.h / 2)); + m.vx = dir * m.speed; + if (m.inWater && Math.random() < 0.06) m.vy = -260; + m.shootCooldown -= dt; + if (dist < 300 && m.shootCooldown <= 0) { + m.shootCooldown = 2; + const dx = state.player.x + state.player.w / 2 - (m.x + m.w / 2); + const dy = state.player.y + state.player.h / 2 - (m.y + m.h / 2); + const angle = Math.atan2(dy, dx); + const speed = 450; + state.projectiles.push({ + x: m.x + m.w / 2, + y: m.y + m.h / 3, + vx: Math.cos(angle) * speed, + vy: Math.sin(angle) * speed, + dmg: 6, + owner: "mob", + life: 3 + }); + } + } else { + m.aiT -= dt; + if (m.aiT <= 0) { + m.aiT = 1.8 + Math.random() * 2.5; + m.dir = Math.random() < 0.5 ? -1 : 1; + if (Math.random() < 0.25) m.dir = 0; + } + m.vx = m.dir * (m.kind === "chicken" ? 55 : 40); + if (m.inWater) m.vy = -120; + } + const g = m.inWater ? GRAV_WATER : GRAV; + m.vy += g * dt; + m.y += m.vy * dt; + m.grounded = false; + resolveY(m); + m.x += m.vx * dt; + resolveX(m); + } + function isNight() { + return state.worldTime > 0.5; + } + + // src/ui/furnace.js + var furnacePanel = document.getElementById("furnacePanel"); + var furnaceContent = document.getElementById("furnaceContent"); + function initFurnace() { + document.getElementById("furnaceClose").onclick = () => { + furnacePanel.style.display = "none"; + state.currentFurnaceKey = null; + }; + } + function openFurnaceUI(gx, gy) { + state.currentFurnaceKey = `${gx},${gy}`; + furnacePanel.style.display = "block"; + renderFurnaceUI(); + } + function renderFurnaceUI() { + if (!state.currentFurnaceKey) return; + const [fgx, fgy] = state.currentFurnaceKey.split(",").map(Number); + const fb = getBlock(fgx, fgy); + if (!fb || fb.t !== "furnace") { + furnacePanel.style.display = "none"; + state.currentFurnaceKey = null; + return; + } + const active = state.activeFurnaces.get(state.currentFurnaceKey); + let html = '
'; + for (let i = 0; i < SMELTING_RECIPES.length; i++) { + const recipe = SMELTING_RECIPES[i]; + const haveCount = state.inv[recipe.in] || 0; + const canSmelt = haveCount >= recipe.qty; + const outDef = BLOCKS[recipe.out]; + const outItem = ITEMS[recipe.out]; + const iconStr = outItem ? outItem.icon : outDef ? "\u{1F9F1}" : "\u2753"; + const nameStr = outItem ? outItem.n : outDef ? outDef.n : recipe.out; + const inItem = ITEMS[recipe.in]; + const inDef = BLOCKS[recipe.in]; + const inName = inItem ? inItem.n : inDef ? inDef.n : recipe.in; + html += `
`; + html += `
${iconStr}
`; + html += `
`; + html += `
${nameStr}
`; + html += `
${inName} x${recipe.qty} (\u0435\u0441\u0442\u044C: ${haveCount}) \u2022 ${recipe.time}\u0441
`; + html += `
`; + html += ``; + html += `
`; + } + if (active) { + const pct = Math.min(100, Math.floor(active.progress / active.recipe.time * 100)); + html += `
`; + html += `
\u{1F525} \u041E\u0431\u0436\u0438\u0433: ${pct}%
`; + html += `
`; + html += `
`; + html += `
`; + } + html += "
"; + furnaceContent.innerHTML = html; + } + window._smelt = (recipeIdx) => { + if (!state.currentFurnaceKey) return; + const recipe = SMELTING_RECIPES[recipeIdx]; + if ((state.inv[recipe.in] || 0) < recipe.qty) return; + if (state.activeFurnaces.has(state.currentFurnaceKey)) return; + state.inv[recipe.in] -= recipe.qty; + state.activeFurnaces.set(state.currentFurnaceKey, { + recipe, + progress: 0 + }); + playSound("fire"); + rebuildHotbar(); + renderFurnaceUI(); }; - - // Цвета блоков для миникарты (по 1 пикселю на блок) - const MINIMAP_COLORS = { - grass: '#4a8c2a', dirt: '#6b3410', stone: '#6a6a6a', sand: '#d4b84a', - gravel: '#888', clay: '#5a9ad4', wood: '#a63d00', planks: '#c46a10', - leaves: '#2a8a3a', glass: '#aaddee', water: '#2980b9', coal: '#1a1a2a', - copper_ore: '#a05535', iron_ore: '#b0b0b0', gold_ore: '#d4a017', - diamond_ore: '#0090d0', brick: '#8a2010', tnt: '#c02020', - campfire: '#d08020', torch: '#d0a020', bedrock: '#1a1a1a', - flower: '#d03050', bed: '#c03060', ladder: '#a04000', boat: '#6b3410', - snow: '#ecf0f1', ice: '#74b9ff', cactus: '#27ae60', mushroom: '#e74c3c', - moss: '#0a6640', swamp_water: '#687828', farmland: '#8B6914', - dead_bush: '#b2bec3', spruce_leaves: '#0a6640', - wheat_stage0: '#a8e6a0', wheat_stage1: '#7dcea0', wheat_stage2: '#b8d730', wheat_stage3: '#f1c40f', - carrot_stage0: '#a8e6a0', carrot_stage1: '#f0c27a', carrot_stage2: '#e8a040', carrot_stage3: '#e67e22', - potato_stage0: '#a8e6a0', potato_stage1: '#c8b888', potato_stage2: '#bfaa78', potato_stage3: '#dfe6e9' + function tickFurnaces(dt) { + for (const [key, furnace] of state.activeFurnaces) { + furnace.progress += dt; + if (furnace.progress >= furnace.recipe.time) { + const outItem = furnace.recipe.out; + if (ITEMS[outItem]) { + state.inv[outItem] = (state.inv[outItem] || 0) + furnace.recipe.outQty; + } else if (BLOCKS[outItem]) { + state.inv[outItem] = (state.inv[outItem] || 0) + furnace.recipe.outQty; + } + playSound("stone_build"); + state.activeFurnaces.delete(key); + if (key === state.currentFurnaceKey) { + renderFurnaceUI(); + } + } + } + } + + // src/world/weather.js + function updateWeather(dt) { + state.weatherTimer += dt; + if (state.weatherTimer >= state.weatherChangeInterval) { + state.weatherTimer = 0; + state.weatherChangeInterval = 60 + Math.random() * 120; + const nightChance = isNight() ? 0.25 : 0.4; + state.isRaining = Math.random() < nightChance; + } + const target = state.isRaining ? 0.4 + Math.random() * 0.01 : 0; + state.rainIntensity += (target - state.rainIntensity) * dt * 0.5; + if (state.rainIntensity < 0.01) state.rainIntensity = 0; + } + function updateRain(dt) { + if (!state.isRaining || state.rainIntensity < 0.01) { + state.raindrops.length = 0; + return; + } + const spawnRate = Math.floor(state.rainIntensity * 60 * dt); + for (let i = 0; i < spawnRate && state.raindrops.length < state.MAX_RAINDROPS; i++) { + state.raindrops.push({ + x: state.camX + Math.random() * state.W, + y: state.camY - 20, + vy: 400 + Math.random() * 200, + len: 8 + Math.random() * 12 + }); + } + for (let i = state.raindrops.length - 1; i >= 0; i--) { + const d = state.raindrops[i]; + d.y += d.vy * dt; + d.x -= 30 * dt; + if (d.y > state.camY + state.H + 20) { + state.raindrops.splice(i, 1); + } + } + } + function drawRain() { + if (state.raindrops.length === 0) return; + const ctx = state.ctx; + ctx.save(); + ctx.strokeStyle = "rgba(174,194,224,0.5)"; + ctx.lineWidth = 1.5; + ctx.beginPath(); + for (const d of state.raindrops) { + ctx.moveTo(d.x, d.y); + ctx.lineTo(d.x - 3, d.y + d.len); + } + ctx.stroke(); + ctx.restore(); + } + + // src/entities/mobs.js + var Entity = class { + constructor(x, y, w, h) { + this.x = x; + this.y = y; + this.w = w; + this.h = h; + this.vx = 0; + this.vy = 0; + this.hp = 3; + this.grounded = false; + this.inWater = false; + this.aiT = 0; + this.dir = 1; + } }; - + var Pig = class extends Entity { + constructor(x, y) { + super(x, y, 34, 24); + this.kind = "pig"; + this.hp = 2; + } + }; + var Chicken = class extends Entity { + constructor(x, y) { + super(x, y, 26, 22); + this.kind = "chicken"; + this.hp = 1; + } + }; + var Zombie = class extends Entity { + constructor(x, y) { + super(x, y, 34, 50); + this.kind = "zombie"; + this.hp = 4; + this.speed = 80 + Math.random() * 40; + } + }; + var Creeper = class extends Entity { + constructor(x, y) { + super(x, y, 34, 50); + this.kind = "creeper"; + this.hp = 4; + this.speed = 60 + Math.random() * 30; + this.fuse = 3.2; + } + }; + var Skeleton = class extends Entity { + constructor(x, y) { + super(x, y, 34, 50); + this.kind = "skeleton"; + this.hp = 4; + this.speed = 70 + Math.random() * 30; + this.shootCooldown = 0; + } + }; + + // src/ui/minimap.js + var minimapWrap = document.getElementById("minimapWrap"); + var minimapCanvas = document.getElementById("minimap"); + var minimapCtx = minimapCanvas.getContext("2d"); + var MINIMAP_COLORS = { + grass: "#4a8c2a", + dirt: "#6b3410", + stone: "#6a6a6a", + sand: "#d4b84a", + gravel: "#888", + clay: "#5a9ad4", + wood: "#a63d00", + planks: "#c46a10", + leaves: "#2a8a3a", + glass: "#aaddee", + water: "#2980b9", + coal: "#1a1a2a", + copper_ore: "#a05535", + iron_ore: "#b0b0b0", + gold_ore: "#d4a017", + diamond_ore: "#0090d0", + brick: "#8a2010", + tnt: "#c02020", + campfire: "#d08020", + torch: "#d0a020", + bedrock: "#1a1a1a", + flower: "#d03050", + bed: "#c03060", + ladder: "#a04000", + boat: "#6b3410" + }; + function initMinimap() { + document.getElementById("mapToggle").onclick = () => { + playSound("click"); + state.minimapOpen = !state.minimapOpen; + minimapWrap.style.display = state.minimapOpen ? "block" : "none"; + }; + } function renderMinimap() { - if (!minimapOpen) return; + if (!state.minimapOpen) return; const mW = minimapCanvas.width; const mH = minimapCanvas.height; - const scale = 2; // пикселей на блок - - // Область карты — центрирована на игроке - const pGX = Math.floor(player.x / TILE); - const biome = getCachedBiome(pGX); - const pGY = Math.floor(player.y / TILE); + const scale = 2; + const TILE2 = state.TILE; + const player = state.player; + const pGX = Math.floor(player.x / TILE2); + const pGY = Math.floor(player.y / TILE2); const viewW = Math.floor(mW / scale); const viewH = Math.floor(mH / scale); const startGX = pGX - Math.floor(viewW / 2); const startGY = pGY - Math.floor(viewH / 2); - - // Очищаем - minimapCtx.fillStyle = isNight() ? '#070816' : '#87CEEB'; + minimapCtx.fillStyle = isNight() ? "#070816" : "#87CEEB"; minimapCtx.fillRect(0, 0, mW, mH); - - // Рисуем блоки const imgData = minimapCtx.createImageData(mW, mH); const data = imgData.data; - for (let dx = 0; dx < viewW; dx++) { for (let dy = 0; dy < viewH; dy++) { const gx = startGX + dx; const gy = startGY + dy; const b = getBlock(gx, gy); - if (!b || b.dead || b.t === 'air') continue; - + if (!b || b.dead || b.t === "air") continue; const color = MINIMAP_COLORS[b.t]; if (!color) continue; - - // Парсим hex цвет - const r = parseInt(color.slice(1,3), 16); - const g = parseInt(color.slice(3,5), 16); - const bl = parseInt(color.slice(5,7), 16); - - // Заполняем scale x scale пикселей + const r = parseInt(color.slice(1, 3), 16); + const g = parseInt(color.slice(3, 5), 16); + const bl = parseInt(color.slice(5, 7), 16); for (let sx = 0; sx < scale; sx++) { for (let sy = 0; sy < scale; sy++) { const px = dx * scale + sx; @@ -1807,3876 +2373,1564 @@ function customConfirm(msg, onYes) { if (px >= mW || py >= mH) continue; const idx = (py * mW + px) * 4; data[idx] = r; - data[idx+1] = g; - data[idx+2] = bl; - data[idx+3] = 255; + data[idx + 1] = g; + data[idx + 2] = bl; + data[idx + 3] = 255; } } } } - minimapCtx.putImageData(imgData, 0, 0); - - // Игрок — белый пиксель по центру - minimapCtx.fillStyle = '#fff'; - minimapCtx.fillRect(Math.floor(mW/2) - 2, Math.floor(mH/2) - 2, 4, 4); - - // Другие игроки — жёлтые точки - for (const [sid, p] of otherPlayers) { - const dx = Math.floor(p.x / TILE) - startGX; - const dy = Math.floor(p.y / TILE) - startGY; + minimapCtx.fillStyle = "#fff"; + minimapCtx.fillRect(Math.floor(mW / 2) - 2, Math.floor(mH / 2) - 2, 4, 4); + for (const [sid, p] of state.otherPlayers) { + const dx = Math.floor(p.x / TILE2) - startGX; + const dy = Math.floor(p.y / TILE2) - startGY; if (dx >= 0 && dx < viewW && dy >= 0 && dy < viewH) { - minimapCtx.fillStyle = '#f1c40f'; + minimapCtx.fillStyle = "#f1c40f"; minimapCtx.fillRect(dx * scale - 1, dy * scale - 1, 3, 3); } } - - // Мобы — красные (враждебные) / зелёные (животные) - const allMobsForMap = getAllMobs(); + const allMobsForMap = state.isMultiplayer ? Array.from(state.serverMobs.values()) : state.mobs; for (const m of allMobsForMap) { - const dx = Math.floor(m.x / TILE) - startGX; - const dy = Math.floor(m.y / TILE) - startGY; + const dx = Math.floor(m.x / TILE2) - startGX; + const dy = Math.floor(m.y / TILE2) - startGY; if (dx >= 0 && dx < viewW && dy >= 0 && dy < viewH) { - const hostile = m.kind === 'zombie' || m.kind === 'creeper' || m.kind === 'skeleton'; - minimapCtx.fillStyle = hostile ? '#e74c3c' : '#2ecc71'; + const hostile = m.kind === "zombie" || m.kind === "creeper" || m.kind === "skeleton"; + minimapCtx.fillStyle = hostile ? "#e74c3c" : "#2ecc71"; minimapCtx.fillRect(dx * scale, dy * scale, 2, 2); } } } - - // ==================== ПЕЧЬ (ОБЖИГ) ==================== - const furnacePanel = document.getElementById('furnacePanel'); - const furnaceContent = document.getElementById('furnaceContent'); - let currentFurnaceKey = null; // "gx,gy" текущей открытой печи - - document.getElementById('furnaceClose').onclick = () => { - furnacePanel.style.display = 'none'; - currentFurnaceKey = null; - }; - - function openFurnaceUI(gx, gy) { - currentFurnaceKey = `${gx},${gy}`; - furnacePanel.style.display = 'block'; - renderFurnaceUI(); - } - - function renderFurnaceUI() { - if (!currentFurnaceKey) return; - - // Проверяем что печь всё ещё существует - const [fgx, fgy] = currentFurnaceKey.split(',').map(Number); - const fb = getBlock(fgx, fgy); - if (!fb || fb.t !== 'furnace') { - furnacePanel.style.display = 'none'; - currentFurnaceKey = null; - return; - } - - // Текущий процесс обжига - const active = activeFurnaces.get(currentFurnaceKey); - - let html = '
'; - - // Доступные рецепты — показываем только те, для которых есть ресурсы - for (let i = 0; i < SMELTING_RECIPES.length; i++) { - const recipe = SMELTING_RECIPES[i]; - const haveCount = inv[recipe.in] || 0; - const canSmelt = haveCount >= recipe.qty; - - // Иконка результата - const outDef = BLOCKS[recipe.out]; - const outItem = ITEMS[recipe.out]; - const iconStr = outItem ? outItem.icon : (outDef ? '🧱' : '❓'); - const nameStr = outItem ? outItem.n : (outDef ? outDef.n : recipe.out); - const inItem = ITEMS[recipe.in]; - const inDef = BLOCKS[recipe.in]; - const inName = inItem ? inItem.n : (inDef ? inDef.n : recipe.in); - - html += `
`; - html += `
${iconStr}
`; - html += `
`; - html += `
${nameStr}
`; - html += `
${inName} x${recipe.qty} (есть: ${haveCount}) • ${recipe.time}с
`; - html += `
`; - html += ``; - html += `
`; - } - - // Текущий прогресс - if (active) { - const pct = Math.min(100, Math.floor((active.progress / active.recipe.time) * 100)); - html += `
`; - html += `
🔥 Обжиг: ${pct}%
`; - html += `
`; - html += `
`; - html += `
`; - } - - html += '
'; - furnaceContent.innerHTML = html; - } - - // Глобальная функция для кнопки обжига - window._smelt = (recipeIdx) => { - if (!currentFurnaceKey) return; - const recipe = SMELTING_RECIPES[recipeIdx]; - if ((inv[recipe.in] || 0) < recipe.qty) return; - - // Уже обжигаем в этой печи? - if (activeFurnaces.has(currentFurnaceKey)) return; - - // Забираем ресурсы - inv[recipe.in] -= recipe.qty; - - // Запускаем обжиг - activeFurnaces.set(currentFurnaceKey, { - recipe: recipe, - progress: 0 - }); - - playSound('fire'); - rebuildHotbar(); - renderFurnaceUI(); - }; - - // Тик печей — вызывается в главном цикле - function tickFurnaces(dt) { - for (const [key, furnace] of activeFurnaces) { - furnace.progress += dt; - if (furnace.progress >= furnace.recipe.time) { - // Обжиг завершён — выдаём результат - const outItem = furnace.recipe.out; - if (ITEMS[outItem]) { - inv[outItem] = (inv[outItem] || 0) + furnace.recipe.outQty; - } else if (BLOCKS[outItem]) { - inv[outItem] = (inv[outItem] || 0) + furnace.recipe.outQty; - } - playSound('stone_build'); - activeFurnaces.delete(key); - - // Если эта печь открыта — обновляем UI - if (key === currentFurnaceKey) { - renderFurnaceUI(); - } - } - } - } - - - // ==================== ГОЛОСОВОЙ ЧАТ v3 ==================== - // ==================== ГОЛОСОВОЙ ЧАТ v3 ==================== -// Per-speaker architecture, AudioWorklet, VAD, Opus/PCM, spatial audio -// Replaces lines 1449-1665 in game.js - - let voiceSocket = null; - let voiceStream = null; - let audioCtx = null; - let voiceActive = false; - let voiceMode = 'near'; - const VOICE_SERVER = 'https://voicegrech.mkn8n.ru'; - - // Voice config - const VC = { - sampleRate: 16000, // 16kHz — sufficient for voice, saves 33% bandwidth - frameMs: 20, // 20ms frames = 320 samples @ 16kHz - samplesPerFrame: 320, // 16000 * 0.02 - vadThreshold: 0.0005, // RMS threshold for voice detection - vadHangover: 5, // 100ms hangover after speech ends - jbufTargetMs: 80, // Target jitter: 80ms (was 200ms) - jbufMinMs: 40, - jbufMaxMs: 200, - maxSpeakers: 6, - voiceRadius: 600, - opusBitrate: 16000, - posUpdateMs: 200, // Update position every 200ms (was 500ms) - }; - - // Codec state - let voiceCodec = 'pcm'; // 'opus' or 'pcm' - let voiceEncoder = null; // WebCodecs AudioEncoder - let voiceSeq = 0; - let voiceTimestamp = 0; - let wasSpeaking = false; - let silenceFrames = 0; - let captureNode = null; - let playbackNode = null; - - // Per-speaker map - const remoteSpeakers = new Map(); // socketId → { jitterBuf, lastFrame, gain, panner, lowpass, decoder, codec, x, y, name, mode, speaking, lastActive } - - // ==================== WORKLET CODE (inline strings) ==================== - - const voiceCaptureWorkletCode = ` -class VoiceCaptureProcessor extends AudioWorkletProcessor { - constructor() { - super(); - this._buf = new Float32Array(320); // 20ms @ 16kHz - this._pos = 0; - this._speaking = false; - this._silenceFrames = 0; - this._hangover = 5; // 100ms - this._vadThreshold = 0.0005; - this._lastRms = 0; + // src/game/modes.js + var MODES = [{ id: "mine", icon: "\u26CF\uFE0F" }, { id: "build", icon: "\u{1F9F1}" }]; + function mode() { + return MODES[state.modeIdx].id; } - process(inputs) { - const input = inputs[0]; - if (!input || !input[0]) return true; - const ch = input[0]; - let i = 0; - while (i < ch.length) { - const rem = this._buf.length - this._pos; - const n = Math.min(rem, ch.length - i); - this._buf.set(ch.subarray(i, i + n), this._pos); - this._pos += n; - i += n; - if (this._pos >= this._buf.length) { - this._processFrame(); - this._pos = 0; - } - } - return true; - } - _processFrame() { - let sum = 0; - for (let i = 0; i < this._buf.length; i++) sum += this._buf[i] * this._buf[i]; - const rms = Math.sqrt(sum / this._buf.length); - this._lastRms = rms; - - if (rms > this._vadThreshold) { - this._speaking = true; - this._silenceFrames = 0; - } else { - this._silenceFrames++; - if (this._silenceFrames > this._hangover) this._speaking = false; - } - - this.port.postMessage({ - type: 'frame', - samples: this._buf.slice(), - speaking: this._speaking, - rms: rms - }); - } -} -registerProcessor('voice-capture', VoiceCaptureProcessor); -`; - - const voicePlaybackWorkletCode = ` -class VoicePlaybackProcessor extends AudioWorkletProcessor { - constructor() { - super(); - this.speakers = new Map(); // id → { ringBuf, readPos, writePos, ready, gain, pan, lastSample, active } - this.RING_SIZE = 48000; // 3 seconds @ 16kHz - this.port.onmessage = (e) => { - const d = e.data; - if (d.type === 'addSpeaker') { - this.speakers.set(d.id, { - ringBuf: new Float32Array(this.RING_SIZE), - readPos: 0, writePos: 0, ready: 0, - gain: d.gain || 1, pan: d.pan || 0, - lastSample: 0, active: false, - jbufTarget: 320 * 4, // ~80ms in samples - fadeOut: 0 - }); - } else if (d.type === 'removeSpeaker') { - this.speakers.delete(d.id); - } else if (d.type === 'pushFrames') { - const sp = this.speakers.get(d.id); - if (!sp) return; - const frames = d.samples; // Float32Array - for (let i = 0; i < frames.length; i++) { - sp.ringBuf[sp.writePos] = frames[i]; - sp.writePos = (sp.writePos + 1) % this.RING_SIZE; - if (sp.ready < this.RING_SIZE) sp.ready++; - } - sp.active = true; - sp.fadeOut = 0; - } else if (d.type === 'updateSpatial') { - const sp = this.speakers.get(d.id); - if (sp) { - sp.gain = d.gain; - sp.pan = d.pan; - } - } + function initModes() { + const modeBtn = document.getElementById("modeBtn"); + modeBtn.onclick = () => { + playSound("click"); + state.modeIdx = (state.modeIdx + 1) % MODES.length; + modeBtn.textContent = MODES[state.modeIdx].icon; }; } - process(inputs, outputs) { - const output = outputs[0]; - if (!output || !output[0]) return true; - const left = output[0]; - const right = output[1] || output[0]; // mono fallback - - // Clear output - for (let i = 0; i < left.length; i++) { left[i] = 0; right[i] = 0; } - - for (const [id, sp] of this.speakers) { - if (sp.ready < 1 && sp.active) { - // Fade out over ~20ms (128 samples) - sp.fadeOut++; - if (sp.fadeOut > 128) { sp.active = false; continue; } - const fade = 1 - (sp.fadeOut / 128); - const g = sp.gain * fade; - const lg = g * Math.cos((sp.pan + 1) * Math.PI / 4); - const rg = g * Math.sin((sp.pan + 1) * Math.PI / 4); - // Repeat last sample with fade - for (let i = 0; i < left.length; i++) { - left[i] += sp.lastSample * lg; - right[i] += sp.lastSample * rg; - } - continue; - } - if (!sp.active && sp.ready < sp.jbufTarget) continue; // Wait for jitter buffer to fill - if (!sp.active && sp.ready >= sp.jbufTarget) sp.active = true; - if (!sp.active) continue; - - sp.fadeOut = 0; - const g = sp.gain; - // Constant-power pan law - const lg = g * Math.cos((sp.pan + 1) * Math.PI / 4); - const rg = g * Math.sin((sp.pan + 1) * Math.PI / 4); - - for (let i = 0; i < left.length; i++) { - if (sp.ready > 0) { - const s = sp.ringBuf[sp.readPos]; - sp.lastSample = s; - left[i] += s * lg; - right[i] += s * rg; - sp.readPos = (sp.readPos + 1) % this.RING_SIZE; - sp.ready--; - } else { - // Underrun — fade from last sample - sp.lastSample *= 0.85; - left[i] += sp.lastSample * lg; - right[i] += sp.lastSample * rg; - } - } - } - return true; - } -} -registerProcessor('voice-playback', VoicePlaybackProcessor); -`; - // ==================== Opus ENCODE/DECODE ==================== - - async function initVoiceEncoder() { - if (false && 'AudioEncoder' in window) { - try { - // Check if Opus is supported - const support = await AudioEncoder.isConfigSupported({ - codec: 'opus', - sampleRate: VC.sampleRate, - numberOfChannels: 1, - bitrate: VC.opusBitrate - }); - if (!support.supported) throw new Error('Opus not supported'); - - voiceEncoder = new AudioEncoder({ - output: (chunk) => { - // chunk: EncodedAudioChunk with Opus data - const data = new Uint8Array(chunk.byteLength); - chunk.copyTo(data); - // Send as binary frame via Socket.IO - console.log('[voice] TX Opus chunk, seq:', voiceSeq, 'size:', data.buffer.byteLength); - voiceSocket.emit('voice_data', { - codec: 'opus', - data: data.buffer, - seq: voiceSeq++, - ts: chunk.timestamp, - speaking: true - }); - }, - error: (e) => { - console.error('[voice] encoder error:', e); - voiceCodec = 'pcm'; - voiceEncoder = null; - } - }); - - await voiceEncoder.configure({ - codec: 'opus', - sampleRate: VC.sampleRate, - numberOfChannels: 1, - bitrate: VC.opusBitrate - }); - - voiceCodec = 'opus'; - console.log('[voice] WebCodecs Opus encoder initialized @', VC.opusBitrate, 'bps'); + // src/input/mouse-handler.js + var mouse = { x: null, y: null }; + var miningHeld = false; + var miningInterval = null; + function initMouseHandlers() { + const canvas = state.canvas; + canvas.addEventListener("pointermove", (e) => { + const r = canvas.getBoundingClientRect(); + mouse.x = e.clientX - r.left; + mouse.y = e.clientY - r.top; + }); + canvas.addEventListener("pointerdown", (e) => { + if (state.craftOpen) return; + if (state.player.hp <= 0) return; + const r = canvas.getBoundingClientRect(); + const sx = e.clientX - r.left; + const sy = e.clientY - r.top; + const wx = sx + state.camX; + const wy = sy + state.camY; + const gx = Math.floor(wx / state.TILE); + const gy = Math.floor(wy / state.TILE); + const b = getBlock(gx, gy); + if (state.player.sleeping && b && b.t === "bed") { + state.player.sleeping = false; return; - } catch (e) { - console.warn('[voice] WebCodecs Opus not available, PCM fallback:', e.message); } - } - voiceCodec = 'pcm'; - console.log('[voice] Using PCM @', VC.sampleRate, 'Hz'); - } - - async function initDecoderForSpeaker(speakerId, codec) { - const sp = remoteSpeakers.get(speakerId); - if (!sp) return; - - if (codec === 'opus' && 'AudioDecoder' in window) { - try { - const decoder = new AudioDecoder({ - output: (audioData) => { - const samples = new Float32Array(audioData.numberOfFrames); - audioData.copyTo(samples, { planeIndex: 0 }); - audioData.close(); - // Push decoded PCM to worklet - if (playbackNode) { - playbackNode.port.postMessage({ - type: 'pushFrames', - id: speakerId, - samples: samples - }); + if (state.player.sleeping) return; + if (b && b.t === "furnace" && mode() === "mine") { + openFurnaceUI(gx, gy); + return; + } + if (mode() === "mine") { + if (state.isMultiplayer) { + for (const [id, sm] of state.serverMobs) { + if (sm.dead) continue; + if (wx >= sm.x && wx <= sm.x + sm.w && wy >= sm.y && wy <= sm.y + sm.h) { + let dmg = 1; + const swordTypes = ["iron_sword", "stone_sword", "wood_sword"]; + for (const st of swordTypes) { + if (state.inv[st] > 0) { + dmg = TOOLS[st].damage || 3; + useTool(st); + break; + } + } + state.socket.emit("mob_hurt", { id: sm.id, dmg }); + playSound("attack"); + return; } - }, - error: (e) => { - console.error('[voice] decoder error for', speakerId, e); - sp.codec = 'pcm'; // Fallback to PCM - } - }); - - await decoder.configure({ - codec: 'opus', - sampleRate: VC.sampleRate, - numberOfChannels: 1 - }); - - sp.decoder = decoder; - sp.codec = 'opus'; - console.log('[voice] Opus decoder initialized for', speakerId); - } catch (e) { - console.warn('[voice] Opus decoder failed, PCM fallback:', e.message); - sp.codec = 'pcm'; - } - } else { - sp.codec = 'pcm'; - } - } - - // ==================== RemoteSpeaker helper ==================== - - function createRemoteSpeaker(socketId, name, codec) { - const sp = { - id: socketId, - name: name || '???', - codec: codec || 'pcm', - decoder: null, - x: 0, y: 0, - mode: 'near', - speaking: false, - lastActive: Date.now(), - // Audio nodes per speaker (managed on main thread for smooth ramps) - gainNode: audioCtx.createGain(), - pannerNode: audioCtx.createStereoPanner(), - lowpassNode: audioCtx.createBiquadFilter(), - }; - // lowpass for distance muffling - sp.lowpassNode.type = 'lowpass'; - sp.lowpassNode.frequency.value = 4000; - sp.lowpassNode.Q.value = 0.7; - // Connect: lowpass → panner → gain → (connected to mixer later) - sp.lowpassNode.connect(sp.pannerNode); - sp.pannerNode.connect(sp.gainNode); - sp.gainNode.gain.value = 1.0; // Start with volume (worklet needs non-zero gain) - - remoteSpeakers.set(socketId, sp); - // Register speaker in playback worklet - if (playbackNode) { - playbackNode.port.postMessage({ type: 'addSpeaker', id: socketId, gain: 1.0, pan: 0 }); - console.log('[voice] addSpeaker posted to worklet, id:', socketId?.substring(0,8), 'gain:', sp.gainNode.gain.value); - } - initDecoderForSpeaker(socketId, codec); - return sp; - } - - function removeRemoteSpeaker(socketId) { - const sp = remoteSpeakers.get(socketId); - if (!sp) return; - try { sp.gainNode.disconnect(); } catch(e) {} - try { sp.pannerNode.disconnect(); } catch(e) {} - try { sp.lowpassNode.disconnect(); } catch(e) {} - if (sp.decoder) { try { sp.decoder.close(); } catch(e) {} } - remoteSpeakers.delete(socketId); - if (playbackNode) { - playbackNode.port.postMessage({ type: 'removeSpeaker', id: socketId }); - } - } - - function updateSpeakerSpatial(sp) { - if (!audioCtx) return; - // Calculate distance-based audio - const dx = sp.x - player.x; - const dy = sp.y - player.y; - const dist = Math.sqrt(dx * dx + dy * dy); - - const now = audioCtx.currentTime; - const rampTime = 0.05; // 50ms smooth ramp - - if (sp.mode === 'world' && voiceMode === 'world') { - // World mode: full volume, no panning, no distance filter - sp.gainNode.gain.cancelScheduledValues(now); - sp.gainNode.gain.linearRampToValueAtTime(1.0, now + rampTime); - sp.pannerNode.pan.cancelScheduledValues(now); - sp.pannerNode.pan.linearRampToValueAtTime(0, now + rampTime); - sp.lowpassNode.frequency.cancelScheduledValues(now); - sp.lowpassNode.frequency.linearRampToValueAtTime(4000, now + rampTime); - } else if (dist > VC.voiceRadius) { - // Out of range - sp.gainNode.gain.cancelScheduledValues(now); - sp.gainNode.gain.linearRampToValueAtTime(0, now + rampTime); - } else { - // Near mode with spatial audio - const volume = 1 / (1 + dist / 150); // Perceptual falloff - const pan = Math.max(-1, Math.min(1, dx / 300)); // Stereo pan based on X - const cutoff = 4000 - (3800 * (dist / VC.voiceRadius)); // Muffle at distance - - sp.gainNode.gain.cancelScheduledValues(now); - sp.gainNode.gain.linearRampToValueAtTime(volume, now + rampTime); - sp.pannerNode.pan.cancelScheduledValues(now); - sp.pannerNode.pan.linearRampToValueAtTime(pan, now + rampTime); - sp.lowpassNode.frequency.cancelScheduledValues(now); - sp.lowpassNode.frequency.linearRampToValueAtTime(Math.max(200, cutoff), now + rampTime); - } - - // Update worklet spatial params - if (playbackNode) { - const currentGain = sp.gainNode.gain.value; - const currentPan = sp.pannerNode.pan.value; - if (currentGain > 0.01) console.log('[voice] updateSpatial, id:', sp.id?.substring(0,8), 'gain:', currentGain.toFixed(3), 'pan:', currentPan.toFixed(3)); - playbackNode.port.postMessage({ - type: 'updateSpatial', - id: sp.id, - gain: currentGain, - pan: currentPan - }); - } - } - - // ==================== UI ==================== - - const voiceBtn = document.createElement('div'); - voiceBtn.innerHTML = '🎤/'; - voiceBtn.title = 'Голосовой чат (выкл)'; - voiceBtn.style.cssText = 'position:absolute;top:74px;right:130px;width:52px;height:52px;border-radius:12px;background:#555;z-index:200;display:flex;align-items:center;justify-content:center;font-size:24px;cursor:pointer;border:2px solid rgba(255,255,255,0.9);box-shadow:0 4px 0 rgba(0,0,0,0.5);pointer-events:auto;'; - document.querySelector('.ui').appendChild(voiceBtn); - - const voiceModeBtn = document.createElement('div'); - voiceModeBtn.innerHTML = '📢'; - voiceModeBtn.title = 'Режим: рядом (600px)'; - voiceModeBtn.style.cssText = 'position:absolute;top:74px;right:190px;width:48px;height:52px;border-radius:12px;background:#3498db;z-index:200;display:flex;align-items:center;justify-content:center;font-size:20px;cursor:pointer;border:2px solid rgba(255,255,255,0.7);box-shadow:0 4px 0 rgba(0,0,0,0.5);pointer-events:auto;color:#fff;font-weight:bold;'; - document.querySelector('.ui').appendChild(voiceModeBtn); - voiceModeBtn.onclick = () => { - if (voiceMode === 'near') { - voiceMode = 'world'; - voiceModeBtn.innerHTML = '🌍'; - voiceModeBtn.title = 'Режим: весь мир'; - voiceModeBtn.style.background = '#e67e22'; - } else { - voiceMode = 'near'; - voiceModeBtn.innerHTML = '📢'; - voiceModeBtn.title = 'Режим: рядом (600px)'; - voiceModeBtn.style.background = '#3498db'; - } - if (voiceSocket && voiceSocket.connected) { - voiceSocket.emit('voice_mode', { mode: voiceMode }); - } - // Update spatial for all speakers - for (const [id, sp] of remoteSpeakers) updateSpeakerSpatial(sp); - }; - - // Speaking indicators per players - const speakingIndicator = document.createElement('div'); - speakingIndicator.style.cssText = 'position:absolute;top:130px;right:10px;z-index:200;display:none;background:rgba(0,0,0,0.7);color:#2ecc71;padding:4px 8px;border-radius:6px;font-size:12px;max-width:200px;line-height:1.4;'; - document.querySelector('.ui').appendChild(speakingIndicator); - let speakingTimeouts = new Map(); // socketId → timeout - - // Codec indicator - const codecIndicator = document.createElement('div'); - codecIndicator.style.cssText = 'position:absolute;top:180px;right:10px;z-index:200;font-size:10px;color:rgba(255,255,255,0.5);pointer-events:none;'; - codecIndicator.textContent = ''; - document.querySelector('.ui').appendChild(codecIndicator); - - // ==================== VOICE ON/OFF ==================== - - voiceBtn.onclick = async () => { - if (voiceActive) { - // === DISABLE === - voiceActive = false; - voiceBtn.innerHTML = '🎤/'; - voiceBtn.style.background = '#555'; - codecIndicator.textContent = ''; - - // Clean up capture - if (captureNode) { captureNode.disconnect(); captureNode = null; } - if (voiceStream) { voiceStream.getTracks().forEach(t => t.stop()); voiceStream = null; } - - // Clean up playback - if (playbackNode) { playbackNode.disconnect(); playbackNode = null; } - - // Clean up per-speaker nodes - for (const [id, sp] of remoteSpeakers) { - try { sp.gainNode.disconnect(); } catch(e) {} - try { sp.pannerNode.disconnect(); } catch(e) {} - try { sp.lowpassNode.disconnect(); } catch(e) {} - if (sp.decoder) { try { sp.decoder.close(); } catch(e) {} } - } - remoteSpeakers.clear(); - - // Clean up encoder - if (voiceEncoder) { try { voiceEncoder.close(); } catch(e) {} voiceEncoder = null; } - - if (audioCtx) { audioCtx.close(); audioCtx = null; } - if (voiceSocket) { voiceSocket.disconnect(); voiceSocket = null; } - speakingIndicator.style.display = 'none'; - return; - } - - // === ENABLE === - try { - voiceStream = await navigator.mediaDevices.getUserMedia({ - audio: { - echoCancellation: true, - noiseSuppression: true, - autoGainControl: true, - echoCancellationType: 'browser', - noiseSuppressionType: 'browser', - sampleRate: { ideal: VC.sampleRate }, - channelCount: { ideal: 1 } - } - }); - - audioCtx = new AudioContext({ sampleRate: VC.sampleRate }); - if (audioCtx.state === 'suspended') await audioCtx.resume(); - console.log('[voice] AudioContext:', audioCtx.state, 'sampleRate:', audioCtx.sampleRate); - - // Register worklets via Blob URLs - const captureURL = URL.createObjectURL(new Blob([voiceCaptureWorkletCode], { type: 'application/javascript' })); - const playbackURL = URL.createObjectURL(new Blob([voicePlaybackWorkletCode], { type: 'application/javascript' })); - - await audioCtx.audioWorklet.addModule(captureURL); - await audioCtx.audioWorklet.addModule(playbackURL); - URL.revokeObjectURL(captureURL); - URL.revokeObjectURL(playbackURL); - console.log('[voice] AudioWorklets registered'); - - // Connect mic → capture worklet - const micSource = audioCtx.createMediaStreamSource(voiceStream); - captureNode = new AudioWorkletNode(audioCtx, 'voice-capture'); - micSource.connect(captureNode); - // Do NOT connect captureNode to destination — we don't hear ourselves - - // Connect playback worklet → per-speaker gain nodes → destination - playbackNode = new AudioWorkletNode(audioCtx, 'voice-playback', { numberOfOutputs: 1, outputChannelCount: [2] }); - playbackNode.connect(audioCtx.destination); - // Per-speaker nodes will connect between playback worklet output and destination - // Actually: playback worklet mixes internally → stereo output → destination - // Per-speaker Web Audio nodes (lowpass, pan, gain) used for spatial UPDATES only (values sent to worklet via messages) - // The actual mixing happens inside the worklet - - // Connect to voice server FIRST so capture frames have a socket - voiceSocket = io(VOICE_SERVER, { transports: ['websocket'] }); - - // Handle capture frames - voiceSeq = 0; - voiceTimestamp = 0; - wasSpeaking = false; - voiceActive = true; // Enable capture BEFORE onmessage handler - let _frameCount = 0; - captureNode.port.onmessage = (e) => { - const { type, samples, speaking, rms } = e.data; - if (type !== 'frame') return; - _frameCount++; - if (_frameCount <= 5 || _frameCount % 100 === 0) { - console.log('[voice] capture frame #', _frameCount, 'rms:', rms?.toFixed(4), 'speaking:', speaking, 'voiceActive:', voiceActive, 'socket:', !!voiceSocket, 'connected:', voiceSocket?.connected, 'codec:', voiceCodec); - } - if (!voiceActive || !voiceSocket || !voiceSocket.connected) { - - return; - } - - voiceTimestamp += VC.samplesPerFrame; // 320 samples * (1/16000) = 20ms per frame - - if (!speaking && !wasSpeaking) { - // Complete silence — don't transmit - silenceFrames++; - return; - } - - if (voiceCodec === 'opus' && voiceEncoder) { - // Encode with Opus via WebCodecs - try { - const audioData = new AudioData({ - format: 'float32-planar', - sampleRate: VC.sampleRate, - numberOfFrames: samples.length, - numberOfChannels: 1, - timestamp: voiceTimestamp * (1000000 / VC.sampleRate), // microseconds - data: samples - }); - voiceEncoder.encode(audioData); - audioData.close(); - } catch (err) { - // Fallback: send as PCM - sendPCMFrame(samples, speaking, wasSpeaking); - } - } else { - sendPCMFrame(samples, speaking, wasSpeaking); - } - - wasSpeaking = speaking; - silenceFrames = 0; - }; - - function sendPCMFrame(samples, isSpeaking, wasSp) { - const int16 = new Int16Array(samples.length); - for (let i = 0; i < samples.length; i++) { - const s = Math.max(-1, Math.min(1, samples[i])); - int16[i] = s < 0 ? s * 0x8000 : s * 0x7FFF; - } - voiceSocket.emit('voice_data', { - codec: 'pcm', - data: int16.buffer, - seq: voiceSeq++, - ts: performance.now(), - speaking: isSpeaking || wasSp - }); - } - - // Initialize encoder - await initVoiceEncoder(); - codecIndicator.textContent = voiceCodec === 'opus' ? '🔊 Opus' : '🔊 PCM'; - - // Voice socket already created above - - voiceSocket.on('connect', () => { - console.log('[voice] Connected, id:', voiceSocket.id, 'codec:', voiceCodec); - voiceSocket.emit('voice_join', { - world_id: worldId, - x: player.x, y: player.y, - name: playerName || 'Игрок', - mode: voiceMode, - codec: voiceCodec - }); - }); - - voiceSocket.on('connect_error', (err) => { - console.error('[voice] Connect error:', err.message); - }); - - voiceSocket.on('voice_in', (payload) => { - console.log('[voice] RX voice_in, codec:', payload.codec, 'dataSize:', payload.data?.byteLength || payload.data?.length || 'N/A', 'from:', payload.meta?.from?.substring(0,8)); - const { data, meta } = payload; - if (!audioCtx || audioCtx.state === 'closed') { console.warn('[voice] audioCtx missing/closed'); return; } - - let sp = remoteSpeakers.get(meta.from); - if (!sp) { - // New speaker — create per-speaker audio nodes - sp = createRemoteSpeaker(meta.from, meta.name, meta.codec || 'pcm'); - } - - // Update position - sp.x = meta.x || 0; - sp.y = meta.y || 0; - sp.mode = meta.mode || 'near'; - sp.lastActive = Date.now(); - updateSpeakerSpatial(sp); - - // Decode and push to worklet - if ((meta.codec || 'pcm') === 'opus' && sp.decoder) { - // Opus decode - try { - const uint8 = new Uint8Array(data); - const chunk = new EncodedAudioChunk({ - type: 'key', // Opus frames are self-decodable - timestamp: performance.now() * 1000, // microseconds - data: uint8 - }); - sp.decoder.decode(chunk); - } catch (err) { - // Opus decode failed, try PCM fallback - decodeAndPushPCM(sp.id, data); - } - } else { - decodeAndPushPCM(sp.id, data); - } - - // Update speaking indicator - sp.speaking = true; - speakingIndicator.style.display = 'block'; - speakingIndicator.textContent = '🔊 ' + sp.name; - clearTimeout(speakingTimeouts.get(meta.from)); - speakingTimeouts.set(meta.from, setTimeout(() => { - sp.speaking = false; - // Check if anyone is still speaking - let anyoneSpeaking = false; - for (const [, s] of remoteSpeakers) { if (s.speaking) { anyoneSpeaking = true; break; } } - if (!anyoneSpeaking) speakingIndicator.style.display = 'none'; - speakingTimeouts.delete(meta.from); - }, 1500)); - }); - - voiceSocket.on('voice_leave', (data) => { - removeRemoteSpeaker(data.id); - }); - - voiceSocket.on('disconnect', () => { - console.log('[voice] Disconnected'); - // Clear all speakers on disconnect - for (const [id] of remoteSpeakers) removeRemoteSpeaker(id); - }); - - // voiceActive already set to true above - voiceBtn.textContent = '🎤'; - voiceBtn.style.background = '#2ecc71'; - console.log('[voice] Voice chat ACTIVE, codec:', voiceCodec); - - } catch(e) { - console.error('[voice] Error:', e); - voiceBtn.style.background = '#e74c3c'; - } - }; - - // ==================== PCM decode helper ==================== - - function decodeAndPushPCM(speakerId, buffer) { - console.log('[voice] decodeAndPushPCM, id:', speakerId?.substring(0,8), 'bufSize:', buffer?.byteLength || buffer?.length || 'N/A'); - const int16 = new Int16Array(buffer); - const float32 = new Float32Array(int16.length); - for (let i = 0; i < int16.length; i++) { - float32[i] = int16[i] / (int16[i] < 0 ? 0x8000 : 0x7FFF); - } - if (playbackNode) { - playbackNode.port.postMessage({ - type: 'pushFrames', - id: speakerId, - samples: float32 - }); - } - } - - // ==================== Voice position update ==================== - - let voicePosT = 0; - - // Клик на часы для включения ночи - todEl.style.cursor = 'pointer'; - todEl.onclick = () => { - playSound('click'); - worldTime = 0.6; // Устанавливаем ночь - isNightTime = true; - }; - - function rebuildHotbar(){ - hotbarEl.innerHTML=''; - - // Показываем последние 5 выбранных предметов (если они есть в инвентаре) - const items = recentItems.filter(id => inv[id] > 0).slice(0, 5); - - for(const id of items){ - const s = document.createElement('div'); - s.className = 'slot'+(id===selected?' sel':''); - if(BLOCKS[id]) { - s.style.backgroundImage = `url(${tex[id].toDataURL()})`; - s.style.backgroundSize = 'cover'; - } else if(ITEMS[id]) { - s.textContent = ITEMS[id].icon; - } else if(TOOLS[id]) { - s.textContent = TOOLS[id].icon; - } else if(id === 'iron_armor') { - s.textContent = '🛡️'; - s.style.background = 'linear-gradient(135deg, #95a5a6 0%, #7f8c8d 100%)'; - } - const c = document.createElement('div'); - c.className='count'; - c.textContent = inv[id]; - s.appendChild(c); - s.onclick = () => { - playSound('click'); // Звук клика по инвентарю - if(selected === id) { - // Повторный клик — снимаем выбор, возвращаем к первому блоку - selected = recentItems.find(rid => BLOCKS[rid] && rid !== id) || recentItems[0] || 'dirt'; - } else { - selected = id; - // Обновляем список последних предметов - recentItems = recentItems.filter(item => item !== id); // Удаляем если уже есть - recentItems.unshift(id); // Добавляем в начало - recentItems = recentItems.slice(0, 5); // Оставляем только 5 - } - rebuildHotbar(); - }; - - // Показываем индикатор надетой брони - if(id === 'iron_armor' && player.equippedArmor === 'iron_armor') { - const equipped = document.createElement('div'); - equipped.className = 'equipped-indicator'; - equipped.textContent = '✓'; - s.appendChild(equipped); - } - - // Durability bar для инструментов - if(TOOLS[id] && inv[id] > 0) { - // Находим текущую прочность - let curDur = 0, maxDur = TOOLS[id].durability; - for (const [tid, dur] of toolDurability) { - if (dur.type === id) { - curDur = dur.current; - maxDur = dur.max; - break; } } - if (maxDur > 0) { - const bar = document.createElement('div'); - bar.style.cssText = `position:absolute;bottom:0;left:0;right:0;height:3px;background:#333;border-radius:0 0 6px 6px;overflow:hidden;`; - const fill = document.createElement('div'); - const pct = curDur / maxDur; - const color = pct > 0.5 ? '#2ecc71' : pct > 0.25 ? '#f39c12' : '#e74c3c'; - fill.style.cssText = `width:${pct*100}%;height:100%;background:${color};`; - bar.appendChild(fill); - s.appendChild(bar); - } - } - hotbarEl.appendChild(s); - } - } - - function renderInventory() { - inventoryGrid.innerHTML = ''; - - // Создаём сетку инвентаря 7x3 - const items = Object.keys(inv).filter(id => inv[id] > 0); - - // Добавляем пустые слоты для полной сетки - for(let i = 0; i < 21; i++) { - const slot = document.createElement('div'); - slot.className = 'inv-slot' + (i < items.length && items[i] === selected ? ' sel' : ''); - - if(i < items.length) { - const id = items[i]; - if(BLOCKS[id]) { - slot.style.backgroundImage = `url(${tex[id].toDataURL()})`; - slot.style.backgroundSize = 'cover'; - } else if(ITEMS[id]) { - slot.textContent = ITEMS[id].icon; - } else if(TOOLS[id]) { - slot.textContent = TOOLS[id].icon; - } else if(id === 'iron_armor') { - slot.textContent = '🛡️'; - slot.style.background = 'linear-gradient(135deg, #95a5a6 0%, #7f8c8d 100%)'; - } - - const count = document.createElement('div'); - count.className = 'inv-count'; - count.textContent = inv[id]; - slot.appendChild(count); - - slot.onclick = () => { - playSound('click'); // Звук клика по инвентарю - if(selected === id) { - selected = recentItems.find(rid => BLOCKS[rid] && rid !== id) || recentItems[0] || 'dirt'; - } else { - selected = id; - recentItems = recentItems.filter(item => item !== id); - recentItems.unshift(id); - recentItems = recentItems.slice(0, 5); - } - rebuildHotbar(); - renderInventory(); - }; - - // Двойной клик для надевания брони - slot.ondblclick = () => { - if(id === 'iron_armor' && inv.iron_armor > 0) { - // Если уже надета броня - снимаем её - if(player.equippedArmor === 'iron_armor') { - player.equippedArmor = null; - player.armor = 0; - console.log('[ARMOR] Iron armor unequipped'); - } else { - // Надеваем броню - player.equippedArmor = 'iron_armor'; - player.armor = BLOCKS['iron_armor'].armor; - console.log('[ARMOR] Iron armor equipped - armor:', player.armor); + for (let i = state.mobs.length - 1; i >= 0; i--) { + const m = state.mobs[i]; + if (wx >= m.x && wx <= m.x + m.w && wy >= m.y && wy <= m.y + m.h) { + let dmg = 1; + const swordTypes = ["iron_sword", "stone_sword", "wood_sword"]; + for (const st of swordTypes) { + if (state.inv[st] > 0) { + dmg = TOOLS[st].damage || 3; + useTool(st); + break; + } } - playSound('click'); - renderInventory(); - } - if(id === 'gold_armor' && inv.gold_armor > 0) { - if(player.equippedArmor === 'gold_armor') { - player.equippedArmor = null; - player.armor = 0; - } else { - player.equippedArmor = 'gold_armor'; - player.armor = ITEMS['gold_armor'].armor; + m.hp -= dmg; + m.vx += (m.x - state.player.x) * 2; + m.vy -= 200; + playSound("attack"); + if (m.hp <= 0) { + if (m.kind === "chicken") playSound("hurt_chicken"); + state.inv.meat += m.kind === "chicken" ? 1 : 2; + if (m.kind === "skeleton") { + state.inv.arrow += 2 + Math.floor(Math.random() * 3); + if (Math.random() < 0.15) state.inv.bow = (state.inv.bow || 0) + 1; + } + state.mobs.splice(i, 1); + rebuildHotbar(); } - playSound('click'); - renderInventory(); - } - }; - } - - inventoryGrid.appendChild(slot); - } - } - - function canCraft(r){ - console.log('[CRAFT] Checking recipe for:', r.out, '- cost:', r.cost); - for(const res in r.cost){ - const have = inv[res] || 0; - const need = r.cost[res]; - console.log('[CRAFT] Resource:', res, '- have:', have, '- need:', need, '- can craft:', have >= need); - if(have < need) return false; - } - return true; - } - function renderCraft(){ - recipesEl.innerHTML=''; - for(const r of RECIPES){ - const row = document.createElement('div'); - row.className='recipe'; - const reqLv = r.requiredLevel || 1; - const locked = player.level < reqLv; - const icon = document.createElement('div'); - icon.className='ricon'; - // Иконка — блок, инструмент или предмет - if(tex[r.out]){ - icon.style.backgroundImage = `url(${tex[r.out].toDataURL()})`; - } else if(TOOLS[r.out]){ - icon.textContent = TOOLS[r.out].icon; - icon.style.fontSize = '24px'; - icon.style.display = 'flex'; - icon.style.alignItems = 'center'; - icon.style.justifyContent = 'center'; - } else if(ITEMS[r.out]){ - icon.textContent = ITEMS[r.out].icon; - icon.style.fontSize = '24px'; - icon.style.display = 'flex'; - icon.style.alignItems = 'center'; - icon.style.justifyContent = 'center'; - } - const info = document.createElement('div'); - info.className='rinfo'; - const nm = document.createElement('div'); - nm.className='rname'; - const itemName = BLOCKS[r.out]?.n || TOOLS[r.out]?.n || ITEMS[r.out]?.n || r.out; - nm.textContent = `${itemName} x${r.qty}` + (locked ? ` (Lv.${reqLv})` : ''); - if(locked) { nm.style.color = '#888'; nm.style.textDecoration = 'line-through'; } - const cs = document.createElement('div'); - cs.className='rcost'; - cs.textContent = Object.keys(r.cost).map(x => { - const cn = BLOCKS[x]?.n || TOOLS[x]?.n || ITEMS[x]?.n || x; - return `${cn}: ${(inv[x]||0)}/${r.cost[x]}`; - }).join(' '); - if(locked) cs.style.color = '#666'; - info.appendChild(nm); info.appendChild(cs); - const btn = document.createElement('button'); - btn.className='rcraft'; - btn.textContent='Создать'; - btn.disabled = !canCraft(r) || locked; - if(locked) btn.title = `Требуется уровень ${reqLv}`; - btn.onclick = () => { - if(!canCraft(r) || locked) return; - playSound('click'); - for(const res in r.cost) inv[res]-=r.cost[res]; - inv[r.out] = (inv[r.out]||0) + r.qty; - if(TOOLS[r.out]) addTool(r.out); - rebuildHotbar(); - renderCraft(); - }; - row.appendChild(icon); row.appendChild(info); row.appendChild(btn); - recipesEl.appendChild(row); - } - } - - let craftOpen=false; - let inventoryOpen = false; - - document.getElementById('craftBtn').onclick = () => { - playSound('click'); // Звук клика по кнопке - craftOpen = !craftOpen; - craftPanel.style.display = craftOpen ? 'block' : 'none'; - if(craftOpen) { - renderCraft(); - // Закрываем инвентарь если открыт крафт - inventoryOpen = false; - inventoryPanel.style.display = 'none'; - } - }; - document.getElementById('craftClose').onclick = () => { - playSound('click'); // Звук клика по кнопке - craftOpen = false; - craftPanel.style.display = 'none'; - }; - - // Кнопка открытия инвентаря - document.getElementById('invToggle').onclick = () => { - playSound('click'); // Звук клика по кнопке - inventoryOpen = !inventoryOpen; - inventoryPanel.style.display = inventoryOpen ? 'block' : 'none'; - if(inventoryOpen) { - renderInventory(); - // Закрываем крафт если открыт инвентарь - craftOpen = false; - craftPanel.style.display = 'none'; - } - }; - - document.getElementById('inventoryClose').onclick = () => { - playSound('click'); // Звук клика по кнопке - inventoryOpen = false; - inventoryPanel.style.display = 'none'; - }; - - // Кнопка сохранения игры (только для одиночного режима) - const saveBtn = document.getElementById('saveBtn'); - saveBtn.onclick = () => { - playSound('click'); - saveGame(); - customAlert('Игра сохранена!'); - }; - - // Кнопка сброса игры (удаление сохранения и создание нового мира) - const resetBtn = document.getElementById('resetBtn'); - resetBtn.onclick = () => { - customConfirm('Вы уверены, что хотите удалить сохранение и начать новую игру?', () => { - playSound('click'); - - // Удаляем сохранение из localStorage - try { - localStorage.removeItem(SAVE_KEY); - console.log('Сохранение удалено из localStorage'); - } catch (e) { - console.warn('Ошибка удаления сохранения:', e); - } - - // Сбрасываем in-memory сохранение - inMemorySave = null; - - // Генерируем новый worldId - worldId = Math.random().toString(36).substring(2, 10); - console.log('Новый worldId после сброса:', worldId); - - // Обновляем URL - try { - const newUrl = new URL(window.location.href); - newUrl.searchParams.set('world', worldId); - const newUrlString = newUrl.toString(); - - if (typeof window.history !== 'undefined' && typeof window.history.replaceState === 'function') { - window.history.replaceState(null, '', newUrlString); - console.log('URL обновлён:', newUrlString); - } - } catch (e) { - console.error('Ошибка обновления URL:', e); - } - - // Перезагружаем страницу - location.reload(); - }); - }; - - // Показываем кнопку сохранения только если играем одни - function updateSaveButtonVisibility() { - if (isMultiplayer && otherPlayers.size > 0) { - saveBtn.style.display = 'none'; - } else { - saveBtn.style.display = 'flex'; - } - } - - // Режимы - const MODES = [{id:'mine',icon:'⛏️'},{id:'build',icon:'🧱'}]; - let modeIdx=0; - const modeBtn = document.getElementById('modeBtn'); - function mode(){ return MODES[modeIdx].id; } - modeBtn.onclick = () => { - playSound('click'); // Звук клика по кнопке режима - modeIdx=(modeIdx+1)%MODES.length; modeBtn.textContent=MODES[modeIdx].icon; - }; - - // День/ночь (автоматический цикл) - let isNightTime = false; - - // Управление - const inp = { l:false, r:false, j:false, s:false }; - function bindHold(el, key){ - const down=(e)=>{ e.preventDefault(); inp[key]=true; }; - const up=(e)=>{ e.preventDefault(); inp[key]=false; }; - el.addEventListener('pointerdown', down); - el.addEventListener('pointerup', up); - el.addEventListener('pointerleave', up); - } - const leftBtn = document.getElementById('left'); - const rightBtn = document.getElementById('right'); - const jumpBtn = document.getElementById('jump'); - const downBtn = document.getElementById('down'); - - if(leftBtn) bindHold(leftBtn,'l'); - if(rightBtn) bindHold(rightBtn,'r'); - if(jumpBtn) bindHold(jumpBtn,'j'); - if(downBtn) bindHold(downBtn,'s'); - - window.addEventListener('keydown', (e)=>{ - if(e.code==='KeyA'||e.code==='ArrowLeft') inp.l=true; - if(e.code==='KeyD'||e.code==='ArrowRight') inp.r=true; - if(e.code==='Space'||e.code==='KeyW'||e.code==='ArrowUp') inp.j=true; - if(e.code==='KeyS'||e.code==='ArrowDown') inp.s=true; - }); - window.addEventListener('keyup', (e)=>{ - if(e.code==='KeyA'||e.code==='ArrowLeft') inp.l=false; - if(e.code==='KeyD'||e.code==='ArrowRight') inp.r=false; - if(e.code==='Space'||e.code==='KeyW'||e.code==='ArrowUp') inp.j=false; - if(e.code==='KeyS'||e.code==='ArrowDown') inp.s=false; - }); - - // Лодка - const boat = { - x: 0, y: 0, - w: 34, h: 34, - vx: 0, vy: 0, - active: false, - inWater: false - }; - - // Функция для расчёта урона с учётом брони - function calculateDamage(baseDamage) { - // Броня снижает урон пропорционально - // armor: 0 = без брони (100% урона) - // armor: 0.5 = железная броня (50% урона) - const reduction = player.armor; - const actualDamage = baseDamage * (1 - reduction); - console.log('[DAMAGE] Base:', baseDamage, '- Armor:', reduction, '- Actual:', actualDamage.toFixed(1)); - return actualDamage; - } - - // Игрок - const player = { - x: 6*TILE, y: 0*TILE, - w: 34, h: 34, - vx: 0, vy: 0, - grounded: false, - inWater: false, - headInWater: false, - hp: 100, - hunger: 100, - o2: 100, - invuln: 0, - slowTimer: 0, // яд скорпиона — замедление - fallStartY: 0, - lastStepTime: 0, - sleeping: false, - inBoat: false, - armor: 0, // Текущий уровень защиты (0 = без брони, 0.5 = железная броня) - equippedArmor: null, // Тип надетой брони - xp: 0, - level: 1 - }; - - // Сохраняем начальную позицию для возрождения - const spawnPoint = { x: 6*TILE, y: 0*TILE }; - - // Система дропов с мобов - const drops = []; // {x, y, vy, item, qty, age} - let levelUpPopup = null; // {text, timer} - - function xpForLevel(lv) { - if (lv <= 1) return 0; - const thresholds = [0, 50, 150, 300, 500, 800, 1200, 1700, 2300, 3000]; - if (lv - 1 < thresholds.length) return thresholds[lv - 1]; - return Math.floor(3000 + (lv - 10) * (lv - 10) * 50 + (lv - 10) * 200); - } - - function getMobLoot(kind) { - const table = { - chicken: [{item:'chicken_meat',min:1,max:2,chance:1},{item:'feather',min:0,max:1,chance:0.5}], - pig: [{item:'meat',min:1,max:2,chance:1}], - zombie: [{item:'meat',min:0,max:1,chance:0.5},{item:'iron_ingot',min:0,max:1,chance:0.3}], - skeleton: [{item:'arrow',min:2,max:4,chance:1},{item:'bone',min:0,max:2,chance:0.6},{item:'bow',min:1,max:1,chance:0.15}], - creeper: [{item:'gunpowder',min:1,max:2,chance:1}], - scorpion: [{item:'scorpion_stinger',min:0,max:1,chance:0.4}], - polar_bear:[{item:'polar_fur',min:1,max:2,chance:0.8},{item:'meat',min:1,max:2,chance:1}], - slime: [{item:'slime_ball',min:1,max:2,chance:1}], - eagle: [{item:'eagle_feather',min:1,max:2,chance:0.7}] - }; - return table[kind] || []; - } - - function getMobXP(kind) { - const xpTable = { chicken:3, pig:5, zombie:10, skeleton:12, creeper:15, scorpion:8, polar_bear:20, slime:5, eagle:15 }; - return xpTable[kind] || 0; - } - - function spawnDrops(mx, my, kind) { - const loot = getMobLoot(kind); - for (const entry of loot) { - if (Math.random() > entry.chance) continue; - const qty = entry.min + Math.floor(Math.random() * (entry.max - entry.min + 1)); - if (qty <= 0) continue; - drops.push({ - x: mx + (Math.random() - 0.5) * 20, - y: my + (Math.random() - 0.5) * 10, - vy: -1 - Math.random() * 2, - item: entry.item, - qty: qty, - age: 0, xpValue: getMobXP(kind) - }); - } - } - - const LEVEL_UNLOCKS = { - 2: 'Каменные инструменты, Лодка', - 3: 'Железные инструменты, Печь', - 4: 'Лук и стрелы', - 5: 'Железная броня', - 6: 'Золотая броня', - 7: 'Алмазные инструменты', - 8: 'TNT' - }; - - function grantXP(amount) { - player.xp += amount; - while (player.xp >= xpForLevel(player.level + 1)) { - player.level++; - const unlock = LEVEL_UNLOCKS[player.level] || ''; - levelUpPopup = { text: '⭐ Уровень ' + player.level + '!' + (unlock ? ' ' + unlock : ''), timer: 240 }; - } - } - - function pickupDrops() { - for (let i = drops.length - 1; i >= 0; i--) { - const d = drops[i]; - const dx = player.x + player.w/2 - d.x; - const dy = player.y + player.h/2 - d.y; - if (dx*dx + dy*dy < 30*30) { - if (!inv[d.item]) inv[d.item] = 0; - inv[d.item] += d.qty; - if (d.xpValue) grantXP(Math.ceil(d.xpValue * 0.3)); - drops.splice(i, 1); - rebuildHotbar(); - } - } - } - - function drawDrops(ctx) { - for (let i = drops.length - 1; i >= 0; i--) { - const d = drops[i]; - d.age++; - if (d.age > 3600) { drops.splice(i, 1); continue; } // 60 sec at 60fps - // Bounce animation - const bounce = Math.abs(Math.sin(d.age * 0.05)) * 6; - const dy = d.y - bounce; - const sx = d.x - camX; - const sy = dy - camY; - // Skip if off screen - if (sx < -40 || sx > W + 40 || sy < -40 || sy > H + 40) continue; - // Glow effect - ctx.save(); - ctx.globalAlpha = 0.3; - ctx.fillStyle = '#ffff00'; - ctx.beginPath(); - ctx.arc(sx, sy, 14, 0, Math.PI*2); - ctx.fill(); - ctx.restore(); - // Item icon - ctx.save(); - ctx.font = '16px system-ui'; - ctx.textAlign = 'center'; - ctx.textBaseline = 'middle'; - const itemDef = ITEMS[d.item]; - const icon = itemDef ? itemDef.icon : '🎁'; - const label = d.qty > 1 ? icon + '×' + d.qty : icon; - ctx.fillText(label, sx, sy); - ctx.restore(); - } - } - - function drawLevelUpPopup(ctx) { - if (!levelUpPopup) return; - levelUpPopup.timer--; - if (levelUpPopup.timer <= 0) { levelUpPopup = null; return; } - const alpha = Math.min(1, levelUpPopup.timer / 60); - ctx.save(); - ctx.globalAlpha = alpha; - ctx.fillStyle = '#FFD700'; - ctx.font = 'bold 36px system-ui'; - ctx.textAlign = 'center'; - ctx.textBaseline = 'middle'; - ctx.strokeStyle = '#000'; - ctx.lineWidth = 3; - ctx.strokeText(levelUpPopup.text, W/2, H/2 - 60); - ctx.fillText(levelUpPopup.text, W/2, H/2 - 60); - ctx.restore(); - } - - // Система сохранения игры (localStorage + in-memory fallback) - const SAVE_KEY = 'minegrechka_save'; - let db = null; // Оставляем для совместимости, но не используем - let inMemorySave = null; // Запасное сохранение в памяти - - // Инициализация (localStorage + in-memory fallback) - function initDB(){ - return new Promise((resolve) => { - console.log('Используем localStorage для сохранений (sandbox режим)'); - resolve(null); - }); - } - - // Детерминированный генератор псевдослучайных чисел на основе seed - function seededRandom(gx, gy){ - const n = Math.sin(gx * 12.9898 + gy * 78.233 + worldSeed * 0.1) * 43758.5453; - return n - Math.floor(n); - } - - function saveGame(){ - const saveData = { - version: 2, - worldSeed: worldSeed, - player: { - x: player.x, - y: player.y, - hp: player.hp, - hunger: player.hunger, - o2: player.o2, - xp: player.xp, - level: player.level - }, - temperature: player.temperature, - inventory: inv, - time: worldTime, - isNight: isNightTime, - // Сохраняем только изменения - placedBlocks: placedBlocks.slice(), - removedBlocks: removedBlocks.slice() - }; - - const saveSize = JSON.stringify(saveData).length; - console.log('Сохранение: player HP:', player.hp, 'hunger:', player.hunger, 'o2:', player.o2); - - // Пробуем сохранить в localStorage (основной метод для персистентности) - try { - localStorage.setItem(SAVE_KEY, JSON.stringify(saveData)); - console.log(`Игра сохранена в localStorage (размер: ${saveSize} байт)`); - // TG: also save to server - if (tgUser && tgUser.id) { - try { - fetch(SERVER_URL + '/api/tg/save', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ tg_id: tgUser.id, save_data: JSON.stringify(saveData), world_id: worldId, player_name: playerName }) - }).catch(e2 => console.warn('[TG] Save to server failed:', e2)); - } catch(tgE) {} - } - } catch(e){ - console.warn('Ошибка сохранения в localStorage, используем только in-memory:', e); - - // Если localStorage недоступен, используем in-memory fallback - inMemorySave = saveData; - console.log(`Игра сохранена в памяти (размер: ${saveSize} байт)`); - } - } - - function loadGame(){ - return new Promise(async (resolve, reject) => { - // TG: try server save first - if (tgUser && tgUser.id && tgSaveLoaded) { - try { - const resp = await fetch(SERVER_URL + '/api/tg/save?tg_id=' + tgUser.id); - const data = await resp.json(); - if (data.ok && data.save_data) { - const parsed = JSON.parse(data.save_data); - console.log('[TG] Loaded save from server, HP:', parsed.player?.hp); - tgSaveLoaded = parsed; // store for later use - resolve(parsed); return; } - } catch(e) { console.warn('[TG] Load from server failed:', e); } - } - // Пробуем localStorage - try { - const localSave = localStorage.getItem(SAVE_KEY); - if(localSave){ - const parsed = JSON.parse(localSave); - console.log('Загружено из localStorage, player HP:', parsed.player?.hp); - resolve(parsed); - return; } - } catch(e){ - console.warn('Ошибка доступа к localStorage:', e); } - - // Если localStorage недоступен, используем in-memory сохранение - if(inMemorySave){ - console.log('Загружено из in-memory сохранения, player HP:', inMemorySave.player?.hp); - resolve(inMemorySave); + if (state.selected === "bow" && state.inv.bow > 0 && state.inv.arrow > 0) { + const aimX = wx - state.player.x - state.player.w / 2; + const aimY = wy - state.player.y - state.player.h / 2; + const angle = Math.atan2(aimY, aimX); + state.projectiles.push({ + x: state.player.x + state.player.w / 2, + y: state.player.y + state.player.h / 3, + vx: Math.cos(angle) * 550, + vy: Math.sin(angle) * 550, + dmg: 10, + owner: "player", + life: 4 + }); + state.inv.arrow--; + useTool("bow"); + playSound("hit1"); + rebuildHotbar(); return; } - - console.log('Сохранение не найдено'); - resolve(null); - }); - } - - // Миграция с версии 1 на версию 2 - function migrateV1toV2(saveData){ - console.log('Миграция сохранения с версии 1 на версию 2...'); - - // Сохраняем seed из текущей игры (так как v1 его не хранил) - saveData.worldSeed = worldSeed; - - // Инициализируем массивы изменений - saveData.placedBlocks = []; - saveData.removedBlocks = []; - - // Для v1 нам нужно сравнить сгенерированные блоки с тем, что должно быть по seed - // Это сложно сделать без полной перегенерации, поэтому для v1 сохраняем только seed - // и при загрузке просто перегенерируем мир - - // Удаляем старые данные - delete saveData.generatedBlocks; - - saveData.version = 2; - console.log('Миграция завершена'); - } - - async function applySave(saveData){ - if(!saveData) return; - - console.log('=== applySave START ==='); - console.log('player HP before applySave:', player.hp); - console.log('saveData.player.hp:', saveData.player?.hp); - - // Миграция версий - if(saveData.version === 1){ - player.temperature = saveData.player.temperature !== undefined ? saveData.player.temperature : 15; - migrateV1toV2(saveData); - } - - // Восстанавливаем seed - if(saveData.worldSeed !== undefined){ - worldSeed = saveData.worldSeed; - } - - // Восстанавливаем игрока - if(saveData.player){ - player.x = saveData.player.x; - player.y = saveData.player.y; - player.hunger = saveData.player.hunger; - player.o2 = saveData.player.o2; - player.xp = saveData.player.xp || 0; - player.level = saveData.player.level || 1; - - // Обновляем spawnPoint на позицию из сохранения - spawnPoint.x = player.x; - spawnPoint.y = player.y; - - // Проверяем HP из сохранения - если <= 0, устанавливаем 100 - const savedHP = saveData.player.hp; - console.log('Saved HP from file:', savedHP); - if(savedHP <= 0){ - console.log('WARNING: Saved HP is <= 0, setting to 100!'); - player.hp = 100; - } else { - player.hp = savedHP; - } - console.log('player HP after restore:', player.hp); - console.log('spawnPoint обновлён из сохранения: x=', spawnPoint.x, 'y=', spawnPoint.y); - } else { - console.log('No player data in save, setting default HP: 100'); - player.hp = 100; - } - - console.log('=== applySave END ==='); - - // Восстанавливаем инвентарь - if(saveData.inventory){ - for(const key in saveData.inventory){ - inv[key] = saveData.inventory[key]; - } - } - - // Восстанавливаем время - if(saveData.time !== undefined){ - worldTime = saveData.time; - } - - // Восстанавливаем день/ночь - if(saveData.isNight !== undefined){ - isNightTime = saveData.isNight; - } - - // Перегенерируем мир по seed - regenerateVisibleChunks(); - - // Применяем изменения (только для v2) - if(saveData.version === 2){ - // Применяем блоки, установленные игроком - for(const block of saveData.placedBlocks){ - setBlock(block.gx, block.gy, block.t, true); - } - - // Применяем удалённые блоки - for(const block of saveData.removedBlocks){ - removeBlock(block.gx, block.gy); - } - - // Восстанавливаем массивы изменений - placedBlocks = saveData.placedBlocks || []; - removedBlocks = saveData.removedBlocks || []; - } - - rebuildHotbar(); - console.log('Игра загружена'); - } - - // Камера (двухосевая) - let camX=0, camY=0; - - // День/ночь - let worldTime=0; - const DAY_LEN=360; // замедлил смену дня/ночи в 3 раза - - // Облака - const clouds = Array.from({length:10}, ()=>({ - x: Math.random()*2000, - y: -200 - Math.random()*260, // выше экрана, потому что мир по Y теперь двигается - w: 80+Math.random()*120, - s: 12+Math.random()*20 - })); - - // Дождь - let isRaining = false; - let rainIntensity = 0; // 0..1 - const snowflakes = []; // снежинки для тундры - const MAX_SNOWFLAKES = 150; - const raindrops = []; - const MAX_RAINDROPS = 200; - - // ==================== РОСТ КУЛЬТУР ==================== - const growthTimers = {}; // ключ: "gx,gy" → { stage:0-3, growTimer:X } - - // Старая функция заменена — теперь погода через биомы (см. weatherState выше) - // updateWeather(dt) вызывается из основного цикла — биом-зависимая - - // Интеграция: определяем isRaining из weatherState для визуализации - function syncWeatherVisual() { - isRaining = (weatherState.type === 'rain' || weatherState.type === 'storm'); - if (weatherState.type === 'clear') { - rainIntensity *= 0.95; // плавное затухание - if (rainIntensity < 0.01) rainIntensity = 0; - } - } - - function updateRain(dt) { - syncWeatherVisual(); - // Дождь - if ((weatherState.type === 'rain' || weatherState.type === 'storm') && rainIntensity < weatherState.intensity * 0.6) { - rainIntensity += dt * 0.3; - } else if (weatherState.type === 'clear' || weatherState.type === 'snow' || weatherState.type === 'fog') { - rainIntensity = Math.max(0, rainIntensity - dt * 0.5); - } - if (rainIntensity < 0.01) { - raindrops.length = 0; - } else { - const spawnRate = Math.floor(rainIntensity * 80 * dt); - for (let i = 0; i < spawnRate && raindrops.length < MAX_RAINDROPS; i++) { - raindrops.push({ - x: camX + Math.random() * W, - y: camY - 20, - vy: 400 + Math.random() * 200, - len: 8 + Math.random() * 12 - }); - } - for (let i = raindrops.length - 1; i >= 0; i--) { - const d = raindrops[i]; - d.y += d.vy * dt; - d.x -= 30 * dt; - if (d.y > camY + H + 20) raindrops.splice(i, 1); - } - } - // Снег - if (weatherState.type === 'snow') { - const spawnRate = Math.floor(weatherState.intensity * 30 * dt); - for (let i = 0; i < spawnRate && snowflakes.length < MAX_SNOWFLAKES; i++) { - snowflakes.push({ - x: camX + Math.random() * W, - y: camY - 10, - vy: 40 + Math.random() * 60, - vx: (Math.random() - 0.5) * 30, - size: 2 + Math.random() * 3 - }); - } - } - for (let i = snowflakes.length - 1; i >= 0; i--) { - const s = snowflakes[i]; - s.y += s.vy * dt; - s.x += s.vx * dt + Math.sin(s.y * 0.02) * 10 * dt; - if (s.y > camY + H + 20 || weatherState.type !== 'snow') snowflakes.splice(i, 1); - } - } - - function drawRain() { - // Дождь - if (raindrops.length > 0) { - ctx.save(); - ctx.strokeStyle = (weatherState.type === 'storm') ? 'rgba(174,194,224,0.7)' : 'rgba(174,194,224,0.5)'; - ctx.lineWidth = 1.5; - ctx.beginPath(); - for (const d of raindrops) { - ctx.moveTo(d.x, d.y); - ctx.lineTo(d.x - 3, d.y + d.len); - } - ctx.stroke(); - ctx.restore(); - } - // Снег - if (snowflakes.length > 0) { - ctx.save(); - ctx.fillStyle = 'rgba(255,255,255,0.8)'; - for (const s of snowflakes) { - ctx.beginPath(); - ctx.arc(s.x, s.y, s.size, 0, Math.PI * 2); - ctx.fill(); - } - ctx.restore(); - } - // Гроза — вспышка - if (weatherState.type === 'storm' && Math.random() < 0.003) { - ctx.save(); - ctx.fillStyle = 'rgba(255,255,255,0.3)'; - ctx.fillRect(camX, camY, W, H); - ctx.restore(); - } - // Туман — серый оверлей - if (weatherState.type === 'fog') { - ctx.save(); - ctx.fillStyle = 'rgba(200,200,200,0.4)'; - ctx.fillRect(camX, camY, W, H); - ctx.restore(); - } - } - - // Частицы (взрыв) - const parts = []; - function spawnExplosion(x,y, power){ - const n = Math.floor(16 + power*10); - for(let i=0;i 100){ - playSound('splash'); - } - } - - function resolveY(e){ - // Всегда пересчитываем grounded (не держим "липким") - e.grounded = false; - - const x1 = e.x + 2; - const x2 = e.x + e.w - 2; - - // Проверяем, находится ли игрок на лестнице (по центру) - const cx = e.x + e.w/2; - const cy = e.y + e.h/2; - const gx = Math.floor(cx / TILE); - const gy = Math.floor(cy / TILE); - const b = getBlock(gx, gy); - const onLadder = b && BLOCKS[b.t] && BLOCKS[b.t].climbable; - - // Если на лестнице - можно двигаться вверх/вниз - if(onLadder){ - e.grounded = true; - - // Если нажимаем прыжок на лестнице - поднимаемся - if(inp.j){ - e.vy = -200; - } - // Если нажимаем вниз - спускаемся - else if(inp.s){ - e.vy = 100; - } - // Иначе - остаёмся на месте (нет гравитации) - else { - e.vy = 0; - } - return; - } - - // Проверяем, можно ли запрыгнуть на лестницу рядом (слева или справа) - const leftGX = Math.floor((e.x - 4) / TILE); - const rightGX = Math.floor((e.x + e.w + 4) / TILE); - const playerGY = Math.floor((e.y + e.h/2) / TILE); - - const leftBlock = getBlock(leftGX, playerGY); - const rightBlock = getBlock(rightGX, playerGY); - const leftLadder = leftBlock && BLOCKS[leftBlock.t] && BLOCKS[leftBlock.t].climbable; - const rightLadder = rightBlock && BLOCKS[rightBlock.t] && BLOCKS[rightBlock.t].climbable; - - // Если рядом есть лестница и игрок прыгает - притягиваем к ней - if((leftLadder || rightLadder) && inp.j && e.vy < 0){ - // Перемещаем игрока к лестнице - if(leftLadder && e.x > leftGX * TILE + TILE/2){ - e.x = leftGX * TILE + TILE/2 - e.w/2; - } else if(rightLadder && e.x < rightGX * TILE + TILE/2){ - e.x = rightGX * TILE + TILE/2 - e.w/2; - } - e.grounded = true; - e.vy = -150; // меньший прыжок при запрыгивании на лестницу - return; - } - - // 1) Если движемся вниз ИЛИ стоим (vy >= 0) — проверяем опору под ногами - // Берём точку на 1px ниже стопы, чтобы не зависеть от ровного попадания в границу тайла. - if(e.vy >= 0){ - const probeY = e.y + e.h + 1; - const gy = Math.floor(probeY / TILE); - const gxA = Math.floor(x1 / TILE); - const gxB = Math.floor(x2 / TILE); - - if(isSolid(gxA, gy) || isSolid(gxB, gy)){ - e.y = gy * TILE - e.h; // прижимаем к полу - e.vy = 0; - e.grounded = true; - - // урон от падения — только игроку и только не в воде - if(e === player && !player.inWater){ - const fallTiles = (e.y - e.fallStartY) / TILE; - if(fallTiles > 6) { - const damage = calculateDamage((fallTiles - 6) * 10); - player.hp -= damage; - } + if (ITEMS[state.selected] && state.inv[state.selected] > 0) { + const it = ITEMS[state.selected]; + if (state.player.hp < 100 || state.player.hunger < 100) { + playSound("eat1"); + state.player.hunger = Math.min(100, state.player.hunger + it.food); + state.player.hp = Math.min(100, state.player.hp + 15); + state.inv[state.selected]--; + rebuildHotbar(); } - if(e === player) e.fallStartY = e.y; + return; } - } - - // 2) Проверка на возможность запрыгнуть на блок, если игрок рядом с ним - if(e.vy < 0 && e === player){ - const gy = Math.floor(e.y / TILE); - const gxA = Math.floor(x1 / TILE); - const gxB = Math.floor(x2 / TILE); - - // Проверяем, есть ли блок рядом с игроком - if((isSolid(gxA, gy) || isSolid(gxB, gy)) && !isSolid(gxA, gy - 1) && !isSolid(gxB, gy - 1)){ - e.y = (gy + 1) * TILE; - e.vy = 0; - e.grounded = true; - if(e === player) e.fallStartY = e.y; - console.log("Jumped onto block!"); + if (b && b.t === "campfire" && state.selected === "meat" && state.inv.meat > 0) { + playSound("fire"); + state.inv.meat--; + state.inv.cooked++; + rebuildHotbar(); + return; } - } - - // 2) Если движемся вверх — проверяем потолок - if(e.vy < 0){ - const gy = Math.floor(e.y / TILE); - const gxA = Math.floor(x1 / TILE); - const gxB = Math.floor(x2 / TILE); - if(isSolid(gxA, gy) || isSolid(gxB, gy)){ - e.y = (gy + 1) * TILE; - e.vy = 0; + if (b && b.t === "bed" && isNight()) { + state.player.sleeping = true; + saveGame(); + return; } - } - } - - function resolveX(e){ - const y1 = e.y + 2; - const y2 = e.y + e.h - 2; - - // Проверяем, находимся ли мы на лестнице - const cx = e.x + e.w/2; - const cy = e.y + e.h/2; - const gx = Math.floor(cx / TILE); - const gy = Math.floor(cy / TILE); - const b = getBlock(gx, gy); - const onLadder = b && BLOCKS[b.t] && BLOCKS[b.t].climbable; - - if(e.vx > 0){ - const gx = Math.floor((e.x + e.w)/TILE); - const gyA = Math.floor(y1/TILE); - const gyB = Math.floor(y2/TILE); - const solidA = isSolid(gx, gyA); - const solidB = isSolid(gx, gyB); - - if(solidA || solidB){ - e.x = gx*TILE - e.w; - e.vx = 0; - } - } else if(e.vx < 0){ - const gx = Math.floor(e.x/TILE); - const gyA = Math.floor(y1/TILE); - const gyB = Math.floor(y2/TILE); - const solidA = isSolid(gx, gyA); - const solidB = isSolid(gx, gyB); - - if(solidA || solidB){ - e.x = (gx+1)*TILE; - e.vx = 0; - } - } - } - - // TNT логика: цепь + усиление - const activeTNT = new Set(); // хранит key - function activateTNT(b, fuse=3.2){ - if(b.dead) return; - if(b.active) return; - b.active=true; - b.fuse=fuse; - activeTNT.add(k(b.gx,b.gy)); - } - - function explodeAt(gx,gy){ - const center = getBlock(gx,gy); - if(!center) return; - - // усиление: считаем сколько TNT рядом (в радиусе 2) и активируем их «почти сразу» - let bonus = 0; - for(let x=gx-2; x<=gx+2; x++){ - for(let y=gy-2; y<=gy+2; y++){ - const b = getBlock(x,y); - if(b && !b.dead && b.t==='tnt' && !(x===gx && y===gy)){ - bonus += 0.8; - activateTNT(b, 0.12); // цепь + if (mode() === "mine") { + if (!b) return; + if (BLOCKS[b.t].fluid || BLOCKS[b.t].decor) return; + if (b.t === "tnt") { + activateTNT(b, 3.2); + return; } - } - } - - const power = 1 + bonus; // условная мощность - const radius = 3.2 + bonus*0.7; // радиус разрушения в тайлах - const dmgR = 150 + bonus*60; // радиус урона в пикселях - - removeBlock(gx,gy); - activeTNT.delete(k(gx,gy)); - playSound('explode1'); // Звук взрыва - spawnExplosion(gx*TILE + TILE/2, gy*TILE + TILE/2, power); - - for(let x=Math.floor(gx-radius); x<=Math.ceil(gx+radius); x++){ - for(let y=Math.floor(gy-radius); y<=Math.ceil(gy+radius); y++){ - const d = Math.hypot(x-gx, y-gy); - if(d > radius) continue; - const b = getBlock(x,y); - if(!b || b.dead) continue; - if(BLOCKS[b.t].fluid) continue; - if(BLOCKS[b.t].unbreakable) continue; - if(b.t==='tnt') { activateTNT(b, 0.12); continue; } - removeBlock(x,y); - if(inv[b.t] !== undefined && Math.random()<0.20) inv[b.t]++; // немного дропа - } - } - rebuildHotbar(); - - // урон - const hurt = (e)=>{ - const dx = (e.x+e.w/2) - (gx*TILE+TILE/2); - const dy = (e.y+e.h/2) - (gy*TILE+TILE/2); - const dist = Math.hypot(dx,dy); - if(dist < dmgR){ - const dmg = (dmgR - dist) * 0.06 * power; - if(e === player) { - const actualDamage = calculateDamage(dmg); - player.hp -= actualDamage; - } else { - e.hp -= dmg; - } - e.vx += (dx/dist || 0) * 600; - e.vy -= 320; - } - }; - hurt(player); - mobs.forEach(hurt); - } - - // Взаимодействие мышь/тап - const mouse = { x:null, y:null }; - canvas.addEventListener('pointermove', (e)=>{ - const r = canvas.getBoundingClientRect(); - mouse.x = e.clientX - r.left; - mouse.y = e.clientY - r.top; - }); - - canvas.addEventListener('pointerdown', (e)=>{ - if(craftOpen) return; - if(player.hp<=0) return; - - const r = canvas.getBoundingClientRect(); - const sx = e.clientX - r.left; - const sy = e.clientY - r.top; - - const wx = sx + camX; - const wy = sy + camY; - - const gx = Math.floor(wx / TILE); - const gy = Math.floor(wy / TILE); - - // Пробуждение: клик по любой кровати когда спишь - const b = getBlock(gx,gy); - if(player.sleeping && b && b.t==='bed'){ - player.sleeping = false; - return; - } - - if(player.sleeping) return; // Нельзя взаимодействовать во время сна - - // Клик по печи — открываем панель обжига - if(b && b.t === 'furnace' && mode() === 'mine'){ - openFurnaceUI(gx, gy); - return; - } - - // клик по мобу (в режиме mine) - if(mode()==='mine'){ - // Check all mobs (local + server-spawned) using getAllMobs - const allClickMobs = getAllMobs(); - for(let i = allClickMobs.length - 1; i >= 0; i--){ - const m = allClickMobs[i]; - if(m.dead) continue; - if(wx>=m.x && wx<=m.x+m.w && wy>=m.y && wy<=m.y+m.h){ - let dmg = 1; - const swordTypes = ['iron_sword','stone_sword','wood_sword']; - for (const st of swordTypes) { - if (inv[st] > 0) { dmg = TOOLS[st].damage || 3; useTool(st); break; } - } - m.hp -= dmg; - m.vx += (m.x - player.x) * 2; - m.vy -= 200; - playSound('attack'); - // Server-spawned mob: emit hurt to server for relay, handle death locally - if(m.id !== undefined && isMultiplayer){ - socket.emit('mob_hurt', { id: m.id, dmg }); - if(m.hp <= 0){ - socket.emit('mob_died', { id: m.id }); - } - } - if(m.hp<=0){ - if(m.kind === 'chicken') playSound('hurt_chicken'); - spawnDrops(m.x + m.w/2, m.y + m.h/2, m.kind); - // Remove from the correct array - if(m.id !== undefined){ - serverMobs.delete(m.id); - } else { - const localIdx = mobs.indexOf(m); - if(localIdx >= 0) mobs.splice(localIdx, 1); - } + const hardness = BLOCKS[b.t].hardness || 1; + if (hardness === Infinity) return; + if (hardness === 0) { + const removed = removeBlock(gx, gy); + if (removed) { + state.inv[removed.t] = (state.inv[removed.t] || 0) + 1; + sendBlockChange(gx, gy, removed.t, "remove"); rebuildHotbar(); } return; } - } - } - - // Лук — стреляем стрелой - if(selected === 'bow' && inv.bow > 0 && inv.arrow > 0){ - const aimX = wx - player.x - player.w/2; - const aimY = wy - player.y - player.h/2; - const angle = Math.atan2(aimY, aimX); - projectiles.push({ - x: player.x + player.w/2, - y: player.y + player.h/3, - vx: Math.cos(angle) * 550, - vy: Math.sin(angle) * 550, - dmg: 10, - owner: 'player', - life: 4 - }); - inv.arrow--; - useTool('bow'); - playSound('hit1'); - rebuildHotbar(); - return; - } - - // еда (предмет) - if(ITEMS[selected] && inv[selected]>0){ - const it = ITEMS[selected]; - if(player.hp < 100 || player.hunger < 100){ - playSound('eat1'); - player.hunger = Math.min(100, player.hunger + it.food); - player.hp = Math.min(100, player.hp + 15); - inv[selected]--; - rebuildHotbar(); - } - return; - } - - //Посадка семян на грядку - if(b && b.t === 'farmland' && mode()==='build'){ - const seedMap = { wheat: 'wheat_stage0', carrot: 'carrot_stage0', potato: 'potato_stage0' }; - if(seedMap[selected] && inv[selected] > 0){ - inv[selected]--; - const cropType = seedMap[selected]; - setBlock(gx, gy-1, cropType); - growthTimers[gx+','+(gy-1)] = { stage:0, growTimer: 10+Math.random()*5 }; - sendBlockChange(gx, gy-1, cropType, 'add'); - playSound('cloth1'); - rebuildHotbar(); - return; - } - } - - // Мотыга — превращает grass/dirt в farmland (в любом режиме) - if(selected === 'hoe' && inv.hoe > 0 && b){ - if(b.t === 'grass' || b.t === 'dirt'){ - setBlock(gx, gy, 'farmland'); - sendBlockChange(gx, gy, b.t, 'remove'); - sendBlockChange(gx, gy, 'farmland', 'add'); - useTool('hoe'); - playSound('cloth1'); - rebuildHotbar(); - return; - } - } - - // жарка на костре: выбран meat + клик по campfire - if(b && b.t==='campfire' && selected==='meat' && inv.meat>0){ - playSound('fire'); // Звук при жарке на костре - inv.meat--; inv.cooked++; - rebuildHotbar(); - return; - } - - // Сон на кровати: клик по bed - if(b && b.t==='bed' && isNight()){ - player.sleeping = true; - saveGame(); // Сохраняем при отходе ко сну - return; - } - - if(mode()==='mine'){ - if(!b) return; - if(BLOCKS[b.t].fluid) return; - // Клик на урожайную культуру — сбор - if(BLOCKS[b.t].harvestable){ - const hInfo = BLOCKS[b.t]; - inv[hInfo.harvestItem] = (inv[hInfo.harvestItem]||0) + hInfo.harvestQty; - removeBlock(gx, gy); - sendBlockChange(gx, gy, b.t, 'remove'); - delete growthTimers[gx+','+gy]; - playSound('cloth1'); - rebuildHotbar(); - return; - } - if(BLOCKS[b.t].decor) return; - - if(b.t==='tnt'){ activateTNT(b, 3.2); return; } // не взрывается сразу - - const removed = removeBlock(gx,gy); - if(removed){ - inv[removed.t] = (inv[removed.t]||0) + 1; - - // Тратим прочность кирки (если есть в инвентаре) - const pickTypes = ['iron_pickaxe','stone_pickaxe','wood_pickaxe']; - for (const pt of pickTypes) { - if (inv[pt] > 0) { - const broke = useTool(pt); - if (broke) playSound('cloth1'); // звук поломки - break; - } + if (state.mining.gx === gx && state.mining.gy === gy) { + state.mining.progress += getMiningSpeed(b.t); + } else { + state.mining = { gx, gy, progress: getMiningSpeed(b.t), hardness }; } - - // Отправляем изменение блока на сервер - sendBlockChange(gx, gy, removed.t, 'remove'); - - // Звуки при добыче блоков - if(removed.t === 'glass') playSound('glass1'); - else if(removed.t === 'sand') playSound('sand1'); - else if(removed.t === 'snow') playSound('snow1'); - else if(removed.t === 'stone' || removed.t.endsWith('_ore')) playSound('stone1'); - else if(removed.t === 'wood') playSound('wood1'); - else playSound('cloth1'); - - rebuildHotbar(); + if (b.t === "glass") playSound("glass1"); + else if (b.t === "sand") playSound("sand1"); + else if (b.t === "stone" || b.t.endsWith("_ore")) playSound("stone1"); + else if (b.t === "wood" || b.t === "planks") playSound("wood1"); + else playSound("cloth1"); + if (state.mining.progress >= hardness) { + const minTool = BLOCKS[b.t].minTool; + let drops = true; + if (minTool) { + const toolId = getBestTool(b.t); + if (toolId) { + const tool = TOOLS[toolId]; + if (toolTierLessThan(tool.toolTier, minTool)) drops = false; + else useTool(toolId); + } else { + drops = false; + } + } else { + const toolId = getBestTool(b.t); + if (toolId) useTool(toolId); + } + const removed = removeBlock(gx, gy); + if (removed) { + if (drops) { + state.inv[removed.t] = (state.inv[removed.t] || 0) + 1; + } else { + if (BLOCKS[removed.t]?.toolType === "pickaxe") { + state.inv.cobblestone = (state.inv.cobblestone || 0) + 1; + } + } + sendBlockChange(gx, gy, removed.t, "remove"); + if (removed.t === "glass") playSound("glass1"); + else if (removed.t === "sand") playSound("sand1"); + else if (removed.t === "stone" || removed.t.endsWith("_ore")) playSound("stone1"); + else if (removed.t === "wood") playSound("wood1"); + else playSound("cloth1"); + rebuildHotbar(); + } + state.mining = { gx: null, gy: null, progress: 0, hardness: 0 }; + } + miningHeld = true; + if (miningInterval) clearInterval(miningInterval); + miningInterval = setInterval(() => { + if (!miningHeld) { + clearInterval(miningInterval); + miningInterval = null; + return; + } + const mb = getBlock(state.mining.gx, state.mining.gy); + if (!mb || mb.dead || mb.t !== b.t) { + miningHeld = false; + clearInterval(miningInterval); + miningInterval = null; + return; + } + if (state.mining.gx !== null && state.mining.hardness > 0) { + state.mining.progress += getMiningSpeed(mb.t) * 0.3; + if (state.mining.progress >= state.mining.hardness) { + const mgx = state.mining.gx; + const mgy = state.mining.gy; + const mMinTool = BLOCKS[mb.t].minTool; + let mDrops = true; + if (mMinTool) { + const mToolId = getBestTool(mb.t); + if (mToolId) { + const mTool = TOOLS[mToolId]; + if (toolTierLessThan(mTool.toolTier, mMinTool)) mDrops = false; + else useTool(mToolId); + } else { + mDrops = false; + } + } else { + const mToolId = getBestTool(mb.t); + if (mToolId) useTool(mToolId); + } + const removed = removeBlock(mgx, mgy); + if (removed) { + if (mDrops) { + state.inv[removed.t] = (state.inv[removed.t] || 0) + 1; + } else { + if (BLOCKS[removed.t]?.toolType === "pickaxe") { + state.inv.cobblestone = (state.inv.cobblestone || 0) + 1; + } + } + sendBlockChange(mgx, mgy, removed.t, "remove"); + rebuildHotbar(); + } + state.mining = { gx: null, gy: null, progress: 0, hardness: 0 }; + miningHeld = false; + clearInterval(miningInterval); + miningInterval = null; + } + } + }, 100); + return; } - return; - } - - if(mode()==='build'){ - if(inv[selected] <= 0) return; - if(!BLOCKS[selected]) return; - if(b) return; // занято - - // Проверяем, ставим ли лодку - if(selected === 'boat'){ - // Лодку можно ставить только на воду - const waterBelow = getBlock(gx, gy+1); - if(!waterBelow || waterBelow.t !== 'water'){ + if (mode() === "build") { + if (state.inv[state.selected] <= 0) return; + if (!BLOCKS[state.selected]) return; + if (b) return; + if (state.selected === "boat") { + const waterBelow = getBlock(gx, gy + 1); + if (!waterBelow || waterBelow.t !== "water") { + return; + } + state.boat.x = gx * state.TILE; + state.boat.y = gy * state.TILE; + state.boat.vx = 0; + state.boat.vy = 0; + state.boat.active = true; + state.boat.inWater = true; + state.player.inBoat = true; + state.player.x = state.boat.x; + state.player.y = state.boat.y; + state.player.vx = 0; + state.player.vy = 0; + playSound("splash"); + state.inv[state.selected]--; + rebuildHotbar(); return; } - - // Создаём лодку - boat.x = gx * TILE; - boat.y = gy * TILE; - boat.vx = 0; - boat.vy = 0; - boat.active = true; - boat.inWater = true; - - // Сажаем игрока в лодку - player.inBoat = true; - player.x = boat.x; - player.y = boat.y; - player.vx = 0; - player.vy = 0; - - playSound('splash'); - inv[selected]--; + const TILE2 = state.TILE; + const bx = gx * TILE2, by = gy * TILE2; + const overlap = !(bx >= state.player.x + state.player.w || bx + TILE2 <= state.player.x || by >= state.player.y + state.player.h || by + TILE2 <= state.player.y); + if (overlap) return; + setBlock(gx, gy, state.selected, true); + state.inv[state.selected]--; + sendBlockChange(gx, gy, state.selected, "set"); + if (state.selected === "stone" || state.selected === "brick") playSound("stone_build"); + else if (state.selected === "wood" || state.selected === "planks") playSound("wood_build"); + else if (state.selected === "glass") playSound("glass1"); + else if (state.selected === "sand") playSound("sand1"); + else if (state.selected === "dirt" || state.selected === "grass") playSound("cloth1"); rebuildHotbar(); return; } - - // запрет ставить в игрока - const bx = gx*TILE, by = gy*TILE; - const overlap = !(bx >= player.x+player.w || bx+TILE <= player.x || by >= player.y+player.h || by+TILE <= player.y); - if(overlap) return; - - setBlock(gx,gy,selected, true); // true = блок установлен игроком - inv[selected]--; - - // Отправляем изменение блока на сервер - sendBlockChange(gx, gy, selected, 'set'); - - // Звук при строительстве - if(selected === 'stone' || selected === 'brick') playSound('stone_build'); - else if(selected === 'wood' || selected === 'planks') playSound('wood_build'); - else if(selected === 'glass') playSound('glass1'); - else if(selected === 'sand') playSound('sand1'); - else if(selected === 'snow') playSound('snow1'); - else if(selected === 'dirt' || selected === 'grass') playSound('cloth1'); - - rebuildHotbar(); - return; - } - }); - - // ==================== БИОМЫ ==================== - const BIOMES = { - plains: { name:'Равнина', surface:'grass', subsurface:'dirt', trees:true, flowers:true, treeChance:0.12 }, - desert: { name:'Пустыня', surface:'sand', subsurface:'sand', trees:false, flowers:false, treeChance:0 }, - tundra: { name:'Тундра', surface:'snow', subsurface:'dirt', trees:true, flowers:false, treeChance:0.06 }, - swamp: { name:'Болото', surface:'moss', subsurface:'dirt', trees:true, flowers:false, treeChance:0.10 }, - mountains:{ name:'Горы', surface:'stone', subsurface:'stone', trees:false, flowers:false, treeChance:0 } - }; - - function getBiome(gx) { - const temp = Math.sin(gx*0.003 + worldSeed*0.01)*0.5 + Math.sin(gx*0.007 + worldSeed*0.02)*0.3 + 0.5; - const humid = Math.sin(gx*0.004 + worldSeed*0.015 + 1000)*0.5 + Math.cos(gx*0.006 + worldSeed*0.02 + 2000)*0.3 + 0.5; - const mtVal = Math.sin(gx*0.001 + worldSeed*0.005)*0.5 + 0.5; - if (temp > 0.7) return 'desert'; - if (temp < 0.3) return 'tundra'; - if (humid > 0.7 && temp >= 0.3 && temp <= 0.7) return 'swamp'; - if (temp >= 0.5 && temp <= 0.7 && mtVal > 0.75) return 'mountains'; - return 'plains'; + }); + canvas.addEventListener("pointerup", () => { + miningHeld = false; + }); + canvas.addEventListener("pointerleave", () => { + miningHeld = false; + }); } - const biomeCache = {}; - function getCachedBiome(gx) { - const chunk = Math.floor(gx / 8); // cache per 8-tile chunk for smoother biomes - if (biomeCache[chunk] === undefined) biomeCache[chunk] = getBiome(chunk * 8); - return biomeCache[chunk]; - } - - // ==================== ПОГОДА ==================== - const weatherState = { type: 'clear', intensity: 0, timer: 0, duration: 180, nextChange: 120 + Math.random()*180 }; - const BIOME_WEATHER = { - plains: { clear:0.50, rain:0.30, storm:0.10, snow:0, fog:0.10 }, - desert: { clear:0.80, rain:0.05, storm:0, snow:0, fog:0.15 }, - tundra: { clear:0.20, rain:0, storm:0.10, snow:0.60, fog:0.10 }, - swamp: { clear:0.20, rain:0.30, storm:0.10, snow:0, fog:0.40 }, - mountains:{ clear:0.40, rain:0.30, storm:0.10, snow:0.10, fog:0.10 } - }; - - function updateWeather(dt) { - weatherState.timer += dt; - if (weatherState.timer >= weatherState.nextChange) { - weatherState.timer = 0; - weatherState.nextChange = 60 + Math.random() * 240; - const biome = getCachedBiome(Math.floor(player.x / TILE)); - const probs = BIOME_WEATHER[biome] || BIOME_WEATHER.plains; - const r = Math.random(); - let cum = 0; - if ((cum += probs.clear) > r) { weatherState.type = 'clear'; } - else if ((cum += probs.rain) > r) { weatherState.type = 'rain'; } - else if ((cum += probs.storm) > r) { weatherState.type = 'storm'; } - else if ((cum += probs.snow) > r) { weatherState.type = 'snow'; } - else { weatherState.type = 'fog'; } - weatherState.duration = 60 + Math.random() * 300; - } - // Intensity interpolation - const target = (weatherState.type === 'clear') ? 0 : 1; - weatherState.intensity += (target - weatherState.intensity) * dt * 0.5; - } - - function getWeatherSpeedMultiplier() { - if (weatherState.type === 'rain') return 0.85; - if (weatherState.type === 'snow') return 0.7; - if (weatherState.type === 'storm') return 0.85; - return 1; - } - - function isOutdoorLight(lx, ly) { - // Check if position is outdoors (no block above) - const aboveGy = Math.floor(ly / TILE) - 1; - const aboveGx = Math.floor(lx / TILE); - const above = getBlock(aboveGx, aboveGy); - return !above || !BLOCKS[above.t]?.solid; - } - - // ==================== СТРУКТУРЫ МИРА ==================== - function placeStructure(startGx, startGy, pattern) { - for (let dy = 0; dy < pattern.length; dy++) { - for (let dx = 0; dx < pattern[dy].length; dx++) { - const bt = pattern[dy][dx]; - if (bt && bt !== 'air') { - setBlock(startGx + dx, startGy + dy, bt); - } - } - } - } - - // Пирамида в пустыне - const PYRAMID_PATTERN = [ - ['sand','sand','sand','sand','sand','sand','sand'], - ['sand','stone','stone','stone','stone','stone','sand'], - ['sand','stone','air','air','air','stone','sand'], - ['sand','stone','air','air','air','stone','sand'], - ['sand','stone','air','air','air','stone','sand'], - ['sand','sand','stone','stone','stone','sand','sand'] - ]; - - // Дом в равнине - const HOUSE_PATTERN = [ - ['air','planks','planks','planks','planks','air'], - ['planks','air','air','air','air','planks'], - ['planks','air','torch','air','air','planks'], - ['planks','air','air','air','air','planks'], - ['planks','planks','air','planks','planks','planks'] - ]; - - // Хижина в болоте - const HUT_PATTERN = [ - ['air','wood','wood','wood','air'], - ['wood','air','air','air','wood'], - ['wood','air','torch','air','wood'], - ['moss','moss','air','moss','moss'] - ]; - - // ==================== ГЕНЕРАЦИЯ ==================== - const generated = new Set(); // gx already generated - function surfaceGyAt(gx) { - const biome = getCachedBiome(gx); - // Base noise (same for all biomes) - const n1 = Math.sin(gx*0.025 + worldSeed*0.001)*8; - const n2 = Math.sin(gx*0.012 + worldSeed*0.002)*12; - const n3 = Math.sin(gx*0.006 + worldSeed*0.003)*6; - const n4 = Math.sin(gx*0.045 + worldSeed*0.004)*4; - const n5 = Math.cos(gx*0.018 + worldSeed*0.005)*5; - let h; - switch(biome) { - case 'desert': - h = Math.floor(SEA_GY - 4 + n3*0.3 + n4*0.5); // flatter, slightly higher - break; - case 'tundra': - h = Math.floor(SEA_GY - 6 + n2*0.5 + n3*0.4 + n5*0.3); // gentle rolling - break; - case 'swamp': - h = Math.floor(SEA_GY - 2 + n3*0.2 + n4*0.3); // very flat, near sea level - h = Math.max(h, SEA_GY - 3); // never too deep - break; - case 'mountains': - h = Math.floor(SEA_GY - 15 + n1*1.5 + n2*1.2 + n3); // tall peaks - break; - default: // plains - h = Math.floor(SEA_GY - 8 + n1 + n2 + n3 + n4 + n5); - } - return h; - } - - function genColumn(gx) { - if(generated.has(gx)) return; - if(worldSeed == null) return; // wait for server seed in multiplayer - generated.add(gx); - - const sgy = surfaceGyAt(gx); - const biome = getCachedBiome(gx); - - // === Вода и поверхность === - if(sgy > SEA_GY) { - // ниже уровня моря — заливаем водой - for(let gy = SEA_GY; gy < sgy; gy++) { - const blockType = (biome === 'swamp' && gy >= SEA_GY - 1) ? 'swamp_water' : 'water'; - setBlock(gx, gy, blockType); - } - setBlock(gx, sgy, 'sand'); - } else { - // поверхность - const b = BIOMES[biome]; - setBlock(gx, sgy, b.surface); - // болото: случайные лужи болотной воды - if(biome === 'swamp' && seededRandom(gx*3, sgy) < 0.15) { - setBlock(gx, sgy-1, 'swamp_water'); - } - // тундра: лёд на воде рядом - if(biome === 'tundra' && sgy === SEA_GY && seededRandom(gx, SEA_GY-1) < 0.3) { - setBlock(gx, SEA_GY-1, 'ice'); - } - } - - // === Подповерхностные слои === - for(let gy = sgy+1; gy <= BEDROCK_GY; gy++) { - if(gy === BEDROCK_GY) { setBlock(gx,gy,'bedrock'); continue; } - - let t = BIOMES[biome].subsurface; - - // глубже — камень - if(gy > sgy + 3) t = 'stone'; - - // пустыня: sand глубже - if(biome === 'desert' && gy <= sgy + 6) t = 'sand'; - - // болото: глина ближе к поверхности - if(biome === 'swamp' && gy <= sgy + 2 && seededRandom(gx, gy) < 0.3) t = 'clay'; - - // горы: gravel - if(biome === 'mountains' && gy > sgy + 4 && seededRandom(gx, gy) < 0.12) t = 'gravel'; - - // общие руды - const depth = gy - sgy; - const r = seededRandom(gx, gy); - if(t === 'stone') { - if(r < 0.06) t = 'coal'; - else if(r < 0.10) t = 'copper_ore'; - else if(r < 0.13) t = 'iron_ore'; - else if(depth > 40 && r < 0.145) t = 'gold_ore'; - else if(depth > 70 && r < 0.152) t = 'diamond_ore'; - } - - setBlock(gx, gy, t); - } - - // === Растительность и декор === - const b = BIOMES[biome]; - const top = getBlock(gx, sgy); - - // цветы (только plain) - if(biome === 'plains' && top && top.t === 'grass' && seededRandom(gx, sgy-1) < 0.10) { - setBlock(gx, sgy-1, 'flower'); - } - - // деревья - if(b.trees && seededRandom(gx*7, sgy-2) < b.treeChance) { - if(biome === 'tundra') { - // ёлки (треугольные, 3-5 высоты) - const th = 3 + Math.floor(seededRandom(gx, sgy) * 3); - for(let i = 0; i < th; i++) setBlock(gx, sgy-1-i, 'wood'); - // крона (треугольник) - for(let row = 0; row < th; row++) { - const w = Math.min(row + 1, 2); - for(let dx = -w; dx <= w; dx++) { - const ly = sgy-1-th+row; - if(ly >= 0) setBlock(gx+dx, ly, 'spruce_leaves'); - } - } - } else if(biome === 'swamp') { - // болотное дерево (короче, с мхом) - setBlock(gx, sgy-1, 'wood'); - setBlock(gx, sgy-2, 'moss'); - setBlock(gx-1, sgy-2, 'leaves'); - setBlock(gx+1, sgy-2, 'leaves'); - } else { - // обычное дерево (plains) - setBlock(gx, sgy-1, 'wood'); - setBlock(gx, sgy-2, 'wood'); - setBlock(gx, sgy-3, 'leaves'); - setBlock(gx-1, sgy-3, 'leaves'); - setBlock(gx+1, sgy-3, 'leaves'); - } - } - - // кактусы (пустыня) - if(biome === 'desert' && seededRandom(gx*11, sgy) < 0.04) { - const ch = 1 + Math.floor(seededRandom(gx, sgy+1) * 2); - for(let i = 0; i < ch; i++) setBlock(gx, sgy-1-i, 'cactus'); - } - - // грибы (болото) - if(biome === 'swamp' && seededRandom(gx*13, sgy) < 0.06) { - setBlock(gx, sgy-1, 'mushroom'); - } - - // сухие кусты (пустыня) - if(biome === 'desert' && seededRandom(gx*17, sgy) < 0.05) { - setBlock(gx, sgy-1, 'dead_bush'); - } - - // === Структуры мира === - // Пирамида в пустыне - if(biome === 'desert' && ((gx % 200 + 200) % 200) === 47 && sgy < SEA_GY && sgy > SEA_GY - 5) { - placeStructure(gx, sgy - 5, PYRAMID_PATTERN); - } - // Дом в равнине - if(biome === 'plains' && ((gx % 150 + 150) % 150) === 33 && sgy < SEA_GY) { - placeStructure(gx, sgy - 4, HOUSE_PATTERN); - } - // Хижина в болоте - if(biome === 'swamp' && ((gx % 180 + 180) % 180) === 55 && sgy < SEA_GY) { - placeStructure(gx, sgy - 3, HUT_PATTERN); - } - - // Применяем серверные оверрайды для этой колонны - const colPrefix = gx + ','; - for (const [key, ov] of serverOverrides) { - if (!key.startsWith(colPrefix)) continue; - if (ov.op === 'remove') { - const b = grid.get(key); - if (b) { grid.delete(key); b.dead = true; } - } else if (ov.op === 'set') { - if (!grid.has(key)) { - const gy = parseInt(key.split(',')[1]); - const nb = { gx, gy, t: ov.t, dead: false, active: false, fuse: 0 }; - grid.set(key, nb); - blocks.push(nb); - } - } - } - } - - // Перегенерация видимых чанков (используется при загрузке сохранения) - function regenerateVisibleChunks(){ - const gx0 = Math.floor(camX/TILE); - for(let gx=gx0-GEN_MARGIN_X; gx<=gx0+GEN_MARGIN_X; gx++){ - // Принудительно перегенерируем колонну - generated.delete(gx); - genColumn(gx); - } - } - - function ensureGenAroundCamera(){ - const gx0 = Math.floor(camX/TILE); - for(let gx=gx0-GEN_MARGIN_X; gx<=gx0+GEN_MARGIN_X; gx++){ - genColumn(gx); - } - } - - // Лут с дерева/листвы: дерево -> wood; листья -> leaves - // (уже в mine добавляется inv[type] автоматически) - - // Рисование костра: огонь поверх текстуры - function drawFire(wx,wy,now){ + // src/render/draw-fire.js + function drawFire(ctx, wx, wy, now) { const baseX = wx; const baseY = wy; - const flick = 1.5 + (Math.sin(now/200)+1)*1; - ctx.fillStyle = 'rgba(255,140,0,0.85)'; + const flick = 6 + (Math.sin(now / 90) + 1) * 4; + ctx.fillStyle = "rgba(255,140,0,0.85)"; ctx.beginPath(); - ctx.moveTo(baseX+10, baseY+30); - ctx.lineTo(baseX+20, baseY+30-flick); - ctx.lineTo(baseX+30, baseY+30); + ctx.moveTo(baseX + 10, baseY + 30); + ctx.lineTo(baseX + 20, baseY + 30 - flick); + ctx.lineTo(baseX + 30, baseY + 30); ctx.fill(); - - ctx.fillStyle = 'rgba(255,230,150,0.75)'; + ctx.fillStyle = "rgba(255,230,150,0.75)"; ctx.beginPath(); - ctx.moveTo(baseX+14, baseY+30); - ctx.lineTo(baseX+20, baseY+30-(flick*0.7)); - ctx.lineTo(baseX+26, baseY+30); + ctx.moveTo(baseX + 14, baseY + 30); + ctx.lineTo(baseX + 20, baseY + 30 - flick * 0.7); + ctx.lineTo(baseX + 26, baseY + 30); ctx.fill(); } - - // Моб AI - function mobAI(m, dt){ - updateWaterFlag(m); - - if(m.kind==='zombie'){ - // активность ночью - const night = isNight(); - if(!night){ m.hp -= 30*dt; m.vx *= 0.5; return; } - const dir = Math.sign((player.x) - m.x); - m.vx = dir * m.speed; - if(m.inWater && Math.random()<0.06) m.vy = -260; - // атака - if(Math.abs((m.x+ m.w/2) - (player.x+player.w/2)) < 28 && - Math.abs((m.y+ m.h/2) - (player.y+player.h/2)) < 40 && - player.invuln <= 0){ - const damage = calculateDamage(15); - player.hp -= damage; - player.invuln = 0.8; - player.vx += dir*420; - player.vy -= 260; - playSound('hit1'); // Звук при атаке зомби - } - } else if(m.kind==='creeper'){ - // активность ночью - const night = isNight(); - if(!night){ m.hp -= 30*dt; m.vx *= 0.5; return; } - const dir = Math.sign((player.x) - m.x); - const dist = Math.hypot((player.x+player.w/2) - (m.x+m.w/2), (player.y+player.h/2) - (m.y+m.h/2)); - - // Движение к игроку - m.vx = dir * m.speed; - if(m.inWater && Math.random()<0.06) m.vy = -260; - - // Взрыв если близко к игроку - if(dist < 60){ - m.fuse -= dt; - if(m.fuse <= 0){ - explodeAt(Math.floor((m.x+m.w/2)/TILE), Math.floor((m.y+m.h/2)/TILE)); - m.hp = 0; - } - } else { - // Поджигаем если очень близко - if(dist < 40){ - m.fuse = 0.5; // Быстрый взрыв - } - } - } else if(m.kind==='skeleton'){ - // активность ночью - const night = isNight(); - if(!night){ m.hp -= 30*dt; m.vx *= 0.5; return; } - const dir = Math.sign((player.x) - m.x); - const dist = Math.hypot((player.x+player.w/2) - (m.x+m.w/2), (player.y+player.h/2) - (m.y+m.h/2)); - - // Движение к игроку - m.vx = dir * m.speed; - if(m.inWater && Math.random()<0.06) m.vy = -260; - - // Стрельба стрелами - m.shootCooldown -= dt; - if(dist < 300 && m.shootCooldown <= 0){ - m.shootCooldown = 2.0; - const dx = (player.x+player.w/2) - (m.x+m.w/2); - const dy = (player.y+player.h/2) - (m.y+m.h/2); - const angle = Math.atan2(dy, dx); - const speed = 450; - projectiles.push({ - x: m.x + m.w/2, - y: m.y + m.h/3, - vx: Math.cos(angle) * speed, - vy: Math.sin(angle) * speed, - dmg: 6, - owner: 'mob', - life: 3 - }); - } - } else if(m.kind==='scorpion') { - // Скорпион — бежит к игроку, яд (замедление) - const dir = Math.sign((player.x) - m.x); - m.vx = dir * m.speed; - if(m.inWater && Math.random()<0.06) m.vy = -260; - // Яд при касании — замедление на 3 сек - if(Math.abs((m.x+ m.w/2) - (player.x+player.w/2)) < 28 && - Math.abs((m.y+ m.h/2) - (player.y+player.h/2)) < 40 && - player.invuln <= 0){ - const damage = calculateDamage(8); - player.hp -= damage; - player.invuln = 0.8; - player.slowTimer = 3; // замедление - player.vx += dir*300; - player.vy -= 200; - playSound('hit1'); - } - } else if(m.kind==='polar_bear') { - // Белый медведь — нейтрален, атакует если ударили (hostile пока нет, атакует через proximity) - m.aiT -= dt; - if(m.aiT <= 0){ - m.aiT = 2.0 + Math.random()*3; - m.dir = Math.random()<0.5 ? -1 : 1; - if(Math.random()<0.3) m.dir = 0; - } - m.vx = m.dir * m.speed; - if(m.inWater) m.vy = -120; - } else if(m.kind==='slime') { - // Слизь — прыгает к игроку - const dir = Math.sign((player.x+player.w/2) - (m.x+m.w/2)); - m.aiT -= dt; - if(m.aiT <= 0){ - m.aiT = 1.5 + Math.random()*1.5; - m.dir = dir; - // Прыжок - m.vy = -200; - } - m.vx = m.dir * m.speed; - } else if(m.kind==='eagle') { - // Орёл — летает, атакует пикированием - const dx = (player.x+player.w/2) - (m.x+m.w/2); - const dy = (player.y+player.h/2) - (m.y+m.h/2); - const dist = Math.hypot(dx, dy); - if(dist < 400) { - // Пикирует на игрока - m.vx = Math.sign(dx) * m.speed; - m.vy = dy > 0 ? 60 : -60; // летит вниз к игроку - } else { - // Патрулирует - m.aiT -= dt; - if(m.aiT <= 0){ - m.aiT = 2+Math.random()*3; - m.dir = Math.random()<0.5 ? -1 : 1; - } - m.vx = m.dir * m.speed * 0.5; - m.vy = Math.sin(performance.now()/1000) * 30; // мягкое покачивание - } - // Атака при касании - if(dist < 30 && player.invuln <= 0){ - const damage = calculateDamage(10); - player.hp -= damage; - player.invuln = 0.8; - player.vy -= 200; - playSound('hit1'); - } - // Орёл не падает — летающий моб - m.vy *= 0.5; - m.grounded = false; - } else { - // животные (pig, chicken) - m.aiT -= dt; - if(m.aiT <= 0){ - m.aiT = 1.8 + Math.random()*2.5; - m.dir = Math.random()<0.5 ? -1 : 1; - if(Math.random()<0.25) m.dir = 0; - } - m.vx = m.dir * (m.kind==='chicken' ? 55 : 40); - if(m.inWater) m.vy = -120; - } - - // физика моба - const g = m.inWater ? GRAV_WATER : GRAV; - m.vy += g*dt; - - m.y += m.vy*dt; m.grounded=false; resolveY(m); - m.x += m.vx*dt; resolveX(m); - } - - function isNight(){ - // Автоматический цикл: ночь когда worldTime > 0.5 - return worldTime > 0.5; - } - - // Respawn - document.getElementById('respawnBtn').onclick = async () => { - playSound('click'); // Звук клика по кнопке - - console.log('=== RESPAWN CLICKED ==='); - console.log('isMultiplayer:', isMultiplayer); - console.log('otherPlayers.size:', otherPlayers.size); - console.log('player.hp before respawn:', player.hp); - - // В мультиплеере не загружаем сохранение, а возрождаемся в начальной точке - if (isMultiplayer && otherPlayers.size > 0) { - console.log('Мультиплеер режим - возрождение в начальной точке'); - player.hp = 100; - player.hunger = 100; - player.o2 = 100; - player.vx = player.vy = 0; - player.invuln = 0; - player.x = spawnPoint.x; - player.y = spawnPoint.y; - player.fallStartY = player.y; - console.log('Возрождение в начальной точке, HP:', player.hp); - } else { - console.log('Одиночный режим - загружаем последнее сохранение'); - // Одиночный режим - загружаем последнее сохранение - const loadedSave = await loadGame(); - if(loadedSave){ - await applySave(loadedSave); - console.log('Загружено последнее сохранение после смерти, final HP:', player.hp); - } else { - // Если сохранения нет, возрождаемся в начальной точке - player.hp = 100; - player.hunger = 100; - player.o2 = 100; - player.vx = player.vy = 0; - player.invuln = 0; - player.x = spawnPoint.x; - player.y = spawnPoint.y; - player.fallStartY = player.y; - console.log('Возрождение в начальной точке, HP:', player.hp); - } - } - - console.log('player.hp after respawn logic:', player.hp); - console.log('Hiding death screen...'); - deathEl.style.display='none'; - console.log('=== RESPAWN END ==='); - }; - - // Resize - function resize(){ - W = gameEl.clientWidth; - H = gameEl.clientHeight; - canvas.width = W*dpr; - canvas.height = H*dpr; - lightC.width = W*dpr; - lightC.height = H*dpr; - ctx.setTransform(dpr,0,0,dpr,0,0); - } - window.addEventListener('resize', resize); - - // init - resize(); - rebuildHotbar(); - - // Инициализируем и загружаем сохранение - initDB().then(async () => { - // Пытаемся загрузить сохранённую игру - const loadedSave = await loadGame(); - if(loadedSave){ - await applySave(loadedSave); - console.log('Загружено сохранение, HP:', player.hp); - - // Проверяем HP после загрузки - если <= 0, возрождаемся - if (player.hp <= 0) { - console.log('WARNING: HP <= 0 после загрузки, возрождаемся'); - player.hp = 100; - player.hunger = 100; - player.o2 = 100; - player.x = spawnPoint.x; - player.y = spawnPoint.y; - player.vx = player.vy = 0; - player.invuln = 0; - player.fallStartY = player.y; - } - } else { - console.log('Сохранение не найдено, начинаем новую игру'); - - // Инициализируем игрока для новой игры - player.hp = 100; - player.hunger = 100; - player.o2 = 100; - player.vx = player.vy = 0; - player.invuln = 0; - - // старт — на поверхности (используем ту же логику что и в world_state) - const startGX = 6; - for (let dx = -3; dx <= 3; dx++) genColumn(startGX + dx); - const surfaceY = surfaceGyAt(startGX); - let safeGY = surfaceY - 1; - const aboveBlock = getBlock(startGX, surfaceY - 1); - if (aboveBlock && aboveBlock.t === 'water') { - for (let gy = SEA_GY - 1; gy >= 0; gy--) { - const b = getBlock(startGX, gy); - if (!b || b.dead || b.t === 'air' || b.t === 'water') continue; - safeGY = gy - 1; - break; - } - } - player.y = safeGY * TILE; - player.x = startGX * TILE; - player.fallStartY = player.y; - - // Обновляем spawnPoint, чтобы возрождение было на поверхности - spawnPoint.x = player.x; - spawnPoint.y = player.y; - - console.log('Новая игра: startGX=', startGX, 'surfaceY=', surfaceY, 'player.y=', player.y, 'player.hp=', player.hp); - console.log('spawnPoint обновлён: x=', spawnPoint.x, 'y=', spawnPoint.y); - - // Генерируем карту вокруг стартовой позиции при инициализации - for(let gx = startGX - 50; gx <= startGX + 50; gx++){ - genColumn(gx); - } - } - - // Автосейв при скрытии страницы (защита от потери прогресса) - document.addEventListener('visibilitychange', () => { - if(document.hidden){ - saveGame(); - } - }); - - // Автосейв перед закрытием страницы (защита от потери прогресса) - window.addEventListener('beforeunload', () => { - saveGame(); - }); - }).catch(err => { - console.error('Ошибка инициализации:', err); - // При ошибке начинаем новую игру - const startGX = 6; - genColumn(startGX); - player.y = (surfaceGyAt(startGX)-1)*TILE; - player.fallStartY = player.y; - - for(let gx = startGX - 50; gx <= startGX + 50; gx++){ - genColumn(gx); - } - }); - - // main loop - let last = performance.now(); - let prevJump = false; - // При возврате на вкладку — сбрасываем last чтобы не было скачка dt - document.addEventListener('visibilitychange', () => { + + // src/game/loop.js + var last = performance.now(); + var prevJump = false; + document.addEventListener("visibilitychange", () => { if (!document.hidden) last = performance.now(); }); - function loop(now){ - const rawDt = Math.min(0.05, (now-last)/1000); + function loop(now) { + const rawDt = Math.min(0.05, (now - last) / 1e3); last = now; - // Sub-stepping: разбиваем физику на шаги ≤16ms чтобы не проваливаться сквозь блоки const PHYSICS_STEP = 0.016; const steps = Math.max(1, Math.ceil(rawDt / PHYSICS_STEP)); const dt = rawDt / steps; - - const jumpPressed = inp.j && !prevJump; - prevJump = inp.j; - - // Ускорение времени во время сна - if(player.sleeping && isNight()){ - worldTime += dt * 8 / DAY_LEN; // В 8 раз быстрее - // Восстанавливаем здоровье во время сна + const player = state.player; + const inv = state.inv; + const inp2 = state.inp; + const clouds = state.clouds; + const mobs = state.mobs; + const projectiles = state.projectiles; + const parts2 = state.parts; + const boat = state.boat; + const jumpPressed = inp2.j && !prevJump; + prevJump = inp2.j; + if (player.sleeping && isNight()) { + state.worldTime += dt * 8 / state.DAY_LEN; player.hp = Math.min(100, player.hp + dt * 20); - // Автоматическое пробуждение когда наступает день - if(!isNight()){ + if (!isNight()) { player.sleeping = false; } } else { - worldTime += dt / DAY_LEN; + state.worldTime += dt / state.DAY_LEN; } - if(worldTime >= 1) worldTime -= 1; - - // камера следует за игроком по X/Y - camX = Math.floor((player.x + player.w/2) - W/2); - camY = Math.floor((player.y + player.h/2) - H/2); - + if (state.worldTime >= 1) state.worldTime -= 1; + state.camX = Math.floor(player.x + player.w / 2 - state.W / 2); + state.camY = Math.floor(player.y + player.h / 2 - state.H / 2); ensureGenAroundCamera(); - - // clouds parallax - for(const c of clouds){ + for (const c of clouds) { c.x -= c.s * dt; - if(c.x + c.w < camX - 400) c.x = camX + W + Math.random()*700; + if (c.x + c.w < state.camX - 400) c.x = state.camX + state.W + Math.random() * 700; } - - // Погода (биом-зависимая) - updateWeather(dt); - - // player updateWaterFlag(player); - - // кислород/утопление: тратим O2 только если голова под водой, иначе восстанавливаем [web:223] - if(player.headInWater){ - player.o2 = Math.max(0, player.o2 - 6*dt); // замедлил в 3.7 раза - if(player.o2 === 0){ - const damage = calculateDamage(4*dt); + if (player.headInWater) { + player.o2 = Math.max(0, player.o2 - 6 * dt); + if (player.o2 === 0) { + const damage = calculateDamage(4 * dt); player.hp -= damage; } } else { - player.o2 = Math.min(100, player.o2 + 10*dt); // замедлил восстановление в 4 раза + player.o2 = Math.min(100, player.o2 + 10 * dt); } - - // голод убывает, но HP не отнимает (как просили) - player.hunger = Math.max(0, player.hunger - dt*0.2); // замедлил в 4 раза - - - // ========== ТЕМПЕРАТУРА ========== - if (player.temperature === undefined) player.temperature = 15; - const BIOME_TEMP = { tundra: -20, plains: 15, swamp: 20, desert: 45, mountains: 5 }; - const UNDERGROUND_TEMP = 15; - const COLD_THRESHOLD = -5; - const HEAT_THRESHOLD = 35; - const HEAT_RADIUS = 5; - const pGX = Math.floor(player.x / TILE); - const biome = getCachedBiome(pGX); - const pGY = Math.floor(player.y / TILE); - const sGY = surfaceGyAt(pGX); - const isUndergroundTemp = (pGY - sGY) > 2; // player deeper than 2 blocks below surface - let targetTemp = BIOME_TEMP[biome] || 15; - if (isUndergroundTemp) targetTemp = UNDERGROUND_TEMP; - if (isNight() && !isUndergroundTemp) targetTemp -= 10; - if ((weatherState.type === 'rain' || weatherState.type === 'storm') && !isUndergroundTemp) targetTemp -= 5; - player.temperature += (targetTemp - player.temperature) * dt * 0.3; - let nearHeat = false, nearCool = false; - for (let dx = -HEAT_RADIUS; dx <= HEAT_RADIUS; dx++) { - for (let dy = -HEAT_RADIUS; dy <= HEAT_RADIUS; dy++) { - const b = getBlock(pGX + dx, pGY + dy); - if (!b || b.dead) continue; - if (b.t === 'campfire' || b.t === 'torch') nearHeat = true; - if (b.t === 'water' && biome === 'desert') nearCool = true; - } - } - if (nearHeat) { - player.temperature += (30 - player.temperature) * dt * 2; - if (player.hp < 100) player.hp = Math.min(100, player.hp + 8 * dt); - } - if (nearCool) { - player.temperature += (15 - player.temperature) * dt * 1.5; - if (player.hp < 100 && player.temperature > HEAT_THRESHOLD) { - player.hp = Math.min(100, player.hp + 8 * dt); - } - } - if (isUndergroundTemp && !nearHeat) { - if (player.hp < 100 && player.temperature >= COLD_THRESHOLD && player.temperature <= HEAT_THRESHOLD) { - player.hp = Math.min(100, player.hp + 2 * dt); - } - } - const aboveBlk = getBlock(pGX, pGY - 1); - const inShade = aboveBlk && BLOCKS[aboveBlk.t] && BLOCKS[aboveBlk.t].solid && aboveBlk.t !== 'glass'; - if (inShade && !isUndergroundTemp && !nearCool) { - player.temperature -= 5 * dt; - if (player.temperature > HEAT_THRESHOLD - 2 && player.hp < 100) { - player.hp = Math.min(100, player.hp + 1 * dt); - } - } - if (player.temperature < COLD_THRESHOLD && !isUndergroundTemp) { - const severity = Math.abs(player.temperature - COLD_THRESHOLD) / 15; - player.hp -= 1 * severity * dt; - if (severity > 0.5) player.vx *= (1 - 0.3 * Math.min(1, severity) * dt); - } - if (player.temperature > HEAT_THRESHOLD && !isUndergroundTemp) { - const severity = (player.temperature - HEAT_THRESHOLD) / 15; - player.hp -= 1 * severity * dt; - if (severity > 0.5) player.hunger -= 0.5 * severity * dt; - } - // Игрок не может двигаться во время сна - if(player.sleeping){ + player.hunger = Math.max(0, player.hunger - dt * 0.2); + if (player.sleeping) { player.vx = 0; player.vy = 0; } else { - const dir = (inp.r?1:0) - (inp.l?1:0); - const speedMult = getWeatherSpeedMultiplier() * (player.slowTimer > 0 ? 0.4 : 1.0); - if(dir) player.vx = dir * MOVE * speedMult; + const dir = (inp2.r ? 1 : 0) - (inp2.l ? 1 : 0); + if (dir) player.vx = dir * state.MOVE; else player.vx *= 0.82; } - - // Звук шагов при движении по земле - if(player.grounded && !player.inWater && Math.abs(player.vx) > 50){ - const stepInterval = 0.35; // Интервал между шагами в секундах - if(now/1000 - player.lastStepTime > stepInterval){ - playSound('step'); - player.lastStepTime = now/1000; + if (player.grounded && !player.inWater && Math.abs(player.vx) > 50) { + const stepInterval = 0.35; + if (now / 1e3 - player.lastStepTime > stepInterval) { + playSound("step"); + player.lastStepTime = now / 1e3; } } - - // прыжок/плавание (новая логика) - if(player.inBoat){ - // Игрок в лодке - лодка следует за игроком - const dir = (inp.r?1:0) - (inp.l?1:0); - if(dir) boat.vx = dir * MOVE; + if (player.inBoat) { + const dir = (inp2.r ? 1 : 0) - (inp2.l ? 1 : 0); + if (dir) boat.vx = dir * state.MOVE; else boat.vx *= 0.95; - - // Лодка плавает на воде boat.vy = 0; - - // Игрок следует за лодкой (сидит внутри неё) - player.x = boat.x + 2; // Игрок по центру лодки - player.y = boat.y - 4; // Игрок выше лодки (сидит внутри) + player.x = boat.x + 2; + player.y = boat.y - 4; player.vx = boat.vx; player.vy = boat.vy; player.grounded = true; - player.inWater = false; // Игрок не в воде когда в лодке - - // Прыжок из лодки (высадка) - if(jumpPressed){ - // Возвращаем лодку в инвентарь + player.inWater = false; + if (jumpPressed) { inv.boat = (inv.boat || 0) + 1; - player.inBoat = false; boat.active = false; - player.y += TILE; // Прыгаем из лодки - player.vy = -JUMP * 0.5; - playSound('splash'); + player.y += state.TILE; + player.vy = -state.JUMP * 0.5; + playSound("splash"); } - - } else if(player.inWater){ - // сопротивление в воде - player.vx *= 0.90; + } else if (player.inWater) { + player.vx *= 0.9; player.vy *= 0.92; - - // Если не нажимаем прыжок - тонем (гравитация в воде) - if(!jumpPressed && !inp.j){ - // Применяем гравитацию в воде - игрок тонет - player.vy += GRAV_WATER * dt; + if (!jumpPressed && !inp2.j) { + player.vy += state.GRAV_WATER * dt; } else { - // Если нажимаем прыжок - поднимаемся на поверхность - if(jumpPressed){ - player.vy = Math.min(player.vy, -520); // рывок вверх - } else if(inp.j){ - // если держим — мягкое всплытие + if (jumpPressed) { + player.vy = Math.min(player.vy, -520); + } else if (inp2.j) { player.vy = Math.min(player.vy, -260); } } - } else { - // обычный прыжок (только по нажатию) - if(jumpPressed && player.grounded && !player.sleeping){ - player.vy = -JUMP; + if (jumpPressed && player.grounded && !player.sleeping) { + player.vy = -state.JUMP; player.grounded = false; player.fallStartY = player.y; } } - - // Гравитация применяется только вне воды и вне лодки - if(!player.inWater && !player.inBoat){ - player.vy += GRAV*dt; + if (!player.inWater && !player.inBoat) { + player.vy += state.GRAV * dt; } - - // Обновляем позицию лодки - if(boat.active){ + if (boat.active) { boat.x += boat.vx * dt; boat.y += boat.vy * dt; - - // Лодка не выходит за пределы воды - const boatGX = Math.floor(boat.x / TILE); - const boatGY = Math.floor(boat.y / TILE); + const boatGX = Math.floor(boat.x / state.TILE); + const boatGY = Math.floor(boat.y / state.TILE); const below = getBlock(boatGX, boatGY + 1); - - if(!below || below.t !== 'water'){ - // Если лодка вышла из воды - выкидываем игрока + if (!below || below.t !== "water") { inv.boat = (inv.boat || 0) + 1; player.inBoat = false; boat.active = false; - player.y += TILE; + player.y += state.TILE; player.vy = -200; - playSound('splash'); + playSound("splash"); } } - - // Проверяем, не доплыл ли игрок из лодки - if(player.inBoat && !boat.active){ + if (player.inBoat && !boat.active) { inv.boat = (inv.boat || 0) + 1; player.inBoat = false; - player.y += TILE; + player.y += state.TILE; player.vy = -200; - playSound('splash'); + playSound("splash"); } - - // Sub-stepped physics: применяем движение мелкими шагами for (let step = 0; step < steps; step++) { - player.y += player.vy*dt; + player.y += player.vy * dt; resolveY(player); - player.x += player.vx*dt; + player.x += player.vx * dt; resolveX(player); } - - // Отправляем позицию на сервер (мультиплеер) sendPlayerPosition(); - - // Обновляем физику воды updateWaterPhysics(dt); - - // Погода и дождь updateWeather(dt); updateRain(dt); - player.invuln = Math.max(0, player.invuln - dt); - if(player.slowTimer > 0) player.slowTimer = Math.max(0, player.slowTimer - dt); - - // Рост культур - for(const key of Object.keys(growthTimers)){ - const tile = growthTimers[key]; - if(tile.stage < 3){ - tile.growTimer -= dt; - if(tile.growTimer <= 0){ - tile.stage++; - tile.growTimer = 8 + Math.random()*6; - // Обновляем визуальный блок - const [gxStr, gyStr] = key.split(','); - const gx = parseInt(gxStr), gy = parseInt(gyStr); - const curBlock = getBlock(gx, gy); - if(curBlock && curBlock.t !== curBlock.t.replace(/_stage\d/, '_stage'+tile.stage)){ - // Вычисляем следующую стадию - const baseType = curBlock.t.replace(/_stage\d/, ''); - const nextType = baseType + '_stage' + tile.stage; - setBlock(gx, gy, nextType); - sendBlockChange(gx, gy, nextType, 'add'); - // Проверяем созрел ли - if(tile.stage >= 3) delete growthTimers[key]; - } - } - } + state.voicePosT += dt; + if (state.voicePosT > 0.5 && state.voiceSocket && state.voiceSocket.connected) { + state.voicePosT = 0; + state.voiceSocket.emit("voice_pos", { x: player.x, y: player.y }); } - - // Voice position update - voicePosT += dt; - if(voicePosT > 0.5 && voiceSocket && voiceSocket.connected){ - voicePosT = 0; - voiceSocket.emit('voice_pos', { x: player.x, y: player.y }); - } - - // Furnace tick tickFurnaces(dt); - - // Обновляем UI печи если открыта - if(currentFurnaceKey && Math.random() < 0.1){ + if (state.currentFurnaceKey && Math.random() < 0.1) { renderFurnaceUI(); } - - // Projectile tick (стрелы) - for(let i = projectiles.length-1; i>=0; i--){ + for (let i = projectiles.length - 1; i >= 0; i--) { const p = projectiles[i]; p.x += p.vx * dt; p.y += p.vy * dt; - p.vy += 400 * dt; // гравитация + p.vy += 400 * dt; p.life -= dt; - - // Столкновение с блоком - const gx = Math.floor(p.x / TILE); - const gy = Math.floor(p.y / TILE); + const gx = Math.floor(p.x / state.TILE); + const gy = Math.floor(p.y / state.TILE); const blk = getBlock(gx, gy); - if(blk && !blk.dead && BLOCKS[blk.t] && BLOCKS[blk.t].solid){ - // Врезался в стену - if(p.owner === 'player' && Math.random() < 0.5) inv.arrow++; // подбираем ~50% + if (blk && !blk.dead && BLOCKS[blk.t] && BLOCKS[blk.t].solid) { + if (p.owner === "player" && Math.random() < 0.5) inv.arrow++; projectiles.splice(i, 1); continue; } - - // Столкновение с сущностью - if(p.owner === 'mob'){ - // Попал в игрока - if(p.x > player.x && p.x < player.x+player.w && p.y > player.y && p.y < player.y+player.h){ - if(player.invuln <= 0){ + if (p.owner === "mob") { + if (p.x > player.x && p.x < player.x + player.w && p.y > player.y && p.y < player.y + player.h) { + if (player.invuln <= 0) { player.hp -= calculateDamage(p.dmg); player.invuln = 0.4; player.vx += p.vx * 0.3; player.vy -= 150; - playSound('hit1'); + playSound("hit1"); } projectiles.splice(i, 1); continue; } } else { - // Попал в моба — check all mobs (client-authoritative) - const allArrowMobs = getAllMobs(); - for(let j = allArrowMobs.length - 1; j >= 0; j--){ - const m = allArrowMobs[j]; - if(m.dead) continue; - if(p.x > m.x && p.x < m.x+m.w && p.y > m.y && p.y < m.y+m.h){ - m.hp -= p.dmg; - m.vx += p.vx * 0.2; - m.vy -= 200; - // Server-spawned mob: emit arrow hit to server for relay - if(m.id !== undefined && isMultiplayer){ - socket.emit('mob_arrow_hit', { id: m.id, dmg: p.dmg, vx: p.vx }); - if(m.hp <= 0){ - socket.emit('mob_died', { id: m.id }); - } + let hitMob = false; + if (state.isMultiplayer) { + for (const [id, sm] of state.serverMobs) { + if (sm.dead) continue; + if (p.x > sm.x && p.x < sm.x + sm.w && p.y > sm.y && p.y < sm.y + sm.h) { + state.socket.emit("mob_arrow_hit", { id: sm.id, dmg: p.dmg, vx: p.vx }); + projectiles.splice(i, 1); + hitMob = true; + break; } - if(m.hp <= 0){ - spawnDrops(m.x + m.w/2, m.y + m.h/2, m.kind); - // Remove from the correct array - if(m.id !== undefined){ - serverMobs.delete(m.id); - } else { - const localIdx = mobs.indexOf(m); - if(localIdx >= 0) mobs.splice(localIdx, 1); + } + } + if (!hitMob) { + for (let j = mobs.length - 1; j >= 0; j--) { + const m = mobs[j]; + if (p.x > m.x && p.x < m.x + m.w && p.y > m.y && p.y < m.y + m.h) { + m.hp -= p.dmg; + m.vx += p.vx * 0.2; + m.vy -= 200; + if (m.hp <= 0) { + inv.meat += m.kind === "chicken" ? 1 : 2; + if (m.kind === "skeleton") { + inv.arrow += 2 + Math.floor(Math.random() * 3); + if (Math.random() < 0.15) inv.bow = (inv.bow || 0) + 1; + } + mobs.splice(j, 1); + rebuildHotbar(); } - rebuildHotbar(); + projectiles.splice(i, 1); + break; } - projectiles.splice(i, 1); - break; } } } - - // Таймаут - if(p.life <= 0) projectiles.splice(i, 1); + if (p.life <= 0) projectiles.splice(i, 1); } - - // TNT tick - for(const key of Array.from(activeTNT)){ - const b = grid.get(key); - if(!b || b.dead){ activeTNT.delete(key); continue; } + for (const key of Array.from(state.activeTNT)) { + const b = state.grid.get(key); + if (!b || b.dead) { + state.activeTNT.delete(key); + continue; + } b.fuse -= dt; - if(b.fuse <= 0){ - explodeAt(b.gx,b.gy); + if (b.fuse <= 0) { + explodeAt(b.gx, b.gy); } } - - // mobs spawn (с обеих сторон камеры) — только в одиночном режиме (MP mobs come from server events) - spawnT += dt; - if(!isMultiplayer && spawnT > 1.8 && getAllMobs().length < 30){ - spawnT = 0; - - // Выбираем сторону спавна (левая или правая) + state.spawnT += dt; + if (!state.isMultiplayer && state.spawnT > 1.8 && mobs.length < 30) { + state.spawnT = 0; const spawnLeft = Math.random() < 0.5; - const gx = spawnLeft - ? Math.floor((camX - 200)/TILE) - : Math.floor((camX + W + 200)/TILE); - + const gx = spawnLeft ? Math.floor((state.camX - 200) / state.TILE) : Math.floor((state.camX + state.W + 200) / state.TILE); genColumn(gx); const sgy = surfaceGyAt(gx); - const wx = gx*TILE + 4; - const wy = (sgy-1)*TILE; // 1 блок выше поверхности - - // не спавнить в воде + const wx = gx * state.TILE + 4; + const wy = (sgy - 2) * state.TILE; const top = getBlock(gx, sgy); - if(top && top.t==='water') { - // skip + if (top && top.t === "water") { } else { - const night = isNight(); - if(night){ - // Ночью спавним враждебных мобов (максимум 12 хостайл) - const hostileCount = mobs.filter(m => m.kind==='zombie'||m.kind==='creeper'||m.kind==='skeleton').length; - if(hostileCount < 12){ + const night2 = isNight(); + if (night2) { + const hostileCount = mobs.filter((m) => m.kind === "zombie" || m.kind === "creeper" || m.kind === "skeleton").length; + if (hostileCount < 12) { const rand = Math.random(); - if(rand < 0.35){ + if (rand < 0.35) { mobs.push(new Zombie(wx, wy)); - } else if(rand < 0.55){ + } else if (rand < 0.55) { mobs.push(new Creeper(wx, wy)); } else { mobs.push(new Skeleton(wx, wy)); } } } - // Животные спавнятся и днём и ночью (с лимитом) - const animalCount = mobs.filter(m => m.kind==='pig'||m.kind==='chicken').length; - if(animalCount < 8){ - mobs.push(Math.random()<0.5 ? new Pig(wx, wy) : new Chicken(wx, wy)); + const animalCount = mobs.filter((m) => m.kind === "pig" || m.kind === "chicken").length; + if (animalCount < 8) { + mobs.push(Math.random() < 0.5 ? new Pig(wx, wy) : new Chicken(wx, wy)); } } } - - // mobs update — mobAI runs on ALL mobs (client-authoritative for server-spawned mobs too) - { - // Local mobs - for(let i=mobs.length-1;i>=0;i--){ + if (!state.isMultiplayer) { + for (let i = mobs.length - 1; i >= 0; i--) { const m = mobs[i]; mobAI(m, dt); - if(m.hp<=0) mobs.splice(i,1); - } - // Server-spawned mobs: server is authoritative for positions - // mobAI does NOT run on serverMobs — server handles all physics + AI - // Only remove dead mobs from local map - if(isMultiplayer){ - for (const [id, sm] of serverMobs) { - if(sm.hp <= 0){ - sm.dead = true; - } - } - for (const [id, sm] of serverMobs) { - if(sm.dead) serverMobs.delete(id); - } + if (m.hp <= 0) mobs.splice(i, 1); } } - - // particles - for(let i=parts.length-1;i>=0;i--){ - const p = parts[i]; + for (let i = parts2.length - 1; i >= 0; i--) { + const p = parts2[i]; p.t -= dt; - p.x += p.vx*dt; - p.y += p.vy*dt; - p.vy += GRAV*dt; - if(p.t <= 0) parts.splice(i,1); + p.x += p.vx * dt; + p.y += p.vy * dt; + p.vy += state.GRAV * dt; + if (p.t <= 0) parts2.splice(i, 1); } - - // death - if(player.hp <= 0){ - deathEl.style.display='flex'; - } else if(deathEl.style.display === 'flex') { - // Если HP > 0 но экран смерти всё ещё показан - скрываем его - deathEl.style.display='none'; + if (player.hp <= 0) { + state.deathEl.style.display = "flex"; + } else if (state.deathEl.style.display === "flex") { + state.deathEl.style.display = "none"; } - - // render + const ctx = state.ctx; + const W = state.W; + const H = state.H; + const camX = state.camX; + const camY = state.camY; + const TILE2 = state.TILE; + const tex2 = state.tex; const night = isNight(); - - // sky - ctx.fillStyle = night ? '#070816' : (isRaining ? '#6B7B8D' : '#87CEEB'); - ctx.fillRect(0,0,W,H); - - // clouds (parallax x/y) + ctx.fillStyle = night ? "#070816" : state.isRaining ? "#6B7B8D" : "#87CEEB"; + ctx.fillRect(0, 0, W, H); ctx.save(); - ctx.translate(-camX*0.5, -camY*0.15); - ctx.fillStyle = 'rgba(255,255,255,0.65)'; - for(const c of clouds){ + ctx.translate(-camX * 0.5, -camY * 0.15); + ctx.fillStyle = "rgba(255,255,255,0.65)"; + for (const c of clouds) { ctx.fillRect(c.x, c.y, c.w, 26); - ctx.fillRect(c.x+20, c.y-10, c.w*0.6, 22); + ctx.fillRect(c.x + 20, c.y - 10, c.w * 0.6, 22); } ctx.restore(); - - // world ctx.save(); ctx.translate(-camX, -camY); - - const minGX = Math.floor(camX/TILE)-2; - const maxGX = Math.floor((camX+W)/TILE)+2; - const minGY = Math.floor(camY/TILE)-6; - const maxGY = Math.floor((camY+H)/TILE)+6; - - // draw blocks (по массиву, но фильтруем диапазоном) - for(const b of blocks){ - if(b.dead) continue; - if(b.gx < minGX || b.gx > maxGX || b.gy < minGY || b.gy > maxGY) continue; - + const minGX = Math.floor(camX / TILE2) - 2; + const maxGX = Math.floor((camX + W) / TILE2) + 2; + const minGY = Math.floor(camY / TILE2) - 6; + const maxGY = Math.floor((camY + H) / TILE2) + 6; + const blocks2 = state.blocks; + for (const b of blocks2) { + if (b.dead) continue; + if (b.gx < minGX || b.gx > maxGX || b.gy < minGY || b.gy > maxGY) continue; const def = BLOCKS[b.t]; - if(def.alpha){ + if (def.alpha) { ctx.save(); ctx.globalAlpha = def.alpha; - ctx.drawImage(tex[b.t], b.gx*TILE, b.gy*TILE, TILE, TILE); + ctx.drawImage(tex2[b.t], b.gx * TILE2, b.gy * TILE2, TILE2, TILE2); ctx.restore(); } else { - ctx.drawImage(tex[b.t], b.gx*TILE, b.gy*TILE, TILE, TILE); + ctx.drawImage(tex2[b.t], b.gx * TILE2, b.gy * TILE2, TILE2, TILE2); } - - // TNT мигает, если активирован - if(b.t==='tnt' && b.active && Math.sin(now/60)>0){ - ctx.fillStyle='rgba(255,255,255,0.45)'; - ctx.fillRect(b.gx*TILE, b.gy*TILE, TILE, TILE); + if (b.t === "tnt" && b.active && Math.sin(now / 60) > 0) { + ctx.fillStyle = "rgba(255,255,255,0.45)"; + ctx.fillRect(b.gx * TILE2, b.gy * TILE2, TILE2, TILE2); } - - // огонь костра - if(b.t==='campfire'){ - drawFire(b.gx*TILE, b.gy*TILE, now); + if (b.t === "campfire") { + drawFire(ctx, b.gx * TILE2, b.gy * TILE2, now); } - // Печь — огонь когда обжигает - if(b.t==='furnace' && activeFurnaces.has(`${b.gx},${b.gy}`)){ - drawFire(b.gx*TILE + 8, b.gy*TILE + 5, now); + if (b.t === "furnace" && state.activeFurnaces.has(`${b.gx},${b.gy}`)) { + drawFire(ctx, b.gx * TILE2 + 8, b.gy * TILE2 + 5, now); } } - - // mobs - const allMobsRender = getAllMobs(); - for(const m of allMobsRender){ - if(m.kind==='zombie'){ - ctx.fillStyle = '#2ecc71'; + if (state.mining.gx !== null && state.mining.hardness > 0) { + const mg = state.mining; + const progress = Math.min(1, mg.progress / mg.hardness); + const cx = mg.gx * TILE2 - camX + camX; + const cy = mg.gy * TILE2 - camY + camY; + const wx = mg.gx * TILE2; + const wy = mg.gy * TILE2; + ctx.save(); + ctx.globalAlpha = Math.min(0.8, progress); + const numCracks = Math.floor(progress * 5); + ctx.strokeStyle = "#000"; + ctx.lineWidth = 2; + for (let i = 0; i < numCracks; i++) { + ctx.beginPath(); + ctx.moveTo(wx + TILE2 / 2, wy + TILE2 / 2); + const angle = (i * 72 + 36) * Math.PI / 180; + ctx.lineTo(wx + TILE2 / 2 + Math.cos(angle) * TILE2 * 0.4, wy + TILE2 / 2 + Math.sin(angle) * TILE2 * 0.4); + ctx.stroke(); + } + ctx.fillStyle = `rgba(0,0,0,${progress * 0.4})`; + ctx.fillRect(wx, wy, TILE2, TILE2); + ctx.globalAlpha = 1; + ctx.fillStyle = "#333"; + ctx.fillRect(wx, wy + TILE2 - 4, TILE2, 4); + ctx.fillStyle = "#2ecc71"; + ctx.fillRect(wx, wy + TILE2 - 4, TILE2 * progress, 4); + ctx.restore(); + } + const allMobsRender = state.isMultiplayer ? Array.from(state.serverMobs.values()) : mobs; + for (const m of allMobsRender) { + if (m.kind === "zombie") { + ctx.fillStyle = "#2ecc71"; ctx.fillRect(m.x, m.y, m.w, m.h); - ctx.fillStyle = '#c0392b'; - ctx.fillRect(m.x+6, m.y+12, 6,6); - ctx.fillRect(m.x+22, m.y+12, 6,6); - } else if(m.kind==='pig'){ - ctx.fillStyle = '#ffb6c1'; + ctx.fillStyle = "#c0392b"; + ctx.fillRect(m.x + 6, m.y + 12, 6, 6); + ctx.fillRect(m.x + 22, m.y + 12, 6, 6); + } else if (m.kind === "pig") { + ctx.fillStyle = "#ffb6c1"; ctx.fillRect(m.x, m.y, m.w, m.h); - ctx.fillStyle = '#000'; - ctx.fillRect(m.x+22, m.y+5, 3,3); - ctx.fillStyle = '#ff69b4'; - ctx.fillRect(m.x+28, m.y+12, 6,6); - } else if(m.kind==='chicken'){ - // chicken - ctx.fillStyle = '#ecf0f1'; + ctx.fillStyle = "#000"; + ctx.fillRect(m.x + 22, m.y + 5, 3, 3); + ctx.fillStyle = "#ff69b4"; + ctx.fillRect(m.x + 28, m.y + 12, 6, 6); + } else if (m.kind === "chicken") { + ctx.fillStyle = "#ecf0f1"; ctx.fillRect(m.x, m.y, m.w, m.h); - ctx.fillStyle = '#f39c12'; - ctx.fillRect(m.x+18, m.y+10, 6,4); - ctx.fillStyle = '#000'; - ctx.fillRect(m.x+8, m.y+6, 3,3); - } else if(m.kind==='creeper'){ - // creeper - ctx.fillStyle = '#4CAF50'; + ctx.fillStyle = "#f39c12"; + ctx.fillRect(m.x + 18, m.y + 10, 6, 4); + ctx.fillStyle = "#000"; + ctx.fillRect(m.x + 8, m.y + 6, 3, 3); + } else if (m.kind === "creeper") { + ctx.fillStyle = "#4CAF50"; ctx.fillRect(m.x, m.y, m.w, m.h); - // Глаза - ctx.fillStyle = '#000'; - ctx.fillRect(m.x+8, m.y+8, 4,4); - ctx.fillRect(m.x+22, m.y+8, 4,4); - // Рот - ctx.fillStyle = '#000'; - ctx.fillRect(m.x+12, m.y+20, 10,4); - // Ноги - ctx.fillStyle = '#4CAF50'; - ctx.fillRect(m.x+4, m.y+30, 6,20); - ctx.fillRect(m.x+24, m.y+30, 6,20); - } else if(m.kind==='skeleton'){ - // skeleton - детализированный - // Тело - ctx.fillStyle = '#ECEFF1'; - ctx.fillRect(m.x+10, m.y+20, 14, 12); - // Череп - ctx.fillRect(m.x+8, m.y+0, 18, 18); - // Глазницы - ctx.fillStyle = '#000'; - ctx.fillRect(m.x+10, m.y+6, 4,4); - ctx.fillRect(m.x+20, m.y+6, 4,4); - // Нос - ctx.fillRect(m.x+15, m.y+12, 4,2); - // Руки - ctx.fillStyle = '#ECEFF1'; - ctx.fillRect(m.x+2, m.y+20, 6,14); - ctx.fillRect(m.x+26, m.y+20, 6,14); - // Ноги - ctx.fillRect(m.x+10, m.y+32, 6, 18); - ctx.fillRect(m.x+18, m.y+32, 6, 18); - // Лук в руке + ctx.fillStyle = "#000"; + ctx.fillRect(m.x + 8, m.y + 8, 4, 4); + ctx.fillRect(m.x + 22, m.y + 8, 4, 4); + ctx.fillRect(m.x + 12, m.y + 20, 10, 4); + ctx.fillStyle = "#4CAF50"; + ctx.fillRect(m.x + 4, m.y + 30, 6, 20); + ctx.fillRect(m.x + 24, m.y + 30, 6, 20); + } else if (m.kind === "skeleton") { + ctx.fillStyle = "#ECEFF1"; + ctx.fillRect(m.x + 10, m.y + 20, 14, 12); + ctx.fillRect(m.x + 8, m.y + 0, 18, 18); + ctx.fillStyle = "#000"; + ctx.fillRect(m.x + 10, m.y + 6, 4, 4); + ctx.fillRect(m.x + 20, m.y + 6, 4, 4); + ctx.fillRect(m.x + 15, m.y + 12, 4, 2); + ctx.fillStyle = "#ECEFF1"; + ctx.fillRect(m.x + 2, m.y + 20, 6, 14); + ctx.fillRect(m.x + 26, m.y + 20, 6, 14); + ctx.fillRect(m.x + 10, m.y + 32, 6, 18); + ctx.fillRect(m.x + 18, m.y + 32, 6, 18); ctx.save(); ctx.translate(m.x + 30, m.y + 22); - ctx.strokeStyle = '#8B4513'; + ctx.strokeStyle = "#8B4513"; ctx.lineWidth = 2; ctx.beginPath(); - ctx.arc(0, 0, 8, -Math.PI*0.7, Math.PI*0.7); + ctx.arc(0, 0, 8, -Math.PI * 0.7, Math.PI * 0.7); ctx.stroke(); - // Тетива - ctx.strokeStyle = '#ccc'; + ctx.strokeStyle = "#ccc"; ctx.lineWidth = 1; ctx.beginPath(); - ctx.moveTo(8*Math.cos(-Math.PI*0.7), 8*Math.sin(-Math.PI*0.7)); - ctx.lineTo(8*Math.cos(Math.PI*0.7), 8*Math.sin(Math.PI*0.7)); + ctx.moveTo(8 * Math.cos(-Math.PI * 0.7), 8 * Math.sin(-Math.PI * 0.7)); + ctx.lineTo(8 * Math.cos(Math.PI * 0.7), 8 * Math.sin(Math.PI * 0.7)); ctx.stroke(); ctx.restore(); - } else if(m.kind==='scorpion') { - // скорпион — оранжево-коричневый - ctx.fillStyle = '#d35400'; - ctx.fillRect(m.x+2, m.y+4, m.w-4, m.h-8); - ctx.fillStyle = '#c0392b'; - ctx.fillRect(m.x+m.w-4, m.y-6, 4, 10); - ctx.fillRect(m.x+m.w-2, m.y-10, 3, 5); - ctx.fillStyle = '#000'; - ctx.fillRect(m.x+4, m.y+6, 3, 3); - ctx.fillRect(m.x+m.w-7, m.y+6, 3, 3); - ctx.fillStyle = '#d35400'; - ctx.fillRect(m.x-4, m.y+8, 6, 4); - ctx.fillRect(m.x+m.w-2, m.y+8, 6, 4); - } else if(m.kind==='polar_bear') { - ctx.fillStyle = '#ecf0f1'; - ctx.fillRect(m.x+2, m.y+4, m.w-4, m.h-4); - ctx.fillRect(m.x+8, m.y-2, m.w-16, 10); - ctx.fillStyle = '#bdc3c7'; - ctx.fillRect(m.x+m.w/2-3, m.y+2, 6, 4); - ctx.fillStyle = '#000'; - ctx.fillRect(m.x+12, m.y+1, 3, 3); - ctx.fillRect(m.x+m.w-14, m.y+1, 3, 3); - ctx.fillStyle = '#ecf0f1'; - ctx.fillRect(m.x+8, m.y-4, 4, 4); - ctx.fillRect(m.x+m.w-12, m.y-4, 4, 4); - } else if(m.kind==='slime') { - const bounce = Math.sin(performance.now()/200)*3; - ctx.fillStyle = 'rgba(46,204,113,0.8)'; - ctx.fillRect(m.x-1, m.y-1+bounce, m.w+2, m.h+2); - ctx.fillStyle = 'rgba(39,174,96,0.9)'; - ctx.fillRect(m.x+1, m.y+1+bounce, m.w-2, m.h-2); - ctx.fillStyle = '#fff'; - ctx.fillRect(m.x+4, m.y+6+bounce, 6, 6); - ctx.fillRect(m.x+m.w-10, m.y+6+bounce, 6, 6); - ctx.fillStyle = '#000'; - ctx.fillRect(m.x+6, m.y+8+bounce, 3, 3); - ctx.fillRect(m.x+m.w-8, m.y+8+bounce, 3, 3); - } else if(m.kind==='eagle') { - ctx.fillStyle = '#8B4513'; - ctx.fillRect(m.x+8, m.y+6, m.w-16, m.h-10); - const wingY = Math.sin(performance.now()/150)*4; - ctx.fillRect(m.x-6, m.y+4+wingY, 16, 6); - ctx.fillRect(m.x+m.w-10, m.y+4-wingY, 16, 6); - ctx.fillStyle = '#fff'; - ctx.fillRect(m.x+m.w/2-3, m.y+2, 6, 6); - ctx.fillStyle = '#f39c12'; - ctx.fillRect(m.x+m.w/2-1, m.y+6, 4, 3); - ctx.fillStyle = '#000'; - ctx.fillRect(m.x+m.w/2-1, m.y+3, 2, 2); } } - - // boat (рисуем первой, чтобы игрок был внутри неё) - if(boat.active){ - ctx.drawImage(tex['boat'], boat.x - (TILE-boat.w)/2, boat.y - (TILE-boat.h)/2, TILE, TILE); + if (boat.active) { + ctx.drawImage(tex2["boat"], boat.x - (TILE2 - boat.w) / 2, boat.y - (TILE2 - boat.h) / 2, TILE2, TILE2); } - - // Lerp other players towards target positions (smooth movement) - for(const [socketId, p] of otherPlayers){ - if (p.tx !== undefined) { - p.x += (p.tx - p.x) * 0.25; - p.y += (p.ty - p.y) * 0.25; - } - } - // other players (multiplayer) - for(const [socketId, p] of otherPlayers){ - if(heroImg.complete){ - ctx.drawImage(heroImg, p.x - (TILE-player.w)/2, p.y - (TILE-player.h)/2, TILE, TILE); + for (const [socketId, p] of state.otherPlayers) { + if (state.heroImg.complete) { + ctx.drawImage(state.heroImg, p.x - (TILE2 - player.w) / 2, p.y - (TILE2 - player.h) / 2, TILE2, TILE2); } else { ctx.fillStyle = p.color; ctx.fillRect(p.x, p.y, 34, 34); } - // Имя игрока (мелко над персонажем) - ctx.fillStyle = '#fff'; - ctx.font = '12px system-ui'; - ctx.textAlign = 'center'; + ctx.fillStyle = "#fff"; + ctx.font = "12px system-ui"; + ctx.textAlign = "center"; ctx.fillText(p.name, p.x + 17, p.y - 8); } - - // player - if(heroImg.complete){ - ctx.drawImage(heroImg, player.x - (TILE-player.w)/2, player.y - (TILE-player.h)/2, TILE, TILE); + if (state.heroImg.complete) { + ctx.drawImage(state.heroImg, player.x - (TILE2 - player.w) / 2, player.y - (TILE2 - player.h) / 2, TILE2, TILE2); } else { - ctx.fillStyle='#fff'; + ctx.fillStyle = "#fff"; ctx.fillRect(player.x, player.y, player.w, player.h); } - - // projectiles (стрелы) - for(const p of projectiles){ + for (const p of projectiles) { const angle = Math.atan2(p.vy, p.vx); ctx.save(); ctx.translate(p.x, p.y); ctx.rotate(angle); - ctx.fillStyle = p.owner === 'mob' ? '#c0392b' : '#f1c40f'; + ctx.fillStyle = p.owner === "mob" ? "#c0392b" : "#f1c40f"; ctx.fillRect(-12, -1.5, 24, 3); - // наконечник ctx.beginPath(); ctx.moveTo(12, -4); ctx.lineTo(16, 0); ctx.lineTo(12, 4); ctx.closePath(); ctx.fill(); - // оперение - ctx.fillStyle = '#888'; + ctx.fillStyle = "#888"; ctx.fillRect(-12, -3, 4, 2); ctx.fillRect(-12, 1, 4, 2); ctx.restore(); } - - // particles - for(const p of parts){ + for (const p of parts2) { ctx.fillStyle = p.c; - ctx.fillRect(p.x-2, p.y-2, 4, 4); + ctx.fillRect(p.x - 2, p.y - 2, 4, 4); } - - // Стрелы скелета - for(const m of mobs){ - if(m.kind==='skeleton' && m.shootCooldown > 0.5){ - // Рисуем стрелу - const arrowX = m.x + m.w/2; + for (const m of mobs) { + if (m.kind === "skeleton" && m.shootCooldown > 0.5) { + const arrowX = m.x + m.w / 2; const arrowY = m.y + 15; - const targetX = player.x + player.w/2; - const targetY = player.y + player.h/2; + const targetX = player.x + player.w / 2; + const targetY = player.y + player.h / 2; const angle = Math.atan2(targetY - arrowY, targetX - arrowX); - const speed = 400; - - // Проверяем, попала ли стрела const dx = targetX - arrowX; const dy = targetY - arrowY; const dist = Math.hypot(dx, dy); - - // Рисуем стрелу ctx.save(); ctx.translate(arrowX, arrowY); ctx.rotate(angle); - ctx.fillStyle = '#ECEFF1'; + ctx.fillStyle = "#ECEFF1"; ctx.fillRect(0, -1, 16, 2); ctx.restore(); - - // Урон игроку если попали - if(dist < 150 && player.invuln <= 0){ + if (dist < 150 && player.invuln <= 0) { player.hp -= 8; player.invuln = 0.5; player.vx += Math.cos(angle) * 300; player.vy -= 200; - playSound('hit1'); + playSound("hit1"); } } } - - // build ghost - if(mode()==='build' && mouse.x!==null && !craftOpen && player.hp>0){ + if (mode() === "build" && mouse.x !== null && !state.craftOpen && player.hp > 0) { const wx = mouse.x + camX; const wy = mouse.y + camY; - const gx = Math.floor(wx/TILE); - const gy = Math.floor(wy/TILE); - ctx.strokeStyle = 'rgba(255,255,255,0.9)'; + const ggx = Math.floor(wx / TILE2); + const ggy = Math.floor(wy / TILE2); + ctx.strokeStyle = "rgba(255,255,255,0.9)"; ctx.lineWidth = 2; - ctx.strokeRect(gx*TILE, gy*TILE, TILE, TILE); + ctx.strokeRect(ggx * TILE2, ggy * TILE2, TILE2, TILE2); } - ctx.restore(); - - // lighting overlay at night (Minecraft-style: offscreen lightmap, wall occlusion, warm flicker) - if(night){ - // 1) Рисуем тёмный оверлей на offscreen canvas - lightC.width = W*dpr; - lightC.height = H*dpr; - lightCtx.setTransform(dpr,0,0,dpr,0,0); - lightCtx.fillStyle = 'rgba(0,0,12,0.82)'; - lightCtx.fillRect(0,0,W,H); - - // 2) Вырезаем «окна света» через destination-out — свет не проходит сквозь стены - lightCtx.globalCompositeOperation = 'destination-out'; - - // Функция: рисуем мягкий луч света с затуханием за стенами - function castLight(sx, sy, radius) { - const flick = 0.97 + Math.sin(now/300 + sx*0.01)*0.015 + Math.sin(now/470 + sy*0.02)*0.015; + if (night) { + let castLight = function(sx, sy, radius) { + const flick = 0.88 + Math.sin(now / 80 + sx * 0.01) * 0.06 + Math.sin(now / 130 + sy * 0.02) * 0.06; const r = radius * flick; - // 24 луча — мягкий круглый свет - const steps = 24; - // Собираем дистанции до стен по лучам - const dists = new Float32Array(steps); - for(let i=0; i TILE*0.3){ + for (let step = TILE2 * 0.5; step < r; step += TILE2 * 0.6) { + const lgx = Math.floor((sx + ddx * step) / TILE2); + const lgy = Math.floor((sy + ddy * step) / TILE2); + const blk = getBlock(lgx, lgy); + if (blk && !blk.dead && BLOCKS[blk.t] && BLOCKS[blk.t].solid && step > TILE2 * 0.3) { maxDist = step; break; } } dists[i] = maxDist; } - // Рисуем сглаженный полигон по dists - const cx = sx-camX, cy = sy-camY; - // Центр: яркая точка + const cx = sx - camX, cy = sy - camY; const maxR = Math.max(...dists); const grad = lightCtx.createRadialGradient(cx, cy, 0, cx, cy, maxR); - grad.addColorStop(0, 'rgba(255,255,255,1)'); - grad.addColorStop(0.4, 'rgba(255,255,255,0.8)'); - grad.addColorStop(1, 'rgba(255,255,255,0)'); + grad.addColorStop(0, "rgba(255,255,255,1)"); + grad.addColorStop(0.5, "rgba(255,255,255,0.65)"); + grad.addColorStop(1, "rgba(255,255,255,0)"); lightCtx.fillStyle = grad; - // Рисуем shape по dists (звездоподобный полигон) lightCtx.beginPath(); - for(let i=0; i<=steps; i++){ - const idx = i % steps; - const nextIdx = (i+1) % steps; - const avgD = (dists[idx] + dists[nextIdx]) / 2; - const angle = (idx/steps) * Math.PI * 2; - const px = cx + Math.cos(angle) * dists[idx]; - const py = cy + Math.sin(angle) * dists[idx]; - if(i===0) lightCtx.moveTo(px, py); + for (let i = 0; i <= steps2; i++) { + const idx = i % steps2; + const ang = idx / steps2 * Math.PI * 2; + const px = cx + Math.cos(ang) * dists[idx]; + const py = cy + Math.sin(ang) * dists[idx]; + if (i === 0) lightCtx.moveTo(px, py); else lightCtx.lineTo(px, py); } lightCtx.closePath(); lightCtx.fill(); - } - - // Источники света - for(const b of blocks){ - if(b.dead) continue; - if(b.gx < minGX-5 || b.gx > maxGX+5 || b.gy < minGY-5 || b.gy > maxGY+5) continue; + }; + const lightC = state.lightC; + const lightCtx = state.lightCtx; + lightC.width = W * state.dpr; + lightC.height = H * state.dpr; + lightCtx.setTransform(state.dpr, 0, 0, state.dpr, 0, 0); + lightCtx.fillStyle = "rgba(0,0,12,0.82)"; + lightCtx.fillRect(0, 0, W, H); + lightCtx.globalCompositeOperation = "destination-out"; + for (const b of blocks2) { + if (b.dead) continue; + if (b.gx < minGX - 5 || b.gx > maxGX + 5 || b.gy < minGY - 5 || b.gy > maxGY + 5) continue; const def = BLOCKS[b.t]; - if(def.lightRadius){ - castLight(b.gx*TILE + TILE/2, b.gy*TILE + TILE/2, def.lightRadius); + if (def.lightRadius) { + castLight(b.gx * TILE2 + TILE2 / 2, b.gy * TILE2 + TILE2 / 2, def.lightRadius); } } - - // 3) Накладываем lightmap на основной canvas - lightCtx.globalCompositeOperation = 'source-over'; + lightCtx.globalCompositeOperation = "source-over"; ctx.drawImage(lightC, 0, 0, W, H); - - // 4) Тёплый оверлей от источников света (additive, мягкий) ctx.save(); - ctx.globalCompositeOperation = 'lighter'; - for(const b of blocks){ - if(b.dead) continue; - if(b.gx < minGX-3 || b.gx > maxGX+3 || b.gy < minGY-3 || b.gy > maxGY+3) continue; + ctx.globalCompositeOperation = "lighter"; + for (const b of blocks2) { + if (b.dead) continue; + if (b.gx < minGX - 3 || b.gx > maxGX + 3 || b.gy < minGY - 3 || b.gy > maxGY + 3) continue; const def = BLOCKS[b.t]; - if(def.lightRadius){ - const flick = 0.9 + Math.sin(now/350 + b.gx*3.7)*0.05 + Math.sin(now/530 + b.gy*2.3)*0.05; - const wx = b.gx*TILE + TILE/2 - camX; - const wy = b.gy*TILE + TILE/2 - camY; - const r = def.lightRadius * 0.85; - const grad = ctx.createRadialGradient(wx,wy, 0, wx,wy, r); - grad.addColorStop(0, `rgba(255,180,80,0.28)`); - grad.addColorStop(0.5, `rgba(255,140,40,0.13)`); - grad.addColorStop(1, 'rgba(255,100,20,0)'); + if (def.lightRadius) { + const flick = 0.7 + Math.sin(now / 90 + b.gx * 3.7) * 0.15 + Math.sin(now / 140 + b.gy * 2.3) * 0.15; + const wx = b.gx * TILE2 + TILE2 / 2 - camX; + const wy = b.gy * TILE2 + TILE2 / 2 - camY; + const r = def.lightRadius * 0.6 * flick; + const grad = ctx.createRadialGradient(wx, wy, 0, wx, wy, r); + grad.addColorStop(0, `rgba(255,180,80,${0.12 * flick})`); + grad.addColorStop(0.5, `rgba(255,140,40,${0.06 * flick})`); + grad.addColorStop(1, "rgba(255,100,20,0)"); ctx.fillStyle = grad; ctx.beginPath(); - ctx.arc(wx, wy, r, 0, Math.PI*2); + ctx.arc(wx, wy, r, 0, Math.PI * 2); ctx.fill(); } } ctx.restore(); } - - // Дождь (после ночного оверлея) drawRain(); - if(Math.random()<0.25){ - hpEl.textContent = Math.max(0, Math.ceil(player.hp)); - foodEl.textContent = Math.ceil(player.hunger); - document.getElementById('o2').textContent = Math.ceil(player.o2); - sxEl.textContent = Math.floor(player.x/TILE); - syEl.textContent = Math.floor(player.y/TILE); - todEl.textContent = night ? 'Ночь' : 'День'; - document.getElementById('xplevel').textContent = player.level; - const lvXpNext = xpForLevel(player.level + 1); - const lvXpCur = xpForLevel(player.level); - const xpInLevel = player.xp - lvXpCur; - const xpNeeded = lvXpNext - lvXpCur; - document.getElementById('xpbar').textContent = xpInLevel + '/' + xpNeeded; - tempEl.textContent = Math.round(player.temperature) + "°C"; - worldIdEl.textContent = worldId; - if(isMultiplayer){ - document.getElementById('multiplayerStatus').style.display = 'flex'; - playerCountEl.textContent = otherPlayers.size + 1; // +1 = мы сами + if (Math.random() < 0.25) { + state.hpEl.textContent = Math.max(0, Math.ceil(player.hp)); + state.foodEl.textContent = Math.ceil(player.hunger); + document.getElementById("o2").textContent = Math.ceil(player.o2); + state.sxEl.textContent = Math.floor(player.x / TILE2); + state.syEl.textContent = Math.floor(player.y / TILE2); + state.todEl.textContent = night ? "\u041D\u043E\u0447\u044C" : "\u0414\u0435\u043D\u044C"; + state.worldIdEl.textContent = state.worldId; + if (state.isMultiplayer) { + document.getElementById("multiplayerStatus").style.display = "flex"; + state.playerCountEl.textContent = state.otherPlayers.size + 1; } else { - document.getElementById('multiplayerStatus').style.display = 'none'; + document.getElementById("multiplayerStatus").style.display = "none"; } } - - // Индикатор сна - if(player.sleeping){ - ctx.fillStyle = 'rgba(0,0,0,0.7)'; + if (player.sleeping) { + ctx.fillStyle = "rgba(0,0,0,0.7)"; ctx.fillRect(0, 0, W, H); - ctx.fillStyle = '#fff'; - ctx.font = 'bold 32px system-ui'; - ctx.textAlign = 'center'; - ctx.fillText('💤 Спим...', W/2, H/2); - ctx.font = '18px system-ui'; - ctx.fillText('Нажмите на кровать чтобы проснуться', W/2, H/2 + 40); + ctx.fillStyle = "#fff"; + ctx.font = "bold 32px system-ui"; + ctx.textAlign = "center"; + ctx.fillText("\u{1F4A4} \u0421\u043F\u0438\u043C...", W / 2, H / 2); + ctx.font = "18px system-ui"; + ctx.fillText("\u041D\u0430\u0436\u043C\u0438\u0442\u0435 \u043D\u0430 \u043A\u0440\u043E\u0432\u0430\u0442\u044C \u0447\u0442\u043E\u0431\u044B \u043F\u0440\u043E\u0441\u043D\u0443\u0442\u044C\u0441\u044F", W / 2, H / 2 + 40); } - - // Рисуем дропы - // Температурный оверлей (заморозка/тепловой удар) - if (typeof player.temperature !== 'undefined' && (player.temperature < -5 || player.temperature > 35)) { - const severity = player.temperature < -5 - ? Math.abs(player.temperature + 5) / 20 - : (player.temperature - 35) / 20; - const alpha = Math.min(0.35, severity * 0.15); - if (player.temperature < -5) { - ctx.fillStyle = 'rgba(100,150,255,' + alpha + ')'; - } else { - ctx.fillStyle = 'rgba(255,100,50,' + alpha + ')'; - } - ctx.fillRect(0, 0, W, H); - } - drawDrops(ctx); - // Пикап дропов - pickupDrops(); - // Popup уровня - drawLevelUpPopup(ctx); - - // Миникарта (обновляем раз в ~4 кадра для оптимизации) - if(minimapOpen && Math.random() < 0.25){ + if (state.minimapOpen && Math.random() < 0.25) { renderMinimap(); } - requestAnimationFrame(loop); } - + + // src/ui/market.js + var marketPanel = document.getElementById("marketPanel"); + var marketClose = document.getElementById("marketClose"); + var marketContent = document.getElementById("marketContent"); + function initMarket() { + marketClose.addEventListener("click", () => closeMarket()); + document.addEventListener("toggleMarket", () => toggleMarket()); + } + function toggleMarket() { + if (marketPanel.style.display === "none" || !marketPanel.style.display) { + openMarket(); + } else { + closeMarket(); + } + } + function closeMarket() { + marketPanel.style.display = "none"; + } + function openMarket() { + marketPanel.style.display = "block"; + renderMarket(); + } + function renderMarket() { + if (!state.socket) { + marketContent.innerHTML = '

\u041F\u043E\u0434\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u0435 \u043A \u0441\u0435\u0440\u0432\u0435\u0440\u0443...

'; + return; + } + state.socket.emit("market_list", {}, (orders) => { + if (!orders || !orders.length) { + marketContent.innerHTML = ` +

\u041F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u0439 \u043F\u043E\u043A\u0430 \u043D\u0435\u0442

+
+ +
+ `; + const btn2 = document.getElementById("createOrderBtn"); + if (btn2) btn2.addEventListener("click", showCreateOrder); + return; + } + let html = '
'; + html += orders.map((o) => ` +
+
+ ${o.offer_item} \xD7${o.offer_qty} + \u21C4 + ${o.want_item} \xD7${o.want_qty} +
+
${o.seller || "\u0410\u043D\u043E\u043D\u0438\u043C"}
+
+ `).join(""); + marketContent.innerHTML = html; + const btn = document.getElementById("createOrderBtn"); + if (btn) btn.addEventListener("click", showCreateOrder); + }); + } + function showCreateOrder() { + const inv = state.player.inventory || []; + const items = inv.filter((slot) => slot && slot.id); + marketContent.innerHTML = ` +
+

\u0412\u044B\u0441\u0442\u0430\u0432\u0438\u0442\u044C \u043F\u0440\u0435\u0434\u043C\u0435\u0442

+ + + + +
+ + +
+
+ `; + document.getElementById("cancelOrder").addEventListener("click", () => renderMarket()); + document.getElementById("submitOrder").addEventListener("click", () => { + const offerItem = document.getElementById("offerItem").value; + const wantItem = document.getElementById("wantItem").value.trim(); + if (!offerItem || !wantItem) { + alert("\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u043F\u0440\u0435\u0434\u043C\u0435\u0442 \u0438 \u0443\u043A\u0430\u0436\u0438\u0442\u0435 \u0447\u0442\u043E \u0445\u043E\u0442\u0438\u0442\u0435 \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C"); + return; + } + if (state.socket) { + state.socket.emit("market_create", { + offer_item: offerItem, + offer_qty: 1, + want_item: wantItem, + want_qty: 1 + }); + playSound("click"); + setTimeout(renderMarket, 500); + } + }); + } + + // src/ui/respawn.js + function initRespawn() { + document.getElementById("respawnBtn").onclick = async () => { + playSound("click"); + console.log("=== RESPAWN CLICKED ==="); + console.log("isMultiplayer:", state.isMultiplayer); + console.log("otherPlayers.size:", state.otherPlayers.size); + console.log("player.hp before respawn:", state.player.hp); + const player = state.player; + const deathEl = state.deathEl; + if (state.isMultiplayer && state.otherPlayers.size > 0) { + console.log("\u041C\u0443\u043B\u044C\u0442\u0438\u043F\u043B\u0435\u0435\u0440 \u0440\u0435\u0436\u0438\u043C - \u0432\u043E\u0437\u0440\u043E\u0436\u0434\u0435\u043D\u0438\u0435 \u0432 \u043D\u0430\u0447\u0430\u043B\u044C\u043D\u043E\u0439 \u0442\u043E\u0447\u043A\u0435"); + player.hp = 100; + player.hunger = 100; + player.o2 = 100; + player.vx = player.vy = 0; + player.invuln = 0; + player.x = state.spawnPoint.x; + player.y = state.spawnPoint.y; + player.fallStartY = player.y; + console.log("\u0412\u043E\u0437\u0440\u043E\u0436\u0434\u0435\u043D\u0438\u0435 \u0432 \u043D\u0430\u0447\u0430\u043B\u044C\u043D\u043E\u0439 \u0442\u043E\u0447\u043A\u0435, HP:", player.hp); + } else { + console.log("\u041E\u0434\u0438\u043D\u043E\u0447\u043D\u044B\u0439 \u0440\u0435\u0436\u0438\u043C - \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043C \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0435\u0435 \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0438\u0435"); + const loadedSave = await loadGame(); + if (loadedSave) { + await applySave(loadedSave); + console.log("\u0417\u0430\u0433\u0440\u0443\u0436\u0435\u043D\u043E \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0435\u0435 \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0438\u0435 \u043F\u043E\u0441\u043B\u0435 \u0441\u043C\u0435\u0440\u0442\u0438, final HP:", player.hp); + } else { + player.hp = 100; + player.hunger = 100; + player.o2 = 100; + player.vx = player.vy = 0; + player.invuln = 0; + player.x = state.spawnPoint.x; + player.y = state.spawnPoint.y; + player.fallStartY = player.y; + console.log("\u0412\u043E\u0437\u0440\u043E\u0436\u0434\u0435\u043D\u0438\u0435 \u0432 \u043D\u0430\u0447\u0430\u043B\u044C\u043D\u043E\u0439 \u0442\u043E\u0447\u043A\u0435, HP:", player.hp); + } + } + console.log("player.hp after respawn logic:", player.hp); + console.log("Hiding death screen..."); + deathEl.style.display = "none"; + console.log("=== RESPAWN END ==="); + }; + } + + // src/ui/share.js + function initShare() { + document.getElementById("worldId").onclick = () => { + const shareUrl = new URL(window.location.href); + shareUrl.searchParams.set("world", state.worldId); + const shareUrlString = shareUrl.toString(); + if (navigator.clipboard && navigator.clipboard.writeText) { + navigator.clipboard.writeText(shareUrlString).then(() => { + alert("\u0421\u0441\u044B\u043B\u043A\u0430 \u0441\u043A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u043D\u0430!"); + }).catch(() => { + alert("\u0421\u0441\u044B\u043B\u043A\u0430 \u043D\u0430 \u043C\u0438\u0440:\n" + shareUrlString); + }); + } else { + alert("\u0421\u0441\u044B\u043B\u043A\u0430 \u043D\u0430 \u043C\u0438\u0440:\n" + shareUrlString); + } + }; + } + + // src/input/controls.js + var inp = state.inp; + function bindHold(el, key) { + const down = (e) => { + e.preventDefault(); + state.inp[key] = true; + }; + const up = (e) => { + e.preventDefault(); + state.inp[key] = false; + }; + el.addEventListener("pointerdown", down); + el.addEventListener("pointerup", up); + el.addEventListener("pointerleave", up); + } + function initControls() { + const leftBtn = document.getElementById("left"); + const rightBtn = document.getElementById("right"); + const jumpBtn = document.getElementById("jump"); + const downBtn = document.getElementById("down"); + if (leftBtn) bindHold(leftBtn, "l"); + if (rightBtn) bindHold(rightBtn, "r"); + if (jumpBtn) bindHold(jumpBtn, "j"); + if (downBtn) bindHold(downBtn, "s"); + window.addEventListener("keydown", (e) => { + if (e.code === "KeyA" || e.code === "ArrowLeft") state.inp.l = true; + if (e.code === "KeyD" || e.code === "ArrowRight") state.inp.r = true; + if (e.code === "Space" || e.code === "KeyW" || e.code === "ArrowUp") state.inp.j = true; + if (e.code === "KeyS" || e.code === "ArrowDown") state.inp.s = true; + }); + window.addEventListener("keyup", (e) => { + if (e.code === "KeyA" || e.code === "ArrowLeft") state.inp.l = false; + if (e.code === "KeyD" || e.code === "ArrowRight") state.inp.r = false; + if (e.code === "Space" || e.code === "KeyW" || e.code === "ArrowUp") state.inp.j = false; + if (e.code === "KeyS" || e.code === "ArrowDown") state.inp.s = false; + }); + } + + // src/multiplayer/voice-chat.js + var voiceSocket = null; + var voiceStream = null; + var audioCtx = null; + var voiceProcessor = null; + var voiceActive = false; + var VOICE_SERVER2 = "https://voicegrech.mkn8n.ru"; + var voiceBtn = document.createElement("div"); + voiceBtn.innerHTML = '\u{1F3A4}/'; + voiceBtn.title = "\u0413\u043E\u043B\u043E\u0441\u043E\u0432\u043E\u0439 \u0447\u0430\u0442 (\u0432\u044B\u043A\u043B)"; + voiceBtn.style.cssText = "position:absolute;top:74px;right:130px;width:52px;height:52px;border-radius:12px;background:#555;z-index:200;display:flex;align-items:center;justify-content:center;font-size:24px;cursor:pointer;border:2px solid rgba(255,255,255,0.9);box-shadow:0 4px 0 rgba(0,0,0,0.5);pointer-events:auto;"; + document.querySelector(".ui").appendChild(voiceBtn); + var speakingIndicator = document.createElement("div"); + speakingIndicator.style.cssText = "position:absolute;top:130px;right:10px;z-index:200;display:none;background:rgba(0,0,0,0.7);color:#2ecc71;padding:4px 8px;border-radius:6px;font-size:12px;"; + speakingIndicator.textContent = "\u{1F50A}"; + document.querySelector(".ui").appendChild(speakingIndicator); + var speakingTimeout = null; + voiceBtn.onclick = async () => { + if (voiceActive) { + voiceActive = false; + voiceBtn.innerHTML = '\u{1F3A4}/'; + voiceBtn.style.background = "#555"; + if (voiceStream) { + voiceStream.getTracks().forEach((t) => t.stop()); + voiceStream = null; + } + if (voiceProcessor) { + voiceProcessor.disconnect(); + voiceProcessor = null; + } + if (audioCtx) { + audioCtx.close(); + audioCtx = null; + } + if (voiceSocket) { + voiceSocket.disconnect(); + voiceSocket = null; + } + return; + } + try { + voiceStream = await navigator.mediaDevices.getUserMedia({ audio: { echoCancellation: true, noiseSuppression: true, sampleRate: 24e3 } }); + audioCtx = new AudioContext({ sampleRate: 24e3 }); + const source = audioCtx.createMediaStreamSource(voiceStream); + voiceProcessor = audioCtx.createScriptProcessor(4096, 1, 1); + voiceProcessor.onaudioprocess = (e) => { + if (!voiceActive || !voiceSocket || !voiceSocket.connected) return; + const pcm = e.inputBuffer.getChannelData(0); + const int16 = new Int16Array(pcm.length); + for (let i = 0; i < pcm.length; i++) { + const s = Math.max(-1, Math.min(1, pcm[i])); + int16[i] = s < 0 ? s * 32768 : s * 32767; + } + voiceSocket.emit("voice_data", int16.buffer); + }; + source.connect(voiceProcessor); + voiceProcessor.connect(audioCtx.createGain()); + voiceSocket = io(VOICE_SERVER2, { transports: ["websocket"] }); + voiceSocket.on("connect", () => { + voiceSocket.emit("voice_join", { world_id: state.worldId, x: state.player.x, y: state.player.y, name: state.playerName || "\u0418\u0433\u0440\u043E\u043A" }); + }); + voiceSocket.on("voice_in", (payload) => { + const { data, meta, volume } = payload; + if (!audioCtx || audioCtx.state === "closed") return; + const int16 = new Int16Array(data); + const float32 = new Float32Array(int16.length); + for (let i = 0; i < int16.length; i++) { + float32[i] = int16[i] / (int16[i] < 0 ? 32768 : 32767) * volume; + } + const buf = audioCtx.createBuffer(1, float32.length, 24e3); + buf.getChannelData(0).set(float32); + const src = audioCtx.createBufferSource(); + src.buffer = buf; + const gain = audioCtx.createGain(); + gain.gain.value = volume; + src.connect(gain).connect(audioCtx.destination); + src.start(); + speakingIndicator.style.display = "block"; + speakingIndicator.textContent = `\u{1F50A} ${meta.name}`; + clearTimeout(speakingTimeout); + speakingTimeout = setTimeout(() => { + speakingIndicator.style.display = "none"; + }, 500); + }); + voiceActive = true; + voiceBtn.textContent = "\u{1F3A4}"; + voiceBtn.style.background = "#2ecc71"; + } catch (e) { + console.error("Voice error:", e); + voiceBtn.style.background = "#e74c3c"; + } + }; + function initVoice() { + let voicePosT = 0; + return { + update(dt) { + voicePosT += dt; + if (voicePosT > 0.5 && voiceSocket && voiceSocket.connected) { + voicePosT = 0; + voiceSocket.emit("voice_pos", { x: state.player.x, y: state.player.y }); + } + } + }; + } + + // src/ui/inventory.js + function renderInventory() { + const inventoryGrid = state.inventoryGrid; + const inv = state.inv; + const selected = state.selected; + inventoryGrid.innerHTML = ""; + const items = Object.keys(inv).filter((id) => inv[id] > 0); + for (let i = 0; i < 21; i++) { + const slot = document.createElement("div"); + slot.className = "inv-slot" + (i < items.length && items[i] === selected ? " sel" : ""); + if (i < items.length) { + const id = items[i]; + if (BLOCKS[id] && tex[id]) { + slot.style.backgroundImage = `url(${tex[id].toDataURL()})`; + slot.style.backgroundSize = "cover"; + } else if (itemTex[id]) { + slot.style.backgroundImage = `url(${itemTex[id].toDataURL()})`; + slot.style.backgroundSize = "cover"; + } else if (ITEMS[id]) { + slot.textContent = ITEMS[id].icon || "\u{1F4E6}"; + } else if (TOOLS[id]) { + slot.textContent = TOOLS[id].icon || "\u{1F527}"; + } else if (id === "iron_armor") { + slot.textContent = "\u{1F6E1}\uFE0F"; + slot.style.background = "linear-gradient(135deg, #95a5a6 0%, #7f8c8d 100%)"; + } + const count = document.createElement("div"); + count.className = "inv-count"; + count.textContent = inv[id]; + slot.appendChild(count); + slot.onclick = () => { + playSound("click"); + state.selected = id; + state.recentItems = state.recentItems.filter((item) => item !== id); + state.recentItems.unshift(id); + state.recentItems = state.recentItems.slice(0, 5); + rebuildHotbar(); + renderInventory(); + }; + slot.ondblclick = () => { + if (id === "iron_armor" && inv.iron_armor > 0) { + if (state.player.equippedArmor === "iron_armor") { + state.player.equippedArmor = null; + state.player.armor = 0; + } else { + state.player.equippedArmor = "iron_armor"; + state.player.armor = BLOCKS["iron_armor"].armor; + } + playSound("click"); + renderInventory(); + } + }; + } + inventoryGrid.appendChild(slot); + } + } + + // src/ui/craft.js + function canCraft(r) { + const inv = state.inv; + for (const res in r.cost) { + if ((inv[res] || 0) < r.cost[res]) return false; + } + return true; + } + function renderCraft() { + const inv = state.inv; + const recipesEl = state.recipesEl; + recipesEl.innerHTML = ""; + for (const r of RECIPES) { + const row = document.createElement("div"); + row.className = "recipe"; + const icon = document.createElement("div"); + icon.className = "ricon"; + if (tex[r.out]) { + icon.style.backgroundImage = `url(${tex[r.out].toDataURL()})`; + } else if (itemTex[r.out]) { + icon.style.backgroundImage = `url(${itemTex[r.out].toDataURL()})`; + } else if (TOOLS[r.out]) { + icon.textContent = TOOLS[r.out].icon || "\u{1F527}"; + icon.style.fontSize = "24px"; + icon.style.display = "flex"; + icon.style.alignItems = "center"; + icon.style.justifyContent = "center"; + } else if (ITEMS[r.out]) { + icon.textContent = ITEMS[r.out].icon || "\u{1F4E6}"; + icon.style.fontSize = "24px"; + icon.style.display = "flex"; + icon.style.alignItems = "center"; + icon.style.justifyContent = "center"; + } + const info = document.createElement("div"); + info.className = "rinfo"; + const nm = document.createElement("div"); + nm.className = "rname"; + const itemName2 = BLOCKS[r.out]?.n || TOOLS[r.out]?.n || ITEMS[r.out]?.n || r.out; + nm.textContent = `${itemName2} x${r.qty}`; + const cs = document.createElement("div"); + cs.className = "rcost"; + cs.textContent = Object.keys(r.cost).map((x) => { + const cn = BLOCKS[x]?.n || TOOLS[x]?.n || ITEMS[x]?.n || x; + return `${cn}: ${inv[x] || 0}/${r.cost[x]}`; + }).join(" "); + info.appendChild(nm); + info.appendChild(cs); + const btn = document.createElement("button"); + btn.className = "rcraft"; + btn.textContent = "\u0421\u043E\u0437\u0434\u0430\u0442\u044C"; + btn.disabled = !canCraft(r); + btn.onclick = () => { + if (!canCraft(r)) return; + playSound("click"); + for (const res in r.cost) inv[res] -= r.cost[res]; + inv[r.out] = (inv[r.out] || 0) + r.qty; + if (TOOLS[r.out]) addTool(r.out); + rebuildHotbar(); + renderCraft(); + }; + row.appendChild(icon); + row.appendChild(info); + row.appendChild(btn); + recipesEl.appendChild(row); + } + } + var craftOpen = false; + var inventoryOpen = false; + function toggleCraft() { + playSound("click"); + craftOpen = !craftOpen; + state.craftPanel.style.display = craftOpen ? "block" : "none"; + if (craftOpen) { + renderCraft(); + inventoryOpen = false; + state.inventoryPanel.style.display = "none"; + } + } + function closeCraft() { + playSound("click"); + craftOpen = false; + state.craftPanel.style.display = "none"; + } + function toggleInventory() { + playSound("click"); + inventoryOpen = true; + state.inventoryPanel.style.display = "block"; + renderInventory(); + craftOpen = false; + state.craftPanel.style.display = "none"; + } + function closeInventory() { + playSound("click"); + inventoryOpen = false; + state.inventoryPanel.style.display = "none"; + } + + // src/main.js + var urlParams2 = new URLSearchParams(window.location.search); + state.SERVER_URL = SERVER_URL; + state.TELEGRAM_BOT_USERNAME = "Grechkacraft_bot"; + state.TELEGRAM_APP_SHORT_NAME = "minegrechka"; + state.playerName = localStorage.getItem("minegrechka_playerName") || null; + if (!state.playerName) { + state.playerName = prompt("\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0432\u0430\u0448\u0435 \u0438\u043C\u044F \u0434\u043B\u044F \u0438\u0433\u0440\u044B:") || "\u0418\u0433\u0440\u043E\u043A"; + localStorage.setItem("minegrechka_playerName", state.playerName); + console.log("Player name set:", state.playerName); + } + console.log("Current URL:", window.location.href); + var worldParam = urlParams2.get("world"); + console.log("world param:", worldParam); + state.worldId = worldParam && worldParam.trim() !== "" ? worldParam : null; + console.log("worldId after params:", state.worldId, "type:", typeof state.worldId); + if (!state.worldId) { + state.worldId = Math.random().toString(36).substring(2, 10); + console.log("Generated worldId:", state.worldId); + try { + const newUrl = new URL(window.location.href); + newUrl.searchParams.set("world", state.worldId); + const newUrlString = newUrl.toString(); + console.log("New URL to set:", newUrlString); + if (typeof window.history !== "undefined" && typeof window.history.replaceState === "function") { + window.history.replaceState(null, "", newUrlString); + console.log("URL after replaceState:", window.location.href); + } else { + console.error("History API not supported!"); + } + } catch (e) { + console.error("Error updating URL:", e); + } + console.log("Generated new worldId for browser:", state.worldId); + } + console.log("Final worldId:", state.worldId, "Player name:", state.playerName); + initCanvas(); + state.hpEl = document.getElementById("hp"); + state.foodEl = document.getElementById("food"); + state.sxEl = document.getElementById("sx"); + state.syEl = document.getElementById("sy"); + state.todEl = document.getElementById("tod"); + state.worldIdEl = document.getElementById("worldId"); + state.playerCountEl = document.getElementById("playerCount"); + state.deathEl = document.getElementById("death"); + state.hotbarEl = document.getElementById("hotbar"); + state.craftPanel = document.getElementById("craftPanel"); + state.recipesEl = document.getElementById("recipes"); + state.inventoryPanel = document.getElementById("inventoryPanel"); + state.inventoryGrid = document.getElementById("inventoryGrid"); + state.marketPanel = document.getElementById("marketPanel"); + state.marketContent = document.getElementById("marketContent"); + state.tradePanel = document.getElementById("tradePanel"); + state.tradeContent = document.getElementById("tradeContent"); + state.multiplayerStatus = document.getElementById("multiplayerStatus"); + initTextures(); + state.tex = tex; + state.itemTex = itemTex; + var craftBtn = document.getElementById("craftBtn"); + var invToggle = document.getElementById("invToggle"); + var craftClose = document.getElementById("craftClose"); + var inventoryClose = document.getElementById("inventoryClose"); + if (craftBtn) craftBtn.onclick = () => toggleCraft(); + if (craftClose) craftClose.onclick = () => closeCraft(); + if (invToggle) invToggle.onclick = () => toggleInventory(); + if (inventoryClose) inventoryClose.onclick = () => closeInventory(); + initControls(); + initMouseHandlers(); + initChat(); + initFurnace(); + initMinimap(); + initSaveControls(); + initMarket(); + initRespawn(); + initShare(); + initModes(); + initSocket(); + initVoice(); + rebuildHotbar(); + initDB().then(async () => { + const loadedSave = await loadGame(); + if (loadedSave) { + await applySave(loadedSave); + console.log("\u0417\u0430\u0433\u0440\u0443\u0436\u0435\u043D\u043E \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0438\u0435, HP:", state.player.hp); + if (state.player.hp <= 0) { + console.log("WARNING: HP <= 0 \u043F\u043E\u0441\u043B\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043A\u0438, \u0432\u043E\u0437\u0440\u043E\u0436\u0434\u0430\u0435\u043C\u0441\u044F"); + state.player.hp = 100; + state.player.hunger = 100; + state.player.o2 = 100; + state.player.x = state.spawnPoint.x; + state.player.y = state.spawnPoint.y; + state.player.vx = state.player.vy = 0; + state.player.invuln = 0; + state.player.fallStartY = state.player.y; + } + } else { + console.log("\u0421\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0438\u0435 \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E, \u043D\u0430\u0447\u0438\u043D\u0430\u0435\u043C \u043D\u043E\u0432\u0443\u044E \u0438\u0433\u0440\u0443"); + state.player.hp = 100; + state.player.hunger = 100; + state.player.o2 = 100; + state.player.vx = state.player.vy = 0; + state.player.invuln = 0; + const startGX = 6; + for (let dx = -3; dx <= 3; dx++) genColumn(startGX + dx); + const surfaceY = surfaceGyAt(startGX); + let safeGY = surfaceY - 1; + const aboveBlock = getBlock(startGX, surfaceY - 1); + if (aboveBlock && aboveBlock.t === "water") { + for (let gy = state.SEA_GY - 1; gy >= 0; gy--) { + const b = getBlock(startGX, gy); + if (!b || b.dead || b.t === "air" || b.t === "water") continue; + safeGY = gy - 1; + break; + } + } + state.player.y = safeGY * state.TILE; + state.player.x = startGX * state.TILE; + state.player.fallStartY = state.player.y; + state.spawnPoint.x = state.player.x; + state.spawnPoint.y = state.player.y; + console.log("\u041D\u043E\u0432\u0430\u044F \u0438\u0433\u0440\u0430: startGX=", startGX, "surfaceY=", surfaceY, "player.y=", state.player.y); + for (let gx = startGX - 50; gx <= startGX + 50; gx++) { + genColumn(gx); + } + } + document.addEventListener("visibilitychange", () => { + if (document.hidden) { + saveGame(); + } + }); + window.addEventListener("beforeunload", () => { + saveGame(); + }); + }).catch((err) => { + console.error("\u041E\u0448\u0438\u0431\u043A\u0430 \u0438\u043D\u0438\u0446\u0438\u0430\u043B\u0438\u0437\u0430\u0446\u0438\u0438:", err); + const startGX = 6; + genColumn(startGX); + state.player.y = (surfaceGyAt(startGX) - 1) * state.TILE; + state.player.fallStartY = state.player.y; + for (let gx = startGX - 50; gx <= startGX + 50; gx++) { + genColumn(gx); + } + }); requestAnimationFrame(loop); })(); diff --git a/game.js.bak.v30 b/game.js.bak.v30 new file mode 100644 index 0000000..8635c7e --- /dev/null +++ b/game.js.bak.v30 @@ -0,0 +1,5865 @@ +(() => { + // ==================== КОНФИГУРАЦИЯ СЕРВЕРА ==================== +// === Custom modal functions === +function customAlert(msg) { + const overlay = document.createElement("div"); + overlay.className = "custom-modal-overlay"; + const box = document.createElement("div"); + box.className = "custom-modal-box"; + const text = document.createElement("div"); + text.textContent = msg; + text.style.marginBottom = "16px"; + const btn = document.createElement("button"); + btn.className = "btn-ok"; + btn.textContent = "OK"; + btn.onclick = () => overlay.remove(); + box.appendChild(text); + box.appendChild(btn); + overlay.appendChild(box); + document.querySelector("#game").appendChild(overlay); +} +function customConfirm(msg, onYes) { + const overlay = document.createElement("div"); + overlay.className = "custom-modal-overlay"; + const box = document.createElement("div"); + box.className = "custom-modal-box"; + const text = document.createElement("div"); + text.textContent = msg; + text.style.marginBottom = "16px"; + const btns = document.createElement("div"); + btns.className = "modal-btns"; + const yesBtn = document.createElement("button"); + yesBtn.className = "btn-yes"; + yesBtn.textContent = "Да"; + yesBtn.onclick = () => { overlay.remove(); onYes(); }; + const noBtn = document.createElement("button"); + noBtn.className = "btn-no"; + noBtn.textContent = "Отмена"; + noBtn.onclick = () => overlay.remove(); + btns.appendChild(yesBtn); + btns.appendChild(noBtn); + box.appendChild(text); + box.appendChild(btns); + overlay.appendChild(box); + document.querySelector("#game").appendChild(overlay); +} + // Возможность переопределить сервер через query string + const urlParams = new URLSearchParams(window.location.search); + const SERVER_URL = urlParams.get('server') || 'https://apigrech.mkn8n.ru'; + const TELEGRAM_BOT_USERNAME = 'Grechkacraft_bot'; // Имя бота для share-ссылки + const TELEGRAM_APP_SHORT_NAME = 'minegrechka'; // Короткое имя Mini App + + // Защита от mixed content + if (location.protocol === 'https:' && SERVER_URL.startsWith('http://')) { + console.warn('⚠️ Mixed content warning: page is HTTPS but server URL is HTTP'); + alert('⚠️ Предупреждение: страница загружена по HTTPS, но сервер использует HTTP. Это может вызвать проблемы.'); + } + + // ==================== TELEGRAM MINI APP ==================== + const isTgWebApp = !!(window.Telegram && window.Telegram.WebApp && window.Telegram.WebApp.initData); + let tgUser = null; + let tgSaveLoaded = false; + + if (isTgWebApp) { + try { + Telegram.WebApp.ready(); + Telegram.WebApp.expand(); + tgUser = Telegram.WebApp.initDataUnsafe?.user || null; + console.log('[TG] Mini App detected, user:', tgUser?.id, tgUser?.username); + // Set player name from TG + if (tgUser && tgUser.first_name) { + const tgName = tgUser.username || tgUser.first_name; + localStorage.setItem('minegrechka_playerName', tgName); + } + } catch(e) { + console.warn('[TG] WebApp init error:', e); + } + } + + // ==================== WORLD ID И ИГРОКА ==================== + let worldId = null; + let playerName = localStorage.getItem('minegrechka_playerName') || null; + + // Priority: URL/startParam > TG saved world > new world + const worldParam = urlParams.get('world'); + + // TG Mini App startParam (deep link: t.me/bot?start=CODE) + const tgStartParam = (isTgWebApp && Telegram.WebApp.initDataUnsafe?.start_param) ? Telegram.WebApp.initDataUnsafe.start_param.trim() : null; + if (tgStartParam && !worldParam) { + console.log('[TG] startParam detected, joining world:', tgStartParam); + } + + // ==================== START MENU ==================== + let startMenuResolved = false; + + function generateShortWorldCode() { + // Generate readable 6-char code: consonants + digits (easy to copy/share) + const c = 'bcdfghjkmnpqrstvwxyz'; + const d = '23456789'; + let code = ''; + for (let i = 0; i < 3; i++) code += c[Math.floor(Math.random() * c.length)]; + for (let i = 0; i < 3; i++) code += d[Math.floor(Math.random() * d.length)]; + return code; + } + + function showStartMenu() { + return new Promise((resolve) => { + // If world is in URL — skip menu, auto-join + if ((worldParam && worldParam.trim() !== '') || tgStartParam) { + worldId = (worldParam && worldParam.trim()) || tgStartParam; + console.log('[Menu] Joining world from URL/startParam:', worldId); + resolve(worldId); + return; + } + + // ===== Minecraft-style CSS ===== + const mcCSS = ` + .mc-overlay { position:fixed;top:0;left:0;width:100%;height:100%;z-index:99999; + display:flex;align-items:center;justify-content:center;font-family:'Courier New',monospace; + image-rendering:pixelated; } + .mc-bg { position:absolute;inset:0;background:#000;opacity:0.75; } + .mc-dirt { position:absolute;bottom:0;left:0;right:0;height:40%; + background:repeating-linear-gradient(0deg,#8B6914 0px,#8B6914 2px,#7A5B12 2px,#7A5B12 4px);opacity:0.3; } + .mc-box { position:relative;z-index:1;background:#C6C6C6;border:4px solid #000; + padding:0;max-width:420px;width:92%;box-shadow:4px 4px 0 #000; } + .mc-titlebar { background:#1a1a2e;padding:12px 16px;text-align:center; + border-bottom:4px solid #000; } + .mc-title { font-size:24px;font-weight:bold;color:#FFAA00;text-shadow:2px 2px 0 #000; + letter-spacing:2px; } + .mc-subtitle { font-size:13px;color:#AAA;margin-top:4px; } + .mc-body { padding:16px;background:#C6C6C6; } + .mc-btn { display:block;width:100%;padding:10px 16px;margin-bottom:8px; + font-family:'Courier New',monospace;font-size:16px;font-weight:bold; + cursor:pointer;text-align:center;border:3px solid #000; + image-rendering:pixelated;box-shadow:3px 3px 0 #000; + transition:transform 0.05s,box-shadow 0.05s; } + .mc-btn:active { transform:translate(2px,2px);box-shadow:1px 1px 0 #000; } + .mc-btn-green { background:#5A8F3C;color:#E0E0E0;border-color:#3A5F1C;text-shadow:1px 1px 0 #222; } + .mc-btn-green:hover { background:#6DAF4E; } + .mc-btn-blue { background:#3C5F9E;color:#E0E0E0;border-color:#2A4070;text-shadow:1px 1px 0 #222; } + .mc-btn-blue:hover { background:#4B73BE; } + .mc-btn-purple { background:#7B3FA0;color:#E0E0E0;border-color:#5A2C78;text-shadow:1px 1px 0 #222; } + .mc-btn-purple:hover { background:#9555BE; } + .mc-btn-orange { background:#B86E00;color:#E0E0E0;border-color:#8A5200;text-shadow:1px 1px 0 #222; } + .mc-btn-orange:hover { background:#DA8500; } + .mc-btn-red { background:#9E2B2B;color:#E0E0E0;border-color:#6E1B1B;text-shadow:1px 1px 0 #222; } + .mc-btn-red:hover { background:#BE3B3B; } + .mc-btn-gray { background:#555;color:#AAA;border-color:#333;text-shadow:1px 1px 0 #111; } + .mc-btn-gray:hover { background:#666;color:#DDD; } + .mc-btn-outline { background:transparent;color:#555;border-color:#555; + text-shadow:none;box-shadow:2px 2px 0 #333; } + .mc-btn-outline:hover { background:#DDD;color:#222; } + .mc-input { width:100%;padding:8px 12px;font-family:'Courier New',monospace; + font-size:16px;background:#FFF;border:3px solid #000;color:#222; + box-shadow:inset 2px 2px 0 #999;margin:4px 0; } + .mc-input:focus { outline:none;border-color:#FFAA00; } + .mc-label { font-size:13px;color:#444;font-weight:bold;margin:8px 0 4px; } + .mc-divider { border:none;border-top:2px solid #999;margin:12px 0; } + .mc-friend-row { display:flex;justify-content:space-between;align-items:center; + padding:6px 8px;margin-bottom:4px;background:#E8E8E8;border:2px solid #999; + box-shadow:2px 2px 0 #999; } + .mc-friend-btn { padding:4px 10px;font-family:'Courier New',monospace; + font-size:13px;font-weight:bold;cursor:pointer;border:2px solid #000; + box-shadow:1px 1px 0 #000; } + .mc-friend-btn:active { transform:translate(1px,1px);box-shadow:none; } + .mc-friend-btn-green { background:#5A8F3C;color:#E0E0E0; } + .mc-friend-btn-red { background:#9E2B2B;color:#E0E0E0; } + .mc-checkbox-row { display:flex;align-items:center;gap:8px;font-size:13px;color:#444;cursor:pointer; } + .mc-checkbox { width:18px;height:18px;accent-color:#5A8F3C; } + `; + + const styleEl = document.createElement('style'); + styleEl.textContent = mcCSS; + document.head.appendChild(styleEl); + + const overlay = document.createElement('div'); + overlay.className = 'mc-overlay'; + overlay.id = 'startMenu'; + overlay.innerHTML = '
'; + + const box = document.createElement('div'); + box.className = 'mc-box'; + + // Title bar + const titleBar = document.createElement('div'); + titleBar.className = 'mc-titlebar'; + titleBar.innerHTML = '
⛏️ GrechkaCraft
' + + '
' + (isTgWebApp ? ('Привет, ' + (tgUser?.first_name || 'Игрок') + '!') : 'Voxel-мир в браузере') + '
'; + box.appendChild(titleBar); + + const body = document.createElement('div'); + body.className = 'mc-body'; + + // === Buttons === + // New World + const btnNew = document.createElement('button'); + btnNew.className = 'mc-btn mc-btn-green'; + btnNew.textContent = '🌍 Новый мир'; + btnNew.onclick = () => { + worldId = generateShortWorldCode(); + overlay.remove(); + styleEl.remove(); + resolve(worldId); + }; + body.appendChild(btnNew); + + // Join by code + const btnJoin = document.createElement('button'); + btnJoin.className = 'mc-btn mc-btn-blue'; + btnJoin.textContent = '🔗 Вступить по коду'; + btnJoin.onclick = () => { + body.innerHTML = ''; + const lbl = document.createElement('div'); + lbl.className = 'mc-label'; + lbl.textContent = 'Код мира:'; + body.appendChild(lbl); + const codeInput = document.createElement('input'); + codeInput.className = 'mc-input'; + codeInput.type = 'text'; + codeInput.placeholder = 'bkh237'; + codeInput.maxLength = 12; + body.appendChild(codeInput); + const btnGo = document.createElement('button'); + btnGo.className = 'mc-btn mc-btn-blue'; + btnGo.textContent = 'Войти →'; + btnGo.onclick = () => { + const code = codeInput.value.trim().toLowerCase(); + if (code.length >= 3) { + worldId = code; + overlay.remove(); + styleEl.remove(); + resolve(worldId); + } + }; + body.appendChild(btnGo); + const btnBack = document.createElement('button'); + btnBack.className = 'mc-btn mc-btn-gray'; + btnBack.textContent = '← Назад'; + btnBack.onclick = () => { overlay.remove(); styleEl.remove(); showStartMenu().then(resolve); }; + body.appendChild(btnBack); + codeInput.focus(); + codeInput.addEventListener('keydown', (e) => { if (e.key === 'Enter') btnGo.click(); }); + }; + body.appendChild(btnJoin); + + // Continue saved game + const hasLocalSave = !!localStorage.getItem('minegrechka_save'); + if (isTgWebApp || hasLocalSave) { + const btnHistory = document.createElement('button'); + btnHistory.className = 'mc-btn mc-btn-purple'; + btnHistory.textContent = '💾 Продолжить игру'; + btnHistory.onclick = async () => { + if (isTgWebApp && tgUser) { + try { + const resp = await fetch(SERVER_URL + '/api/tg/save?tg_id=' + tgUser.id); + const data = await resp.json(); + if (data.ok && data.world_id) { + worldId = data.world_id; + tgSaveLoaded = true; + overlay.remove(); + styleEl.remove(); + resolve(worldId); + return; + } + } catch(e) { console.warn('[TG] Load save failed:', e); } + } + if (hasLocalSave) { + worldId = generateShortWorldCode(); + overlay.remove(); + styleEl.remove(); + resolve(worldId); + return; + } + customAlert('Сохранений не найдено'); + }; + body.appendChild(btnHistory); + } + + // === TG-only buttons === + if (isTgWebApp && window.Telegram && Telegram.WebApp.switchInlineQuery) { + // Invite friends — with margin + const btnInvite = document.createElement('button'); + btnInvite.className = 'mc-btn mc-btn-outline'; + btnInvite.style.marginTop = '16px'; + btnInvite.textContent = '📤 Пригласить друзей'; + btnInvite.onclick = () => { + const code = worldId || generateShortWorldCode(); + const url = 'https://t.me/Grechkacraft_bot/app?startapp=' + encodeURIComponent(code); + if (Telegram.WebApp && Telegram.WebApp.openTelegramLink) { + Telegram.WebApp.openTelegramLink('https://t.me/share/url?url=' + encodeURIComponent(url) + '&text=' + encodeURIComponent('🏗️ Заходи в GrechkaCraft! Мир: ' + code)); + } else { + navigator.clipboard.writeText(url).then(() => showToast('📋 Скопировано!')).catch(() => showToast(url)); + } + }; + body.appendChild(btnInvite); + + // Friends — with margin + const btnFriends = document.createElement('button'); + btnFriends.className = 'mc-btn mc-btn-orange'; + btnFriends.style.marginTop = '8px'; + btnFriends.textContent = '👥 Друзья'; + btnFriends.onclick = async () => { + try { + const resp = await fetch(SERVER_URL + '/api/tg/friends?tg_id=' + tgUser.id); + const data = await resp.json(); + body.innerHTML = ''; + + // Back button at top + const btnBackTop = document.createElement('button'); + btnBackTop.className = 'mc-btn mc-btn-gray'; + btnBackTop.textContent = '← Назад'; + btnBackTop.style.marginBottom = '12px'; + btnBackTop.onclick = () => { overlay.remove(); styleEl.remove(); showStartMenu().then(resolve); }; + body.appendChild(btnBackTop); + + // Nickname section + if (data.nickname) { + const nickDiv = document.createElement('div'); + nickDiv.className = 'mc-friend-row'; + nickDiv.innerHTML = '🔗 Твой ник: ' + data.nickname + ''; + nickDiv.style.background = '#D5E8C5'; + body.appendChild(nickDiv); + } else { + const nickLabel = document.createElement('div'); + nickLabel.className = 'mc-label'; + nickLabel.style.color = '#9E2B2B'; + nickLabel.textContent = '⚡ Задай ник, чтобы друзья могли тебя найти:'; + body.appendChild(nickLabel); + const nickRow = document.createElement('div'); + nickRow.style.display = 'flex'; + nickRow.style.gap = '4px'; + nickRow.style.marginBottom = '8px'; + const nickInput = document.createElement('input'); + nickInput.className = 'mc-input'; + nickInput.style.flex = '1'; + nickInput.type = 'text'; + nickInput.maxLength = 16; + nickInput.placeholder = 'Твой ник'; + const nickBtn = document.createElement('button'); + nickBtn.className = 'mc-btn mc-btn-green'; + nickBtn.style.width = 'auto'; + nickBtn.style.marginBottom = '0'; + nickBtn.style.padding = '8px 16px'; + nickBtn.textContent = '✓'; + nickBtn.onclick = async () => { + const n = nickInput.value.trim().toLowerCase(); + if (!n || n.length < 2) { showToast('❌ Минимум 2 символа'); return; } + const check = await fetch(SERVER_URL + '/api/nick/check?nick=' + encodeURIComponent(n)); + const cd = await check.json(); + if (!cd.available) { showToast('❌ Ник занят'); return; } + const set = await fetch(SERVER_URL + '/api/nick/set', {method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({tg_id:tgUser.id,nickname:n})}); + const sd = await set.json(); + if (sd.ok) { showToast('✅ Ник: ' + sd.nickname); btnFriends.onclick(); } else { showToast('❌ Ошибка'); } + }; + nickRow.appendChild(nickInput); + nickRow.appendChild(nickBtn); + body.appendChild(nickRow); + } + + // Friends list + if (data.friends && data.friends.length) { + const listLabel = document.createElement('div'); + listLabel.className = 'mc-label'; + listLabel.textContent = '👥 Друзья:'; + body.appendChild(listLabel); + for (const f of data.friends) { + const fDiv = document.createElement('div'); + fDiv.className = 'mc-friend-row'; + const statusDot = f.online ? '🟢' : '⚫'; + let info = statusDot + ' ' + f.nickname + ''; + if (f.online && f.world_id) info += ' — мир ' + f.world_id; + const fInfo = document.createElement('div'); + fInfo.innerHTML = info; + fDiv.appendChild(fInfo); + if (f.online && f.world_id) { + const joinBtn = document.createElement('button'); + joinBtn.className = 'mc-friend-btn mc-friend-btn-green'; + joinBtn.textContent = '🎮 Вступить'; + joinBtn.onclick = () => { worldId = f.world_id; overlay.remove(); styleEl.remove(); resolve(worldId); }; + fDiv.appendChild(joinBtn); + } + body.appendChild(fDiv); + } + } else if (data.friends && !data.friends.length) { + const noFriends = document.createElement('div'); + noFriends.className = 'mc-label'; + noFriends.style.color = '#888'; + noFriends.textContent = 'Пока нет друзей'; + body.appendChild(noFriends); + } + + // Pending requests + if (data.pending && data.pending.length) { + const pLabel = document.createElement('div'); + pLabel.className = 'mc-label'; + pLabel.style.color = '#B86E00'; + pLabel.textContent = '📨 Запросы в друзья:'; + body.appendChild(pLabel); + for (const p of data.pending) { + const pItem = document.createElement('div'); + pItem.className = 'mc-friend-row'; + const span = document.createElement('span'); + span.textContent = p.from; + pItem.appendChild(span); + const btns = document.createElement('div'); + btns.style.display = 'flex'; + btns.style.gap = '4px'; + const acceptBtn = document.createElement('button'); + acceptBtn.className = 'mc-friend-btn mc-friend-btn-green'; + acceptBtn.textContent = '✓'; + acceptBtn.onclick = async () => { + const r = await fetch(SERVER_URL + '/api/friends/accept', {method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({tg_id:tgUser.id,request_id:p.id})}); + const d = await r.json(); + if (d.ok) { showToast('✅ Друг добавлен!'); btnFriends.onclick(); } else { showToast('❌ Ошибка'); } + }; + const declineBtn = document.createElement('button'); + declineBtn.className = 'mc-friend-btn mc-friend-btn-red'; + declineBtn.textContent = '✕'; + declineBtn.onclick = async () => { + await fetch(SERVER_URL + '/api/friends/decline', {method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({tg_id:tgUser.id,request_id:p.id})}); + showToast('Отклонено'); + btnFriends.onclick(); + }; + btns.appendChild(acceptBtn); + btns.appendChild(declineBtn); + pItem.appendChild(btns); + body.appendChild(pItem); + } + } + + // Add friend + body.appendChild(document.createElement('hr')); + body.className = 'mc-label'; + const addLabel = document.createElement('div'); + addLabel.className = 'mc-label'; + addLabel.textContent = '➕ Добавить друга по нику:'; + body.appendChild(addLabel); + const addRow = document.createElement('div'); + addRow.style.display = 'flex'; + addRow.style.gap = '4px'; + const addInput = document.createElement('input'); + addInput.className = 'mc-input'; + addInput.style.flex = '1'; + addInput.type = 'text'; + addInput.maxLength = 16; + addInput.placeholder = 'Ник друга'; + const addBtn = document.createElement('button'); + addBtn.className = 'mc-btn mc-btn-blue'; + addBtn.style.width = 'auto'; + addBtn.style.marginBottom = '0'; + addBtn.style.padding = '8px 16px'; + addBtn.textContent = '+'; + addBtn.onclick = async () => { + const nick = addInput.value.trim().toLowerCase(); + if (!nick || nick.length < 2) { showToast('❌ Минимум 2 символа'); return; } + const r = await fetch(SERVER_URL + '/api/friends/request', {method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({tg_id:tgUser.id,nickname:nick})}); + const d = await r.json(); + if (d.ok) { showToast(d.message === 'Already friends' ? '✅ Уже друзья!' : '📨 Запрос отправлен!'); } + else { showToast('❌ ' + (d.error || 'Ошибка')); } + }; + addRow.appendChild(addInput); + addRow.appendChild(addBtn); + body.appendChild(addRow); + + // Privacy checkboxes + const settings = data.settings || { allow_requests: 1, notify_online: 1 }; + const settingsDiv = document.createElement('div'); + settingsDiv.style.marginTop = '12px'; + const reqLabel = document.createElement('label'); + reqLabel.className = 'mc-checkbox-row'; + const reqCb = document.createElement('input'); + reqCb.className = 'mc-checkbox'; + reqCb.type = 'checkbox'; + reqCb.checked = settings.allow_requests; + reqCb.onchange = async () => { + await fetch(SERVER_URL + '/api/friends/settings', {method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({tg_id:tgUser.id,allow_requests:reqCb.checked?1:0,notify_online:settings.notify_online})}); + }; + reqLabel.appendChild(reqCb); + reqLabel.appendChild(document.createTextNode(' Запросы в друзья')); + settingsDiv.appendChild(reqLabel); + body.appendChild(settingsDiv); + } catch(e) { showToast('❌ Ошибка загрузки друзей'); console.error(e); } + }; + body.appendChild(btnFriends); + } + + // Player name input + if (!playerName) { + const nameDivider = document.createElement('hr'); + nameDivider.className = 'mc-divider'; + body.appendChild(nameDivider); + const nameLabel = document.createElement('div'); + nameLabel.className = 'mc-label'; + nameLabel.textContent = 'Твоё имя:'; + body.appendChild(nameLabel); + const nameInput = document.createElement('input'); + nameInput.className = 'mc-input'; + nameInput.type = 'text'; + nameInput.placeholder = 'Ваше имя'; + nameInput.value = tgUser ? (tgUser.username || tgUser.first_name || '') : ''; + nameInput.maxLength = 20; + nameInput.addEventListener('input', () => { + if (nameInput.value.trim()) { + playerName = nameInput.value.trim(); + localStorage.setItem('minegrechka_playerName', playerName); + } + }); + body.appendChild(nameInput); + } + + box.appendChild(body); + overlay.appendChild(box); + document.body.appendChild(overlay); + + // Auto-load TG save + if (isTgWebApp && tgUser && !worldParam) { + fetch(SERVER_URL + '/api/tg/save?tg_id=' + tgUser.id) + .then(r => r.json()) + .then(data => { + if (data.ok && data.world_id) { + // could update UI but menu is already shown + } + }) + .catch(() => {}); + } + }); + } + + // ==================== GAME LAUNCH ==================== + // Override the old auto-join logic + let gameLaunched = false; + + async function launchGame() { + if (gameLaunched) return; + gameLaunched = true; + + if (!playerName) { + playerName = tgUser ? (tgUser.username || tgUser.first_name || 'Игрок') : 'Игрок'; + localStorage.setItem('minegrechka_playerName', playerName); + } + + // Validate TG initData if in TG context + if (isTgWebApp && Telegram.WebApp.initData) { + try { + const resp = await fetch(SERVER_URL + '/api/tg/auth', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ initData: Telegram.WebApp.initData }) + }); + const data = await resp.json(); + if (data.ok && data.tg_id) { + console.log('[TG] Authenticated, tg_id:', data.tg_id); + tgUser = tgUser || {}; + tgUser.id = data.tg_id; + } + } catch(e) { console.warn('[TG] Auth failed:', e); } + } + + // Update URL with world code + try { + const newUrl = new URL(window.location.href); + newUrl.searchParams.set('world', worldId); + if (typeof history !== 'undefined' && history.replaceState) { + history.replaceState(null, '', newUrl.toString()); + } + } catch(e) {} + + console.log('[Launch] worldId:', worldId, 'player:', playerName, 'tg:', !!tgUser); + + // The rest of the game init will pick up worldId and playerName + // Signal that menu is done + startMenuResolved = true; + window.dispatchEvent(new Event('startMenuDone')); + } + + // ==================== SOCKET.IO КЛИЕНТ ==================== + let socket = null; + let isMultiplayer = false; // Флаг для мультиплеерного режима + const otherPlayers = new Map(); // socket_id -> {x, y, color} + const serverMobs = new Map(); // id -> mob (server-spawned, client-authoritative physics) + + // Helper to get all mobs (local + server-spawned in MP) + function getAllMobs() { + return isMultiplayer ? mobs.concat(Array.from(serverMobs.values())) : mobs; + } + + // Create a client-side mob object from server spawn data with correct properties matching client constructors + function createMobFromServer(data) { + const kindProps = { + zombie: { w: 34, h: 50, hp: 4, speed: 80 + Math.random() * 40, hostile: true, fuse: 0, shootCooldown: 2 }, + creeper: { w: 34, h: 50, hp: 4, speed: 60 + Math.random() * 30, hostile: true, fuse: 3.2, shootCooldown: 2 }, + skeleton: { w: 34, h: 50, hp: 4, speed: 70 + Math.random() * 30, hostile: true, fuse: 0, shootCooldown: 0 }, + pig: { w: 34, h: 24, hp: 2, speed: 40, hostile: false, fuse: 0, shootCooldown: 2 }, + chicken: { w: 26, h: 22, hp: 1, speed: 55, hostile: false, fuse: 0, shootCooldown: 2 }, + scorpion: { w: 26, h: 26, hp: 3, speed: 90, hostile: true, fuse: 0, shootCooldown: 0, biome:'desert' }, + polar_bear:{ w: 40, h: 34, hp: 8, speed: 50, hostile: false, fuse: 0, shootCooldown: 2, biome:'tundra' }, + slime: { w: 24, h: 24, hp: 2, speed: 30, hostile: true, fuse: 0, shootCooldown: 2, biome:'swamp' }, + eagle: { w: 30, h: 22, hp: 3, speed: 120, hostile: true, fuse: 0, shootCooldown: 0, biome:'mountains' } + }; + const props = kindProps[data.kind] || kindProps['pig']; // fallback + return { + id: data.id, + kind: data.kind, + x: data.x, + y: data.y, + w: props.w, + h: props.h, + hp: data.hp || props.hp, + maxHp: data.maxHp || data.hp || props.hp, + speed: props.speed, + hostile: props.hostile, + vx: 0, + vy: 0, + grounded: false, + inWater: false, + aiT: 0, + dir: data.dir || 1, + dead: false, + fuse: props.fuse, + shootCooldown: props.shootCooldown + }; + } + let mySocketId = null; + + // Throttle для отправки позиции (10-20 раз в секунду) + let lastMoveSendTime = 0; + const MOVE_SEND_INTERVAL = 0.05; // 50ms = 20 раз в секунду + let lastSentX = 0, lastSentY = 0; + + function initSocket() { + try { + socket = io(SERVER_URL, { + path: '/socket.io/', + transports: ['websocket', 'polling'] + }); + + socket.on('connect', () => { + console.log(`Connected to server: ${SERVER_URL}, socket.id: ${socket.id}, worldId: ${worldId}`); + mySocketId = socket.id; + isMultiplayer = true; + + // Присоединяемся к миру + socket.emit('join_world', { world_id: worldId, player_name: playerName, tg_id: (tgUser && tgUser.id) ? tgUser.id : null }); + + // TG: отправляем tg_auth + онлайн статус для уведомления друзей + if (tgUser && tgUser.id) { + socket.emit('tg_auth', { tg_id: tgUser.id }); + try { + fetch(SERVER_URL + '/api/tg/online', {method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({tg_id:tgUser.id,world_id:worldId,player_name:playerName||'Игрок'})}); + } catch(e) { console.warn('[TG] online notify error:', e); } + } + + // Показываем в UI + worldIdEl.textContent = worldId; + // XP/Level display + const lvXpNext = xpForLevel(player.level + 1); + const lvXpCur = xpForLevel(player.level); + const xpInLevel = player.xp - lvXpCur; + const xpNeeded = lvXpNext - lvXpCur; + document.getElementById('xplevel').textContent = player.level; + document.getElementById('xpbar').textContent = xpInLevel + '/' + xpNeeded; + multiplayerStatus.style.display = 'block'; + }); + + socket.on('connect_error', (error) => { + console.error('Socket connection error:', error); + isMultiplayer = false; + }); + + socket.on('disconnect', () => { + console.log('Disconnected from server'); + isMultiplayer = false; + otherPlayers.clear(); + multiplayerStatus.style.display = 'none'; + // TG: убираем онлайн статус + if (tgUser && tgUser.id) { + try { fetch(SERVER_URL + '/api/tg/offline', {method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({tg_id:tgUser.id})}); } catch(e) {} + } + }); + + // Обработка world_state + socket.on('world_state', (data) => { + console.log('Received world_state:', data); + + // Устанавливаем seed и перегенерируем мир если он изменился + if (data.seed !== undefined && data.seed !== worldSeed) { + const oldSeed = worldSeed; + worldSeed = data.seed; + console.log('World seed set from', oldSeed, 'to', worldSeed); + // Full regeneration with correct seed + grid.clear(); + blocks.length = 0; + placedBlocks = []; + removedBlocks = []; + generated.clear(); + for (let gx = spawnPoint.gx - 25; gx <= spawnPoint.gx + 25; gx++) { + genColumn(gx); + decorations(gx); + } + console.log('World regenerated with seed:', worldSeed); + } + + // Применяем блоки — сохраняем в serverOverrides для применения после genColumn + if (data.blocks && Array.isArray(data.blocks)) { + for (const block of data.blocks) { + const key = k(block.gx, block.gy); + serverOverrides.set(key, { op: block.op, t: block.t }); + // Также пробуем применить сразу (если колонна уже сгенерирована) + if (block.op === 'set') { + setBlock(block.gx, block.gy, block.t, false); + } else if (block.op === 'remove') { + removeBlock(block.gx, block.gy); + } + } + } + + // Устанавливаем время + if (data.time !== undefined) { + worldTime = data.time; + isNightTime = worldTime > 0.5; + } + + // Всегда считаем spawnPoint на клиенте по той же формуле что и surfaceGyAt + // Это гарантирует совпадение с terrain generation + { + const startGX = 6; + // Генерируем колонну и соседние для безопасного спавна + for (let dx = -3; dx <= 3; dx++) genColumn(startGX + dx); + const surfaceY = surfaceGyAt(startGX); + // Ищем ближайшую небудущую позицию сверху вниз от поверхности + let safeGY = surfaceY - 1; + // Проверяем что над поверхностью воздух (не в воде) + const aboveBlock = getBlock(startGX, surfaceY - 1); + if (aboveBlock && aboveBlock.t === 'water') { + // Если в воде — ищем поверхность выше уровня моря + for (let gy = SEA_GY - 1; gy >= 0; gy--) { + const b = getBlock(startGX, gy); + if (!b || b.dead || b.t === 'air' || b.t === 'water') continue; + safeGY = gy - 1; + break; + } + } + spawnPoint.x = startGX * TILE; + spawnPoint.y = safeGY * TILE; + console.log('Client-side spawn point:', spawnPoint, 'surfaceY:', surfaceY, 'safeGY:', safeGY); + } + + // Устанавливаем игрока в точку спавна + player.x = spawnPoint.x; + player.y = spawnPoint.y; + player.vx = 0; + player.vy = 0; + player.fallStartY = player.y; + console.log('Player moved to spawn point:', player.x, player.y); + + // Устанавливаем HP на 100% при каждом подключении к миру + player.hp = 100; + player.hunger = 100; + player.o2 = 100; + player.invuln = 0; + console.log('[MULTIPLAYER CONNECT] Player HP set to 100% on connect'); + + // Обновляем список игроков + if (data.players && Array.isArray(data.players)) { + otherPlayers.clear(); + for (const p of data.players) { + if (p.socket_id !== mySocketId) { + otherPlayers.set(p.socket_id, { + x: p.x, + y: p.y, + color: getRandomPlayerColor(p.socket_id), + name: p.player_name || 'Игрок' + }); + } + } + // Обновляем счётчик игроков + playerCountEl.textContent = data.players.length; + } + // Server mobs — client-authoritative: create with full client-side properties + if (data.mobs && Array.isArray(data.mobs)) { + serverMobs.clear(); + for (const m of data.mobs) { + const sm = createMobFromServer(m); + // Пересчитываем Y по клиентской surfaceGyAt + const spawnGX = Math.floor(sm.x / TILE); + genColumn(spawnGX - 1); genColumn(spawnGX); genColumn(spawnGX + 1); + const clientSurfaceY = surfaceGyAt(spawnGX); + sm.y = (clientSurfaceY - 1) * TILE; + sm.vy = 0; + serverMobs.set(m.id, sm); + } + } + // Claims (приватные зоны) + if (data.claims && Array.isArray(data.claims)) { + claims = data.claims; + myClaimCount = claims.filter(function(c) { return c.owner_name === playerName; }).length; + console.log('[Claims] Loaded', claims.length, 'claims for world'); + } + }); + + // Игрок присоединился + socket.on('player_joined', (data) => { + console.log('Player joined:', data.socket_id); + if (data.socket_id !== mySocketId) { + // Генерируем безопасную позицию для нового игрока + const spawnGX = 6; + genColumn(spawnGX); + const surfaceY = surfaceGyAt(spawnGX); + const safeSpawnX = spawnGX * TILE; + const safeSpawnY = (surfaceY - 1) * TILE; + + otherPlayers.set(data.socket_id, { + x: safeSpawnX, + y: safeSpawnY, + tx: safeSpawnX, + ty: safeSpawnY, + color: getRandomPlayerColor(data.socket_id), + name: data.player_name || 'Игрок' + }); + addChatMessage('Система', `Игрок присоединился`); + // Обновляем видимость кнопки сохранения + updateSaveButtonVisibility(); + } + }); + + // Игрок переместился + socket.on('player_moved', (data) => { + if (data.socket_id !== mySocketId && otherPlayers.has(data.socket_id)) { + const p = otherPlayers.get(data.socket_id); + // Lerp: запоминаем целевую позицию, рисуем в рендере с интерполяцией + p.tx = data.x; + p.ty = data.y; + // Обновляем имя, если оно пришло + if (data.player_name) { + p.name = data.player_name; + } + } + }); + + // Игрок покинул + socket.on('player_left', (data) => { + console.log('Player left:', data.socket_id); + otherPlayers.delete(data.socket_id); + addChatMessage('Система', `Игрок покинул игру`); + // Обновляем видимость кнопки сохранения + updateSaveButtonVisibility(); + }); + + // === MOB SYNC (multiplayer) === + + socket.on('mob_spawned', (data) => { + const sm = createMobFromServer(data); + // Пересчитываем Y по клиентской surfaceGyAt — сервер может ошибаться + const spawnGX = Math.floor(sm.x / TILE); + // Убеждаемся что чанк сгенерирован (иначе getBlock=null → моб падает сквозь землю) + genColumn(spawnGX - 1); genColumn(spawnGX); genColumn(spawnGX + 1); + const clientSurfaceY = surfaceGyAt(spawnGX); + sm.y = (clientSurfaceY - 1) * TILE; // 1 блок выше поверхности (под ногами) + sm.vy = 0; + sm.grounded = false; // resolveY в mobAI поставит grounded=true + serverMobs.set(data.id, sm); + }); + + socket.on('mob_positions', (arr) => { + for (const u of arr) { + let sm = serverMobs.get(u.id); + if (!sm) { + sm = createMobFromServer({ id: u.id, kind: u.kind || 'zombie', x: u.x, y: u.y, + hp: u.hp || 1, maxHp: u.hp || 1, dir: u.dir || 1 }); + serverMobs.set(u.id, sm); + } + sm.x += (u.x - sm.x) * 0.35; + sm.y += (u.y - sm.y) * 0.35; + sm.dir = u.dir != null ? u.dir : sm.dir; + sm.hp = u.hp != null ? u.hp : sm.hp; + sm.fuse = u.fuse != null ? u.fuse : sm.fuse; + sm.grounded = !!u.grounded; + } + }); + + socket.on('mob_despawned', (data) => { serverMobs.delete(data.id); }); + + socket.on('mob_died', (data) => { + const sm = serverMobs.get(data.id); + if (sm && data.killer === mySocketId) { + // Give loot to the killer + if (sm.kind === 'chicken') playSound('hurt_chicken'); + spawnDrops(sm.x, sm.y, sm.kind); + rebuildHotbar(); + } + serverMobs.delete(data.id); + }); + + socket.on('mob_hurt_ack', (data) => { + const sm = serverMobs.get(data.id); + if (sm) sm.hp = data.hp; + }); + + socket.on('mob_explode', (data) => { + explodeAt(data.gx, data.gy); + serverMobs.delete(data.id); + }); + + socket.on('mob_shoot', (data) => { + projectiles.push({ + x: data.x, y: data.y, vx: data.vx, vy: data.vy, + dmg: data.dmg, owner: 'mob', life: data.life + }); + }); + + // Блок изменён + + // Claim events from server + socket.on('claim_created', (data) => { + playSound('click'); + showToast('🏴 Территория захвачена! Радиус: ' + data.radius + ' блоков', 3000); + }); + + socket.on('claim_removed', (data) => { + playSound('click'); + showToast('🏴 Флаг снят — территория свободна', 3000); + }); + + socket.on('claims_update', (data) => { + claims = data; + myClaimCount = claims.filter(c => c.owner_name === playerName).length; + }); + + socket.on('claim_denied', (data) => { + showToast('⛔ Территория ' + data.owner + ' — чужая зона!', 3000); + }); + + socket.on('claim_error', (data) => { + showToast('❌ ' + data.msg, 3000); + }); + + socket.on('block_changed', (data) => { + const key = k(data.gx, data.gy); + serverOverrides.set(key, { op: data.op, t: data.t }); + if (data.op === 'set') { + setBlock(data.gx, data.gy, data.t, false); + } else if (data.op === 'remove') { + removeBlock(data.gx, data.gy); + } + }); + + // Сообщение в чат + socket.on('chat_message', (data) => { + const senderName = data.socket_id === mySocketId ? 'Вы' : `Игрок ${data.socket_id.substring(0, 6)}`; + addChatMessage(senderName, data.message); + }); + + // Обновление времени + socket.on('time_update', (data) => { + if (data.time !== undefined) { + worldTime = data.time; + isNightTime = worldTime > 0.5; + } + }); + + } catch (e) { + console.error('Error initializing socket:', e); + isMultiplayer = false; + } + } + + // Генерация случайного цвета для игрока на основе socket_id + function getRandomPlayerColor(socketId) { + const colors = ['#e74c3c', '#3498db', '#2ecc71', '#f39c12', '#9b59b6', '#1abc9c', '#e91e63', '#00bcd4']; + let hash = 0; + for (let i = 0; i < socketId.length; i++) { + hash = ((hash << 5) - hash) + socketId.charCodeAt(i); + hash = hash & hash; + } + return colors[Math.abs(hash) % colors.length]; + } + + // Отправка позиции игрока (с throttle) + function sendPlayerPosition() { + if (!isMultiplayer || !socket || !socket.connected) return; + + const now = performance.now() / 1000; + if (now - lastMoveSendTime < MOVE_SEND_INTERVAL) return; + + // Отправляем только если позиция изменилась + const dx = Math.abs(player.x - lastSentX); + const dy = Math.abs(player.y - lastSentY); + if (dx < 1 && dy < 1) return; + + lastMoveSendTime = now; + lastSentX = player.x; + lastSentY = player.y; + + socket.emit('player_move', { x: player.x, y: player.y, player_name: playerName }); + } + + // Отправка изменения блока + function sendBlockChange(gx, gy, t, op) { + if (!isMultiplayer || !socket || !socket.connected) return; + + socket.emit('block_change', { gx, gy, t, op }); + } + + + // ==================== CLAIMS (ПРИВАТНЫЕ ЗОНЫ) ==================== + let claims = []; // [{gx, gy, radius, owner_name}] + let myClaimCount = 0; // How many flags player has placed + + // Claim border overlay colors + const CLAIM_COLORS = [ + 'rgba(231,76,60,0.3)', // red-ish + 'rgba(52,152,219,0.3)', // blue + 'rgba(46,204,113,0.3)', // green + 'rgba(155,89,182,0.3)', // purple + 'rgba(241,196,15,0.3)', // yellow + ]; + + // ==================== ЧАТ ==================== + const chatMessages = []; + const MAX_CHAT_MESSAGES = 20; + + function addChatMessage(sender, message) { + const time = new Date().toLocaleTimeString('ru-RU', { hour: '2-digit', minute: '2-digit' }); + chatMessages.push({ sender, message, time }); + if (chatMessages.length > MAX_CHAT_MESSAGES) { + chatMessages.shift(); + } + renderChatMessages(); + } + + function renderChatMessages() { + const chatMessagesEl = document.getElementById('chatMessages'); + if (!chatMessagesEl) return; + + chatMessagesEl.innerHTML = chatMessages.map(m => + `
${m.time} ${m.sender}: ${m.message}
` + ).join(''); + + // Прокручиваем вниз + chatMessagesEl.scrollTop = chatMessagesEl.scrollHeight; + } + + function sendChatMessage(message) { + if (!message || message.trim() === '') return; + + if (isMultiplayer && socket && socket.connected) { + socket.emit('chat_message', { message: message.trim() }); + } else { + addChatMessage('Вы', message.trim()); + } + } + + // ==================== ПОДЕЛИТЬСЯ МИРОМ ==================== + function shareWorld() { + const shareUrl = new URL(window.location.href); + shareUrl.searchParams.set('world', worldId); + const shareUrlString = shareUrl.toString(); + + // Копируем в буфер обмена + if (navigator.clipboard && navigator.clipboard.writeText) { + navigator.clipboard.writeText(shareUrlString).then(() => { + alert('Ссылка скопирована!'); + }).catch(() => { + alert('Ссылка на мир:\n' + shareUrlString); + }); + } else { + alert('Ссылка на мир:\n' + shareUrlString); + } + } + + // ==================== ИНИЦИАЛИЗАЦИЯ UI ==================== + let chatOpen = false; + + document.getElementById('chatToggle').onclick = () => { + playSound('click'); + chatOpen = !chatOpen; + document.getElementById('chatPanel').style.display = chatOpen ? 'block' : 'none'; + if (chatOpen) { + document.getElementById('chatInput').focus(); + } + }; + + document.getElementById('chatClose').onclick = () => { + playSound('click'); + chatOpen = false; + document.getElementById('chatPanel').style.display = 'none'; + }; + + document.getElementById('chatSend').onclick = () => { + const input = document.getElementById('chatInput'); + sendChatMessage(input.value); + input.value = ''; + }; + + document.getElementById('chatInput').addEventListener('keypress', (e) => { + if (e.key === 'Enter') { + sendChatMessage(e.target.value); + e.target.value = ''; + } + }); + + // ==================== ИНИЦИАЛИЗАЦИЯ СОКЕТА ==================== + // Show start menu first, then init socket + showStartMenu().then((wid) => { + worldId = wid; + // Send tg_id if TG user + initSocket(); + launchGame(); + }); + + // ==================== ЗВУКОВОЙ ДВИЖОК ==================== + const sounds = {}; + function loadSound(id, src) { + const audio = new Audio(); + audio.src = src; + audio.volume = 0.3; + sounds[id] = audio; + } + + // Загрузка звуков + loadSound('splash', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//splash.mp3'); + loadSound('sand1', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//sand1.mp3'); + loadSound('snow1', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//snow1.mp3'); + loadSound('stone1', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//stone1.mp3'); + loadSound('wood1', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//wood1.mp3'); + loadSound('cloth1', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//cloth1.mp3'); + loadSound('fire', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//fire.mp3'); + loadSound('hit1', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//hit1.mp3'); + loadSound('attack', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//attack.mp3'); + loadSound('hurt_chicken', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//hurt1_chicken.mp3'); + loadSound('stone_build', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//stone1%20(1).mp3'); + loadSound('wood_build', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//wood1%20(1).mp3'); + loadSound('click', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//click.mp3'); + loadSound('explode1', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//explode1.mp3'); + loadSound('glass1', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//glass1.mp3'); + loadSound('eat1', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//eat1.mp3'); + loadSound('step', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//sand2.mp3'); + + function playSound(id) { + if(sounds[id]) { + sounds[id].currentTime = 0; + sounds[id].play().catch(e => console.error('Sound error:', e)); + } + } + + // Играем звук при прыжке + const gameEl = document.getElementById('game'); + const canvas = document.getElementById('c'); + const ctx = canvas.getContext('2d'); + + // offscreen light map (не вставляем в DOM) + const lightC = document.createElement('canvas'); + const lightCtx = lightC.getContext('2d'); + + const dpr = Math.max(1, window.devicePixelRatio || 1); + let W=0, H=0; + + const TILE = 40; + + // Мир + const SEA_GY = 14; // уровень воды (gy) - уменьшил для меньших водоёмов + const BEDROCK_GY = 140; // глубина бедрока (gy), чем больше - тем глубже + const GEN_MARGIN_X = 40; // запас генерации по X (в тайлах) — увеличен для плавной прогрузки + + const heroImg = new Image(); + heroImg.src = 'https://supamg.mkn8n.ru/storage/v1/object/public/img//grechka.png'; + + // Состояние инвентаря + let showFullInventory = false; + let recentItems = []; // Последние 5 выбранных предметов + + const BLOCKS = { + air: { n:'Воздух', solid:false }, + grass: { n:'Трава', c:'#7cfc00', solid:true }, + dirt: { n:'Грязь', c:'#8b4513', solid:true }, + stone: { n:'Камень', c:'#7f8c8d', solid:true }, + sand: { n:'Песок', c:'#f4d06f', solid:true }, + gravel: { n:'Гравий', c:'#95a5a6', solid:true }, + clay: { n:'Глина', c:'#74b9ff', solid:true }, + wood: { n:'Дерево', c:'#d35400', solid:true }, + planks: { n:'Доски', c:'#e67e22', solid:true }, + ladder: { n:'Лестница',c:'#d35400', solid:false, climbable:true }, + leaves: { n:'Листва', c:'#2ecc71', solid:true }, + glass: { n:'Стекло', c:'rgba(200,240,255,0.25)', solid:true, alpha:0.55 }, + water: { n:'Вода', c:'rgba(52,152,219,0.55)', solid:false, fluid:true }, + coal: { n:'Уголь', c:'#2c3e50', solid:true }, + copper_ore:{ n:'Медь', c:'#e17055', solid:true }, + iron_ore: { n:'Железо', c:'#dcdde1', solid:true }, + iron_armor:{ n:'Железная броня', c:'#95a5a6', solid:false, armor:0.5 }, + gold_ore: { n:'Золото', c:'#f1c40f', solid:true }, + diamond_ore:{n:'Алмаз', c:'#00a8ff', solid:true }, + brick: { n:'Кирпич', c:'#c0392b', solid:true }, + tnt: { n:'TNT', c:'#e74c3c', solid:true, explosive:true }, + campfire: { n:'Костёр', c:'#e67e22', solid:true, lightRadius:280 }, + torch: { n:'Факел', c:'#f9ca24', solid:true, lightRadius:220 }, + bedrock: { n:'Бедрок', c:'#2d3436', solid:true, unbreakable:true }, + flower: { n:'Цветок', c:'#ff4757', solid:false, decor:true }, + bed: { n:'Кровать', c:'#e91e63', solid:true, bed:true }, + boat: { n:'Лодка', c:'#8B4513', solid:false }, + furnace: { n:'Печь', c:'#696969', solid:true, smelting:true }, + flag: { n:'Флаг', c:'#e74c3c', solid:true, claimRadius:15 }, + // === BIOME BLOCKS === + snow: { n:'Снег', c:'#ecf0f1', solid:true }, + ice: { n:'Лёд', c:'#74b9ff', solid:true, slip:true }, + cactus: { n:'Кактус', c:'#27ae60', solid:true, hurt:true }, + mushroom: { n:'Гриб', c:'#e74c3c', solid:false, decor:true }, + moss: { n:'Мох', c:'#0a6640', solid:true }, + swamp_water:{ n:'Болотная вода', c:'rgba(100,120,40,0.6)', solid:false, fluid:true, poison:true }, + farmland: { n:'Грядка', c:'#8B6914', solid:true, farmable:true }, + dead_bush: { n:'Сухой куст', c:'#b2bec3', solid:false, decor:true }, + spruce_leaves:{ n:'Ель', c:'#0a6640', solid:true }, + // === CROP STAGES === + wheat_stage0:{ n:'Росток пшеницы', c:'#a8e6a0', solid:false, decor:true, growthStage:0, growthTime:30, growsTo:'wheat_stage1' }, + wheat_stage1:{ n:'Пшеница', c:'#7dcea0', solid:false, decor:true, growthStage:1, growthTime:30, growsTo:'wheat_stage2' }, + wheat_stage2:{ n:'Пшеница', c:'#b8d730', solid:false, decor:true, growthStage:2, growthTime:30, growsTo:'wheat_stage3' }, + wheat_stage3:{ n:'Пшеница', c:'#f1c40f', solid:false, decor:true, harvestable:true, harvestItem:'wheat', harvestQty:2 }, + carrot_stage0:{ n:'Росток моркови', c:'#a8e6a0', solid:false, decor:true, growthStage:0, growthTime:30, growsTo:'carrot_stage1' }, + carrot_stage1:{ n:'Морковь', c:'#f0c27a', solid:false, decor:true, growthStage:1, growthTime:30, growsTo:'carrot_stage2' }, + carrot_stage2:{ n:'Морковь', c:'#e8a040', solid:false, decor:true, growthStage:2, growthTime:30, growsTo:'carrot_stage3' }, + carrot_stage3:{ n:'Морковь', c:'#e67e22', solid:false, decor:true, harvestable:true, harvestItem:'carrot', harvestQty:3 }, + potato_stage0:{ n:'Росток картофеля', c:'#a8e6a0', solid:false, decor:true, growthStage:0, growthTime:30, growsTo:'potato_stage1' }, + potato_stage1:{ n:'Картофель', c:'#c8b888', solid:false, decor:true, growthStage:1, growthTime:30, growsTo:'potato_stage2' }, + potato_stage2:{ n:'Картофель', c:'#bfaa78', solid:false, decor:true, growthStage:2, growthTime:30, growsTo:'potato_stage3' }, + potato_stage3:{ n:'Картофель', c:'#dfe6e9', solid:false, decor:true, harvestable:true, harvestItem:'potato', harvestQty:2 } + }; + + const ITEMS = { + meat: { n:'Сырое мясо', icon:'🥩', food:15 }, + cooked: { n:'Жареное мясо', icon:'🍖', food:45 }, + arrow: { n:'Стрела', icon:'➡️', stack:64 }, + chicken_meat: { n:'Курица', icon:'🍗', food:12, stack:64 }, + feather: { n:'Перо', icon:'🪶', stack:64 }, + bone: { n:'Кость', icon:'🦴', stack:64 }, + gunpowder: { n:'Порох', icon:'💥', stack:64 }, + // === FARMING ITEMS === + wheat: { n:'Пшеница', icon:'🌾', stack:64 }, + bread: { n:'Хлеб', icon:'🍞', food:30 }, + carrot: { n:'Морковь', icon:'🥕', food:8, stack:64 }, + potato: { n:'Картофель', icon:'🥔', stack:64 }, + baked_potato:{ n:'Печёная картошка', icon:'🥔', food:25 }, + mushroom_stew:{ n:'Грибной суп', icon:'🍲', food:40 }, + flag: { n:'Флаг', icon:'🏴', stack:5, craft: { planks: 3, iron_ore: 1 } }, + // === MOB DROP ITEMS === + scorpion_stinger:{ n:'Жало скорпиона', icon:'🔺', stack:64 }, + polar_fur: { n:'Шкура медведя', icon:'🧥', stack:64 }, + slime_ball: { n:'Слизь', icon:'🟢', stack:64 }, + eagle_feather:{ n:'Перо орла', icon:'🪶', stack:64 }, + // === NEW ARMOR & TOOLS === + gold_armor: { n:'Золотая броня', icon:'🛡️', stack:1, armor:0.65 } + }; + + // Seed мира для детерминированной генерации + // Seed: null in MP until server sends it; SP uses random seed + let worldSeed = isMultiplayer ? null : Math.floor(Math.random() * 1000000); + + // Отслеживание изменений мира (для оптимизированного сохранения) + let placedBlocks = []; // [{gx, gy, t}] - блоки, установленные игроком + let removedBlocks = []; // [{gx, gy}] - блоки, удалённые игроком + + // Серверные изменения — применяются после genColumn чтобы не перезатирались + const serverOverrides = new Map(); // key "gx,gy" => {op:'set'|'remove', t?:string} + + // Инструменты + const TOOLS = { + wood_pickaxe: { n:'Деревянная кирка', icon:'⛏️', durability: 60, miningPower: 1, craft: { wood: 3, planks: 2 }, requiredLevel: 1 }, + stone_pickaxe: { n:'Каменная кирка', icon:'⛏️', durability: 130, miningPower: 2, craft: { wood: 1, stone: 3 }, requiredLevel: 2 }, + iron_pickaxe: { n:'Железная кирка', icon:'⛏️', durability: 250, miningPower: 3, craft: { wood: 1, iron_ore: 2 }, requiredLevel: 3 }, + wood_sword: { n:'Деревянный меч', icon:'⚔️', durability: 40, damage: 5, craft: { wood: 2, planks: 1 }, requiredLevel: 1 }, + stone_sword: { n:'Каменный меч', icon:'⚔️', durability: 100, damage: 8, craft: { wood: 1, stone: 2 }, requiredLevel: 2 }, + iron_sword: { n:'Железный меч', icon:'⚔️', durability: 200, damage: 12, craft: { wood: 1, iron_ore: 1 }, requiredLevel: 3 }, + bow: { n:'Лук', icon:'🏹', durability: 150, craft: { wood: 3, planks: 2 }, requiredLevel: 4 }, + diamond_pickaxe: { n:'Алмазная кирка', icon:'⛏️', durability: 500, miningPower: 5, craft: { wood: 1, diamond_ore: 2 }, requiredLevel: 7 }, + diamond_sword: { n:'Алмазный меч', icon:'⚔️', durability: 400, damage: 18, craft: { wood: 1, diamond_ore: 2 }, requiredLevel: 7 }, + hoe: { n:'Мотыга', icon:'🔨', durability: 80, tillTo: 'farmland', craft: { wood: 2, planks: 1 }, requiredLevel: 1 } + }; + + // Текстуры блоков (простые) + const tex = {}; + function makeTex(type) { + const t = BLOCKS[type]; + const c = document.createElement('canvas'); + c.width = 32; c.height = 32; + const g = c.getContext('2d'); + + if (type === 'tnt') { + g.fillStyle='#c0392b'; g.fillRect(0,0,32,32); + g.fillStyle='#fff'; g.fillRect(0,12,32,8); + g.fillStyle='#000'; g.font='bold 10px sans-serif'; g.fillText('TNT',6,20); + return c; + } + if (type === 'campfire') { + g.fillStyle='#5d4037'; g.fillRect(4,26,24,6); + g.fillStyle='#3e2723'; g.fillRect(7,23,18,4); + return c; + } + if (type === 'torch') { + g.fillStyle='#6d4c41'; g.fillRect(14,10,4,18); + g.fillStyle='#f39c12'; g.fillRect(12,6,8,8); + return c; + } + if (type === 'glass') { + g.fillStyle='rgba(200,240,255,0.25)'; g.fillRect(0,0,32,32); + g.strokeStyle='rgba(255,255,255,0.65)'; g.strokeRect(2,2,28,28); + g.beginPath(); g.moveTo(5,27); g.lineTo(27,5); g.stroke(); + return c; + } + if (type === 'water') { + g.fillStyle = t.c; g.fillRect(0,0,32,32); + g.fillStyle = 'rgba(255,255,255,0.08)'; + g.fillRect(0,6,32,2); + return c; + } + if (type === 'bed') { + // Основание кровати + g.fillStyle = '#e91e63'; + g.fillRect(0, 0, 32, 32); + // Подушка + g.fillStyle = '#f8bbd0'; + g.fillRect(2, 2, 14, 14); + // Одеяло + g.fillStyle = '#c2185b'; + g.fillRect(16, 4, 14, 24); + // Детали одеяла + g.fillStyle = '#e91e63'; + g.fillRect(18, 6, 10, 20); + return c; + } + if (type === 'flower') { + g.fillStyle='#2ecc71'; g.fillRect(14,14,4,18); + g.fillStyle=t.c; g.beginPath(); g.arc(16,12,6,0,6.28); g.fill(); + return c; + } + if (type === 'boat') { + // Корпус лодки + g.fillStyle = '#8B4513'; + g.fillRect(2, 12, 28, 8); + // Борта + g.fillStyle = '#A0522D'; + g.fillRect(0, 10, 32, 12); + // Внутренность + g.fillStyle = '#DEB887'; + g.fillRect(4, 14, 24, 4); + // Дно + g.fillStyle = '#654321'; + g.fillRect(2, 20, 28, 4); + return c; + } + if (type === 'ladder') { + // Боковые стойки лестницы + g.fillStyle = '#8B4513'; + g.fillRect(4, 0, 4, 32); + g.fillRect(24, 0, 4, 32); + // Ступени + g.fillStyle = '#A0522D'; + g.fillRect(4, 4, 24, 3); + g.fillRect(4, 12, 24, 3); + g.fillRect(4, 20, 24, 3); + g.fillRect(4, 28, 24, 3); + return c; + } + // === BIOME BLOCK TEXTURES === + if (type === 'snow') { + g.fillStyle = '#ecf0f1'; + g.fillRect(0, 0, 32, 32); + g.fillStyle = '#dfe6e9'; + for (let i = 0; i < 4; i++) g.fillRect((Math.random()*26)|0, (Math.random()*26)|0, 5, 3); + return c; + } + if (type === 'ice') { + g.fillStyle = '#74b9ff'; + g.fillRect(0, 0, 32, 32); + g.strokeStyle = 'rgba(255,255,255,0.4)'; + g.beginPath(); g.moveTo(4,10); g.lineTo(20,16); g.lineTo(10,28); g.stroke(); + g.beginPath(); g.moveTo(18,4); g.lineTo(28,12); g.stroke(); + return c; + } + if (type === 'cactus') { + g.fillStyle = '#27ae60'; + g.fillRect(6, 2, 20, 28); + g.fillStyle = '#2ecc71'; + g.fillRect(2, 8, 6, 4); + g.fillRect(24, 14, 6, 4); + g.fillStyle = '#1e8449'; + g.fillRect(12, 0, 2, 30); + g.fillRect(18, 0, 2, 30); + return c; + } + if (type === 'mushroom') { + g.fillStyle = '#f5e6cc'; g.fillRect(14, 20, 4, 12); + g.fillStyle = '#e74c3c'; g.beginPath(); g.arc(16, 14, 10, Math.PI, 0); g.fill(); + g.fillStyle = '#fff'; g.fillRect(10, 10, 3, 3); g.fillRect(17, 8, 4, 3); + return c; + } + if (type === 'moss') { + g.fillStyle = '#0a6640'; + g.fillRect(0, 0, 32, 32); + g.fillStyle = '#1e8449'; + for (let i = 0; i < 6; i++) g.fillRect((Math.random()*26)|0, (Math.random()*26)|0, 4, 3); + return c; + } + if (type === 'swamp_water') { + g.fillStyle = 'rgba(100,120,40,0.6)'; + g.fillRect(0, 0, 32, 32); + g.fillStyle = 'rgba(80,100,20,0.3)'; + g.fillRect(0, 10, 32, 2); + g.fillRect(0, 22, 32, 2); + return c; + } + if (type === 'farmland') { + g.fillStyle = '#8B6914'; + g.fillRect(0, 0, 32, 32); + g.fillStyle = '#7a5c10'; + for (let i = 0; i < 4; i++) g.fillRect(0, 6+i*8, 32, 2); + g.fillStyle = '#6B4E0A'; + g.fillRect(8, 2, 2, 28); + g.fillRect(18, 2, 2, 28); + return c; + } + if (type === 'dead_bush') { + g.fillStyle = '#b2bec3'; + g.fillRect(12, 16, 2, 16); + g.fillRect(8, 14, 8, 2); + g.fillRect(16, 12, 8, 2); + g.fillRect(6, 18, 4, 2); + return c; + } + if (type === 'spruce_leaves') { + g.fillStyle = '#0a6640'; + g.fillRect(0, 0, 32, 32); + g.fillStyle = '#0d7a4d'; + for (let i = 0; i < 5; i++) g.fillRect((Math.random()*24)|0, (Math.random()*24)|0, 6, 4); + return c; + } + // CROP STAGES + if (type.startsWith('wheat_stage') || type.startsWith('carrot_stage') || type.startsWith('potato_stage')) { + const st = parseInt(type.charAt(type.length-1)); + const colors = type.startsWith('wheat') ? ['#a8e6a0','#7dcea0','#b8d730','#f1c40f'] : + type.startsWith('carrot') ? ['#a8e6a0','#f0c27a','#e8a040','#e67e22'] : + ['#a8e6a0','#c8b888','#bfaa78','#dfe6e9']; + g.fillStyle = '#5d4037'; + g.fillRect(15, 18, 2, 14); + if (st >= 1) { + g.fillStyle = colors[st]; + g.fillRect(10, 8 + (3-st)*3, 12, 10); + } else { + g.fillStyle = '#a8e6a0'; + g.fillRect(14, 22, 4, 4); + } + return c; + } + + g.fillStyle = t.c || '#000'; + g.fillRect(0,0,32,32); + + g.fillStyle = 'rgba(0,0,0,0.10)'; + for (let i=0;i<6;i++) g.fillRect((Math.random()*28)|0, (Math.random()*28)|0, 4,4); + + if (type.endsWith('_ore') || type==='coal') { + g.fillStyle = 'rgba(0,0,0,0.35)'; + for (let i=0;i<4;i++) g.fillRect((Math.random()*24)|0, (Math.random()*24)|0, 6,6); + } + return c; + } + Object.keys(BLOCKS).forEach(k => tex[k] = makeTex(k)); + + // Мир-хранилище + const grid = new Map(); // key "gx,gy" => {gx,gy,t, ...} + const blocks = []; // для рендера/перебора видимых + function k(gx,gy){ return gx+','+gy; } + function getBlock(gx,gy){ return grid.get(k(gx,gy)); } + function hasBlock(gx,gy){ return grid.has(k(gx,gy)); } + function isSolid(gx,gy){ + const b = getBlock(gx,gy); + if(!b || b.dead) return false; + const def = BLOCKS[b.t]; + return !!def.solid && !def.fluid && !def.decor; + } + function setBlock(gx,gy,t, isPlayerPlaced = false){ + const key = k(gx,gy); + if(grid.has(key)) return false; + const b = { gx, gy, t, dead:false, active:false, fuse:0 }; + grid.set(key, b); + blocks.push(b); + + // Отслеживаем блоки, установленные игроком + if(isPlayerPlaced){ + placedBlocks.push({gx, gy, t}); + } + + return true; + } + function removeBlock(gx,gy){ + const key = k(gx,gy); + const b = grid.get(key); + if(!b) return null; + if(BLOCKS[b.t].unbreakable) return null; + grid.delete(key); + b.dead = true; + + // Отслеживаем удалённые блоки + const wasPlayerPlaced = placedBlocks.some(pb => pb.gx === gx && pb.gy === gy); + if(wasPlayerPlaced){ + // Удаляем из placedBlocks + placedBlocks = placedBlocks.filter(pb => !(pb.gx === gx && pb.gy === gy)); + } else { + // Это природный блок - добавляем в removedBlocks + removedBlocks.push({gx, gy}); + } + + return b; + } + + // Физика жидкости + const waterUpdateQueue = new Set(); + let waterUpdateTimer = 0; + const WATER_UPDATE_INTERVAL = 0.05; // Обновляем воду каждые 0.05 секунды + + function updateWaterPhysics(dt){ + waterUpdateTimer += dt; + if(waterUpdateTimer < WATER_UPDATE_INTERVAL) return; + waterUpdateTimer = 0; + + // Ограничиваем количество водных блоков для обработки (оптимизация) + const MAX_WATER_BLOCKS_PER_UPDATE = 50; + let processedCount = 0; + + // Собираем только видимые водные блоки в очередь (оптимизация) + waterUpdateQueue.clear(); + const minGX = Math.floor(camX/TILE) - 10; + const maxGX = Math.floor((camX+W)/TILE) + 10; + const minGY = Math.floor(camY/TILE) - 10; + const maxGY = Math.floor((camY+H)/TILE) + 10; + + for(const b of blocks){ + if(processedCount >= MAX_WATER_BLOCKS_PER_UPDATE) break; + if(!b.dead && b.t === 'water' && + b.gx >= minGX && b.gx <= maxGX && + b.gy >= minGY && b.gy <= maxGY){ + waterUpdateQueue.add(k(b.gx, b.gy)); + processedCount++; + } + } + + // Обновляем воду с ограничением глубины распространения + const processed = new Set(); + const toAdd = []; + const MAX_WATER_DEPTH = 20; // Максимальная глубина распространения воды + + for(const key of waterUpdateQueue){ + if(processed.has(key)) continue; + const b = grid.get(key); + if(!b || b.dead) continue; + processed.add(key); + + const gx = b.gx; + const gy = b.gy; + + // Проверяем глубину - не распространяем воду слишком глубоко + if(gy > SEA_GY + MAX_WATER_DEPTH) continue; + + // Проверяем, можно ли воде упасть вниз + const belowKey = k(gx, gy + 1); + const below = grid.get(belowKey); + + // Внизу пусто - вода создаёт новый блок внизу (но не удаляется сверху) + if(!below || below.dead){ + // Ограничиваем создание новых водных блоков + if(toAdd.length < 20){ // Максимум 20 новых блоков за обновление + toAdd.push({gx, gy: gy + 1, t: 'water'}); + processed.add(belowKey); + } + continue; + } + + // Если внизу не вода и не твёрдый блок - вода может течь вниз + if(!isSolid(gx, gy + 1) && below && below.t !== 'water'){ + if(toAdd.length < 20){ + toAdd.push({gx, gy: gy + 1, t: 'water'}); + processed.add(belowKey); + } + continue; + } + + // Если внизу твёрдый блок или вода - вода растекается горизонтально + // Проверяем левую сторону + const leftKey = k(gx - 1, gy); + const left = grid.get(leftKey); + if(!left || left.dead){ + if(toAdd.length < 20){ + toAdd.push({gx: gx - 1, gy, t: 'water'}); + processed.add(leftKey); + } + continue; + } + + // Проверяем правую сторону + const rightKey = k(gx + 1, gy); + const right = grid.get(rightKey); + if(!right || right.dead){ + if(toAdd.length < 20){ + toAdd.push({gx: gx + 1, gy, t: 'water'}); + processed.add(rightKey); + } + continue; + } + } + + // Применяем изменения (только добавляем новые блоки) + for(const newData of toAdd){ + const key = k(newData.gx, newData.gy); + if(!grid.has(key)){ + const b = { + gx: newData.gx, + gy: newData.gy, + t: newData.t, + dead: false, + active: false, + fuse: 0 + }; + grid.set(key, b); + blocks.push(b); + } + } + + // Очищаем мёртвые блоки из массива + for(let i = blocks.length - 1; i >= 0; i--){ + if(blocks[i].dead){ + blocks.splice(i, 1); + } + } + } + + // Инвентарь + const inv = { + dirt:6, stone:0, sand:0, gravel:0, clay:0, + wood:0, planks:0, ladder:0, leaves:0, coal:0, + copper_ore:0, iron_ore:0, gold_ore:0, diamond_ore:0, + brick:0, glass:0, + tnt:1, campfire:0, torch:0, + meat:0, cooked:0, arrow:0, + wood_pickaxe:0, stone_pickaxe:0, iron_pickaxe:0, + wood_sword:0, stone_sword:0, iron_sword:0, + iron_armor:0, gold_armor:0, + bow:0, furnace:0, + bed:0, boat:0, + iron_ingot:0, gold_ingot:0, copper_ingot:0, + diamond_pickaxe:0, diamond_sword:0, hoe:0, + wheat:0, bread:0, carrot:0, potato:0, baked_potato:0, + scorpion_stinger:0, polar_fur:0, slime_ball:0, eagle_feather:0, + snow:0, ice:0, cactus:0, mushroom:0, moss:0, farmland:0, + spruce_leaves:0, dead_bush:0, + wheat_stage0:0, carrot_stage0:0, potato_stage0:0 + }; + let selected = 'dirt'; + + // Прочность инструментов: Map<"tooltype_id", {current, max}> + // При крафте инструмента создаём запись с max durability + const toolDurability = new Map(); + + function addTool(type) { + const def = TOOLS[type]; + if (!def) return; + const id = `${type}_${Date.now()}_${Math.random().toString(36).slice(2,6)}`; + toolDurability.set(id, { type, current: def.durability, max: def.durability }); + return id; + } + + function getToolDurability(id) { + return toolDurability.get(id); + } + + // Найти лучший инструмент данного типа в инвентаре + function findBestTool(toolType) { + if (inv[toolType] <= 0) return null; + // Возвращаем первый попавшийся — упрощённо + return toolType; + } + + // Использовать инструмент (уменьшить прочность). Возвращает true если сломался + function useTool(toolType) { + // Ищем любой инструмент этого типа с прочностью + for (const [id, dur] of toolDurability) { + if (dur.type === toolType) { + dur.current--; + if (dur.current <= 0) { + toolDurability.delete(id); + inv[toolType]--; + rebuildHotbar(); + return true; // сломался + } + return false; + } + } + return false; + } + + const RECIPES = [ + { out:'planks', qty:4, cost:{ wood:1 }, requiredLevel:1 }, + { out:'ladder', qty:3, cost:{ planks:7 }, requiredLevel:1 }, + { out:'torch', qty:2, cost:{ coal:1, planks:1 }, requiredLevel:1 }, + { out:'glass', qty:1, cost:{ sand:3 }, requiredLevel:1 }, + { out:'brick', qty:1, cost:{ stone:2, clay:1 }, requiredLevel:1 }, + { out:'campfire', qty:1, cost:{ wood:1, coal:1 }, requiredLevel:1 }, + { out:'tnt', qty:1, cost:{ sand:2, coal:1 }, requiredLevel:8 }, + { out:'bed', qty:1, cost:{ wood: 3, planks: 3 }, requiredLevel:1 }, + { out:'boat', qty:1, cost:{ wood: 5 }, requiredLevel:2 }, + { out:'wood_pickaxe', qty:1, cost:{ wood: 3, planks: 2 }, requiredLevel:1 }, + { out:'stone_pickaxe', qty:1, cost:{ wood: 1, stone: 3 }, requiredLevel:2 }, + { out:'iron_pickaxe', qty:1, cost:{ wood: 1, iron_ore: 2 }, requiredLevel:3 }, + { out:'wood_sword', qty:1, cost:{ wood: 2, planks: 1 }, requiredLevel:1 }, + { out:'stone_sword', qty:1, cost:{ wood: 1, stone: 2 }, requiredLevel:2 }, + { out:'iron_sword', qty:1, cost:{ wood: 1, iron_ore: 1 }, requiredLevel:3 }, + { out:'iron_armor', qty:1, cost:{ iron_ore: 5 }, requiredLevel:5 }, + { out:'gold_armor', qty:1, cost:{ gold_ore: 8 }, requiredLevel:6 }, + { out:'furnace', qty:1, cost:{ stone: 8 }, requiredLevel:3 }, + { out:'bow', qty:1, cost:{ wood: 3, planks: 2 }, requiredLevel:4 }, + { out:'arrow', qty:4, cost:{ stone: 1, wood: 1 }, requiredLevel:1 }, + // === NEW RECIPES === + { out:'bread', qty:1, cost:{ wheat: 3 }, requiredLevel:1 }, + { out:'diamond_pickaxe', qty:1, cost:{ wood: 1, diamond_ore: 2 }, requiredLevel:7 }, + { out:'diamond_sword', qty:1, cost:{ wood: 1, diamond_ore: 2 }, requiredLevel:7 }, + { out:'hoe', qty:1, cost:{ wood: 2, planks: 1 }, requiredLevel:1 }, + { out:'flag', qty:1, cost:{ planks: 5, iron_ore: 1 }, requiredLevel:2 } + ]; + + // Рецепты печи (обжиг) + const SMELTING_RECIPES = [ + { in:'sand', qty:1, out:'glass', outQty:1, time:3 }, // песок → стекло + { in:'clay', qty:1, out:'brick', outQty:1, time:3 }, // глина → кирпич + { in:'iron_ore', qty:1, out:'iron_ingot', outQty:1, time:5 }, // железо → слиток + { in:'gold_ore', qty:1, out:'gold_ingot', outQty:1, time:5 }, // золото → слиток + { in:'copper_ore', qty:1, out:'copper_ingot', outQty:1, time:4 }, // медь → слиток + { in:'meat', qty:1, out:'cooked', outQty:1, time:2 }, // сырое мясо → жареное + { in:'cobblestone', qty:1, out:'stone', outQty:1, time:2 }, // булыжник → камень + { in:'potato', qty:1, out:'baked_potato', outQty:1, time:2 } // картофель → печёная картошка + ]; + + // Новые предметы от обжига + ITEMS.iron_ingot = { n:'Железный слиток', icon:'🔩' }; + ITEMS.gold_ingot = { n:'Золотой слиток', icon:'🪙' }; + ITEMS.copper_ingot = { n:'Медный слиток', icon:'🟤' }; + ITEMS.diamond_pickaxe = { n:'Алмазная кирка', icon:'⛏️', durability:500, miningPower:5 }; + ITEMS.diamond_sword = { n:'Алмазный меч', icon:'⚔️', durability:400, damage:18 }; + ITEMS.hoe = { n:'Мотыга', icon:'🔨', durability:80, tillTo:'farmland' }; + + // Активные печи: Map ключа блока → { recipe, progress, totalTime } + const activeFurnaces = new Map(); + + // UI + const hpEl = document.getElementById('hp'); + const foodEl = document.getElementById('food'); + const tempEl = document.getElementById("temp"); + const sxEl = document.getElementById('sx'); + const syEl = document.getElementById('sy'); + const todEl = document.getElementById('tod'); + const worldIdEl = document.getElementById('worldId'); + // Toast уведомление + function showToast(msg, duration) { + duration = duration || 1800; + const t = document.createElement('div'); + t.textContent = msg; + t.style.cssText = 'position:fixed;bottom:80px;left:50%;transform:translateX(-50%);background:rgba(0,0,0,0.85);color:#2ecc71;padding:10px 24px;border-radius:10px;font:bold 16px Arial,sans-serif;z-index:99999;pointer-events:none;transition:opacity 0.4s;'; + document.body.appendChild(t); + setTimeout(() => { t.style.opacity = '0'; setTimeout(() => t.remove(), 400); }, duration); + } + // Клик на worldId → копировать код мира + toast + worldIdEl.addEventListener('click', () => { + const code = worldId || ''; + if (!code) return; + const text = code; // копируем только код, не URL + if (navigator.clipboard && navigator.clipboard.writeText) { + navigator.clipboard.writeText(text).then(() => showToast('📋 Скопировано: ' + code)).catch(() => showToast(code)); + } else { + // fallback + const ta = document.createElement('textarea'); + ta.value = text; ta.style.position = 'fixed'; ta.style.opacity = '0'; + document.body.appendChild(ta); ta.select(); + try { document.execCommand('copy'); showToast('📋 Скопировано: ' + code); } catch(e) { showToast(code); } + ta.remove(); + } + }); + const playerCountEl = document.getElementById('playerCount'); + const hotbarEl = document.getElementById('hotbar'); + const craftPanel = document.getElementById('craftPanel'); + const recipesEl = document.getElementById('recipes'); + const deathEl = document.getElementById('death'); + const inventoryPanel = document.getElementById('inventoryPanel'); + const inventoryGrid = document.getElementById('inventoryGrid'); + + // ==================== МИНИКАРТА ==================== + const minimapWrap = document.getElementById('minimapWrap'); + const minimapCanvas = document.getElementById('minimap'); + const minimapCtx = minimapCanvas.getContext('2d'); + let minimapOpen = false; + + document.getElementById('mapToggle').onclick = () => { + playSound('click'); + minimapOpen = !minimapOpen; + minimapWrap.style.display = minimapOpen ? 'block' : 'none'; + }; + + // Цвета блоков для миникарты (по 1 пикселю на блок) + const MINIMAP_COLORS = { + grass: '#4a8c2a', dirt: '#6b3410', stone: '#6a6a6a', sand: '#d4b84a', + gravel: '#888', clay: '#5a9ad4', wood: '#a63d00', planks: '#c46a10', + leaves: '#2a8a3a', glass: '#aaddee', water: '#2980b9', coal: '#1a1a2a', + copper_ore: '#a05535', iron_ore: '#b0b0b0', gold_ore: '#d4a017', + diamond_ore: '#0090d0', brick: '#8a2010', tnt: '#c02020', + campfire: '#d08020', torch: '#d0a020', bedrock: '#1a1a1a', + flower: '#d03050', bed: '#c03060', ladder: '#a04000', boat: '#6b3410', + snow: '#ecf0f1', ice: '#74b9ff', cactus: '#27ae60', mushroom: '#e74c3c', + moss: '#0a6640', swamp_water: '#687828', farmland: '#8B6914', + dead_bush: '#b2bec3', spruce_leaves: '#0a6640', + wheat_stage0: '#a8e6a0', wheat_stage1: '#7dcea0', wheat_stage2: '#b8d730', wheat_stage3: '#f1c40f', + carrot_stage0: '#a8e6a0', carrot_stage1: '#f0c27a', carrot_stage2: '#e8a040', carrot_stage3: '#e67e22', + potato_stage0: '#a8e6a0', potato_stage1: '#c8b888', potato_stage2: '#bfaa78', potato_stage3: '#dfe6e9' + }; + + function renderMinimap() { + if (!minimapOpen) return; + const mW = minimapCanvas.width; + const mH = minimapCanvas.height; + const scale = 2; // пикселей на блок + + // Область карты — центрирована на игроке + const pGX = Math.floor(player.x / TILE); + const biome = getCachedBiome(pGX); + const pGY = Math.floor(player.y / TILE); + const viewW = Math.floor(mW / scale); + const viewH = Math.floor(mH / scale); + const startGX = pGX - Math.floor(viewW / 2); + const startGY = pGY - Math.floor(viewH / 2); + + // Очищаем + minimapCtx.fillStyle = isNight() ? '#070816' : '#87CEEB'; + minimapCtx.fillRect(0, 0, mW, mH); + + // Рисуем блоки + const imgData = minimapCtx.createImageData(mW, mH); + const data = imgData.data; + + for (let dx = 0; dx < viewW; dx++) { + for (let dy = 0; dy < viewH; dy++) { + const gx = startGX + dx; + const gy = startGY + dy; + const b = getBlock(gx, gy); + if (!b || b.dead || b.t === 'air') continue; + + const color = MINIMAP_COLORS[b.t]; + if (!color) continue; + + // Парсим hex цвет + const r = parseInt(color.slice(1,3), 16); + const g = parseInt(color.slice(3,5), 16); + const bl = parseInt(color.slice(5,7), 16); + + // Заполняем scale x scale пикселей + for (let sx = 0; sx < scale; sx++) { + for (let sy = 0; sy < scale; sy++) { + const px = dx * scale + sx; + const py = dy * scale + sy; + if (px >= mW || py >= mH) continue; + const idx = (py * mW + px) * 4; + data[idx] = r; + data[idx+1] = g; + data[idx+2] = bl; + data[idx+3] = 255; + } + } + } + } + + minimapCtx.putImageData(imgData, 0, 0); + + // Игрок — белый пиксель по центру + minimapCtx.fillStyle = '#fff'; + minimapCtx.fillRect(Math.floor(mW/2) - 2, Math.floor(mH/2) - 2, 4, 4); + + // Другие игроки — жёлтые точки + for (const [sid, p] of otherPlayers) { + const dx = Math.floor(p.x / TILE) - startGX; + const dy = Math.floor(p.y / TILE) - startGY; + if (dx >= 0 && dx < viewW && dy >= 0 && dy < viewH) { + minimapCtx.fillStyle = '#f1c40f'; + minimapCtx.fillRect(dx * scale - 1, dy * scale - 1, 3, 3); + } + } + + // Мобы — красные (враждебные) / зелёные (животные) + const allMobsForMap = getAllMobs(); + for (const m of allMobsForMap) { + const dx = Math.floor(m.x / TILE) - startGX; + const dy = Math.floor(m.y / TILE) - startGY; + if (dx >= 0 && dx < viewW && dy >= 0 && dy < viewH) { + const hostile = m.kind === 'zombie' || m.kind === 'creeper' || m.kind === 'skeleton'; + minimapCtx.fillStyle = hostile ? '#e74c3c' : '#2ecc71'; + minimapCtx.fillRect(dx * scale, dy * scale, 2, 2); + } + } + } + + // ==================== ПЕЧЬ (ОБЖИГ) ==================== + const furnacePanel = document.getElementById('furnacePanel'); + const furnaceContent = document.getElementById('furnaceContent'); + let currentFurnaceKey = null; // "gx,gy" текущей открытой печи + + document.getElementById('furnaceClose').onclick = () => { + furnacePanel.style.display = 'none'; + currentFurnaceKey = null; + }; + + function openFurnaceUI(gx, gy) { + currentFurnaceKey = `${gx},${gy}`; + furnacePanel.style.display = 'block'; + renderFurnaceUI(); + } + + function renderFurnaceUI() { + if (!currentFurnaceKey) return; + + // Проверяем что печь всё ещё существует + const [fgx, fgy] = currentFurnaceKey.split(',').map(Number); + const fb = getBlock(fgx, fgy); + if (!fb || fb.t !== 'furnace') { + furnacePanel.style.display = 'none'; + currentFurnaceKey = null; + return; + } + + // Текущий процесс обжига + const active = activeFurnaces.get(currentFurnaceKey); + + let html = '
'; + + // Доступные рецепты — показываем только те, для которых есть ресурсы + for (let i = 0; i < SMELTING_RECIPES.length; i++) { + const recipe = SMELTING_RECIPES[i]; + const haveCount = inv[recipe.in] || 0; + const canSmelt = haveCount >= recipe.qty; + + // Иконка результата + const outDef = BLOCKS[recipe.out]; + const outItem = ITEMS[recipe.out]; + const iconStr = outItem ? outItem.icon : (outDef ? '🧱' : '❓'); + const nameStr = outItem ? outItem.n : (outDef ? outDef.n : recipe.out); + const inItem = ITEMS[recipe.in]; + const inDef = BLOCKS[recipe.in]; + const inName = inItem ? inItem.n : (inDef ? inDef.n : recipe.in); + + html += `
`; + html += `
${iconStr}
`; + html += `
`; + html += `
${nameStr}
`; + html += `
${inName} x${recipe.qty} (есть: ${haveCount}) • ${recipe.time}с
`; + html += `
`; + html += ``; + html += `
`; + } + + // Текущий прогресс + if (active) { + const pct = Math.min(100, Math.floor((active.progress / active.recipe.time) * 100)); + html += `
`; + html += `
🔥 Обжиг: ${pct}%
`; + html += `
`; + html += `
`; + html += `
`; + } + + html += '
'; + furnaceContent.innerHTML = html; + } + + // Глобальная функция для кнопки обжига + window._smelt = (recipeIdx) => { + if (!currentFurnaceKey) return; + const recipe = SMELTING_RECIPES[recipeIdx]; + if ((inv[recipe.in] || 0) < recipe.qty) return; + + // Уже обжигаем в этой печи? + if (activeFurnaces.has(currentFurnaceKey)) return; + + // Забираем ресурсы + inv[recipe.in] -= recipe.qty; + + // Запускаем обжиг + activeFurnaces.set(currentFurnaceKey, { + recipe: recipe, + progress: 0 + }); + + playSound('fire'); + rebuildHotbar(); + renderFurnaceUI(); + }; + + // Тик печей — вызывается в главном цикле + function tickFurnaces(dt) { + for (const [key, furnace] of activeFurnaces) { + furnace.progress += dt; + if (furnace.progress >= furnace.recipe.time) { + // Обжиг завершён — выдаём результат + const outItem = furnace.recipe.out; + if (ITEMS[outItem]) { + inv[outItem] = (inv[outItem] || 0) + furnace.recipe.outQty; + } else if (BLOCKS[outItem]) { + inv[outItem] = (inv[outItem] || 0) + furnace.recipe.outQty; + } + playSound('stone_build'); + activeFurnaces.delete(key); + + // Если эта печь открыта — обновляем UI + if (key === currentFurnaceKey) { + renderFurnaceUI(); + } + } + } + } + + + + // ==================== ГОЛОСОВОЙ ЧАТ v3 ==================== + // ==================== ГОЛОСОВОЙ ЧАТ v3 ==================== +// Per-speaker architecture, AudioWorklet, VAD, Opus/PCM, spatial audio +// Replaces lines 1449-1665 in game.js + + let voiceSocket = null; + let voiceStream = null; + let audioCtx = null; + let voiceActive = false; + let voiceMode = 'near'; + const VOICE_SERVER = 'https://voicegrech.mkn8n.ru'; + + // Voice config + const VC = { + sampleRate: 16000, // 16kHz — sufficient for voice, saves 33% bandwidth + frameMs: 20, // 20ms frames = 320 samples @ 16kHz + samplesPerFrame: 320, // 16000 * 0.02 + vadThreshold: 0.0005, // RMS threshold for voice detection + vadHangover: 5, // 100ms hangover after speech ends + jbufTargetMs: 80, // Target jitter: 80ms (was 200ms) + jbufMinMs: 40, + jbufMaxMs: 200, + maxSpeakers: 6, + voiceRadius: 600, + opusBitrate: 16000, + posUpdateMs: 200, // Update position every 200ms (was 500ms) + }; + + // Codec state + let voiceCodec = 'pcm'; // 'opus' or 'pcm' + let voiceEncoder = null; // WebCodecs AudioEncoder + let voiceSeq = 0; + let voiceTimestamp = 0; + let wasSpeaking = false; + let silenceFrames = 0; + let captureNode = null; + let playbackNode = null; + + // Per-speaker map + const remoteSpeakers = new Map(); // socketId → { jitterBuf, lastFrame, gain, panner, lowpass, decoder, codec, x, y, name, mode, speaking, lastActive } + + // ==================== WORKLET CODE (inline strings) ==================== + + const voiceCaptureWorkletCode = ` +class VoiceCaptureProcessor extends AudioWorkletProcessor { + constructor() { + super(); + this._buf = new Float32Array(320); // 20ms @ 16kHz + this._pos = 0; + this._speaking = false; + this._silenceFrames = 0; + this._hangover = 5; // 100ms + this._vadThreshold = 0.0005; + this._lastRms = 0; + } + process(inputs) { + const input = inputs[0]; + if (!input || !input[0]) return true; + const ch = input[0]; + let i = 0; + while (i < ch.length) { + const rem = this._buf.length - this._pos; + const n = Math.min(rem, ch.length - i); + this._buf.set(ch.subarray(i, i + n), this._pos); + this._pos += n; + i += n; + if (this._pos >= this._buf.length) { + this._processFrame(); + this._pos = 0; + } + } + return true; + } + _processFrame() { + let sum = 0; + for (let i = 0; i < this._buf.length; i++) sum += this._buf[i] * this._buf[i]; + const rms = Math.sqrt(sum / this._buf.length); + this._lastRms = rms; + + if (rms > this._vadThreshold) { + this._speaking = true; + this._silenceFrames = 0; + } else { + this._silenceFrames++; + if (this._silenceFrames > this._hangover) this._speaking = false; + } + + this.port.postMessage({ + type: 'frame', + samples: this._buf.slice(), + speaking: this._speaking, + rms: rms + }); + } +} +registerProcessor('voice-capture', VoiceCaptureProcessor); +`; + + const voicePlaybackWorkletCode = ` +class VoicePlaybackProcessor extends AudioWorkletProcessor { + constructor() { + super(); + this.speakers = new Map(); // id → { ringBuf, readPos, writePos, ready, gain, pan, lastSample, active } + this.RING_SIZE = 48000; // 3 seconds @ 16kHz + this.port.onmessage = (e) => { + const d = e.data; + if (d.type === 'addSpeaker') { + this.speakers.set(d.id, { + ringBuf: new Float32Array(this.RING_SIZE), + readPos: 0, writePos: 0, ready: 0, + gain: d.gain || 1, pan: d.pan || 0, + lastSample: 0, active: false, + jbufTarget: 320 * 4, // ~80ms in samples + fadeOut: 0 + }); + } else if (d.type === 'removeSpeaker') { + this.speakers.delete(d.id); + } else if (d.type === 'pushFrames') { + const sp = this.speakers.get(d.id); + if (!sp) return; + const frames = d.samples; // Float32Array + for (let i = 0; i < frames.length; i++) { + sp.ringBuf[sp.writePos] = frames[i]; + sp.writePos = (sp.writePos + 1) % this.RING_SIZE; + if (sp.ready < this.RING_SIZE) sp.ready++; + } + sp.active = true; + sp.fadeOut = 0; + } else if (d.type === 'updateSpatial') { + const sp = this.speakers.get(d.id); + if (sp) { + sp.gain = d.gain; + sp.pan = d.pan; + } + } + }; + } + process(inputs, outputs) { + const output = outputs[0]; + if (!output || !output[0]) return true; + const left = output[0]; + const right = output[1] || output[0]; // mono fallback + + // Clear output + for (let i = 0; i < left.length; i++) { left[i] = 0; right[i] = 0; } + + for (const [id, sp] of this.speakers) { + if (sp.ready < 1 && sp.active) { + // Fade out over ~20ms (128 samples) + sp.fadeOut++; + if (sp.fadeOut > 128) { sp.active = false; continue; } + const fade = 1 - (sp.fadeOut / 128); + const g = sp.gain * fade; + const lg = g * Math.cos((sp.pan + 1) * Math.PI / 4); + const rg = g * Math.sin((sp.pan + 1) * Math.PI / 4); + // Repeat last sample with fade + for (let i = 0; i < left.length; i++) { + left[i] += sp.lastSample * lg; + right[i] += sp.lastSample * rg; + } + continue; + } + if (!sp.active && sp.ready < sp.jbufTarget) continue; // Wait for jitter buffer to fill + if (!sp.active && sp.ready >= sp.jbufTarget) sp.active = true; + if (!sp.active) continue; + + sp.fadeOut = 0; + const g = sp.gain; + // Constant-power pan law + const lg = g * Math.cos((sp.pan + 1) * Math.PI / 4); + const rg = g * Math.sin((sp.pan + 1) * Math.PI / 4); + + for (let i = 0; i < left.length; i++) { + if (sp.ready > 0) { + const s = sp.ringBuf[sp.readPos]; + sp.lastSample = s; + left[i] += s * lg; + right[i] += s * rg; + sp.readPos = (sp.readPos + 1) % this.RING_SIZE; + sp.ready--; + } else { + // Underrun — fade from last sample + sp.lastSample *= 0.85; + left[i] += sp.lastSample * lg; + right[i] += sp.lastSample * rg; + } + } + } + return true; + } +} +registerProcessor('voice-playback', VoicePlaybackProcessor); +`; + + // ==================== Opus ENCODE/DECODE ==================== + + async function initVoiceEncoder() { + if (false && 'AudioEncoder' in window) { + try { + // Check if Opus is supported + const support = await AudioEncoder.isConfigSupported({ + codec: 'opus', + sampleRate: VC.sampleRate, + numberOfChannels: 1, + bitrate: VC.opusBitrate + }); + if (!support.supported) throw new Error('Opus not supported'); + + voiceEncoder = new AudioEncoder({ + output: (chunk) => { + // chunk: EncodedAudioChunk with Opus data + const data = new Uint8Array(chunk.byteLength); + chunk.copyTo(data); + // Send as binary frame via Socket.IO + console.log('[voice] TX Opus chunk, seq:', voiceSeq, 'size:', data.buffer.byteLength); + voiceSocket.emit('voice_data', { + codec: 'opus', + data: data.buffer, + seq: voiceSeq++, + ts: chunk.timestamp, + speaking: true + }); + }, + error: (e) => { + console.error('[voice] encoder error:', e); + voiceCodec = 'pcm'; + voiceEncoder = null; + } + }); + + await voiceEncoder.configure({ + codec: 'opus', + sampleRate: VC.sampleRate, + numberOfChannels: 1, + bitrate: VC.opusBitrate + }); + + voiceCodec = 'opus'; + console.log('[voice] WebCodecs Opus encoder initialized @', VC.opusBitrate, 'bps'); + return; + } catch (e) { + console.warn('[voice] WebCodecs Opus not available, PCM fallback:', e.message); + } + } + voiceCodec = 'pcm'; + console.log('[voice] Using PCM @', VC.sampleRate, 'Hz'); + } + + async function initDecoderForSpeaker(speakerId, codec) { + const sp = remoteSpeakers.get(speakerId); + if (!sp) return; + + if (codec === 'opus' && 'AudioDecoder' in window) { + try { + const decoder = new AudioDecoder({ + output: (audioData) => { + const samples = new Float32Array(audioData.numberOfFrames); + audioData.copyTo(samples, { planeIndex: 0 }); + audioData.close(); + // Push decoded PCM to worklet + if (playbackNode) { + playbackNode.port.postMessage({ + type: 'pushFrames', + id: speakerId, + samples: samples + }); + } + }, + error: (e) => { + console.error('[voice] decoder error for', speakerId, e); + sp.codec = 'pcm'; // Fallback to PCM + } + }); + + await decoder.configure({ + codec: 'opus', + sampleRate: VC.sampleRate, + numberOfChannels: 1 + }); + + sp.decoder = decoder; + sp.codec = 'opus'; + console.log('[voice] Opus decoder initialized for', speakerId); + } catch (e) { + console.warn('[voice] Opus decoder failed, PCM fallback:', e.message); + sp.codec = 'pcm'; + } + } else { + sp.codec = 'pcm'; + } + } + + // ==================== RemoteSpeaker helper ==================== + + function createRemoteSpeaker(socketId, name, codec) { + const sp = { + id: socketId, + name: name || '???', + codec: codec || 'pcm', + decoder: null, + x: 0, y: 0, + mode: 'near', + speaking: false, + lastActive: Date.now(), + // Audio nodes per speaker (managed on main thread for smooth ramps) + gainNode: audioCtx.createGain(), + pannerNode: audioCtx.createStereoPanner(), + lowpassNode: audioCtx.createBiquadFilter(), + }; + // lowpass for distance muffling + sp.lowpassNode.type = 'lowpass'; + sp.lowpassNode.frequency.value = 4000; + sp.lowpassNode.Q.value = 0.7; + // Connect: lowpass → panner → gain → (connected to mixer later) + sp.lowpassNode.connect(sp.pannerNode); + sp.pannerNode.connect(sp.gainNode); + sp.gainNode.gain.value = 1.0; // Start with volume (worklet needs non-zero gain) + + remoteSpeakers.set(socketId, sp); + // Register speaker in playback worklet + if (playbackNode) { + playbackNode.port.postMessage({ type: 'addSpeaker', id: socketId, gain: 1.0, pan: 0 }); + console.log('[voice] addSpeaker posted to worklet, id:', socketId?.substring(0,8), 'gain:', sp.gainNode.gain.value); + } + initDecoderForSpeaker(socketId, codec); + return sp; + } + + function removeRemoteSpeaker(socketId) { + const sp = remoteSpeakers.get(socketId); + if (!sp) return; + try { sp.gainNode.disconnect(); } catch(e) {} + try { sp.pannerNode.disconnect(); } catch(e) {} + try { sp.lowpassNode.disconnect(); } catch(e) {} + if (sp.decoder) { try { sp.decoder.close(); } catch(e) {} } + remoteSpeakers.delete(socketId); + if (playbackNode) { + playbackNode.port.postMessage({ type: 'removeSpeaker', id: socketId }); + } + } + + function updateSpeakerSpatial(sp) { + if (!audioCtx) return; + // Calculate distance-based audio + const dx = sp.x - player.x; + const dy = sp.y - player.y; + const dist = Math.sqrt(dx * dx + dy * dy); + + const now = audioCtx.currentTime; + const rampTime = 0.05; // 50ms smooth ramp + + if (sp.mode === 'world' && voiceMode === 'world') { + // World mode: full volume, no panning, no distance filter + sp.gainNode.gain.cancelScheduledValues(now); + sp.gainNode.gain.linearRampToValueAtTime(1.0, now + rampTime); + sp.pannerNode.pan.cancelScheduledValues(now); + sp.pannerNode.pan.linearRampToValueAtTime(0, now + rampTime); + sp.lowpassNode.frequency.cancelScheduledValues(now); + sp.lowpassNode.frequency.linearRampToValueAtTime(4000, now + rampTime); + } else if (dist > VC.voiceRadius) { + // Out of range + sp.gainNode.gain.cancelScheduledValues(now); + sp.gainNode.gain.linearRampToValueAtTime(0, now + rampTime); + } else { + // Near mode with spatial audio + const volume = 1 / (1 + dist / 150); // Perceptual falloff + const pan = Math.max(-1, Math.min(1, dx / 300)); // Stereo pan based on X + const cutoff = 4000 - (3800 * (dist / VC.voiceRadius)); // Muffle at distance + + sp.gainNode.gain.cancelScheduledValues(now); + sp.gainNode.gain.linearRampToValueAtTime(volume, now + rampTime); + sp.pannerNode.pan.cancelScheduledValues(now); + sp.pannerNode.pan.linearRampToValueAtTime(pan, now + rampTime); + sp.lowpassNode.frequency.cancelScheduledValues(now); + sp.lowpassNode.frequency.linearRampToValueAtTime(Math.max(200, cutoff), now + rampTime); + } + + // Update worklet spatial params + if (playbackNode) { + const currentGain = sp.gainNode.gain.value; + const currentPan = sp.pannerNode.pan.value; + if (currentGain > 0.01) console.log('[voice] updateSpatial, id:', sp.id?.substring(0,8), 'gain:', currentGain.toFixed(3), 'pan:', currentPan.toFixed(3)); + playbackNode.port.postMessage({ + type: 'updateSpatial', + id: sp.id, + gain: currentGain, + pan: currentPan + }); + } + } + + // ==================== UI ==================== + + const voiceBtn = document.createElement('div'); + voiceBtn.innerHTML = '🎤/'; + voiceBtn.title = 'Голосовой чат (выкл)'; + voiceBtn.style.cssText = 'position:absolute;top:74px;right:130px;width:52px;height:52px;border-radius:12px;background:#555;z-index:200;display:flex;align-items:center;justify-content:center;font-size:24px;cursor:pointer;border:2px solid rgba(255,255,255,0.9);box-shadow:0 4px 0 rgba(0,0,0,0.5);pointer-events:auto;'; + document.querySelector('.ui').appendChild(voiceBtn); + + const voiceModeBtn = document.createElement('div'); + voiceModeBtn.innerHTML = '📢'; + voiceModeBtn.title = 'Режим: рядом (600px)'; + voiceModeBtn.style.cssText = 'position:absolute;top:74px;right:190px;width:48px;height:52px;border-radius:12px;background:#3498db;z-index:200;display:flex;align-items:center;justify-content:center;font-size:20px;cursor:pointer;border:2px solid rgba(255,255,255,0.7);box-shadow:0 4px 0 rgba(0,0,0,0.5);pointer-events:auto;color:#fff;font-weight:bold;'; + document.querySelector('.ui').appendChild(voiceModeBtn); + voiceModeBtn.onclick = () => { + if (voiceMode === 'near') { + voiceMode = 'world'; + voiceModeBtn.innerHTML = '🌍'; + voiceModeBtn.title = 'Режим: весь мир'; + voiceModeBtn.style.background = '#e67e22'; + } else { + voiceMode = 'near'; + voiceModeBtn.innerHTML = '📢'; + voiceModeBtn.title = 'Режим: рядом (600px)'; + voiceModeBtn.style.background = '#3498db'; + } + if (voiceSocket && voiceSocket.connected) { + voiceSocket.emit('voice_mode', { mode: voiceMode }); + } + // Update spatial for all speakers + for (const [id, sp] of remoteSpeakers) updateSpeakerSpatial(sp); + }; + + // Speaking indicators per players + const speakingIndicator = document.createElement('div'); + speakingIndicator.style.cssText = 'position:absolute;top:130px;right:10px;z-index:200;display:none;background:rgba(0,0,0,0.7);color:#2ecc71;padding:4px 8px;border-radius:6px;font-size:12px;max-width:200px;line-height:1.4;'; + document.querySelector('.ui').appendChild(speakingIndicator); + let speakingTimeouts = new Map(); // socketId → timeout + + // Codec indicator + const codecIndicator = document.createElement('div'); + codecIndicator.style.cssText = 'position:absolute;top:180px;right:10px;z-index:200;font-size:10px;color:rgba(255,255,255,0.5);pointer-events:none;'; + codecIndicator.textContent = ''; + document.querySelector('.ui').appendChild(codecIndicator); + + // ==================== VOICE ON/OFF ==================== + + voiceBtn.onclick = async () => { + if (voiceActive) { + // === DISABLE === + voiceActive = false; + voiceBtn.innerHTML = '🎤/'; + voiceBtn.style.background = '#555'; + codecIndicator.textContent = ''; + + // Clean up capture + if (captureNode) { captureNode.disconnect(); captureNode = null; } + if (voiceStream) { voiceStream.getTracks().forEach(t => t.stop()); voiceStream = null; } + + // Clean up playback + if (playbackNode) { playbackNode.disconnect(); playbackNode = null; } + + // Clean up per-speaker nodes + for (const [id, sp] of remoteSpeakers) { + try { sp.gainNode.disconnect(); } catch(e) {} + try { sp.pannerNode.disconnect(); } catch(e) {} + try { sp.lowpassNode.disconnect(); } catch(e) {} + if (sp.decoder) { try { sp.decoder.close(); } catch(e) {} } + } + remoteSpeakers.clear(); + + // Clean up encoder + if (voiceEncoder) { try { voiceEncoder.close(); } catch(e) {} voiceEncoder = null; } + + if (audioCtx) { audioCtx.close(); audioCtx = null; } + if (voiceSocket) { voiceSocket.disconnect(); voiceSocket = null; } + speakingIndicator.style.display = 'none'; + return; + } + + // === ENABLE === + try { + voiceStream = await navigator.mediaDevices.getUserMedia({ + audio: { + echoCancellation: true, + noiseSuppression: true, + autoGainControl: true, + echoCancellationType: 'browser', + noiseSuppressionType: 'browser', + sampleRate: { ideal: VC.sampleRate }, + channelCount: { ideal: 1 } + } + }); + + audioCtx = new AudioContext({ sampleRate: VC.sampleRate }); + if (audioCtx.state === 'suspended') await audioCtx.resume(); + console.log('[voice] AudioContext:', audioCtx.state, 'sampleRate:', audioCtx.sampleRate); + + // Register worklets via Blob URLs + const captureURL = URL.createObjectURL(new Blob([voiceCaptureWorkletCode], { type: 'application/javascript' })); + const playbackURL = URL.createObjectURL(new Blob([voicePlaybackWorkletCode], { type: 'application/javascript' })); + + await audioCtx.audioWorklet.addModule(captureURL); + await audioCtx.audioWorklet.addModule(playbackURL); + URL.revokeObjectURL(captureURL); + URL.revokeObjectURL(playbackURL); + console.log('[voice] AudioWorklets registered'); + + // Connect mic → capture worklet + const micSource = audioCtx.createMediaStreamSource(voiceStream); + captureNode = new AudioWorkletNode(audioCtx, 'voice-capture'); + micSource.connect(captureNode); + // Do NOT connect captureNode to destination — we don't hear ourselves + + // Connect playback worklet → per-speaker gain nodes → destination + playbackNode = new AudioWorkletNode(audioCtx, 'voice-playback', { numberOfOutputs: 1, outputChannelCount: [2] }); + playbackNode.connect(audioCtx.destination); + // Per-speaker nodes will connect between playback worklet output and destination + // Actually: playback worklet mixes internally → stereo output → destination + // Per-speaker Web Audio nodes (lowpass, pan, gain) used for spatial UPDATES only (values sent to worklet via messages) + // The actual mixing happens inside the worklet + + // Connect to voice server FIRST so capture frames have a socket + voiceSocket = io(VOICE_SERVER, { transports: ['websocket'] }); + + // Handle capture frames + voiceSeq = 0; + voiceTimestamp = 0; + wasSpeaking = false; + voiceActive = true; // Enable capture BEFORE onmessage handler + let _frameCount = 0; + captureNode.port.onmessage = (e) => { + const { type, samples, speaking, rms } = e.data; + if (type !== 'frame') return; + _frameCount++; + if (_frameCount <= 5 || _frameCount % 100 === 0) { + console.log('[voice] capture frame #', _frameCount, 'rms:', rms?.toFixed(4), 'speaking:', speaking, 'voiceActive:', voiceActive, 'socket:', !!voiceSocket, 'connected:', voiceSocket?.connected, 'codec:', voiceCodec); + } + if (!voiceActive || !voiceSocket || !voiceSocket.connected) { + + return; + } + + voiceTimestamp += VC.samplesPerFrame; // 320 samples * (1/16000) = 20ms per frame + + if (!speaking && !wasSpeaking) { + // Complete silence — don't transmit + silenceFrames++; + return; + } + + if (voiceCodec === 'opus' && voiceEncoder) { + // Encode with Opus via WebCodecs + try { + const audioData = new AudioData({ + format: 'float32-planar', + sampleRate: VC.sampleRate, + numberOfFrames: samples.length, + numberOfChannels: 1, + timestamp: voiceTimestamp * (1000000 / VC.sampleRate), // microseconds + data: samples + }); + voiceEncoder.encode(audioData); + audioData.close(); + } catch (err) { + // Fallback: send as PCM + sendPCMFrame(samples, speaking, wasSpeaking); + } + } else { + sendPCMFrame(samples, speaking, wasSpeaking); + } + + wasSpeaking = speaking; + silenceFrames = 0; + }; + + function sendPCMFrame(samples, isSpeaking, wasSp) { + const int16 = new Int16Array(samples.length); + for (let i = 0; i < samples.length; i++) { + const s = Math.max(-1, Math.min(1, samples[i])); + int16[i] = s < 0 ? s * 0x8000 : s * 0x7FFF; + } + voiceSocket.emit('voice_data', { + codec: 'pcm', + data: int16.buffer, + seq: voiceSeq++, + ts: performance.now(), + speaking: isSpeaking || wasSp + }); + } + + // Initialize encoder + await initVoiceEncoder(); + codecIndicator.textContent = voiceCodec === 'opus' ? '🔊 Opus' : '🔊 PCM'; + + // Voice socket already created above + + voiceSocket.on('connect', () => { + console.log('[voice] Connected, id:', voiceSocket.id, 'codec:', voiceCodec); + voiceSocket.emit('voice_join', { + world_id: worldId, + x: player.x, y: player.y, + name: playerName || 'Игрок', + mode: voiceMode, + codec: voiceCodec + }); + }); + + voiceSocket.on('connect_error', (err) => { + console.error('[voice] Connect error:', err.message); + }); + + voiceSocket.on('voice_in', (payload) => { + console.log('[voice] RX voice_in, codec:', payload.codec, 'dataSize:', payload.data?.byteLength || payload.data?.length || 'N/A', 'from:', payload.meta?.from?.substring(0,8)); + const { data, meta } = payload; + if (!audioCtx || audioCtx.state === 'closed') { console.warn('[voice] audioCtx missing/closed'); return; } + + let sp = remoteSpeakers.get(meta.from); + if (!sp) { + // New speaker — create per-speaker audio nodes + sp = createRemoteSpeaker(meta.from, meta.name, meta.codec || 'pcm'); + } + + // Update position + sp.x = meta.x || 0; + sp.y = meta.y || 0; + sp.mode = meta.mode || 'near'; + sp.lastActive = Date.now(); + updateSpeakerSpatial(sp); + + // Decode and push to worklet + if ((meta.codec || 'pcm') === 'opus' && sp.decoder) { + // Opus decode + try { + const uint8 = new Uint8Array(data); + const chunk = new EncodedAudioChunk({ + type: 'key', // Opus frames are self-decodable + timestamp: performance.now() * 1000, // microseconds + data: uint8 + }); + sp.decoder.decode(chunk); + } catch (err) { + // Opus decode failed, try PCM fallback + decodeAndPushPCM(sp.id, data); + } + } else { + decodeAndPushPCM(sp.id, data); + } + + // Update speaking indicator + sp.speaking = true; + speakingIndicator.style.display = 'block'; + speakingIndicator.textContent = '🔊 ' + sp.name; + clearTimeout(speakingTimeouts.get(meta.from)); + speakingTimeouts.set(meta.from, setTimeout(() => { + sp.speaking = false; + // Check if anyone is still speaking + let anyoneSpeaking = false; + for (const [, s] of remoteSpeakers) { if (s.speaking) { anyoneSpeaking = true; break; } } + if (!anyoneSpeaking) speakingIndicator.style.display = 'none'; + speakingTimeouts.delete(meta.from); + }, 1500)); + }); + + voiceSocket.on('voice_leave', (data) => { + removeRemoteSpeaker(data.id); + }); + + voiceSocket.on('disconnect', () => { + console.log('[voice] Disconnected'); + // Clear all speakers on disconnect + for (const [id] of remoteSpeakers) removeRemoteSpeaker(id); + }); + + // voiceActive already set to true above + voiceBtn.textContent = '🎤'; + voiceBtn.style.background = '#2ecc71'; + console.log('[voice] Voice chat ACTIVE, codec:', voiceCodec); + + } catch(e) { + console.error('[voice] Error:', e); + voiceBtn.style.background = '#e74c3c'; + } + }; + + // ==================== PCM decode helper ==================== + + function decodeAndPushPCM(speakerId, buffer) { + console.log('[voice] decodeAndPushPCM, id:', speakerId?.substring(0,8), 'bufSize:', buffer?.byteLength || buffer?.length || 'N/A'); + const int16 = new Int16Array(buffer); + const float32 = new Float32Array(int16.length); + for (let i = 0; i < int16.length; i++) { + float32[i] = int16[i] / (int16[i] < 0 ? 0x8000 : 0x7FFF); + } + if (playbackNode) { + playbackNode.port.postMessage({ + type: 'pushFrames', + id: speakerId, + samples: float32 + }); + } + } + + // ==================== Voice position update ==================== + + let voicePosT = 0; + + // Клик на часы для включения ночи + todEl.style.cursor = 'pointer'; + todEl.onclick = () => { + playSound('click'); + worldTime = 0.6; // Устанавливаем ночь + isNightTime = true; + }; + + function rebuildHotbar(){ + hotbarEl.innerHTML=''; + + // Показываем последние 5 выбранных предметов (если они есть в инвентаре) + const items = recentItems.filter(id => inv[id] > 0).slice(0, 5); + + for(const id of items){ + const s = document.createElement('div'); + s.className = 'slot'+(id===selected?' sel':''); + if(BLOCKS[id]) { + s.style.backgroundImage = `url(${tex[id].toDataURL()})`; + s.style.backgroundSize = 'cover'; + } else if(ITEMS[id]) { + s.textContent = ITEMS[id].icon; + } else if(TOOLS[id]) { + s.textContent = TOOLS[id].icon; + } else if(id === 'iron_armor') { + s.textContent = '🛡️'; + s.style.background = 'linear-gradient(135deg, #95a5a6 0%, #7f8c8d 100%)'; + } + const c = document.createElement('div'); + c.className='count'; + c.textContent = inv[id]; + s.appendChild(c); + s.onclick = () => { + playSound('click'); // Звук клика по инвентарю + if(selected === id) { + // Повторный клик — снимаем выбор, возвращаем к первому блоку + selected = recentItems.find(rid => BLOCKS[rid] && rid !== id) || recentItems[0] || 'dirt'; + } else { + selected = id; + // Обновляем список последних предметов + recentItems = recentItems.filter(item => item !== id); // Удаляем если уже есть + recentItems.unshift(id); // Добавляем в начало + recentItems = recentItems.slice(0, 5); // Оставляем только 5 + } + rebuildHotbar(); + }; + + // Показываем индикатор надетой брони + if(id === 'iron_armor' && player.equippedArmor === 'iron_armor') { + const equipped = document.createElement('div'); + equipped.className = 'equipped-indicator'; + equipped.textContent = '✓'; + s.appendChild(equipped); + } + + // Durability bar для инструментов + if(TOOLS[id] && inv[id] > 0) { + // Находим текущую прочность + let curDur = 0, maxDur = TOOLS[id].durability; + for (const [tid, dur] of toolDurability) { + if (dur.type === id) { + curDur = dur.current; + maxDur = dur.max; + break; + } + } + if (maxDur > 0) { + const bar = document.createElement('div'); + bar.style.cssText = `position:absolute;bottom:0;left:0;right:0;height:3px;background:#333;border-radius:0 0 6px 6px;overflow:hidden;`; + const fill = document.createElement('div'); + const pct = curDur / maxDur; + const color = pct > 0.5 ? '#2ecc71' : pct > 0.25 ? '#f39c12' : '#e74c3c'; + fill.style.cssText = `width:${pct*100}%;height:100%;background:${color};`; + bar.appendChild(fill); + s.appendChild(bar); + } + } + hotbarEl.appendChild(s); + } + } + + function renderInventory() { + inventoryGrid.innerHTML = ''; + + // Создаём сетку инвентаря 7x3 + const items = Object.keys(inv).filter(id => inv[id] > 0); + + // Добавляем пустые слоты для полной сетки + for(let i = 0; i < 21; i++) { + const slot = document.createElement('div'); + slot.className = 'inv-slot' + (i < items.length && items[i] === selected ? ' sel' : ''); + + if(i < items.length) { + const id = items[i]; + if(BLOCKS[id]) { + slot.style.backgroundImage = `url(${tex[id].toDataURL()})`; + slot.style.backgroundSize = 'cover'; + } else if(ITEMS[id]) { + slot.textContent = ITEMS[id].icon; + } else if(TOOLS[id]) { + slot.textContent = TOOLS[id].icon; + } else if(id === 'iron_armor') { + slot.textContent = '🛡️'; + slot.style.background = 'linear-gradient(135deg, #95a5a6 0%, #7f8c8d 100%)'; + } + + const count = document.createElement('div'); + count.className = 'inv-count'; + count.textContent = inv[id]; + slot.appendChild(count); + + slot.onclick = () => { + playSound('click'); // Звук клика по инвентарю + if(selected === id) { + selected = recentItems.find(rid => BLOCKS[rid] && rid !== id) || recentItems[0] || 'dirt'; + } else { + selected = id; + recentItems = recentItems.filter(item => item !== id); + recentItems.unshift(id); + recentItems = recentItems.slice(0, 5); + } + rebuildHotbar(); + renderInventory(); + }; + + // Двойной клик для надевания брони + slot.ondblclick = () => { + if(id === 'iron_armor' && inv.iron_armor > 0) { + // Если уже надета броня - снимаем её + if(player.equippedArmor === 'iron_armor') { + player.equippedArmor = null; + player.armor = 0; + console.log('[ARMOR] Iron armor unequipped'); + } else { + // Надеваем броню + player.equippedArmor = 'iron_armor'; + player.armor = BLOCKS['iron_armor'].armor; + console.log('[ARMOR] Iron armor equipped - armor:', player.armor); + } + playSound('click'); + renderInventory(); + } + if(id === 'gold_armor' && inv.gold_armor > 0) { + if(player.equippedArmor === 'gold_armor') { + player.equippedArmor = null; + player.armor = 0; + } else { + player.equippedArmor = 'gold_armor'; + player.armor = ITEMS['gold_armor'].armor; + } + playSound('click'); + renderInventory(); + } + }; + } + + inventoryGrid.appendChild(slot); + } + } + + function canCraft(r){ + console.log('[CRAFT] Checking recipe for:', r.out, '- cost:', r.cost); + for(const res in r.cost){ + const have = inv[res] || 0; + const need = r.cost[res]; + console.log('[CRAFT] Resource:', res, '- have:', have, '- need:', need, '- can craft:', have >= need); + if(have < need) return false; + } + return true; + } + function renderCraft(){ + recipesEl.innerHTML=''; + for(const r of RECIPES){ + const row = document.createElement('div'); + row.className='recipe'; + const reqLv = r.requiredLevel || 1; + const locked = player.level < reqLv; + const icon = document.createElement('div'); + icon.className='ricon'; + // Иконка — блок, инструмент или предмет + if(tex[r.out]){ + icon.style.backgroundImage = `url(${tex[r.out].toDataURL()})`; + } else if(TOOLS[r.out]){ + icon.textContent = TOOLS[r.out].icon; + icon.style.fontSize = '24px'; + icon.style.display = 'flex'; + icon.style.alignItems = 'center'; + icon.style.justifyContent = 'center'; + } else if(ITEMS[r.out]){ + icon.textContent = ITEMS[r.out].icon; + icon.style.fontSize = '24px'; + icon.style.display = 'flex'; + icon.style.alignItems = 'center'; + icon.style.justifyContent = 'center'; + } + const info = document.createElement('div'); + info.className='rinfo'; + const nm = document.createElement('div'); + nm.className='rname'; + const itemName = BLOCKS[r.out]?.n || TOOLS[r.out]?.n || ITEMS[r.out]?.n || r.out; + nm.textContent = `${itemName} x${r.qty}` + (locked ? ` (Lv.${reqLv})` : ''); + if(locked) { nm.style.color = '#888'; nm.style.textDecoration = 'line-through'; } + const cs = document.createElement('div'); + cs.className='rcost'; + cs.textContent = Object.keys(r.cost).map(x => { + const cn = BLOCKS[x]?.n || TOOLS[x]?.n || ITEMS[x]?.n || x; + return `${cn}: ${(inv[x]||0)}/${r.cost[x]}`; + }).join(' '); + if(locked) cs.style.color = '#666'; + info.appendChild(nm); info.appendChild(cs); + const btn = document.createElement('button'); + btn.className='rcraft'; + btn.textContent='Создать'; + btn.disabled = !canCraft(r) || locked; + if(locked) btn.title = `Требуется уровень ${reqLv}`; + btn.onclick = () => { + if(!canCraft(r) || locked) return; + playSound('click'); + for(const res in r.cost) inv[res]-=r.cost[res]; + inv[r.out] = (inv[r.out]||0) + r.qty; + if(TOOLS[r.out]) addTool(r.out); + rebuildHotbar(); + renderCraft(); + }; + row.appendChild(icon); row.appendChild(info); row.appendChild(btn); + recipesEl.appendChild(row); + } + } + + let craftOpen=false; + let inventoryOpen = false; + + document.getElementById('craftBtn').onclick = () => { + playSound('click'); // Звук клика по кнопке + craftOpen = !craftOpen; + craftPanel.style.display = craftOpen ? 'block' : 'none'; + if(craftOpen) { + renderCraft(); + // Закрываем инвентарь если открыт крафт + inventoryOpen = false; + inventoryPanel.style.display = 'none'; + } + }; + document.getElementById('craftClose').onclick = () => { + playSound('click'); // Звук клика по кнопке + craftOpen = false; + craftPanel.style.display = 'none'; + }; + + // Кнопка открытия инвентаря + document.getElementById('invToggle').onclick = () => { + playSound('click'); // Звук клика по кнопке + inventoryOpen = !inventoryOpen; + inventoryPanel.style.display = inventoryOpen ? 'block' : 'none'; + if(inventoryOpen) { + renderInventory(); + // Закрываем крафт если открыт инвентарь + craftOpen = false; + craftPanel.style.display = 'none'; + } + }; + + document.getElementById('inventoryClose').onclick = () => { + playSound('click'); // Звук клика по кнопке + inventoryOpen = false; + inventoryPanel.style.display = 'none'; + }; + // Меню ⋯ (Сохранить / Новый мир / Рынок) + let dropdownOpen = false; + const menuBtn = document.getElementById('menuBtn'); + const menuDropdown = document.getElementById('menuDropdown'); + const saveItem = document.getElementById('saveItem'); + const resetItem = document.getElementById('resetItem'); + const marketItem = document.getElementById('marketItem'); + + // Убить старый onclick (предотвращает race condition) + menuBtn.onclick = null; + + // Toggle dropdown + menuBtn.addEventListener('click', (e) => { + e.stopPropagation(); + dropdownOpen = !dropdownOpen; + menuDropdown.classList.toggle('open', dropdownOpen); + }); + + // Закрытие по клику вне + document.addEventListener('click', () => { + if (dropdownOpen) { + dropdownOpen = false; + menuDropdown.classList.remove('open'); + } + }); + + // Предотвращаем закрытие при клике внутри дропдауна + menuDropdown.addEventListener('click', (e) => { + e.stopPropagation(); + }); + + // 💾 Сохранить + saveItem.addEventListener('click', () => { + playSound('click'); + saveGame(); + dropdownOpen = false; + menuDropdown.classList.remove('open'); + customAlert('Игра сохранена!'); + }); + + // 🔄 Новый мир + resetItem.addEventListener('click', () => { + dropdownOpen = false; + menuDropdown.classList.remove('open'); + customConfirm('Вы уверены, что хотите удалить сохранение и начать новую игру?', () => { + playSound('click'); + + try { + localStorage.removeItem(SAVE_KEY); + console.log('Сохранение удалено из localStorage'); + } catch (e) { + console.warn('Ошибка удаления сохранения:', e); + } + + inMemorySave = null; + worldId = Math.random().toString(36).substring(2, 10); + console.log('Новый worldId после сброса:', worldId); + + try { + const newUrl = new URL(window.location.href); + newUrl.searchParams.set('world', worldId); + if (typeof window.history !== 'undefined' && typeof window.history.replaceState === 'function') { + window.history.replaceState(null, '', newUrl.toString()); + console.log('URL обновлён:', newUrl.toString()); + } + } catch (e) { + console.error('Ошибка обновления URL:', e); + } + + location.reload(); + }); + }); + + // 🏪 Рынок + marketItem.addEventListener('click', () => { + dropdownOpen = false; + menuDropdown.classList.remove('open'); + toggleMarket(); + }); + + // Показываем пункт сохранения только если играем одни + function updateSaveButtonVisibility() { + if (isMultiplayer && otherPlayers.size > 0) { + saveItem.style.display = 'none'; + } else { + saveItem.style.display = 'block'; + } + } + + // ==================== РЫНОК ПРЕДЛОЖЕНИЙ ==================== + const marketPanel = document.getElementById('marketPanel'); + const marketClose = document.getElementById('marketClose'); + const marketContent = document.getElementById('marketContent'); + let marketOpen = false; + + function toggleMarket() { + marketOpen = !marketOpen; + marketPanel.style.display = marketOpen ? 'block' : 'none'; + if (marketOpen) renderMarket(); + } + + function closeMarket() { + marketOpen = false; + marketPanel.style.display = 'none'; + } + + function renderMarket() { + if (!socket) { + marketContent.innerHTML = '

Подключение...

'; + return; + } + // Запрос ордеров с сервера + socket.emit('market_list', {}, (orders) => { + if (!orders || !orders.length) { + marketContent.innerHTML = '

Предложений пока нет

' + + '
'; + const btn = document.getElementById('createOrderBtn'); + if (btn) btn.onclick = showCreateOrder; + return; + } + let html = '
'; + html += orders.map(o => '
' + o.offer_item + ' ×' + o.offer_qty + ' ⇄ ' + o.want_item + ' ×' + o.want_qty + '' + (o.seller||'Аноним') + '
').join(''); + marketContent.innerHTML = html; + const btn = document.getElementById('createOrderBtn'); + if (btn) btn.onclick = showCreateOrder; + }); + } + + function showCreateOrder() { + const inv = playerInventory || []; + const items = inv.filter(s => s && s.id); + marketContent.innerHTML = '

Выставить предмет

' + + '' + + '' + + '' + + '' + + '
' + + '' + + '' + + '
'; + document.getElementById('cancelOrder').onclick = () => renderMarket(); + document.getElementById('submitOrder').onclick = () => { + const offerItem = document.getElementById('offerItem').value; + const wantItem = document.getElementById('wantItem').value.trim(); + if (!offerItem || !wantItem) { customAlert('Выберите предмет и укажите что хотите'); return; } + if (socket) { socket.emit('market_create', { offer_item: offerItem, offer_qty: 1, want_item: wantItem, want_qty: 1 }); playSound('click'); setTimeout(renderMarket, 500); } + }; + } + + marketClose.onclick = () => closeMarket(); + +// Режимы + const MODES = [{id:'mine',icon:'⛏️'},{id:'build',icon:'🧱'}]; + let modeIdx=0; + const modeBtn = document.getElementById('modeBtn'); + function mode(){ return MODES[modeIdx].id; } + modeBtn.onclick = () => { + playSound('click'); // Звук клика по кнопке режима + modeIdx=(modeIdx+1)%MODES.length; modeBtn.textContent=MODES[modeIdx].icon; + }; + + // День/ночь (автоматический цикл) + let isNightTime = false; + + // Управление + const inp = { l:false, r:false, j:false, s:false }; + function bindHold(el, key){ + const down=(e)=>{ e.preventDefault(); inp[key]=true; }; + const up=(e)=>{ e.preventDefault(); inp[key]=false; }; + el.addEventListener('pointerdown', down); + el.addEventListener('pointerup', up); + el.addEventListener('pointerleave', up); + } + const leftBtn = document.getElementById('left'); + const rightBtn = document.getElementById('right'); + const jumpBtn = document.getElementById('jump'); + const downBtn = document.getElementById('down'); + + if(leftBtn) bindHold(leftBtn,'l'); + if(rightBtn) bindHold(rightBtn,'r'); + if(jumpBtn) bindHold(jumpBtn,'j'); + if(downBtn) bindHold(downBtn,'s'); + + window.addEventListener('keydown', (e)=>{ + if(e.code==='KeyA'||e.code==='ArrowLeft') inp.l=true; + if(e.code==='KeyD'||e.code==='ArrowRight') inp.r=true; + if(e.code==='Space'||e.code==='KeyW'||e.code==='ArrowUp') inp.j=true; + if(e.code==='KeyS'||e.code==='ArrowDown') inp.s=true; + }); + window.addEventListener('keyup', (e)=>{ + if(e.code==='KeyA'||e.code==='ArrowLeft') inp.l=false; + if(e.code==='KeyD'||e.code==='ArrowRight') inp.r=false; + if(e.code==='Space'||e.code==='KeyW'||e.code==='ArrowUp') inp.j=false; + if(e.code==='KeyS'||e.code==='ArrowDown') inp.s=false; + }); + + // Лодка + const boat = { + x: 0, y: 0, + w: 34, h: 34, + vx: 0, vy: 0, + active: false, + inWater: false + }; + + // Функция для расчёта урона с учётом брони + function calculateDamage(baseDamage) { + // Броня снижает урон пропорционально + // armor: 0 = без брони (100% урона) + // armor: 0.5 = железная броня (50% урона) + const reduction = player.armor; + const actualDamage = baseDamage * (1 - reduction); + console.log('[DAMAGE] Base:', baseDamage, '- Armor:', reduction, '- Actual:', actualDamage.toFixed(1)); + return actualDamage; + } + + // Игрок + const player = { + x: 6*TILE, y: 0*TILE, + w: 34, h: 34, + vx: 0, vy: 0, + grounded: false, + inWater: false, + headInWater: false, + hp: 100, + hunger: 100, + o2: 100, + invuln: 0, + slowTimer: 0, // яд скорпиона — замедление + fallStartY: 0, + lastStepTime: 0, + sleeping: false, + inBoat: false, + armor: 0, // Текущий уровень защиты (0 = без брони, 0.5 = железная броня) + equippedArmor: null, // Тип надетой брони + xp: 0, + level: 1 + }; + + // Сохраняем начальную позицию для возрождения + const spawnPoint = { x: 6*TILE, y: 0*TILE }; + + // Система дропов с мобов + const drops = []; // {x, y, vy, item, qty, age} + let levelUpPopup = null; // {text, timer} + + function xpForLevel(lv) { + if (lv <= 1) return 0; + const thresholds = [0, 50, 150, 300, 500, 800, 1200, 1700, 2300, 3000]; + if (lv - 1 < thresholds.length) return thresholds[lv - 1]; + return Math.floor(3000 + (lv - 10) * (lv - 10) * 50 + (lv - 10) * 200); + } + + function getMobLoot(kind) { + const table = { + chicken: [{item:'chicken_meat',min:1,max:2,chance:1},{item:'feather',min:0,max:1,chance:0.5}], + pig: [{item:'meat',min:1,max:2,chance:1}], + zombie: [{item:'meat',min:0,max:1,chance:0.5},{item:'iron_ingot',min:0,max:1,chance:0.3}], + skeleton: [{item:'arrow',min:2,max:4,chance:1},{item:'bone',min:0,max:2,chance:0.6},{item:'bow',min:1,max:1,chance:0.15}], + creeper: [{item:'gunpowder',min:1,max:2,chance:1}], + scorpion: [{item:'scorpion_stinger',min:0,max:1,chance:0.4}], + polar_bear:[{item:'polar_fur',min:1,max:2,chance:0.8},{item:'meat',min:1,max:2,chance:1}], + slime: [{item:'slime_ball',min:1,max:2,chance:1}], + eagle: [{item:'eagle_feather',min:1,max:2,chance:0.7}] + }; + return table[kind] || []; + } + + function getMobXP(kind) { + const xpTable = { chicken:3, pig:5, zombie:10, skeleton:12, creeper:15, scorpion:8, polar_bear:20, slime:5, eagle:15 }; + return xpTable[kind] || 0; + } + + function spawnDrops(mx, my, kind) { + const loot = getMobLoot(kind); + for (const entry of loot) { + if (Math.random() > entry.chance) continue; + const qty = entry.min + Math.floor(Math.random() * (entry.max - entry.min + 1)); + if (qty <= 0) continue; + drops.push({ + x: mx + (Math.random() - 0.5) * 20, + y: my + (Math.random() - 0.5) * 10, + vy: -1 - Math.random() * 2, + item: entry.item, + qty: qty, + age: 0, xpValue: getMobXP(kind) + }); + } + } + + const LEVEL_UNLOCKS = { + 2: 'Каменные инструменты, Лодка', + 3: 'Железные инструменты, Печь', + 4: 'Лук и стрелы', + 5: 'Железная броня', + 6: 'Золотая броня', + 7: 'Алмазные инструменты', + 8: 'TNT' + }; + + function grantXP(amount) { + player.xp += amount; + while (player.xp >= xpForLevel(player.level + 1)) { + player.level++; + const unlock = LEVEL_UNLOCKS[player.level] || ''; + levelUpPopup = { text: '⭐ Уровень ' + player.level + '!' + (unlock ? ' ' + unlock : ''), timer: 240 }; + } + } + + function pickupDrops() { + for (let i = drops.length - 1; i >= 0; i--) { + const d = drops[i]; + const dx = player.x + player.w/2 - d.x; + const dy = player.y + player.h/2 - d.y; + if (dx*dx + dy*dy < 30*30) { + if (!inv[d.item]) inv[d.item] = 0; + inv[d.item] += d.qty; + if (d.xpValue) grantXP(Math.ceil(d.xpValue * 0.3)); + drops.splice(i, 1); + rebuildHotbar(); + } + } + } + + function drawDrops(ctx) { + for (let i = drops.length - 1; i >= 0; i--) { + const d = drops[i]; + d.age++; + if (d.age > 3600) { drops.splice(i, 1); continue; } // 60 sec at 60fps + // Bounce animation + const bounce = Math.abs(Math.sin(d.age * 0.05)) * 6; + const dy = d.y - bounce; + const sx = d.x - camX; + const sy = dy - camY; + // Skip if off screen + if (sx < -40 || sx > W + 40 || sy < -40 || sy > H + 40) continue; + // Glow effect + ctx.save(); + ctx.globalAlpha = 0.3; + ctx.fillStyle = '#ffff00'; + ctx.beginPath(); + ctx.arc(sx, sy, 14, 0, Math.PI*2); + ctx.fill(); + ctx.restore(); + // Item icon + ctx.save(); + ctx.font = '16px system-ui'; + ctx.textAlign = 'center'; + ctx.textBaseline = 'middle'; + const itemDef = ITEMS[d.item]; + const icon = itemDef ? itemDef.icon : '🎁'; + const label = d.qty > 1 ? icon + '×' + d.qty : icon; + ctx.fillText(label, sx, sy); + ctx.restore(); + } + } + + function drawLevelUpPopup(ctx) { + if (!levelUpPopup) return; + levelUpPopup.timer--; + if (levelUpPopup.timer <= 0) { levelUpPopup = null; return; } + const alpha = Math.min(1, levelUpPopup.timer / 60); + ctx.save(); + ctx.globalAlpha = alpha; + ctx.fillStyle = '#FFD700'; + ctx.font = 'bold 36px system-ui'; + ctx.textAlign = 'center'; + ctx.textBaseline = 'middle'; + ctx.strokeStyle = '#000'; + ctx.lineWidth = 3; + ctx.strokeText(levelUpPopup.text, W/2, H/2 - 60); + ctx.fillText(levelUpPopup.text, W/2, H/2 - 60); + ctx.restore(); + } + + // Система сохранения игры (localStorage + in-memory fallback) + const SAVE_KEY = 'minegrechka_save'; + let db = null; // Оставляем для совместимости, но не используем + let inMemorySave = null; // Запасное сохранение в памяти + + // Инициализация (localStorage + in-memory fallback) + function initDB(){ + return new Promise((resolve) => { + console.log('Используем localStorage для сохранений (sandbox режим)'); + resolve(null); + }); + } + + // Детерминированный генератор псевдослучайных чисел на основе seed + function seededRandom(gx, gy){ + const n = Math.sin(gx * 12.9898 + gy * 78.233 + worldSeed * 0.1) * 43758.5453; + return n - Math.floor(n); + } + + function saveGame(){ + const saveData = { + version: 2, + worldSeed: worldSeed, + player: { + x: player.x, + y: player.y, + hp: player.hp, + hunger: player.hunger, + o2: player.o2, + xp: player.xp, + level: player.level + }, + temperature: player.temperature, + inventory: inv, + time: worldTime, + isNight: isNightTime, + // Сохраняем только изменения + placedBlocks: placedBlocks.slice(), + removedBlocks: removedBlocks.slice() + }; + + const saveSize = JSON.stringify(saveData).length; + console.log('Сохранение: player HP:', player.hp, 'hunger:', player.hunger, 'o2:', player.o2); + + // Пробуем сохранить в localStorage (основной метод для персистентности) + try { + localStorage.setItem(SAVE_KEY, JSON.stringify(saveData)); + console.log(`Игра сохранена в localStorage (размер: ${saveSize} байт)`); + // TG: also save to server + if (tgUser && tgUser.id) { + try { + fetch(SERVER_URL + '/api/tg/save', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ tg_id: tgUser.id, save_data: JSON.stringify(saveData), world_id: worldId, player_name: playerName }) + }).catch(e2 => console.warn('[TG] Save to server failed:', e2)); + } catch(tgE) {} + } + } catch(e){ + console.warn('Ошибка сохранения в localStorage, используем только in-memory:', e); + + // Если localStorage недоступен, используем in-memory fallback + inMemorySave = saveData; + console.log(`Игра сохранена в памяти (размер: ${saveSize} байт)`); + } + } + + function loadGame(){ + return new Promise(async (resolve, reject) => { + // TG: try server save first + if (tgUser && tgUser.id && tgSaveLoaded) { + try { + const resp = await fetch(SERVER_URL + '/api/tg/save?tg_id=' + tgUser.id); + const data = await resp.json(); + if (data.ok && data.save_data) { + const parsed = JSON.parse(data.save_data); + console.log('[TG] Loaded save from server, HP:', parsed.player?.hp); + tgSaveLoaded = parsed; // store for later use + resolve(parsed); + return; + } + } catch(e) { console.warn('[TG] Load from server failed:', e); } + } + // Пробуем localStorage + try { + const localSave = localStorage.getItem(SAVE_KEY); + if(localSave){ + const parsed = JSON.parse(localSave); + console.log('Загружено из localStorage, player HP:', parsed.player?.hp); + resolve(parsed); + return; + } + } catch(e){ + console.warn('Ошибка доступа к localStorage:', e); + } + + // Если localStorage недоступен, используем in-memory сохранение + if(inMemorySave){ + console.log('Загружено из in-memory сохранения, player HP:', inMemorySave.player?.hp); + resolve(inMemorySave); + return; + } + + console.log('Сохранение не найдено'); + resolve(null); + }); + } + + // Миграция с версии 1 на версию 2 + function migrateV1toV2(saveData){ + console.log('Миграция сохранения с версии 1 на версию 2...'); + + // Сохраняем seed из текущей игры (так как v1 его не хранил) + saveData.worldSeed = worldSeed; + + // Инициализируем массивы изменений + saveData.placedBlocks = []; + saveData.removedBlocks = []; + + // Для v1 нам нужно сравнить сгенерированные блоки с тем, что должно быть по seed + // Это сложно сделать без полной перегенерации, поэтому для v1 сохраняем только seed + // и при загрузке просто перегенерируем мир + + // Удаляем старые данные + delete saveData.generatedBlocks; + + saveData.version = 2; + console.log('Миграция завершена'); + } + + async function applySave(saveData){ + if(!saveData) return; + + console.log('=== applySave START ==='); + console.log('player HP before applySave:', player.hp); + console.log('saveData.player.hp:', saveData.player?.hp); + + // Миграция версий + if(saveData.version === 1){ + player.temperature = saveData.player.temperature !== undefined ? saveData.player.temperature : 15; + migrateV1toV2(saveData); + } + + // Восстанавливаем seed + if(saveData.worldSeed !== undefined){ + worldSeed = saveData.worldSeed; + } + + // Восстанавливаем игрока + if(saveData.player){ + player.x = saveData.player.x; + player.y = saveData.player.y; + player.hunger = saveData.player.hunger; + player.o2 = saveData.player.o2; + player.xp = saveData.player.xp || 0; + player.level = saveData.player.level || 1; + + // Обновляем spawnPoint на позицию из сохранения + spawnPoint.x = player.x; + spawnPoint.y = player.y; + + // Проверяем HP из сохранения - если <= 0, устанавливаем 100 + const savedHP = saveData.player.hp; + console.log('Saved HP from file:', savedHP); + if(savedHP <= 0){ + console.log('WARNING: Saved HP is <= 0, setting to 100!'); + player.hp = 100; + } else { + player.hp = savedHP; + } + console.log('player HP after restore:', player.hp); + console.log('spawnPoint обновлён из сохранения: x=', spawnPoint.x, 'y=', spawnPoint.y); + } else { + console.log('No player data in save, setting default HP: 100'); + player.hp = 100; + } + + console.log('=== applySave END ==='); + + // Восстанавливаем инвентарь + if(saveData.inventory){ + for(const key in saveData.inventory){ + inv[key] = saveData.inventory[key]; + } + } + + // Восстанавливаем время + if(saveData.time !== undefined){ + worldTime = saveData.time; + } + + // Восстанавливаем день/ночь + if(saveData.isNight !== undefined){ + isNightTime = saveData.isNight; + } + + // Перегенерируем мир по seed + regenerateVisibleChunks(); + + // Применяем изменения (только для v2) + if(saveData.version === 2){ + // Применяем блоки, установленные игроком + for(const block of saveData.placedBlocks){ + setBlock(block.gx, block.gy, block.t, true); + } + + // Применяем удалённые блоки + for(const block of saveData.removedBlocks){ + removeBlock(block.gx, block.gy); + } + + // Восстанавливаем массивы изменений + placedBlocks = saveData.placedBlocks || []; + removedBlocks = saveData.removedBlocks || []; + } + + rebuildHotbar(); + console.log('Игра загружена'); + } + + // Камера (двухосевая) + let camX=0, camY=0; + + // День/ночь + let worldTime=0; + const DAY_LEN=360; // замедлил смену дня/ночи в 3 раза + + // Облака + const clouds = Array.from({length:10}, ()=>({ + x: Math.random()*2000, + y: -200 - Math.random()*260, // выше экрана, потому что мир по Y теперь двигается + w: 80+Math.random()*120, + s: 12+Math.random()*20 + })); + + // Дождь + let isRaining = false; + let rainIntensity = 0; // 0..1 + const snowflakes = []; // снежинки для тундры + const MAX_SNOWFLAKES = 150; + const raindrops = []; + const MAX_RAINDROPS = 200; + + // ==================== РОСТ КУЛЬТУР ==================== + const growthTimers = {}; // ключ: "gx,gy" → { stage:0-3, growTimer:X } + + // Старая функция заменена — теперь погода через биомы (см. weatherState выше) + // updateWeather(dt) вызывается из основного цикла — биом-зависимая + + // Интеграция: определяем isRaining из weatherState для визуализации + function syncWeatherVisual() { + isRaining = (weatherState.type === 'rain' || weatherState.type === 'storm'); + if (weatherState.type === 'clear') { + rainIntensity *= 0.95; // плавное затухание + if (rainIntensity < 0.01) rainIntensity = 0; + } + } + + function updateRain(dt) { + syncWeatherVisual(); + // Дождь + if ((weatherState.type === 'rain' || weatherState.type === 'storm') && rainIntensity < weatherState.intensity * 0.6) { + rainIntensity += dt * 0.3; + } else if (weatherState.type === 'clear' || weatherState.type === 'snow' || weatherState.type === 'fog') { + rainIntensity = Math.max(0, rainIntensity - dt * 0.5); + } + if (rainIntensity < 0.01) { + raindrops.length = 0; + } else { + const spawnRate = Math.floor(rainIntensity * 80 * dt); + for (let i = 0; i < spawnRate && raindrops.length < MAX_RAINDROPS; i++) { + raindrops.push({ + x: camX + Math.random() * W, + y: camY - 20, + vy: 400 + Math.random() * 200, + len: 8 + Math.random() * 12 + }); + } + for (let i = raindrops.length - 1; i >= 0; i--) { + const d = raindrops[i]; + d.y += d.vy * dt; + d.x -= 30 * dt; + if (d.y > camY + H + 20) raindrops.splice(i, 1); + } + } + // Снег + if (weatherState.type === 'snow') { + const spawnRate = Math.floor(weatherState.intensity * 30 * dt); + for (let i = 0; i < spawnRate && snowflakes.length < MAX_SNOWFLAKES; i++) { + snowflakes.push({ + x: camX + Math.random() * W, + y: camY - 10, + vy: 40 + Math.random() * 60, + vx: (Math.random() - 0.5) * 30, + size: 2 + Math.random() * 3 + }); + } + } + for (let i = snowflakes.length - 1; i >= 0; i--) { + const s = snowflakes[i]; + s.y += s.vy * dt; + s.x += s.vx * dt + Math.sin(s.y * 0.02) * 10 * dt; + if (s.y > camY + H + 20 || weatherState.type !== 'snow') snowflakes.splice(i, 1); + } + } + + function drawRain() { + // Дождь + if (raindrops.length > 0) { + ctx.save(); + ctx.strokeStyle = (weatherState.type === 'storm') ? 'rgba(174,194,224,0.7)' : 'rgba(174,194,224,0.5)'; + ctx.lineWidth = 1.5; + ctx.beginPath(); + for (const d of raindrops) { + ctx.moveTo(d.x, d.y); + ctx.lineTo(d.x - 3, d.y + d.len); + } + ctx.stroke(); + ctx.restore(); + } + // Снег + if (snowflakes.length > 0) { + ctx.save(); + ctx.fillStyle = 'rgba(255,255,255,0.8)'; + for (const s of snowflakes) { + ctx.beginPath(); + ctx.arc(s.x, s.y, s.size, 0, Math.PI * 2); + ctx.fill(); + } + ctx.restore(); + } + // Гроза — вспышка + if (weatherState.type === 'storm' && Math.random() < 0.003) { + ctx.save(); + ctx.fillStyle = 'rgba(255,255,255,0.3)'; + ctx.fillRect(camX, camY, W, H); + ctx.restore(); + } + // Туман — серый оверлей + if (weatherState.type === 'fog') { + ctx.save(); + ctx.fillStyle = 'rgba(200,200,200,0.4)'; + ctx.fillRect(camX, camY, W, H); + ctx.restore(); + } + } + + // Частицы (взрыв) + const parts = []; + function spawnExplosion(x,y, power){ + const n = Math.floor(16 + power*10); + for(let i=0;i 100){ + playSound('splash'); + } + } + + function resolveY(e){ + // Всегда пересчитываем grounded (не держим "липким") + e.grounded = false; + + const x1 = e.x + 2; + const x2 = e.x + e.w - 2; + + // Проверяем, находится ли игрок на лестнице (по центру) + const cx = e.x + e.w/2; + const cy = e.y + e.h/2; + const gx = Math.floor(cx / TILE); + const gy = Math.floor(cy / TILE); + const b = getBlock(gx, gy); + const onLadder = b && BLOCKS[b.t] && BLOCKS[b.t].climbable; + + // Если на лестнице - можно двигаться вверх/вниз + if(onLadder){ + e.grounded = true; + + // Если нажимаем прыжок на лестнице - поднимаемся + if(inp.j){ + e.vy = -200; + } + // Если нажимаем вниз - спускаемся + else if(inp.s){ + e.vy = 100; + } + // Иначе - остаёмся на месте (нет гравитации) + else { + e.vy = 0; + } + return; + } + + // Проверяем, можно ли запрыгнуть на лестницу рядом (слева или справа) + const leftGX = Math.floor((e.x - 4) / TILE); + const rightGX = Math.floor((e.x + e.w + 4) / TILE); + const playerGY = Math.floor((e.y + e.h/2) / TILE); + + const leftBlock = getBlock(leftGX, playerGY); + const rightBlock = getBlock(rightGX, playerGY); + const leftLadder = leftBlock && BLOCKS[leftBlock.t] && BLOCKS[leftBlock.t].climbable; + const rightLadder = rightBlock && BLOCKS[rightBlock.t] && BLOCKS[rightBlock.t].climbable; + + // Если рядом есть лестница и игрок прыгает - притягиваем к ней + if((leftLadder || rightLadder) && inp.j && e.vy < 0){ + // Перемещаем игрока к лестнице + if(leftLadder && e.x > leftGX * TILE + TILE/2){ + e.x = leftGX * TILE + TILE/2 - e.w/2; + } else if(rightLadder && e.x < rightGX * TILE + TILE/2){ + e.x = rightGX * TILE + TILE/2 - e.w/2; + } + e.grounded = true; + e.vy = -150; // меньший прыжок при запрыгивании на лестницу + return; + } + + // 1) Если движемся вниз ИЛИ стоим (vy >= 0) — проверяем опору под ногами + // Берём точку на 1px ниже стопы, чтобы не зависеть от ровного попадания в границу тайла. + if(e.vy >= 0){ + const probeY = e.y + e.h + 1; + const gy = Math.floor(probeY / TILE); + const gxA = Math.floor(x1 / TILE); + const gxB = Math.floor(x2 / TILE); + + if(isSolid(gxA, gy) || isSolid(gxB, gy)){ + e.y = gy * TILE - e.h; // прижимаем к полу + e.vy = 0; + e.grounded = true; + + // урон от падения — только игроку и только не в воде + if(e === player && !player.inWater){ + const fallTiles = (e.y - e.fallStartY) / TILE; + if(fallTiles > 6) { + const damage = calculateDamage((fallTiles - 6) * 10); + player.hp -= damage; + } + } + if(e === player) e.fallStartY = e.y; + } + } + + // 2) Проверка на возможность запрыгнуть на блок, если игрок рядом с ним + if(e.vy < 0 && e === player){ + const gy = Math.floor(e.y / TILE); + const gxA = Math.floor(x1 / TILE); + const gxB = Math.floor(x2 / TILE); + + // Проверяем, есть ли блок рядом с игроком + if((isSolid(gxA, gy) || isSolid(gxB, gy)) && !isSolid(gxA, gy - 1) && !isSolid(gxB, gy - 1)){ + e.y = (gy + 1) * TILE; + e.vy = 0; + e.grounded = true; + if(e === player) e.fallStartY = e.y; + console.log("Jumped onto block!"); + } + } + + // 2) Если движемся вверх — проверяем потолок + if(e.vy < 0){ + const gy = Math.floor(e.y / TILE); + const gxA = Math.floor(x1 / TILE); + const gxB = Math.floor(x2 / TILE); + if(isSolid(gxA, gy) || isSolid(gxB, gy)){ + e.y = (gy + 1) * TILE; + e.vy = 0; + } + } + } + + function resolveX(e){ + const y1 = e.y + 2; + const y2 = e.y + e.h - 2; + + // Проверяем, находимся ли мы на лестнице + const cx = e.x + e.w/2; + const cy = e.y + e.h/2; + const gx = Math.floor(cx / TILE); + const gy = Math.floor(cy / TILE); + const b = getBlock(gx, gy); + const onLadder = b && BLOCKS[b.t] && BLOCKS[b.t].climbable; + + if(e.vx > 0){ + const gx = Math.floor((e.x + e.w)/TILE); + const gyA = Math.floor(y1/TILE); + const gyB = Math.floor(y2/TILE); + const solidA = isSolid(gx, gyA); + const solidB = isSolid(gx, gyB); + + if(solidA || solidB){ + e.x = gx*TILE - e.w; + e.vx = 0; + } + } else if(e.vx < 0){ + const gx = Math.floor(e.x/TILE); + const gyA = Math.floor(y1/TILE); + const gyB = Math.floor(y2/TILE); + const solidA = isSolid(gx, gyA); + const solidB = isSolid(gx, gyB); + + if(solidA || solidB){ + e.x = (gx+1)*TILE; + e.vx = 0; + } + } + } + + // TNT логика: цепь + усиление + const activeTNT = new Set(); // хранит key + function activateTNT(b, fuse=3.2){ + if(b.dead) return; + if(b.active) return; + b.active=true; + b.fuse=fuse; + activeTNT.add(k(b.gx,b.gy)); + } + + function explodeAt(gx,gy){ + const center = getBlock(gx,gy); + if(!center) return; + + // усиление: считаем сколько TNT рядом (в радиусе 2) и активируем их «почти сразу» + let bonus = 0; + for(let x=gx-2; x<=gx+2; x++){ + for(let y=gy-2; y<=gy+2; y++){ + const b = getBlock(x,y); + if(b && !b.dead && b.t==='tnt' && !(x===gx && y===gy)){ + bonus += 0.8; + activateTNT(b, 0.12); // цепь + } + } + } + + const power = 1 + bonus; // условная мощность + const radius = 3.2 + bonus*0.7; // радиус разрушения в тайлах + const dmgR = 150 + bonus*60; // радиус урона в пикселях + + removeBlock(gx,gy); + activeTNT.delete(k(gx,gy)); + playSound('explode1'); // Звук взрыва + spawnExplosion(gx*TILE + TILE/2, gy*TILE + TILE/2, power); + + for(let x=Math.floor(gx-radius); x<=Math.ceil(gx+radius); x++){ + for(let y=Math.floor(gy-radius); y<=Math.ceil(gy+radius); y++){ + const d = Math.hypot(x-gx, y-gy); + if(d > radius) continue; + const b = getBlock(x,y); + if(!b || b.dead) continue; + if(BLOCKS[b.t].fluid) continue; + if(BLOCKS[b.t].unbreakable) continue; + if(b.t==='tnt') { activateTNT(b, 0.12); continue; } + removeBlock(x,y); + if(inv[b.t] !== undefined && Math.random()<0.20) inv[b.t]++; // немного дропа + } + } + rebuildHotbar(); + + // урон + const hurt = (e)=>{ + const dx = (e.x+e.w/2) - (gx*TILE+TILE/2); + const dy = (e.y+e.h/2) - (gy*TILE+TILE/2); + const dist = Math.hypot(dx,dy); + if(dist < dmgR){ + const dmg = (dmgR - dist) * 0.06 * power; + if(e === player) { + const actualDamage = calculateDamage(dmg); + player.hp -= actualDamage; + } else { + e.hp -= dmg; + } + e.vx += (dx/dist || 0) * 600; + e.vy -= 320; + } + }; + hurt(player); + mobs.forEach(hurt); + } + + // Взаимодействие мышь/тап + const mouse = { x:null, y:null }; + canvas.addEventListener('pointermove', (e)=>{ + const r = canvas.getBoundingClientRect(); + mouse.x = e.clientX - r.left; + mouse.y = e.clientY - r.top; + }); + + canvas.addEventListener('pointerdown', (e)=>{ + if(craftOpen) return; + if(player.hp<=0) return; + + const r = canvas.getBoundingClientRect(); + const sx = e.clientX - r.left; + const sy = e.clientY - r.top; + + const wx = sx + camX; + const wy = sy + camY; + + const gx = Math.floor(wx / TILE); + const gy = Math.floor(wy / TILE); + + // Пробуждение: клик по любой кровати когда спишь + const b = getBlock(gx,gy); + if(player.sleeping && b && b.t==='bed'){ + player.sleeping = false; + return; + } + + if(player.sleeping) return; // Нельзя взаимодействовать во время сна + + // Клик по печи — открываем панель обжига + if(b && b.t === 'furnace' && mode() === 'mine'){ + openFurnaceUI(gx, gy); + return; + } + + // клик по мобу (в режиме mine) + if(mode()==='mine'){ + // Check all mobs (local + server-spawned) using getAllMobs + const allClickMobs = getAllMobs(); + for(let i = allClickMobs.length - 1; i >= 0; i--){ + const m = allClickMobs[i]; + if(m.dead) continue; + if(wx>=m.x && wx<=m.x+m.w && wy>=m.y && wy<=m.y+m.h){ + let dmg = 1; + const swordTypes = ['iron_sword','stone_sword','wood_sword']; + for (const st of swordTypes) { + if (inv[st] > 0) { dmg = TOOLS[st].damage || 3; useTool(st); break; } + } + m.hp -= dmg; + m.vx += (m.x - player.x) * 2; + m.vy -= 200; + playSound('attack'); + // Server-spawned mob: emit hurt to server for relay, handle death locally + if(m.id !== undefined && isMultiplayer){ + socket.emit('mob_hurt', { id: m.id, dmg }); + if(m.hp <= 0){ + socket.emit('mob_died', { id: m.id }); + } + } + if(m.hp<=0){ + if(m.kind === 'chicken') playSound('hurt_chicken'); + spawnDrops(m.x + m.w/2, m.y + m.h/2, m.kind); + // Remove from the correct array + if(m.id !== undefined){ + serverMobs.delete(m.id); + } else { + const localIdx = mobs.indexOf(m); + if(localIdx >= 0) mobs.splice(localIdx, 1); + } + rebuildHotbar(); + } + return; + } + } + } + + // Лук — стреляем стрелой + if(selected === 'bow' && inv.bow > 0 && inv.arrow > 0){ + const aimX = wx - player.x - player.w/2; + const aimY = wy - player.y - player.h/2; + const angle = Math.atan2(aimY, aimX); + projectiles.push({ + x: player.x + player.w/2, + y: player.y + player.h/3, + vx: Math.cos(angle) * 550, + vy: Math.sin(angle) * 550, + dmg: 10, + owner: 'player', + life: 4 + }); + inv.arrow--; + useTool('bow'); + playSound('hit1'); + rebuildHotbar(); + return; + } + + // еда (предмет) + if(ITEMS[selected] && inv[selected]>0){ + const it = ITEMS[selected]; + if(player.hp < 100 || player.hunger < 100){ + playSound('eat1'); + player.hunger = Math.min(100, player.hunger + it.food); + player.hp = Math.min(100, player.hp + 15); + inv[selected]--; + rebuildHotbar(); + } + return; + } + + //Посадка семян на грядку + if(b && b.t === 'farmland' && mode()==='build'){ + const seedMap = { wheat: 'wheat_stage0', carrot: 'carrot_stage0', potato: 'potato_stage0' }; + if(seedMap[selected] && inv[selected] > 0){ + inv[selected]--; + const cropType = seedMap[selected]; + setBlock(gx, gy-1, cropType); + growthTimers[gx+','+(gy-1)] = { stage:0, growTimer: 10+Math.random()*5 }; + sendBlockChange(gx, gy-1, cropType, 'add'); + playSound('cloth1'); + rebuildHotbar(); + return; + } + } + + // Мотыга — превращает grass/dirt в farmland (в любом режиме) + if(selected === 'hoe' && inv.hoe > 0 && b){ + if(b.t === 'grass' || b.t === 'dirt'){ + setBlock(gx, gy, 'farmland'); + sendBlockChange(gx, gy, b.t, 'remove'); + sendBlockChange(gx, gy, 'farmland', 'add'); + useTool('hoe'); + playSound('cloth1'); + rebuildHotbar(); + return; + } + } + + // жарка на костре: выбран meat + клик по campfire + if(b && b.t==='campfire' && selected==='meat' && inv.meat>0){ + playSound('fire'); // Звук при жарке на костре + inv.meat--; inv.cooked++; + rebuildHotbar(); + return; + } + + // Сон на кровати: клик по bed + if(b && b.t==='bed' && isNight()){ + player.sleeping = true; + saveGame(); // Сохраняем при отходе ко сну + return; + } + + if(mode()==='mine'){ + if(!b) return; + if(BLOCKS[b.t].fluid) return; + // Клик на урожайную культуру — сбор + if(BLOCKS[b.t].harvestable){ + const hInfo = BLOCKS[b.t]; + inv[hInfo.harvestItem] = (inv[hInfo.harvestItem]||0) + hInfo.harvestQty; + removeBlock(gx, gy); + sendBlockChange(gx, gy, b.t, 'remove'); + delete growthTimers[gx+','+gy]; + playSound('cloth1'); + rebuildHotbar(); + return; + } + if(BLOCKS[b.t].decor) return; + + if(b.t==='tnt'){ activateTNT(b, 3.2); return; } // не взрывается сразу + + const removed = removeBlock(gx,gy); + if(removed){ + inv[removed.t] = (inv[removed.t]||0) + 1; + + // Тратим прочность кирки (если есть в инвентаре) + const pickTypes = ['iron_pickaxe','stone_pickaxe','wood_pickaxe']; + for (const pt of pickTypes) { + if (inv[pt] > 0) { + const broke = useTool(pt); + if (broke) playSound('cloth1'); // звук поломки + break; + } + } + + // Отправляем изменение блока на сервер + sendBlockChange(gx, gy, removed.t, 'remove'); + + // Звуки при добыче блоков + if(removed.t === 'glass') playSound('glass1'); + else if(removed.t === 'sand') playSound('sand1'); + else if(removed.t === 'snow') playSound('snow1'); + else if(removed.t === 'stone' || removed.t.endsWith('_ore')) playSound('stone1'); + else if(removed.t === 'wood') playSound('wood1'); + else playSound('cloth1'); + + rebuildHotbar(); + } + return; + } + + if(mode()==='build'){ + if(inv[selected] <= 0) return; + if(!BLOCKS[selected]) return; + if(b) return; // занято + + // Проверяем, ставим ли лодку + if(selected === 'boat'){ + // Лодку можно ставить только на воду + const waterBelow = getBlock(gx, gy+1); + if(!waterBelow || waterBelow.t !== 'water'){ + return; + } + + // Создаём лодку + boat.x = gx * TILE; + boat.y = gy * TILE; + boat.vx = 0; + boat.vy = 0; + boat.active = true; + boat.inWater = true; + + // Сажаем игрока в лодку + player.inBoat = true; + player.x = boat.x; + player.y = boat.y; + player.vx = 0; + player.vy = 0; + + playSound('splash'); + inv[selected]--; + rebuildHotbar(); + return; + } + + // запрет ставить в игрока + const bx = gx*TILE, by = gy*TILE; + const overlap = !(bx >= player.x+player.w || bx+TILE <= player.x || by >= player.y+player.h || by+TILE <= player.y); + if(overlap) return; + + setBlock(gx,gy,selected, true); // true = блок установлен игроком + inv[selected]--; + + // Отправляем изменение блока на сервер + sendBlockChange(gx, gy, selected, 'set'); + + // Звук при строительстве + if(selected === 'stone' || selected === 'brick') playSound('stone_build'); + else if(selected === 'wood' || selected === 'planks') playSound('wood_build'); + else if(selected === 'glass') playSound('glass1'); + else if(selected === 'sand') playSound('sand1'); + else if(selected === 'snow') playSound('snow1'); + else if(selected === 'dirt' || selected === 'grass') playSound('cloth1'); + + rebuildHotbar(); + return; + } + }); + + // ==================== БИОМЫ ==================== + const BIOMES = { + plains: { name:'Равнина', surface:'grass', subsurface:'dirt', trees:true, flowers:true, treeChance:0.12 }, + desert: { name:'Пустыня', surface:'sand', subsurface:'sand', trees:false, flowers:false, treeChance:0 }, + tundra: { name:'Тундра', surface:'snow', subsurface:'dirt', trees:true, flowers:false, treeChance:0.06 }, + swamp: { name:'Болото', surface:'moss', subsurface:'dirt', trees:true, flowers:false, treeChance:0.10 }, + mountains:{ name:'Горы', surface:'stone', subsurface:'stone', trees:false, flowers:false, treeChance:0 } + }; + + function getBiome(gx) { + const temp = Math.sin(gx*0.003 + worldSeed*0.01)*0.5 + Math.sin(gx*0.007 + worldSeed*0.02)*0.3 + 0.5; + const humid = Math.sin(gx*0.004 + worldSeed*0.015 + 1000)*0.5 + Math.cos(gx*0.006 + worldSeed*0.02 + 2000)*0.3 + 0.5; + const mtVal = Math.sin(gx*0.001 + worldSeed*0.005)*0.5 + 0.5; + if (temp > 0.7) return 'desert'; + if (temp < 0.3) return 'tundra'; + if (humid > 0.7 && temp >= 0.3 && temp <= 0.7) return 'swamp'; + if (temp >= 0.5 && temp <= 0.7 && mtVal > 0.75) return 'mountains'; + return 'plains'; + } + + const biomeCache = {}; + function getCachedBiome(gx) { + const chunk = Math.floor(gx / 8); // cache per 8-tile chunk for smoother biomes + if (biomeCache[chunk] === undefined) biomeCache[chunk] = getBiome(chunk * 8); + return biomeCache[chunk]; + } + + // ==================== ПОГОДА ==================== + const weatherState = { type: 'clear', intensity: 0, timer: 0, duration: 180, nextChange: 120 + Math.random()*180 }; + const BIOME_WEATHER = { + plains: { clear:0.50, rain:0.30, storm:0.10, snow:0, fog:0.10 }, + desert: { clear:0.80, rain:0.05, storm:0, snow:0, fog:0.15 }, + tundra: { clear:0.20, rain:0, storm:0.10, snow:0.60, fog:0.10 }, + swamp: { clear:0.20, rain:0.30, storm:0.10, snow:0, fog:0.40 }, + mountains:{ clear:0.40, rain:0.30, storm:0.10, snow:0.10, fog:0.10 } + }; + + function updateWeather(dt) { + weatherState.timer += dt; + if (weatherState.timer >= weatherState.nextChange) { + weatherState.timer = 0; + weatherState.nextChange = 60 + Math.random() * 240; + const biome = getCachedBiome(Math.floor(player.x / TILE)); + const probs = BIOME_WEATHER[biome] || BIOME_WEATHER.plains; + const r = Math.random(); + let cum = 0; + if ((cum += probs.clear) > r) { weatherState.type = 'clear'; } + else if ((cum += probs.rain) > r) { weatherState.type = 'rain'; } + else if ((cum += probs.storm) > r) { weatherState.type = 'storm'; } + else if ((cum += probs.snow) > r) { weatherState.type = 'snow'; } + else { weatherState.type = 'fog'; } + weatherState.duration = 60 + Math.random() * 300; + } + // Intensity interpolation + const target = (weatherState.type === 'clear') ? 0 : 1; + weatherState.intensity += (target - weatherState.intensity) * dt * 0.5; + } + + function getWeatherSpeedMultiplier() { + if (weatherState.type === 'rain') return 0.85; + if (weatherState.type === 'snow') return 0.7; + if (weatherState.type === 'storm') return 0.85; + return 1; + } + + function isOutdoorLight(lx, ly) { + // Check if position is outdoors (no block above) + const aboveGy = Math.floor(ly / TILE) - 1; + const aboveGx = Math.floor(lx / TILE); + const above = getBlock(aboveGx, aboveGy); + return !above || !BLOCKS[above.t]?.solid; + } + + // ==================== СТРУКТУРЫ МИРА ==================== + function placeStructure(startGx, startGy, pattern) { + for (let dy = 0; dy < pattern.length; dy++) { + for (let dx = 0; dx < pattern[dy].length; dx++) { + const bt = pattern[dy][dx]; + if (bt && bt !== 'air') { + setBlock(startGx + dx, startGy + dy, bt); + } + } + } + } + + // Пирамида в пустыне + const PYRAMID_PATTERN = [ + ['sand','sand','sand','sand','sand','sand','sand'], + ['sand','stone','stone','stone','stone','stone','sand'], + ['sand','stone','air','air','air','stone','sand'], + ['sand','stone','air','air','air','stone','sand'], + ['sand','stone','air','air','air','stone','sand'], + ['sand','sand','stone','stone','stone','sand','sand'] + ]; + + // Дом в равнине + const HOUSE_PATTERN = [ + ['air','planks','planks','planks','planks','air'], + ['planks','air','air','air','air','planks'], + ['planks','air','torch','air','air','planks'], + ['planks','air','air','air','air','planks'], + ['planks','planks','air','planks','planks','planks'] + ]; + + // Хижина в болоте + const HUT_PATTERN = [ + ['air','wood','wood','wood','air'], + ['wood','air','air','air','wood'], + ['wood','air','torch','air','wood'], + ['moss','moss','air','moss','moss'] + ]; + + // ==================== ГЕНЕРАЦИЯ ==================== + const generated = new Set(); // gx already generated + function surfaceGyAt(gx) { + const biome = getCachedBiome(gx); + // Base noise (same for all biomes) + const n1 = Math.sin(gx*0.025 + worldSeed*0.001)*8; + const n2 = Math.sin(gx*0.012 + worldSeed*0.002)*12; + const n3 = Math.sin(gx*0.006 + worldSeed*0.003)*6; + const n4 = Math.sin(gx*0.045 + worldSeed*0.004)*4; + const n5 = Math.cos(gx*0.018 + worldSeed*0.005)*5; + let h; + switch(biome) { + case 'desert': + h = Math.floor(SEA_GY - 4 + n3*0.3 + n4*0.5); // flatter, slightly higher + break; + case 'tundra': + h = Math.floor(SEA_GY - 6 + n2*0.5 + n3*0.4 + n5*0.3); // gentle rolling + break; + case 'swamp': + h = Math.floor(SEA_GY - 2 + n3*0.2 + n4*0.3); // very flat, near sea level + h = Math.max(h, SEA_GY - 3); // never too deep + break; + case 'mountains': + h = Math.floor(SEA_GY - 15 + n1*1.5 + n2*1.2 + n3); // tall peaks + break; + default: // plains + h = Math.floor(SEA_GY - 8 + n1 + n2 + n3 + n4 + n5); + } + return h; + } + + function genColumn(gx) { + if(generated.has(gx)) return; + if(worldSeed == null) return; // wait for server seed in multiplayer + generated.add(gx); + + const sgy = surfaceGyAt(gx); + const biome = getCachedBiome(gx); + + // === Вода и поверхность === + if(sgy > SEA_GY) { + // ниже уровня моря — заливаем водой + for(let gy = SEA_GY; gy < sgy; gy++) { + const blockType = (biome === 'swamp' && gy >= SEA_GY - 1) ? 'swamp_water' : 'water'; + setBlock(gx, gy, blockType); + } + setBlock(gx, sgy, 'sand'); + } else { + // поверхность + const b = BIOMES[biome]; + setBlock(gx, sgy, b.surface); + // болото: случайные лужи болотной воды + if(biome === 'swamp' && seededRandom(gx*3, sgy) < 0.15) { + setBlock(gx, sgy-1, 'swamp_water'); + } + // тундра: лёд на воде рядом + if(biome === 'tundra' && sgy === SEA_GY && seededRandom(gx, SEA_GY-1) < 0.3) { + setBlock(gx, SEA_GY-1, 'ice'); + } + } + + // === Подповерхностные слои === + for(let gy = sgy+1; gy <= BEDROCK_GY; gy++) { + if(gy === BEDROCK_GY) { setBlock(gx,gy,'bedrock'); continue; } + + let t = BIOMES[biome].subsurface; + + // глубже — камень + if(gy > sgy + 3) t = 'stone'; + + // пустыня: sand глубже + if(biome === 'desert' && gy <= sgy + 6) t = 'sand'; + + // болото: глина ближе к поверхности + if(biome === 'swamp' && gy <= sgy + 2 && seededRandom(gx, gy) < 0.3) t = 'clay'; + + // горы: gravel + if(biome === 'mountains' && gy > sgy + 4 && seededRandom(gx, gy) < 0.12) t = 'gravel'; + + // общие руды + const depth = gy - sgy; + const r = seededRandom(gx, gy); + if(t === 'stone') { + if(r < 0.06) t = 'coal'; + else if(r < 0.10) t = 'copper_ore'; + else if(r < 0.13) t = 'iron_ore'; + else if(depth > 40 && r < 0.145) t = 'gold_ore'; + else if(depth > 70 && r < 0.152) t = 'diamond_ore'; + } + + setBlock(gx, gy, t); + } + + // === Растительность и декор === + const b = BIOMES[biome]; + const top = getBlock(gx, sgy); + + // цветы (только plain) + if(biome === 'plains' && top && top.t === 'grass' && seededRandom(gx, sgy-1) < 0.10) { + setBlock(gx, sgy-1, 'flower'); + } + + // деревья + if(b.trees && seededRandom(gx*7, sgy-2) < b.treeChance) { + if(biome === 'tundra') { + // ёлки (треугольные, 3-5 высоты) + const th = 3 + Math.floor(seededRandom(gx, sgy) * 3); + for(let i = 0; i < th; i++) setBlock(gx, sgy-1-i, 'wood'); + // крона (треугольник) + for(let row = 0; row < th; row++) { + const w = Math.min(row + 1, 2); + for(let dx = -w; dx <= w; dx++) { + const ly = sgy-1-th+row; + if(ly >= 0) setBlock(gx+dx, ly, 'spruce_leaves'); + } + } + } else if(biome === 'swamp') { + // болотное дерево (короче, с мхом) + setBlock(gx, sgy-1, 'wood'); + setBlock(gx, sgy-2, 'moss'); + setBlock(gx-1, sgy-2, 'leaves'); + setBlock(gx+1, sgy-2, 'leaves'); + } else { + // обычное дерево (plains) + setBlock(gx, sgy-1, 'wood'); + setBlock(gx, sgy-2, 'wood'); + setBlock(gx, sgy-3, 'leaves'); + setBlock(gx-1, sgy-3, 'leaves'); + setBlock(gx+1, sgy-3, 'leaves'); + } + } + + // кактусы (пустыня) + if(biome === 'desert' && seededRandom(gx*11, sgy) < 0.04) { + const ch = 1 + Math.floor(seededRandom(gx, sgy+1) * 2); + for(let i = 0; i < ch; i++) setBlock(gx, sgy-1-i, 'cactus'); + } + + // грибы (болото) + if(biome === 'swamp' && seededRandom(gx*13, sgy) < 0.06) { + setBlock(gx, sgy-1, 'mushroom'); + } + + // сухие кусты (пустыня) + if(biome === 'desert' && seededRandom(gx*17, sgy) < 0.05) { + setBlock(gx, sgy-1, 'dead_bush'); + } + + // === Структуры мира === + // Пирамида в пустыне + if(biome === 'desert' && ((gx % 200 + 200) % 200) === 47 && sgy < SEA_GY && sgy > SEA_GY - 5) { + placeStructure(gx, sgy - 5, PYRAMID_PATTERN); + } + // Дом в равнине + if(biome === 'plains' && ((gx % 150 + 150) % 150) === 33 && sgy < SEA_GY) { + placeStructure(gx, sgy - 4, HOUSE_PATTERN); + } + // Хижина в болоте + if(biome === 'swamp' && ((gx % 180 + 180) % 180) === 55 && sgy < SEA_GY) { + placeStructure(gx, sgy - 3, HUT_PATTERN); + } + + // Применяем серверные оверрайды для этой колонны + const colPrefix = gx + ','; + for (const [key, ov] of serverOverrides) { + if (!key.startsWith(colPrefix)) continue; + if (ov.op === 'remove') { + const b = grid.get(key); + if (b) { grid.delete(key); b.dead = true; } + } else if (ov.op === 'set') { + if (!grid.has(key)) { + const gy = parseInt(key.split(',')[1]); + const nb = { gx, gy, t: ov.t, dead: false, active: false, fuse: 0 }; + grid.set(key, nb); + blocks.push(nb); + } + } + } + } + + // Перегенерация видимых чанков (используется при загрузке сохранения) + function regenerateVisibleChunks(){ + const gx0 = Math.floor(camX/TILE); + for(let gx=gx0-GEN_MARGIN_X; gx<=gx0+GEN_MARGIN_X; gx++){ + // Принудительно перегенерируем колонну + generated.delete(gx); + genColumn(gx); + } + } + + function ensureGenAroundCamera(){ + const gx0 = Math.floor(camX/TILE); + for(let gx=gx0-GEN_MARGIN_X; gx<=gx0+GEN_MARGIN_X; gx++){ + genColumn(gx); + } + } + + // Лут с дерева/листвы: дерево -> wood; листья -> leaves + // (уже в mine добавляется inv[type] автоматически) + + // Рисование костра: огонь поверх текстуры + function drawFire(wx,wy,now){ + const baseX = wx; + const baseY = wy; + const flick = 1.5 + (Math.sin(now/200)+1)*1; + ctx.fillStyle = 'rgba(255,140,0,0.85)'; + ctx.beginPath(); + ctx.moveTo(baseX+10, baseY+30); + ctx.lineTo(baseX+20, baseY+30-flick); + ctx.lineTo(baseX+30, baseY+30); + ctx.fill(); + + ctx.fillStyle = 'rgba(255,230,150,0.75)'; + ctx.beginPath(); + ctx.moveTo(baseX+14, baseY+30); + ctx.lineTo(baseX+20, baseY+30-(flick*0.7)); + ctx.lineTo(baseX+26, baseY+30); + ctx.fill(); + } + + // Моб AI + function mobAI(m, dt){ + updateWaterFlag(m); + + if(m.kind==='zombie'){ + // активность ночью + const night = isNight(); + if(!night){ m.hp -= 30*dt; m.vx *= 0.5; return; } + const dir = Math.sign((player.x) - m.x); + m.vx = dir * m.speed; + if(m.inWater && Math.random()<0.06) m.vy = -260; + // атака + if(Math.abs((m.x+ m.w/2) - (player.x+player.w/2)) < 28 && + Math.abs((m.y+ m.h/2) - (player.y+player.h/2)) < 40 && + player.invuln <= 0){ + const damage = calculateDamage(15); + player.hp -= damage; + player.invuln = 0.8; + player.vx += dir*420; + player.vy -= 260; + playSound('hit1'); // Звук при атаке зомби + } + } else if(m.kind==='creeper'){ + // активность ночью + const night = isNight(); + if(!night){ m.hp -= 30*dt; m.vx *= 0.5; return; } + const dir = Math.sign((player.x) - m.x); + const dist = Math.hypot((player.x+player.w/2) - (m.x+m.w/2), (player.y+player.h/2) - (m.y+m.h/2)); + + // Движение к игроку + m.vx = dir * m.speed; + if(m.inWater && Math.random()<0.06) m.vy = -260; + + // Взрыв если близко к игроку + if(dist < 60){ + m.fuse -= dt; + if(m.fuse <= 0){ + explodeAt(Math.floor((m.x+m.w/2)/TILE), Math.floor((m.y+m.h/2)/TILE)); + m.hp = 0; + } + } else { + // Поджигаем если очень близко + if(dist < 40){ + m.fuse = 0.5; // Быстрый взрыв + } + } + } else if(m.kind==='skeleton'){ + // активность ночью + const night = isNight(); + if(!night){ m.hp -= 30*dt; m.vx *= 0.5; return; } + const dir = Math.sign((player.x) - m.x); + const dist = Math.hypot((player.x+player.w/2) - (m.x+m.w/2), (player.y+player.h/2) - (m.y+m.h/2)); + + // Движение к игроку + m.vx = dir * m.speed; + if(m.inWater && Math.random()<0.06) m.vy = -260; + + // Стрельба стрелами + m.shootCooldown -= dt; + if(dist < 300 && m.shootCooldown <= 0){ + m.shootCooldown = 2.0; + const dx = (player.x+player.w/2) - (m.x+m.w/2); + const dy = (player.y+player.h/2) - (m.y+m.h/2); + const angle = Math.atan2(dy, dx); + const speed = 450; + projectiles.push({ + x: m.x + m.w/2, + y: m.y + m.h/3, + vx: Math.cos(angle) * speed, + vy: Math.sin(angle) * speed, + dmg: 6, + owner: 'mob', + life: 3 + }); + } + } else if(m.kind==='scorpion') { + // Скорпион — бежит к игроку, яд (замедление) + const dir = Math.sign((player.x) - m.x); + m.vx = dir * m.speed; + if(m.inWater && Math.random()<0.06) m.vy = -260; + // Яд при касании — замедление на 3 сек + if(Math.abs((m.x+ m.w/2) - (player.x+player.w/2)) < 28 && + Math.abs((m.y+ m.h/2) - (player.y+player.h/2)) < 40 && + player.invuln <= 0){ + const damage = calculateDamage(8); + player.hp -= damage; + player.invuln = 0.8; + player.slowTimer = 3; // замедление + player.vx += dir*300; + player.vy -= 200; + playSound('hit1'); + } + } else if(m.kind==='polar_bear') { + // Белый медведь — нейтрален, атакует если ударили (hostile пока нет, атакует через proximity) + m.aiT -= dt; + if(m.aiT <= 0){ + m.aiT = 2.0 + Math.random()*3; + m.dir = Math.random()<0.5 ? -1 : 1; + if(Math.random()<0.3) m.dir = 0; + } + m.vx = m.dir * m.speed; + if(m.inWater) m.vy = -120; + } else if(m.kind==='slime') { + // Слизь — прыгает к игроку + const dir = Math.sign((player.x+player.w/2) - (m.x+m.w/2)); + m.aiT -= dt; + if(m.aiT <= 0){ + m.aiT = 1.5 + Math.random()*1.5; + m.dir = dir; + // Прыжок + m.vy = -200; + } + m.vx = m.dir * m.speed; + } else if(m.kind==='eagle') { + // Орёл — летает, атакует пикированием + const dx = (player.x+player.w/2) - (m.x+m.w/2); + const dy = (player.y+player.h/2) - (m.y+m.h/2); + const dist = Math.hypot(dx, dy); + if(dist < 400) { + // Пикирует на игрока + m.vx = Math.sign(dx) * m.speed; + m.vy = dy > 0 ? 60 : -60; // летит вниз к игроку + } else { + // Патрулирует + m.aiT -= dt; + if(m.aiT <= 0){ + m.aiT = 2+Math.random()*3; + m.dir = Math.random()<0.5 ? -1 : 1; + } + m.vx = m.dir * m.speed * 0.5; + m.vy = Math.sin(performance.now()/1000) * 30; // мягкое покачивание + } + // Атака при касании + if(dist < 30 && player.invuln <= 0){ + const damage = calculateDamage(10); + player.hp -= damage; + player.invuln = 0.8; + player.vy -= 200; + playSound('hit1'); + } + // Орёл не падает — летающий моб + m.vy *= 0.5; + m.grounded = false; + } else { + // животные (pig, chicken) + m.aiT -= dt; + if(m.aiT <= 0){ + m.aiT = 1.8 + Math.random()*2.5; + m.dir = Math.random()<0.5 ? -1 : 1; + if(Math.random()<0.25) m.dir = 0; + } + m.vx = m.dir * (m.kind==='chicken' ? 55 : 40); + if(m.inWater) m.vy = -120; + } + + // физика моба + const g = m.inWater ? GRAV_WATER : GRAV; + m.vy += g*dt; + + m.y += m.vy*dt; m.grounded=false; resolveY(m); + m.x += m.vx*dt; resolveX(m); + } + + function isNight(){ + // Автоматический цикл: ночь когда worldTime > 0.5 + return worldTime > 0.5; + } + + // Respawn + document.getElementById('respawnBtn').onclick = async () => { + playSound('click'); // Звук клика по кнопке + + console.log('=== RESPAWN CLICKED ==='); + console.log('isMultiplayer:', isMultiplayer); + console.log('otherPlayers.size:', otherPlayers.size); + console.log('player.hp before respawn:', player.hp); + + // В мультиплеере не загружаем сохранение, а возрождаемся в начальной точке + if (isMultiplayer && otherPlayers.size > 0) { + console.log('Мультиплеер режим - возрождение в начальной точке'); + player.hp = 100; + player.hunger = 100; + player.o2 = 100; + player.vx = player.vy = 0; + player.invuln = 0; + player.x = spawnPoint.x; + player.y = spawnPoint.y; + player.fallStartY = player.y; + console.log('Возрождение в начальной точке, HP:', player.hp); + } else { + console.log('Одиночный режим - загружаем последнее сохранение'); + // Одиночный режим - загружаем последнее сохранение + const loadedSave = await loadGame(); + if(loadedSave){ + await applySave(loadedSave); + console.log('Загружено последнее сохранение после смерти, final HP:', player.hp); + } else { + // Если сохранения нет, возрождаемся в начальной точке + player.hp = 100; + player.hunger = 100; + player.o2 = 100; + player.vx = player.vy = 0; + player.invuln = 0; + player.x = spawnPoint.x; + player.y = spawnPoint.y; + player.fallStartY = player.y; + console.log('Возрождение в начальной точке, HP:', player.hp); + } + } + + console.log('player.hp after respawn logic:', player.hp); + console.log('Hiding death screen...'); + deathEl.style.display='none'; + console.log('=== RESPAWN END ==='); + }; + + // Resize + function resize(){ + W = gameEl.clientWidth; + H = gameEl.clientHeight; + canvas.width = W*dpr; + canvas.height = H*dpr; + lightC.width = W*dpr; + lightC.height = H*dpr; + ctx.setTransform(dpr,0,0,dpr,0,0); + } + window.addEventListener('resize', resize); + + // init + resize(); + rebuildHotbar(); + + // Инициализируем и загружаем сохранение + initDB().then(async () => { + // Пытаемся загрузить сохранённую игру + const loadedSave = await loadGame(); + if(loadedSave){ + await applySave(loadedSave); + console.log('Загружено сохранение, HP:', player.hp); + + // Проверяем HP после загрузки - если <= 0, возрождаемся + if (player.hp <= 0) { + console.log('WARNING: HP <= 0 после загрузки, возрождаемся'); + player.hp = 100; + player.hunger = 100; + player.o2 = 100; + player.x = spawnPoint.x; + player.y = spawnPoint.y; + player.vx = player.vy = 0; + player.invuln = 0; + player.fallStartY = player.y; + } + } else { + console.log('Сохранение не найдено, начинаем новую игру'); + + // Инициализируем игрока для новой игры + player.hp = 100; + player.hunger = 100; + player.o2 = 100; + player.vx = player.vy = 0; + player.invuln = 0; + + // старт — на поверхности (используем ту же логику что и в world_state) + const startGX = 6; + for (let dx = -3; dx <= 3; dx++) genColumn(startGX + dx); + const surfaceY = surfaceGyAt(startGX); + let safeGY = surfaceY - 1; + const aboveBlock = getBlock(startGX, surfaceY - 1); + if (aboveBlock && aboveBlock.t === 'water') { + for (let gy = SEA_GY - 1; gy >= 0; gy--) { + const b = getBlock(startGX, gy); + if (!b || b.dead || b.t === 'air' || b.t === 'water') continue; + safeGY = gy - 1; + break; + } + } + player.y = safeGY * TILE; + player.x = startGX * TILE; + player.fallStartY = player.y; + + // Обновляем spawnPoint, чтобы возрождение было на поверхности + spawnPoint.x = player.x; + spawnPoint.y = player.y; + + console.log('Новая игра: startGX=', startGX, 'surfaceY=', surfaceY, 'player.y=', player.y, 'player.hp=', player.hp); + console.log('spawnPoint обновлён: x=', spawnPoint.x, 'y=', spawnPoint.y); + + // Генерируем карту вокруг стартовой позиции при инициализации + for(let gx = startGX - 50; gx <= startGX + 50; gx++){ + genColumn(gx); + } + } + + // Автосейв при скрытии страницы (защита от потери прогресса) + document.addEventListener('visibilitychange', () => { + if(document.hidden){ + saveGame(); + } + }); + + // Автосейв перед закрытием страницы (защита от потери прогресса) + window.addEventListener('beforeunload', () => { + saveGame(); + }); + }).catch(err => { + console.error('Ошибка инициализации:', err); + // При ошибке начинаем новую игру + const startGX = 6; + genColumn(startGX); + player.y = (surfaceGyAt(startGX)-1)*TILE; + player.fallStartY = player.y; + + for(let gx = startGX - 50; gx <= startGX + 50; gx++){ + genColumn(gx); + } + }); + + // main loop + let last = performance.now(); + let prevJump = false; + // При возврате на вкладку — сбрасываем last чтобы не было скачка dt + document.addEventListener('visibilitychange', () => { + if (!document.hidden) last = performance.now(); + }); + function loop(now){ + const rawDt = Math.min(0.05, (now-last)/1000); + last = now; + // Sub-stepping: разбиваем физику на шаги ≤16ms чтобы не проваливаться сквозь блоки + const PHYSICS_STEP = 0.016; + const steps = Math.max(1, Math.ceil(rawDt / PHYSICS_STEP)); + const dt = rawDt / steps; + + const jumpPressed = inp.j && !prevJump; + prevJump = inp.j; + + // Ускорение времени во время сна + if(player.sleeping && isNight()){ + worldTime += dt * 8 / DAY_LEN; // В 8 раз быстрее + // Восстанавливаем здоровье во время сна + player.hp = Math.min(100, player.hp + dt * 20); + // Автоматическое пробуждение когда наступает день + if(!isNight()){ + player.sleeping = false; + } + } else { + worldTime += dt / DAY_LEN; + } + if(worldTime >= 1) worldTime -= 1; + + // камера следует за игроком по X/Y + camX = Math.floor((player.x + player.w/2) - W/2); + camY = Math.floor((player.y + player.h/2) - H/2); + + ensureGenAroundCamera(); + + // clouds parallax + for(const c of clouds){ + c.x -= c.s * dt; + if(c.x + c.w < camX - 400) c.x = camX + W + Math.random()*700; + } + + // Погода (биом-зависимая) + updateWeather(dt); + + // player + updateWaterFlag(player); + + // кислород/утопление: тратим O2 только если голова под водой, иначе восстанавливаем [web:223] + if(player.headInWater){ + player.o2 = Math.max(0, player.o2 - 6*dt); // замедлил в 3.7 раза + if(player.o2 === 0){ + const damage = calculateDamage(4*dt); + player.hp -= damage; + } + } else { + player.o2 = Math.min(100, player.o2 + 10*dt); // замедлил восстановление в 4 раза + } + + // голод убывает, но HP не отнимает (как просили) + player.hunger = Math.max(0, player.hunger - dt*0.2); // замедлил в 4 раза + + + // ========== ТЕМПЕРАТУРА ========== + if (player.temperature === undefined) player.temperature = 15; + const BIOME_TEMP = { tundra: -20, plains: 15, swamp: 20, desert: 45, mountains: 5 }; + const UNDERGROUND_TEMP = 15; + const COLD_THRESHOLD = -5; + const HEAT_THRESHOLD = 35; + const HEAT_RADIUS = 5; + const pGX = Math.floor(player.x / TILE); + const biome = getCachedBiome(pGX); + const pGY = Math.floor(player.y / TILE); + const sGY = surfaceGyAt(pGX); + const isUndergroundTemp = (pGY - sGY) > 2; // player deeper than 2 blocks below surface + let targetTemp = BIOME_TEMP[biome] || 15; + if (isUndergroundTemp) targetTemp = UNDERGROUND_TEMP; + if (isNight() && !isUndergroundTemp) targetTemp -= 10; + if ((weatherState.type === 'rain' || weatherState.type === 'storm') && !isUndergroundTemp) targetTemp -= 5; + player.temperature += (targetTemp - player.temperature) * dt * 0.3; + let nearHeat = false, nearCool = false; + for (let dx = -HEAT_RADIUS; dx <= HEAT_RADIUS; dx++) { + for (let dy = -HEAT_RADIUS; dy <= HEAT_RADIUS; dy++) { + const b = getBlock(pGX + dx, pGY + dy); + if (!b || b.dead) continue; + if (b.t === 'campfire' || b.t === 'torch') nearHeat = true; + if (b.t === 'water' && biome === 'desert') nearCool = true; + } + } + if (nearHeat) { + player.temperature += (30 - player.temperature) * dt * 2; + if (player.hp < 100) player.hp = Math.min(100, player.hp + 8 * dt); + } + if (nearCool) { + player.temperature += (15 - player.temperature) * dt * 1.5; + if (player.hp < 100 && player.temperature > HEAT_THRESHOLD) { + player.hp = Math.min(100, player.hp + 8 * dt); + } + } + if (isUndergroundTemp && !nearHeat) { + if (player.hp < 100 && player.temperature >= COLD_THRESHOLD && player.temperature <= HEAT_THRESHOLD) { + player.hp = Math.min(100, player.hp + 2 * dt); + } + } + const aboveBlk = getBlock(pGX, pGY - 1); + const inShade = aboveBlk && BLOCKS[aboveBlk.t] && BLOCKS[aboveBlk.t].solid && aboveBlk.t !== 'glass'; + if (inShade && !isUndergroundTemp && !nearCool) { + player.temperature -= 5 * dt; + if (player.temperature > HEAT_THRESHOLD - 2 && player.hp < 100) { + player.hp = Math.min(100, player.hp + 1 * dt); + } + } + if (player.temperature < COLD_THRESHOLD && !isUndergroundTemp) { + const severity = Math.abs(player.temperature - COLD_THRESHOLD) / 15; + player.hp -= 1 * severity * dt; + if (severity > 0.5) player.vx *= (1 - 0.3 * Math.min(1, severity) * dt); + } + if (player.temperature > HEAT_THRESHOLD && !isUndergroundTemp) { + const severity = (player.temperature - HEAT_THRESHOLD) / 15; + player.hp -= 1 * severity * dt; + if (severity > 0.5) player.hunger -= 0.5 * severity * dt; + } + // Игрок не может двигаться во время сна + if(player.sleeping){ + player.vx = 0; + player.vy = 0; + } else { + const dir = (inp.r?1:0) - (inp.l?1:0); + const speedMult = getWeatherSpeedMultiplier() * (player.slowTimer > 0 ? 0.4 : 1.0); + if(dir) player.vx = dir * MOVE * speedMult; + else player.vx *= 0.82; + } + + // Звук шагов при движении по земле + if(player.grounded && !player.inWater && Math.abs(player.vx) > 50){ + const stepInterval = 0.35; // Интервал между шагами в секундах + if(now/1000 - player.lastStepTime > stepInterval){ + playSound('step'); + player.lastStepTime = now/1000; + } + } + + // прыжок/плавание (новая логика) + if(player.inBoat){ + // Игрок в лодке - лодка следует за игроком + const dir = (inp.r?1:0) - (inp.l?1:0); + if(dir) boat.vx = dir * MOVE; + else boat.vx *= 0.95; + + // Лодка плавает на воде + boat.vy = 0; + + // Игрок следует за лодкой (сидит внутри неё) + player.x = boat.x + 2; // Игрок по центру лодки + player.y = boat.y - 4; // Игрок выше лодки (сидит внутри) + player.vx = boat.vx; + player.vy = boat.vy; + player.grounded = true; + player.inWater = false; // Игрок не в воде когда в лодке + + // Прыжок из лодки (высадка) + if(jumpPressed){ + // Возвращаем лодку в инвентарь + inv.boat = (inv.boat || 0) + 1; + + player.inBoat = false; + boat.active = false; + player.y += TILE; // Прыгаем из лодки + player.vy = -JUMP * 0.5; + playSound('splash'); + } + + } else if(player.inWater){ + // сопротивление в воде + player.vx *= 0.90; + player.vy *= 0.92; + + // Если не нажимаем прыжок - тонем (гравитация в воде) + if(!jumpPressed && !inp.j){ + // Применяем гравитацию в воде - игрок тонет + player.vy += GRAV_WATER * dt; + } else { + // Если нажимаем прыжок - поднимаемся на поверхность + if(jumpPressed){ + player.vy = Math.min(player.vy, -520); // рывок вверх + } else if(inp.j){ + // если держим — мягкое всплытие + player.vy = Math.min(player.vy, -260); + } + } + + } else { + // обычный прыжок (только по нажатию) + if(jumpPressed && player.grounded && !player.sleeping){ + player.vy = -JUMP; + player.grounded = false; + player.fallStartY = player.y; + } + } + + // Гравитация применяется только вне воды и вне лодки + if(!player.inWater && !player.inBoat){ + player.vy += GRAV*dt; + } + + // Обновляем позицию лодки + if(boat.active){ + boat.x += boat.vx * dt; + boat.y += boat.vy * dt; + + // Лодка не выходит за пределы воды + const boatGX = Math.floor(boat.x / TILE); + const boatGY = Math.floor(boat.y / TILE); + const below = getBlock(boatGX, boatGY + 1); + + if(!below || below.t !== 'water'){ + // Если лодка вышла из воды - выкидываем игрока + inv.boat = (inv.boat || 0) + 1; + player.inBoat = false; + boat.active = false; + player.y += TILE; + player.vy = -200; + playSound('splash'); + } + } + + // Проверяем, не доплыл ли игрок из лодки + if(player.inBoat && !boat.active){ + inv.boat = (inv.boat || 0) + 1; + player.inBoat = false; + player.y += TILE; + player.vy = -200; + playSound('splash'); + } + + // Sub-stepped physics: применяем движение мелкими шагами + for (let step = 0; step < steps; step++) { + player.y += player.vy*dt; + resolveY(player); + player.x += player.vx*dt; + resolveX(player); + } + + // Отправляем позицию на сервер (мультиплеер) + sendPlayerPosition(); + + // Обновляем физику воды + updateWaterPhysics(dt); + + // Погода и дождь + updateWeather(dt); + updateRain(dt); + + player.invuln = Math.max(0, player.invuln - dt); + if(player.slowTimer > 0) player.slowTimer = Math.max(0, player.slowTimer - dt); + + // Рост культур + for(const key of Object.keys(growthTimers)){ + const tile = growthTimers[key]; + if(tile.stage < 3){ + tile.growTimer -= dt; + if(tile.growTimer <= 0){ + tile.stage++; + tile.growTimer = 8 + Math.random()*6; + // Обновляем визуальный блок + const [gxStr, gyStr] = key.split(','); + const gx = parseInt(gxStr), gy = parseInt(gyStr); + const curBlock = getBlock(gx, gy); + if(curBlock && curBlock.t !== curBlock.t.replace(/_stage\d/, '_stage'+tile.stage)){ + // Вычисляем следующую стадию + const baseType = curBlock.t.replace(/_stage\d/, ''); + const nextType = baseType + '_stage' + tile.stage; + setBlock(gx, gy, nextType); + sendBlockChange(gx, gy, nextType, 'add'); + // Проверяем созрел ли + if(tile.stage >= 3) delete growthTimers[key]; + } + } + } + } + + // Voice position update + voicePosT += dt; + if(voicePosT > 0.5 && voiceSocket && voiceSocket.connected){ + voicePosT = 0; + voiceSocket.emit('voice_pos', { x: player.x, y: player.y }); + } + + // Furnace tick + tickFurnaces(dt); + + // Обновляем UI печи если открыта + if(currentFurnaceKey && Math.random() < 0.1){ + renderFurnaceUI(); + } + + // Projectile tick (стрелы) + for(let i = projectiles.length-1; i>=0; i--){ + const p = projectiles[i]; + p.x += p.vx * dt; + p.y += p.vy * dt; + p.vy += 400 * dt; // гравитация + p.life -= dt; + + // Столкновение с блоком + const gx = Math.floor(p.x / TILE); + const gy = Math.floor(p.y / TILE); + const blk = getBlock(gx, gy); + if(blk && !blk.dead && BLOCKS[blk.t] && BLOCKS[blk.t].solid){ + // Врезался в стену + if(p.owner === 'player' && Math.random() < 0.5) inv.arrow++; // подбираем ~50% + projectiles.splice(i, 1); + continue; + } + + // Столкновение с сущностью + if(p.owner === 'mob'){ + // Попал в игрока + if(p.x > player.x && p.x < player.x+player.w && p.y > player.y && p.y < player.y+player.h){ + if(player.invuln <= 0){ + player.hp -= calculateDamage(p.dmg); + player.invuln = 0.4; + player.vx += p.vx * 0.3; + player.vy -= 150; + playSound('hit1'); + } + projectiles.splice(i, 1); + continue; + } + } else { + // Попал в моба — check all mobs (client-authoritative) + const allArrowMobs = getAllMobs(); + for(let j = allArrowMobs.length - 1; j >= 0; j--){ + const m = allArrowMobs[j]; + if(m.dead) continue; + if(p.x > m.x && p.x < m.x+m.w && p.y > m.y && p.y < m.y+m.h){ + m.hp -= p.dmg; + m.vx += p.vx * 0.2; + m.vy -= 200; + // Server-spawned mob: emit arrow hit to server for relay + if(m.id !== undefined && isMultiplayer){ + socket.emit('mob_arrow_hit', { id: m.id, dmg: p.dmg, vx: p.vx }); + if(m.hp <= 0){ + socket.emit('mob_died', { id: m.id }); + } + } + if(m.hp <= 0){ + spawnDrops(m.x + m.w/2, m.y + m.h/2, m.kind); + // Remove from the correct array + if(m.id !== undefined){ + serverMobs.delete(m.id); + } else { + const localIdx = mobs.indexOf(m); + if(localIdx >= 0) mobs.splice(localIdx, 1); + } + rebuildHotbar(); + } + projectiles.splice(i, 1); + break; + } + } + } + + // Таймаут + if(p.life <= 0) projectiles.splice(i, 1); + } + + // TNT tick + for(const key of Array.from(activeTNT)){ + const b = grid.get(key); + if(!b || b.dead){ activeTNT.delete(key); continue; } + b.fuse -= dt; + if(b.fuse <= 0){ + explodeAt(b.gx,b.gy); + } + } + + // mobs spawn (с обеих сторон камеры) — только в одиночном режиме (MP mobs come from server events) + spawnT += dt; + if(!isMultiplayer && spawnT > 1.8 && getAllMobs().length < 30){ + spawnT = 0; + + // Выбираем сторону спавна (левая или правая) + const spawnLeft = Math.random() < 0.5; + const gx = spawnLeft + ? Math.floor((camX - 200)/TILE) + : Math.floor((camX + W + 200)/TILE); + + genColumn(gx); + const sgy = surfaceGyAt(gx); + const wx = gx*TILE + 4; + const wy = (sgy-1)*TILE; // 1 блок выше поверхности + + // не спавнить в воде + const top = getBlock(gx, sgy); + if(top && top.t==='water') { + // skip + } else { + const night = isNight(); + if(night){ + // Ночью спавним враждебных мобов (максимум 12 хостайл) + const hostileCount = mobs.filter(m => m.kind==='zombie'||m.kind==='creeper'||m.kind==='skeleton').length; + if(hostileCount < 12){ + const rand = Math.random(); + if(rand < 0.35){ + mobs.push(new Zombie(wx, wy)); + } else if(rand < 0.55){ + mobs.push(new Creeper(wx, wy)); + } else { + mobs.push(new Skeleton(wx, wy)); + } + } + } + // Животные спавнятся и днём и ночью (с лимитом) + const animalCount = mobs.filter(m => m.kind==='pig'||m.kind==='chicken').length; + if(animalCount < 8){ + mobs.push(Math.random()<0.5 ? new Pig(wx, wy) : new Chicken(wx, wy)); + } + } + } + + // mobs update — mobAI runs on ALL mobs (client-authoritative for server-spawned mobs too) + { + // Local mobs + for(let i=mobs.length-1;i>=0;i--){ + const m = mobs[i]; + mobAI(m, dt); + if(m.hp<=0) mobs.splice(i,1); + } + // Server-spawned mobs: server is authoritative for positions + // mobAI does NOT run on serverMobs — server handles all physics + AI + // Only remove dead mobs from local map + if(isMultiplayer){ + for (const [id, sm] of serverMobs) { + if(sm.hp <= 0){ + sm.dead = true; + } + } + for (const [id, sm] of serverMobs) { + if(sm.dead) serverMobs.delete(id); + } + } + } + + // particles + for(let i=parts.length-1;i>=0;i--){ + const p = parts[i]; + p.t -= dt; + p.x += p.vx*dt; + p.y += p.vy*dt; + p.vy += GRAV*dt; + if(p.t <= 0) parts.splice(i,1); + } + + // death + if(player.hp <= 0){ + deathEl.style.display='flex'; + } else if(deathEl.style.display === 'flex') { + // Если HP > 0 но экран смерти всё ещё показан - скрываем его + deathEl.style.display='none'; + } + + // render + const night = isNight(); + + // sky + ctx.fillStyle = night ? '#070816' : (isRaining ? '#6B7B8D' : '#87CEEB'); + ctx.fillRect(0,0,W,H); + + // clouds (parallax x/y) + ctx.save(); + ctx.translate(-camX*0.5, -camY*0.15); + ctx.fillStyle = 'rgba(255,255,255,0.65)'; + for(const c of clouds){ + ctx.fillRect(c.x, c.y, c.w, 26); + ctx.fillRect(c.x+20, c.y-10, c.w*0.6, 22); + } + ctx.restore(); + + // world + ctx.save(); + ctx.translate(-camX, -camY); + + const minGX = Math.floor(camX/TILE)-2; + const maxGX = Math.floor((camX+W)/TILE)+2; + const minGY = Math.floor(camY/TILE)-6; + const maxGY = Math.floor((camY+H)/TILE)+6; + + // draw blocks (по массиву, но фильтруем диапазоном) + for(const b of blocks){ + if(b.dead) continue; + if(b.gx < minGX || b.gx > maxGX || b.gy < minGY || b.gy > maxGY) continue; + + const def = BLOCKS[b.t]; + if(def.alpha){ + ctx.save(); + ctx.globalAlpha = def.alpha; + ctx.drawImage(tex[b.t], b.gx*TILE, b.gy*TILE, TILE, TILE); + ctx.restore(); + } else { + ctx.drawImage(tex[b.t], b.gx*TILE, b.gy*TILE, TILE, TILE); + } + + // TNT мигает, если активирован + if(b.t==='tnt' && b.active && Math.sin(now/60)>0){ + ctx.fillStyle='rgba(255,255,255,0.45)'; + ctx.fillRect(b.gx*TILE, b.gy*TILE, TILE, TILE); + } + + // огонь костра + if(b.t==='campfire'){ + drawFire(b.gx*TILE, b.gy*TILE, now); + } + // Печь — огонь когда обжигает + if(b.t==='furnace' && activeFurnaces.has(`${b.gx},${b.gy}`)){ + drawFire(b.gx*TILE + 8, b.gy*TILE + 5, now); + } + } + + // mobs + const allMobsRender = getAllMobs(); + for(const m of allMobsRender){ + if(m.kind==='zombie'){ + ctx.fillStyle = '#2ecc71'; + ctx.fillRect(m.x, m.y, m.w, m.h); + ctx.fillStyle = '#c0392b'; + ctx.fillRect(m.x+6, m.y+12, 6,6); + ctx.fillRect(m.x+22, m.y+12, 6,6); + } else if(m.kind==='pig'){ + ctx.fillStyle = '#ffb6c1'; + ctx.fillRect(m.x, m.y, m.w, m.h); + ctx.fillStyle = '#000'; + ctx.fillRect(m.x+22, m.y+5, 3,3); + ctx.fillStyle = '#ff69b4'; + ctx.fillRect(m.x+28, m.y+12, 6,6); + } else if(m.kind==='chicken'){ + // chicken + ctx.fillStyle = '#ecf0f1'; + ctx.fillRect(m.x, m.y, m.w, m.h); + ctx.fillStyle = '#f39c12'; + ctx.fillRect(m.x+18, m.y+10, 6,4); + ctx.fillStyle = '#000'; + ctx.fillRect(m.x+8, m.y+6, 3,3); + } else if(m.kind==='creeper'){ + // creeper + ctx.fillStyle = '#4CAF50'; + ctx.fillRect(m.x, m.y, m.w, m.h); + // Глаза + ctx.fillStyle = '#000'; + ctx.fillRect(m.x+8, m.y+8, 4,4); + ctx.fillRect(m.x+22, m.y+8, 4,4); + // Рот + ctx.fillStyle = '#000'; + ctx.fillRect(m.x+12, m.y+20, 10,4); + // Ноги + ctx.fillStyle = '#4CAF50'; + ctx.fillRect(m.x+4, m.y+30, 6,20); + ctx.fillRect(m.x+24, m.y+30, 6,20); + } else if(m.kind==='skeleton'){ + // skeleton - детализированный + // Тело + ctx.fillStyle = '#ECEFF1'; + ctx.fillRect(m.x+10, m.y+20, 14, 12); + // Череп + ctx.fillRect(m.x+8, m.y+0, 18, 18); + // Глазницы + ctx.fillStyle = '#000'; + ctx.fillRect(m.x+10, m.y+6, 4,4); + ctx.fillRect(m.x+20, m.y+6, 4,4); + // Нос + ctx.fillRect(m.x+15, m.y+12, 4,2); + // Руки + ctx.fillStyle = '#ECEFF1'; + ctx.fillRect(m.x+2, m.y+20, 6,14); + ctx.fillRect(m.x+26, m.y+20, 6,14); + // Ноги + ctx.fillRect(m.x+10, m.y+32, 6, 18); + ctx.fillRect(m.x+18, m.y+32, 6, 18); + // Лук в руке + ctx.save(); + ctx.translate(m.x + 30, m.y + 22); + ctx.strokeStyle = '#8B4513'; + ctx.lineWidth = 2; + ctx.beginPath(); + ctx.arc(0, 0, 8, -Math.PI*0.7, Math.PI*0.7); + ctx.stroke(); + // Тетива + ctx.strokeStyle = '#ccc'; + ctx.lineWidth = 1; + ctx.beginPath(); + ctx.moveTo(8*Math.cos(-Math.PI*0.7), 8*Math.sin(-Math.PI*0.7)); + ctx.lineTo(8*Math.cos(Math.PI*0.7), 8*Math.sin(Math.PI*0.7)); + ctx.stroke(); + ctx.restore(); + } else if(m.kind==='scorpion') { + // скорпион — оранжево-коричневый + ctx.fillStyle = '#d35400'; + ctx.fillRect(m.x+2, m.y+4, m.w-4, m.h-8); + ctx.fillStyle = '#c0392b'; + ctx.fillRect(m.x+m.w-4, m.y-6, 4, 10); + ctx.fillRect(m.x+m.w-2, m.y-10, 3, 5); + ctx.fillStyle = '#000'; + ctx.fillRect(m.x+4, m.y+6, 3, 3); + ctx.fillRect(m.x+m.w-7, m.y+6, 3, 3); + ctx.fillStyle = '#d35400'; + ctx.fillRect(m.x-4, m.y+8, 6, 4); + ctx.fillRect(m.x+m.w-2, m.y+8, 6, 4); + } else if(m.kind==='polar_bear') { + ctx.fillStyle = '#ecf0f1'; + ctx.fillRect(m.x+2, m.y+4, m.w-4, m.h-4); + ctx.fillRect(m.x+8, m.y-2, m.w-16, 10); + ctx.fillStyle = '#bdc3c7'; + ctx.fillRect(m.x+m.w/2-3, m.y+2, 6, 4); + ctx.fillStyle = '#000'; + ctx.fillRect(m.x+12, m.y+1, 3, 3); + ctx.fillRect(m.x+m.w-14, m.y+1, 3, 3); + ctx.fillStyle = '#ecf0f1'; + ctx.fillRect(m.x+8, m.y-4, 4, 4); + ctx.fillRect(m.x+m.w-12, m.y-4, 4, 4); + } else if(m.kind==='slime') { + const bounce = Math.sin(performance.now()/200)*3; + ctx.fillStyle = 'rgba(46,204,113,0.8)'; + ctx.fillRect(m.x-1, m.y-1+bounce, m.w+2, m.h+2); + ctx.fillStyle = 'rgba(39,174,96,0.9)'; + ctx.fillRect(m.x+1, m.y+1+bounce, m.w-2, m.h-2); + ctx.fillStyle = '#fff'; + ctx.fillRect(m.x+4, m.y+6+bounce, 6, 6); + ctx.fillRect(m.x+m.w-10, m.y+6+bounce, 6, 6); + ctx.fillStyle = '#000'; + ctx.fillRect(m.x+6, m.y+8+bounce, 3, 3); + ctx.fillRect(m.x+m.w-8, m.y+8+bounce, 3, 3); + } else if(m.kind==='eagle') { + ctx.fillStyle = '#8B4513'; + ctx.fillRect(m.x+8, m.y+6, m.w-16, m.h-10); + const wingY = Math.sin(performance.now()/150)*4; + ctx.fillRect(m.x-6, m.y+4+wingY, 16, 6); + ctx.fillRect(m.x+m.w-10, m.y+4-wingY, 16, 6); + ctx.fillStyle = '#fff'; + ctx.fillRect(m.x+m.w/2-3, m.y+2, 6, 6); + ctx.fillStyle = '#f39c12'; + ctx.fillRect(m.x+m.w/2-1, m.y+6, 4, 3); + ctx.fillStyle = '#000'; + ctx.fillRect(m.x+m.w/2-1, m.y+3, 2, 2); + } + } + + // boat (рисуем первой, чтобы игрок был внутри неё) + if(boat.active){ + ctx.drawImage(tex['boat'], boat.x - (TILE-boat.w)/2, boat.y - (TILE-boat.h)/2, TILE, TILE); + } + + // Lerp other players towards target positions (smooth movement) + for(const [socketId, p] of otherPlayers){ + if (p.tx !== undefined) { + p.x += (p.tx - p.x) * 0.25; + p.y += (p.ty - p.y) * 0.25; + } + } + // Claim borders (приватные зоны) + if (claims.length > 0) { + for (const claim of claims) { + const isOwn = claim.owner_name === playerName; + const colorIdx = claims.indexOf(claim) % 5; + const borderColors = ["rgba(231,76,60,0.6)", "rgba(52,152,219,0.6)", "rgba(46,204,113,0.6)", "rgba(155,89,182,0.6)", "rgba(241,196,15,0.6)"]; + const fillColors = ["rgba(231,76,60,0.06)", "rgba(52,152,219,0.06)", "rgba(46,204,113,0.06)", "rgba(155,89,182,0.06)", "rgba(241,196,15,0.06)"]; + const borderColor = isOwn ? "rgba(46,204,113,0.7)" : borderColors[colorIdx]; + const fillColor = isOwn ? "rgba(46,204,113,0.06)" : fillColors[colorIdx]; + + const left = (claim.gx - claim.radius) * TILE - camX; + const top_ = (claim.gy - claim.radius) * TILE - camY; + const w = (claim.radius * 2 + 1) * TILE; + const h = (claim.radius * 2 + 1) * TILE; + + ctx.fillStyle = fillColor; + ctx.fillRect(left, top_, w, h); + ctx.strokeStyle = borderColor; + ctx.lineWidth = 2; + ctx.setLineDash([8, 4]); + ctx.strokeRect(left, top_, w, h); + ctx.setLineDash([]); + + // Owner label at top of claim + if (claim.owner_name) { + ctx.fillStyle = isOwn ? "#2ecc71" : "#e74c3c"; + ctx.font = "12px monospace"; + ctx.textAlign = "center"; + ctx.fillText((isOwn ? "🏠 " : "⛔ ") + claim.owner_name, left + w/2, top_ + 14); + ctx.textAlign = "start"; + } + } + } + + // other players (multiplayer) + for(const [socketId, p] of otherPlayers){ + if(heroImg.complete){ + ctx.drawImage(heroImg, p.x - (TILE-player.w)/2, p.y - (TILE-player.h)/2, TILE, TILE); + } else { + ctx.fillStyle = p.color; + ctx.fillRect(p.x, p.y, 34, 34); + } + // Имя игрока (мелко над персонажем) + ctx.fillStyle = '#fff'; + ctx.font = '12px system-ui'; + ctx.textAlign = 'center'; + ctx.fillText(p.name, p.x + 17, p.y - 8); + } + + // player + if(heroImg.complete){ + ctx.drawImage(heroImg, player.x - (TILE-player.w)/2, player.y - (TILE-player.h)/2, TILE, TILE); + } else { + ctx.fillStyle='#fff'; + ctx.fillRect(player.x, player.y, player.w, player.h); + } + + // projectiles (стрелы) + for(const p of projectiles){ + const angle = Math.atan2(p.vy, p.vx); + ctx.save(); + ctx.translate(p.x, p.y); + ctx.rotate(angle); + ctx.fillStyle = p.owner === 'mob' ? '#c0392b' : '#f1c40f'; + ctx.fillRect(-12, -1.5, 24, 3); + // наконечник + ctx.beginPath(); + ctx.moveTo(12, -4); + ctx.lineTo(16, 0); + ctx.lineTo(12, 4); + ctx.closePath(); + ctx.fill(); + // оперение + ctx.fillStyle = '#888'; + ctx.fillRect(-12, -3, 4, 2); + ctx.fillRect(-12, 1, 4, 2); + ctx.restore(); + } + + // particles + for(const p of parts){ + ctx.fillStyle = p.c; + ctx.fillRect(p.x-2, p.y-2, 4, 4); + } + + // Стрелы скелета + for(const m of mobs){ + if(m.kind==='skeleton' && m.shootCooldown > 0.5){ + // Рисуем стрелу + const arrowX = m.x + m.w/2; + const arrowY = m.y + 15; + const targetX = player.x + player.w/2; + const targetY = player.y + player.h/2; + const angle = Math.atan2(targetY - arrowY, targetX - arrowX); + const speed = 400; + + // Проверяем, попала ли стрела + const dx = targetX - arrowX; + const dy = targetY - arrowY; + const dist = Math.hypot(dx, dy); + + // Рисуем стрелу + ctx.save(); + ctx.translate(arrowX, arrowY); + ctx.rotate(angle); + ctx.fillStyle = '#ECEFF1'; + ctx.fillRect(0, -1, 16, 2); + ctx.restore(); + + // Урон игроку если попали + if(dist < 150 && player.invuln <= 0){ + player.hp -= 8; + player.invuln = 0.5; + player.vx += Math.cos(angle) * 300; + player.vy -= 200; + playSound('hit1'); + } + } + } + + // build ghost + if(mode()==='build' && mouse.x!==null && !craftOpen && player.hp>0){ + const wx = mouse.x + camX; + const wy = mouse.y + camY; + const gx = Math.floor(wx/TILE); + const gy = Math.floor(wy/TILE); + ctx.strokeStyle = 'rgba(255,255,255,0.9)'; + ctx.lineWidth = 2; + ctx.strokeRect(gx*TILE, gy*TILE, TILE, TILE); + } + + ctx.restore(); + + // lighting overlay at night (Minecraft-style: offscreen lightmap, wall occlusion, warm flicker) + if(night){ + // 1) Рисуем тёмный оверлей на offscreen canvas + lightC.width = W*dpr; + lightC.height = H*dpr; + lightCtx.setTransform(dpr,0,0,dpr,0,0); + lightCtx.fillStyle = 'rgba(0,0,12,0.82)'; + lightCtx.fillRect(0,0,W,H); + + // 2) Вырезаем «окна света» через destination-out — свет не проходит сквозь стены + lightCtx.globalCompositeOperation = 'destination-out'; + + // Функция: рисуем мягкий луч света с затуханием за стенами + function castLight(sx, sy, radius) { + const flick = 0.97 + Math.sin(now/300 + sx*0.01)*0.015 + Math.sin(now/470 + sy*0.02)*0.015; + const r = radius * flick; + // 24 луча — мягкий круглый свет + const steps = 24; + // Собираем дистанции до стен по лучам + const dists = new Float32Array(steps); + for(let i=0; i TILE*0.3){ + maxDist = step; + break; + } + } + dists[i] = maxDist; + } + // Рисуем сглаженный полигон по dists + const cx = sx-camX, cy = sy-camY; + // Центр: яркая точка + const maxR = Math.max(...dists); + const grad = lightCtx.createRadialGradient(cx, cy, 0, cx, cy, maxR); + grad.addColorStop(0, 'rgba(255,255,255,1)'); + grad.addColorStop(0.4, 'rgba(255,255,255,0.8)'); + grad.addColorStop(1, 'rgba(255,255,255,0)'); + lightCtx.fillStyle = grad; + // Рисуем shape по dists (звездоподобный полигон) + lightCtx.beginPath(); + for(let i=0; i<=steps; i++){ + const idx = i % steps; + const nextIdx = (i+1) % steps; + const avgD = (dists[idx] + dists[nextIdx]) / 2; + const angle = (idx/steps) * Math.PI * 2; + const px = cx + Math.cos(angle) * dists[idx]; + const py = cy + Math.sin(angle) * dists[idx]; + if(i===0) lightCtx.moveTo(px, py); + else lightCtx.lineTo(px, py); + } + lightCtx.closePath(); + lightCtx.fill(); + } + + // Источники света + for(const b of blocks){ + if(b.dead) continue; + if(b.gx < minGX-5 || b.gx > maxGX+5 || b.gy < minGY-5 || b.gy > maxGY+5) continue; + const def = BLOCKS[b.t]; + if(def.lightRadius){ + castLight(b.gx*TILE + TILE/2, b.gy*TILE + TILE/2, def.lightRadius); + } + } + + // 3) Накладываем lightmap на основной canvas + lightCtx.globalCompositeOperation = 'source-over'; + ctx.drawImage(lightC, 0, 0, W, H); + + // 4) Тёплый оверлей от источников света (additive, мягкий) + ctx.save(); + ctx.globalCompositeOperation = 'lighter'; + for(const b of blocks){ + if(b.dead) continue; + if(b.gx < minGX-3 || b.gx > maxGX+3 || b.gy < minGY-3 || b.gy > maxGY+3) continue; + const def = BLOCKS[b.t]; + if(def.lightRadius){ + const flick = 0.9 + Math.sin(now/350 + b.gx*3.7)*0.05 + Math.sin(now/530 + b.gy*2.3)*0.05; + const wx = b.gx*TILE + TILE/2 - camX; + const wy = b.gy*TILE + TILE/2 - camY; + const r = def.lightRadius * 0.85; + const grad = ctx.createRadialGradient(wx,wy, 0, wx,wy, r); + grad.addColorStop(0, `rgba(255,180,80,0.28)`); + grad.addColorStop(0.5, `rgba(255,140,40,0.13)`); + grad.addColorStop(1, 'rgba(255,100,20,0)'); + ctx.fillStyle = grad; + ctx.beginPath(); + ctx.arc(wx, wy, r, 0, Math.PI*2); + ctx.fill(); + } + } + ctx.restore(); + } + + // Дождь (после ночного оверлея) + drawRain(); + if(Math.random()<0.25){ + hpEl.textContent = Math.max(0, Math.ceil(player.hp)); + foodEl.textContent = Math.ceil(player.hunger); + document.getElementById('o2').textContent = Math.ceil(player.o2); + sxEl.textContent = Math.floor(player.x/TILE); + syEl.textContent = Math.floor(player.y/TILE); + todEl.textContent = night ? 'Ночь' : 'День'; + document.getElementById('xplevel').textContent = player.level; + const lvXpNext = xpForLevel(player.level + 1); + const lvXpCur = xpForLevel(player.level); + const xpInLevel = player.xp - lvXpCur; + const xpNeeded = lvXpNext - lvXpCur; + document.getElementById('xpbar').textContent = xpInLevel + '/' + xpNeeded; + tempEl.textContent = Math.round(player.temperature) + "°C"; + worldIdEl.textContent = worldId; + if(isMultiplayer){ + document.getElementById('multiplayerStatus').style.display = 'flex'; + playerCountEl.textContent = otherPlayers.size + 1; // +1 = мы сами + } else { + document.getElementById('multiplayerStatus').style.display = 'none'; + } + } + + // Индикатор сна + if(player.sleeping){ + ctx.fillStyle = 'rgba(0,0,0,0.7)'; + ctx.fillRect(0, 0, W, H); + ctx.fillStyle = '#fff'; + ctx.font = 'bold 32px system-ui'; + ctx.textAlign = 'center'; + ctx.fillText('💤 Спим...', W/2, H/2); + ctx.font = '18px system-ui'; + ctx.fillText('Нажмите на кровать чтобы проснуться', W/2, H/2 + 40); + } + + // Рисуем дропы + // Температурный оверлей (заморозка/тепловой удар) + if (typeof player.temperature !== 'undefined' && (player.temperature < -5 || player.temperature > 35)) { + const severity = player.temperature < -5 + ? Math.abs(player.temperature + 5) / 20 + : (player.temperature - 35) / 20; + const alpha = Math.min(0.35, severity * 0.15); + if (player.temperature < -5) { + ctx.fillStyle = 'rgba(100,150,255,' + alpha + ')'; + } else { + ctx.fillStyle = 'rgba(255,100,50,' + alpha + ')'; + } + ctx.fillRect(0, 0, W, H); + } + drawDrops(ctx); + // Пикап дропов + pickupDrops(); + // Popup уровня + drawLevelUpPopup(ctx); + + // Миникарта (обновляем раз в ~4 кадра для оптимизации) + if(minimapOpen && Math.random() < 0.25){ + renderMinimap(); + } + + requestAnimationFrame(loop); + } + + requestAnimationFrame(loop); +})(); diff --git a/game3d.js b/game3d.js new file mode 100644 index 0000000..518e447 --- /dev/null +++ b/game3d.js @@ -0,0 +1,6757 @@ +// GrechkaCraft — auto-bundled from ES modules +(function() { +"use strict"; + +// === core/constants.js === +// ==================== КОНСТАНТЫ ИГРЫ ==================== + +const TILE = 40; + +// Мир +const SEA_GY = 14; // уровень воды (gy) - уменьшил для меньших водоёмов +const BEDROCK_GY = 140; // глубина бедрока (gy), чем больше - тем глубже +const GEN_MARGIN_X = 40; // запас генерации по X (в тайлах) — увеличен для плавной прогрузки + +// Физика +const GRAV = 2200; +const GRAV_WATER = 550; +const MOVE = 320; +const JUMP = 760; + +// День/ночь +const DAY_LEN = 360; // замедлил смену дня/ночи в 3 раза + +// Сохранение +const SAVE_KEY = 'minegrechka_save'; + +// Сеть +const MOVE_SEND_INTERVAL = 0.05; // 50ms = 20 раз в секунду + +// Погода +const MAX_RAINDROPS = 200; + +// Чат +const MAX_CHAT_MESSAGES = 50; + +// Голосовой чат +const VOICE_SERVER = 'wss://voicegrech.mkn8n.ru'; + +// === core/state.js === +// Все мутабельные переменные игры в одном объекте состояния +const state = { + // Константы (для доступа из модулей) + TILE, + SEA_GY, + BEDROCK_GY, + GEN_MARGIN_X, + GRAV, + GRAV_WATER, + MOVE, + JUMP, + DAY_LEN, + SAVE_KEY, + MOVE_SEND_INTERVAL, + MAX_RAINDROPS, + MAX_CHAT_MESSAGES, + VOICE_SERVER, + + // Камера + camX: 0, + camY: 0, + W: 0, + H: 0, + dpr: 1, + + // Canvas/DOM (заполняется в main.js) + gameEl: null, + canvas: null, + ctx: null, + lightC: null, + lightCtx: null, + + // День/ночь + worldTime: 0.30, // старт в полдень (0 = рассвет, 0.5+ = ночь) + isNightTime: false, + dayNightCycle: true, + + // Мультиплеер + isMultiplayer: false, + mySocketId: null, + socket: null, + voiceSocket: null, + voicePosT: 0, + + // Сервер + SERVER_URL: '', + TELEGRAM_BOT_USERNAME: '', + TELEGRAM_APP_SHORT_NAME: '', + + // Игрок + playerName: null, + worldId: null, + + // Инвентарь/UI + selected: "dirt", + showFullInventory: false, + craftOpen: false, + inventoryOpen: false, + chatOpen: false, + minimapOpen: false, + modeIdx: 0, + currentFurnaceKey: null, + + // Мир + blocksVersion: 0, + worldSeed: Math.floor(Math.random() * 1000000), + + // Погода + weatherType: "clear", + isRaining: false, + rainIntensity: 0, + weatherTimer: 0, + weatherChangeInterval: 60 + Math.random() * 120, + snowflakes: [], + lightningFlash: 0, + lightningTimer: 0, + + // Мобы/спавн + spawnT: 0, + + // Цикл + last: 0, + prevJump: false, + + // Сеть — throttle отправки позиции + lastMoveSendTime: 0, + lastSentX: 0, + lastSentY: 0, + + // Mining progress + mining: { gx: null, gy: null, progress: 0, hardness: 0 }, + + // Trade/Market + myTgId: null, + tradePanel: null, + tradeContent: null, + marketPanel: null, + marketContent: null, + + // DOM-ссылки (заполняются в main.js) + hpEl: null, + foodEl: null, + sxEl: null, + syEl: null, + todEl: null, + worldIdEl: null, + playerCountEl: null, + deathEl: null, + hotbarEl: null, + craftPanel: null, + recipesEl: null, + inventoryPanel: null, + inventoryGrid: null, + multiplayerStatus: null, + tempEl: null, + + // Игрок + player: { + x: 6 * TILE, + y: 0 * TILE, + z: 0, + w: 34, + h: 34, + d: 34, + vx: 0, + vy: 0, + vz: 0, + grounded: false, + inWater: false, + headInWater: false, + hp: 100, + hunger: 100, + o2: 100, + invuln: 0, + fallStartY: 0, + lastStepTime: 0, + sleeping: false, + inBoat: false, + armor: 0, + equippedArmor: null, + temperature: 15, + slowTimer: 0 + }, + + // Точка спавна + spawnPoint: { x: 6 * TILE, y: 0 * TILE }, + + // Инвентарь + inv: { + dirt: 6, stone: 0, sand: 0, gravel: 0, clay: 0, + wood: 0, planks: 0, ladder: 0, leaves: 0, coal: 0, + copper_ore: 0, iron_ore: 0, gold_ore: 0, diamond_ore: 0, + brick: 0, glass: 0, + tnt: 1, campfire: 0, torch: 0, + meat: 0, cooked: 0, arrow: 0, + wood_pickaxe: 0, stone_pickaxe: 0, iron_pickaxe: 0, + wood_sword: 0, stone_sword: 0, iron_sword: 0, + wood_axe: 0, stone_axe: 0, iron_axe: 0, + wood_shovel: 0, stone_shovel: 0, iron_shovel: 0, + iron_armor: 0, gold_armor: 0, + bow: 0, furnace: 0, + bed: 0, boat: 0, + iron_ingot: 0, gold_ingot: 0, copper_ingot: 0, + cobblestone: 0, + // New items + chicken_meat: 0, feather: 0, bone: 0, gunpowder: 0, + wheat: 0, bread: 0, carrot: 0, potato: 0, baked_potato: 0, + mushroom_stew: 0, + scorpion_stinger: 0, polar_fur: 0, slime_ball: 0, eagle_feather: 0, + snow: 0, ice: 0, cactus: 0, mushroom: 0, moss: 0, farmland: 0, + spruce_leaves: 0, dead_bush: 0, swamp_water: 0, + wheat_seeds: 0, wheat_stage0: 0, carrot_stage0: 0, potato_stage0: 0 + }, + + // Лодка + boat: { + x: 0, y: 0, + w: 34, h: 34, + vx: 0, vy: 0, + active: false, + inWater: false + }, + + // Ввод + inp: { up: false, down: false, left: false, right: false, jump: false, mine: false, build: false, bow: false, l: false, r: false, j: false, s: false }, + + // Мышь + mouse: { x: 0, y: 0 }, + + // Другие игроки (MP) + otherPlayers: new Map(), + + // Серверные мобы (MP) + serverMobs: new Map(), + + // Мобы + mobs: [], + + // Снаряды + projectiles: [], + + // Отслеживание изменений мира + placedBlocks: [], + removedBlocks: [], + + // Серверные изменения + serverOverrides: new Map(), + + // Чат + chatMessages: [], + + // Погода — капли + raindrops: [], + + // Облака + clouds: Array.from({ length: 10 }, () => ({ + x: Math.random() * 2000, + y: -200 - Math.random() * 260, + w: 80 + Math.random() * 120, + s: 12 + Math.random() * 20 + })), + + // Частицы + parts: [], + + // Активный TNT + activeTNT: new Set(), + + // Прочность инструментов + toolDurability: new Map(), + protections: new Map(), + + // Последние выбранные предметы + recentItems: [], + + // Активные печи + activeFurnaces: new Map(), + cropTimers: new Map(), + + // Сгенерированные колонны + generated: new Set(), + + // Изображение героя + heroImg: new Image(), + + // Сетка мира + grid: new Map(), + blocks: [], + + // In-memory save fallback + inMemorySave: null, +}; + +// === config.js === +// ==================== КОНФИГУРАЦИЯ СЕРВЕРА ==================== +// This module only sets SERVER_URL. Player name and world ID are handled in main.js +// to avoid duplicate prompts. + +const urlParams = new URLSearchParams(window.location.search); +const SERVER_URL = urlParams.get('server') || 'https://apigrech.mkn8n.ru'; + +// Защита от mixed content +if (location.protocol === 'https:' && SERVER_URL.startsWith('http://')) { + console.warn('⚠️ Mixed content warning: page is HTTPS but server URL is HTTP'); + alert('⚠️ Предупреждение: страница загружена по HTTPS, но сервер использует HTTP. Это может вызвать проблемы.'); +} + +// === ui/start-menu.js === +// ==================== START MENU ==================== + + +// Detect Telegram WebApp +const isTgWebApp = !!(window.Telegram && window.Telegram.WebApp && window.Telegram.WebApp.initData); +let tgUser = null; +let tgSaveLoaded = false; + +if (isTgWebApp) { + try { + Telegram.WebApp.ready(); + Telegram.WebApp.expand(); + tgUser = Telegram.WebApp.initDataUnsafe?.user || null; + console.log('[TG] Mini App detected, user:', tgUser?.id, tgUser?.username); + // Set player name from TG + if (tgUser && tgUser.first_name) { + const tgName = tgUser.username || tgUser.first_name; + localStorage.setItem('minegrechka_playerName', tgName); + } + } catch (e) { + console.warn('[TG] WebApp init error:', e); + } +} + +// Export TG info for other modules + + +// ==================== HELPERS ==================== + +function generateShortWorldCode() { + // Generate readable 6-char code: consonants + digits (easy to copy/share) + const c = 'bcdfghjkmnpqrstvwxyz'; + const d = '23456789'; + let code = ''; + for (let i = 0; i < 3; i++) code += c[Math.floor(Math.random() * c.length)]; + for (let i = 0; i < 3; i++) code += d[Math.floor(Math.random() * d.length)]; + return code; +} + +function showToast(msg, duration) { + duration = duration || 1800; + const t = document.createElement('div'); + t.textContent = msg; + t.style.cssText = 'position:fixed;bottom:80px;left:50%;transform:translateX(-50%);background:rgba(0,0,0,0.85);color:#2ecc71;padding:10px 24px;border-radius:10px;font:bold 16px Arial,sans-serif;z-index:99999;pointer-events:none;transition:opacity 0.4s;'; + document.body.appendChild(t); + setTimeout(() => { t.style.opacity = '0'; setTimeout(() => t.remove(), 400); }, duration); +} + +function customAlert(msg) { + const overlay = document.createElement('div'); + overlay.className = 'custom-modal-overlay'; + overlay.style.cssText = 'position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,0.6);display:flex;align-items:center;justify-content:center;z-index:100000;'; + const box = document.createElement('div'); + box.style.cssText = 'background:#C6C6C6;border:4px solid #000;padding:24px;max-width:360px;width:90%;box-shadow:4px 4px 0 #000;font-family:Courier New,monospace;'; + const text = document.createElement('div'); + text.textContent = msg; + text.style.marginBottom = '16px'; + text.style.fontWeight = 'bold'; + text.style.fontSize = '16px'; + const btn = document.createElement('button'); + btn.textContent = 'OK'; + btn.style.cssText = 'padding:8px 24px;font-family:Courier New,monospace;font-weight:bold;cursor:pointer;border:3px solid #000;background:#5A8F3C;color:#fff;box-shadow:2px 2px 0 #000;'; + btn.onclick = () => overlay.remove(); + box.appendChild(text); + box.appendChild(btn); + overlay.appendChild(box); + document.body.appendChild(overlay); +} + +// ==================== MAIN START MENU ==================== + +// Minecraft-style CSS for the start menu +const mcCSS = ` + .mc-overlay { position:fixed;top:0;left:0;width:100%;height:100%;z-index:99999; + display:flex;align-items:center;justify-content:center;font-family:'Courier New',monospace; + image-rendering:pixelated; } + .mc-bg { position:absolute;inset:0;background:#000;opacity:0.75; } + .mc-dirt { position:absolute;bottom:0;left:0;right:0;height:40%; + background:repeating-linear-gradient(0deg,#8B6914 0px,#8B6914 2px,#7A5B12 2px,#7A5B12 4px);opacity:0.3; } + .mc-box { position:relative;z-index:1;background:#C6C6C6;border:4px solid #000; + padding:0;max-width:420px;width:92%;box-shadow:4px 4px 0 #000;max-height:90vh;display:flex;flex-direction:column; } + .mc-titlebar { background:#1a1a2e;padding:12px 16px;text-align:center; + border-bottom:4px solid #000; } + .mc-title { font-size:24px;font-weight:bold;color:#FFAA00;text-shadow:2px 2px 0 #000; + letter-spacing:2px; } + .mc-subtitle { font-size:13px;color:#AAA;margin-top:4px; } + .mc-body { padding:16px;background:#C6C6C6;max-height:80vh;overflow-y:auto;-webkit-overflow-scrolling:touch; } + .mc-btn { display:block;width:100%;padding:10px 16px;margin-bottom:8px; + font-family:'Courier New',monospace;font-size:16px;font-weight:bold; + cursor:pointer;text-align:center;border:3px solid #000; + image-rendering:pixelated;box-shadow:3px 3px 0 #000; + transition:transform 0.05s,box-shadow 0.05s; } + .mc-btn:active { transform:translate(2px,2px);box-shadow:1px 1px 0 #000; } + .mc-btn-green { background:#5A8F3C;color:#E0E0E0;border-color:#3A5F1C;text-shadow:1px 1px 0 #222; } + .mc-btn-green:hover { background:#6DAF4E; } + .mc-btn-blue { background:#3C5F9E;color:#E0E0E0;border-color:#2A4070;text-shadow:1px 1px 0 #222; } + .mc-btn-blue:hover { background:#4B73BE; } + .mc-btn-purple { background:#7B3FA0;color:#E0E0E0;border-color:#5A2C78;text-shadow:1px 1px 0 #222; } + .mc-btn-purple:hover { background:#9555BE; } + .mc-btn-orange { background:#B86E00;color:#E0E0E0;border-color:#8A5200;text-shadow:1px 1px 0 #222; } + .mc-btn-orange:hover { background:#DA8500; } + .mc-btn-red { background:#9E2B2B;color:#E0E0E0;border-color:#6E1B1B;text-shadow:1px 1px 0 #222; } + .mc-btn-red:hover { background:#BE3B3B; } + .mc-btn-gray { background:#555;color:#AAA;border-color:#333;text-shadow:1px 1px 0 #111; } + .mc-btn-gray:hover { background:#666;color:#DDD; } + .mc-btn-outline { background:transparent;color:#555;border-color:#555; + text-shadow:none;box-shadow:2px 2px 0 #333; } + .mc-btn-outline:hover { background:#DDD;color:#222; } + .mc-input { width:100%;padding:8px 12px;font-family:'Courier New',monospace; + font-size:16px;background:#FFF;border:3px solid #000;color:#222; + box-shadow:inset 2px 2px 0 #999;margin:4px 0;box-sizing:border-box; } + .mc-input:focus { outline:none;border-color:#FFAA00; } + .mc-label { font-size:13px;color:#444;font-weight:bold;margin:8px 0 4px; } + .mc-divider { border:none;border-top:2px solid #999;margin:12px 0; } + .mc-friend-row { display:flex;justify-content:space-between;align-items:center; + padding:6px 8px;margin-bottom:4px;background:#E8E8E8;border:2px solid #999; + box-shadow:2px 2px 0 #999; } + .mc-friend-btn { padding:4px 10px;font-family:'Courier New',monospace; + font-size:13px;font-weight:bold;cursor:pointer;border:2px solid #000; + box-shadow:1px 1px 0 #000; } + .mc-friend-btn:active { transform:translate(1px,1px);box-shadow:none; } + .mc-friend-btn-green { background:#5A8F3C;color:#E0E0E0; } + .mc-friend-btn-red { background:#9E2B2B;color:#E0E0E0; } + .mc-checkbox-row { display:flex;align-items:center;gap:8px;font-size:13px;color:#444;cursor:pointer; } + .mc-checkbox { width:18px;height:18px;accent-color:#5A8F3C; } +`; + +function showStartMenu() { + return new Promise(async (resolve) => { + const urlParams = new URLSearchParams(window.location.search); + const worldParam = urlParams.get('world'); + const tgStartParam = (isTgWebApp && Telegram.WebApp.initDataUnsafe?.start_param) + ? Telegram.WebApp.initDataUnsafe.start_param.trim() + : null; + + // If world is in URL or TG start param — skip menu, auto-join + if ((worldParam && worldParam.trim() !== '') || tgStartParam) { + const worldId = (worldParam && worldParam.trim()) || tgStartParam; + console.log('[Menu] Joining world from URL/startParam:', worldId); + + // Set player name from TG or localStorage or default + if (!state.playerName) { + if (isTgWebApp && tgUser) { + state.playerName = tgUser.username || tgUser.first_name || 'Игрок'; + } else { + state.playerName = localStorage.getItem('minegrechka_playerName') || 'Игрок'; + } + localStorage.setItem('minegrechka_playerName', state.playerName); + } + + resolve(worldId); + return; + } + + // Inject CSS + const styleEl = document.createElement('style'); + styleEl.textContent = mcCSS; + document.head.appendChild(styleEl); + + // Build overlay + const overlay = document.createElement('div'); + overlay.className = 'mc-overlay'; + overlay.id = 'startMenu'; + overlay.innerHTML = '
'; + + const box = document.createElement('div'); + box.className = 'mc-box'; + + // Title bar + const titleBar = document.createElement('div'); + titleBar.className = 'mc-titlebar'; + titleBar.innerHTML = '
⛏️ GrechkaCraft
' + + '
' + (isTgWebApp ? ('Привет, ' + (tgUser?.first_name || 'Игрок') + '!') : 'Voxel-мир в браузере') + '
'; + box.appendChild(titleBar); + + const body = document.createElement('div'); + body.className = 'mc-body'; + + // Mutable worldId holder + let selectedWorldId = null; + + // === Buttons === + + // 🌍 New World + const btnNew = document.createElement('button'); + btnNew.className = 'mc-btn mc-btn-green'; + btnNew.textContent = '🌍 Новый мир'; + btnNew.onclick = () => { + selectedWorldId = generateShortWorldCode(); + overlay.remove(); + styleEl.remove(); + resolve(selectedWorldId); + }; + body.appendChild(btnNew); + + // 🔗 Join by code + const btnJoin = document.createElement('button'); + btnJoin.className = 'mc-btn mc-btn-blue'; + btnJoin.textContent = '🔗 Вступить по коду'; + btnJoin.onclick = () => { + body.innerHTML = ''; + const lbl = document.createElement('div'); + lbl.className = 'mc-label'; + lbl.textContent = 'Код мира:'; + body.appendChild(lbl); + const codeInput = document.createElement('input'); + codeInput.className = 'mc-input'; + codeInput.type = 'text'; + codeInput.placeholder = 'bkh237'; + codeInput.maxLength = 12; + body.appendChild(codeInput); + const btnGo = document.createElement('button'); + btnGo.className = 'mc-btn mc-btn-blue'; + btnGo.textContent = 'Войти →'; + btnGo.onclick = () => { + const code = codeInput.value.trim().toLowerCase(); + if (code.length >= 3) { + selectedWorldId = code; + overlay.remove(); + styleEl.remove(); + resolve(selectedWorldId); + } + }; + body.appendChild(btnGo); + const btnBack = document.createElement('button'); + btnBack.className = 'mc-btn mc-btn-gray'; + btnBack.textContent = '← Назад'; + btnBack.onclick = () => { overlay.remove(); styleEl.remove(); showStartMenu().then(resolve); }; + body.appendChild(btnBack); + codeInput.focus(); + codeInput.addEventListener('keydown', (e) => { if (e.key === 'Enter') btnGo.click(); }); + }; + body.appendChild(btnJoin); + + // 💾 Continue saved game + const hasLocalSave = !!localStorage.getItem(state.SAVE_KEY || 'minegrechka_save'); + if (isTgWebApp || hasLocalSave) { + const btnHistory = document.createElement('button'); + btnHistory.className = 'mc-btn mc-btn-purple'; + btnHistory.textContent = '💾 Продолжить игру'; + btnHistory.onclick = async () => { + if (isTgWebApp && tgUser) { + try { + const resp = await fetch(state.SERVER_URL + '/api/tg/save?tg_id=' + tgUser.id); + const data = await resp.json(); + if (data.ok && data.world_id) { + selectedWorldId = data.world_id; + tgSaveLoaded = true; + overlay.remove(); + styleEl.remove(); + resolve(selectedWorldId); + return; + } + } catch (e) { console.warn('[TG] Load save failed:', e); } + } + if (hasLocalSave) { + // Continue with a new world code (the save will be loaded separately by initDB/loadGame) + selectedWorldId = generateShortWorldCode(); + overlay.remove(); + styleEl.remove(); + resolve(selectedWorldId); + return; + } + customAlert('Сохранений не найдено'); + }; + body.appendChild(btnHistory); + } + + // === TG-only buttons === + if (isTgWebApp && window.Telegram && Telegram.WebApp.switchInlineQuery) { + // 📤 Invite friends + const btnInvite = document.createElement('button'); + btnInvite.className = 'mc-btn mc-btn-outline'; + btnInvite.style.marginTop = '16px'; + btnInvite.textContent = '📤 Пригласить друзей'; + btnInvite.onclick = () => { + const code = selectedWorldId || generateShortWorldCode(); + const url = 'https://t.me/' + state.TELEGRAM_BOT_USERNAME + '/app?startapp=' + encodeURIComponent(code); + if (Telegram.WebApp && Telegram.WebApp.openTelegramLink) { + Telegram.WebApp.openTelegramLink('https://t.me/share/url?url=' + encodeURIComponent(url) + '&text=' + encodeURIComponent('🏗️ Заходи в GrechkaCraft! Мир: ' + code)); + } else { + navigator.clipboard.writeText(url).then(() => showToast('📋 Скопировано!')).catch(() => showToast(url)); + } + }; + body.appendChild(btnInvite); + + // 👥 Friends + const btnFriends = document.createElement('button'); + btnFriends.className = 'mc-btn mc-btn-orange'; + btnFriends.style.marginTop = '8px'; + btnFriends.textContent = '👥 Друзья'; + btnFriends.onclick = async () => { + try { + const resp = await fetch(state.SERVER_URL + '/api/tg/friends?tg_id=' + tgUser.id); + const data = await resp.json(); + body.innerHTML = ''; + + // Back button at top + const btnBackTop = document.createElement('button'); + btnBackTop.className = 'mc-btn mc-btn-gray'; + btnBackTop.textContent = '← Назад'; + btnBackTop.style.marginBottom = '12px'; + btnBackTop.onclick = () => { overlay.remove(); styleEl.remove(); showStartMenu().then(resolve); }; + body.appendChild(btnBackTop); + + // Nickname section + if (data.nickname) { + const nickDiv = document.createElement('div'); + nickDiv.className = 'mc-friend-row'; + nickDiv.innerHTML = '🔗 Твой ник: ' + data.nickname + ''; + nickDiv.style.background = '#D5E8C5'; + body.appendChild(nickDiv); + } else { + const nickLabel = document.createElement('div'); + nickLabel.className = 'mc-label'; + nickLabel.style.color = '#9E2B2B'; + nickLabel.textContent = '⚡ Задай ник, чтобы друзья могли тебя найти:'; + body.appendChild(nickLabel); + const nickRow = document.createElement('div'); + nickRow.style.display = 'flex'; + nickRow.style.gap = '4px'; + nickRow.style.marginBottom = '8px'; + const nickInput = document.createElement('input'); + nickInput.className = 'mc-input'; + nickInput.style.flex = '1'; + nickInput.type = 'text'; + nickInput.maxLength = 16; + nickInput.placeholder = 'Твой ник'; + const nickBtn = document.createElement('button'); + nickBtn.className = 'mc-btn mc-btn-green'; + nickBtn.style.width = 'auto'; + nickBtn.style.marginBottom = '0'; + nickBtn.style.padding = '8px 16px'; + nickBtn.textContent = '✓'; + nickBtn.onclick = async () => { + const n = nickInput.value.trim().toLowerCase(); + if (!n || n.length < 2) { showToast('❌ Минимум 2 символа'); return; } + const check = await fetch(state.SERVER_URL + '/api/nick/check?nick=' + encodeURIComponent(n)); + const cd = await check.json(); + if (!cd.available) { showToast('❌ Ник занят'); return; } + const setResp = await fetch(state.SERVER_URL + '/api/nick/set', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ tg_id: tgUser.id, nickname: n }) + }); + const sd = await setResp.json(); + if (sd.ok) { showToast('✅ Ник: ' + sd.nickname); btnFriends.onclick(); } else { showToast('❌ Ошибка'); } + }; + nickRow.appendChild(nickInput); + nickRow.appendChild(nickBtn); + body.appendChild(nickRow); + } + + // Friends list + if (data.friends && data.friends.length) { + const listLabel = document.createElement('div'); + listLabel.className = 'mc-label'; + listLabel.textContent = '👥 Друзья:'; + body.appendChild(listLabel); + for (const f of data.friends) { + const fDiv = document.createElement('div'); + fDiv.className = 'mc-friend-row'; + const statusDot = f.online ? '🟢' : '⚫'; + let info = statusDot + ' ' + f.nickname + ''; + if (f.online && f.world_id) info += ' — мир ' + f.world_id; + const fInfo = document.createElement('div'); + fInfo.innerHTML = info; + fDiv.appendChild(fInfo); + if (f.online && f.world_id) { + const joinBtn = document.createElement('button'); + joinBtn.className = 'mc-friend-btn mc-friend-btn-green'; + joinBtn.textContent = '🎮 Вступить'; + joinBtn.onclick = () => { + selectedWorldId = f.world_id; + overlay.remove(); + styleEl.remove(); + resolve(selectedWorldId); + }; + fDiv.appendChild(joinBtn); + } + body.appendChild(fDiv); + } + } else if (data.friends && !data.friends.length) { + const noFriends = document.createElement('div'); + noFriends.className = 'mc-label'; + noFriends.style.color = '#888'; + noFriends.textContent = 'Пока нет друзей'; + body.appendChild(noFriends); + } + + // Pending friend requests + if (data.pending && data.pending.length) { + const pLabel = document.createElement('div'); + pLabel.className = 'mc-label'; + pLabel.style.color = '#B86E00'; + pLabel.textContent = '📨 Запросы в друзья:'; + body.appendChild(pLabel); + for (const p of data.pending) { + const pItem = document.createElement('div'); + pItem.className = 'mc-friend-row'; + const span = document.createElement('span'); + span.textContent = p.from; + pItem.appendChild(span); + const btns = document.createElement('div'); + btns.style.display = 'flex'; + btns.style.gap = '4px'; + const acceptBtn = document.createElement('button'); + acceptBtn.className = 'mc-friend-btn mc-friend-btn-green'; + acceptBtn.textContent = '✓'; + acceptBtn.onclick = async () => { + const r = await fetch(state.SERVER_URL + '/api/friends/accept', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ tg_id: tgUser.id, request_id: p.id }) + }); + const d = await r.json(); + if (d.ok) { showToast('✅ Друг добавлен!'); btnFriends.onclick(); } else { showToast('❌ Ошибка'); } + }; + const declineBtn = document.createElement('button'); + declineBtn.className = 'mc-friend-btn mc-friend-btn-red'; + declineBtn.textContent = '✕'; + declineBtn.onclick = async () => { + await fetch(state.SERVER_URL + '/api/friends/decline', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ tg_id: tgUser.id, request_id: p.id }) + }); + showToast('Отклонено'); + btnFriends.onclick(); + }; + btns.appendChild(acceptBtn); + btns.appendChild(declineBtn); + pItem.appendChild(btns); + body.appendChild(pItem); + } + } + + // Add friend + body.appendChild(document.createElement('hr')); + const addLabel = document.createElement('div'); + addLabel.className = 'mc-label'; + addLabel.textContent = '➕ Добавить друга по нику:'; + body.appendChild(addLabel); + const addRow = document.createElement('div'); + addRow.style.display = 'flex'; + addRow.style.gap = '4px'; + const addInput = document.createElement('input'); + addInput.className = 'mc-input'; + addInput.style.flex = '1'; + addInput.type = 'text'; + addInput.maxLength = 16; + addInput.placeholder = 'Ник друга'; + const addBtn = document.createElement('button'); + addBtn.className = 'mc-btn mc-btn-blue'; + addBtn.style.width = 'auto'; + addBtn.style.marginBottom = '0'; + addBtn.style.padding = '8px 16px'; + addBtn.textContent = '+'; + addBtn.onclick = async () => { + const nick = addInput.value.trim().toLowerCase(); + if (!nick || nick.length < 2) { showToast('❌ Минимум 2 символа'); return; } + const r = await fetch(state.SERVER_URL + '/api/friends/request', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ tg_id: tgUser.id, nickname: nick }) + }); + const d = await r.json(); + if (d.ok) { showToast(d.message === 'Already friends' ? '✅ Уже друзья!' : '📨 Запрос отправлен!'); } + else { showToast('❌ ' + (d.error || 'Ошибка')); } + }; + addRow.appendChild(addInput); + addRow.appendChild(addBtn); + body.appendChild(addRow); + + // Privacy checkboxes + const settings = data.settings || { allow_requests: 1, notify_online: 1 }; + const settingsDiv = document.createElement('div'); + settingsDiv.style.marginTop = '12px'; + const reqLabel = document.createElement('label'); + reqLabel.className = 'mc-checkbox-row'; + const reqCb = document.createElement('input'); + reqCb.className = 'mc-checkbox'; + reqCb.type = 'checkbox'; + reqCb.checked = settings.allow_requests; + reqCb.onchange = async () => { + await fetch(state.SERVER_URL + '/api/friends/settings', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + tg_id: tgUser.id, + allow_requests: reqCb.checked ? 1 : 0, + notify_online: settings.notify_online + }) + }); + }; + reqLabel.appendChild(reqCb); + reqLabel.appendChild(document.createTextNode(' Запросы в друзья')); + settingsDiv.appendChild(reqLabel); + body.appendChild(settingsDiv); + } catch (e) { showToast('❌ Ошибка загрузки друзей'); console.error(e); } + }; + body.appendChild(btnFriends); + } + + // Player name input — always visible, with Play button + { + const nameDivider = document.createElement('hr'); + nameDivider.className = 'mc-divider'; + body.appendChild(nameDivider); + const nameLabel = document.createElement('div'); + nameLabel.className = 'mc-label'; + nameLabel.textContent = 'Твоё имя:'; + body.appendChild(nameLabel); + const nameRow = document.createElement('div'); + nameRow.style.cssText = 'display:flex;gap:6px;'; + const nameInput = document.createElement('input'); + nameInput.className = 'mc-input'; + nameInput.style.flex = '1'; + nameInput.type = 'text'; + nameInput.placeholder = 'Игрок'; + nameInput.value = state.playerName || localStorage.getItem('minegrechka_playerName') || (tgUser ? (tgUser.username || tgUser.first_name || '') : ''); + nameInput.maxLength = 20; + nameRow.appendChild(nameInput); + + const playBtn = document.createElement('button'); + playBtn.className = 'mc-btn mc-btn-green'; + playBtn.style.cssText = 'width:auto;margin-bottom:0;padding:10px 20px;white-space:nowrap;'; + playBtn.textContent = '▶ Играть'; + playBtn.onclick = () => { + const name = nameInput.value.trim() || 'Игрок'; + state.playerName = name; + localStorage.setItem('minegrechka_playerName', name); + // If no worldId yet, generate one and start + if (!selectedWorldId && !state.worldId) { + selectedWorldId = generateShortWorldCode(); + } + overlay.remove(); + styleEl.remove(); + resolve(selectedWorldId || state.worldId); + }; + nameRow.appendChild(playBtn); + body.appendChild(nameRow); + + // Allow Enter key to start game + nameInput.addEventListener('keydown', (e) => { + if (e.key === 'Enter') playBtn.click(); + }); + + // Auto-focus input on mobile + setTimeout(() => nameInput.focus(), 100); + } + + box.appendChild(body); + overlay.appendChild(box); + document.body.appendChild(overlay); + + // Set default player name if still empty + if (!state.playerName) { + state.playerName = localStorage.getItem('minegrechka_playerName') || 'Игрок'; + localStorage.setItem('minegrechka_playerName', state.playerName); + } + + // Auto-load TG save info (background fetch) + if (isTgWebApp && tgUser && !worldParam) { + fetch(state.SERVER_URL + '/api/tg/save?tg_id=' + tgUser.id) + .then(r => r.json()) + .then(data => { + if (data.ok && data.world_id) { + // could update UI but menu is already shown + } + }) + .catch(() => {}); + } + }); +} + +// === core/canvas.js === +// ==================== ХОЛСТ 3D (WebGL) — GrechkaCraft v2 ==================== +// Тот же контракт, что canvas.js: выставляет state.W/H, хранит canvas. +// WebGL-контекст создаёт render3d (лениво, при первом кадре). + + +function initCanvas() { + const gameEl = document.getElementById('game'); + const canvas = document.getElementById('c'); + + const dpr = Math.max(1, window.devicePixelRatio || 1); + + function resize() { + state.W = gameEl.clientWidth; + state.H = gameEl.clientHeight; + } + + window.addEventListener('resize', resize); + resize(); + + state.gameEl = gameEl; + state.canvas = canvas; + state.ctx = null; + state.lightC = null; + state.lightCtx = null; + state.dpr = dpr; +} + +function getCanvas() { return state.canvas; } +function getCtx() { return null; } +function getLightC() { return null; } +function getLightCtx() { return null; } + +// === data/blocks.js === +const BLOCKS = { + air: { n:'Воздух', solid:false, hardness:0 }, + grass: { n:'Трава', c:'#7cfc00', solid:true, hardness:3, toolType:'shovel' }, + dirt: { n:'Грязь', c:'#8b4513', solid:true, hardness:3, toolType:'shovel' }, + stone: { n:'Камень', c:'#7f8c8d', solid:true, hardness:6, toolType:'pickaxe' }, + sand: { n:'Песок', c:'#f4d06f', solid:true, hardness:2, toolType:'shovel' }, + gravel: { n:'Гравий', c:'#95a5a6', solid:true, hardness:3, toolType:'shovel' }, + clay: { n:'Глина', c:'#74b9ff', solid:true, hardness:3, toolType:'shovel' }, + wood: { n:'Дерево', c:'#d35400', solid:true, hardness:4, toolType:'axe' }, + planks: { n:'Доски', c:'#e67e22', solid:true, hardness:3, toolType:'axe' }, + ladder: { n:'Лестница',c:'#d35400', solid:false, climbable:true, hardness:1, toolType:null }, + leaves: { n:'Листва', c:'#2ecc71', solid:true, hardness:1, toolType:'axe', minTool:null }, + glass: { n:'Стекло', c:'rgba(200,240,255,0.25)', solid:true, alpha:0.55, hardness:1, toolType:null }, + water: { n:'Вода', c:'rgba(52,152,219,0.55)', solid:false, fluid:true, hardness:0 }, + coal: { n:'Уголь', c:'#2c3e50', solid:true, hardness:8, toolType:'pickaxe', minTool:'wood' }, + copper_ore:{ n:'Медь', c:'#e17055', solid:true, hardness:10, toolType:'pickaxe', minTool:'wood' }, + iron_ore: { n:'Железо', c:'#dcdde1', solid:true, hardness:12, toolType:'pickaxe', minTool:'stone' }, + iron_armor:{ n:'Железная броня', c:'#95a5a6', solid:false, armor:0.5, hardness:0 }, + gold_ore: { n:'Золото', c:'#f1c40f', solid:true, hardness:15, toolType:'pickaxe', minTool:'stone' }, + diamond_ore:{n:'Алмаз', c:'#00a8ff', solid:true, hardness:20, toolType:'pickaxe', minTool:'iron' }, + brick: { n:'Кирпич', c:'#c0392b', solid:true, hardness:8, toolType:'pickaxe' }, + tnt: { n:'TNT', c:'#e74c3c', solid:true, explosive:true, hardness:1, toolType:null }, + campfire: { n:'Костёр', c:'#e67e22', solid:true, lightRadius:280, hardness:2, toolType:null }, + torch: { n:'Факел', c:'#f9ca24', solid:true, lightRadius:220, hardness:1, toolType:null }, + bedrock: { n:'Бедрок', c:'#2d3436', solid:true, unbreakable:true, hardness:Infinity }, + flower: { n:'Цветок', c:'#ff4757', solid:false, decor:true, hardness:0 }, + bed: { n:'Кровать', c:'#e91e63', solid:true, bed:true, hardness:2, toolType:'axe' }, + boat: { n:'Лодка', c:'#8B4513', solid:false, hardness:0 }, + furnace: { n:'Печь', c:'#696969', solid:true, smelting:true, hardness:8, toolType:'pickaxe', minTool:'wood' }, + cobblestone: { n:'Булыжник', c:'#7f8c8d', solid:true, hardness:6, toolType:'pickaxe' }, + flag: { n:'Флаг', c:'#e74c3c', solid:true, hardness:1, toolType:'axe', protectionRadius:10 }, + // === BIOME BLOCKS === + snow: { n:'Снег', c:'#ecf0f1', solid:true, hardness:1, toolType:'shovel' }, + ice: { n:'Лёд', c:'#74b9ff', solid:true, hardness:1, slip:true, toolType:'pickaxe' }, + cactus: { n:'Кактус', c:'#27ae60', solid:true, hardness:1, hurt:true, toolType:null }, + mushroom: { n:'Гриб', c:'#e74c3c', solid:false, decor:true, hardness:0 }, + moss: { n:'Мох', c:'#0a6640', solid:true, hardness:1, toolType:null }, + swamp_water:{ n:'Болотная вода', c:'rgba(100,120,40,0.6)', solid:false, fluid:true, poison:true, hardness:0 }, + farmland: { n:'Грядка', c:'#8B6914', solid:true, hardness:1, farmable:true, toolType:'shovel' }, + dead_bush: { n:'Сухой куст', c:'#b2bec3', solid:false, decor:true, hardness:0 }, + spruce_leaves:{ n:'Ель', c:'#0a6640', solid:true, hardness:1, toolType:'axe' }, + // === CROP STAGES === + wheat_stage0:{ n:'Росток пшеницы', c:'#a8e6a0', solid:false, decor:true, hardness:0, growthStage:0, growthTime:30, growsTo:'wheat_stage1' }, + wheat_stage1:{ n:'Пшеница', c:'#7dcea0', solid:false, decor:true, hardness:0, growthStage:1, growthTime:30, growsTo:'wheat_stage2' }, + wheat_stage2:{ n:'Пшеница', c:'#b8d730', solid:false, decor:true, hardness:0, growthStage:2, growthTime:30, growsTo:'wheat_stage3' }, + wheat_stage3:{ n:'Пшеница', c:'#f1c40f', solid:false, decor:true, hardness:0, harvestable:true, harvestItem:'wheat', harvestQty:2 }, + carrot_stage0:{ n:'Росток моркови', c:'#a8e6a0', solid:false, decor:true, hardness:0, growthStage:0, growthTime:30, growsTo:'carrot_stage1' }, + carrot_stage1:{ n:'Морковь', c:'#f0c27a', solid:false, decor:true, hardness:0, growthStage:1, growthTime:30, growsTo:'carrot_stage2' }, + carrot_stage2:{ n:'Морковь', c:'#e8a040', solid:false, decor:true, hardness:0, growthStage:2, growthTime:30, growsTo:'carrot_stage3' }, + carrot_stage3:{ n:'Морковь', c:'#e67e22', solid:false, decor:true, hardness:0, harvestable:true, harvestItem:'carrot', harvestQty:3 }, + potato_stage0:{ n:'Росток картофеля', c:'#a8e6a0', solid:false, decor:true, hardness:0, growthStage:0, growthTime:30, growsTo:'potato_stage1' }, + potato_stage1:{ n:'Картофель', c:'#c8b888', solid:false, decor:true, hardness:0, growthStage:1, growthTime:30, growsTo:'potato_stage2' }, + potato_stage2:{ n:'Картофель', c:'#bfaa78', solid:false, decor:true, hardness:0, growthStage:2, growthTime:30, growsTo:'potato_stage3' }, + potato_stage3:{ n:'Картофель', c:'#dfe6e9', solid:false, decor:true, hardness:0, harvestable:true, harvestItem:'potato', harvestQty:2 }, +}; + +// === world/world-storage3d.js === +// ==================== ХРАНИЛИЩЕ МИРА 3D — GrechkaCraft v3 ==================== +// Ключ блока: "x,y,z". Единый источник для рендера, физики, сети и сейвов. +// Мир по всем трём осям: X — вперёд, Y — вверх, Z — вбок (глубина мира). + + + +const grid = state.grid; // Map: "x,y,z" => { gx, gy, gz, t, dead } +const blocks = state.blocks; // Array для перебора/рендера + +function k3(gx, gy, gz) { return gx + ',' + gy + ',' + gz; } + +function getBlock(gx, gy, gz) { + const b = grid.get(k3(gx, gy, gz)); + if (b && b.dead) return null; + return b || null; +} + +function hasBlock(gx, gy, gz) { return grid.has(k3(gx, gy, gz)); } + +function isSolid(gx, gy, gz) { + const b = getBlock(gx, gy, gz); + if (!b) return false; + const def = BLOCKS[b.t]; + return !!def.solid && !def.fluid && !def.decor && !def.climbable; +} + +// Непрозрачный ли блок (для отсечения внутренних граней не используется — мы рендерим кубы) +function isOpaque(gx, gy, gz) { + const b = getBlock(gx, gy, gz); + if (!b) return false; + const def = BLOCKS[b.t]; + return !!def.solid && !def.fluid && !def.decor && !def.climbable; +} + +function setBlock(gx, gy, gz, t, isPlayerPlaced = false) { + const key = k3(gx, gy, gz); + if (grid.has(key)) return false; + const b = { gx, gy, gz, t, dead: false, active: false, fuse: 0 }; + grid.set(key, b); + blocks.push(b); + if (isPlayerPlaced) { + state.placedBlocks.push({ gx, gy, gz, t }); + } + state.blocksVersion = (state.blocksVersion || 0) + 1; + return true; +} + +function removeBlock(gx, gy, gz) { + const key = k3(gx, gy, gz); + const b = grid.get(key); + if (!b) return null; + if (BLOCKS[b.t].unbreakable) return null; + grid.delete(key); + b.dead = true; + const wasPlayerPlaced = state.placedBlocks.some(pb => pb.gx === gx && pb.gy === gy && pb.gz === gz); + if (wasPlayerPlaced) { + state.placedBlocks = state.placedBlocks.filter(pb => !(pb.gx === gx && pb.gy === gy && pb.gz === gz)); + } else { + state.removedBlocks.push({ gx, gy, gz }); + } + state.blocksVersion = (state.blocksVersion || 0) + 1; + return b; +} + +// === world/generation3d.js === +// ==================== ГЕНЕРАЦИЯ 3D — GrechkaCraft v3 ==================== +// Объёмный мир: столбцы (x,z), рельеф из 2D-шума, пещеры, руды, растительность. +// Та же система биомов, что в 2D-игре, но по двум координатам. + + + + +// Радиус мира по Z — насколько далеко вбок генерируем вокруг игрока +const WORLD_DEPTH = 20; // полу-ширина: z от -20 до +20 +const CHUNK = 8; // шаг генерации + +// ========== ШУМ (детерминированный, от worldSeed) ========== +function hash2(x, z) { + let h = x * 374761393 + z * 668265263 + state.worldSeed * 1274126177; + h = (h ^ (h >> 13)) * 1274126177; + return ((h ^ (h >> 16)) >>> 0) / 4294967295; +} + +function smooth(t) { return t * t * (3 - 2 * t); } + +function valueNoise2(x, z, scale) { + const fx = x / scale, fz = z / scale; + const x0 = Math.floor(fx), z0 = Math.floor(fz); + const tx = smooth(fx - x0), tz = smooth(fz - z0); + const a = hash2(x0, z0), b = hash2(x0 + 1, z0); + const c = hash2(x0, z0 + 1), d = hash2(x0 + 1, z0 + 1); + return (a * (1 - tx) + b * tx) * (1 - tz) + (c * (1 - tx) + d * tx) * tz; +} + +function fbm2(x, z, octaves = 4) { + let sum = 0, amp = 0.5, freq = 1, norm = 0; + for (let i = 0; i < octaves; i++) { + sum += valueNoise2(x * freq, z * freq, 1) * amp; + norm += amp; + amp *= 0.5; + freq *= 2; + } + return sum / norm; +} + +// ========== БИОМЫ (те же пять, что в 2D) ========== +const BIOMES = { + plains: { name:'Равнина', surface:'grass', subsurface:'dirt', trees:true, treeChance:0.11 }, + desert: { name:'Пустыня', surface:'sand', subsurface:'sand', trees:false, treeChance:0 }, + tundra: { name:'Тундра', surface:'snow', subsurface:'dirt', trees:true, treeChance:0.05 }, + swamp: { name:'Болото', surface:'moss', subsurface:'dirt', trees:true, treeChance:0.09 }, + mountains: { name:'Горы', surface:'stone', subsurface:'stone', trees:false, treeChance:0 }, +}; + +function getBiome(gx, gz) { + const s = state.worldSeed; + const temp = fbm2(gx * 0.6, gz * 0.6 + 11, 3) * 0.5 + Math.sin(gx * 0.003 + s * 0.01) * 0.25 + 0.4; + const humid = fbm2(gx * 0.5 + 500, gz * 0.5 + 700, 3) * 0.5 + Math.cos(gx * 0.006 + s * 0.02) * 0.2 + 0.4; + const mt = fbm2(gx * 0.25 + 900, gz * 0.25 + 300, 3); + if (mt > 0.78) return 'mountains'; + if (temp > 0.66) return 'desert'; + if (temp < 0.34) return 'tundra'; + if (humid > 0.66) return 'swamp'; + return 'plains'; +} + +const biomeCache = new Map(); +function getCachedBiome(gx, gz) { + const cx = Math.floor(gx / CHUNK), cz = Math.floor(gz / CHUNK); + const key = cx + ',' + cz; + if (!biomeCache.has(key)) biomeCache.set(key, getBiome(cx * CHUNK, cz * CHUNK)); + return biomeCache.get(key); +} + +// ========== РЕЛЬЕФ ========== +// Высота поверхности в колонке (x,z). Одна и та же функция на сервере и клиенте. +function surfaceGyAt(gx, gz) { + const biome = getCachedBiome(gx, gz); + const n1 = Math.sin(gx * 0.025 + state.worldSeed * 0.001) * 8; + const n2 = Math.sin(gz * 0.021 - state.worldSeed * 0.0015) * 7; + const n3 = Math.sin((gx + gz) * 0.012 + state.worldSeed * 0.002) * 10; + const n4 = fbm2(gx * 0.5, gz * 0.5, 3) * 9; + let h; + switch (biome) { + case 'desert': h = 8 + n1 * 0.5 + n3 * 0.3 + n4 * 0.2; break; + case 'mountains': h = 16 + n3 * 1.1 + n4 * 1.2; break; + case 'tundra': h = 9 + n1 * 0.6 + n3 * 0.5 + n4 * 0.4; break; + case 'swamp': h = 4 + n1 * 0.4 + n2 * 0.6 + n4 * 0.3; break; + default: h = 10 + n1 * 0.7 + n2 * 0.7 + n3 * 0.4 + n4 * 0.4; + } + return Math.max(2, Math.min(BEDROCK_GY - 12, Math.round(h))); +} + +function seaLevel() { return SEA_GY; } + +// ========== ПЕЩЕРЫ ========== +function inCave(gx, gy, gz) { + if (gy < 3) return false; + const c1 = fbm2(gx * 0.9 + 11, gz * 0.9 + gy * 1.7, 2); + const c2 = fbm2(gx * 0.9 - 40, gz * 0.9 + gy * 1.7 + 90, 2); + // две «трубки» шума: пересечение даёт объёмные полости + return c1 > 0.62 && c2 > 0.60 && gy < surfaceGyAt(gx, gz) - 3; +} + +// ========== РУДЫ ========== +function oreAt(gx, gy, gz) { + if (gy < 2) return null; + const depth = gy / BEDROCK_GY; + const r = hash2(gx * 7 + gy, gz * 13); + const r2 = hash2(gx * 3 - gy, gz * 5 + 17); + if (depth < 0.30 && r > 0.982) return 'coal'; + if (depth < 0.26 && r > 0.990 && r2 > 0.6) return 'copper_ore'; + if (depth < 0.20 && r > 0.988 && r2 > 0.4) return 'iron_ore'; + if (depth < 0.13 && r > 0.994) return 'gold_ore'; + if (depth < 0.09 && r > 0.9965) return 'diamond_ore'; + return null; +} + +// ========== ДЕРЕВО (по XY, заполняет и Z) ========== +function growTree(gx, gy, gz, biome) { + const def = BIOMES[biome]; + if (!def || !def.trees) return; + if (hash2(gx * 31, gz * 17) > def.treeChance) return; + const h = 4 + Math.floor(hash2(gx * 5, gz * 11) * 3); + const leafType = biome === 'tundra' || biome === 'swamp' ? 'spruce_leaves' : 'leaves'; + for (let i = 1; i <= h; i++) { + if (!getBlock(gx, gy - i, gz)) setBlock(gx, gy - i, gz, 'wood'); + } + // крона объёмом: псевдосфера + const cy = gy - h; + const rad = 2; + for (let dy = -2; dy <= 1; dy++) { + for (let dz = -rad; dz <= rad; dz++) { + for (let dx = -rad; dx <= rad; dx++) { + const dist = dx * dx + dy * dy * 2 + dz * dz; + if (dist > rad * rad + 1) continue; + const yy = cy + dy; + if (!getBlock(gx + dx, yy, gz + dz)) setBlock(gx + dx, yy, gz + dz, leafType); + } + } + } +} + +function growDecor(gx, gy, gz, biome) { + const def = BIOMES[biome]; + const r = hash2(gx * 23 + 5, gz * 29 + 7); + if (def.flowers && r > 0.96 && !getBlock(gx, gy, gz)) setBlock(gx, gy, gz, 'flower'); + if ((biome === 'swamp' || biome === 'plains') && r > 0.985 && !getBlock(gx, gy, gz)) setBlock(gx, gy, gz, 'mushroom'); + if (biome === 'desert' && r > 0.978 && !getBlock(gx, gy, gz) && gy + 1 < surfaceGyAt(gx, gz)) setBlock(gx, gy, gz, 'cactus'); + if (biome === 'tundra' && r > 0.978 && !getBlock(gx, gy, gz) && gy + 2 < surfaceGyAt(gx, gz)) setBlock(gx, gy, gz, 'ice'); +} + +const generated = new Set(); // "cx,cz" — уже сгенерированные чанки + +// ========== ГЕНЕРАЦИЯ ЧАНКА ========== +function genChunk(cx, cz) { + const key = cx + ',' + cz; + if (generated.has(key)) return false; + generated.add(key); + const x0 = cx * CHUNK, z0 = cz * CHUNK; + for (let x = x0; x < x0 + CHUNK; x++) { + for (let z = z0; z < z0 + CHUNK; z++) { + genColumn(x, z); + } + } + return true; +} + +function genColumn(gx, gz) { + const biome = getCachedBiome(gx, gz); + const top = surfaceGyAt(gx, gz); + const sea = seaLevel(); + + // Генерируем до bedrock, но не ниже уровня «пещерной зоны» — экономим память + for (let gy = Math.min(BEDROCK_GY - 1, 44); gy >= 0; gy--) { + // бедрок внизу + if (gy >= BEDROCK_GY - 2) { + if (!getBlock(gx, gy, gz)) setBlock(gx, gy, gz, 'bedrock'); + continue; + } + if (gy > top) { + // над поверхностью: вода до уровня моря + if (gy <= sea) { + const t = (biome === 'swamp') ? 'swamp_water' : 'water'; + if (!getBlock(gx, gy, gz)) setBlock(gx, gy, gz, t); + } + continue; + } + // пещеры — только под поверхностью + if (gy < top - 2 && inCave(gx, gy, gz)) continue; + + const ore = oreAt(gx, gy, gz); + if (ore) { setBlock(gx, gy, gz, ore); continue; } + + const def = BIOMES[biome]; + if (gy === top) setBlock(gx, gy, gz, def.surface); + else if (gy > top - (biome === 'desert' || biome === 'mountains' ? 5 : 3)) setBlock(gx, gy, gz, def.subsurface); + else setBlock(gx, gy, gz, 'stone'); + } + + // вода в пещерах не заливаем — это гравитация + // растительность + const above = getBlock(gx, top, gz); + if (above && !BLOCKS_NO_SOLID(above.t)) growDecor(gx, top, gz, biome); + if (above && !BLOCKS_NO_SOLID(above.t) && hash2(gx * 13, gz * 17) > 0.93) growTree(gx, top, gz, biome); +} + +function BLOCKS_NO_SOLID(t) { return t === 'water' || t === 'swamp_water' || t === 'air'; } + +// =========─ ГЕНЕРАЦИЯ ВОКРУГ ИГРОКА =========─ +// Держим чанки сгенерированными вокруг позиции игрока по X и Z. +const genChunks = new Set(); +function ensureGenAroundCamera() { + const px = Math.floor(state.player.x / TILE); + const pz = Math.floor(state.player.z / TILE); + const rx = 3, rz = Math.ceil(WORLD_DEPTH / CHUNK) + 1; + const cx = Math.floor(px / CHUNK), cz = Math.floor(pz / CHUNK); + for (let dx = -rx; dx <= rx; dx++) { + for (let dz = -rz; dz <= rz; dz++) { + const kx = cx + dx, kz = cz + dz; + const key = kx + ',' + kz; + if (genChunks.has(key)) continue; + genChunks.add(key); + genChunk(kx, kz); + } + } + // чистим слишком далёкие + for (const key of genChunks) { + const [a, b] = key.split(',').map(Number); + if (Math.abs(a - cx) > rx + 2 || Math.abs(b - cz) > rz + 2) { + genChunks.delete(key); + generated.delete(key); + } + } +} + +function resetGenerationCache() { + generated.clear(); + genChunks.clear(); + biomeCache.clear(); +} + +// === audio/sound-engine.js === +// Звуковой движок +const sounds = {}; + + + +function loadSound(id, src) { + const audio = new Audio(); + audio.src = src; + audio.volume = 0.3; + sounds[id] = audio; +} + +// Загрузка звуков +loadSound('splash', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//splash.mp3'); +loadSound('sand1', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//sand1.mp3'); +loadSound('snow1', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//snow1.mp3'); +loadSound('stone1', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//stone1.mp3'); +loadSound('wood1', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//wood1.mp3'); +loadSound('cloth1', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//cloth1.mp3'); +loadSound('fire', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//fire.mp3'); +loadSound('hit1', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//hit1.mp3'); +loadSound('attack', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//attack.mp3'); +loadSound('hurt_chicken', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//hurt1_chicken.mp3'); +loadSound('stone_build', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//stone1%20(1).mp3'); +loadSound('wood_build', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//wood1%20(1).mp3'); +loadSound('click', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//click.mp3'); +loadSound('explode1', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//explode1.mp3'); +loadSound('glass1', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//glass1.mp3'); +loadSound('eat1', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//eat1.mp3'); +loadSound('step', 'https://supamg.mkn8n.ru/storage/v1/object/public/sounds//sand2.mp3'); + +function playSound(id) { + if (sounds[id]) { + sounds[id].currentTime = 0; + sounds[id].play().catch(e => console.error('Sound error:', e)); + } +} + +// === ui/chat.js === +// ==================== ЧАТ ==================== + + + + +const chatMessages = []; + +function addChatMessage(sender, message) { + const time = new Date().toLocaleTimeString('ru-RU', { hour: '2-digit', minute: '2-digit' }); + chatMessages.push({ sender, message, time }); + if (chatMessages.length > MAX_CHAT_MESSAGES) { + chatMessages.shift(); + } + renderChatMessages(); +} + +function renderChatMessages() { + const chatMessagesEl = document.getElementById('chatMessages'); + if (!chatMessagesEl) return; + + chatMessagesEl.innerHTML = chatMessages.map(m => + `
${m.time} ${m.sender}: ${m.message}
` + ).join(''); + + // Прокручиваем вниз + chatMessagesEl.scrollTop = chatMessagesEl.scrollHeight; +} + +function sendChatMessage(message) { + if (!message || message.trim() === '') return; + + if (state.isMultiplayer && state.socket && state.socket.connected) { + state.socket.emit('chat_message', { message: message.trim() }); + } else { + addChatMessage('Вы', message.trim()); + } +} + +function initChat() { + document.getElementById('chatToggle').onclick = () => { + playSound('click'); + state.chatOpen = !state.chatOpen; + document.getElementById('chatPanel').style.display = state.chatOpen ? 'block' : 'none'; + if (state.chatOpen) { + document.getElementById('chatInput').focus(); + } + }; + + document.getElementById('chatClose').onclick = () => { + playSound('click'); + state.chatOpen = false; + document.getElementById('chatPanel').style.display = 'none'; + }; + + document.getElementById('chatSend').onclick = () => { + const input = document.getElementById('chatInput'); + sendChatMessage(input.value); + input.value = ''; + }; + + document.getElementById('chatInput').addEventListener('keypress', (e) => { + if (e.key === 'Enter') { + sendChatMessage(e.target.value); + e.target.value = ''; + } + }); +} + +// === entities/player.js === +// Функция для расчёта урона с учётом брони +function calculateDamage(baseDamage) { + const reduction = state.player.armor; + const actualDamage = baseDamage * (1 - reduction); + return actualDamage; +} + +// Инициализация игрока +function initPlayer() { + state.player = { + x: 6 * TILE, + y: 0 * TILE, + w: 34, + h: 34, + vx: 0, + vy: 0, + grounded: false, + inWater: false, + headInWater: false, + hp: 100, + hunger: 100, + o2: 100, + invuln: 0, + fallStartY: 0, + lastStepTime: 0, + sleeping: false, + inBoat: false, + armor: 0, + equippedArmor: null, + temperature: 15, + slowTimer: 0 + }; + + state.spawnPoint = { x: 6 * TILE, y: 0 * TILE }; +} + +// === data/items.js === +const ITEMS = { + meat: { n:'Сырое мясо', icon:'🥩', food:15 }, + cooked: { n:'Жареное мясо', icon:'🍖', food:45 }, + arrow: { n:'Стрела', icon:'➡️', stack:64 }, + chicken_meat: { n:'Курица', icon:'🍗', food:12, stack:64 }, + feather: { n:'Перо', icon:'🪶', stack:64 }, + bone: { n:'Кость', icon:'🦴', stack:64 }, + gunpowder: { n:'Порох', icon:'💥', stack:64 }, + // === FARMING ITEMS === + wheat: { n:'Пшеница', icon:'🌾', stack:64 }, + bread: { n:'Хлеб', icon:'🍞', food:30 }, + carrot: { n:'Морковь', icon:'🥕', food:8, stack:64 }, + potato: { n:'Картофель', icon:'🥔', stack:64 }, + baked_potato:{ n:'Печёная картошка', icon:'🥔', food:25 }, + wheat_seeds: { n:'Семена пшеницы', icon:'🌱', stack:64 }, + mushroom_stew:{ n:'Грибной суп', icon:'🍲', food:40 }, + // === MOB DROP ITEMS === + scorpion_stinger:{ n:'Жало скорпиона', icon:'🔺', stack:64 }, + polar_fur: { n:'Шкура медведя', icon:'🧥', stack:64 }, + slime_ball: { n:'Слизь', icon:'🟢', stack:64 }, + eagle_feather:{ n:'Перо орла', icon:'🪶', stack:64 }, + // === ARMOR === + gold_armor: { n:'Золотая броня', icon:'🛡️', stack:1, armor:0.65 }, +}; + +// Runtime extensions — предметы от обжига +ITEMS.iron_ingot = { n:'Железный слиток', icon:'🔩' }; +ITEMS.gold_ingot = { n:'Золотой слиток', icon:'🪙' }; +ITEMS.copper_ingot = { n:'Медный слиток', icon:'🟤' }; + +// Axes and shovels +ITEMS.wood_axe = { n:'Деревянный топор', icon:'🪓' }; +ITEMS.stone_axe = { n:'Каменный топор', icon:'🪓' }; +ITEMS.iron_axe = { n:'Железный топор', icon:'🪓' }; +ITEMS.wood_shovel = { n:'Деревянная лопата', icon:'🔱' }; +ITEMS.stone_shovel = { n:'Каменная лопата', icon:'🔱' }; +ITEMS.iron_shovel = { n:'Железная лопата', icon:'🔱' }; + +// === data/tools.js === +const TOOLS = { + wood_pickaxe: { n:'Деревянная кирка', icon:'⛏️', damage:1, durability:60, toolType:'pickaxe', toolTier:'wood', speed:2 }, + stone_pickaxe: { n:'Каменная кирка', icon:'⛏️', damage:2, durability:132, toolType:'pickaxe', toolTier:'stone', speed:4 }, + iron_pickaxe: { n:'Железная кирка', icon:'⛏️', damage:3, durability:250, toolType:'pickaxe', toolTier:'iron', speed:6 }, + wood_sword: { n:'Деревянный меч', icon:'🗡️', damage:4, durability:60 }, + stone_sword: { n:'Каменный меч', icon:'🗡️', damage:5, durability:132 }, + iron_sword: { n:'Железный меч', icon:'🗡️', damage:7, durability:250 }, + wood_axe: { n:'Деревянный топор', icon:'🪓', damage:3, durability:60, toolType:'axe', toolTier:'wood', speed:2 }, + stone_axe: { n:'Каменный топор', icon:'🪓', damage:4, durability:132, toolType:'axe', toolTier:'stone', speed:4 }, + iron_axe: { n:'Железный топор', icon:'🪓', damage:5, durability:250, toolType:'axe', toolTier:'iron', speed:6 }, + wood_shovel: { n:'Деревянная лопата', icon:'🔱', damage:1, durability:60, toolType:'shovel', toolTier:'wood', speed:2 }, + stone_shovel: { n:'Каменная лопата', icon:'🔱', damage:2, durability:132, toolType:'shovel', toolTier:'stone', speed:4 }, + iron_shovel: { n:'Железная лопата', icon:'🔱', damage:3, durability:250, toolType:'shovel', toolTier:'iron', speed:6 }, + bow: { n:'Лук', icon:'🏹', damage:10, durability:200 }, +}; + + + + +function addTool(type) { + const maxDur = TOOLS[type]?.durability || 60; + const key = `${type}_${Date.now()}_${Math.random().toString(36).slice(2,6)}`; + state.toolDurability.set(key, { type, current: maxDur, max: maxDur }); +} + +function useTool(type) { + for (const [tid, dur] of state.toolDurability) { + if (dur.type === type && dur.current > 0) { + dur.current--; + if (dur.current <= 0) { + state.toolDurability.delete(tid); + state.inv[type] = Math.max(0, (state.inv[type] || 0) - 1); + return true; // broke + } + return false; // used but not broke + } + } + return false; // no durability entry found +} + +function getBestTool(blockType) { + const block = BLOCKS[blockType]; + if (!block || !block.toolType) return null; + const toolType = block.toolType; + for (const tier of ['iron', 'stone', 'wood']) { + const toolId = `${tier}_${toolType}`; + if (TOOLS[toolId] && state.inv[toolId] > 0) return toolId; + } + return null; +} + +function toolTierLessThan(toolTier, minTier) { + const tiers = { wood: 1, stone: 2, iron: 3 }; + return (tiers[toolTier] || 0) < (tiers[minTier] || 0); +} + +function getMiningSpeed(blockType) { + const block = BLOCKS[blockType]; + if (!block) return 1; + const toolId = getBestTool(blockType); + if (toolId) { + const tool = TOOLS[toolId]; + if (tool.toolType === block.toolType) return tool.speed; + } + return 1; // Bare hands = 1 click per hit +} + +// === render/textures.js === +// Текстуры блоков (простые) + + +const tex = {}; + +// --- Item/tool sprite generator ---\n +const itemTex = {}; + +function drawArrow(ctx, color) { + ctx.fillStyle = '#8B4513'; + ctx.fillRect(8, 14, 16, 3); + ctx.fillStyle = color; + ctx.beginPath(); + ctx.moveTo(24, 15); + ctx.lineTo(18, 10); + ctx.lineTo(18, 20); + ctx.closePath(); + ctx.fill(); + ctx.fillStyle = '#e74c3c'; + ctx.beginPath(); + ctx.moveTo(8, 15); + ctx.lineTo(4, 10); + ctx.lineTo(10, 14); + ctx.closePath(); + ctx.fill(); + ctx.beginPath(); + ctx.moveTo(8, 16); + ctx.lineTo(4, 21); + ctx.lineTo(10, 17); + ctx.closePath(); + ctx.fill(); +} + +function drawPickaxe(ctx, headColor, handleColor) { + ctx.fillStyle = handleColor || '#8B4513'; + ctx.save(); + ctx.translate(16, 16); + ctx.rotate(Math.PI / 4); + ctx.fillRect(-2, 0, 4, 18); + ctx.fillStyle = headColor; + ctx.fillRect(-8, -3, 16, 5); + ctx.fillRect(-8, -3, 3, 8); + ctx.fillRect(5, -3, 3, 8); + ctx.restore(); +} + +function drawAxe(ctx, headColor, handleColor) { + ctx.fillStyle = handleColor || '#8B4513'; + ctx.save(); + ctx.translate(16, 16); + ctx.rotate(Math.PI / 4); + ctx.fillRect(-2, 0, 4, 18); + ctx.fillStyle = headColor; + ctx.fillRect(-2, -8, 10, 8); + ctx.fillRect(-2, -8, 4, 12); + ctx.restore(); +} + +function drawShovel(ctx, headColor, handleColor) { + ctx.fillStyle = handleColor || '#8B4513'; + ctx.save(); + ctx.translate(16, 16); + ctx.rotate(Math.PI / 4); + ctx.fillRect(-2, 0, 4, 18); + ctx.fillStyle = headColor; + ctx.fillRect(-6, -8, 12, 8); + ctx.fillRect(-4, -12, 8, 4); + ctx.restore(); +} + +function drawSword(ctx, bladeColor, guardColor) { + ctx.fillStyle = '#8B4513'; + ctx.fillRect(14, 18, 4, 10); + ctx.fillStyle = guardColor || '#f1c40f'; + ctx.fillRect(10, 16, 12, 3); + ctx.fillStyle = bladeColor; + ctx.beginPath(); + ctx.moveTo(16, 2); + ctx.lineTo(12, 16); + ctx.lineTo(20, 16); + ctx.closePath(); + ctx.fill(); +} + +function drawBow(ctx) { + ctx.strokeStyle = '#8B4513'; + ctx.lineWidth = 3; + ctx.beginPath(); + ctx.arc(12, 16, 12, -Math.PI * 0.7, Math.PI * 0.7); + ctx.stroke(); + ctx.strokeStyle = '#ddd'; + ctx.lineWidth = 1; + ctx.beginPath(); + ctx.moveTo(12, 4); + ctx.lineTo(12, 28); + ctx.stroke(); +} + +function drawIngot(ctx, color) { + ctx.fillStyle = color; + ctx.beginPath(); + ctx.moveTo(6, 12); + ctx.lineTo(26, 12); + ctx.lineTo(24, 24); + ctx.lineTo(8, 24); + ctx.closePath(); + ctx.fill(); + ctx.fillStyle = 'rgba(255,255,255,0.3)'; + ctx.fillRect(8, 8, 16, 4); +} + +function drawMeat(ctx, cooked) { + ctx.fillStyle = cooked ? '#8B4513' : '#e74c3c'; + ctx.beginPath(); + ctx.ellipse(16, 18, 10, 8, 0, 0, Math.PI * 2); + ctx.fill(); + ctx.fillStyle = '#f5f5dc'; + ctx.fillRect(8, 6, 3, 12); + ctx.fillRect(14, 4, 3, 8); +} + +function makeItemTex(id) { + const c = document.createElement('canvas'); + c.width = 32; c.height = 32; + const g = c.getContext('2d'); + + const tierColors = { + wood: { head: '#a0522d', blade: '#a0522d' }, + stone: { head: '#7f8c8d', blade: '#95a5a6' }, + iron: { head: '#bdc3c7', blade: '#ecf0f1' }, + }; + + switch (id) { + case 'arrow': + drawArrow(g, '#7f8c8d'); + break; + case 'bow': + drawBow(g); + break; + case 'wood_pickaxe': + drawPickaxe(g, tierColors.wood.head, tierColors.wood.blade); + break; + case 'stone_pickaxe': + drawPickaxe(g, tierColors.stone.head); + break; + case 'iron_pickaxe': + drawPickaxe(g, tierColors.iron.head); + break; + case 'wood_axe': + drawAxe(g, tierColors.wood.head); + break; + case 'stone_axe': + drawAxe(g, tierColors.stone.head); + break; + case 'iron_axe': + drawAxe(g, tierColors.iron.head); + break; + case 'wood_shovel': + drawShovel(g, tierColors.wood.head); + break; + case 'stone_shovel': + drawShovel(g, tierColors.stone.head); + break; + case 'iron_shovel': + drawShovel(g, tierColors.iron.head); + break; + case 'wood_sword': + drawSword(g, tierColors.wood.blade, '#a0522d'); + break; + case 'stone_sword': + drawSword(g, tierColors.stone.blade, '#7f8c8d'); + break; + case 'iron_sword': + drawSword(g, tierColors.iron.blade, '#bdc3c7'); + break; + case 'iron_ingot': + drawIngot(g, '#bdc3c7'); + break; + case 'gold_ingot': + drawIngot(g, '#f1c40f'); + break; + case 'copper_ingot': + drawIngot(g, '#e67e22'); + break; + case 'meat': + drawMeat(g, false); + break; + case 'cooked': + drawMeat(g, true); + break; + case 'wheat': + g.fillStyle = '#f1c40f'; + g.fillRect(12, 8, 3, 18); + g.fillRect(8, 6, 10, 4); + break; + case 'bread': + g.fillStyle = '#d4a030'; + g.fillRect(6, 12, 20, 12); + g.fillStyle = '#c08820'; + g.fillRect(6, 12, 20, 3); + break; + case 'carrot': + g.fillStyle = '#e67e22'; + g.fillRect(14, 10, 4, 18); + g.fillStyle = '#27ae60'; + g.fillRect(12, 6, 8, 5); + break; + case 'potato': + g.fillStyle = '#d4a050'; + g.beginPath(); + g.ellipse(16, 16, 8, 6, 0, 0, Math.PI * 2); + g.fill(); + g.fillStyle = '#b88a40'; + g.fillRect(10, 14, 2, 1); + g.fillRect(20, 16, 2, 1); + break; + case 'baked_potato': + g.fillStyle = '#c08820'; + g.beginPath(); + g.ellipse(16, 16, 8, 6, 0, 0, Math.PI * 2); + g.fill(); + g.fillStyle = '#f5e6cc'; + g.fillRect(12, 12, 8, 6); + break; + case 'mushroom_stew': + g.fillStyle = '#8B4513'; + g.fillRect(10, 16, 12, 12); + g.fillStyle = '#e74c3c'; + g.beginPath(); + g.ellipse(16, 14, 8, 5, 0, Math.PI, 0); + g.fill(); + break; + case 'scorpion_stinger': + g.fillStyle = '#d35400'; + g.beginPath(); + g.moveTo(16, 4); + g.lineTo(10, 28); + g.lineTo(22, 28); + g.closePath(); + g.fill(); + break; + case 'polar_fur': + g.fillStyle = '#ecf0f1'; + g.fillRect(6, 6, 20, 20); + g.fillStyle = '#bdc3c7'; + g.fillRect(12, 12, 8, 8); + break; + case 'slime_ball': + g.fillStyle = 'rgba(46,204,113,0.8)'; + g.beginPath(); + g.arc(16, 16, 10, 0, Math.PI * 2); + g.fill(); + g.fillStyle = '#fff'; + g.fillRect(10, 10, 4, 4); + g.fillRect(18, 10, 4, 4); + break; + case 'eagle_feather': + g.fillStyle = '#8B4513'; + g.fillRect(14, 4, 4, 24); + g.fillStyle = '#ecf0f1'; + g.fillRect(10, 6, 12, 10); + break; + case 'chicken_meat': + drawMeat(g, false); + g.fillStyle = '#fff'; + g.fillRect(12, 8, 4, 4); + break; + case 'feather': + g.fillStyle = '#ecf0f1'; + g.fillRect(14, 6, 4, 20); + g.fillStyle = '#bbb'; + g.fillRect(12, 8, 8, 8); + break; + case 'bone': + g.fillStyle = '#f5f5dc'; + g.fillRect(12, 10, 8, 14); + g.fillRect(8, 8, 4, 4); + g.fillRect(20, 8, 4, 4); + g.fillRect(8, 22, 4, 4); + g.fillRect(20, 22, 4, 4); + break; + case 'gunpowder': + g.fillStyle = '#555'; + g.fillRect(8, 10, 6, 6); + g.fillRect(18, 14, 6, 6); + g.fillRect(12, 20, 6, 6); + break; + case 'gold_armor': + g.fillStyle = '#f1c40f'; + g.fillRect(6, 6, 20, 20); + g.fillStyle = '#f39c12'; + g.fillRect(10, 4, 12, 6); + g.fillRect(4, 10, 6, 16); + g.fillRect(22, 10, 6, 16); + break; + case 'wheat_seeds': + g.fillStyle = '#7dcea0'; + g.fillRect(14, 16, 4, 10); + g.fillStyle = '#a8e6a0'; + g.fillRect(10, 8, 4, 4); + g.fillRect(18, 6, 4, 4); + g.fillRect(14, 4, 4, 4); + break; + default: + g.fillStyle = '#7f8c8d'; + g.fillRect(4, 4, 24, 24); + g.fillStyle = 'rgba(255,255,255,0.2)'; + g.fillRect(4, 4, 24, 4); + } + return c; +} + +function makeTex(type) { + const t = BLOCKS[type]; + const c = document.createElement('canvas'); + c.width = 32; c.height = 32; + const g = c.getContext('2d'); + + if (type === 'tnt') { + g.fillStyle = '#c0392b'; g.fillRect(0, 0, 32, 32); + g.fillStyle = '#fff'; g.fillRect(0, 12, 32, 8); + g.fillStyle = '#000'; g.font = 'bold 10px sans-serif'; g.fillText('TNT', 6, 20); + return c; + } + if (type === 'campfire') { + g.fillStyle = '#5d4037'; g.fillRect(4, 26, 24, 6); + g.fillStyle = '#3e2723'; g.fillRect(7, 23, 18, 4); + return c; + } + if (type === 'torch') { + g.fillStyle = '#6d4c41'; g.fillRect(14, 10, 4, 18); + g.fillStyle = '#f39c12'; g.fillRect(12, 6, 8, 8); + return c; + } + if (type === 'glass') { + g.fillStyle = 'rgba(200,240,255,0.25)'; g.fillRect(0, 0, 32, 32); + g.strokeStyle = 'rgba(255,255,255,0.65)'; g.strokeRect(2, 2, 28, 28); + g.beginPath(); g.moveTo(5, 27); g.lineTo(27, 5); g.stroke(); + return c; + } + if (type === 'water') { + g.fillStyle = t.c; g.fillRect(0, 0, 32, 32); + g.fillStyle = 'rgba(255,255,255,0.08)'; + g.fillRect(0, 6, 32, 2); + return c; + } + if (type === 'bed') { + g.fillStyle = '#e91e63'; + g.fillRect(0, 0, 32, 32); + g.fillStyle = '#f8bbd0'; + g.fillRect(2, 2, 14, 14); + g.fillStyle = '#c2185b'; + g.fillRect(16, 4, 14, 24); + g.fillStyle = '#e91e63'; + g.fillRect(18, 6, 10, 20); + return c; + } + if (type === 'flower') { + g.fillStyle = '#2ecc71'; g.fillRect(14, 14, 4, 18); + g.fillStyle = t.c; g.beginPath(); g.arc(16, 12, 6, 0, 6.28); g.fill(); + return c; + } + if (type === 'boat') { + g.fillStyle = '#8B4513'; + g.fillRect(2, 12, 28, 8); + g.fillStyle = '#A0522D'; + g.fillRect(0, 10, 32, 12); + g.fillStyle = '#DEB887'; + g.fillRect(4, 14, 24, 4); + g.fillStyle = '#654321'; + g.fillRect(2, 20, 28, 4); + return c; + } + if (type === 'ladder') { + g.fillStyle = '#8B4513'; + g.fillRect(4, 0, 4, 32); + g.fillRect(24, 0, 4, 32); + g.fillStyle = '#A0522D'; + g.fillRect(4, 4, 24, 3); + g.fillRect(4, 12, 24, 3); + g.fillRect(4, 20, 24, 3); + g.fillRect(4, 28, 24, 3); + return c; + } + // === BIOME BLOCK TEXTURES === + if (type === 'snow') { + g.fillStyle = '#ecf0f1'; + g.fillRect(0, 0, 32, 32); + g.fillStyle = '#dfe6e9'; + for (let i = 0; i < 4; i++) g.fillRect((Math.random()*26)|0, (Math.random()*26)|0, 5, 3); + return c; + } + if (type === 'ice') { + g.fillStyle = '#74b9ff'; + g.fillRect(0, 0, 32, 32); + g.strokeStyle = 'rgba(255,255,255,0.4)'; + g.beginPath(); g.moveTo(4,10); g.lineTo(20,16); g.lineTo(10,28); g.stroke(); + g.beginPath(); g.moveTo(18,4); g.lineTo(28,12); g.stroke(); + return c; + } + if (type === 'cactus') { + g.fillStyle = '#27ae60'; + g.fillRect(6, 2, 20, 28); + g.fillStyle = '#2ecc71'; + g.fillRect(2, 8, 6, 4); + g.fillRect(24, 14, 6, 4); + g.fillStyle = '#1e8449'; + g.fillRect(12, 0, 2, 30); + g.fillRect(18, 0, 2, 30); + return c; + } + if (type === 'mushroom') { + g.fillStyle = '#f5e6cc'; g.fillRect(14, 20, 4, 12); + g.fillStyle = '#e74c3c'; g.beginPath(); g.arc(16, 14, 10, Math.PI, 0); g.fill(); + g.fillStyle = '#fff'; g.fillRect(10, 10, 3, 3); g.fillRect(17, 8, 4, 3); + return c; + } + if (type === 'moss') { + g.fillStyle = '#0a6640'; + g.fillRect(0, 0, 32, 32); + g.fillStyle = '#1e8449'; + for (let i = 0; i < 6; i++) g.fillRect((Math.random()*26)|0, (Math.random()*26)|0, 4, 3); + return c; + } + if (type === 'swamp_water') { + g.fillStyle = 'rgba(100,120,40,0.6)'; + g.fillRect(0, 0, 32, 32); + g.fillStyle = 'rgba(80,100,20,0.3)'; + g.fillRect(0, 10, 32, 2); + g.fillRect(0, 22, 32, 2); + return c; + } + if (type === 'farmland') { + g.fillStyle = '#8B6914'; + g.fillRect(0, 0, 32, 32); + g.fillStyle = '#7a5c10'; + for (let i = 0; i < 4; i++) g.fillRect(0, 6+i*8, 32, 2); + g.fillStyle = '#6B4E0A'; + g.fillRect(8, 2, 2, 28); + g.fillRect(18, 2, 2, 28); + return c; + } + if (type === 'dead_bush') { + g.fillStyle = '#b2bec3'; + g.fillRect(12, 16, 2, 16); + g.fillRect(8, 14, 8, 2); + g.fillRect(16, 12, 8, 2); + g.fillRect(6, 18, 4, 2); + return c; + } + if (type === 'spruce_leaves') { + g.fillStyle = '#0a6640'; + g.fillRect(0, 0, 32, 32); + g.fillStyle = '#0d7a4d'; + for (let i = 0; i < 5; i++) g.fillRect((Math.random()*24)|0, (Math.random()*24)|0, 6, 4); + return c; + } + // CROP STAGES + if (type.startsWith('wheat_stage') || type.startsWith('carrot_stage') || type.startsWith('potato_stage')) { + const st = parseInt(type.charAt(type.length-1)); + const colors = type.startsWith('wheat') ? ['#a8e6a0','#7dcea0','#b8d730','#f1c40f'] : + type.startsWith('carrot') ? ['#a8e6a0','#f0c27a','#e8a040','#e67e22'] : + ['#a8e6a0','#c8b888','#bfaa78','#dfe6e9']; + g.fillStyle = '#5d4037'; + g.fillRect(15, 18, 2, 14); + if (st >= 1) { + g.fillStyle = colors[st]; + g.fillRect(10, 8 + (3-st)*3, 12, 10); + } else { + g.fillStyle = '#a8e6a0'; + g.fillRect(14, 22, 4, 4); + } + return c; + } + + g.fillStyle = t.c || '#000'; + g.fillRect(0, 0, 32, 32); + + g.fillStyle = 'rgba(0,0,0,0.10)'; + for (let i = 0; i < 6; i++) g.fillRect((Math.random() * 28) | 0, (Math.random() * 28) | 0, 4, 4); + + if (type.endsWith('_ore') || type === 'coal') { + g.fillStyle = 'rgba(0,0,0,0.35)'; + for (let i = 0; i < 4; i++) g.fillRect((Math.random() * 24) | 0, (Math.random() * 24) | 0, 6, 6); + } + return c; +} + +function initTextures() { + Object.keys(BLOCKS).forEach(k => tex[k] = makeTex(k)); + // Item/tool sprites + const itemIds = [ + 'arrow','bow', + 'wood_pickaxe','stone_pickaxe','iron_pickaxe', + 'wood_axe','stone_axe','iron_axe', + 'wood_shovel','stone_shovel','iron_shovel', + 'wood_sword','stone_sword','iron_sword', + 'iron_ingot','gold_ingot','copper_ingot', + 'meat','cooked', + 'wheat','bread','carrot','potato','baked_potato','mushroom_stew','wheat_seeds', + 'chicken_meat','feather','bone','gunpowder', + 'scorpion_stinger','polar_fur','slime_ball','eagle_feather', + 'gold_armor', + ]; + itemIds.forEach(id => { itemTex[id] = makeItemTex(id); }); +} + +// === ui/hotbar.js === +// Hotbar UI — 3-slot Minecraft-style bottom bar + selected item indicator + + + + + + + +const HOTBAR_SLOTS = 3; + +let selectedItemEl = null; + +function addToRecentItems(id) { + if (!id) return; + state.recentItems = state.recentItems.filter(item => item !== id); + state.recentItems.unshift(id); + state.recentItems = state.recentItems.slice(0, 5); +} + +function renderSlotIcon(el, id) { + if (BLOCKS[id] && tex[id]) { + el.style.backgroundImage = `url(${tex[id].toDataURL()})`; + el.style.backgroundSize = 'cover'; + } else if (itemTex[id]) { + el.style.backgroundImage = `url(${itemTex[id].toDataURL()})`; + el.style.backgroundSize = 'cover'; + } else if (ITEMS[id]) { + el.textContent = ITEMS[id].icon || '📦'; + } else if (TOOLS[id]) { + el.textContent = TOOLS[id].icon || '🔧'; + } else if (id === 'iron_armor') { + el.textContent = '🛡️'; + el.style.background = 'linear-gradient(135deg, #95a5a6 0%, #7f8c8d 100%)'; + } else { + el.textContent = id.charAt(0).toUpperCase(); + el.style.background = '#555'; + el.style.color = '#fff'; + el.style.fontWeight = '700'; + el.style.fontSize = '14px'; + } +} + +function updateSelectedItem() { + if (!selectedItemEl) selectedItemEl = document.getElementById('selectedItem'); + if (!selectedItemEl) return; + const sel = state.selected; + if (!sel || !state.inv[sel] || state.inv[sel] <= 0) { + selectedItemEl.style.display = 'none'; + return; + } + selectedItemEl.style.display = 'flex'; + // Clear previous content + selectedItemEl.textContent = ''; + selectedItemEl.style.backgroundImage = ''; + selectedItemEl.style.background = 'rgba(0,0,0,0.45)'; + // Render icon + if (BLOCKS[sel] && tex[sel]) { + selectedItemEl.style.backgroundImage = `url(${tex[sel].toDataURL()})`; + selectedItemEl.style.backgroundSize = 'cover'; + } else if (itemTex[sel]) { + selectedItemEl.style.backgroundImage = `url(${itemTex[sel].toDataURL()})`; + selectedItemEl.style.backgroundSize = 'cover'; + } else if (ITEMS[sel]) { + selectedItemEl.textContent = ITEMS[sel].icon || '📦'; + } else if (TOOLS[sel]) { + selectedItemEl.textContent = TOOLS[sel].icon || '🔧'; + } else { + selectedItemEl.textContent = sel.charAt(0).toUpperCase(); + } +} + +function rebuildHotbar() { + const hotbarEl = state.hotbarEl; + const inv = state.inv; + const selected = state.selected; + const toolDurability = state.toolDurability; + + hotbarEl.innerHTML = ''; + + // Get up to 3 recent items with count > 0 + const items = state.recentItems.filter(id => inv[id] > 0).slice(0, HOTBAR_SLOTS); + + // If selected item not in list and has count > 0, push to front + if (inv[selected] > 0 && !items.includes(selected)) { + items.unshift(selected); + if (items.length > HOTBAR_SLOTS) items.pop(); + } + + // Always render HOTBAR_SLOTS slots (fill empties) + for (let si = 0; si < HOTBAR_SLOTS; si++) { + const id = items[si] || null; + const s = document.createElement('div'); + s.className = 'slot' + (id && id === selected ? ' sel' : ''); + + // Slot number indicator (top-left) + const numEl = document.createElement('div'); + numEl.style.cssText = 'position:absolute;top:1px;left:3px;font-size:10px;color:rgba(255,255,255,0.55);font-weight:700;pointer-events:none;text-shadow:1px 1px 1px rgba(0,0,0,0.7);'; + numEl.textContent = (si + 1).toString(); + s.appendChild(numEl); + + if (id) { + renderSlotIcon(s, id); + + const c = document.createElement('div'); + c.className = 'count'; + c.textContent = inv[id]; + s.appendChild(c); + s.onclick = () => { + playSound('click'); + state.selected = id; + // Move to front of recentItems + state.recentItems = state.recentItems.filter(item => item !== id); + state.recentItems.unshift(id); + rebuildHotbar(); + }; + + if (id === 'iron_armor' && state.player.equippedArmor === 'iron_armor') { + const equipped = document.createElement('div'); + equipped.className = 'equipped-indicator'; + equipped.textContent = '✓'; + s.appendChild(equipped); + } + + // Durability bar + if (TOOLS[id] && inv[id] > 0) { + let curDur = 0, maxDur = TOOLS[id].durability; + for (const [tid, dur] of toolDurability) { + if (dur.type === id) { + curDur = dur.current; + maxDur = dur.max; + break; + } + } + if (maxDur > 0) { + const bar = document.createElement('div'); + bar.style.cssText = `position:absolute;bottom:0;left:0;right:0;height:3px;background:#333;border-radius:0 0 6px 6px;overflow:hidden;`; + const fill = document.createElement('div'); + const pct = curDur / maxDur; + const color = pct > 0.5 ? '#2ecc71' : pct > 0.25 ? '#f39c12' : '#e74c3c'; + fill.style.cssText = `width:${pct * 100}%;height:100%;background:${color};`; + bar.appendChild(fill); + s.appendChild(bar); + } + } + } + hotbarEl.appendChild(s); + } + + // Update selected item indicator above hotbar + updateSelectedItem(); +} + +// === world/tnt3d.js === +// ==================== TNT В 3D — GrechkaCraft v3 ==================== +// Взрыв сферический: сносит блоки в радиусе по всем трём осям. + + + + + +function activateTNT3D(b, fuseSeconds) { + b.active = true; + b.fuse = fuseSeconds; + playSound('fuse'); +} + +function explodeTNT3D(b, st) { + const TILE = st.TILE; + const cx = b.gx, cy = b.gy, cz = b.gz || 0; + const radius = 3.2; + const r2 = radius * radius; + + // убрать сам блок + removeBlock(cx, cy, cz); + + const toRemove = []; + const r = Math.ceil(radius); + for (let dx = -r; dx <= r; dx++) { + for (let dy = -r; dy <= r; dy++) { + for (let dz = -r; dz <= r; dz++) { + const d2 = dx * dx + dy * dy + dz * dz; + if (d2 > r2) continue; + const blk = getBlock(cx + dx, cy + dy, cz + dz); + if (!blk) continue; + const def = BLOCKS[blk.t]; + if (!def) continue; + if (def.unbreakable) continue; + // взрывная сила падает с расстоянием + if (d2 > r2 * 0.55 && blk.t !== 'dirt' && blk.t !== 'sand' && blk.t !== 'grass') continue; + toRemove.push({ gx: cx + dx, gy: cy + dy, gz: cz + dz, t: blk.t }); + } + } + } + for (const rem of toRemove) removeBlock(rem.gx, rem.gy, rem.gz); + + // частицы + const parts = st.parts || (st.parts = []); + const n = 30; + for (let i = 0; i < n; i++) { + const a = Math.random() * Math.PI * 2; + const p = Math.acos(2 * Math.random() - 1); + const sp = 60 + Math.random() * 180; + parts.push({ + x: (cx + 0.5) * TILE, + y: (cy + 0.5) * TILE, + z: (cz + 0.5) * TILE, + vx: Math.sin(p) * Math.cos(a) * sp, + vy: Math.cos(p) * sp, + vz: Math.sin(p) * Math.sin(a) * sp, + life: 0.6 + Math.random() * 0.5, + c: Math.random() > 0.5 ? '#ff7a1a' : '#f1c40f', + }); + } + + // урон мобам и игроку в радиусе + const dmg = (e) => { + const ex = (e.x + e.w / 2) / TILE, ey = (e.y + e.h / 2) / TILE, ez = ((e.z || 0) + e.d / 2) / TILE; + const d = Math.hypot(ex - cx, ey - cy, ez - cz); + if (d < radius + 1) { + const f = 1 - d / (radius + 1); + e.hp -= 14 * f; + e.vx += (ex - cx) * 220; + e.vy -= 300 * f; + e.vz = (e.vz || 0) + (ez - cz) * 220; + } + }; + for (const m of st.mobs) dmg(m); + const p = st.player; + dmg(p); + if (p.hp <= 0 && p.invuln <= 0) { p.hp = 0; p.invuln = 1.5; } + + playSound('explode'); + + // взрывные частицы убрать по таймеру + st.explosionFlash = 0.4; + setBlock(cx, cy, cz, 'air'); + void setBlock; +} + +// === ui/inventory.js === +// Inventory UI + + + + + + + + +function renderInventory() { + const inventoryGrid = state.inventoryGrid; + const inv = state.inv; + const selected = state.selected; + inventoryGrid.innerHTML = ''; + + const items = Object.keys(inv).filter(id => inv[id] > 0); + + for (let i = 0; i < 21; i++) { + const slot = document.createElement('div'); + slot.className = 'inv-slot' + (i < items.length && items[i] === selected ? ' sel' : ''); + + if (i < items.length) { + const id = items[i]; + // Canvas sprite: block > itemTex > emoji fallback > unknown item fallback + if (BLOCKS[id] && tex[id]) { + slot.style.backgroundImage = `url(${tex[id].toDataURL()})`; + slot.style.backgroundSize = 'cover'; + } else if (itemTex[id]) { + slot.style.backgroundImage = `url(${itemTex[id].toDataURL()})`; + slot.style.backgroundSize = 'cover'; + } else if (ITEMS[id]) { + slot.textContent = ITEMS[id].icon || '📦'; + } else if (TOOLS[id]) { + slot.textContent = TOOLS[id].icon || '🔧'; + } else if (id === 'iron_armor') { + slot.textContent = '🛡️'; + slot.style.background = 'linear-gradient(135deg, #95a5a6 0%, #7f8c8d 100%)'; + } else { + // Unknown item fallback — grey box with first letter + slot.textContent = id.charAt(0).toUpperCase(); + slot.style.background = '#555'; + slot.style.color = '#fff'; + slot.style.fontWeight = '700'; + slot.style.fontSize = '14px'; + } + + const count = document.createElement('div'); + count.className = 'inv-count'; + count.textContent = inv[id]; + slot.appendChild(count); + + slot.onclick = () => { + playSound('click'); + state.selected = id; + state.recentItems = state.recentItems.filter(item => item !== id); + state.recentItems.unshift(id); + state.recentItems = state.recentItems.slice(0, 5); + rebuildHotbar(); + renderInventory(); + }; + + // Двойной клик для надевания брони + slot.ondblclick = () => { + if (id === 'iron_armor' && inv.iron_armor > 0) { + if (state.player.equippedArmor === 'iron_armor') { + state.player.equippedArmor = null; + state.player.armor = 0; + } else { + state.player.equippedArmor = 'iron_armor'; + state.player.armor = BLOCKS['iron_armor'].armor; + } + playSound('click'); + renderInventory(); + } + }; + } + + inventoryGrid.appendChild(slot); + } +} + +// === game/save.js === +// ==================== СИСТЕМА СОХРАНЕНИЯ ИГРЫ ==================== + + + + + + +const SAVE_STORAGE_KEY = state.SAVE_KEY; +let db = null; // Оставляем для совместимости, но не используем + +// Инициализация (localStorage + in-memory fallback) +function initDB() { + return new Promise((resolve) => { + console.log('Используем localStorage для сохранений (sandbox режим)'); + resolve(null); + }); +} + +function saveGame() { + const saveData = { + version: 2, + worldSeed: state.worldSeed, + player: { + x: state.player.x, + y: state.player.y, + hp: state.player.hp, + hunger: state.player.hunger, + o2: state.player.o2 + }, + inventory: state.inv, + time: state.worldTime, + isNight: state.isNightTime, + dayNightCycle: state.dayNightCycle, + // Сохраняем только изменения + placedBlocks: state.placedBlocks.slice(), + removedBlocks: state.removedBlocks.slice() + }; + + const saveSize = JSON.stringify(saveData).length; + console.log('Сохранение: player HP:', state.player.hp, 'hunger:', state.player.hunger, 'o2:', state.player.o2); + + // Пробуем сохранить в localStorage (основной метод для персистентности) + try { + localStorage.setItem(SAVE_STORAGE_KEY, JSON.stringify(saveData)); + console.log(`Игра сохранена в localStorage (размер: ${saveSize} байт)`); + } catch (e) { + console.warn('Ошибка сохранения в localStorage, используем только in-memory:', e); + + // Если localStorage недоступен, используем in-memory fallback + state.inMemorySave = saveData; + console.log(`Игра сохранена в памяти (размер: ${saveSize} байт)`); + } +} + +function loadGame() { + return new Promise((resolve, reject) => { + // Пробуем localStorage + try { + const localSave = localStorage.getItem(SAVE_STORAGE_KEY); + if (localSave) { + const parsed = JSON.parse(localSave); + console.log('Загружено из localStorage, player HP:', parsed.player?.hp); + resolve(parsed); + return; + } + } catch (e) { + console.warn('Ошибка доступа к localStorage:', e); + } + + // Если localStorage недоступен, используем in-memory сохранение + if (state.inMemorySave) { + console.log('Загружено из in-memory сохранения, player HP:', state.inMemorySave.player?.hp); + resolve(state.inMemorySave); + return; + } + + console.log('Сохранение не найдено'); + resolve(null); + }); +} + +// Миграция с версии 1 на версию 2 +function migrateV1toV2(saveData) { + console.log('Миграция сохранения с версии 1 на версию 2...'); + + // Сохраняем seed из текущей игры (так как v1 его не хранил) + saveData.worldSeed = state.worldSeed; + + // Инициализируем массивы изменений + saveData.placedBlocks = []; + saveData.removedBlocks = []; + + // Для v1 нам нужно сравнить сгенерированные блоки с тем, что должно быть по seed + // Это сложно сделать без полной перегенерации, поэтому для v1 сохраняем только seed + // и при загрузке просто перегенерируем мир + + // Удаляем старые данные + delete saveData.generatedBlocks; + + saveData.version = 2; + console.log('Миграция завершена'); +} + +function applySave(saveData) { + if (!saveData) return; + + console.log('=== applySave START ==='); + console.log('player HP before applySave:', state.player.hp); + console.log('saveData.player.hp:', saveData.player?.hp); + + // Миграция версий + if (saveData.version === 1) { + migrateV1toV2(saveData); + } + + // Восстанавливаем seed + if (saveData.worldSeed !== undefined) { + state.worldSeed = saveData.worldSeed; + } + + // Восстанавливаем игрока + if (saveData.player) { + state.player.x = saveData.player.x; + state.player.y = saveData.player.y; + state.player.hunger = saveData.player.hunger; + state.player.o2 = saveData.player.o2; + + // Обновляем spawnPoint на позицию из сохранения + state.spawnPoint.x = state.player.x; + state.spawnPoint.y = state.player.y; + + // Проверяем HP из сохранения - если <= 0, устанавливаем 100 + const savedHP = saveData.player.hp; + console.log('Saved HP from file:', savedHP); + if (savedHP <= 0) { + console.log('WARNING: Saved HP is <= 0, setting to 100!'); + state.player.hp = 100; + } else { + state.player.hp = savedHP; + } + console.log('player HP after restore:', state.player.hp); + console.log('spawnPoint обновлён из сохранения: x=', state.spawnPoint.x, 'y=', state.spawnPoint.y); + } else { + console.log('No player data in save, setting default HP: 100'); + state.player.hp = 100; + } + + console.log('=== applySave END ==='); + + // Восстанавливаем инвентарь + if (saveData.inventory) { + for (const key in saveData.inventory) { + state.inv[key] = saveData.inventory[key]; + } + } + + // Восстанавливаем время + if (saveData.time !== undefined) { + state.worldTime = saveData.time; + } + + // Восстанавливаем день/ночь + if (saveData.isNight !== undefined) { + state.isNightTime = saveData.isNight; + } + if (saveData.dayNightCycle !== undefined) { + state.dayNightCycle = saveData.dayNightCycle; + } + + // Перегенерируем мир по seed + resetGenerationCache(); + ensureGenAroundCamera(); + + // Применяем изменения (только для v2) + if (saveData.version === 2) { + // Применяем блоки, установленные игроком + for (const block of saveData.placedBlocks) { + setBlock(block.gx, block.gy, block.gz || 0, block.t, true); + } + + // Применяем удалённые блоки + for (const block of saveData.removedBlocks) { + removeBlock(block.gx, block.gy, block.gz || 0); + } + + // Восстанавливаем массивы изменений + state.placedBlocks = saveData.placedBlocks || []; + state.removedBlocks = saveData.removedBlocks || []; + } + + // Fill recentItems from inventory if empty (hotbar won.t render otherwise) + if (state.recentItems.length === 0) { + state.recentItems = Object.keys(state.inv).filter(id => state.inv[id] > 0).slice(0, 5); + } + rebuildHotbar(); + renderInventory(); + console.log('Игра загружена'); +} + +// === ui/share.js === +// ==================== ПОДЕЛИТЬСЯ МИРОМ ==================== + + + + +function initShare() { + // Keep worldId click-to-copy as before + const worldIdEl = document.getElementById('worldId'); + if (worldIdEl) { + worldIdEl.onclick = () => shareWorld(); + } +} + +function shareWorld() { + const shareUrl = new URL(window.location.href); + shareUrl.searchParams.set('world', state.worldId); + const url = shareUrl.toString(); + + // In Telegram WebApp — use native share + if (isTgWebApp && window.Telegram && window.Telegram.WebApp && window.Telegram.WebApp.switchInlineQuery) { + const inviteUrl = 'https://t.me/' + (state.TELEGRAM_BOT_USERNAME || 'grechka_mkn8n_bot') + '/app?startapp=' + encodeURIComponent(state.worldId); + Telegram.WebApp.openTelegramLink( + 'https://t.me/share/url?url=' + encodeURIComponent(inviteUrl) + + '&text=' + encodeURIComponent('🏗️ Заходи в GrechkaCraft! Код мира: ' + state.worldId) + ); + return; + } + + // Otherwise — show custom modal with URL + copy button + const overlay = document.createElement('div'); + overlay.style.cssText = 'position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,0.6);z-index:100000;display:flex;align-items:center;justify-content:center;'; + + const box = document.createElement('div'); + box.style.cssText = 'background:#C6C6C6;border:4px solid #000;padding:20px;max-width:400px;width:90%;box-shadow:4px 4px 0 #000;font-family:Courier New,monospace;'; + + const title = document.createElement('div'); + title.textContent = '📤 Пригласить друзей'; + title.style.cssText = 'font-size:18px;font-weight:bold;margin-bottom:12px;color:#222;'; + box.appendChild(title); + + const codeLabel = document.createElement('div'); + codeLabel.style.cssText = 'font-size:13px;color:#444;font-weight:bold;margin-bottom:4px;'; + codeLabel.textContent = 'Код мира:'; + box.appendChild(codeLabel); + + const codeBox = document.createElement('div'); + codeBox.style.cssText = 'font-size:20px;font-weight:bold;background:#fff;border:3px solid #000;padding:8px 12px;margin-bottom:12px;letter-spacing:2px;text-align:center;color:#5A8F3C;'; + codeBox.textContent = state.worldId; + box.appendChild(codeBox); + + const linkLabel = document.createElement('div'); + linkLabel.style.cssText = 'font-size:13px;color:#444;font-weight:bold;margin-bottom:4px;'; + linkLabel.textContent = 'Ссылка:'; + box.appendChild(linkLabel); + + const linkBox = document.createElement('input'); + linkBox.type = 'text'; + linkBox.readOnly = true; + linkBox.value = url; + linkBox.style.cssText = 'width:100%;padding:8px;font-family:Courier New,monospace;font-size:13px;background:#fff;border:3px solid #000;color:#222;margin-bottom:12px;box-sizing:border-box;'; + linkBox.onclick = () => linkBox.select(); + box.appendChild(linkBox); + + const btnRow = document.createElement('div'); + btnRow.style.cssText = 'display:flex;gap:8px;'; + + const btnCopy = document.createElement('button'); + btnCopy.textContent = '📋 Скопировать'; + btnCopy.style.cssText = 'flex:1;padding:10px;font-family:Courier New,monospace;font-weight:bold;cursor:pointer;border:3px solid #000;background:#5A8F3C;color:#fff;box-shadow:2px 2px 0 #000;'; + btnCopy.onclick = () => { + navigator.clipboard.writeText(url).then(() => { + showToast('📋 Ссылка скопирована!'); + overlay.remove(); + }).catch(() => { + linkBox.select(); + document.execCommand('copy'); + showToast('📋 Ссылка скопирована!'); + overlay.remove(); + }); + }; + btnRow.appendChild(btnCopy); + + const btnCode = document.createElement('button'); + btnCode.textContent = '📋 Код'; + btnCode.style.cssText = 'padding:10px;font-family:Courier New,monospace;font-weight:bold;cursor:pointer;border:3px solid #000;background:#3C5F9E;color:#fff;box-shadow:2px 2px 0 #000;'; + btnCode.onclick = () => { + navigator.clipboard.writeText(state.worldId).then(() => { + showToast('📋 Код скопирован: ' + state.worldId); + }).catch(() => { + showToast('Код: ' + state.worldId); + }); + }; + btnRow.appendChild(btnCode); + + const btnClose = document.createElement('button'); + btnClose.textContent = '✕'; + btnClose.style.cssText = 'padding:10px 14px;font-family:Courier New,monospace;font-weight:bold;cursor:pointer;border:3px solid #000;background:#9E2B2B;color:#fff;box-shadow:2px 2px 0 #000;'; + btnClose.onclick = () => overlay.remove(); + btnRow.appendChild(btnClose); + + box.appendChild(btnRow); + overlay.appendChild(box); + + // Close on click outside box + overlay.onclick = (e) => { if (e.target === overlay) overlay.remove(); }; + + document.body.appendChild(overlay); +} + +// === ui/save-controls.js === +// ==================== МЕНЮ ⋯ + СОХРАНЕНИЕ / СБРОС ==================== + + + + + + +let dropdownOpen = false; + +function initSaveControls() { + const menuBtn = document.getElementById('menuBtn'); + const menuDropdown = document.getElementById('menuDropdown'); + const saveItem = document.getElementById('saveItem'); + const resetItem = document.getElementById('resetItem'); + const marketItem = document.getElementById('marketItem'); + const shareItem = document.getElementById('shareItem'); + const settingsItem = document.getElementById('settingsItem'); + const quitItem = document.getElementById('quitItem'); + + // Убить возможный старый onclick + if (menuBtn) menuBtn.onclick = null; + + // Тогл меню + if (menuBtn) { + menuBtn.addEventListener('click', (e) => { + e.stopPropagation(); + dropdownOpen = !dropdownOpen; + if (menuDropdown) menuDropdown.classList.toggle('open', dropdownOpen); + }); + } + + // Закрытие по клику вне + document.addEventListener('click', () => { + if (dropdownOpen) { + dropdownOpen = false; + if (menuDropdown) menuDropdown.classList.remove('open'); + } + }); + + if (menuDropdown) { + menuDropdown.addEventListener('click', (e) => e.stopPropagation()); + } + + // 💾 Сохранить + if (saveItem) { + saveItem.addEventListener('click', () => { + playSound('click'); + saveGame(); + dropdownOpen = false; + if (menuDropdown) menuDropdown.classList.remove('open'); + alert('Игра сохранена!'); + }); + } + + // 🔄 Новый мир + if (resetItem) { + resetItem.addEventListener('click', () => { + if (confirm('Вы уверены, что хотите удалить сохранение и начать новую игру?')) { + playSound('click'); + try { localStorage.removeItem(state.SAVE_KEY); } catch(e) {} + state.inMemorySave = null; + state.worldId = Math.random().toString(36).substring(2, 10); + try { + const newUrl = new URL(window.location.href); + newUrl.searchParams.set('world', state.worldId); + window.history.replaceState(null, '', newUrl.toString()); + } catch(e) {} + location.reload(); + } else { + dropdownOpen = false; + if (menuDropdown) menuDropdown.classList.remove('open'); + } + }); + } + + // 🏪 Рынок + if (marketItem) { + marketItem.addEventListener('click', () => { + dropdownOpen = false; + if (menuDropdown) menuDropdown.classList.remove('open'); + document.dispatchEvent(new CustomEvent('toggleMarket')); + }); + } + + // 📤 Пригласить + if (shareItem) { + shareItem.addEventListener('click', () => { + dropdownOpen = false; + if (menuDropdown) menuDropdown.classList.remove('open'); + shareWorld(); + }); + } + + // ⚙️ Настройки + if (settingsItem) { + settingsItem.addEventListener('click', () => { + dropdownOpen = false; + menuDropdown.classList.remove('open'); + const panel = document.getElementById('settingsPanel'); + if (!panel) return; + // Sync controls with current state + const toggle = document.getElementById('dayNightToggle'); + const timeSlider = document.getElementById('timeSlider'); + const wSlider = document.getElementById('weatherIntensity'); + if (toggle) toggle.checked = state.dayNightCycle !== false; + if (timeSlider) timeSlider.value = Math.round(state.worldTime * 100); + if (wSlider) wSlider.value = Math.round(state.rainIntensity * 100); + // Sync weather buttons — highlight the active type + const wt = state.weatherType || (state.isRaining ? 'rain' : 'clear'); + const activeId = 'weather' + wt.charAt(0).toUpperCase() + wt.slice(1); + for (const bid of ['weatherClear','weatherRain','weatherSnow','weatherThunder']) { + const b = document.getElementById(bid); + if (b) b.style.background = (bid === activeId) ? '#3498db' : '#555'; + } + panel.style.display = 'block'; + }); + } + + // Закрытие настроек + const settingsClose = document.getElementById('settingsClose'); + if (settingsClose) { + settingsClose.addEventListener('click', () => { + const settingsPanel = document.getElementById('settingsPanel'); + if (settingsPanel) settingsPanel.style.display = 'none'; + }); + } + + // Тогл день/ночи + const dayNightToggle = document.getElementById('dayNightToggle'); + if (dayNightToggle) { + dayNightToggle.addEventListener('change', () => { + state.dayNightCycle = dayNightToggle.checked; + saveGame(); + }); + } + + // 🏠 Главное меню + if (quitItem) { + quitItem.addEventListener('click', () => { + dropdownOpen = false; + if (menuDropdown) menuDropdown.classList.remove('open'); + saveGame(); + try { + const url = new URL(window.location.href); + url.searchParams.delete('world'); + window.location.href = url.toString(); + } catch(e) { location.reload(); } + }); + } +} + +function updateSaveButtonVisibility() { + const saveItem = document.getElementById('saveItem'); + if (!saveItem) return; + saveItem.style.display = (state.isMultiplayer && state.otherPlayers.size > 0) ? 'none' : 'block'; +} + +// === multiplayer/socket-helpers.js === +// Socket helpers: цвет, отправка позиции/блоков + + + + + +// Генерация случайного цвета для игрока на основе socket_id +function getRandomPlayerColor(socketId) { + const colors = ['#e74c3c', '#3498db', '#2ecc71', '#f39c12', '#9b59b6', '#1abc9c', '#e91e63', '#00bcd4']; + let hash = 0; + for (let i = 0; i < socketId.length; i++) { + hash = ((hash << 5) - hash) + socketId.charCodeAt(i); + hash = hash & hash; + } + return colors[Math.abs(hash) % colors.length]; +} + +// Throttle для отправки позиции (10-20 раз в секунду) +let lastMoveSendTime = 0; + +let lastSentX = 0, lastSentY = 0; + +// Отправка позиции игрока (с throttle) +function sendPlayerPosition() { + if (!state.isMultiplayer || !state.socket || !state.socket.connected) return; + + const now = performance.now() / 1000; + if (now - lastMoveSendTime < MOVE_SEND_INTERVAL) return; + + // Отправляем только если позиция изменилась + const dx = Math.abs(state.player.x - lastSentX); + const dy = Math.abs(state.player.y - lastSentY); + if (dx < 1 && dy < 1) return; + + lastMoveSendTime = now; + lastSentX = state.player.x; + lastSentY = state.player.y; + + state.socket.emit('player_move', { x: state.player.x, y: state.player.y, player_name: state.playerName }); +} + +// Отправка изменения блока +function sendBlockChange(gx, gy, t, op) { + if (!state.isMultiplayer || !state.socket || !state.socket.connected) return; + + state.socket.emit('block_change', { gx, gy, t, op }); +} + +// === ui/trade.js === +// Trade UI — личная торговля (лицом к лицу) + + + + + + + +function itemName(id) { + return BLOCKS[id]?.n || TOOLS[id]?.n || ITEMS[id]?.n || id; +} +function itemIcon(id) { + if (BLOCKS[id]) return '🟫'; + if (TOOLS[id]) return TOOLS[id].icon || '🔧'; + if (ITEMS[id]) return ITEMS[id].icon || '📦'; + return '📦'; +} + +let tradeOpen = false; +let currentTradeId = null; +let myOffer = {}; +let partnerOffer = {}; +let iConfirmed = false; + +function isTradeOpen() { return tradeOpen; } + +function initTradeSocket(socket) { + // Incoming trade request + socket.on('trade_request', (data) => { + playSound('click'); + // Show trade request modal + const overlay = document.createElement('div'); + overlay.id = 'tradeRequestOverlay'; + overlay.className = 'custom-modal-overlay'; + overlay.innerHTML = ` +
+
🤝 ${data.from_name} хочет торговать
+ +
`; + document.getElementById('game').appendChild(overlay); + + document.getElementById('tradeAcceptBtn').addEventListener('click', () => { + overlay.remove(); + socket.emit('trade_accept', { from_socket_id: data.from }); + }); + document.getElementById('tradeDeclineBtn').addEventListener('click', () => { + overlay.remove(); + socket.emit('trade_decline', { from_socket_id: data.from }); + }); + }); + + socket.on('trade_start', (data) => { + currentTradeId = data.trade_id; + myOffer = {}; + partnerOffer = {}; + iConfirmed = false; + tradeOpen = true; + renderTradeUI(data.partner_name); + state.tradePanel.style.display = 'block'; + }); + + socket.on('trade_update', (data) => { + partnerOffer = data.player1Offer || data.player2Offer || {}; + // Determine which offer is the partner's + const isP1 = state.socket && state.socket.id === data.player1Offer; + // The partner's offer is the one we didn't send + // Actually the server sends both — we figure out which is ours + // Simpler: just use the data directly + if (state.mySocketId) { + // We need to know which offer in the update is ours vs partner's + // The trade_update event doesn't tell us, but we know myOffer already + // So partnerOffer = the one that's not myOffer + } + renderTradeOffers(); + }); + + socket.on('trade_status', (data) => { + // Update confirm buttons + const confirmBtn = document.getElementById('tradeConfirmBtn'); + if (confirmBtn) { + const amIPlayer1 = true; // We need to track this + if (iConfirmed) { + confirmBtn.textContent = '✅ Ожидание...'; + confirmBtn.disabled = true; + confirmBtn.style.background = '#555'; + } + } + // Show partner confirmation status + const partnerStatus = document.getElementById('partnerConfirmStatus'); + if (partnerStatus) { + const partnerConfirmed = data.player1Confirm || data.player2Confirm; + partnerStatus.textContent = partnerConfirmed ? '✅ Подтвердил' : '⏳ Ещё не подтвердил'; + } + }); + + socket.on('trade_complete', (data) => { + // Add received items to inventory + const received = data.received || {}; + for (const [item, qty] of Object.entries(received)) { + if (qty > 0) { + state.inv[item] = (state.inv[item] || 0) + qty; + } + } + // Remove sent items from inventory + const sent = data.sent || {}; + for (const [item, qty] of Object.entries(sent)) { + if (qty > 0) { + state.inv[item] = (state.inv[item] || 0) - qty; + if (state.inv[item] < 0) state.inv[item] = 0; + } + } + addChatMessage('Система', '🤝 Сделка завершена!'); + closeTrade(); + }); + + socket.on('trade_declined', () => { + addChatMessage('Система', 'Торговля отклонена'); + closeTrade(); + }); + + socket.on('trade_cancelled', () => { + addChatMessage('Система', 'Торговля отменена'); + closeTrade(); + }); + + socket.on('trade_error', (data) => { + addChatMessage('Система', '❌ ' + data.msg); + }); +} + +function renderTradeUI(partnerName) { + const panel = state.tradePanel; + const content = state.tradeContent; + content.innerHTML = ` +
🤝 Торговля с ${partnerName}
+
+
+
Вы предлагаете:
+
+ +
+
⇄
+
+
Партнёр предлагает:
+
+ Ожидание... +
+
+
+
⏳ Партнёр ещё не подтвердил
+
+ + +
`; + + document.getElementById('tradeAddItemBtn')?.addEventListener('click', showAddItemDialog); + document.getElementById('tradeConfirmBtn')?.addEventListener('click', confirmTrade); + document.getElementById('tradeCancelBtn')?.addEventListener('click', cancelTrade); +} + +function renderTradeOffers() { + const myItems = document.getElementById('myOfferItems'); + if (myItems) { + const keys = Object.keys(myOffer).filter(k => myOffer[k] > 0); + if (keys.length === 0) { + myItems.innerHTML = 'Ничего'; + } else { + myItems.innerHTML = keys.map(k => `
${itemIcon(k)} ${itemName(k)} x${myOffer[k]}
`).join(''); + } + } +} + +function showAddItemDialog() { + const inv = state.inv; + const items = Object.keys(inv).filter(id => inv[id] > 0); + if (items.length === 0) { + addChatMessage('Система', 'Инвентарь пуст!'); + return; + } + + const overlay = document.createElement('div'); + overlay.id = 'tradeItemPicker'; + overlay.className = 'custom-modal-overlay'; + let html = '
Что предложить?
'; + for (const id of items) { + // Show already offered count + const offered = myOffer[id] || 0; + const available = inv[id] - offered; + if (available <= 0) continue; + html += `
+ ${itemIcon(id)} + ${itemName(id)} + x${available} +
`; + } + html += '
'; + overlay.innerHTML = html; + document.getElementById('game').appendChild(overlay); + + overlay.querySelectorAll('.trade-pick-item').forEach(el => { + el.addEventListener('click', () => { + const itemId = el.dataset.item; + // Ask quantity + const available = inv[itemId] - (myOffer[itemId] || 0); + const qty = Math.min(available, available > 1 ? promptForQty(itemId, available) : 1); + if (qty > 0) { + myOffer[itemId] = (myOffer[itemId] || 0) + qty; + renderTradeOffers(); + // Reset confirm when offer changes + iConfirmed = false; + const btn = document.getElementById('tradeConfirmBtn'); + if (btn) { btn.textContent = '✅ Подтвердить'; btn.disabled = false; btn.style.background = '#2ecc71'; } + } + overlay.remove(); + }); + }); +} + +function promptForQty(itemId, max) { + // Simple: just use 1 for now, can enhance later with a proper dialog + const val = parseInt(prompt(`Сколько ${itemName(itemId)}? (макс: ${max})`, '1')); + return isNaN(val) || val < 1 ? 1 : Math.min(val, max); +} + +function confirmTrade() { + if (!currentTradeId || !state.socket) return; + + // Deduct offered items from inventory + for (const [item, qty] of Object.entries(myOffer)) { + if (qty > 0) { + if (state.inv[item] < qty) { + addChatMessage('Система', `Недостаточно ${itemName(item)}!`); + return; + } + } + } + + // Send offer + confirm + state.socket.emit('trade_offer', { trade_id: currentTradeId, offer: myOffer }); + + // Small delay then confirm + setTimeout(() => { + state.socket.emit('trade_confirm', { trade_id: currentTradeId }); + iConfirmed = true; + const btn = document.getElementById('tradeConfirmBtn'); + if (btn) { btn.textContent = '✅ Ожидание...'; btn.disabled = true; btn.style.background = '#555'; } + }, 200); +} + +function cancelTrade() { + if (!currentTradeId || !state.socket) return; + state.socket.emit('trade_cancel', { trade_id: currentTradeId }); + closeTrade(); +} + +function closeTrade() { + tradeOpen = false; + currentTradeId = null; + myOffer = {}; + partnerOffer = {}; + iConfirmed = false; + if (state.tradePanel) state.tradePanel.style.display = 'none'; + // Remove any pick overlay + document.getElementById('tradeItemPicker')?.remove(); +} + +function requestTradeWithPlayer(targetName) { + if (!state.socket || !state.isMultiplayer) { + addChatMessage('Система', 'Торговля доступна только в мультиплеере'); + return; + } + state.socket.emit('trade_request', { target_name: targetName }); + addChatMessage('Система', `Запрос отправлен ${targetName}...`); +} + +// === multiplayer/socket.js === +// Socket.IO клиент — инициализация и все обработчики + + + + + + + + + + + + + + +// Mob sizes for server mob sync (server doesn't send w/h) +const MOB_SIZES = { + pig: { w: 34, h: 24 }, + chicken: { w: 26, h: 22 }, + zombie: { w: 34, h: 50 }, + creeper: { w: 34, h: 50 }, + skeleton: { w: 34, h: 50 }, + scorpion: { w: 26, h: 26 }, + polar_bear: { w: 40, h: 34 }, + slime: { w: 24, h: 24 }, + eagle: { w: 30, h: 22 }, +}; + +function applyMobSize(sm) { + const s = MOB_SIZES[sm.kind]; + if (s && !sm.w) { sm.w = s.w; sm.h = s.h; } + return sm; +} + +let socket = null; + + + +function initSocket() { + try { + socket = io(SERVER_URL, { + path: '/socket.io/', + transports: ['websocket', 'polling'] + }); + + // Store socket on state for other modules + state.socket = socket; + + socket.on('connect', () => { + console.log(`Connected to server: ${SERVER_URL}, socket.id: ${socket.id}, worldId: ${state.worldId}`); + state.mySocketId = socket.id; + state.isMultiplayer = true; + + // Присоединяемся к миру + socket.emit('join_world', { world_id: state.worldId, player_name: state.playerName }); + + // Показываем в UI + if (state.worldIdEl) state.worldIdEl.textContent = state.worldId; + if (state.multiplayerStatus) state.multiplayerStatus.style.display = 'block'; + + // Initialize trade socket handlers + initTradeSocket(socket); + }); + + socket.on('connect_error', (error) => { + console.error('Socket connection error:', error); + state.isMultiplayer = false; + }); + + socket.on('disconnect', () => { + console.log('Disconnected from server'); + state.isMultiplayer = false; + state.otherPlayers.clear(); + if (state.multiplayerStatus) state.multiplayerStatus.style.display = 'none'; + }); + + // Обработка world_state + socket.on('world_state', (data) => { + console.log('Received world_state:', data); + + if (data.seed !== undefined && data.seed !== state.worldSeed) { + const oldSeed = state.worldSeed; + state.worldSeed = data.seed; + console.log('World seed changed from', oldSeed, 'to', state.worldSeed); + + state.generated.clear(); + grid.clear(); + blocks.length = 0; + state.placedBlocks = []; + state.removedBlocks = []; + console.log('World regenerated with new seed:', state.worldSeed); + } + + if (data.blocks && Array.isArray(data.blocks)) { + for (const block of data.blocks) { + const key = k(block.gx, block.gy, block.gz || 0); + state.serverOverrides.set(key, { op: block.op, t: block.t }); + if (block.op === 'set') { + setBlock(block.gx, block.gy, block.gz || 0, block.t, false); + } else if (block.op === 'remove') { + removeBlock(block.gx, block.gy, block.gz || 0); + } + } + } + + if (data.time !== undefined) { + state.worldTime = data.time; + state.isNightTime = state.worldTime > 0.5; + } + + // Spawn point + { + const startGX = 6; + for (let dx = -4; dx <= 4; dx++) for (let dz = -24; dz <= 24; dz++) genColumn(startGX + dx, dz); + const surfaceY = surfaceGyAt(startGX, Math.floor((state.player.z || 0) / state.TILE)); + let safeGY = surfaceY - 1; + const aboveBlock = getBlock(startGX, surfaceY - 1); + if (aboveBlock && aboveBlock.t === 'water') { + for (let gy = SEA_GY - 1; gy >= 0; gy--) { + const b = getBlock(startGX, gy, Math.floor((state.player.z || 0) / state.TILE)); + if (!b || b.dead || b.t === 'air' || b.t === 'water') continue; + safeGY = gy - 1; + break; + } + } + state.spawnPoint.x = startGX * TILE; + state.spawnPoint.y = safeGY * TILE; + console.log('Client-side spawn point:', state.spawnPoint, 'surfaceY:', surfaceY, 'safeGY:', safeGY); + } + + state.player.x = state.spawnPoint.x; + state.player.y = state.spawnPoint.y; + state.player.vx = 0; + state.player.vy = 0; + state.player.fallStartY = state.player.y; + console.log('Player moved to spawn point:', state.player.x, state.player.y); + + state.player.hp = 100; + state.player.hunger = 100; + state.player.o2 = 100; + state.player.invuln = 0; + console.log('[MULTIPLAYER CONNECT] Player HP set to 100% on connect'); + + if (data.players && Array.isArray(data.players)) { + state.otherPlayers.clear(); + for (const p of data.players) { + if (p.socket_id !== state.mySocketId) { + state.otherPlayers.set(p.socket_id, { + x: p.x, + y: p.y, + color: getRandomPlayerColor(p.socket_id), + name: p.player_name || 'Игрок' + }); + } + } + state.playerCountEl.textContent = data.players.length; + } + // Server mobs + if (data.mobs && Array.isArray(data.mobs)) { + state.serverMobs.clear(); + for (const m of data.mobs) { + let sm = { ...m, maxHp: m.maxHp || m.hp, vx: m.vx || 0, vy: m.vy || 0, grounded: false, inWater: false, aiT: 0, dir: m.dir || 1, dead: false, fuse: m.fuse || 0, shootCooldown: 2, speed: m.speed || 80 }; + applyMobSize(sm); + state.serverMobs.set(m.id, sm); + } + } + + // Set myTgId from server if provided + if (data.tg_id) state.myTgId = data.tg_id; + }); + + socket.on('player_joined', (data) => { + console.log('Player joined:', data.socket_id); + if (data.socket_id !== state.mySocketId) { + const spawnGX = 6; + genColumn(spawnGX, Math.floor((state.player.z || 0) / state.TILE)); + const surfaceY = surfaceGyAt(spawnGX, Math.floor((state.player.z || 0) / state.TILE)); + const safeSpawnX = spawnGX * TILE; + const safeSpawnY = (surfaceY - 1) * TILE; + + state.otherPlayers.set(data.socket_id, { + x: safeSpawnX, + y: safeSpawnY, + color: getRandomPlayerColor(data.socket_id), + name: data.player_name || 'Игрок' + }); + addChatMessage('Система', `Игрок присоединился`); + updateSaveButtonVisibility(); + } + }); + + socket.on('player_moved', (data) => { + if (data.socket_id !== state.mySocketId && state.otherPlayers.has(data.socket_id)) { + const p = state.otherPlayers.get(data.socket_id); + p.x = data.x; + p.y = data.y; + if (data.player_name) { + p.name = data.player_name; + } + } + }); + + socket.on('player_left', (data) => { + console.log('Player left:', data.socket_id); + state.otherPlayers.delete(data.socket_id); + addChatMessage('Система', `Игрок покинул игру`); + updateSaveButtonVisibility(); + }); + + // === MOB SYNC === + socket.on('mob_spawned', (data) => { + let sm = { ...data, maxHp: data.maxHp || data.hp, vx: data.vx || 0, vy: data.vy || 0, grounded: false, inWater: false, aiT: 0, dir: data.dir || 1, dead: false, fuse: data.fuse || 0, shootCooldown: 2, speed: data.speed || 80 }; + applyMobSize(sm); + state.serverMobs.set(data.id, sm); + }); + + socket.on('mob_positions', (arr) => { + for (const u of arr) { + const sm = state.serverMobs.get(u.id); + if (sm) { sm.x = u.x; sm.y = u.y; sm.vx = u.vx; sm.vy = u.vy; sm.dir = u.dir; sm.hp = u.hp; sm.fuse = u.fuse || 0; } + } + }); + + socket.on('mob_despawned', (data) => { state.serverMobs.delete(data.id); }); + + socket.on('mob_died', (data) => { + const sm = state.serverMobs.get(data.id); + if (sm && data.killer === state.mySocketId) { + if (sm.kind === 'chicken') playSound('hurt_chicken'); + state.inv.meat += (sm.kind === 'chicken' ? 1 : 2); + if (sm.kind === 'skeleton') { + state.inv.arrow += 2 + Math.floor(Math.random() * 3); + if (Math.random() < 0.15) state.inv.bow = (state.inv.bow || 0) + 1; + } + rebuildHotbar(); + } + state.serverMobs.delete(data.id); + }); + + socket.on('mob_hurt_ack', (data) => { + const sm = state.serverMobs.get(data.id); + if (sm) sm.hp = data.hp; + }); + + socket.on('mob_explode', (data) => { + explodeTNT3D({ gx: data.gx, gy: data.gy, gz: data.gz || 0 }, state); + state.serverMobs.delete(data.id); + }); + + socket.on('mob_shoot', (data) => { + state.projectiles.push({ + x: data.x, y: data.y, vx: data.vx, vy: data.vy, + dmg: data.dmg, owner: 'mob', life: data.life + }); + }); + + socket.on('block_changed', (data) => { + const key = k(data.gx, data.gy, data.gz || 0); + state.serverOverrides.set(key, { op: data.op, t: data.t }); + if (data.op === 'set') { + setBlock(data.gx, data.gy, data.gz || 0, data.t, false); + } else if (data.op === 'remove') { + removeBlock(data.gx, data.gy, data.gz || 0); + } + }); + + socket.on('chat_message', (data) => { + const senderName = data.socket_id === state.mySocketId ? 'Вы' : `Игрок ${data.socket_id.substring(0, 6)}`; + addChatMessage(senderName, data.message); + }); + + socket.on('time_update', (data) => { + if (data.time !== undefined) { + state.worldTime = data.time; + state.isNightTime = state.worldTime > 0.5; + } + }); + + } catch (e) { + console.error('Error initializing socket:', e); + state.isMultiplayer = false; + } +} + +// === physics/water-detect3d.js === +// ==================== ВОДА 3D — GrechkaCraft v3 ==================== +// Та же логика 2D-игры (кислород, всплеск, болото), но с учётом Z. + + + + + +function blockAt3(px, py, pz) { + const gx = Math.floor(px / TILE); + const gy = Math.floor(py / TILE); + const gz = Math.floor(pz / TILE); + return getBlock(gx, gy, gz); +} + +function isWaterAt(px, py, pz) { + const b = blockAt3(px, py, pz); + return !!(b && (b.t === 'water' || b.t === 'swamp_water')); +} + +function isSwampWaterAt(px, py, pz) { + const b = blockAt3(px, py, pz); + return !!(b && b.t === 'swamp_water'); +} + +// Обновляет флаги воды на сущности (игрок или моб). +// dt передаётся явно — в 2D-версии он был неявной переменной цикла. +function updateWaterFlag3(e, dt) { + const cx = e.x + e.w / 2; + const cz = (e.z || 0) + (e.d || e.w) / 2; + const wasInWater = e.inWater; + + const mid = isWaterAt(cx, e.y + e.h / 2, cz); + const feet = isWaterAt(cx, e.y + e.h - 2, cz); + e.inWater = mid || feet; + + e.inSwampWater = isSwampWaterAt(cx, e.y + e.h / 2, cz); + e.headInWater = isWaterAt(cx, e.y + 4, cz); + + if (e === state.player && !wasInWater && e.inWater && e.vy > 100) { + playSound('splash'); + } + if (e === state.player && e.inSwampWater) { + state.player.hp -= 3 * (typeof dt === 'number' ? dt : 0.016); + } +} + +// Лодка тонет, если под ней нет воды (с учётом Z). +function updateWaterPhysics3(dt) { + void dt; +} + +// === physics/collision3d.js === +// ==================== ФИЗИКА 3D — GrechkaCraft v3 ==================== +// Осевое разрешение столкновений по X → Z → Y, как в Minecraft. +// Автошаг на 1 блок, прыжок, лестницы, плавание, лодка. + + + + + +const EPS = 0.001; + +// Собственная AABB-коробка сущности: x/z — центр, y — низ (как в 2D-игре: e.x, e.y = левый-ниний) +function boxOf(e) { + return { + x0: e.x, x1: e.x + e.w, + y0: e.y, y1: e.y + e.h, + z0: e.z, z1: e.z + e.d, + }; +} + +function solidAt(gx, gy, gz) { + const b = getBlock(gx, gy, gz); + if (!b) return false; + const def = BLOCKS[b.t]; + if (!def) return false; + if (def.fluid) return false; + if (def.decor || def.climbable) return false; + return !!def.solid; +} + +function climbableAt(gx, gy, gz) { + const b = getBlock(gx, gy, gz); + return !!(b && BLOCKS[b.t] && BLOCKS[b.t].climbable); +} + +function fluidAt(gx, gy, gz) { + const b = getBlock(gx, gy, gz); + return !!(b && BLOCKS[b.t] && BLOCKS[b.t].fluid); +} + +// Пересекает ли коробка сущности твёрдый блок +function hitsSolid(bx) { + const x0 = Math.floor(bx.x0 / TILE), x1 = Math.floor((bx.x1 - EPS) / TILE); + const y0 = Math.floor(bx.y0 / TILE), y1 = Math.floor((bx.y1 - EPS) / TILE); + const z0 = Math.floor(bx.z0 / TILE), z1 = Math.floor((bx.z1 - EPS) / TILE); + for (let gx = x0; gx <= x1; gx++) { + for (let gy = y0; gy <= y1; gy++) { + for (let gz = z0; gz <= z1; gz++) { + if (solidAt(gx, gy, gz)) return true; + } + } + } + return false; +} + +// Стоит ли сущность на чём-то (для grounded) +function checkGrounded(e) { + const bx = boxOf(e); + const gy = Math.floor((bx.y1 + 1) / TILE); + const x0 = Math.floor(bx.x0 / TILE), x1 = Math.floor((bx.x1 - EPS) / TILE); + const z0 = Math.floor(bx.z0 / TILE), z1 = Math.floor((bx.z1 - EPS) / TILE); + for (let gx = x0; gx <= x1; gx++) { + for (let gz = z0; gz <= z1; gz++) { + if (solidAt(gx, gy, gz)) return true; + } + } + return false; +} + +function onLadder(e) { + const cx = Math.floor((e.x + e.w / 2) / TILE); + const cy = Math.floor((e.y + e.h / 2) / TILE); + const cz = Math.floor((e.z + e.d / 2) / TILE); + return climbableAt(cx, cy, cz); +} + +function inFluid(e) { + const cx = Math.floor((e.x + e.w / 2) / TILE); + const cy = Math.floor((e.y + e.h * 0.4) / TILE); + const cz = Math.floor((e.z + e.d / 2) / TILE); + return fluidAt(cx, cy, cz); +} + +// Разрешение одной оси. delta — смещение за кадр. +function moveAxis(e, axis, delta) { + if (delta === 0) return false; + const bx = boxOf(e); + if (axis === 'x') { bx.x0 += delta; bx.x1 += delta; } + else if (axis === 'z') { bx.z0 += delta; bx.z1 += delta; } + else { bx.y0 += delta; bx.y1 += delta; } + + if (!hitsSolid(bx)) { + if (axis === 'x') e.x += delta; + else if (axis === 'z') e.z += delta; + else e.y += delta; + return false; + } + + const dir = Math.sign(delta); + + // Автошаг вверх на 1 блок + if ((axis === 'x' || axis === 'z') && e.grounded) { + const savedX = e.x, savedY = e.y, savedZ = e.z; + if (axis === 'x') e.x += delta; else e.z += delta; + e.y -= TILE; + if (!hitsSolid(boxOf(e))) { + return true; // шаг удался, продолжим движение + } + e.x = savedX; e.y = savedY; e.z = savedZ; + } + + // Откат к границе блока + // шаг за блок, пока не пересечение + const stepPx = dir * 0.5; + let moved = 0; + for (let i = 0; i < TILE * 4; i++) { + const test = boxOf(e); + if (axis === 'x') { test.x0 += stepPx; test.x1 += stepPx; } + else if (axis === 'z') { test.z0 += stepPx; test.z1 += stepPx; } + else { test.y0 += stepPx; test.y1 += stepPx; } + if (hitsSolid(test)) break; + moved += stepPx; + if (axis === 'x') e.x += stepPx; + else if (axis === 'z') e.z += stepPx; + else e.y += stepPx; + } + + if (axis === 'x') e.vx = 0; + else if (axis === 'z') e.vz = 0; + else e.vy = 0; + return true; +} + +function resolveX(e, dt) { return moveAxis(e, 'x', e.vx * dt); } +function resolveZ(e, dt) { return moveAxis(e, 'z', (e.vz || 0) * dt); } +function resolveY(e, dt) { + const hit = moveAxis(e, 'y', e.vy * dt); + e.grounded = false; + if (hit && e.vy >= 0) { + e.grounded = checkGrounded(e); + } else if (!hit) { + e.grounded = checkGrounded(e); + } + return hit; +} + +// === data/recipes.js === +const RECIPES = [ + { out:'planks', qty:4, cost:{ wood:1 } }, + { out:'ladder', qty:3, cost:{ planks:7 } }, + { out:'torch', qty:2, cost:{ coal:1, planks:1 } }, + { out:'glass', qty:1, cost:{ sand:3 } }, + { out:'brick', qty:1, cost:{ stone:2, clay:1 } }, + { out:'campfire', qty:1, cost:{ wood:1, coal:1 } }, + { out:'tnt', qty:1, cost:{ sand:2, coal:1 } }, + { out:'bed', qty:1, cost:{ wood: 3, planks: 3 } }, + { out:'boat', qty:1, cost:{ wood: 5 } }, + { out:'wood_pickaxe', qty:1, cost:{ wood: 3, planks: 2 } }, + { out:'stone_pickaxe', qty:1, cost:{ wood: 1, stone: 3 } }, + { out:'iron_pickaxe', qty:1, cost:{ wood: 1, iron_ore: 2 } }, + { out:'wood_sword', qty:1, cost:{ wood: 2, planks: 1 } }, + { out:'stone_sword', qty:1, cost:{ wood: 1, stone: 2 } }, + { out:'iron_sword', qty:1, cost:{ wood: 1, iron_ore: 1 } }, + { out:'wood_axe', qty:1, cost:{ wood:3, planks:2 } }, + { out:'stone_axe', qty:1, cost:{ wood:1, stone:3 } }, + { out:'iron_axe', qty:1, cost:{ wood:1, iron_ore:2 } }, + { out:'wood_shovel', qty:1, cost:{ wood:1, planks:1 } }, + { out:'stone_shovel', qty:1, cost:{ wood:1, stone:2 } }, + { out:'iron_shovel', qty:1, cost:{ wood:1, iron_ore:1 } }, + { out:'iron_armor', qty:1, cost:{ iron_ore: 5 } }, + { out:'gold_armor', qty:1, cost:{ gold_ore: 8 } }, + { out:'furnace', qty:1, cost:{ stone: 8 } }, + { out:'bow', qty:1, cost:{ wood: 3, planks: 2 } }, + { out:'arrow', qty:4, cost:{ stone: 1, wood: 1 } }, + { out:'flag', qty:1, cost:{ planks:3, iron_ore:1 } }, + { out:'bread', qty:1, cost:{ wheat: 3 } }, + { out:'farmland', qty:1, cost:{ dirt:1 } }, + { out:'wheat_seeds', qty:1, cost:{ farmland:1, dirt:1 } }, +]; + +// Рецепты печи (обжиг) +const SMELTING_RECIPES = [ + { in:'sand', qty:1, out:'glass', outQty:1, time:3 }, + { in:'clay', qty:1, out:'brick', outQty:1, time:3 }, + { in:'iron_ore', qty:1, out:'iron_ingot', outQty:1, time:5 }, + { in:'gold_ore', qty:1, out:'gold_ingot', outQty:1, time:5 }, + { in:'copper_ore', qty:1, out:'copper_ingot', outQty:1, time:4 }, + { in:'meat', qty:1, out:'cooked', outQty:1, time:2 }, + { in:'cobblestone', qty:1, out:'stone', outQty:1, time:2 }, + { in:'potato', qty:1, out:'baked_potato', outQty:1, time:2 } +]; + +// === ui/furnace.js === +// ==================== ПЕЧЬ (ОБЖИГ) ==================== + + + + + + + + +const furnacePanel = document.getElementById('furnacePanel'); +const furnaceContent = document.getElementById('furnaceContent'); + +function initFurnace() { + document.getElementById('furnaceClose').onclick = () => { + furnacePanel.style.display = 'none'; + state.currentFurnaceKey = null; + }; +} + +function openFurnaceUI(gx, gy, gz) { + state.currentFurnaceKey = `${gx},${gy},${gz || 0}`; + furnacePanel.style.display = 'block'; + renderFurnaceUI(); +} + +function renderFurnaceUI() { + if (!state.currentFurnaceKey) return; + + // Проверяем что печь всё ещё существует + const [fgx, fgy, fgz] = state.currentFurnaceKey.split(',').map(Number); + const fb = getBlock(fgx, fgy, fgz || 0); + if (!fb || fb.t !== 'furnace') { + furnacePanel.style.display = 'none'; + state.currentFurnaceKey = null; + return; + } + + // Текущий процесс обжига + const active = state.activeFurnaces.get(state.currentFurnaceKey); + + let html = '
'; + + // Доступные рецепты — показываем только те, для которых есть ресурсы + for (let i = 0; i < SMELTING_RECIPES.length; i++) { + const recipe = SMELTING_RECIPES[i]; + const haveCount = state.inv[recipe.in] || 0; + const canSmelt = haveCount >= recipe.qty; + + // Иконка результата + const outDef = BLOCKS[recipe.out]; + const outItem = ITEMS[recipe.out]; + const iconStr = outItem ? outItem.icon : (outDef ? '🧱' : '❓'); + const nameStr = outItem ? outItem.n : (outDef ? outDef.n : recipe.out); + const inItem = ITEMS[recipe.in]; + const inDef = BLOCKS[recipe.in]; + const inName = inItem ? inItem.n : (inDef ? inDef.n : recipe.in); + + html += `
`; + html += `
${iconStr}
`; + html += `
`; + html += `
${nameStr}
`; + html += `
${inName} x${recipe.qty} (есть: ${haveCount}) • ${recipe.time}с
`; + html += `
`; + html += ``; + html += `
`; + } + + // Текущий прогресс + if (active) { + const pct = Math.min(100, Math.floor((active.progress / active.recipe.time) * 100)); + html += `
`; + html += `
🔥 Обжиг: ${pct}%
`; + html += `
`; + html += `
`; + html += `
`; + } + + html += '
'; + furnaceContent.innerHTML = html; +} + +// Глобальная функция для кнопки обжига +window._smelt = (recipeIdx) => { + if (!state.currentFurnaceKey) return; + const recipe = SMELTING_RECIPES[recipeIdx]; + if ((state.inv[recipe.in] || 0) < recipe.qty) return; + + // Уже обжигаем в этой печи? + if (state.activeFurnaces.has(state.currentFurnaceKey)) return; + + // Забираем ресурсы + state.inv[recipe.in] -= recipe.qty; + + // Запускаем обжиг + state.activeFurnaces.set(state.currentFurnaceKey, { + recipe: recipe, + progress: 0 + }); + + playSound('fire'); + rebuildHotbar(); + renderFurnaceUI(); +}; + +// Тик печей — вызывается в главном цикле +function tickFurnaces(dt) { + for (const [key, furnace] of state.activeFurnaces) { + furnace.progress += dt; + if (furnace.progress >= furnace.recipe.time) { + // Обжиг завершён — выдаём результат + const outItem = furnace.recipe.out; + if (ITEMS[outItem]) { + state.inv[outItem] = (state.inv[outItem] || 0) + furnace.recipe.outQty; + } else if (BLOCKS[outItem]) { + state.inv[outItem] = (state.inv[outItem] || 0) + furnace.recipe.outQty; + } + playSound('stone_build'); + state.activeFurnaces.delete(key); + + // Если эта печь открыта — обновляем UI + if (key === state.currentFurnaceKey) { + renderFurnaceUI(); + } + } + } +} + +// === entities/mob-ai3d.js === +// ==================== МОБЫ 3D: ИИ + ФИЗИКА — GrechkaCraft v3 ==================== +// Вся логика из 2D-игры (все 9 видов, ночные/дневные, лут), но цель — +// настоящая 3D-точка игрока (x,y,z) и прыжки через стены по всем осям. + + + + + + + + + +function isNight() { + return state.worldTime > 0.5; +} + +// Центры сущностей в тайлах +function cx(e) { return (e.x + e.w / 2) / TILE; } +function cy(e) { return (e.y + e.h / 2) / TILE; } +function cz(e) { return ((e.z || 0) + (e.d || e.w) / 2) / TILE; } + +function playerC() { + const p = state.player; + return { x: cx(p), y: cy(p), z: cz(p) }; +} + +function dist3(a, b) { + return Math.hypot(a.x - b.x, a.y - b.y, a.z - b.z); +} + +// Тянет моба к игроку по обеим горизонтальным осям (X и Z) +function steerToPlayer(m, pc) { + const dx = pc.x - cx(m); + const dz = pc.z - cz(m); + const len = Math.hypot(dx, dz) || 1; + m.vx = (dx / len) * (m.speed || 60); + m.vz = (dz / len) * (m.speed || 60); + m.dir = dx >= 0 ? 1 : -1; + m.faceYaw = Math.atan2(dz, dx); +} + +function touchPlayer(m, pc, damage, knock = 1) { + const d = dist3({ x: cx(m), y: cy(m), z: cz(m) }, pc); + if (d < 1.6 && state.player.invuln <= 0) { + state.player.hp -= calculateDamage(damage); + state.player.invuln = 0.8; + const dx = state.player.x - m.x; + const dz = (state.player.z || 0) - (m.z || 0); + const len = Math.hypot(dx, dz) || 1; + state.player.vx += (dx / len) * 420 * knock; + state.player.vz += (dz / len) * 420 * knock; + state.player.vy -= 260 * knock; + playSound('hit1'); + return true; + } + return false; +} + +function mobAI(m, dt) { + updateWaterFlag3(m, dt); + const pc = playerC(); + const night = isNight(); + + // ---------- ночные мобы днём горят ---------- + if ((m.kind === 'zombie' || m.kind === 'creeper' || m.kind === 'skeleton') && !night) { + m.hp -= 30 * dt; + m.vx *= 0.5; + m.vz *= 0.5; + return; + } + + if (m.kind === 'zombie') { + steerToPlayer(m, pc); + if (m.inWater && Math.random() < 0.06) m.vy = -260; + touchPlayer(m, pc, 15); + } else if (m.kind === 'creeper') { + steerToPlayer(m, pc); + const d = dist3({ x: cx(m), y: cy(m), z: cz(m) }, pc); + if (m.inWater && Math.random() < 0.06) m.vy = -260; + if (d < 3) { + m.fuse -= dt; + if (m.fuse <= 0) { + explodeTNT3D({ gx: Math.floor(cx(m)), gy: Math.floor(cy(m)), gz: Math.floor(cz(m)) }, state); + m.hp = 0; + } + } else if (d < 2.5) { + m.fuse = 0.5; + } + } else if (m.kind === 'skeleton') { + steerToPlayer(m, pc); + const d = dist3({ x: cx(m), y: cy(m), z: cz(m) }, pc); + m.shootCooldown -= dt; + if (d < 15 && m.shootCooldown <= 0) { + m.shootCooldown = 2.0; + const ox = m.x + m.w / 2, oy = m.y + m.h / 3, oz = (m.z || 0) + (m.d || m.w) / 2; + const tx = state.player.x + state.player.w / 2; + const ty = state.player.y + state.player.h / 2; + const tz = (state.player.z || 0) + (state.player.d || state.player.w) / 2; + // полёт стрелы по 3D + const ddx = tx - ox, ddy = ty - oy, ddz = tz - oz; + const dist = Math.hypot(ddx, ddy, ddz) || 1; + const speed = 450; + state.projectiles.push({ + x: ox, y: oy, z: oz, + vx: ddx / dist * speed, + vy: ddy / dist * speed, + vz: ddz / dist * speed, + dmg: 6, owner: 'mob', life: 3, + }); + } + } else if (m.kind === 'scorpion') { + steerToPlayer(m, pc); + if (m.inWater && Math.random() < 0.06) m.vy = -260; + if (touchPlayer(m, pc, 8)) state.player.slowTimer = 3; + } else if (m.kind === 'polar_bear') { + // нейтрален: бродит + m.aiT -= dt; + if (m.aiT <= 0) { + m.aiT = 2.0 + Math.random() * 3; + const a = Math.random() * Math.PI * 2; + m.walkX = Math.cos(a); + m.walkZ = Math.sin(a); + if (Math.random() < 0.3) { m.walkX = 0; m.walkZ = 0; } + } + m.vx = (m.walkX || 0) * m.speed; + m.vz = (m.walkZ || 0) * m.speed; + if (m.inWater) m.vy = -120; + touchPlayer(m, pc, 10, 1.2); + } else if (m.kind === 'slime') { + // прыгает к игроку + m.aiT -= dt; + if (m.aiT <= 0) { + m.aiT = 1.5 + Math.random() * 1.5; + steerToPlayer(m, pc); + m.vy = -200; + } + touchPlayer(m, pc, 8); + } else if (m.kind === 'eagle') { + // летает, пикирует + const d = dist3({ x: cx(m), y: cy(m), z: cz(m) }, pc); + if (d < 20) { + const dx = pc.x - cx(m), dz = pc.z - cz(m), dy = pc.y - cy(m); + const hl = Math.hypot(dx, dz) || 1; + m.vx = dx / hl * m.speed; + m.vz = dz / hl * m.speed; + m.vy = dy > 0 ? 60 : -60; + } else { + m.aiT -= dt; + if (m.aiT <= 0) { + m.aiT = 2 + Math.random() * 3; + const a = Math.random() * Math.PI * 2; + m.walkX = Math.cos(a); + m.walkZ = Math.sin(a); + } + m.vx = (m.walkX || 0) * m.speed * 0.5; + m.vz = (m.walkZ || 0) * m.speed * 0.5; + m.vy = Math.sin(performance.now() / 1000) * 30; + } + if (d < 1.6 && state.player.invuln <= 0) { + state.player.hp -= calculateDamage(10); + state.player.invuln = 0.8; + state.player.vy -= 200; + playSound('hit1'); + } + m.vy *= 0.5; + m.flying = true; + } else { + // животные (pig, chicken): бродят + m.aiT -= dt; + if (m.aiT <= 0) { + m.aiT = 1.8 + Math.random() * 2.5; + const a = Math.random() * Math.PI * 2; + m.walkX = Math.cos(a); + m.walkZ = Math.sin(a); + if (Math.random() < 0.25) { m.walkX = 0; m.walkZ = 0; } + } + const sp = m.kind === 'chicken' ? 55 : 40; + m.vx = (m.walkX || 0) * sp; + m.vz = (m.walkZ || 0) * sp; + if (m.inWater) m.vy = -120; + } + + // ---------- прыжок через препятствие по всем осям ---------- + if (m.grounded && !m.flying && m.kind !== 'eagle') { + const speed = Math.hypot(m.vx || 0, m.vz || 0); + if (speed > 5) { + const gx = Math.floor((m.x + (m.vx > 0 ? m.w + 2 : -2)) / TILE); + const gz = Math.floor(((m.z || 0) + (m.vz > 0 ? (m.d || m.w) + 2 : -2)) / TILE); + const gy = Math.floor((m.y + m.h - 1) / TILE); + const bx = getBlock(gx, gy, Math.floor(cz(m))); + const bz = getBlock(Math.floor(cx(m)), gy, gz); + if (bx || bz) m.vy = -280; + } + } + + // ---------- ФИЗИКА ---------- + if (!m.flying) { + const g = m.inWater ? GRAV_WATER : GRAV; + m.vy += g * dt; + } + m.y += m.vy * dt; + m.x += (m.vx || 0) * dt; + m.z += (m.vz || 0) * dt; + resolveX(m, dt); + resolveZ(m, dt); + resolveY(m, dt); + + // орёл не падает + if (m.flying) m.grounded = false; +} + +// Лут — та же таблица, что в 2D +function getMobLoot(kind) { + const table = { + chicken: [{item:'chicken_meat',min:1,max:2,chance:1},{item:'feather',min:0,max:1,chance:0.5}], + pig: [{item:'meat',min:1,max:2,chance:1}], + zombie: [{item:'meat',min:0,max:1,chance:0.5},{item:'iron_ingot',min:0,max:1,chance:0.3}], + skeleton: [{item:'arrow',min:2,max:4,chance:1},{item:'bone',min:0,max:2,chance:0.6},{item:'bow',min:1,max:1,chance:0.15}], + creeper: [{item:'gunpowder',min:1,max:2,chance:1}], + scorpion: [{item:'scorpion_stinger',min:0,max:1,chance:0.4}], + polar_bear:[{item:'polar_fur',min:1,max:2,chance:0.8},{item:'meat',min:1,max:2,chance:1}], + slime: [{item:'slime_ball',min:1,max:2,chance:1}], + eagle: [{item:'eagle_feather',min:1,max:2,chance:0.7}], + }; + return table[kind] || []; +} + +// === world/weather.js === +// ==================== ПОГОДА (biome-aware) ==================== + + + + + +// Возможные погоды по биому +const BIOME_WEATHER = { + snow: ['clear', 'snow', 'blizzard'], + tundra: ['clear', 'snow', 'blizzard'], + forest: ['clear', 'rain', 'storm'], + plains: ['clear', 'rain'], + desert: ['clear', 'clear', 'rain'], + swamp: ['clear', 'rain', 'storm'], + mountains: ['clear', 'rain', 'snow'] +}; + +// Помощник интерполяции цветов +function lerpColor(a, b, t) { + const ar = parseInt(a.slice(1,3),16), ag = parseInt(a.slice(3,5),16), ab = parseInt(a.slice(5,7),16); + const br = parseInt(b.slice(1,3),16), bg = parseInt(b.slice(3,5),16), bb = parseInt(b.slice(5,7),16); + const r = Math.round(ar + (br - ar) * t); + const g = Math.round(ag + (bg - ag) * t); + const bl = Math.round(ab + (bb - ab) * t); + return '#' + ((1<<24)|(r<<16)|(g<<8)|bl).toString(16).slice(1); +} + +// Цвета неба по биому, погоде и времени суток +function skyColor(night, biome, weatherType, worldTime) { + function weatherSky() { + switch (weatherType) { + case 'blizzard': return '#8a9bae'; + case 'storm': return '#3d4f5f'; + case 'rain': return '#6B7B8D'; + case 'snow': return '#b8c6d4'; + case 'clear': return null; + default: return null; + } + } + + const dayColor = (biome === 'desert') ? '#f4d9a0' : (biome === 'tundra' || biome === 'snow') ? '#c4d4e0' : (biome === 'swamp') ? '#4a6741' : '#87CEEB'; + const dawnColor = '#FF9940'; + const duskMidColor = '#FF6B35'; + const duskEndColor = '#1a0533'; + const nightColor = '#070816'; + + let skyColorResult; + + if (worldTime < 0.05) { + const t = worldTime / 0.05; + skyColorResult = lerpColor(dawnColor, dayColor, t); + } else if (worldTime < 0.45) { + skyColorResult = dayColor; + } else if (worldTime < 0.55) { + const t = (worldTime - 0.45) / 0.1; + if (t < 0.5) { + skyColorResult = lerpColor(dayColor, duskMidColor, t * 2); + } else { + skyColorResult = lerpColor(duskMidColor, duskEndColor, (t - 0.5) * 2); + } + } else { + skyColorResult = nightColor; + if (weatherType === 'blizzard') return '#1a1a2e'; + if (weatherType === 'storm') return '#0a0a15'; + return nightColor; + } + + const wc = weatherSky(); + if (wc) { + const blendT = 0.6; + skyColorResult = lerpColor(skyColorResult, wc, blendT); + } + + return skyColorResult; +} + +function updateWeather(dt) { + state.weatherTimer += dt; + if (state.weatherTimer >= state.weatherChangeInterval) { + state.weatherTimer = 0; + state.weatherChangeInterval = 60 + Math.random() * 120; + + // Определяем биом по позиции игрока + const playerGx = Math.floor(state.player.x / state.TILE); + const biome = getCachedBiome(playerGx, Math.floor((state.player.z || 0) / state.TILE)); + const weathers = BIOME_WEATHER[biome] || ['clear']; + + const night = isNight(); + const weights = weathers.map(w => { + if (w === 'clear') return night ? 2 : 4; + if (w === 'rain') return night ? 3 : 2; + if (w === 'snow') return night ? 2 : 3; + if (w === 'storm') return night ? 3 : 1; + if (w === 'blizzard') return night ? 3 : 1; + return 1; + }); + const total = weights.reduce((a, b) => a + b, 0); + let r = Math.random() * total; + state.weatherType = weathers[0]; + for (let i = 0; i < weathers.length; i++) { + r -= weights[i]; + if (r <= 0) { state.weatherType = weathers[i]; break; } + } + + state.isRaining = (state.weatherType === 'rain' || state.weatherType === 'storm'); + } + + // Плавная интерполяция интенсивности дождя + const rainTarget = (state.weatherType === 'rain' || state.weatherType === 'storm') ? 0.6 : 0; + state.rainIntensity += (rainTarget - state.rainIntensity) * dt * 0.5; + if (state.rainIntensity < 0.01) state.rainIntensity = 0; + + // Молния (только при storm) + if (state.weatherType === 'storm') { + state.lightningTimer -= dt; + if (state.lightningTimer <= 0) { + state.lightningFlash = 0.25; + state.lightningTimer = 4 + Math.random() * 12; + } + } + if (state.lightningFlash > 0) { + state.lightningFlash -= dt; + if (state.lightningFlash < 0) state.lightningFlash = 0; + } + + // Снежинки (при snow / blizzard) + if (state.weatherType === 'snow' || state.weatherType === 'blizzard') { + const spawnCount = state.weatherType === 'blizzard' ? Math.floor(80 * dt) : Math.floor(30 * dt); + const maxFlakes = state.weatherType === 'blizzard' ? 600 : 250; + for (let i = 0; i < spawnCount && state.snowflakes.length < maxFlakes; i++) { + state.snowflakes.push({ + x: state.camX + Math.random() * state.W, + y: state.camY - 20, + vy: 40 + Math.random() * 60, + vx: (state.weatherType === 'blizzard' ? -60 - Math.random() * 80 : -10 - Math.random() * 20), + size: 2 + Math.random() * 3, + wobble: Math.random() * Math.PI * 2 + }); + } + } + // Обновление снежинок + for (let i = state.snowflakes.length - 1; i >= 0; i--) { + const s = state.snowflakes[i]; + s.y += s.vy * dt; + s.x += s.vx * dt; + s.wobble += dt * 3; + s.x += Math.sin(s.wobble) * 15 * dt; + if (s.y > state.camY + state.H + 20 || s.x < state.camX - 50 || s.x > state.camX + state.W + 50) { + state.snowflakes.splice(i, 1); + } + } + // Убираем снег при смене погоды + if (state.weatherType !== 'snow' && state.weatherType !== 'blizzard' && !state.isRaining) { + if (state.snowflakes.length > 0) { + state.snowflakes.splice(0, Math.ceil(state.snowflakes.length * dt * 2)); + } + } +} + +function updateRain(dt) { + if (!state.isRaining || state.rainIntensity < 0.01) { + if (state.raindrops.length > 0) { + state.raindrops.splice(0, Math.ceil(state.raindrops.length * dt * 3)); + } + return; + } + const spawnRate = Math.floor(state.rainIntensity * 60 * dt); + for (let i = 0; i < spawnRate && state.raindrops.length < state.MAX_RAINDROPS; i++) { + state.raindrops.push({ + x: state.camX + Math.random() * state.W, + y: state.camY - 20, + vy: 400 + Math.random() * 200, + len: 8 + Math.random() * 12 + }); + } + for (let i = state.raindrops.length - 1; i >= 0; i--) { + const d = state.raindrops[i]; + d.y += d.vy * dt; + d.x -= 30 * dt; + if (d.y > state.camY + state.H + 20) { + state.raindrops.splice(i, 1); + } + } +} + +function drawWeather(ctx) { + if (state.raindrops.length > 0) { + ctx.save(); + ctx.strokeStyle = 'rgba(174,194,224,0.5)'; + ctx.lineWidth = 1.5; + ctx.beginPath(); + for (const d of state.raindrops) { + ctx.moveTo(d.x, d.y); + ctx.lineTo(d.x - 3, d.y + d.len); + } + ctx.stroke(); + ctx.restore(); + } + + if (state.snowflakes.length > 0) { + ctx.save(); + ctx.fillStyle = 'rgba(255,255,255,0.85)'; + for (const s of state.snowflakes) { + ctx.beginPath(); + ctx.arc(s.x, s.y, s.size, 0, Math.PI * 2); + ctx.fill(); + } + ctx.restore(); + } + + if (state.lightningFlash > 0) { + ctx.save(); + ctx.fillStyle = `rgba(255,255,255,${Math.min(1, state.lightningFlash * 4)})`; + ctx.fillRect(0, 0, state.W, state.H); + ctx.restore(); + } +} + +// === entities/mobs3d.js === +// Сущности: животные + зомби + новые мобы + +class Entity { + constructor(x, y, w, h) { + this.x = x; + this.y = y; + this.z = 0; // третье измерение: глубина мира + this.w = w; + this.h = h; + this.d = w; // размер по Z + this.vx = 0; + this.vy = 0; + this.vz = 0; + this.hp = 3; + this.grounded = false; + this.inWater = false; + this.aiT = 0; + this.dir = 1; + } +} + +class Pig extends Entity { + constructor(x, y, z) { super(x, y, 34, 24); this.kind = 'pig'; this.z = z || 0; this.hp = 2; } +} + +class Chicken extends Entity { + constructor(x, y, z) { super(x, y, 26, 22); this.kind = 'chicken'; this.z = z || 0; this.hp = 1; } +} + +class Zombie extends Entity { + constructor(x, y, z) { super(x, y, 34, 50); this.kind = 'zombie'; this.z = z || 0; this.hp = 4; this.speed = 80 + Math.random() * 40; } +} + +class Creeper extends Entity { + constructor(x, y, z) { super(x, y, 34, 50); this.kind = 'creeper'; this.z = z || 0; this.hp = 4; this.speed = 60 + Math.random() * 30; this.fuse = 3.2; } +} + +class Skeleton extends Entity { + constructor(x, y, z) { super(x, y, 34, 50); this.kind = 'skeleton'; this.z = z || 0; this.hp = 4; this.speed = 70 + Math.random() * 30; this.shootCooldown = 0; } +} + +class Scorpion extends Entity { + constructor(x, y, z) { super(x, y, 26, 26); this.kind = 'scorpion'; this.z = z || 0; this.hp = 3; this.speed = 90; this.fuse = 0; this.shootCooldown = 0; } +} + +class PolarBear extends Entity { + constructor(x, y, z) { super(x, y, 40, 34); this.kind = 'polar_bear'; this.z = z || 0; this.hp = 8; this.speed = 50; this.fuse = 0; this.shootCooldown = 2; } +} + +class Slime extends Entity { + constructor(x, y, z) { super(x, y, 24, 24); this.kind = 'slime'; this.z = z || 0; this.hp = 2; this.speed = 30; this.fuse = 0; this.shootCooldown = 2; } +} + +class Eagle extends Entity { + constructor(x, y, z) { super(x, y, 30, 22); this.kind = 'eagle'; this.z = z || 0; this.hp = 3; this.speed = 120; this.fuse = 0; this.shootCooldown = 0; } +} + +// === game/modes.js === +// ==================== РЕЖИМЫ ==================== + + + +const MODES = [{ id: 'mine', icon: '⛏️' }, { id: 'build', icon: '🧱' }]; + + + +function mode() { + return MODES[state.modeIdx].id; +} + +function initModes() { + const modeBtn = document.getElementById('modeBtn'); + modeBtn.onclick = () => { + playSound('click'); // Звук клика по кнопке режима + state.modeIdx = (state.modeIdx + 1) % MODES.length; + modeBtn.textContent = MODES[state.modeIdx].icon; + }; +} + +// === input/mouse-handler3d.js === +// ==================== ВЗАИМОДЕЙСТВИЕ 3D (мышь/тап) — GrechkaCraft v3 ==================== +// Ключевое отличие от 2D: блок добывается/ставится ТОЛЬКО если игрок рядом +// (в пределах REACH). Касание экрана вдали — лишь поворот камеры. + + + + + + + + + + + + + + + +// ---------- ДИСТАНЦИЯ ДОБЫЧИ (как в майнкрафте) ---------- +const REACH = 5.2; // тайлов от центра игрока до центра блока +const REACH_SQ = REACH * REACH; + +function distToBlockSq(gx, gy, gz) { + const p = state.player; + const TILE = state.TILE; + const px = (p.x + p.w / 2) / TILE; + const py = (p.y + p.h / 2) / TILE; + const pz = ((p.z || 0) + (p.d || p.w) / 2) / TILE; + const dx = gx + 0.5 - px; + const dy = gy + 0.5 - py; + const dz = (gz || 0) + 0.5 - pz; + return dx * dx + dy * dy + dz * dz; +} + +function withinReach(gx, gy, gz) { + return distToBlockSq(gx, gy, gz) <= REACH_SQ; +} + +// Моб тоже бьётся только вблизи +function withinReachEntity(e) { + const p = state.player; + const TILE = state.TILE; + const px = (p.x + p.w / 2) / TILE; + const py = (p.y + p.h / 2) / TILE; + const pz = ((p.z || 0) + (p.d || p.w) / 2) / TILE; + const ex = (e.x + e.w / 2) / TILE; + const ey = (e.y + e.h / 2) / TILE; + const ez = ((e.z || 0) + (e.d || e.w) / 2) / TILE; + const dx = ex - px, dy = ey - py, dz = ez - pz; + return dx * dx + dy * dy + dz * dz <= REACH_SQ; +} + +const CROP_SEED_MAP = { + wheat_seeds: 'wheat_stage0', + carrot: 'carrot_stage0', + potato: 'potato_stage0', +}; +const CROP_HARVEST_MAP = { wheat_stage3: 'wheat', carrot_stage3: 'carrot', potato_stage3: 'potato' }; + +function handleBlockDrop(removed, inv) { + if (removed.t === 'grass') { + if (Math.random() < 0.5) inv.wheat_seeds = (inv.wheat_seeds || 0) + 1; + return; + } + const harvestItem = CROP_HARVEST_MAP[removed.t]; + const seedItem = CROP_SEED_MAP[removed.t]; + if (harvestItem) { + inv[harvestItem] = (inv[harvestItem] || 0) + (BLOCKS[removed.t].harvestQty || 1); + addToRecentItems(harvestItem); + if (seedItem) { inv[seedItem] = (inv[seedItem] || 0) + 1; addToRecentItems(seedItem); } + } else if (seedItem) { + inv[seedItem] = (inv[seedItem] || 0) + 1; + addToRecentItems(seedItem); + } else { + inv[removed.t] = (inv[removed.t] || 0) + 1; + addToRecentItems(removed.t); + } +} + +const mouse = { x: null, y: null }; + +let miningHeld = false; +let miningInterval = null; + +function stopMining() { + miningHeld = false; + if (miningInterval) { clearInterval(miningInterval); miningInterval = null; } +} + +// Основное действие. coords — результат рейкаста; face — нормаль грани. +function handleTap(wx, wy, gz, face) { + if (state.craftOpen) return; + if (state.player.hp <= 0) return; + + const TILE = state.TILE; + // gz приходит из рейкаста; если нет — берём Z игрока + const z = gz === undefined || gz === null ? Math.floor((state.player.z || 0) / TILE) : gz; + + // Ближайший блок к точке касания + let gx = Math.floor(wx / TILE); + let gy = Math.floor(wy / TILE); + let b = getBlock(gx, gy, z); + + // Если блока нет — пробуем тот же столбец, но сдвинутые на 1 (декоративные/плоские) + if (!b) { + for (const dy of [-1, 1, 0]) { + const cand = getBlock(gx, gy + dy, z); + if (cand) { gy += dy; b = cand; break; } + } + } + + if (!b) return; + + // ---------- ДОСТИЖИМОСТЬ ---------- + if (!withinReach(gx, gy, z)) { + // Слишком далеко: подсказка, ничего не ломаем + showReachHint(); + return; + } + + // Пробуждение: клик по кровати когда спишь + if (state.player.sleeping && b.t === 'bed') { + state.player.sleeping = false; + return; + } + if (state.player.sleeping) return; + + // Печь — открываем панель обжига + if (b.t === 'furnace' && mode() === 'mine') { + openFurnaceUI(gx, gy, z); + return; + } + + // ---------- Урон мобам (только вблизи) ---------- + if (mode() === 'mine') { + let handled = false; + if (state.isMultiplayer) { + for (const [id, sm] of state.serverMobs) { + if (sm.dead) continue; + if (!withinReachEntity(sm)) continue; + if (state.player.invuln <= 0) { + let dmg = 1; + for (const st of ['iron_sword', 'stone_sword', 'wood_sword']) { + if (state.inv[st] > 0) { dmg = TOOLS[st].damage || 3; useTool(st); break; } + } + state.socket.emit('mob_hurt', { id, dmg }); + playSound('attack'); + handled = true; + } + break; + } + } + if (!handled) { + for (let i = state.mobs.length - 1; i >= 0; i--) { + const m = state.mobs[i]; + if (!withinReachEntity(m)) continue; + let dmg = 1; + for (const st of ['iron_sword', 'stone_sword', 'wood_sword']) { + if (state.inv[st] > 0) { dmg = TOOLS[st].damage || 3; useTool(st); break; } + } + m.hp -= dmg; + const kx = (state.player.x + state.player.w / 2) - (m.x + m.w / 2); + const kz = ((state.player.z || 0) + (state.player.d || state.player.w) / 2) - ((m.z || 0) + (m.d || m.w) / 2); + m.vx += (kx / (Math.hypot(kx, kz) || 1)) * 400; + m.vz += (kz / (Math.hypot(kx, kz) || 1)) * 400; + m.vy -= 200; + playSound('attack'); + if (m.hp <= 0) { + if (m.kind === 'chicken') playSound('hurt_chicken'); + state.inv.meat += (m.kind === 'chicken' ? 1 : 2); + if (m.kind === 'skeleton') { + state.inv.arrow += 2 + Math.floor(Math.random() * 3); + if (Math.random() < 0.15) state.inv.bow = (state.inv.bow || 0) + 1; + } + state.mobs.splice(i, 1); + rebuildHotbar(); + } + handled = true; + break; + } + } + if (handled) return; + } + + // ---------- Лук ---------- + if (state.selected === 'bow' && state.inv.bow > 0 && state.inv.arrow > 0) { + const p = state.player; + const ox = p.x + p.w / 2, oy = p.y + p.h / 3, oz = (p.z || 0) + (p.d || p.w) / 2; + const tx = wx, ty = wy, tz = (z + 0.5) * TILE; + const dx = tx - ox, dy = ty - oy, dz = tz - oz; + const dist = Math.hypot(dx, dy, dz) || 1; + const speed = 550; + state.projectiles.push({ + x: ox, y: oy, z: oz, + vx: dx / dist * speed, vy: dy / dist * speed, vz: dz / dist * speed, + dmg: 10, owner: 'player', life: 4, + }); + state.inv.arrow--; + useTool('bow'); + playSound('hit1'); + rebuildHotbar(); + return; + } + + // ---------- Еда ---------- + if (ITEMS[state.selected] && state.inv[state.selected] > 0) { + const it = ITEMS[state.selected]; + if (state.player.hp < 100 || state.player.hunger < 100) { + playSound('eat1'); + state.player.hunger = Math.min(100, state.player.hunger + it.food); + state.player.hp = Math.min(100, state.player.hp + 15); + state.inv[state.selected]--; + rebuildHotbar(); + } + return; + } + + // ---------- Жарка на костре ---------- + if (b.t === 'campfire' && state.selected === 'meat' && state.inv.meat > 0) { + playSound('fire'); + state.inv.meat--; + state.inv.cooked = (state.inv.cooked || 0) + 1; + rebuildHotbar(); + return; + } + + // ---------- Сон ---------- + if (b.t === 'bed' && isNight()) { + state.player.sleeping = true; + saveGame(); + return; + } + + // ---------- ДОБЫЧА ---------- + if (mode() === 'mine') { + const def = BLOCKS[b.t]; + if (def.fluid) return; + if (def.decor && def.growthStage === undefined && !def.harvestable) return; + + if (b.t === 'tnt') { activateTNT3D(b, 3.2); return; } + + const hardness = def.hardness || 1; + if (hardness === Infinity) return; + + if (hardness === 0) { + const removed = removeBlock(gx, gy, z); + if (removed) { + handleBlockDrop(removed, state.inv); + sendBlockChange(gx, gy, z, removed.t, 'remove'); + rebuildHotbar(); + } + return; + } + + if (state.mining.gx === gx && state.mining.gy === gy && (state.mining.gz || 0) === z) { + state.mining.progress += getMiningSpeed(b.t); + } else { + state.mining = { gx, gy, gz: z, progress: getMiningSpeed(b.t), hardness }; + } + + if (b.t === 'glass') playSound('glass1'); + else if (b.t === 'sand') playSound('sand1'); + else if (b.t === 'stone' || b.t.endsWith('_ore')) playSound('stone1'); + else if (b.t === 'wood' || b.t === 'planks') playSound('wood1'); + else playSound('cloth1'); + + if (state.mining.progress >= hardness) { + finishMining(gx, gy, z, b.t); + } else { + startHoldMining(gx, gy, z, b.t); + } + return; + } + + // ---------- СТРОИТЕЛЬСТВО ---------- + if (mode() === 'build') { + // посев на грядку + const seedToCrop = CROP_SEED_MAP[state.selected]; + if (seedToCrop && state.inv[state.selected] > 0) { + if (b.t === 'farmland' && !getBlock(gx, gy - 1, z)) { + setBlock(gx, gy - 1, z, seedToCrop, true); + state.inv[state.selected]--; + rebuildHotbar(); + return; + } + if (!b) { + const below = getBlock(gx, gy + 1, z); + if (below && below.t === 'farmland') { + setBlock(gx, gy, z, seedToCrop, true); + state.inv[state.selected]--; + rebuildHotbar(); + return; + } + } + } + + // цель — соседняя клетка по нормали грани + let tx2 = gx, ty2 = gy, tz2 = z; + if (face) { + if (Math.abs(face.x) >= Math.abs(face.y) && Math.abs(face.x) >= Math.abs(face.z)) tx2 += Math.sign(face.x); + else if (Math.abs(face.y) >= Math.abs(face.z)) ty2 += Math.sign(face.y); + else tz2 += Math.sign(face.z); + } else { + ty2 -= 1; + } + // по Y: в игре +y вниз, three +y вверх → нормаль -y = вниз = +gy + if (face && Math.abs(face.y) >= Math.abs(face.x) && Math.abs(face.y) >= Math.abs(face.z)) { + ty2 = gy - Math.sign(face.y); + } + + if (getBlock(tx2, ty2, tz2)) return; + if (state.inv[state.selected] <= 0) return; + if (!BLOCKS[state.selected]) return; + + // не ставим в себя + const p = state.player; + const bx = tx2 * TILE, by = ty2 * TILE, bz = tz2 * TILE; + const overlap = !(bx >= p.x + p.w || bx + TILE <= p.x || + by >= p.y + p.h || by + TILE <= p.y || + bz >= (p.z || 0) + (p.d || p.w) || bz + TILE <= (p.z || 0)); + if (overlap) return; + + setBlock(tx2, ty2, tz2, state.selected, true); + state.inv[state.selected]--; + sendBlockChange(tx2, ty2, tz2, state.selected, 'set'); + + if (state.selected === 'stone' || state.selected === 'brick') playSound('stone_build'); + else if (state.selected === 'wood' || state.selected === 'planks') playSound('wood_build'); + else if (state.selected === 'glass') playSound('glass1'); + else if (state.selected === 'sand') playSound('sand1'); + else playSound('cloth1'); + + rebuildHotbar(); + } +} + +function finishMining(gx, gy, gz, type) { + const def = BLOCKS[type]; + const minTool = def.minTool; + let drops = true; + if (minTool) { + const toolId = getBestTool(type); + if (toolId) { + const tool = TOOLS[toolId]; + if (toolTierLessThan(tool.toolTier, minTool)) drops = false; + else useTool(toolId); + } else { + drops = false; + } + } else { + const toolId = getBestTool(type); + if (toolId) useTool(toolId); + } + + const removed = removeBlock(gx, gy, gz); + if (removed) { + if (drops) { + handleBlockDrop(removed, state.inv); + } else if (def.toolType === 'pickaxe') { + state.inv.cobblestone = (state.inv.cobblestone || 0) + 1; + } + sendBlockChange(gx, gy, gz, removed.t, 'remove'); + playSound('stone1'); + rebuildHotbar(); + } + stopMining(); + state.mining = { gx: null, gy: null, gz: null, progress: 0, hardness: 0 }; +} + +function startHoldMining(gx, gy, gz, type) { + miningHeld = true; + if (miningInterval) clearInterval(miningInterval); + miningInterval = setInterval(() => { + if (!miningHeld) { clearInterval(miningInterval); miningInterval = null; return; } + const mg = state.mining; + if (mg.gx === null) { miningHeld = false; clearInterval(miningInterval); miningInterval = null; return; } + const mb = getBlock(mg.gx, mg.gy, mg.gz || 0); + if (!mb || mb.dead || mb.t !== type) { + miningHeld = false; + clearInterval(miningInterval); + miningInterval = null; + return; + } + if (!withinReach(mg.gx, mg.gy, mg.gz || 0)) { + // отошли — добыча прекращается + miningHeld = false; + clearInterval(miningInterval); + miningInterval = null; + state.mining = { gx: null, gy: null, gz: null, progress: 0, hardness: 0 }; + return; + } + mg.progress += getMiningSpeed(mb.t) * 0.3; + if (mg.progress >= mg.hardness) { + finishMining(mg.gx, mg.gy, mg.gz || 0, mb.t); + } + }, 100); +} + +// Подсказка «слишком далеко» — один элемент, не спамит +let hintEl = null; +let hintTimer = null; +function showReachHint() { + if (!hintEl) { + hintEl = document.createElement('div'); + hintEl.style.cssText = 'position:fixed;left:50%;top:18%;transform:translateX(-50%);' + + 'z-index:300;background:rgba(0,0,0,.72);color:#fff;padding:8px 14px;border-radius:8px;' + + 'font:600 14px system-ui;pointer-events:none;'; + document.body.appendChild(hintEl); + } + hintEl.textContent = 'Слишком далеко — подойди ближе'; + hintEl.style.display = 'block'; + clearTimeout(hintTimer); + hintTimer = setTimeout(() => { if (hintEl) hintEl.style.display = 'none'; }, 1200); +} + +// === render/hero-rig.js === +// ==================== ДАННЫЕ ГЕРОЯ (из платформёра grechka_game.html) ==================== +// COL/PARTS/PIVOT дословно оттуда: 107 прямоугольников, 5 частей (head/body/legs/tail/eye). +// Ноль rig = ступни; высота рисунка ~3.07 юнита при PARTS-координатах. + +const HERO_COL = { + blue: { hex: 0x0232fe, d: 0.60 }, + white: { hex: 0xffffff, d: 0.86 }, + cyan: { hex: 0x00a1ff, d: 1.00 }, + navy: { hex: 0x001a85, d: 1.12 }, +}; + +const HERO_PARTS = {"head":[[-0.90035,2.93184,0.40909,0.13636,"blue"],[-1.17308,2.79547,0.13636,0.13636,"blue"],[-0.62762,2.79547,0.13636,0.13636,"blue"],[-0.96853,2.65911,0.27273,0.13636,"blue"],[-0.49126,2.65911,0.13636,0.13636,"blue"],[-1.17308,2.52275,0.13636,0.13636,"blue"],[-0.62762,2.52275,0.13636,0.13636,"blue"],[0.12238,2.52275,1.09091,0.13636,"blue"],[-0.83217,2.38638,0.81818,0.13636,"blue"],[1.00874,2.38638,0.68182,0.13636,"blue"],[-0.83217,2.25002,0.27273,0.13636,"blue"],[1.41783,2.25002,0.13636,0.13636,"blue"],[-1.03671,2.11365,0.13636,0.13636,"blue"],[1.28147,2.11365,0.13636,0.13636,"blue"],[0.12238,2.38638,1.09091,0.13636,"white"],[0.32692,2.25002,2.04545,0.13636,"white"],[-0.6958,2.11365,0.54545,0.13636,"white"],[-0.15035,2.11365,0.27273,0.13636,"white"],[0.66783,2.11365,1.09091,0.13636,"white"],[-0.3549,2.11365,0.13636,0.13636,"cyan"],[0.0542,2.11365,0.13636,0.13636,"cyan"]],"body":[[-1.17308,1.97729,0.13636,0.13636,"blue"],[1.1451,1.97729,0.13636,0.13636,"blue"],[-0.96853,1.84093,0.27273,0.13636,"blue"],[1.28147,1.77275,0.13636,0.27273,"blue"],[-0.90035,1.70456,0.13636,0.13636,"blue"],[-1.1049,1.5682,0.27273,0.13636,"blue"],[-0.42308,1.5682,0.27273,0.13636,"blue"],[0.53147,1.5682,0.27273,0.13636,"blue"],[1.07692,1.5682,0.27273,0.13636,"blue"],[1.41783,1.5682,0.13636,0.13636,"blue"],[-1.30944,1.43184,0.13636,0.13636,"blue"],[1.00874,1.43184,0.13636,0.13636,"blue"],[1.28147,1.43184,0.13636,0.13636,"blue"],[-1.17308,1.15911,0.13636,0.40909,"blue"],[1.1451,1.22729,0.13636,0.27273,"blue"],[-1.4458,1.02275,0.13636,0.13636,"blue"],[1.00874,1.02275,0.13636,0.13636,"blue"],[-1.4458,0.88638,0.40909,0.13636,"blue"],[-0.96853,0.88638,0.27273,0.13636,"blue"],[-0.08217,0.88638,0.68182,0.13636,"blue"],[0.87238,0.88638,0.13636,0.13636,"blue"],[-1.51399,0.75002,0.54545,0.13636,"blue"],[-0.90035,0.75002,0.13636,0.13636,"blue"],[0.66783,0.75002,0.27273,0.13636,"blue"],[1.00874,0.75002,0.13636,0.13636,"blue"],[-0.6958,1.97729,0.81818,0.13636,"white"],[-0.01399,1.97729,0.27273,0.13636,"white"],[0.8042,1.97729,0.54545,0.13636,"white"],[-0.6958,1.77275,0.27273,0.27273,"white"],[-0.21853,1.84093,0.13636,0.13636,"white"],[0.32692,1.84093,0.13636,0.13636,"white"],[0.94056,1.77275,0.54545,0.27273,"white"],[0.0542,1.63638,0.68182,0.27273,"white"],[-0.76399,1.5682,0.40909,0.13636,"white"],[0.8042,1.5682,0.27273,0.13636,"white"],[1.28147,1.5682,0.13636,0.13636,"white"],[-1.1049,1.43184,0.27273,0.13636,"white"],[-0.01399,1.43184,1.36364,0.13636,"white"],[-0.21853,1.29547,1.5,0.13636,"white"],[0.87238,1.29547,0.40909,0.13636,"white"],[-0.90035,1.15911,0.13636,0.13636,"white"],[-0.08217,1.15911,1.22727,0.13636,"white"],[0.73601,1.15911,0.13636,0.13636,"white"],[1.00874,1.15911,0.13636,0.13636,"white"],[-1.03671,1.02275,0.13636,0.13636,"white"],[-0.01399,1.02275,1.36364,0.13636,"white"],[-0.62762,0.88638,0.40909,0.13636,"white"],[0.53147,0.88638,0.54545,0.13636,"white"],[-0.15035,0.75002,1.36364,0.13636,"white"],[0.87238,0.75002,0.13636,0.13636,"white"],[-0.21853,1.97729,0.13636,0.13636,"cyan"],[0.32692,1.97729,0.40909,0.13636,"cyan"],[0.0542,1.84093,0.40909,0.13636,"cyan"],[-0.83217,1.43184,0.27273,0.13636,"cyan"],[0.8042,1.43184,0.27273,0.13636,"cyan"],[-1.03671,1.22729,0.13636,0.27273,"cyan"],[0.59965,1.22729,0.13636,0.27273,"cyan"],[-0.76399,1.15911,0.13636,0.13636,"cyan"],[0.87238,1.15911,0.13636,0.13636,"cyan"],[-0.83217,1.02275,0.27273,0.13636,"cyan"],[0.8042,1.02275,0.27273,0.13636,"cyan"]],"tail":[[-1.71853,0.61365,0.13636,0.13636,"blue"],[-1.03671,0.61365,0.13636,0.13636,"blue"],[-0.62762,0.61365,0.40909,0.13636,"blue"],[-1.65035,0.47729,0.27273,0.13636,"blue"],[-0.90035,0.47729,0.13636,0.13636,"blue"],[-1.4458,0.34093,0.40909,0.13636,"blue"],[-0.62762,0.34093,0.40909,0.13636,"blue"],[-0.90035,0.20456,0.95455,0.13636,"blue"],[-0.90035,0.61365,0.13636,0.13636,"white"]],"legs":[[0.3951,0.61365,0.27273,0.13636,"blue"],[0.87238,0.61365,0.13636,0.13636,"blue"],[-0.55944,0.47729,0.27273,0.13636,"blue"],[0.32692,0.34093,0.13636,0.40909,"blue"],[-0.21853,0.20456,0.13636,0.13636,"blue"],[0.0542,0.20456,0.13636,0.13636,"blue"],[-0.08217,0.0682,0.95455,0.13636,"blue"],[-0.3549,0.47729,0.13636,0.13636,"white"],[-0.08217,0.34093,0.68182,0.13636,"white"],[-0.3549,0.20456,0.13636,0.13636,"white"],[-0.08217,0.20456,0.13636,0.13636,"white"],[0.19056,0.20456,0.13636,0.13636,"white"],[-0.08217,0.61365,0.68182,0.13636,"cyan"],[-0.01399,0.47729,0.54545,0.13636,"cyan"]],"eye":[[-0.42308,1.77275,0.27273,0.27273,"navy"],[0.53147,1.77275,0.27273,0.27273,"navy"]]}; + +const HERO_PIVOT = {"head":[0.0,2.5909],"body":[0.0,0.979],"legs":[-0.035,0.9091],"tail":[-0.7343,1.3287],"eye":[0.0524,2.1294]}; + +const HERO_SCALE = 0.50; + +// === render/render3d.js === +// ==================== РЕНДЕР 3D — GrechkaCraft v3 ==================== +// Объёмный мир: у каждого блока есть gx/gy/gz. Рендерим кубы по всем трём +// осям, отсекаем те, что не видны с камеры (соседи со всех шести сторон). + + + + + + + + + + +let TD = null; + +function TDparseColor(c) { + const m = /rgba?\(([^)]+)\)/.exec(c); + if (!m) return { color: new THREE.Color(c), opacity: 1 }; + const p = m[1].split(',').map(x => parseFloat(x)); + return { color: new THREE.Color(p[0] / 255, p[1] / 255, p[2] / 255), opacity: p.length > 3 ? p[3] : 1 }; +} + +function TDblockMat(t) { + const def = BLOCKS[t] || {}; + const { color, opacity } = TDparseColor(def.c || '#ff00ff'); + const a = def.alpha !== undefined ? def.alpha : opacity; + return new THREE.MeshLambertMaterial({ color, transparent: a < 1, opacity: a }); +} + +function TDisFluid(t) { const d = BLOCKS[t]; return !!(d && d.fluid); } +function TDisFlat(t) { + const d = BLOCKS[t]; + if (!d) return false; + return !d.solid || !!d.decor || !!d.climbable; +} + +// ---------- герой: тот же пиксельный рисунок, кубики ---------- +function TDbuildHeroRig() { + const group = new THREE.Group(); + const P = {}; + const MAT = {}; + for (const k of Object.keys(HERO_COL)) MAT[k] = new THREE.MeshLambertMaterial({ color: HERO_COL[k].hex }); + for (const name of Object.keys(HERO_PARTS)) { + const g = new THREE.Group(); + const j = HERO_PIVOT[name]; + g.position.set(j[0] * HERO_SCALE, j[1] * HERO_SCALE, 0); + const inner = new THREE.Group(); + inner.position.set(-j[0] * HERO_SCALE, -j[1] * HERO_SCALE, 0); + g.add(inner); + group.add(g); + P[name] = g; + for (const r of HERO_PARTS[name]) { + const depth = HERO_COL[r[4]].d * HERO_SCALE; + const m = new THREE.Mesh( + new THREE.BoxGeometry(r[2] * HERO_SCALE, r[3] * HERO_SCALE, depth), + MAT[r[4]] + ); + m.position.set((r[0] - 0.24) * HERO_SCALE, r[1] * HERO_SCALE, depth / 2); + m.castShadow = true; + m.receiveShadow = true; + inner.add(m); + } + } + return { group, P }; +} + +const TD_MOB_COLORS = { + zombie: 0x2ecc71, pig: 0xffb6c1, chicken: 0xecf0f1, creeper: 0x4caf50, + skeleton: 0xeceff1, scorpion: 0x5d4037, polar_bear: 0xeceff1, + slime: 0x4caf50, eagle: 0x5d4037, +}; + +function TDnameSprite(name) { + const cv = document.createElement('canvas'); + cv.width = 256; cv.height = 48; + const g = cv.getContext('2d'); + g.font = 'bold 26px system-ui'; + g.textAlign = 'center'; + g.fillStyle = 'rgba(0,0,0,0.45)'; + g.fillRect(0, 0, 256, 48); + g.fillStyle = '#fff'; + g.fillText(String(name || '?').slice(0, 14), 128, 33); + const sp = new THREE.Sprite(new THREE.SpriteMaterial({ map: new THREE.CanvasTexture(cv), depthTest: false })); + sp.scale.set(2.2, 0.41, 1); + return sp; +} + +// ==================== INIT ==================== +function TDinit() { + const canvas = state.canvas; + const renderer = new THREE.WebGLRenderer({ canvas, antialias: true }); + if (renderer.outputEncoding !== undefined && THREE.sRGBEncoding !== undefined) { + renderer.outputEncoding = THREE.sRGBEncoding; + } + renderer.shadowMap.enabled = true; + renderer.shadowMap.type = THREE.BasicShadowMap; + + const scene = new THREE.Scene(); + scene.background = new THREE.Color(0x8fc7f5); + scene.fog = new THREE.Fog(0x8fc7f5, 30, 90); + const camera = new THREE.PerspectiveCamera(60, 1, 0.1, 300); + + const hemi = new THREE.HemisphereLight(0xcfe6ff, 0x6ab04c, 0.85); + const sun = new THREE.DirectionalLight(0xffffff, 1.5); + sun.castShadow = true; + sun.shadow.mapSize.set(512, 512); + const sc = sun.shadow.camera; + sc.left = -26; sc.right = 26; sc.top = 26; sc.bottom = -26; + sc.near = 1; sc.far = 140; + sun.shadow.normalBias = 0.05; + const amb = new THREE.AmbientLight(0xffffff, 0.25); + scene.add(hemi, sun, sun.target, amb); + + const hero = TDbuildHeroRig(); + scene.add(hero.group); + + // Рабочая область: только блоки рядом с игроком (по всем осям) + const crack = new THREE.Mesh( + new THREE.BoxGeometry(1.004, 1.004, 1.004), + new THREE.MeshBasicMaterial({ color: 0x000000, transparent: true, opacity: 0 }) + ); + crack.visible = false; + scene.add(crack); + + const ghost = new THREE.Mesh( + new THREE.BoxGeometry(1.02, 1.02, 1.02), + new THREE.MeshBasicMaterial({ color: 0xffffff, wireframe: true, transparent: true, opacity: 0.9 }) + ); + ghost.visible = false; + scene.add(ghost); + + // куб подсветки выбранного блока + const outline = new THREE.LineSegments( + new THREE.EdgesGeometry(new THREE.BoxGeometry(1.03, 1.03, 1.03)), + new THREE.LineBasicMaterial({ color: 0xffffff }) + ); + outline.visible = false; + scene.add(outline); + + const cloudMeshes = []; + const cloudMat = new THREE.MeshLambertMaterial({ color: 0xffffff, transparent: true, opacity: 0.75 }); + for (let i = 0; i < 16; i++) { + const m = new THREE.Mesh(new THREE.BoxGeometry(4, 0.8, 2.2), cloudMat); + scene.add(m); + cloudMeshes.push(m); + } + + const projPool = []; + for (let i = 0; i < 24; i++) { + const m = new THREE.Mesh(new THREE.BoxGeometry(0.55, 0.1, 0.1), new THREE.MeshBasicMaterial({ color: 0xf1c40f })); + m.visible = false; + scene.add(m); + projPool.push(m); + } + + const PMAX = 800; + const pGeo = new THREE.BufferGeometry(); + const pPos = new Float32Array(PMAX * 3); + const pCol = new Float32Array(PMAX * 3); + pGeo.setAttribute('position', new THREE.BufferAttribute(pPos, 3)); + pGeo.setAttribute('color', new THREE.BufferAttribute(pCol, 3)); + const points = new THREE.Points(pGeo, new THREE.PointsMaterial({ size: 0.16, vertexColors: true, depthWrite: false })); + points.frustumCulled = false; + scene.add(points); + + function makeFall(n, color, size) { + const g = new THREE.BufferGeometry(); + const pos = new Float32Array(n * 3); + g.setAttribute('position', new THREE.BufferAttribute(pos, 3)); + const pts = new THREE.Points(g, new THREE.PointsMaterial({ color, size, transparent: true, opacity: 0.7, depthWrite: false })); + pts.frustumCulled = false; + pts.visible = false; + scene.add(pts); + return { pts, pos, n }; + } + const rain = makeFall(500, 0x74b9ff, 0.2); + const snow = makeFall(300, 0xffffff, 0.17); + + const lightPool = []; + for (let i = 0; i < 6; i++) { + const L = new THREE.PointLight(0xff9a3c, 0, 16); + scene.add(L); + lightPool.push(L); + } + const flamePool = []; + for (let i = 0; i < 8; i++) { + const f = new THREE.Mesh(new THREE.ConeGeometry(0.3, 0.75, 6), new THREE.MeshBasicMaterial({ color: 0xff7a1a })); + f.visible = false; + scene.add(f); + flamePool.push(f); + } + + const boatMesh = new THREE.Mesh( + new THREE.BoxGeometry(1.4, 0.5, 1.0), + new THREE.MeshLambertMaterial({ color: 0x8b4513 }) + ); + boatMesh.visible = false; + boatMesh.castShadow = true; + scene.add(boatMesh); + + TD = { + renderer, scene, camera, hemi, sun, amb, hero, + crack, ghost, outline, cloudMeshes, projPool, points, pPos, pCol, PMAX, + rain, snow, lightPool, flamePool, boatMesh, + blockMeshes: [], lastVersion: -1, meshT: 0, + mobs: new Map(), players: new Map(), + yaw: 0.0, pitch: 0.42, dist: 10, + ptrs: new Map(), pinchD: 0, + lastTap: null, hovered: null, fireCache: null, + heroStep: 0, face: 1, frame: 0, lastT: 0, + colCache: new Map(), + }; + TDbindInput(canvas); + TDresize(); + window.addEventListener('resize', TDresize); +} + +function TDresize() { + if (!TD) return; + const w = window.innerWidth, h = window.innerHeight; + state.W = w; + state.H = h; + TD.renderer.setPixelRatio(1); + TD.renderer.setSize(w, h, false); + TD.camera.aspect = w / h; + TD.camera.updateProjectionMatrix(); +} + +// ==================== БЛОКИ ==================== +// Полный пересбор мешей редкий; в обычном кадре — только обновление матриц. +const VIEW_R = 14; // радиус прорисовки в тайлах по всем осям + +function isHiddenAt(gx, gy, gz) { + // спрятан ли блок: все 6 соседей непрозрачные? + return isOpaqueAt(gx + 1, gy, gz) && isOpaqueAt(gx - 1, gy, gz) && + isOpaqueAt(gx, gy + 1, gz) && isOpaqueAt(gx, gy - 1, gz) && + isOpaqueAt(gx, gy, gz + 1) && isOpaqueAt(gx, gy, gz - 1); +} + +function isOpaqueAt(gx, gy, gz) { + const b = getBlock(gx, gy, gz); + if (!b) return false; + const def = BLOCKS[b.t]; + if (!def) return false; + return !!def.solid && !def.fluid && !def.decor && !def.climbable && def.alpha === undefined; +} + +function TDrebuildBlocks(px, py, pz) { + for (const e of TD.blockMeshes) { + TD.scene.remove(e.mesh); + e.mesh.geometry.dispose(); + e.mesh.material.dispose(); + } + TD.blockMeshes = []; + const byType = new Map(); + for (const b of state.blocks) { + if (b.dead) continue; + if (!BLOCKS[b.t]) continue; + const dx = b.gx - px, dy = b.gy - py, dz = (b.gz || 0) - pz; // py — игровой gy + if (dx * dx + dy * dy + dz * dz > VIEW_R * VIEW_R) continue; + if (!TDisFluid(b.t) && !TDisFlat(b.t) && isHiddenAt(b.gx, b.gy, b.gz || 0)) continue; + if (!byType.has(b.t)) byType.set(b.t, []); + byType.get(b.t).push(b); + } + const boxGeo = new THREE.BoxGeometry(1, 1, 1); + const planeGeo = new THREE.PlaneGeometry(0.92, 0.92); + for (const [t, list] of byType) { + const fluid = TDisFluid(t); + const flat = !fluid && TDisFlat(t); + const mesh = new THREE.InstancedMesh(flat ? planeGeo : boxGeo, TDblockMat(t), list.length); + mesh.castShadow = !flat; + mesh.receiveShadow = true; + if (flat) mesh.material.side = THREE.DoubleSide; + const m = new THREE.Matrix4(); + const q = new THREE.Quaternion(); + const e = new THREE.Euler(); + for (let i = 0; i < list.length; i++) { + const b = list[i]; + if (flat) { + // плоские блоки (цветы) — поворачиваем к камере, стоят на земле + e.set(-Math.PI / 2, 0, 0); + q.setFromEuler(e); + m.compose(new THREE.Vector3(b.gx + 0.5, -b.gy + 0.05, (b.gz || 0) + 0.5), q, new THREE.Vector3(1, 1, 1)); + } else if (fluid) { + m.makeScale(1, 0.82, 1); + m.setPosition(b.gx + 0.5, -b.gy - 0.09, (b.gz || 0) + 0.5); + } else { + m.identity(); + m.setPosition(b.gx + 0.5, -b.gy - 0.5, (b.gz || 0) + 0.5); + } + mesh.setMatrixAt(i, m); + } + mesh.instanceMatrix.needsUpdate = true; + mesh.userData.list = list; + TD.scene.add(mesh); + TD.blockMeshes.push({ mesh, type: t }); + } +} + +// ==================== PICK (рейкаст по 3D) ==================== +const TDray = new THREE.Raycaster(); +const TDndc = new THREE.Vector2(); + +function TDpick(sx, sy) { + const r = state.canvas.getBoundingClientRect(); + TDndc.x = ((sx - r.left) / r.width) * 2 - 1; + TDndc.y = -((sy - r.top) / r.height) * 2 + 1; + TDray.setFromCamera(TDndc, TD.camera); + const hits = TDray.intersectObjects(TD.blockMeshes.map(x => x.mesh), false); + if (!hits.length) return null; + const h = hits[0]; + const b = h.object.userData.list[h.instanceId]; + if (!b) return null; + // мировые игровые координаты точки удара + const gx = Math.floor(h.point.x); + const gy = -Math.floor(h.point.y); + const gz = Math.floor(h.point.z); + const wx = (h.point.x) * state.TILE; + const wy = (-h.point.y) * state.TILE; + return { gx, gy, gz, wx, wy, face: h.face ? h.face.normal : null }; +} + +// ==================== ВВОД ==================== +function TDbindInput(canvas) { + canvas.addEventListener('pointerdown', (e) => { + TD.ptrs.set(e.pointerId, { x: e.clientX, y: e.clientY, sx: e.clientX, sy: e.clientY, moved: false, t: performance.now() }); + if (TD.ptrs.size === 2) { + const q = [...TD.ptrs.values()]; + TD.pinchD = Math.hypot(q[0].x - q[1].x, q[0].y - q[1].y); + } + stopMining(); + }); + + canvas.addEventListener('pointermove', (e) => { + const q = TD.ptrs.get(e.pointerId); + if (!q) return; + const dx = e.clientX - q.x, dy = e.clientY - q.y; + q.x = e.clientX; q.y = e.clientY; + if (Math.hypot(e.clientX - q.sx, e.clientY - q.sy) > 8) q.moved = true; + if (TD.ptrs.size === 2) { + const v = [...TD.ptrs.values()]; + const d = Math.hypot(v[0].x - v[1].x, v[0].y - v[1].y); + if (TD.pinchD > 0 && d > 0) TD.dist = Math.min(34, Math.max(4, TD.dist * TD.pinchD / d)); + TD.pinchD = d; + return; + } + if (q.moved) { + TD.yaw -= dx * 0.005; + TD.pitch = Math.min(1.45, Math.max(0.06, TD.pitch + dy * 0.005)); + } + }); + + const up = (e) => { + const q = TD.ptrs.get(e.pointerId); + TD.ptrs.delete(e.pointerId); + TD.pinchD = 0; + if (q && !q.moved && performance.now() - q.t < 600) { + const hit = TDpick(e.clientX, e.clientY); + if (hit) { + TD.lastTap = hit; + handleTap(hit.wx, hit.wy, hit.gz, hit.face); + } + } + }; + canvas.addEventListener('pointerup', up); + canvas.addEventListener('pointercancel', (e) => { TD.ptrs.delete(e.pointerId); TD.pinchD = 0; }); + canvas.addEventListener('contextmenu', (e) => e.preventDefault()); + canvas.addEventListener('wheel', (e) => { + e.preventDefault(); + e.stopPropagation(); + TD.dist = Math.min(34, Math.max(4, TD.dist * (1 + e.deltaY * 0.001))); + }, { passive: false, capture: true }); +} + +// ==================== СУЩНОСТИ ==================== +function TDmobMesh(m) { + let e = TD.mobs.get(m); + if (!e) { + const g = new THREE.Group(); + const body = new THREE.Mesh( + new THREE.BoxGeometry(1, 1, 1), + new THREE.MeshLambertMaterial({ color: TD_MOB_COLORS[m.kind] || 0x2ecc71 }) + ); + body.castShadow = true; + g.add(body); + const eyeM = new THREE.MeshBasicMaterial({ color: 0x111111 }); + const e1 = new THREE.Mesh(new THREE.BoxGeometry(0.14, 0.14, 0.05), eyeM); + e1.position.set(-0.16, 0.22, 0.26); + const e2 = e1.clone(); + e2.position.x = 0.16; + g.add(e1, e2); + TD.scene.add(g); + e = { g, body }; + TD.mobs.set(m, e); + } + return e; +} + +function TDplayerEntry(id, p) { + let e = TD.players.get(id); + if (!e) { + const rig = TDbuildHeroRig(); + const label = TDnameSprite(p.name); + label.position.y = 2.2; + rig.group.add(label); + TD.scene.add(rig.group); + e = { rig, label }; + TD.players.set(id, e); + } + return e; +} + +// ==================== КАДР ==================== +function renderFrame3D(now) { + if (!TD) TDinit(); + const p = state.player; + const TILE = state.TILE; + TD.frame++; + const dt = Math.min(0.05, Math.max(0.001, (now - (TD.lastT || now - 16)) / 1000)); + TD.lastT = now; + + const ptx = (p.x + (p.w || 34) / 2) / TILE; + const pgy = (p.y + (p.h || 34) / 2) / TILE; // игровый Y (вниз) + const py3 = -pgy; // three Y (вверх) + const ptz = ((p.z || 0) + (p.d || 34) / 2) / TILE; + + // пересборка мешей: при изменении мира или раз в ~2 сек (для плавной подгрузки) + // пересборка не чаще раза в 700 мс и только при изменении мира + const ver = state.blocksVersion || 0; + if ((ver !== TD.lastVersion && now - TD.meshT > 700) || !TD.blockMeshes.length) { + TD.meshT = now; + TD.lastVersion = ver; + TDrebuildBlocks(ptx, pgy, ptz); + } + + // небо/свет. Первые секунды после старта держим полдень, чтобы не было «рассвета» + const night = isNight(); + const sky = skyColor(night, 'plains', state.weatherType, state.worldTime); + TD.scene.background.set(sky); + TD.scene.fog.color.copy(TD.scene.background); + TD.sun.intensity = night ? 0.14 : 1.5; + TD.hemi.intensity = night ? 0.3 : 0.85; + TD.amb.intensity = night ? 0.34 : 0.25; + if (state.lightningFlash > 0) TD.hemi.intensity += Math.min(2.2, state.lightningFlash * 2.4); + TD.sun.position.set(ptx + 20, py3 + 36, ptz + 20); + TD.sun.target.position.set(ptx, py3, ptz); + TD.sun.target.updateMatrixWorld(); + + // камера-орбита; yaw — тот же угол, что и для WASD + camDir.yaw = TD.yaw; + const cp = Math.cos(TD.pitch), sp2 = Math.sin(TD.pitch); + TD.camera.position.set( + ptx + TD.dist * Math.sin(TD.yaw) * cp, + py3 + TD.dist * sp2, + ptz + TD.dist * Math.cos(TD.yaw) * cp + ); + TD.camera.lookAt(ptx, py3, ptz); + + // герой: позиция в ногах коллайдера, поворот по направлению взгляда + TD.hero.group.position.set(ptx, -p.y / TILE, ptz); + if (p.facing !== undefined) { + const wantYaw = -p.facing; + TD.hero.group.rotation.y += (wantYaw - TD.hero.group.rotation.y) * Math.min(1, 9 * dt); + } + const moving = Math.hypot(p.vx || 0, p.vz || 0) > 20 && p.grounded; + if (moving) TD.heroStep += dt * 11; + TD.hero.P.legs.rotation.z = moving ? Math.sin(TD.heroStep) * 0.34 : 0; + TD.hero.P.legs.rotation.x = moving ? Math.cos(TD.heroStep) * 0.22 : 0; + + // мобы + const allMobs = state.isMultiplayer ? Array.from(state.serverMobs.values()) : state.mobs; + const seen = new Set(); + for (const m of allMobs) { + if (m.dead) continue; + seen.add(m); + const e = TDmobMesh(m); + e.body.scale.set((m.w || 30) / TILE, (m.h || 30) / TILE, (m.d || m.w || 30) / TILE); + e.g.position.set( + (m.x + (m.w || 30) / 2) / TILE, + -(m.y + (m.h || 30) / 2) / TILE, + ((m.z || 0) + (m.d || m.w || 30) / 2) / TILE + ); + } + for (const [m, e] of TD.mobs) { + if (!seen.has(m)) { TD.scene.remove(e.g); TD.mobs.delete(m); } + } + + // игроки сети + const seenP = new Set(); + if (state.otherPlayers) { + for (const [id, pl] of state.otherPlayers) { + seenP.add(id); + const e = TDplayerEntry(id, pl); + e.rig.group.position.set((pl.x + 17) / TILE, -pl.y / TILE, ((pl.z || 0) + 17) / TILE); + } + } + for (const [id, e] of TD.players) { + if (!seenP.has(id)) { TD.scene.remove(e.rig.group); TD.players.delete(id); } + } + + // лодка + if (state.boat && state.boat.active) { + TD.boatMesh.visible = true; + TD.boatMesh.position.set(state.boat.x / TILE, -state.boat.y / TILE, (state.boat.z || 0) / TILE); + } else TD.boatMesh.visible = false; + + // снаряды + const projs = state.projectiles || []; + for (let i = 0; i < TD.projPool.length; i++) { + const mesh = TD.projPool[i]; + const pr = projs[i]; + if (!pr) { mesh.visible = false; continue; } + mesh.visible = true; + mesh.material.color.set(pr.owner === 'mob' ? 0xc0392b : 0xf1c40f); + mesh.position.set(pr.x / TILE, -pr.y / TILE, (pr.z || 0) / TILE); + mesh.rotation.z = -Math.atan2(pr.vy, pr.vx); + } + + // частицы + const parts = state.parts || []; + const n = Math.min(parts.length, TD.PMAX); + for (let i = 0; i < n; i++) { + const pt = parts[i]; + TD.pPos[i * 3] = pt.x / TILE; + TD.pPos[i * 3 + 1] = -pt.y / TILE; + TD.pPos[i * 3 + 2] = (pt.z || 0) / TILE; + let cc = TD.colCache.get(pt.c); + if (!cc) { cc = new THREE.Color(pt.c || '#ffffff'); TD.colCache.set(pt.c, cc); } + TD.pCol[i * 3] = cc.r; TD.pCol[i * 3 + 1] = cc.g; TD.pCol[i * 3 + 2] = cc.b; + } + TD.points.geometry.setDrawRange(0, n); + TD.points.geometry.attributes.position.needsUpdate = true; + TD.points.geometry.attributes.color.needsUpdate = true; + + // облака + const clouds = state.clouds || []; + for (let i = 0; i < TD.cloudMeshes.length; i++) { + const cm = TD.cloudMeshes[i]; + const c = clouds.length ? clouds[i % clouds.length] : null; + if (!c) { cm.visible = false; continue; } + cm.visible = true; + cm.scale.set((c.w || 120) / TILE, 1, 1); + cm.position.set(c.x / TILE, -c.y / TILE, ptz - 12); + } + + // огни + if (TD.frame % 20 === 0 || !TD.fireCache) { + const found = []; + for (const b of state.blocks) { + if (b.dead) continue; + const def = BLOCKS[b.t]; + if (!def) continue; + const lit = def.lightRadius || b.t === 'campfire' || + (b.t === 'furnace' && state.activeFurnaces && state.activeFurnaces.has(b.gx + ',' + b.gy + ',' + (b.gz || 0))); + if (!lit) continue; + const dx = b.gx - ptx, dy = -b.gy + pty, dz = (b.gz || 0) - ptz; + found.push({ t: b.t, gx: b.gx, gy: b.gy, gz: b.gz || 0, d: dx * dx + dy * dy + dz * dz }); + } + found.sort((a, b) => a.d - b.d); + TD.fireCache = found.slice(0, 8); + } + for (const L of TD.lightPool) L.intensity = 0; + for (const f of TD.flamePool) f.visible = false; + let li = 0, fi = 0; + for (const src of (TD.fireCache || [])) { + if (li < TD.lightPool.length) { + const L = TD.lightPool[li++]; + L.position.set(src.gx + 0.5, -src.gy + 0.5, src.gz + 0.5); + L.intensity = 1.6 + Math.sin(now / 130 + src.gx) * 0.35; + } + if ((src.t === 'campfire' || src.t === 'furnace') && fi < TD.flamePool.length) { + const f = TD.flamePool[fi++]; + f.visible = true; + f.position.set(src.gx + 0.5, -src.gy + 0.78 + Math.sin(now / 90 + src.gy) * 0.06, src.gz + 0.5); + const sc2 = 0.9 + Math.sin(now / 70 + src.gx * 2) * 0.18; + f.scale.set(sc2, sc2 * (1 + Math.sin(now / 55) * 0.12), sc2); + } + } + + // погода + if (state.isRaining) { + TD.rain.pts.visible = true; + for (let i = 0; i < TD.rain.n; i++) { + let y = TD.rain.pos[i * 3 + 1] - dt * 26; + let x = TD.rain.pos[i * 3]; + if (y < py3 - 12) { y = py3 + 12; x = ptx + (Math.random() - 0.5) * 40; } + TD.rain.pos[i * 3] = x; + TD.rain.pos[i * 3 + 1] = y; + TD.rain.pos[i * 3 + 2] = ptz + 6; + } + TD.rain.pts.geometry.attributes.position.needsUpdate = true; + } else TD.rain.pts.visible = false; + + if (state.weatherType === 'snow') { + TD.snow.pts.visible = true; + for (let i = 0; i < TD.snow.n; i++) { + let y = TD.snow.pos[i * 3 + 1] - dt * 2; + let x = TD.snow.pos[i * 3] + Math.sin(now / 900 + i) * dt * 1.5; + if (y < py3 - 12) { y = py3 + 12; x = ptx + (Math.random() - 0.5) * 40; } + TD.snow.pos[i * 3] = x; + TD.snow.pos[i * 3 + 1] = y; + TD.snow.pos[i * 3 + 2] = ptz + 6; + } + TD.snow.pts.geometry.attributes.position.needsUpdate = true; + } else TD.snow.pts.visible = false; + + // подсветка блока под курсором / прогресс добычи + const mg = state.mining; + if (mg && mg.gx !== null && mg.hardness > 0) { + TD.crack.visible = true; + TD.crack.position.set(mg.gx + 0.5, -mg.gy - 0.5, (mg.gz || 0) + 0.5); + TD.crack.material.opacity = Math.min(0.55, (mg.progress / mg.hardness) * 0.55); + } else TD.crack.visible = false; + + if (mode() === 'build' && TD.lastTap) { + TD.ghost.visible = true; + TD.ghost.position.set(TD.lastTap.gx + 0.5, -TD.lastTap.gy - 0.5, (TD.lastTap.gz || 0) + 0.5); + } else TD.ghost.visible = false; + + if (state.W !== window.innerWidth || state.H !== window.innerHeight) TDresize(); + TD.camera.aspect = window.innerWidth / window.innerHeight; + TD.camera.updateProjectionMatrix(); + + TD.renderer.render(TD.scene, TD.camera); +} + +// === game/loop3d.js === +// ==================== ЦИКЛ ИГРЫ 3D — GrechkaCraft v3 ==================== +// Всё как в 2D-игре, но движение по трём осям: X (вперёд-назад по миру), +// Y (вверх-вниз), Z (вбок). WASD работают относительно взгляда камеры. + + + + + + + + + + + + + + + + + +let last = performance.now(); +let prevJump = false; + +document.addEventListener('visibilitychange', () => { + if (!document.hidden) last = performance.now(); +}); + +// Направление взгляда камеры (задаётся рендером) — WASD относительно него +const camDir = { yaw: 0, pitch: 0 }; + +function loop(now) { + const rawDt = Math.min(0.05, (now - last) / 1000); + last = now; + const PHYSICS_STEP = 0.016; + const steps = Math.max(1, Math.ceil(rawDt / PHYSICS_STEP)); + const dt = rawDt / steps; + + const player = state.player; + const inp = state.inp; + const mobs = state.mobs; + const projectiles = state.projectiles; + const boat = state.boat; + + const jumpPressed = inp.j && !prevJump; + prevJump = inp.j; + + // ---------- день/ночь ---------- + if (!state.dayNightCycle) { + // время стоит + } else if (player.sleeping && isNight()) { + state.worldTime += dt * 8 / state.DAY_LEN; + player.hp = Math.min(100, player.hp + dt * 20); + if (!isNight()) player.sleeping = false; + } else { + state.worldTime += dt / state.DAY_LEN; + } + if (state.worldTime >= 1) state.worldTime -= 1; + + // ---------- генерация мира ---------- + ensureGenAroundCamera(); + + // ---------- кислород/утопление ---------- + if (player.headInWater) { + player.o2 = Math.max(0, player.o2 - 6 * dt); + if (player.o2 === 0) player.hp -= calculateDamage(4 * dt); + } else { + player.o2 = Math.min(100, player.o2 + 10 * dt); + } + + player.hunger = Math.max(0, player.hunger - dt * 0.2); + + // ---------- температура по биому (теперь биом 2D) ---------- + if (player.temperature === undefined) player.temperature = 15; + const BIOME_TEMP = { snow: -20, plains: 15, swamp: 20, desert: 45, mountains: 5 }; + const COLD_THRESHOLD = -5; + const HEAT_THRESHOLD = 35; + const pGX = Math.floor((player.x + player.w / 2) / state.TILE); + const pGZ = Math.floor((player.z + player.d / 2) / state.TILE); + const pGY = Math.floor((player.y + player.h / 2) / state.TILE); + const biome = getCachedBiome(pGX, pGZ); + const sGY = surfaceGyAt(pGX, pGZ); + const isUnderground = (pGY - sGY) > 2; + let targetTemp = BIOME_TEMP[biome] || 15; + if (isUnderground) targetTemp = 15; + if (isNight() && !isUnderground) targetTemp -= 10; + if ((state.weatherType === 'rain' || state.weatherType === 'storm') && !isUnderground) targetTemp -= 5; + player.temperature += (targetTemp - player.temperature) * dt * 0.3; + + // костры/факелы греют, вода в пустыне холодит — ищем в кубе вокруг + let nearHeat = false, nearCool = false; + for (let dx = -2; dx <= 2 && !nearHeat; dx++) { + for (let dy = -2; dy <= 2 && !nearHeat; dy++) { + for (let dz = -2; dz <= 2 && !nearHeat; dz++) { + const b = getBlock(pGX + dx, pGY + dy, pGZ + dz); + if (b && (b.t === 'campfire' || b.t === 'torch' || b.t === 'furnace')) nearHeat = true; + } + } + } + if (!nearHeat && biome === 'desert') { + for (let dx = -2; dx <= 2 && !nearCool; dx++) { + for (let dz = -2; dz <= 2 && !nearCool; dz++) { + const b = getBlock(pGX + dx, pGY, pGZ + dz); + if (b && b.t === 'water') nearCool = true; + } + } + } + if (nearHeat) { + player.temperature += (30 - player.temperature) * dt * 2; + if (player.hp < 100) player.hp = Math.min(100, player.hp + 8 * dt); + } + if (nearCool) { + player.temperature += (15 - player.temperature) * dt * 1.5; + if (player.hp < 100 && player.temperature > HEAT_THRESHOLD) player.hp = Math.min(100, player.hp + 8 * dt); + } + if (isUnderground && !nearHeat && player.hp < 100 && + player.temperature >= COLD_THRESHOLD && player.temperature <= HEAT_THRESHOLD) { + player.hp = Math.min(100, player.hp + 2 * dt); + } + const aboveBlk = getBlock(pGX, pGY + 1, pGZ); + if (aboveBlk && BLOCKS[aboveBlk.t] && BLOCKS[aboveBlk.t].solid && aboveBlk.t !== 'glass' && !isUnderground && !nearCool) { + player.temperature -= 5 * dt; + } + if (player.temperature < COLD_THRESHOLD) { + player.hp -= 1 * dt; + player.hunger -= 0.5 * dt; + } + if (player.slowTimer > 0) player.slowTimer -= dt; + + // ---------- кактус: урон в кубе ---------- + for (let dx = -1; dx <= 1; dx++) { + for (let dy = -1; dy <= 1; dy++) { + for (let dz = -1; dz <= 1; dz++) { + const cb = getBlock(pGX + dx, pGY + dy, pGZ + dz); + if (cb && BLOCKS[cb.t] && BLOCKS[cb.t].hurt && player.invuln <= 0) { + player.hp -= 2; + player.invuln = 0.5; + } + } + } + } + + // ---------- лёд: скольжение ---------- + const underBlk = getBlock(pGX, pGY - 1, pGZ); + if (underBlk && BLOCKS[underBlk.t] && BLOCKS[underBlk.t].slip && player.grounded) { + player.vx *= 0.98; + player.vz *= 0.98; + } + + // ---------- ДВИЖЕНИЕ: WASD относительно камеры ---------- + if (player.sleeping) { + player.vx = player.vy = player.vz = 0; + } else { + // локальные оси ввода + let fwd = 0, side = 0; + if (inp.up) fwd -= 1; + if (inp.r || inp.right) side += 1; + if (inp.l || inp.left) side -= 1; + if (inp.d || inp.back) fwd += 1; + + // в мировых осях через угол камеры + const cy = Math.cos(camDir.yaw), sy = Math.sin(camDir.yaw); + let dx = side * cy - fwd * sy; + let dz = side * sy + fwd * cy; + const len = Math.hypot(dx, dz); + if (len > 0.0001) { + dx /= len; dz /= len; + player.vx = dx * state.MOVE; + player.vz = dz * state.MOVE; + player.facing = Math.atan2(dz, dx); + } else { + player.vx *= 0.82; + player.vz *= 0.82; + } + } + + // шаги + if (player.grounded && !player.inWater && Math.hypot(player.vx, player.vz) > 50) { + if (now / 1000 - player.lastStepTime > 0.35) { + playSound('step'); + player.lastStepTime = now / 1000; + } + } + + // ---------- прыжок / плавание / лодка ---------- + if (player.inBoat) { + player.vy = 0; + player.x = boat.x + 2; + player.y = boat.y - 4; + player.z = boat.z + 2; + player.grounded = true; + player.inWater = false; + if (jumpPressed) { + state.inv.boat = (state.inv.boat || 0) + 1; + player.inBoat = false; + boat.active = false; + player.y += state.TILE; + player.vy = -state.JUMP * 0.5; + playSound('splash'); + } + } else if (player.inWater) { + player.vx *= 0.90; + player.vz *= 0.90; + player.vy *= 0.92; + if (!jumpPressed && !inp.j) { + player.vy += state.GRAV_WATER * dt; + } else if (jumpPressed) { + player.vy = Math.min(player.vy, -520); + } else if (inp.j) { + player.vy = Math.min(player.vy, -260); + } + } else { + if (jumpPressed && player.grounded && !player.sleeping) { + player.vy = -state.JUMP; + player.grounded = false; + player.fallStartY = player.y; + } + } + + if (!player.inWater && !player.inBoat) { + player.vy += state.GRAV * dt; + } + + // ---------- лодка: плывёт, тонет вне воды ---------- + if (boat.active) { + boat.x += boat.vx * dt; + boat.y += boat.vy * dt; + boat.z += (boat.vz || 0) * dt; + const boatGX = Math.floor(boat.x / state.TILE); + const boatGY = Math.floor(boat.y / state.TILE); + const boatGZ = Math.floor(boat.z / state.TILE); + const below = getBlock(boatGX, boatGY + 1, boatGZ); + if (!below || (below.t !== 'water' && below.t !== 'swamp_water')) { + state.inv.boat = (state.inv.boat || 0) + 1; + player.inBoat = false; + boat.active = false; + player.y += state.TILE; + player.vy = -200; + playSound('splash'); + } + } + + if (player.inBoat && !boat.active) { + state.inv.boat = (state.inv.boat || 0) + 1; + player.inBoat = false; + player.y += state.TILE; + player.vy = -200; + playSound('splash'); + } + + // ---------- границы мира по Z ---------- + const maxZ = WORLD_DEPTH * state.TILE; + if (player.z < -maxZ) { player.z = -maxZ; player.vz = 0; } + if (player.z > maxZ) { player.z = maxZ; player.vz = 0; } + + // ---------- ФИЗИКА: X → Z → Y ---------- + const sub = dt; + for (let step = 0; step < steps; step++) { + player.x += player.vx * sub; + player.z += player.vz * sub; + player.y += player.vy * sub; + resolveX(player, sub); + resolveZ(player, sub); + resolveY(player, sub); + } + + // лестница: вертикальное перемещение + if (onLadder(player)) { + if (inp.j) player.vy = -200; + else if (inp.s || inp.down) player.vy = 100; + else player.vy = 0; + } + + // урон от падения: дистанция от последнего касания земли + if (player.grounded) { + if (player.fallStartY !== undefined) { + const fallDist = player.fallStartY - player.y; + if (fallDist > state.TILE * 6) { + player.hp -= calculateDamage((fallDist / state.TILE - 6) * 2.5); + } + } + player.fallStartY = player.y; + } else if (player.vy > 0 && player.fallStartY === undefined) { + player.fallStartY = player.y; + } + + // вода + updateWaterFlag3(player, dt); + + sendPlayerPosition(); + updateWeather(dt); + updateRain(dt); + player.invuln = Math.max(0, player.invuln - dt); + + // ---------- мобы ---------- + state.spawnT += dt; + if (state.spawnT > 6) { + state.spawnT = 0; + spawnMobs3D(); + } + for (const m of mobs) { + mobAI(m, dt); // физика 3D внутри mob-ai3d + } + // снаряды + for (let i = projectiles.length - 1; i >= 0; i--) { + const pr = projectiles[i]; + pr.x += pr.vx * dt; + pr.y += pr.vy * dt; + pr.life -= dt; + // столкновение с блоком (по Z игрока/снаряда) + const gx = Math.floor(pr.x / state.TILE); + const gy = Math.floor(pr.y / state.TILE); + const gz = Math.floor((pr.z || player.z) / state.TILE); + const b = getBlock(gx, gy, gz); + if (b && BLOCKS[b.t] && BLOCKS[b.t].solid) { + projectiles.splice(i, 1); + continue; + } + if (pr.life <= 0) projectiles.splice(i, 1); + } + + // ---------- TNT ---------- + for (const b of state.blocks) { + if (b.dead || b.t !== 'tnt' || !b.active) continue; + b.fuse -= dt; + if (b.fuse <= 0) { + explodeTNT3D(b, state); + } + } + + // ---------- печь ---------- + tickFurnaces(dt); + if (state.currentFurnaceKey && Math.random() < 0.1) renderFurnaceUI(); + + // ---------- смерть/возрождение ---------- + if (player.hp <= 0 && state.deathEl && state.deathEl.style.display !== 'flex') { + player.hp = 0; + state.deathEl.style.display = 'flex'; + } else if (player.hp > 0 && state.deathEl && state.deathEl.style.display === 'flex') { + state.deathEl.style.display = 'none'; + } + + // ---------- HUD ---------- + if (Math.random() < 0.25) { + state.hpEl.textContent = Math.max(0, Math.ceil(player.hp)); + state.foodEl.textContent = Math.ceil(player.hunger); + const o2El = document.getElementById('o2'); + if (o2El) o2El.textContent = Math.ceil(player.o2); + const tempEl = document.getElementById('temp'); + if (tempEl) { + const t = Math.round(player.temperature); + tempEl.textContent = t + '°C'; + if (player.temperature < COLD_THRESHOLD) tempEl.style.color = '#74b9ff'; + else if (player.temperature > HEAT_THRESHOLD) tempEl.style.color = '#e17055'; + else tempEl.style.color = '#55efc4'; + } + state.sxEl.textContent = pGX; + state.syEl.textContent = pGY; + state.todEl.textContent = isNight() ? 'Ночь' : 'День'; + state.worldIdEl.textContent = state.worldId; + if (state.isMultiplayer) { + const st = document.getElementById('multiplayerStatus'); + if (st) st.style.display = 'flex'; + state.playerCountEl.textContent = state.otherPlayers.size + 1; + } else { + const st = document.getElementById('multiplayerStatus'); + if (st) st.style.display = 'none'; + } + } + + // сон — DOM-оверлей + const sleepOv = document.getElementById('sleepOverlay'); + if (sleepOv) sleepOv.style.display = player.sleeping ? 'flex' : 'none'; + + // ---------- РЕНДЕР ---------- + renderFrame3D(now); + + requestAnimationFrame(loop); +} + +// ---------- спавн мобов в 3D ---------- +function spawnMobs3D() { + const p = state.player; + const pcx = p.x / state.TILE; + const pcy = p.y / state.TILE; + const pcz = (p.z || 0) / state.TILE; + const kinds = [Zombie, Pig, Chicken, Creeper, Skeleton, Scorpion, PolarBear, Slime, Eagle]; + for (let i = 0; i < 2; i++) { + const ang = Math.random() * Math.PI * 2; + const dist = 14 + Math.random() * 12; + const mx = Math.floor(pcx + Math.cos(ang) * dist); + const mz = Math.floor(pcz + Math.sin(ang) * dist); + if (Math.abs(mz) > WORLD_DEPTH) continue; + const sy = surfaceGyAt(mx, mz) - 1; + if (sy < 1) continue; + const K = kinds[Math.floor(Math.random() * kinds.length)]; + const m = new K(mx * state.TILE, sy * state.TILE, mz * state.TILE); + m.z = mz * state.TILE; + m.d = m.d || m.w; + m.vz = 0; + state.mobs.push(m); + } +} + +// === ui/minimap.js === +// ==================== МИНИКАРТА ==================== + + + + + + +const minimapWrap = document.getElementById('minimapWrap'); +const minimapCanvas = document.getElementById('minimap'); +const minimapCtx = minimapCanvas.getContext('2d'); + +// Цвета блоков для миникарты (по 1 пикселю на блок) +const MINIMAP_COLORS = { + grass: '#4a8c2a', dirt: '#6b3410', stone: '#6a6a6a', sand: '#d4b84a', + gravel: '#888', clay: '#5a9ad4', wood: '#a63d00', planks: '#c46a10', + leaves: '#2a8a3a', glass: '#aaddee', water: '#2980b9', coal: '#1a1a2a', + copper_ore: '#a05535', iron_ore: '#b0b0b0', gold_ore: '#d4a017', + diamond_ore: '#0090d0', brick: '#8a2010', tnt: '#c02020', + campfire: '#d08020', torch: '#d0a020', bedrock: '#1a1a1a', + flower: '#d03050', bed: '#c03060', ladder: '#a04000', boat: '#6b3410' +}; + +function initMinimap() { + document.getElementById('mapToggle').onclick = () => { + playSound('click'); + state.minimapOpen = !state.minimapOpen; + minimapWrap.style.display = state.minimapOpen ? 'block' : 'none'; + }; + + const minimapClose = document.getElementById('minimapClose'); + if (minimapClose) { + minimapClose.addEventListener('click', (e) => { + e.stopPropagation(); + state.minimapOpen = false; + minimapWrap.style.display = 'none'; + }); + } +} + +function renderMinimap() { + if (!state.minimapOpen) return; + const mW = minimapCanvas.width; + const mH = minimapCanvas.height; + const scale = 2; // пикселей на блок + const TILE = state.TILE; + const player = state.player; + + // Область карты — центрирована на игроке + const pGX = Math.floor(player.x / TILE); + const pGY = Math.floor(player.y / TILE); + const viewW = Math.floor(mW / scale); + const viewH = Math.floor(mH / scale); + const startGX = pGX - Math.floor(viewW / 2); + const startGY = pGY - Math.floor(viewH / 2); + + // Очищаем + minimapCtx.fillStyle = isNight() ? '#070816' : '#87CEEB'; + minimapCtx.fillRect(0, 0, mW, mH); + + // Рисуем блоки + const imgData = minimapCtx.createImageData(mW, mH); + const data = imgData.data; + + for (let dx = 0; dx < viewW; dx++) { + for (let dy = 0; dy < viewH; dy++) { + const gx = startGX + dx; + const gy = startGY + dy; + const b = getBlock(gx, gy, 0); + if (!b || b.dead || b.t === 'air') continue; + + const color = MINIMAP_COLORS[b.t]; + if (!color) continue; + + // Парсим hex цвет + const r = parseInt(color.slice(1, 3), 16); + const g = parseInt(color.slice(3, 5), 16); + const bl = parseInt(color.slice(5, 7), 16); + + // Заполняем scale x scale пикселей + for (let sx = 0; sx < scale; sx++) { + for (let sy = 0; sy < scale; sy++) { + const px = dx * scale + sx; + const py = dy * scale + sy; + if (px >= mW || py >= mH) continue; + const idx = (py * mW + px) * 4; + data[idx] = r; + data[idx + 1] = g; + data[idx + 2] = bl; + data[idx + 3] = 255; + } + } + } + } + + minimapCtx.putImageData(imgData, 0, 0); + + // Игрок — белый пиксель по центру + minimapCtx.fillStyle = '#fff'; + minimapCtx.fillRect(Math.floor(mW / 2) - 2, Math.floor(mH / 2) - 2, 4, 4); + + // Другие игроки — жёлтые точки + for (const [sid, p] of state.otherPlayers) { + const dx = Math.floor(p.x / TILE) - startGX; + const dy = Math.floor(p.y / TILE) - startGY; + if (dx >= 0 && dx < viewW && dy >= 0 && dy < viewH) { + minimapCtx.fillStyle = '#f1c40f'; + minimapCtx.fillRect(dx * scale - 1, dy * scale - 1, 3, 3); + } + } + + // Мобы — красные (враждебные) / зелёные (животные) + const allMobsForMap = state.isMultiplayer ? Array.from(state.serverMobs.values()) : state.mobs; + for (const m of allMobsForMap) { + const dx = Math.floor(m.x / TILE) - startGX; + const dy = Math.floor(m.y / TILE) - startGY; + if (dx >= 0 && dx < viewW && dy >= 0 && dy < viewH) { + const hostile = m.kind === 'zombie' || m.kind === 'creeper' || m.kind === 'skeleton'; + minimapCtx.fillStyle = hostile ? '#e74c3c' : '#2ecc71'; + minimapCtx.fillRect(dx * scale, dy * scale, 2, 2); + } + } +} + +// === ui/market.js === +// ==================== РЫНОК ПРЕДЛОЖЕНИЙ ==================== + + + +let marketPanel, marketClose, marketContent; + +function initMarket() { + marketPanel = document.getElementById('marketPanel'); + marketClose = document.getElementById('marketClose'); + marketContent = document.getElementById('marketContent'); + + if (!marketPanel) return; + + if (marketClose) marketClose.addEventListener('click', () => closeMarket()); + document.addEventListener('toggleMarket', () => toggleMarket()); +} + +function toggleMarket() { + if (!marketPanel) return; + if (marketPanel.style.display === 'none' || !marketPanel.style.display) { + openMarket(); + } else { + closeMarket(); + } +} + +function closeMarket() { + if (marketPanel) marketPanel.style.display = 'none'; +} + +function openMarket() { + if (marketPanel) { + marketPanel.style.display = 'block'; + renderMarket(); + } +} + +function renderMarket() { + if (!marketContent) return; + if (!state.socket) { + marketContent.innerHTML = '

Подключение к серверу...

'; + return; + } + + state.socket.emit('market_list', {}, (orders) => { + if (!orders || !orders.length) { + marketContent.innerHTML = '

Предложений пока нет

'; + const btn = document.getElementById('createOrderBtn'); + if (btn) btn.addEventListener('click', showCreateOrder); + return; + } + + let html = '
'; + html += orders.map(o => '
' + (o.offer_item||'') + ' x' + (o.offer_qty||1) + ' ⇄ ' + (o.want_item||'') + ' x' + (o.want_qty||1) + '
' + (o.seller || 'Аноним') + '
').join(''); + marketContent.innerHTML = html; + const btn = document.getElementById('createOrderBtn'); + if (btn) btn.addEventListener('click', showCreateOrder); + }); +} + +function showCreateOrder() { + if (!marketContent) return; + const invKeys = Object.keys(state.inv || {}); + const invOpts = invKeys.filter(k => (state.inv[k]||0) > 0).map(k => '').join(''); + + marketContent.innerHTML = '

Выставить предмет

'; + + const cancelBtn = document.getElementById('cancelOrder'); + if (cancelBtn) cancelBtn.addEventListener('click', () => renderMarket()); + const submitBtn = document.getElementById('submitOrder'); + if (submitBtn) submitBtn.addEventListener('click', () => { + const offerItem = document.getElementById('offerItem'); + const wantItem = document.getElementById('wantItem'); + if (!offerItem || !wantItem) return; + const offer = offerItem.value; + const want = wantItem.value.trim(); + if (!offer || !want) { alert('Выберите предмет и укажите что хотите получить'); return; } + if (state.socket) { + state.socket.emit('market_create', { offer_item: offer, offer_qty: 1, want_item: want, want_qty: 1 }); + playSound('click'); + setTimeout(renderMarket, 500); + } + }); +} + +// === ui/settings.js === +// Настройки + + +let settingsPanel = null; +let dayNightToggle = null; + +// Weather button IDs in order +const WEATHER_BTNS = ['weatherClear', 'weatherRain', 'weatherSnow', 'weatherThunder']; +const WEATHER_ACTIVE_BG = '#3498db'; +const WEATHER_INACTIVE_BG = '#555'; + +function setWeatherButtonActive(activeId) { + for (const id of WEATHER_BTNS) { + const btn = document.getElementById(id); + if (btn) { + btn.style.background = (id === activeId) ? WEATHER_ACTIVE_BG : WEATHER_INACTIVE_BG; + } + } +} + +function initSettings() { + settingsPanel = document.getElementById('settingsPanel'); + dayNightToggle = document.getElementById('dayNightToggle'); + + if (!settingsPanel) return; + + const closeBtn = document.getElementById('settingsClose'); + if (closeBtn) { + closeBtn.addEventListener('click', () => { + settingsPanel.style.display = 'none'; + }); + } + + // Day/night cycle toggle + if (dayNightToggle) { + dayNightToggle.checked = state.dayNightCycle !== false; + dayNightToggle.addEventListener('change', () => { + state.dayNightCycle = dayNightToggle.checked; + }); + } + + // Time-of-day slider + const timeSlider = document.getElementById('timeSlider'); + if (timeSlider) { + timeSlider.value = Math.round(state.worldTime * 100); + timeSlider.addEventListener('input', () => { + state.worldTime = parseInt(timeSlider.value) / 100; + if (state.dayNightCycle) { + state.dayNightCycle = false; + if (dayNightToggle) dayNightToggle.checked = false; + } + }); + } + + // ====== Weather controls (Ясно / Дождь / Снег / Гроза) ====== + const weatherIntensitySlider = document.getElementById('weatherIntensity'); + + // Helper: apply a weather type + function applyWeather(type) { + state.weatherType = type; + state.weatherChangeInterval = Infinity; // Lock weather manually + + switch (type) { + case 'clear': + state.isRaining = false; + state.rainIntensity = 0; + if (weatherIntensitySlider) weatherIntensitySlider.value = 0; + break; + case 'rain': + state.isRaining = true; + state.rainIntensity = parseInt(weatherIntensitySlider?.value || 40) / 100; + break; + case 'snow': + state.isRaining = false; // snow uses its own rendering + state.rainIntensity = parseInt(weatherIntensitySlider?.value || 40) / 100; + break; + case 'thunder': + state.isRaining = true; // thunder includes rain + state.rainIntensity = parseInt(weatherIntensitySlider?.value || 60) / 100; + if (weatherIntensitySlider) weatherIntensitySlider.value = Math.round(state.rainIntensity * 100); + break; + } + + setWeatherButtonActive('weather' + type.charAt(0).toUpperCase() + type.slice(1)); + } + + // Button handlers + for (const id of WEATHER_BTNS) { + const btn = document.getElementById(id); + if (btn) { + const weatherType = btn.dataset.weather || id.replace('weather', '').toLowerCase(); + btn.addEventListener('click', () => applyWeather(weatherType)); + } + } + + // Intensity slider + if (weatherIntensitySlider) { + weatherIntensitySlider.addEventListener('input', () => { + const val = parseInt(weatherIntensitySlider.value) / 100; + if (state.weatherType !== 'clear') { + state.rainIntensity = val; + if (state.weatherType === 'thunder' || state.weatherType === 'rain') { + state.isRaining = true; + } + } + }); + } + + // Listen for toggleSettings custom event + document.addEventListener('toggleSettings', () => { + if (settingsPanel) { + // Sync all controls when panel opens + if (timeSlider) timeSlider.value = Math.round(state.worldTime * 100); + if (dayNightToggle) dayNightToggle.checked = state.dayNightCycle !== false; + if (weatherIntensitySlider) weatherIntensitySlider.value = Math.round(state.rainIntensity * 100); + // Highlight active weather button + const wt = state.weatherType || (state.isRaining ? 'rain' : 'clear'); + const activeId = 'weather' + wt.charAt(0).toUpperCase() + wt.slice(1); + setWeatherButtonActive(activeId); + settingsPanel.style.display = settingsPanel.style.display === 'none' ? 'block' : 'none'; + } + }); +} + +function isDayNightEnabled() { + return state.dayNightCycle !== false; +} + +// === ui/respawn.js === +// ==================== RESPAWN ==================== + + + + +function initRespawn() { + document.getElementById('respawnBtn').onclick = async () => { + playSound('click'); // Звук клика по кнопке + + console.log('=== RESPAWN CLICKED ==='); + console.log('isMultiplayer:', state.isMultiplayer); + console.log('otherPlayers.size:', state.otherPlayers.size); + console.log('player.hp before respawn:', state.player.hp); + + const player = state.player; + const deathEl = state.deathEl; + + // В мультиплеере не загружаем сохранение, а возрождаемся в начальной точке + if (state.isMultiplayer && state.otherPlayers.size > 0) { + console.log('Мультиплеер режим - возрождение в начальной точке'); + player.hp = 100; + player.hunger = 100; + player.o2 = 100; + player.vx = player.vy = 0; + player.invuln = 0; + player.x = state.spawnPoint.x; + player.y = state.spawnPoint.y; + player.fallStartY = player.y; + console.log('Возрождение в начальной точке, HP:', player.hp); + } else { + console.log('Одиночный режим - загружаем последнее сохранение'); + // Одиночный режим - загружаем последнее сохранение + const loadedSave = await loadGame(); + if (loadedSave) { + await applySave(loadedSave); + console.log('Загружено последнее сохранение после смерти, final HP:', player.hp); + } else { + // Если сохранения нет, возрождаемся в начальной точке + player.hp = 100; + player.hunger = 100; + player.o2 = 100; + player.vx = player.vy = 0; + player.invuln = 0; + player.x = state.spawnPoint.x; + player.y = state.spawnPoint.y; + player.fallStartY = player.y; + console.log('Возрождение в начальной точке, HP:', player.hp); + } + } + + console.log('player.hp after respawn logic:', player.hp); + console.log('Hiding death screen...'); + deathEl.style.display = 'none'; + console.log('=== RESPAWN END ==='); + }; +} + +// === input/controls.js === +// ==================== УПРАВЛЕНИЕ ==================== + + +const inp = state.inp; + +function bindHold(el, key) { + const down = (e) => { e.preventDefault(); state.inp[key] = true; }; + const up = (e) => { e.preventDefault(); state.inp[key] = false; }; + el.addEventListener('pointerdown', down); + el.addEventListener('pointerup', up); + el.addEventListener('pointerleave', up); +} + +function initControls() { + const leftBtn = document.getElementById('left'); + const rightBtn = document.getElementById('right'); + const jumpBtn = document.getElementById('jump'); + const downBtn = document.getElementById('down'); + + if (leftBtn) bindHold(leftBtn, 'l'); + if (rightBtn) bindHold(rightBtn, 'r'); + if (jumpBtn) bindHold(jumpBtn, 'j'); + if (downBtn) bindHold(downBtn, 's'); + + window.addEventListener('keydown', (e) => { + if (e.code === 'KeyA' || e.code === 'ArrowLeft') state.inp.l = true; + if (e.code === 'KeyD' || e.code === 'ArrowRight') state.inp.r = true; + if (e.code === 'Space' || e.code === 'KeyW' || e.code === 'ArrowUp') state.inp.j = true; + if (e.code === 'KeyS' || e.code === 'ArrowDown') state.inp.s = true; + }); + window.addEventListener('keyup', (e) => { + if (e.code === 'KeyA' || e.code === 'ArrowLeft') state.inp.l = false; + if (e.code === 'KeyD' || e.code === 'ArrowRight') state.inp.r = false; + if (e.code === 'Space' || e.code === 'KeyW' || e.code === 'ArrowUp') state.inp.j = false; + if (e.code === 'KeyS' || e.code === 'ArrowDown') state.inp.s = false; + }); +} + +// === multiplayer/voice-chat.js === +// Голосовой чат + + + + + +let voiceSocket = null; +let voiceStream = null; +let audioCtx = null; +let voiceProcessor = null; +let voiceActive = false; + +// Кнопка микрофона +const voiceBtn = document.createElement('div'); +voiceBtn.innerHTML = '🎤/'; +voiceBtn.title = 'Голосовой чат (выкл)'; +voiceBtn.style.cssText = 'position:absolute;top:10px;right:130px;width:52px;height:52px;border-radius:12px;background:#555;z-index:200;display:flex;align-items:center;justify-content:center;font-size:24px;cursor:pointer;border:2px solid rgba(255,255,255,0.9);box-shadow:0 4px 0 rgba(0,0,0,0.5);pointer-events:auto;'; +document.querySelector('.ui').appendChild(voiceBtn); + +// Индикатор говорящего +const speakingIndicator = document.createElement('div'); +speakingIndicator.style.cssText = 'position:absolute;top:130px;right:10px;z-index:200;display:none;background:rgba(0,0,0,0.7);color:#2ecc71;padding:4px 8px;border-radius:6px;font-size:12px;'; +speakingIndicator.textContent = '🔊'; +document.querySelector('.ui').appendChild(speakingIndicator); +let speakingTimeout = null; + +voiceBtn.onclick = async () => { + if (voiceActive) { + // Выключить + voiceActive = false; + voiceBtn.innerHTML = '🎤/'; + voiceBtn.style.background = '#555'; + if (voiceStream) { + voiceStream.getTracks().forEach(t => t.stop()); + voiceStream = null; + } + if (voiceProcessor) { voiceProcessor.disconnect(); voiceProcessor = null; } + if (audioCtx) { audioCtx.close(); audioCtx = null; } + if (voiceSocket) { voiceSocket.disconnect(); voiceSocket = null; } + return; + } + + // Включить + try { + voiceStream = await navigator.mediaDevices.getUserMedia({ audio: { echoCancellation: true, noiseSuppression: true, sampleRate: 24000 } }); + audioCtx = new AudioContext({ sampleRate: 24000 }); + const source = audioCtx.createMediaStreamSource(voiceStream); + voiceProcessor = audioCtx.createScriptProcessor(4096, 1, 1); + + voiceProcessor.onaudioprocess = (e) => { + if (!voiceActive || !voiceSocket || !voiceSocket.connected) return; + const pcm = e.inputBuffer.getChannelData(0); + // Конвертируем float32 → int16 для экономии трафика + const int16 = new Int16Array(pcm.length); + for (let i = 0; i < pcm.length; i++) { + const s = Math.max(-1, Math.min(1, pcm[i])); + int16[i] = s < 0 ? s * 0x8000 : s * 0x7FFF; + } + voiceSocket.emit('voice_data', int16.buffer); + }; + + source.connect(voiceProcessor); + voiceProcessor.connect(audioCtx.createGain()); // не в destination — чтобы не слышать себя + + // Подключаемся к голосовому серверу + voiceSocket = io(VOICE_SERVER, { transports: ['websocket'] }); + voiceSocket.on('connect', () => { + voiceSocket.emit('voice_join', { world_id: state.worldId, x: state.player.x, y: state.player.y, name: state.playerName || 'Игрок' }); + }); + + voiceSocket.on('voice_in', (payload) => { + // Воспроизводим входящий голос + const { data, meta, volume: rawVolume } = payload; + const volume = rawVolume !== undefined ? rawVolume : 1.0; + if (!audioCtx || audioCtx.state === 'closed') return; + + // Int16 → Float32 (volume applied via gain node, not in conversion) + const int16 = new Int16Array(data); + const float32 = new Float32Array(int16.length); + for (let i = 0; i < int16.length; i++) { + float32[i] = int16[i] / (int16[i] < 0 ? 0x8000 : 0x7FFF); + } + + const buf = audioCtx.createBuffer(1, float32.length, 24000); + buf.getChannelData(0).set(float32); + const src = audioCtx.createBufferSource(); + src.buffer = buf; + + const gain = audioCtx.createGain(); + gain.gain.value = volume; + src.connect(gain).connect(audioCtx.destination); + src.start(); + + // Индикатор + speakingIndicator.style.display = 'block'; + speakingIndicator.textContent = `🔊 ${meta.name}`; + clearTimeout(speakingTimeout); + speakingTimeout = setTimeout(() => { speakingIndicator.style.display = 'none'; }, 500); + }); + + voiceActive = true; + voiceBtn.textContent = '🎤'; + voiceBtn.style.background = '#2ecc71'; + } catch (e) { + console.error('Voice error:', e); + voiceBtn.style.background = '#e74c3c'; + } +}; + +function initVoice() { + // Voice position update hook — should be called from main loop + let voicePosT = 0; + return { + update(dt) { + voicePosT += dt; + if (voicePosT > 0.5 && voiceSocket && voiceSocket.connected) { + voicePosT = 0; + voiceSocket.emit('voice_pos', { x: state.player.x, y: state.player.y }); + } + } + }; +} + +// === ui/craft.js === +// Craft UI + + + + + + + + + + + +function canCraft(r) { + const inv = state.inv; + for (const res in r.cost) { + if ((inv[res] || 0) < r.cost[res]) return false; + } + return true; +} + +function renderCraft() { + const inv = state.inv; + const recipesEl = state.recipesEl; + recipesEl.innerHTML = ''; + for (const r of RECIPES) { + const row = document.createElement('div'); + row.className = 'recipe'; + const icon = document.createElement('div'); + icon.className = 'ricon'; + // Иконка результата — canvas sprite > emoji + if (tex[r.out]) { + icon.style.backgroundImage = `url(${tex[r.out].toDataURL()})`; + } else if (itemTex[r.out]) { + icon.style.backgroundImage = `url(${itemTex[r.out].toDataURL()})`; + } else if (TOOLS[r.out]) { + icon.textContent = TOOLS[r.out].icon || '🔧'; + icon.style.fontSize = '24px'; + icon.style.display = 'flex'; + icon.style.alignItems = 'center'; + icon.style.justifyContent = 'center'; + } else if (ITEMS[r.out]) { + icon.textContent = ITEMS[r.out].icon || '📦'; + icon.style.fontSize = '24px'; + icon.style.display = 'flex'; + icon.style.alignItems = 'center'; + icon.style.justifyContent = 'center'; + } + const info = document.createElement('div'); + info.className = 'rinfo'; + const nm = document.createElement('div'); + nm.className = 'rname'; + const itemName = BLOCKS[r.out]?.n || TOOLS[r.out]?.n || ITEMS[r.out]?.n || r.out; + nm.textContent = `${itemName} x${r.qty}`; + const cs = document.createElement('div'); + cs.className = 'rcost'; + cs.textContent = Object.keys(r.cost).map(x => { + const cn = BLOCKS[x]?.n || TOOLS[x]?.n || ITEMS[x]?.n || x; + return `${cn}: ${(inv[x] || 0)}/${r.cost[x]}`; + }).join(' '); + info.appendChild(nm); info.appendChild(cs); + const btn = document.createElement('button'); + btn.className = 'rcraft'; + btn.textContent = 'Создать'; + btn.disabled = !canCraft(r); + btn.onclick = () => { + if (!canCraft(r)) return; + playSound('click'); + for (const res in r.cost) inv[res] -= r.cost[res]; + inv[r.out] = (inv[r.out] || 0) + r.qty; + if (TOOLS[r.out]) addTool(r.out); + if (!state.recentItems.includes(r.out)) { state.recentItems.unshift(r.out); state.recentItems = state.recentItems.slice(0, 5); } + rebuildHotbar(); + renderCraft(); + renderInventory(); + }; + row.appendChild(icon); row.appendChild(info); row.appendChild(btn); + recipesEl.appendChild(row); + } +} + +let craftOpen = false; +let inventoryOpen = false; + +function toggleCraft() { + playSound('click'); + craftOpen = !craftOpen; + state.craftPanel.style.display = craftOpen ? 'block' : 'none'; + if (craftOpen) { + renderCraft(); + inventoryOpen = false; + state.inventoryPanel.style.display = 'none'; + } +} + +function closeCraft() { + playSound('click'); + craftOpen = false; + state.craftPanel.style.display = 'none'; +} + +function toggleInventory() { + playSound('click'); + inventoryOpen = true; + state.inventoryPanel.style.display = 'block'; + renderInventory(); + craftOpen = false; + state.craftPanel.style.display = 'none'; +} + +function closeInventory() { + playSound('click'); + inventoryOpen = false; + state.inventoryPanel.style.display = 'none'; +} + +// === main3d.js === +// ==================== ENTRY POINT ==================== + + + + + + + + + + + + + + + + + + + + + + + + + +// ==================== 1) CONFIG — parse URL ==================== +// urlParams defined in config.js +state.SERVER_URL = SERVER_URL; +state.TELEGRAM_BOT_USERNAME = 'Grechkacraft_bot'; +state.TELEGRAM_APP_SHORT_NAME = 'minegrechka'; + +// Set TG-related state +if (isTgWebApp) { + state.myTgId = tgUser?.id || null; +} + +state.heroImg = new Image(); state.heroImg.src = 'https://supamg.mkn8n.ru/storage/v1/object/public/img//grechka.png'; + +// ==================== 2) START MENU ==================== +// Show the start menu before initializing the game. +// The menu returns a Promise that resolves with the worldId. +async function startGame() { + const worldId = await showStartMenu(); + + // Set worldId and playerName + state.worldId = worldId; + if (!state.playerName) { + state.playerName = localStorage.getItem('minegrechka_playerName') || 'Игрок'; + localStorage.setItem('minegrechka_playerName', state.playerName); + } + console.log('[Launch] worldId:', state.worldId, 'player:', state.playerName, 'tg:', isTgWebApp); + + // Validate TG initData if in TG context + if (isTgWebApp && window.Telegram && Telegram.WebApp.initData) { + try { + const resp = await fetch(state.SERVER_URL + '/api/tg/auth', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ initData: Telegram.WebApp.initData }) + }); + const data = await resp.json(); + if (data.ok && data.tg_id) { + console.log('[TG] Authenticated, tg_id:', data.tg_id); + state.myTgId = data.tg_id; + } + } catch (e) { console.warn('[TG] Auth failed:', e); } + } + + // Update URL with world code + try { + const newUrl = new URL(window.location.href); + newUrl.searchParams.set('world', state.worldId); + if (typeof history !== 'undefined' && history.replaceState) { + history.replaceState(null, '', newUrl.toString()); + } + } catch (e) {} + + // ==================== 3) CANVAS — init from canvas module ==================== + initCanvas(); + + // ==================== 4) STATE — set DOM refs ==================== + state.hpEl = document.getElementById('hp'); + state.foodEl = document.getElementById('food'); + state.sxEl = document.getElementById('sx'); + state.syEl = document.getElementById('sy'); + state.todEl = document.getElementById('tod'); + state.worldIdEl = document.getElementById('worldId'); + state.playerCountEl = document.getElementById('playerCount'); + state.deathEl = document.getElementById('death'); + state.hotbarEl = document.getElementById('hotbar'); + state.craftPanel = document.getElementById('craftPanel'); + state.recipesEl = document.getElementById('recipes'); + state.inventoryPanel = document.getElementById('inventoryPanel'); + state.inventoryGrid = document.getElementById('inventoryGrid'); + state.marketPanel = document.getElementById('marketPanel'); + state.marketContent = document.getElementById('marketContent'); + state.tradePanel = document.getElementById('tradePanel'); + state.tradeContent = document.getElementById('tradeContent'); + state.multiplayerStatus = document.getElementById('multiplayerStatus'); + + // ==================== 5) TEXTURES — initTextures() ==================== + initTextures(); + state.tex = tex; + + // ==================== 6) CRAFT/INVENTORY BUTTONS ==================== + const craftBtn = document.getElementById('craftBtn'); + const invToggle = document.getElementById('invToggle'); + const craftClose = document.getElementById('craftClose'); + const inventoryClose = document.getElementById('inventoryClose'); + + if (craftBtn) craftBtn.onclick = () => toggleCraft(); + if (craftClose) craftClose.onclick = () => closeCraft(); + if (invToggle) invToggle.onclick = () => toggleInventory(); + if (inventoryClose) inventoryClose.onclick = () => closeInventory(); + + // ==================== 7) CONTROLS — initControls ==================== + initControls(); + + // ==================== 9) UI MODULES — init all UI ==================== + initChat(); + initFurnace(); + initMinimap(); + initSaveControls(); + initMarket(); + initRespawn(); + initShare(); + initSettings(); + initModes(); + + // ==================== 10) SOCKET — initSocket ==================== + initSocket(); + + // ==================== 11) VOICE — initVoice ==================== + initVoice(); + + // ==================== 12) SAVE — loadGame, applySave ==================== + // Ensure hotbar has items on first load + if (state.recentItems.length === 0) { + state.recentItems = Object.keys(state.inv).filter(k => state.inv[k] > 0).slice(0, 5); + } + // Make sure selected item is valid and in recentItems + if (!state.selected || !state.inv[state.selected] || state.inv[state.selected] <= 0) { + state.selected = state.recentItems[0] || 'dirt'; + } + if (!state.recentItems.includes(state.selected)) { + state.recentItems.unshift(state.selected); + state.recentItems = state.recentItems.slice(0, 5); + } + rebuildHotbar(); + + // Keyboard hotbar switching (1/2/3) + document.addEventListener('keydown', (e) => { + if (state.showFullInventory || state.craftOpen || state.inventoryOpen || state.chatOpen) return; + if (e.key >= '1' && e.key <= '3') { + const items = state.recentItems.filter(id => state.inv[id] > 0).slice(0, 3); + const idx = parseInt(e.key) - 1; + if (items[idx]) { + state.selected = items[idx]; + rebuildHotbar(); + } + } + }); + + // Scroll wheel hotbar cycling + document.addEventListener('wheel', (e) => { + if (state.showFullInventory || state.craftOpen || state.inventoryOpen || state.chatOpen) return; + const items = state.recentItems.filter(id => state.inv[id] > 0).slice(0, 3); + if (items.length === 0) return; + let idx = items.indexOf(state.selected); + if (idx < 0) idx = 0; + if (e.deltaY > 0) idx = (idx + 1) % items.length; + else idx = (idx - 1 + items.length) % items.length; + state.selected = items[idx]; + rebuildHotbar(); + e.preventDefault(); + }, { passive: false }); + + initDB().then(async () => { + const loadedSave = await loadGame(); + if (loadedSave) { + await applySave(loadedSave); + console.log('Загружено сохранение, HP:', state.player.hp); + + if (state.player.hp <= 0) { + console.log('WARNING: HP <= 0 после загрузки, возрождаемся'); + state.player.hp = 100; + state.player.hunger = 100; + state.player.o2 = 100; + state.player.x = state.spawnPoint.x; + state.player.y = state.spawnPoint.y; + state.player.vx = state.player.vy = 0; + state.player.invuln = 0; + state.player.fallStartY = state.player.y; + } + } else { + console.log('Сохранение не найдено, начинаем новую игру'); + // Fill recentItems from inventory + state.recentItems = Object.keys(state.inv).filter(k => state.inv[k] > 0).slice(0, 5); + rebuildHotbar(); + + state.player.hp = 100; + state.player.hunger = 100; + state.player.o2 = 100; + state.player.vx = state.player.vy = 0; + state.player.invuln = 0; + + // старт — на поверхности + const startGX = 6, startGZ = 0; + state.player.x = startGX * state.TILE; + state.player.z = startGZ * state.TILE; + state.player.vx = state.player.vy = state.player.vz = 0; + for (let dx = -4; dx <= 4; dx++) { + for (let dz = -20; dz <= 20; dz++) genColumn(startGX + dx, startGZ + dz); + } + const surfaceY = surfaceGyAt(startGX, startGZ); + let safeGY = surfaceY - 1; + const aboveBlock = getBlock(startGX, surfaceY - 1, startGZ); + if (aboveBlock && (aboveBlock.t === 'water' || aboveBlock.t === 'swamp_water')) { + for (let gy = state.SEA_GY - 1; gy >= 0; gy--) { + const b = getBlock(startGX, gy, startGZ); + if (!b || b.dead || b.t === 'air' || b.t === 'water') continue; + safeGY = gy - 1; + break; + } + } + state.player.y = safeGY * state.TILE; + state.player.fallStartY = state.player.y; + state.spawnPoint.x = state.player.x; + state.spawnPoint.y = state.player.y; + state.spawnPoint.z = state.player.z; + console.log('Новая 3D игра: gx=', startGX, 'gz=', startGZ, 'surfaceY=', surfaceY, 'y=', state.player.y); + } + + // Автосейв при скрытии страницы + document.addEventListener('visibilitychange', () => { + if (document.hidden) { + saveGame(); + } + }); + + // Автосейв перед закрытием страницы + window.addEventListener('beforeunload', () => { + saveGame(); + }); + }).catch(err => { + console.error('Ошибка инициализации:', err); + const startGX = 6, startGZ = 0; + genColumn(startGX, startGZ); + state.player.y = (surfaceGyAt(startGX, startGZ) - 1) * state.TILE; + state.player.fallStartY = state.player.y; + for (let gx = startGX - 4; gx <= startGX + 4; gx++) { + for (let gz = -20; gz <= 20; gz++) genColumn(gx, startGZ + gz); + } + }); + + // ==================== 13) LOOP — startLoop ==================== + requestAnimationFrame(loop); +} + +// Start the game (v3 — 3D) +startGame().catch(err => { + console.error('Fatal error starting game:', err); +}); + +// Debug: give items +window.debugGive = function(id, count) { + state.inv[id] = (state.inv[id] || 0) + (count || 1); + if (!state.recentItems.includes(id)) { state.recentItems.unshift(id); state.recentItems = state.recentItems.slice(0, 5); } + rebuildHotbar(); + // Can't call renderInventory from here, but user can click inv + console.log('Gave', count || 1, id, '=>', state.inv[id]); + console.log('inv keys>0:', Object.keys(state.inv).filter(k => state.inv[k] > 0).join(', ')); +}; +window.debugInv = function() { return Object.keys(state.inv).filter(k => state.inv[k] > 0).map(k => k + ':' + state.inv[k]); }; + +})(); diff --git a/index-v2.html b/index-v2.html new file mode 100644 index 0000000..7a26e96 --- /dev/null +++ b/index-v2.html @@ -0,0 +1,153 @@ + + + + + + + + + + + +GrechkaCraft + + + + + + + + +
+ + +
+
+
❤️ 100   🍗 100
+
🫁 100
+
🌡️ 15°C
+
📍 X:0 Y:0
+
🕒 День
+
🌐 default
+
⭐ Lv.1 | XP: 0/50
+ +
+ +
⛏️
+
🔨
+ +
💬
+
📦
+
🗺️
+ + +
+
+
+ + + + + + + +
+
⬅️
+
⬆️
+
⬇️
+ +
+ + + + + + + + + + + + + + +
+ + + + + diff --git a/index.html b/index.html index a0a81ad..a779040 100644 --- a/index.html +++ b/index.html @@ -5,9 +5,8 @@ GrechkaCraft: Multiplayer - - + @@ -18,7 +17,6 @@
❤️ 100   🍗 100
🫁 100
-
🌡️ 15°C
📍 X:0 Y:0
🕒 День
🌐 default
@@ -27,13 +25,17 @@
⛏️
-
💾
🔨
-
🔄
💬
📦
🗺️
+ +
@@ -93,8 +95,16 @@ + + - + diff --git a/index.html.bak.v30 b/index.html.bak.v30 new file mode 100644 index 0000000..136a890 --- /dev/null +++ b/index.html.bak.v30 @@ -0,0 +1,110 @@ + + + + + +GrechkaCraft: Multiplayer + + + + + + +
+ + +
+
+
❤️ 100   🍗 100
+
🫁 100
+
📍 X:0 Y:0
+
🕒 День
+
🌐 default
+
⭐ Lv.1 | XP: 0/50
+ +
+ +
⛏️
+
🔨
+ +
💬
+
📦
+
🗺️
+ + +
+
+ + + + + + + +
+
⬅️
+
⬆️
+
⬇️
+ +
+ + + + + + + + + + + +
+ + + + diff --git a/nginx.conf b/nginx.conf index 52c51cd..27a9e74 100644 --- a/nginx.conf +++ b/nginx.conf @@ -5,6 +5,15 @@ server { add_header Access-Control-Allow-Origin *; + location = /v2 { + rewrite ^ /v2.html last; + } + + location = /v2.html { + add_header Cache-Control "no-cache, no-store, must-revalidate"; + add_header Access-Control-Allow-Origin *; + } + location ~* \.(js|mjs|css)$ { add_header Cache-Control "no-cache, no-store, must-revalidate"; add_header Pragma "no-cache"; @@ -13,7 +22,15 @@ server { default_type application/javascript; } + location /src/ { + add_header Cache-Control "no-cache, no-store, must-revalidate"; + add_header Pragma "no-cache"; + add_header Access-Control-Allow-Origin *; + add_header Content-Type "application/javascript; charset=utf-8"; + expires 0; + } + location / { try_files $uri $uri/ /index.html; } -} \ No newline at end of file +} diff --git a/node_modules/.bin/esbuild b/node_modules/.bin/esbuild new file mode 120000 index 0000000..c83ac07 --- /dev/null +++ b/node_modules/.bin/esbuild @@ -0,0 +1 @@ +../esbuild/bin/esbuild \ No newline at end of file diff --git a/node_modules/.package-lock.json b/node_modules/.package-lock.json new file mode 100644 index 0000000..54c3384 --- /dev/null +++ b/node_modules/.package-lock.json @@ -0,0 +1,64 @@ +{ + "name": "grechka-game", + "lockfileVersion": 3, + "requires": true, + "packages": { + "node_modules/@esbuild/linux-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.0.tgz", + "integrity": "sha512-us0dSb9iFxIi8srnpl931Nvs65it/Jd2a2K3qs7fz2WfGPHqzfzZTfec7oxZJRNPXPnNYZtanmRc4AL/JwVzHQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/esbuild": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.0.tgz", + "integrity": "sha512-sNR9MHpXSUV/XB4zmsFKN+QgVG82Cc7+/aaxJ8Adi8hyOac+EXptIp45QBPaVyX3N70664wRbTcLTOemCAnyqw==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.28.0", + "@esbuild/android-arm": "0.28.0", + "@esbuild/android-arm64": "0.28.0", + "@esbuild/android-x64": "0.28.0", + "@esbuild/darwin-arm64": "0.28.0", + "@esbuild/darwin-x64": "0.28.0", + "@esbuild/freebsd-arm64": "0.28.0", + "@esbuild/freebsd-x64": "0.28.0", + "@esbuild/linux-arm": "0.28.0", + "@esbuild/linux-arm64": "0.28.0", + "@esbuild/linux-ia32": "0.28.0", + "@esbuild/linux-loong64": "0.28.0", + "@esbuild/linux-mips64el": "0.28.0", + "@esbuild/linux-ppc64": "0.28.0", + "@esbuild/linux-riscv64": "0.28.0", + "@esbuild/linux-s390x": "0.28.0", + "@esbuild/linux-x64": "0.28.0", + "@esbuild/netbsd-arm64": "0.28.0", + "@esbuild/netbsd-x64": "0.28.0", + "@esbuild/openbsd-arm64": "0.28.0", + "@esbuild/openbsd-x64": "0.28.0", + "@esbuild/openharmony-arm64": "0.28.0", + "@esbuild/sunos-x64": "0.28.0", + "@esbuild/win32-arm64": "0.28.0", + "@esbuild/win32-ia32": "0.28.0", + "@esbuild/win32-x64": "0.28.0" + } + } + } +} diff --git a/node_modules/@esbuild/linux-x64/README.md b/node_modules/@esbuild/linux-x64/README.md new file mode 100644 index 0000000..b2f1930 --- /dev/null +++ b/node_modules/@esbuild/linux-x64/README.md @@ -0,0 +1,3 @@ +# esbuild + +This is the Linux 64-bit binary for esbuild, a JavaScript bundler and minifier. See https://github.com/evanw/esbuild for details. diff --git a/node_modules/@esbuild/linux-x64/bin/esbuild b/node_modules/@esbuild/linux-x64/bin/esbuild new file mode 100755 index 0000000000000000000000000000000000000000..1d0369bdae1d9bd922b329ca218762a43ca079c6 GIT binary patch literal 11366512 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

AFA=-$$OHI=GpV*3WQT&`{OE+ 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

?k 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

!ET*fi7)YSZ~<|@ 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%0AgcmyDI%M2Y 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ⅆW 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 `gR_)l1EFpNi=bHXpQ9)8U~ zUjf9L28yUISK^&4V39myPFfY5@0<)YF~sIQ_eVJIJ*00;eq~n6N>ek*V_m}ao)p!3 zLNkO4_ZRli899U%oNtw=kZP+m1ua_5I|T=4`XZ!TH^$~2>p9-}GJM1@U?^trlKBGq z{FU=3k7NGq7A6;&!d!(=~J(r$xep|gYR3T-|ZS&roZqj=?@&0F8H(Mhg1?tHkBmDeYSsT z&*#+q)LS*Te;C`US;U1UCcj#lti3Hdu&xEJ+L{%|$A6|C4c{%ZZTMz9+XB8Vdt&e< zw1O{W91Fe`#{UF9*PI}>qh%!gUwEudc)_)1{Xsg|fASx6xaQmmO4Pclm+fugh1wo&|gI++B4 zM*Fv`+~=#@9dzy@mAj9sGzrI8s%%b`EeYAM>zR_rY^LMEkHNy9e}*Aa?au{6~i_fT+^}?5aG3wcT7wV~g;zQgClE~DH&aTJT z<@idLoNbuC^oy)pV(AxL%GMu_Prtw#8cWaY!187B>6zAnCzT`#tZfu;5Q{yQMh+O#>Y z@BL4<``#a|Z2cYj9#D0&?-?E0b{)P(`<`L_)^7WcTm-^DiiAKmtE@VzoObpS`D zXJu|5`Ehb(?rHMl1lI~jSNx(jRpU70^bqnU_h(+Dr2N=VQa073bd;2=bC}YlGPgf} zgqWvWU;ISrZ8hCKI}Nu_*Oxo1HkBt=Z3EYY;DPfn(85-v)HpWbuhqCI4gqJKZzBM= z&N$w<69}kzJUaO4nH-#z_!>n(x-~JD-uE1)KN_Fj*D_-1?g31n7N736GGghcCE}DR z$8X}(PqUn{^j__leo1_KFUxvN5B_Oq00r>_u>X4uz%vt$8vOV19fFVtOTald!k&8; z|MbBhoR7z!-T9|8|8$a%pALbkl=rYJ`%k*&O{sw8_U*Yi|KKlRnj&KLdLfrJ!%$)^ zL!ro<_QIl{TpwI>c3>2A9hg9l&u+_0Sko8ZvNl;W8r5KAW^Ia`Yy_a}!B%QC!+MXc zEAqcXeean>nb8gJfRnPZVkB-h8a_)X|Gh5&@fl1+Z=Ds6;c? zngt(XD$o>n~f862!bPn6VT7J`1D@Zrdax^1DSphc!-ui)p{nDewOgA9r5XB zS%Fx3`a+hki%(Ctej7{g`vlW#3n<# zG7(*B-H``mZj6b!B42dTxN}VX3n>T!z0Ux#?rNhwy>Aqdlw@n&O2XbrE7 zVEb$Oe%QQB zZh#Trf4i!-`%nKLeSY7UwvaLVi$;OhzS}`>KtVN-9j%<)yLyEZTvbbvsRp-pNM5x$ zMYDk$v`jOCY+7N@_8`)!PN)qqT}R-c)ou$mEg{syjxe5{5xDUHH|GTx>In3;x*}|j z%#*V8R2H8u7-BH@CnER_o%xUIMJ>;NCpbOYlQ|3h1Kqv0_4)YuDQ=3!w+NY>H-qJ@SN;FP_$* z8xB$VaaFxT>&NU@i94z*3)3s{i@Vv>azIMmAH|8NmZLK!}wL8YlGo6qPvDuiR^wU`}e50zMaIr^;^`UZ_R%Yi;e2r z^Qp1EAw0*EaOp>`>aPW7-6jpbvaNx-RXRf#XCF^EgNq-sbF}uzQyr0DT~vRNp>@?+ z?1Sm3F1O|T$N#9HIaL}-xoc1yG^fWy!x61xCX8skWOf9eL$}lAw>o~#?zuH|YW(4uvoZcLR)@uIweJuF!%Uv$NF{nC$J)dK|7ZioAMq}wn-cJ>8tgjd#YQzM=8 z{()u_^49Y2YW~5MXZR}{{k8bP-G6Xb`R6kcu!>(ikqI_Zoaf{VgpI%fUtmK)0G73u z2c`4aOCjv1vJXMs0$Hk4oudN}|F$yp<)$YU;(DQG7*@uOitEd#C&l%Jh+D!;U<%|J zK>u5?(ydXxrRoUNDB?O5#F5JfQ_#-gCsaGy74;Ei;8Qr8)uJ85f3d)(mIZ?G1q$K| zfYrLmd@?9LWKu`~3qowDm^kS^Q&VT(z69m+*1)tQ3PmAXqpoSz?{ zWw4*OE@^Xq-rRD2;^1In4InEfXg#);Gc&q>R4gW=PbS&(^T^{Z=I5Ii#{qJ0CmRrU z5(|m=h&sMq5}lS9nP?}M4Og9%UD_&Xz=QLFbp3itu0YvnM^BH{Z#qV!gmtIRt%>pc zm*aAOL(8(D<<|+zTAY1cWEDET_-n3xw){v`7$oK*lC>bkgOPve8oB%PX;R65|D+{M zd>{81P7ZnGF+p-FQ~kN0bq9S?Z5RU?IK>((J2dz$7a_=;Nriya?g5&;Qj+A6n~aC` z_5QDUe277_DrO6&j5x5;iaX}Ph=|#R*p-v@yGRGG(?5$RdvHR7F5K2%SqYj(X`W>V zXX%{pCL`Kr5F9U3jeg%4{SdIaIeLL0{G*dE0oo}X-i2+=P@4v#ftOIIglI*$0KL8C z2>ixm$z#ihXSa*u*C@$NbWFRjBsZzuv@W=RIXAIgSw7#&Muhzs27E{^V{&rYAjp5r zU6vmHtx9P>&5aZXE^fBZZ$f%|SM_itulf)RbL4!aw=eIo>Lb4NHA6q*=$;asHax8Z zJPPp1Rg&Am>8d`31wO_HRyS=B8=ck*f7_L{$Cq~HPB~T~@;kzpTy{aE3}2JW`s2+} zb^*(j4TuzTeJ#mNc1}AL-`kg+jqmNt`tVD6{%Sab<6JG2cR0&CtZvUYz~0_jp0c_F zU%IIMPl8k49a}r&P7Wnds<4l%G$yPU@Ba+z?(0BYX3FT`<(OI8+c^_t@(+0bt~mpB zQNGTIPScLV;&{<}&}^-Pk17_R@}^WPuVJ+U%yfd*;!lXT+s(ETRlB?HSM7qg(}Ha} zhQ_y>9c}l)D^V9BK?f$4Z`B8WhpEf7xx4nQsVkIGNm zp~PBW{Xv1Q4!covCw{JBV04c@`tP3xU=K$d zv^k4HRrAan#V0H{=G%it;2qS$o6vk8Q@r z4Zw4=;mQX)>^cZXr6Ar`KDvb+{@t}Wi38{B_P;s0#hK#KsK1w z!Dwi{+-UeZ7cqsG8Rk?h0J%e%-tco0<)T8a+eKNM!jxvvzYov9Qul8?K7ef`x$e7# zNr;)l5JROK>*O$3gwT#Flu*5mwBZjpZ|1)V3N` z07TaIH&t6UYumlE6@2&U+OUeGe0m;g+qsAEX(<^CnH}-aaLwh|e;oXfob;O1ehpBA zQHZ5KCFwnNy5p$y*^++bK~+BasPx1l*1sF+#;T;`Bu7&FBv|~Na*MXz4)4e5R@d7j z;w0kX90O3P_1~(_4$hW!sx2ZLK>xZ_qghtw>gHMFafEqCBWJSn-U7oMo9NBiG38Rq z7{w&9QXF#cOTQ8tm|~{pz>;dT(q}(OOb*-!@la?kMlHyQpiY)3`Z@9#_P!#2z#j&v z3f_c$l4?>(uxYqo_k7JsV=H%fSS;pB*>4z0rupYY)=z8&|MU#l zm(PJk=TS6IrJ;z}07?+dhjVmPLEyZ$cR_;nT`nwnX14)k1;~}nqkAiO3a&@z&yMDw z$o%V(AM%4Rp2Y&W4zmG-)wEZ+R+eFEmCXJ*DX9#euBv~L3dL9f3?{zgopV5+ht@;% z@*hboKcg}`tNb+B00tzs1F2vtArIK_YQO~8eCY!sbglSp2{>(4NO9T=B`M|ZzG{&$ zd!LvnY!;>~zq)@(x16;Z8jb2Z{Z4!`8i(!I!pn2 zVvP;xO$qUUt`8g(fs;V5F9>We=(E||us3;B@aA?-U(VjLVFl*Z@ZtEFJ{+W0)3LXT zOmn;S*l0AMJ4y2tJ4luZineKMolr;k6~w`g2##r&8vZ+ewW4Is7Pr`+ttANmWC>@C zq&Yj>Vr35ZN70FAE5kxrO!X<7(jgsPC_IK?oE;^!=5= zqBO?8VPU)&11k&TRZA~QMW~b6&9Q*DYv%*Rob6>9$P_*qd1fEp-#wgxv+HE6x)p~+ zVJvepT~0#+4T4AL&;U4hl(Xy5GUuZ<;r#9PN$aY5Rc9;?EeEDKrJKKJWYX?2XP*mfB5<7mf&|QY!I_BZD zV_`^FrwabU!;(=Ik^C0K6YW*k{8m(d5czN15mKOTuA88Pi~4MV^%*09lT8r5Y@!#IgS$#m@83Te8Z)TGvfsCKhF zCvHy6Ee5SVeZOj0Wlwn$MWYR$72hzq6bJ*m#6fs2do!Eg62;DA1dU7_4~ccF(fa#e zu-2O?FXXFRz&s=(+MC{80f5dHfM5!ULUUF;G>2{gG+i|`DsRdkQ7#Hi?cq2yC?UK2 zdXTSsokt`^&d+x9fbHRE$j0{i?3VNMA-3{DK=qj!0qz^YIAmWC-wNlYlK&T`FOtlT zw5QRPGv&83+(mm+gr=f;$~kQ3O5Kjip7NfG;Zqvx=0kD45lmtwiE%o_5GpIydv~En zS4eyDR;FVN?Po!5 zcxnXdh5VK&rWwVj!jm8YjR=m%8h0yYA;9Xic1YMJeucLl6-3DOV~09ih{1h&{ScG_ z#bOSIs3tQ9erb*DE=09@JgYE5P}r@*{doYQc1N?-G6)({7J9^TZ1S2Z7hM6$Gu47@ z4NLsIxoT6{K+wp-?0nLQtGXvy94>#QuXaaDBkNwWFn=*_xYuAe9M@*QN~oYSqHci) zYdzuM+E2KwNss-6Va8G2E7}oCDk5UIUoZgT+VV>w-suSmnFnQ69jY(ZKy<m;KG5K<7)h1Wf6mW6$Xftw4j|Kq@uD|Hg zCb*xYOJBc8iCgw%WPiMv{Xek2@qU18|I-55{FelmmPbJbA*Yx+U#ZVb z86z;_00+T{!oKjYBVUE7omI^j=p3)74n_R)98iv#BB7rFY^p!fjs``jU+SK+7Z?(t|SB!hpupIFbWz)740x49VgZzESS7E%uFLVZTuoyjt&7?FF7kP)zMvwBJiuQ;;m1gdR zmvhkAo!=r@!pgr0^oX(JHffBuK?G4U$1!GR%7g$EwH-syGkG1!*G+g0$;^)FVIsX+ zU-w~`juu?Q-D3(_ob1S-BER0M<=0XPh*R->=#5-ut^(r(7i$c-Uy%)n|11RvCOIb*T0*P6?^J+n$W?%Vp0r)0*xL57fKdT3&L$Y@d}(Rl zj!#Kr&oV4$#n0#?J!9X0#X})JE#6WkdT&fy;Bt_eUjtt)s}$9?g?`Z+hzp#Mw*na> z_s1|G?U(ER1Lyha*{lq`!oe)88bxM-;#-3jWpHIDkr0#Hx#}X>VYw z9*i;>VKqEMB!gVCWtOsyM`uCp&Q>HO3Q(*|C5Znz{rEZ+z5ohJtY7x8=`=NQL>o?6e`+^spc@Q`P zS=}mZj5{@^!~Z124L}O#AbtQ7^lpvv>x<|oN|GAS<|X1_WBI%U>!~x>(0p6Yu zXD!ol#i~5$XV&g}DWz~fhfI0EkMpt8z#Ia9sR%SE?C)Jn{Nt5@eE~Et6YmqAsG|tk zbnJKrae-HR!1b&$GJ~Hb=WaUQ0P8t7PI{|sIk?g zjr`T7-q&BRa{_ho3U@3?eo6cB@tLWZgIMppJkZ@Ai_aWmH`6LU^LXla&7t*L_Ys^y zA9RC#X|Ac1!wQqV{)5iE)daS{-YFZ&#drxm#0soc0uux{CD1h?5RRwoO_QZi z=f+BBi&rAT!HQDPTA;xCG@!efpID4g4MteYc2jKF0j%s-bbV znm@;Lf3s^&9|(oVnm<|FBAu}=k7<`YG;3FW4W35xI&V(XtnO6_K67+3(t36G`VV)S zyfeHVlxj~as`pLuuIAzY)dYb!E6qae=Io|x3E4nabEFGE&A$ZQXw0v{(`eoZ{UYb^ ztj<1jSn^QUicW*TCD4rs-1%u{75RHNc0#Rp@F#RUlg{jMd_+-gPdYWf{*Uqh|8xRr z{M!MKWM{-bt>Y&TgM62Y0r+rO4W6)-hkS^K>|9_P$w*31^7;>Tn!Kw8{>Ne8)4CRa zjtl=O-Tx!}yJGZ@q!np7A{e z0f~E{56d6UW52M&tfT-epx6x+_;MP{l7lDMPIv{=MJ|9di5R>fc|1;?+U(smd$?;sK;Nj12 z(mV|Nzcmiue+?OrcKKCgd~Z+qw&bIp8aF^D{)37lR?2wsXrSFfWNXU`M80aHJWrR2 z6R&RNxYD}Was&jSu@thh zB34^WR)Xmb6B4CW$jPb_#`Cfg%bTi3tdLa{u`=n{M6#Ar3a%Bl?z7L>73JaWrCGA8Ao_xzu#SAbJw$3lLQ0Fo~6hK zkGt%B%VVDZGIe0<`p;thA5PlajO%j~Teh*DXXM4&um=Bf{bo(KujpZSsNJ;o5)6iO zc;eMD+OPL0`}HPZN&uPtg;Hp7HaO_sFcp2nl;7&GVysR|CST)5QS66X4@^aLun8-Z z5%~0%ZXk-CF6>H$iObcwN~REBD)_R4^+acH+Z zakLztI7}N4r2!RFKka#vqL$)t=Qy=D$|TkLGv5(ie>^4mu6JgpXK%<)hj#)alu#d5 zWSD>r4`7+MXyB@Y6`U}oE772Zr z5JJj=XiBO&oNH2s+$0((a??)i&pi-PRg_9b9L&vY&&Fo@bKlnqzlqj>xj8o5pZl65 zoJjl)j;3K|kM;O-pV5W-MiV?pF#Ne8op3@l0gP$EM0DDpTc*>##8!&*qL$xLuF#)b zq|@HA(~5wAu|@ve%XLCsGy$`HY_UK0EJ^63=2tYa7>T90g{cC)2mdGnrz@@S=N|f8 z^?tHsWbeT#7LY9%!DW?v1Zw%_&wW$pG$iMRMqsHV2NwvJ4%8}Uy?_Mf&wZMi5g+HY zPO%}VWr}OXf<<`L)bcMHS}Koab@EuXgpWY2d<-n*NAzDe`&K$}0|4uo3-#3FQB%vm zcxjLq{x!_nb@Euohn{8^a!RFQj$#ubxWHn1aM?aS0=0be=Y9kJCPBfq{A~H9HAMVj z2O_Xkat0S1l$;ywoJ;v`jg_1|Vb4d-T7E(coSFXIC!#s|Zk^vECqKDXE}-vrNuZVw zymeG>e4rMInF=m*%iAi6z6#W;K&qwu=+7N&w@}Me>y0x6M+)jXegbMT@TjTfUsRdN zN1#?7!3Ej!ahXSb!pGarIGSTjCZ7oVPZ$W=~k)-wN%S0PDLd z74QHN{t4(ekT8oI({QBkeH%Y$L|}Y(`-uuy^>dQFRsT;%*w;f$Fm1{AVL>369WF!c zoP{UvLhL*#)d=7k#Z-KdTM{Sn<7Baq_vGEcc5#R%?xV}H7JTkJiD{EF_=}2npZ@ee z9XF9DDlGq)v*rrgu67V>kWHKd@PnK&*2UQ5k=ST@6=CB`Lu)$TdjioXb+WGOk~&QT ziyf_00k#wnrxJk9rG#P&grw9gkP)i49x6BWMqE;Wycbjn08Kuu~i;XNo*?dS$O$5Yr zG$g|tWT5<>C$eDF`(!m-<*k8!h*Yw(aZVqccl#-JheJyL9_#?yu-l<@=Cm@BHOqkf z67G4-ty^IN!asUw{^2D5u%1~f+`_5vPfG&B*coFOt$wx857JoPmJJJ2o7aK=Y{Pu? z*LM=ZaQ<5K!q4qc>*IE)cHQgXKa10O-BdWm z^q&qJRdeu4oMxa*R5pD`7y@New_*CD!s&^G0n^XT`k`&IOy!yeR$X?(D$P5CQg##Y zSH0;TT+i&UK?^Vz{cbf-(-tt+@+5L^1tzN{ge0~MK5I6Ju4DZ&#cEI`gNGqoY_^*MRTfly88~Tj#(oV8g#GA>4FN+t+~SfLTDY~%yupvL22JszM6 ze77bh9>;iu>;YLoEa`<0bajw5Y*-00FjGz^*l4AatpO)Y<9iLCV8rqr?+Nl=rNV+Y zA5o}fW~@&~R8+u&n7=#*@P5-AEnNCXdb-|7~UMeXxGw z7WQDbCtt!s5ls0b9$f027(`qkhWN9%^#T#r)|~4i%`yH{{Viz=vrW<5{W8Wl!307B z#1F^LNAekwbMmWX;W)N{7z^wrk+FU(cC9Wdwuwggn>FrhwSF%WL?8G14g2qVSh7Q9 zy#T>)00Eg2o3{F6LFeF0g&-Jy1P~M*eswhlUnBPkzEnqOf@`FwL3C5bGyJB^Dp{0` zU|=cppu=hMv}s(iM62p&MP-tBOn%uWtMwjFQR|H3$;CmC@$heegsv@q42sz$Je+;S zar+Mhr3V~Mcn}q{Pnq(?HW8{ye6R*(<2y$bci$12Q+Y+6h&EGsPo9W2Q#1Gr{9_2^ zGXy-8cR+~A!h3uP-XN%L9o2-j>goYNSBwgI*ug|Rtv6?Z)^U7AzeBFG+9~@x&(}8p zDR`$pRkJwmOpIPmNjM|8n?ymZWD0ZOu!kX)-Lww$c>8zRhz7$cVN)BS|L>xZ_Z#*v zfnCS?u!J>ZS}&64a&_$;{6|p%_Wnsm?6LLEEu2-l7-pAb$EZqi^uj_W!(3~l=MvBw zh(2{1guc$y+Eb^w`3rwir&02oni0McLV-cjqLs7Q?m>7sKL;KX!V3f&QLjI@hrkW( zAy`LXp25~j^q?L;KN$#B3C@;Z!QU&I4Y24jsq<6K1Jju4SkwtP*UJ43F`;gUR0ki#5ZpIaIZHtAe=qXJRziyJ6Hk@sD*?1>{3+9X{y$ zno<^To1c)i4M9s66MInGuz3a?oA``vJ-AGo13&D38TFf2h*qY;(jR!A$VF~2Z;9M0 zqdO1{>}J=?p&jB}DeHdmB(S$D zFb*V)U@i!x2aMsjVld_cMyu{+1)>oH5t#)mjde*@lA0nlWtfk>_-oTg*(r&x^x?;0k8(5!cVO2#2-5MCd64NFR}+t~md z>t-*BY#Vq=1+z+kzv;LG<#7H$GKF4_qOwFgYe>PN1Db+eEASdl#8lStOTSl)B0w=U zE{N$w1~D;$>FZ-gFwuT-P|?pw@GPasyjsbggiu+H-mAhrVk1Euz!Rz9v#vZV!6o~b zGejTg_I&}9xxEt{xKDnI_o{L@hhKz3rW^$V1nver%?)DTz_m8!LJ%lIAG;0@-~PS@>CTD9@R9$y=I~;BtwUo*A~dE16S|Q7 zvt~5Nl=*&Z{FM2sEN;r2@)4%Y@`IQ%=$}D>6z5&6=F&s^D&tS5;U_03Cc1=cNc<^Y z^qkwV7ZprF1sul05{}RmJvYCMZ)hp=jbKC3ZAT{oO||xaXLoNUXXe?!gx2#_eBtj? z0S!bt0`>3BPgx(X(73_=p)b9^)dp0oUZvioDJ2~=DE87HLrG5K+>{PN?3=o*Mwf+biz~m6#n2Ch~fFM}) zyIJRhHcIJ@qy29hW~DG#^$LkpMJQ!lr0N@>fBPJ1EN+2=D&ATwtx?)xb7^eYExg*g z|63c^)pmh9GkG7ouf>#q9xMP)xJ<3>IdScrG>k z6>jX98U7h=$p7c^o*aFN27(!2=Q^27gOr41!;+B`z^qv%EvyKzV2pGwMq2oj|8SzK z>NF0&zakThaafuf0+`3SssHx83dgyCHa%R!GO1drs&R^2-~+h!a-lLE1 z*mG6aOBKkC@?yW?+883c@<3@FKFz1(q^$iK)z*Q5Xak0xIj2!9#kDH{2Xf!(O_Wy= zvzBW8p(AC!E-?1~*HlieR76Z9qN10X)A~&=kDO7aQ`iOp85YkE0M`3GaQYu&fV&H1 zj9_Vr8K46lEp5Hu+5g3C4EoD4sk1tTZNq< zHjluckW4-$HuwBmPd6@tsp02ZnL}xR+yic|rr4Rz=oFLtYH4O8$pu3)Wl~X__hSrnU+*tlG)9l>D@DkCf5P|`-Uk!U1tP9CwDFs`Y6<{PN09T@j zTaUc-p~xrMN^%!}_2xp1IA)qYiRIhAaq*f~J*Jp_Yj+gD;B}ZP!`;^XYZ*pY zUp7+!S^^MsTnSMi0BLii>GzoSsSbS9wMI!ZyM%A~x2 z@(2r1>eJ|Ws9XrYkK)c}E=;dP?a;diBVaK_9`L*2MX&}=w8s2{>lK*WCrED5I`u~mmsB99s8sQ843vaK zJ{>ho&W0_~;|mVQNpqtM1M7Vdv_A1p{aQjsb5V2oqJ5d!#9$g1qoT3>_$IoY={Zn-NI`sEjb?=-Sv?pGUCnfgf3ZP0( z@dz|FZ|t5P$=n31ehtahQ!fP$9RzJ^M9&uCqFj3y?C%ZcYOgm;9+Iu=~yK0upr3ag@c_j)*b75 z5MVj=DOv_<*TId^y1&Fv)IF7TpVGSS3e?Sd`=H)ltha}%w?kbT>Wy3z0|b@+DOPE% zsvM9b&@a(OHLm(y{A-w>h!;giEq__%U$`9q#dQC{8OsO{WB+ zpUO^DpTbih5~`m{Gn~?yrQ0d}%5~ouBvV{1k8dG-8NO!K+wsr!xEecdTHfl$9Jmh` zNsz-E=p4|zVdyWgh5f5rumw1#+vnTiFc;SYZ(*s1jGXR4|9>q15DY9bH>w{Wx@RKt9_P1ZPIE%LLYwonDEfnV(Y=*+ap= zbUb~!#D}fHr4j5#hU!LBW!zN09AHQL-6|B#m$Rkp{8%U&Kq^M1=VDl`nog(^z!Yn_ zglso_gXjz6al6ko`~_;4IiG5+{zF#k zD^9je@c-rg&F@yKDb$Nd&j88K`9h%^tB+0ZkbU)eL4{g9WNkQKidxaudv1%;|D}rl z@%UBxKQ~JMQ=FgybS<(}JweIf)KfYLB~N~w^gB@JcmT38x?t;7^p9-?8ORUBUxfk3 zs!ICfna7~NuB5-i<$FkfYYPJZD(JJ_+wc+20J`HuXF-ltmS13wPsbrZUzYEsRPDxi zPsl}Y0_&kaC|_0_O2z~*X<(eA0L=_B1@!`gcZoIv7CC_}d8 z>5G5>BY2rFc%_r(0S~ZvhF+uDf^0ae^;^ICH>MdpfT`YPPA9>j5NK>BC>_Gz3BKUS zQeJa4*a#x9;s(&>s8nm*SbZu2j~|Z05N#Y~>2mDxLZu>c(L@C~=42lZ_k^zOUzg@> z-U41Y%kK?(Cwg;+JIg<3v|lzazbf(uPxS`#imi8wl@ko@3sTLo8=?sg4WKXus_e)@ zP7i2wqOD-N08*#Ad06U!f7gu|8k`@|4si>}G?9HS-!Uht+z(Y`3}DO>#~tk`&YQCmI$FJ+1-v=v-8p?eUFsYHV7S4YS(F)PkznaB0;22a)g^8REX#UvMxTFnrzjC__kn_`o!V@wBydN@&+u#w;#;?)Sw@!;VN zmZsT(#@n0U358aJhk;NB9$7n|p4Hu(H^c431E(r4${HrpqcgW=U!1l(4kjRL zYMz>eDsPG#<)ZWUFiwdCoQB@XVBM)Pgj#FfZyRsnD=?n+{gyPJYWRyOD3=1bzDbvh ze+A;wjaA9cq~s1xhm)_Llo+ zd27b~mGEy^i7hW|?nEvijG&vDG#oh|!)JTT>xBz1Pq2Qwm=H6O8$j3@mCS-bu`Y|_ zey7W=r+!vF!>YtYa>YnD%pNw8vWh|1m?Cw2!bClW58@uHIQj<*yqE;H%LzC%W0{Ug zuS2hR{R=Ta7f)C(AtK<PmC)oPQL)%ej?P? z$T@IN3XqpP9YV~G@-MmLwNZEiJP^#A@hh&pbeY!hjyUV1lXZ#RcgoWpsZ(?cCkgqf z`Dvdok%3WoHUT6s=dyo?=mP8YXk*`DU}QX|1NH|u>+|7`d@ci;fxX?OyRo!G@_Uc!-ix(C>wu*YE<_NX&?oGm#)wGBbHLWm<4=%y2Su z)JicbXX8D2A_RJa$%m|Sp1~%2eff%iqXsnW5X+sXs<~{s&%8d-m$Q3H4$xw6;a&T3 zF1W*P>#IL191);aV0Z(&DS!d2iKEQ)aU%oyd-jbCjM;P0pLfLu)`=L2%VGY;?XSVsi)wn~G9&rkujHNQXyrtOHg1#D+ad{s` zSti2lFO=L>CH^p&=>B?8#1@+J9(a+YzzeQ1KR)Bu4n-ER9?Mh3^ZA0H4s}Q!js`o2 zQcoq5d25z7vSQQ;JdKa6ff0cs^yR$eGGAc=%2(p)4R*yPy$>sDMd3a8#zK^$Snoc0 zu2z=E7wa%Ze8Kx@owlwR@rAPgbP&cA8N{~RE^b%9x)BA9;EPSFnjNfW-0&~x|6X+o z_|>mMuRDqjtBnohjq3a}lV|*UgZXbAGy)&em{|{?vAgiUxLab4!Im#AzU~-|3bWzM z&^Y+`>{mIc6V@v(ZNEhYRg9#J2hh&(u&Ul64OOLA;)VEDgQXI~8)L+z)-O63*gTZC z0Jy4n5I6Y;7Aw3B#T#z|a8>arIDEq|S_I_&0*9;WYqWx|_{9?_cpHGLY9)W+{Qo5U zUVz_bjk=5AP|~z9u9ch2&`+>rxK?fh&+oEl4&sb@U4SDXvapt&=bHNy3ds6q z_c`8-e$bwFMXzmu*`eFaKVz<$$sHBjcCD$ny-X4Ou> zjafr>d}{N1)A5HT-h?&XSwyV>I2B+dzPRGQj5{jN*+=E+b5x%13tHDxbpgJl#MgXF z%P*Go4aRO`{dvfP_zk>-lnAo)pSCD-C1^si05yIWU@YwMGmWr>qmCky3qMyFzUuuJ z81CtsdkD3Q{c)#ju1v7IF+iqiZX%wqb_A2s?YtBO`ZR3|WrsD8&Gi9jYbi6YW zWSa=Gy=mG_>}F9L-F&$i0)LcJ6`Af`jy?*7*?p`pYSG6}M|d&*kH2mA&uZdU~6&nL(}j`IW7yrp{=TMR{SjMLwy9;<%OanwKVe^9@19Q7Y*`gQo*7@t<>NBrHc zrOok~tZ5UAhZ862VsYQZdnK>J%fKTUR6s5ZdQ-8g!Nbu1s(ZqEoS<*?ImBx&A*W^G z68g8w&i0x{>=ODkh&K%^35&qaA9%y%cxw0!k+l#S;q3o^&+z9h?4I zop15>n;J{4``0p>KAy7U`5$CTdwxPgpGoC(DOWsSppvVhKX=Rv6!CzQP$k~2Pb~}5 z++beE$&Pp^d_mH!VHpTlrE9gXpS2jjo9>^!eoXpcYC zY^n=x5W&Ch#D>MA2S@?@09FM~lN~_}%FK6A_4s$7X*HJ(GW^YnWoP1VyYh=mW>=)O zOPY+}OWc*fT~^hm-8Md>_M<Ks8NkhSj0p&W1y$8?%ojU|oEfe-LB$9n^?(Xq>|c9N5-y_;l`PB{jnqv%g3qRFK-}LC*t? z<}5@S0y!P7`%M0V)s%KT%F)^JS{s?A(LQ{M5`oJs08Z| zWJL<<83ZCY7Nm8Rkk%Q@)5ONm5*?=UL2GbHjoi*nqcg%3#pOpt7e-H2}-)IDr8uvio!B7*q!20fVt!D5(A2c#Pa;C8~x0$6%Z zD8U!F1IHGExnWYtR2+|;BhxUv{(6tE-)>*OUEaWZ#(~{N!x4b6yC4zcE;|>94rf^p z?rnUTa%Y}MRxm`%{?7~y5_Nci3zsbw;=F#L7%;& zz%EAxXKn|({Ge=Lfq6|L*1v-4=JGw@liyDSpS+Rjyd3*BvkBQWw!pl?i!9jGqW(p8xx ze|r2V>St=ye+SW?eOMgqUGF!CSQtk=!~K4Nao~^@aAI9fpw( zYgUzx_g2Tv@F=9%F@gdwDxNzW#YiNw!O?FUCo_4Yx8HVb1RlXCc@OOJf*tz$AWieX z#BE;x`XiApFy3$`2?#okoa-P!vc0Z+f#>v2ih`^Fmn1|X3vBlVcKQNeBZdRg6IfOr zfz&JtfGm}eqayyVeTbK^lHV%YO2q?%JZ@l-(TS$L>dM*_yX@nQ2^+OF|xOQ>xm6^cnNYA z1m5!=*bSZsh5_cgR=BY+4t?!1J}CrmESY^b*N$#=iX~MEhXnnHd9<7li`5=^>LZ1) zO;?Ba=r&z&lE(;4GKdbYcdnI}xmHYVR}#3p&{H#MG$=bmQ8tjndK9lV{0&&@wipeE zAZ9HW23a%m>YD4v80Pg-l{5hm>rsTA(I}$k z+eY9+FEPOpZeIY$#)8Yj0w(-6pZqo-$HE3~=3X|}Oa%2~{6Pyo33AEW1WEuKI2YR$ z_JCvSt@Vgwc@6Ab15uzk%rT80`vcel0#j|88aMXw>F=uarSa)Lk*=E9jeV$&Gg9V> zJ>Z6fn0;&IWe6heLdLdLXjr&Dv$I4vz~n@(UXvHZ+l1- z&5^0`;PIX_fZrz`y!iAqmHt$DT=$~2djp3dWaA!T39eAQ6FigL`Xg`P?fk&5fe@}dWjxV@QZ$62T;W&CXJ~e4r$2jg~dZLxsb4CBntkF zoLw_hUH5%~Z939Ep~e0nZm;}Afs*|2bG3$V1{~{m7uGf zmIhcz1)iKm>_-8#8gJmAMn7yRDnbQu#90FqzY&WwbJEN6pB)KLx6@9YhZ+Xu(Pee( ziTs3>n6*cNfiV~F@c-VAO%Do`UbCyy$a$CB3p;qJ0Vg^y*?8#v+yv`^xg2PXbkrqC z=W*V$BB~*Q@NA3j4@X7!MQqeeK2Z*|Zm|CHA?v}4Ah4)aj4*i!OS5bZEWytSV9K%X zLo&>e&OHzPfTClFrO{ZWJQwO9f5j<@rDFN6JQg^joaRG=w?j(LtuCgN?qYnEFQ{rN z2z*}9=Z#V39d{-`O!*ofO&^sN6_~flt!BG0q*tK~H(3H=^3&em`O?6gVr&$T3Qb5$ZBpW3R`8*gZx3^HuV=t zg|-~3MjE7nwLpo=TxW=Y0yDh}yFjMOHHY0q2pH$Yl}`3}x!@;q9S~UfFYZ#|@^tKp zua(cxuXfK?b7Kz*68J`WDnN)u_RMaKL&b&)0-xx)LohK=uDRO~Ex;A2-v?l*S`31J z+DNnOY2KWJuDQ=6owSn4>d=Q8c|NC>Ld>;Nyt8=@1tc;c72Yh82XYU#eQcUnTtmrc z3N($6oNcbTLkNVf1i}+4Q4JdX-t`8KXi>x0XBYcJ0K8@|m}FE#B!59ZnqsdYWKmWk zT13*a11+nfM?^T0D->=AbFUY-6S}HrlX&3Cb`rcUJ#uHP$V6DssP?+5cOgGfV8~Oe zjapKXrtrPM?0N!(t0`GNPJJBt&MoQMUEpOnl_7*fa_o#)>%Exuu%iJ;nF*L+9@IeO zW=jhY)%c{@7yaEKX`8HP;g7&~=E3^FO}RPk(FX~w$M!EjuKG?HRLrqo`gu&0`;IorH z^9G3K|I(wM=l{szO@!H@S2_Y&Am5Flq;)f`1b7CoS za3JawafE+P!pH>+Jq3Y6L_U#yJONFiz$`TKgQr5$xGi~Tpr~+Y&BQSUuw!O&8tq_J zfppvuuvkqoz#y#9k^}(6?QjJUB}YP*p+!h<0E-RC<7Y94De}#0-X5L?FhGjX*G@$9 z%70pc^SuE0f5*-KvP5ySCP8IYdLcU1*6bGhHO7qjI4Ma6jPs~BWgpi=8GQ3m<;%p&$_U z_Irza-HI>1={>O1+i(a9c- z?qTG9(@supy%>Q!>j`bnW_FH^a`veXD8R{7Yvj9T%gDzfc1OHWIdvbnvLqm@YwjcX z3s_+7DF}Sv?RSLATS1=>Mw-1YLzFAboZE>PjyHTH%8Fq1AY>N{WUayY<>p(r9XZi3 zuWG*H|KsgF;G?Xv_wgh!5K5du2nG-hnpGko0YwurI>7|rfr&&#jbe!|8?megNFY=b zCc%uutAnD8qPw_j;k)ZfQR!+zkZK9&Du@Lv%R2@&qEbZ3|9Q@R->C_L?(fe>GjF@? zw0rKk=bT&9?JQUG`uwc*GdfK8rq~}~w>Yv?{$k(Zk}x_8axnW;As?=lMF!`OmRk=i zoob0Fr8Hs5#bU~o84gqF0lcRsP0;kKkI=MT_fuj`0mM@-y5u?1cGBqF8fRP4TUVkJ zObQjp_=~qi{vMcq21G>eU|5Va7>wM5VK6$>T)I0#4+B}A{GO}}dQF6pXv1i%2Xe3- zi}RWB*SLUx2JugS{yCd}W-a~#{sTrYT%+`R?@H;fC!loAXuNKN=UiVL!SbBIAl){>_ODU|10$Uz_^nd|R4v?@2+>iAcTv8F5F#}hI3wxbL zF8;K*7^J^c-xfV!zk8WjfK@kYCo{CM6XgNR`8BZXyJM~&#s95eXzyn_wr=Qz1#5%e zd*li&P9{&|mF2RFOfR}S(T&DU)*_Va&xOJDXXk;z_2&+ZT=V(M`NRBX6e$#+27diM z946;mvKtcB?W>@-4UWfgr8l{zyPiC+F2+wL%dMHe)=WF^Banyly zosTzuPxdPhbMLGlaQ0^RTr~5&vA#Fls(=7C2QRYoX^bGXQEsphRQpTt|4cf4&%`uc zVW1Z@uE-j=Y=GN`Pqjop+pqePJ;a^cmwb0;E_{0C`J4`s4}sbNs8qMT+~`F9qhvIS zF)n07i22DuL)hpqIiP&zeMu*wG!HZAea&q1e1gE;{8qP>viw6)-tFb?# zDn^zJ#WAvsHwUcPZP;#o?jG0;+gx@Dy8aYQ+Au;Z8&=d&2jC(nnY+p=!Ni200XWyP@?M*EwV1YkybfNZSRleyBs zd^AA3@vX~?Ou+Q3!^Why1o~$3MGMhI?_41?ZzT)R{O6k`4}4F^gJVKx=cNidXN5uM zPaOq1l)oPw3qCWdT7b{l{s{Q2+VX4gnd}C99_|_ipWP1~Cw$7$KNBaLiqBG0ZwAhDOX?XOVOCqPP#1*gL*q5{mFO4gTC@Ix5MN|9=IdTVu z;gn8#P~NKWhSknpg!?kA^=uWW0v_a*_(9qhiwJ^?YI=-f-yEwDxF7n4By^aAuP@03 zCkA$>voGrcxAn!Z$@LIEtQm5K4RT{))+O@VFV2GL`#ICA?N6=G`z}%YQ`83wQ2=v# z+rhcm5j;N+ywDMIdWF5JEA(>sK#v}b?Wz@p8ontSQJhn^4hN%;9^3{i#UpLoyw(PK zZ=UyKpqV+Ibdb`7A=t?R!8$7};xo za;Lwe)iq;(;HQ!LsSf0$J|)IJO6+Me#N2W(q#PYZm;&Ee?jVk{~!_q#X0PrDSRx5`iX1! z8URA*8}EOCwYrm5*&LS>7dNvLtdF?VV5!Ej;aEo_#DV!na=FAt%oqsIg$}rV?cmHo z`)pBKoO1m$mJSr0VWU?-q{8)$1^qavq|qi;9`yI_WaKYpXI zvKudhln}%UpAstue_OG{!M?rkwjnL1xW7F8COaXQ`mS<+N*{uDT$sh@! zGZehZA*wzCH zih*(fn&4cgSZZldTFt>Hns1dFRpqfpWw8`Ia?CYaRue}BRp78Om9r;CRmkcPU$G3i z6^q}F7}UWw=AbTl#Eo7aggn&h{tK-*cMxXS-sLFb0v+JU`pHm^Ys)@DJ@qIf>komC z=nrH)(H{nh{xB3||MA19(4tREe`xQGm>(ankDebJXM`yaH{@Y*ER&GuFy*1XCT4P! z=3|tHF{quBBj3g<55N3{13o_G!SHWDRWZ=HVX1=7+2PRnGJ(*^g+$*apl%I5ug+}& zK6~$vfX|e5$Ar&Cxq#0#ouZV7f3S{7<*H@)3`Om&!{=kj*yDyz$r~-f=b|Mo!6)8= z&ziSLimk!tDSr#_**H4_KG)YB6FxmJ1AK-cewwT%$_kZF59>G{`1C^Ut;6TlM^6Ag z1?y3jXQPdxu0q7yyI7w?3Q(=d2hQJ{>OCeOU-IF&IpCqezH&!kL2rEQtqUZd z%B_1-(b-T@i&+<+tP~j$srIDr$9Gs(^8=WYMDleTgbgbDtgXFRN!I)J``6-1OFxK3 zx$EE#SKT4luQp&|M#-aj{S-(e^i$hmO)#^)YOGnam4Khf|6_J?-|v9EdNOwi;4BHqO!@$oUW2)iBMP zpATVvE_7BL?QXAH-&WL%L+Fva-vf#G8u8#WheCcUpXhTjl?LGmpjsfjHUz?wp8TXP zFu#ZNAN3~N?=MEZxax)kMyOhzRqw~7iCFejWIg;C-G?CvhS>!i^>Qs9ad?O)NqYMk zYOF)v;Sc7j26UY^EU2hB9mtn`3z~KN+ULS~HtPw>=tw*58Y7m z>qxs6`{EAvWhzBjSYQ5mO+;T7G!sPV%Ngv;8u$uY*i!XRgW}i{$~;m|sQw%&R2R6W zYs5fQ`8B77MuXL_NeF*vrPhBRWpAX`=TByBb%A%fNUe&1zJ@kw^+xI^Yg$xP5Gs7J z6sm*$@=p$w!2VGgA}ixdkpaJ9&0s*%_=j23CZUPi(q1MvZw*!=^#?ZFRX4sr3BSH& zByFwVGLp90{sH?#I_N+VioI%_P@u}_4F02wT-B+h6W_8;`~fRgEk>Kgm8(fU*tn`% z$S(L+H}JK08F>-%uhNvE%P10!WMml?hvtb`!><-8>07pg1$;;ZBjpxKxsg&1s`0W# zxQ9~7TA}gtBf}o51;KBQd@nuDR`WyXL#x?6{z|nQXDz`k|Ix7oE=Rg;5DyR2lfEMT zaMjs^pwNf(ih@EP*Une{Ei4e%R2x{OejKPO6+pg*RB(<;|B5m@vjfCZG@Gd{oNTiS=^ zNMEq^DfVg}QVY}G`J|AKS$n8`d-a=mz%9Tkf)p0DKi)_B_#^eO3ckV;wVWbJk;Vg? z(46AGU8_Q~uWrk4gJpqF?X{}+LuKZ*3YxW9GXr+h$~n2VV3G6AVjG(Gi3a(3UrGo85Xgv>h3O}CViJ?xR<=w4^A7Ui!N4$S%^K~i~$Ydhd)H6^|!K|b%J%E^Es z1T6mT_mfpl#urGJLUnppIrinSrzqp6(KD>N@Y+5*6zq%4ThPIv+DjT219b$g zeb>)0C55u~HLf7O5t=}2pIFzZtyihN0i3^@1#N3%oYJ-`q#kHn$*dz%+ag>WW3=^u zqjn((yp7e?N6q0>b9~x5cNqE{RK|VxMew=ZT$+iEeJe!4v|s7AT?YXMSQ*Z%haL(| z$xmu01)~S#pS>_{Be%dsuu#+izkv^U?`^`eD1PImlvh3XUW)U7Uq|T{!Pj$o1o&Q9 zeoXNFITPTkX;xhcg75ul#|gfBP1A_$mrYAL3r*OUp#{#*_$9U5721D4v`d#*--* z08Z!q5(TG9*5N-MK&8mW6Qp#DOu4$|Hvjf6x3SV|?)|?R zP=r!=GB}2u>9#nNoXTHQ)2>5)xUxS7DGv3CwS6 z#z#OZ|AiPxg=^<0oeM~%OFTAKVwlchPV!_=W*w38iI9z@FFR@{p!hZxP)jR*GoU!X zU1VtipNDAyAMaC8dUQo3l-L71?dyRrqo%t5m{VP>e(5iX0M!})iUw7*e!06ppmpSX z)p8J8E>?3q(Ax9QV?oP<_>kWrtz<0|(l3K*)0>S7U}M2vF>2Enk+2f~AO?@L%!Ebv zM!;+T|3$+qV&V5vKLG1(Gk`G&tW#OX@c`>()ZRL2T|4u40V}9rhLhGACZsNUr3FZ} zq>s1gS~J}_Ok8Wy!<V-ayT`!}0wZBnArV9DjaDVKV+c7Z98e%Pk_Wn5n z@KY8M@ZtV75&L5ooddvM^PL)mNJR4VKUha3;HCMP757loPQdeREKh$t{rCajB7APV zG!{PN0%7o3^U|^4^Ko$t@Y#5G1bnW4{+RITnGX02X^Mi6hjknee0rhw*5UK&v=e|2 zmV)q{5yvD?b^<$~&L>xfm4~0>FyP%p!^$#pPz0KGKN z6(o#_)pS|#R+ghBA#MZdikvzw|hQ;xH)z;~E8N1(W(+iih8xR1g!=T~Yr11!zvQ*cH< zseG$Z|6&UW&W@g-;{xYMz1!V=)@gO0!6oCy?!t0T7sBR+esrqk6rAKKXSU77QDmZg zJ7US?Ry0BWWe;OTUK=@wDS}K|bsIGvdj|Y9mw)Eq51FjPO4N$}HTH>SGedwrn&~Z7 z6dri(Or}f3u^$t-D}2XpOn=-J9zpoa#*4Rsd=}=#3lH>xn#Erq{3(LJ?pPSZUkY^d zgd>2Xv(Es34Ku?mgMjn1nsC9Vx)%$$zG%Sed@O%$kt5q800&uKLifuoVXmm@;d?Td zH9g>blTXQ9-y8M+Qg~J1Qe9!h0qY9B{WJ8nicVM7Yy*|GW93OTw7k>f*0p2Pdny=@k#TUc>`)kEtGJoLwNVI}H zAVyoW6+V{y`zC9xey_P1Dfkl{fhD+-R82KV!fBjeO_;)YU!5)aMuX{)KPLU-MKnqvNnLXbJH9v)y+(==6#Ik`VZS+}(H^iL^5x zz+6{~_P}6rttOW_s7{{8a`Yg?#{Alf${afIK&(K18VfuTh`Af&V8u4@SK;Stz}3VL z2Fk-1Jmn4uNN1e=!8Ibb|vdV3&-#9W@fd_A;I+S48J1`;i%gy6%aGD;?g1)3{ z_@i=AdZs!cpYH2{UEMN%afbTh%&;$TfCi#edMBzk9q=Pbw)hkjh1r|wV+B_Tr%W|U zW|^Rh3P6!Pv2dV;T`Tyt38!z=>SV2ejq=d$CoV?xNqUe;KN0P#>3@mC4kz$K=i50; zOb`S1EQZbi!mP!%5MP-9eAn<_!ejIlvCtKY@WVMnlkbHj73WIb_EyqmaYo-S6iCqv zP~4OvQe1lhZ)1|t_yh+DQ1iGxFEPq6PH%w&9J2UcQkdwjsm82fJXmlCGmHpT$&R#K z8Mprxbs&D|uM)F${e_6xdhfJW;(d&sm90Rvj-;sI*Bb&MM1P<)P%mjPHLmn#H1wBi z;WTvB=VVeif>RK{d4Ymp?t05(=)FI)>&j!O07;afD8&zsaMU^ZVB~b z;fG^wY!yewmUY-rF&dqSZ-fUJFA{3zUqdOSBX$@Lu*qmo9LisF;L12F5v7+SA-lh7 zI}YsDZ9iUv9xnMTwuj%=TRj{c+rwK1MfA}Bk=er!km$0}9t6J7D|}s}!(Mi0sI_OG zu(i1xbujED_gVHuP?;ejO~t%Wq}_qq6|;FCaDa?F+1K7|iL?~l8^-)_k;X?#r1ix> zU+4*uwsDUlFz_}AEQO_&NCU~^&=w`qa6MP5TZQW6d8|mgSzt1ky#NjKYZcof4}4F^ z1I6tvh5hUv7(4#{yUg)F)B5;Lkq$<)#(z`f`2TW@@%P~PcSnq$rH?g!RM*=0?-r4M zJmWV-y0LYJ$xbrS`U7jC4pa=2O}te6RSTju`Ab9G#{1LLoEvh}PNBOJWQ`w$GN^Vn zI07eMES;MOG$1Wm)%LQ}DUbSs7mGB#l8=o6r>WB~`m%LAO@0!E7^Dv8cPYqg5Sbig zFj}>O%qW|TZs;btR|H$CG)@|H;&fC-*z*OPWl|w(G{oTjcLq|;L_HLdjlMXHP1D0c z5a{6N%w;zK9FO~8P~kE)Mi|micxvi^L+F-r$wHRuHd&n zB;PS>YXudn`Vv}Y_xPFnXPj2KG80k)QX_6g0sEo3-)NLOH$4X{Cg`i$&~TZ%QE z3B_GIHG<;yM&}3b5~2?$XYNAcv!G&S3aP?g)xZ&BY(>xrGVln#$9?gWkG{Bl{!~86 z+A{GXbpiv6yO~D|DiX76T*Pi6NO`c6*)=f#xv1T5aWPAZR4L7Y;doF1B5T2aBlWfk z#%<Q$CDh`LQ}ut1BSMMeNA@e9BpFw=d1p$|M!-a>=`x7~&CJB)SA zN>6r;RCsC7e^$3$hnC4gi)G$6%UiXZ!=^z%^l-B^^ZbJI@H>HlTods}o%TF2l~)AH zMEr3~;HfGTF)f(z*R^J3!L`qR2VR#%0*(+FsdvL6+*hq+a-@XPZ( zFhWhdfb3f$5W}}aav#YS{nQwGF#)C^!1(tPzyP^_EZ|UPl#t2BF^R|`R1W6vLZ#h% zSk_l#9%FeN14dI38`r$og4Jm^@Lrqh$-ZGUWdKs}Ag&K@DF&`}7+*f9TIHjl7?_Fq zQvuJEY-OFWKIg=ax#17QD$zs@pa3A5PS;luu6cGe=^YGYkutkn9`wHDcQC@5-{`jC z|8~Y1w=yyrx;}P6L7YjKyrH7ZgEi<$pI%P&2?wc&GZ;SufC?yC@Wf2+5Udsf_D<=Z z%AW**zpx8tu?44N?$?vv`{ZJ*rEr#Q2l%_XeQn&nk&w;E*b7pwLCws8;+J1oq4=xY zZsnJFU5i^1+a`HzeXdfPx^**W3BF53>*VKnLXnVyQ~}Hi*(neo*}W0QXR+v%Vy;Nv z&$OclKV^I=Ts1EhkT8%m#IaZ=RJJeNF~KSjM2UP&O(Ia|sfKE%!YmEO%SUF`S=;1IL4n(Mj>u2g z&u}&s&QWSS$?Y5P$yqoY%$NKre?$W$V%b}QTB=9y706Yx=6vrV8!DAjBj# zVokoL-J7M6(*UTnyx%QcO8nh4B9e~n>m(7ioXtjV3g<61i(rH#LCu%Y+#sB(7zI76 zU>ia9Bb||WPzQM!aX);2LUqvfo@7?+hiiT}d-X_ZSD_tQwxO=#z!`bAq=*2e%l^w~ zq_}crD(?CES==JzYaCyDmr!N)WWP9yQw1c{5-QFDe`DwaoHK^Hyo~HvDGIf3NeN5& zR+g*6)C4`*RC&+NBXQ+=^7?`7EKq+>Z#ka7wz26&%LtHA3h z@S2MvQ8mHm3#{YwQpei zftHqWvVObH)cx=|%#1#s+Iubj=X`X5=EdHgcM22Gevd zImFO6J1&NPnS)zTn27PMbpzXKW3*vwK*$MYg|*Ved(-3P*je6UTq#u{yN{1nL#O_%X?$#NnCqd zB3lV3$`|R3K4b#<3G1^WM9Z)~itllnP8rVW0E99SGmm-XKyffX1v68t6`9gaNWepg zIVVL(CW*9A5*~(&A5K5iuH_v+#gvOrKSc^6bxe>KmM1k68b2XF5o^g{eHv>nU|+zW z=oPfS93_o1Scj%2aL@X3r78%_NI@uvMNFt%P>978GyeH!MV&Ek*a?tIgw0nG=H$Cg z!ek#nRFQ;vIJDY}A`aXNeg2w#;RAcnzHs+lE!h`#0-h#)6)JiX=`c&KK3JZE7$^uDZUoMmSSuC6d@|tfFyNaH1@1;y3|yE$&>?)qbX@TJ z3n^dOXZqh63%^N4ChU-Z114h}#tBTPveSM2jmgGNWE)ha**>HVHzj;EhsY!SY7(Ij zARGV8lM!KMU(UI-wiLa^@P(CMo4*j4b8aJt!ZpPxNPeDgN@tYVJAw}eYG zs*F$^k>ni@npiIVFpe^*C?645nhIwK`|R`am3{feW`04$CwD4qk3F8Y*yYAgJV13A zs#XVn#r*}EY-ay}itH<If=cBu~(K>7c814EF84Y)P z0RPN21su;Q2H*yy2EsegB?p_PO74B&1Y0i0>h@9O;z_pA3Md|wXA z{U=VwT9e1dSaC4fOaG~1XUjG(bjBGyx2k1?`Zj3-Pt?NRA)*L%+h2!r0l~cnU>*C{ zl6WWm4enpJ%f-4D``6EiSgi|uEKObCmY-`zHDrSHk2-htqj=}H5VWDf0oVZ_D+M1u zKM4(b2GQkC--7SRi7Hkd3-k`y7n(2=Ck#!VfLt=+$!WKskYLa&sKx@fiy5NM20(;x zR7FEv4lKm4F_%5XIMl&Ao_!UhTiDb-Rdn3aeKF22slr_U82+HBijEU1vwZc24(Ftb zTv+0S-Bu#Rt0~2lBElAySxhxE#$TZ!zGVwdbhNH zXkQ*(bfSw_)MJMQ%Jx}vR4<)m;(|at_|4@T4G#~(t3iBUj9J(?1$?IA$C$)FDi-_^W&P+u)CQ26gL+1?9(oNC@xR{`oq|-diL@- zBWV){ZWT!W@0|qi#=rpe$>It4b6 zu6WVu7d(7UJ^Vn*!nnNAYBNwz6za);Q2m>E3HrB09@!?`l85|Ik&WMDHZB3;vTi6# zMjQ7Z#V+SC)yBJbm<^xIh6kvJvtt_`p<227D86bR*~%ibm9z1QImFY@O8m`v@ITnK zL4l)!DAJQJW^+h|Vyl0P9z+;_*n1oTp|xpae}o@SW2F|P0pcyH{2V^kv#YZoLTOkw z0+Ngp=cD|LA>G?zT~;M}^1b5}x@JmUwp5OIs98plK=NocmPT%y#vQ@?UQzE=6^-y? zvK9S|_eb7{KzAv|2YfXW0JR74eplrCd8&TuWCheO`tsO@t*~TxKLxu!SOImyn+|Re zDNa#I4gs4*E`yCXz(!O6F%k0&5iT~tiIDr0jaU;no3}$1zML|(0)tg42Qt1?stEK^ zwPvk~m-yjROu@b6^`PJm+(3%hC7Ac9!TT7x2N2T&AR-!hJB7!3%DiaAS ze<$Cnpisp_8GT5u!X5S`k*nuN$W`q2*}A``d)frv-W_q^a%-Y3iCEJ<=B@lkyqR=E`2XFH?1|3zMBcv%(fsGeRS?J^If}ish79Z zWHjBh!Qp-h?%APuKibF2-Hq%jm}c@bABr;;^`dS{qYBDU|LTG+`3KcnhS8i=;Q6?w zJp0lbb75VVhlDoWTzUoXjd9H+1U2ir^`uppoN3;zK%snHitv_ZJGZVL^L{1n*`qf3 zz8VLr!4ews8@rqK>Y->a&!_c8CPjPIHhh;;vC_#t6#HSfgYemnYo6&f^D`3yEw z6Fi*h*6sz;_tR!ZT->^c>lqJ+GumHgxHM$vi zS_xV@+u}fq?*nsjPjF)zwxrZHXfc32nXIu4$Wy2^*-qI*u-YOo8vQ<#(xrVlz;e=- zlM}ii_TCji#0G9sc!d+B)k^a_RvU7bg((@EH;Wn2l1KD^GIQJde-ALZH*}LAb@*|Q<2Z0Oj0+j2 z;V<0-RQGY|x%v8yX>fx18cr~}tr*oBduFgsCEP>ks}C#$#&CvV4~M}2VcZ$ruMabe zMT=ID5Ej!BW=Z4A>sp@U1N{$KGrOAKkIQ~`-4WEL>}UI~jkKT9BWe|f+zf}P#QIqK zm0G_p0PCCU*CJ(~EQBmQTPX<{){ai92ng&)bIaFA__`VEXRd0izauZ`$pznF;{hl0 zRWIZ{c(bH}UdC0E<+cDzfQK`9$$YdfTo8VoHOu$4-_Z}ovDUJ2y&)E_dFffW<2|bilq4N$`GPZdC zpzZfx2`=9R3HUZ+0`#PJ215JT0#$`nRHAu@WqPuE4j~shuq)v-7Gr}$)K-SL-2n1J z|Doo#)tZN4%`yzy@CdMkDI94_JzHwRJ9FPgR6}z}Vmd>9)*TqFZae=$@a-tZQe#Iv zl{~E{Eqc_2AwWVWz2BD-T8wTK%ot*Zq{*UF7oely_T2}ua8qwSXyFa}iP7K4#TziC z7C|raL#)5|T?%D{&GePUn(=;FY}ICergNg$q~Qb*g(&C`I)+lkfM*P4fEvoE-pVSc zCv`gZP>ikDgt3x^eX@|TbhODcfy=>jCMh2me_VJd$RBTB9myYx{_hOYf1ye3)uV)f zpri=3cl!zuAg%Z3V?YKP!d#7Jn`SI|)RpHaiF4SbV0qj70?RRT0F6nEX2u|#1j(5S zBz;yW?D~=lmr?;iM(F0V;JN%6Ujr||FfoMnCzijC%AW%F44zTe3zQxBOxUapPKBG0 zzZjeZ(8D-i`O}6z6;G7)#3#eePjC|ECWG3t`T}>VZyWxDz6p9kRGLXo+_Hp+`PHzy z4v{Y6m9e&Y!CC8DB_ zC4Pg;+Sk9vI6h>6GhhKShBDQU#g(%!FkFfT`&iiK(%E=ZwmI-TI7bE(`Hy#!Nh1P_ zVj{B4v6GxXyV4@(@(?-42xzYFcB}QB*D^9z?t_Rjoy){5WLg*@aE2(6t$gdtde~PK zj75IW73-hN~PqT&=w+QPBFSD3o;2R9)B*tY=pmt{k8=35F5(>W>>wR zMr{WZmPRAR9u`CWWP#uh>dx=J5YnB~MUmLS{srIZE`irWj}c-kbrt2rb;E91}|HzexDm(dv*z2%Hqt2wI+=P->U(0CE$x1t87xxMf} zU3_U*VNnj(Y~3H`suLuddf5?1l#5yF`kO4|kyYT=*vXI; zCOt4^h1pmdq&?mCq5%flED^(D40H8S40S7gEQ&)|B}j{({K_7N%4T z$6UAgq1pey{SZCr$1|bX7tl0Gd!iSga8@su^-Jk3uq|?~A1B%lLS$Ym0lz!#^ESf2 zt*W`KyQa_P6T{xfkrLzln)`2503lkOnl5E{jRglEP~d>RPmgcRkLng-m1;WLLn#Wr zB}k$4am@pbCe<<%G?)sLw9C-R*SJ0J_RVg<4}*%+54o}q=d9+q^X*rx;{gZY>83%u zWPb1UDCKc&**R<$D$SBZl&SreaJyRO-vcwBF%Hm&2Qq6{fFNk0M;r-2##NLhGE<4} z41&Y-13@qDV@4-#-_^&(olaBMR*XO58 z>h}CTyRj1#fU#FUC#ZjIk?Pb+{O}aD^o^X>9wc4RxBLFZ>Z^tF)q_j$lkZ)ZpT3E?<@5VA z41<3~du1PH{`a!c(m8>-@vlb|ys6>PKSfq+efa?}Y9aV|z$ryUPG%g>=f<+J*uMTZ z{`^Mt8CPnG(_;`D;&t{Zg`}NooOyXT*K@EbvP%&d5fQLE>yx?5~=?d*xeV#N4MS}~Yq#oE_ZYy35jPD_@1Ek=3*_Onl?CXTXX;TpOgzmHh z=NCXgfCu_2W;5@D-${Ix`Owy9BK5`IXYfZoL#>I%)I1YW5(gE%z!3ZlG+~>FJr0E3 zbT)=_q@MMO)L(tJ9W$ijo&4cL>7N?AjQWM!E^R`_5P||Vg7GlawIf6>$Y5?3{_zAm&iq4Lkf%88u}tDj;~lHn>6<7 zzoAlN!jOH<+Us%qZRfBJ!}A7CZG=E8QduoM6&>+FhA} zvYzaAm`!9|QkjW+WByI1ra-0YaX#8m$(G|uA4kqdv#OoJXag9Y6yANWJow)rf6f^e$)7ww zaTBUnOVsB>TaZg+7>JsX-#K!O7uaj99FBzZ6HWg&^5zAyWvGq<<7%!UqA0Ystw!?W zKVXeCN6zA;|4gF!$s)7%CK9Z!0+@_(mk=a#UPj+@6 zDs3t_1~oMzN&2!1yfNMwL)al?22X?D=d1aO6;>r6{}qd3|F0uW!+ov7H7s0%!q!vS zi=K!ho@en@;794j90e7hE0v1}4p$i7UiF#`!}fd~JgtT?{8CR^Ai#lwIX9Jk6<@1b zHkWLd_<$ofu&486u)&aj9I%T|uqb5xn{a7#djbH|liz|3f!nbq^13RmoWJ@!K?Edv>o1iv<2o=i;K(=hQ@N0$5cFi94-$a(4 zypQ{$Xt;I4gYCo2?zAHgval9LYyRi1> zvh&Jp%%w5!j3JS|ILqus0eewdr$%cYeua+6V{j(~5!a@NhK7&(O3Z_xD3eA(af?t1 z!&uERdUIe^UVj=Thy%prG_Jqi6d&{ux!y@-t)14KQ`qRB^={V&N*}YVXG&&VSs_M- z{5n@c3Lc&8j5B)tUClQa3NDh~%(qOf3r|)y6_N{L@z89(Y8J6+PUEveHrob=T%g%u zPK^#BsJ^t5RF4^xx~;`MpONzU+Fn(R+A!Cd(cmiPWKivEcuK*&l!6@<*eOEc@zQAutU?OJq74o}P68?(T&PgN zZ^66YyHs)r@kKqk3$YPS1h1bOB7)J_5DI$4T<;7p;uvTGh2YG-=6XM*KSM9w?A1cP z^9JKCum5Xaobf{&B?kCT#a-UY+Wn<=#3vdDuqzbAwFF+)%6F(+@3u?RPi;`4l>?+l zFx{B>!gSluPvvnW$;*JJg6A?EI4=ETa;SXgmdcly`YVWF82XR@Zh+{ykt>oL zuw1#3gSsJ=7kIp`c^h00Vcc``v8yi!?NDh3@NK*&yKfJ&B^1IOT^#62Ae^#+e2+z(z)g!3Jd#EoP*YflCqCh9Nk^0j(kfGF7xsMb{ zRaxmE8>-UY0apNpiW63oM}U1L>Toe7m47lYWjdR;lzr*P+#fsR;_M+f1(4!7^X7c0 z1haaOd@`SdJ{zPN?wP81ajFOM4ELPM%&uUuwTbg@FR9LQ1N%&v*OUf>7(MMkzsBQ_ zime`xZmQVo@#yP1r}TGg+1u8**w}7#;5Swi1QTt0?3iR9vDn+VHw(;f-I2*Rp(*3~ zOu|9k1X{|U^{e?sKG+qc@4GLIq;KxuEK=66oD{SK}xz&9(^ zH?{IJpY5=&LVi<3&K!qtYScG=^$pFx{HBE8ln1TUKCJ{BqUA8oSI7s-laJIYYA9I2^n-eUUVrDVWN3zDNx=9+pv3F`LFeC>~}Q)3$ttxdZ3Zji|^RRF(&GgbVMD zXExz6M0f_a;brjDxmgozDj+vjOdBoTW#RFLKzz_zj>zN8o1jg>zyEG0?VrZ3$CS!8 zPXLtk$!^h};r#&njGlc{dz#}nz&`AeWOH0toAZce36l^*<+*$Bc?3zs92)Jp%S@2r z^MK4B*8G)0h!ld8Xq;8{MJ-F>i%QMZiAjuL({1h0d83cn^I@vz<7b4~nVxNjetXtu z0AIEeP=fK^AI&qz)Wc(sr>J0&h9t_Pr-C_!xn*k}%(xl(= zDkNb5dxAuJ|E&g;ioH$rqnm_i@2 zew3B};}GKGK(7V#UIg(%+A*L4A`jF66Pc!WzSNj>l_D&sN%D}HfrrrtnlcA%58SW1 zlVNtJ4BhFEYwB-IEx<1Q(9!JDKz0cXM~MsnIXt$yGzeWXUO1?_gD<2zb6Muu9u zC4&C~3!)ezoH>H@b&fT4diJG)Jr-iT!T3oyleNKXM2=S;eWur0mzJeMl-f?a6kp^5 zOIcg&)$|2hiT}wG(B2TbM{zIjE05~^t0vm3d*C&CoqsNtJ2;ZNn(7xJmE!j$?@oFM zc7(DN4Cg<%gc^PG5~$JfJBbv0qWRim8PxL`uv}I{DXhDV$(rvLXn;uv27r(cf4W+* zb+Vac&&9dtoe`eqibu+$%}jEZ2s}PT=?uJzlqP;D-Hci1n!-4+vbD*{q_0VLS#uNo z5EJPtqTAj-#TB9*U5?JQw#W~ zh<{4>2g;O8x|}N2%&RP?)UkF;)yR;}UreC|5aCA?X0#iGBP$zW!G`c~>p4fc@u<#P z&hhL{aK#_eJR6Qm5I_A>kl+jraCeOY$X<027C5Zr?XxF9uhKk+5P*CuuIwu=EUw#- zSd2)=rk0w+B8|;qMlE!CYEQ7uUTBm1yJ)qklhx`TT!po|AFbL~9ChoLw{>SJCCNT# z8YW+wZwUdD}?bX{cN{T=L3e47S&;h^+&IP5^ zML3%`Bk1>#ndZl{H(rZBs5Qd}90drZLJ`MGI5A5~Z`Q^>4`5H1cdwb3_5&I;8-N!q zFu@is2y4N!@o0Dx32ef%4%monLtz7LTm{({(&7)^U@BW zX(&s;d|F@e7TWYyxqh z+pc9Z-!Ui{`*Ii}o4M@P-_y(&r?k+_x9ic&177Yi_ z^_t()O!wGkg!TQ%KX7#VKyo115Pa=QKMa2y*TJ2xy2F>c`W()W-=w8md=E81_#UV@ zZb>ARZ>A6nqU-s33~-oFq05A0*Z#j}fJ3^sfG#JS+4Vp~GcWY}Jylr0m2DAzlB{?D36u^ zdJ|>Jjldi9J0(^|;3mhu!lC2}y7>RNAElEcr=ZJh;fvfP2AkXL=Gi#QDpM>rx zYpkh1?zDUU1|3yR<@%7Vi-*M-v-e^4$JkRjTFk=^{064rD`5MpT41}nMp0EVfCE|c z$-du%?eeZsR7Ik~x}5MedYLUrau?`kdwx$#Cq=i!{r~^f)ONc?8UrvhtEr9l7`m$z z0Zg1WrgKrk*#^%6H|($(M;?+1qiP+Wpf5$TuIJQ>mC`(OJLlzKa!sdMW4T%5+O!H5 z44a7HzGXazN`v!P^(8EW^V?qs;@)J0b7+$2JLdO*^L1|dM9)QAUPCi~GMm99Px^TI z_TSS?VN1>Y5zUZ3jxahI1L~?;dhEU5)6zGNr~&!wukgC#U=>$zhO`-y0QJbs5Qwqi zYCc-#Kj2rT%p&tw;DKM{Lr|r;l$ga*TIK)KTGeV)VeaMCpc3j&<))?y-A1A|D1VsJ zD=2>!^CqO$_*o7lQ6AK4*hj;!D^h!guOSx-Nf*8+)pl<)IH5{y2x1?uk0lOnd;#KM zvZ2I*6hOZ;7KA`9kY+7sUzH9-yb92OTfeLsCwAB8OM`Bkc|U+iO4>0!rd9D+zSDDn;3!4H|= z$@3W$`E_o6UZ_fn;n5|xFf5jNE9;7oY9(zoY(-*p}Q&;@dG_1TUz#T_|k$~VA~qA3*?4cinlr&xGWS{>m$ z4pj%*Q`i95i%_W<+f4k5eKBk21o3v^hmA@-rlXZeHU4g zf%XOEFzI-**Bp5eJ2G&fHGPrLy;`;cl3yvmPbyy}-8KPLX;>5P#$)3RNkn3n!La39 zbibBm&{NvH-MU)Q=h+<@fa`hq%ZVAha`MW_s{&pX@Cq2}GO>tP zCA=!(711;i-bcBBO(Wc0vDox77$%C5blc6NAvdQmHW@Q;3j2l=hinq}XYDW?`381U z*!?NAZHryV5id9!ar}|4+L7oZiM0QWg3-2TloIK7=+wK$*k~O z)4mPPx9r(o>FD#F5nHDd|w zFWc=8z9QA}Ic!7YJlPu#6Y1EE=G^iGEB}#G7)wZ1V1?t@p2An-i7}$hF`gJB+8pDF zF`~^eo){zA9OH?x66h9%h1jbr8dPh1ar%FoNxw#~A#rguVq}6GmHpj!HPTjIU5SRYrBV}Gh1UKriEiK zn8v>1veS$nNJu~dT`i#}zJg5ZIcQ>ds^+@_HpQ74aA?MvF7Prw9i51 z#kW^wGVy=|K^z7ABFLlF_@wvSrZ*nyuG!J^o~ zrC*$a9DQw&y#0veRIK|7r`mQqMeaSH?UtjQuKS3MfR5)-c`Foz9P#v2GrAQ`s#5 zm*3$Eh^`ko;Ng)e);ugX##tYJ*=*FEA0Y#bxu=9fI`DTO-P)hqh>i<2EVw^x!92-BF}Ee_Kn30TiEk z%US@GIo3e0@ZGv_$)>IqeeH=D zKT=*oNhiCFFmuo06jud6? zJt6crH*K83{F(5wG9O|Ck`JjTdz#`Y94puXc{oPCES2aBodl zrbqx#S^rm}6LI2Y+<2*m#w&1ZX_*&3jYatW9Tc}_^=P$_25YDR=+|)RfJAp7|K}mM zJ_bwg&uzuSz1@0T;mz&gfDxkymfYul2ez|U^#Yw<;mhp-ul-MrHT}r!U3q4S%X=iy z3~~j*RgZ8&{e}K#EGSjfb2|D1s=NL22&(J-Wi-`MD{aEJuJqkhC(`#II(#CxmM1J6 z2Jr0U;hYA;dRL0DAOEn%kfxIb%lJOw#kAIIWp3J1E1iZ z(Ekox@F5Y;fAX*v7Zx!=;G8id5&K%rYEn{(Z$p-n%Rh+N&t=^G!J?ro+;-BJ6Cb0zq?QxiJUlEkH)8$O)E50GU~Q zT+qs8J-IeigK#2f)8qwz4}enn3^7xN5;s=Vic>sI%IH0(mGl@Jt_ z3eb!>0OI@@6Qz`s7}F}&%6cxY6pFCg^L91Yn*JYdY}<0_Ib$?B|Lt&&-|YMatV2&q z?QVrb%-zHB&oQlYRm!Y~3Z*f~3dH%TK2z2?0}KXbd#s&Ot_Z*R`jt40xte2; zAb0*|y>GwYkOymJFcwr@=}jTNcJ*mOVsm%=MojDnxPw&vA0hzo&7`)GK|60DaD0~= zIgHP`7X(TM=P&?3tm?!S5PG(;Wm-HIbfvem8|wWm2SMjqO;a4xS)3b>!>RQf)6NyX zG*)>(rAC4C=B)~qzpQTwM}bl8YMcOPuY^1w+DdAJAK6@9h?k6y)NSRtAiGEIQ9Lt% zUDA_$?^$fu^V1l%qYdr5P$hI+LH;D~cUb95tzgVLBz~VU-oE1ED{{PtD)-u9+byna z?%1)cdyakip*(LL?0N?L(~EPnHkLLZr3jx?9&XzP$==bixW=^;SEFkmUxuz7`m^fV zNY%BwCYT)2`@T=2y9Oz6l4*twjc-0Hc`34z@xe+iimAjnyDw%W-M0H|i8<)85l%<* z7RAOK5T&WchaJu7i-?3a9t>{U+ESEdU~6%XQ@sy_hu;0KhU=67}Yny4!j zNChrmIdnhx0^w-16u7;(5z_wPYyqsTWEkM&yITRfmpn_lqN_;%KM6# zl)kC;zcY2lEkMS*Iq2Lscd5>qvaxL!OE#8$6xF#iRp%HSYpgs&I;YZ7O6R0EqW=U$ zPw;7}gvSW|{Pu3&IER+?-NgRl3gGq{NV);(HTo=w#8K~1MU&Cw@_^zuxVDfX;`9%V zvffGTj2o%v+5jUQaEACkW}5~quvAm{#>x?kN}hb-ElBlbPu&YBmbI5%LHgYlIE+N} zSMDXf2G>m`fHL3*FTH&ZLf=wCm5wP4qokb7vWep$<@Dq|C#g@>2o+(m=n^8(?2Ks4 zswh7*-nw0iZlIeJKAkV0hTea329}Mc~i~-Lj)oqlTU;+ zaN{>`;6wzYx7;Wg1-k`R$H-#Emi7oraHR=b&Z-{?|0v_gGZteSOWK*77?>SYB*}l9 zl=8R-t_!B}C?Ej;)k>QaQt0@Vq4}md$QlKpXmB4xu^I1-t`RhirxRwXfMsTuLQ;Sq zd!{Br`92jYDi>1yF;4sxq9_$cICO)_6M4cY-4?ibce{Nj!yx8xVeyWPj;@2dTrgkc zcs@^{|AN~)0{Z)Hj!}B&o}TQ{Uy|4Gc~7@@r?K~Rb0ZCBzK`a)uX5Okvj%~>rn}P$jlA&(VP3@gfa|C4 z+Hy5EI<0?k8go%UkAx&Elu&)Ez*9=0Og18H3v6TWNFW*y59l0Bunqi2 zCODT>jOI!u%w6X~v2;?PjXQ>;4ocBvJdRUWq3n;#PMu_|;r{qO%%;Kp@egqm?iO=y zkO4rlaB{4Ah+{=hz}v7f_cwqZI}Zgtp8cl? zn*XYkMe{HICyM58+!Lbt@31`*JIAUK3HATkYR#RcsY&y%7ooLPV&sfVGVrNqxFtI$9n5-i-3wgBv|j| z(e?iLNvPuw9HZVVSnnNXy=H%Ro))b4+wD>PeJZTp!L8H_Bu+k6X7nX%plJ7dYHzdg z+^H}TJ&iwL!p856zwq{9{K2;))wfmnR`$P+Jc;io@q_XB6pLn3(jWMQ+Wx+ph&IleN!>rK^v4wC;lfK zlr-}?^f3KG04ev@2o`UjC_n;ww{9bhAl*cVp8j!&zq??kDVo1&LZHGa{C#7vA#-wj z{Q|V~VNnEoH`y%qzBQtylT}M3eB*iSw1m-o;7JknS}NesS{?3- zNri{|&iDw!r}B$ZRDOp$j83u(g!^EczbhQrn`0g!oR8E~2<84&Ae4j!LB(&y&nCJ9 z10a5bxaEby??++yg?8tFDu#2RJ7E5x==Tu)L_6jE2;cOMjuE~aJHja}6aGubz<&$4 zA20+M(Qb*reW!L7?%#PQ9QPHwLby-He$X*-e@i&-uL3CQ&v$bEGj`n^f&TB>Sm?hk zqOq>3F+u+#Y_Wu+|Ec3c|CK#}e)qZ)LO;%@BHOl#{|{sFFZ(~O;Xg&;AK|G+!sC1C zA2khJV{-kHpDZ$H7bJuK2mI|i4>%rsQv{CBZfoJV@vU$iKe;o6<3Zhi1;;V`{pnz| z^wW(I2zDe`2(FB1X|QTZ5WKN#B!Z8Vze`R5g72z5Ap{!>FweD$-=}uO;I|+8Cj8zK zf8Wzx@caBL!0#D<3G(*`5@QH)-Wq@ZPv!R=g8=oaF%kH^Ji)?mr#Hj#yY_<+ey=?F zMDg34ftGrjEtxirj5rIwPj3xx=_=Kd;CC-}Ou`xXIPvRG27Z07ofv-CfWKPB@2l^} z;CH0#=Cs1U4|Ws$ZhQ&&9rkDtzXuOkjN6L*j>Yc{SZ`-y{eLX^?3;>7DRzGL4g}Pn zxjq8Fx5rud?YAWy>L2|lgx~Rw6UFc8Z0RDiB@@2|N3E9XHix$~LA50KZLeCgbkgIU zpOLG zI{6g04l84xy~_-kLb}Xw(1Kp*Z@kj&9Sa+!tZh-{LRO{Q{)B;0>4C9j>S}i0e1nM$ zwk*{Ww*lBPH&<%qS1Lk6)V68pC_HWMfQJv3Ldaix(Cyuj&&`vaF7JMq_j|Xu(Wv{+ zH`oMtr?u+n(~2IT5kD$3Ub+c>Omb+ZQ3DoJQy%qD2Nf@@n0Qb%*6w{p`=TC}Df;oy zA57RsnWw3a!72+)jZ5Inz{KE`8KFNBKW6@q6(Rds1A4>*qzw)eP>UmCU>V5#we7O$ zY2#$C40`owR9B-s9E)M<{tQ(ygU1&wR83PjcZO&lmmMSEx=EU@l6bxfWp$|FBOj39 zYF_Wo8k<%)V?0p#L_aX$E7wF!qFaBmnDF8aU_t_mdcD)W+zg^zVRnRLvae9RBcj+U z_jP69K+Pd(QuQkE53_w(=kHD{$k%6JuML7QKkMg-6KEHP=^mQ&5fFs6@qg3~jy=2* z7-B=e)&R}s0tQr{A)5E6F7KPseYUzQ&Iki9uQ@fH8wCX<^FmS2i|guXy1OxL0L?Yr zGFU+L;d&gd{|OrtyInxDMX_HD7h?g&tIq)#?-?B-H3uCrJ@u1*T>q5Utb-8$2Ny8JeL0c4g{D&gUuI;O&?wsuxpGZ{&r5hjhqJj z?RI;2F?AWtNg((kmz)IrWvw_){JFgA;WFX!?utek+slBb$K7cIiu1hvPo;|_5Qd%* zYZ^VVfG~GjKMP?q!VvafF*BJ66Lb{;TF><5@&FK9b5#V&W*)XsHVpRjSjs;xLR6?4 zA4HWx(yeHA0Gc&4vq^KtyZNAnq<7Z+<|YFV5aMCTq0xy}S6H12P2}tdvpPM~*|fhd zc;&dUgYE5|7HTY%j7{qYl%(|{HZV&FO3*tjAL8+o7%1()VJ!XNp|@8i~f zx3dA5fmcT0V*f!47t8Cy0dxE~DE61$WVNP{a0S|0bQapGFNoljoj+Pg7;*eK;J$$c117I}1mS8f9gm^Y2fC5UL4oK2)?^kgo~PhS@bV#x2a z4&J=^@i@;7p{v*~z-|uGjX*h|qm-4R$aua3bS&Lg)IqeV#}`4H>h=I(Ys*)UX7f?J zdUTO`G?9Bk90QTIpRKgxw15`lDolK(x zf`22bKU2W(GcJ-Nx3^`Wsmrsk@7OKeqmkUdHP0 zo6iJ!e~}--O3(jbvC>_yftAp;B8_`Sr)~-9?@QaBsQ!KnTbgRNWJ)vtev6UfBU)Ov zSy~eP{c_dPiR$l7?ZHHiOMpW3AKJii+1Gk?I>!2}H#-$+U;CFN+H7Tg_DwsXxU-)F z;r#vnp#FYcfPFgd_4n_@Z=esL-qsy~-;Mh%{QB00CpH$Fx4O-V&6C4~RrXoH~i zrsosH4dzeF0ic6@xeK>Dm>YZ5+ot1P0vg~Ht8sR5vi=Ix4?PT9XJih^_w`SM>rvjR*e68o`0Gv^W_d6Z zwz4&au#j!}-VY7i_uSwz=L_!>^t{5UPO13uWN&(dl+ac4JwU%K+kgb@EBB%_pS8g=6#>Gxnm*-cO&^Ih;!k0#RsB>5TFXg;*+5@bP~eOsvx?E- zilYqvt^#b#dX@c06>|H|$g?jWn|3Pn$vd40RcvvPu-bp<@@~!b?#}f#B3ErPqC{I8 z?~e5mWYYSm2m;= zn?WAHAx}KATHNDmaSX>vp62`RYln(C~~)1;+wSiHA*A9{jpwXj0aw$sx* zpv=x-n9@AAKB5_FS?R^O`lyB+&*2V}p2F4NsDI+F$E1gF_qtqFqf}`{V=rq2^qvMu zh7Zbm6#}_&kO7dC{{rK{qA*hd7|-(-vP-9+p85#Ofx4mms8#Z#5#9x+{Gi!{{JmR# zpOoda@|lq{tow<(bq!wfA2{BOrhpGN)j$4|hYh%Z5TV1L@zPlI5mizPWCZ1I`86Gy z5184dXMYTu+$ZRPXjBcj(2F%6fOi&#~)JtymQWt6+S~!nTAWj9o#` zjW6J%4Yd}-cKcpPt3YEe&l~Vt`qp*uV^`fT0L+)jvhpRod=Pkqf^L|H_!SKwC8qzz z7xt?5teBA6j*FoGMlEh2k-Mc?305$0HqQ8RmFMMu)V!Q{$>v?syb~B=GOzQa+dnth zK5}BgUyIETjU0XRTM>hg=ipUhtf;Y*#qz5$b{}UEHeTC?!(HAjt!8vuKL{SgAez2c zDl*mBFfuH^M^#spi~5Repyb~Id`fSg7dfMV?ny1o={TKp8%YK;k7Q6>w(3DT18+y1 zK9p*RK{Fm&x6Q{JD~aOWzg!$=-2NQ-T|R=>lKGvQn5mdjfQolxE~dW)nEogmAgDNV z18w7ixfD^99c2())k0pNB#O%nkMG#S2D68DSW_J62bM)}#BLnQJ{GW#QV#haSBCny z>1Xt@{#n&We6&H_(y^peUvp98OWlQ^Y8zeh6n+5Yg>j{~vSj z0$x>h^l^tvG%E1~6^#NKHEO(6!CMnGnjqjgm_QJ;2v+fic&SE6FoIy<1m$oz8ZGr+ zn_9JKZ|F<8*9K8Qu?lDvrB&2ccZ^olil}|b_xsOU`{aa+)%N|q=kt;5efHjK)~s2x zX3d&4GfOcXX)Oh5Vgy8w(U_CL)0)F-)X)aI^*sNUqg4&tcBo#spAFTExO~f@igeBx z>Ib^=2mPnz-`v;ge~Zh1RR4pn{LlW=@)x@D7yYN@k9Fmb`}XBCskgC*wf=1`-@Wxg zXLg&%;D7oh{wJID=M(+;P=DU%PotQE7KrVNG+O!~|5`SDbAI{? z;-Bi#WZV?`I@!|v6uL#i1P)cIU5%4GyDlv(uF2+!) zTYt;{bNUjvm?^8le0Nbk4F-0OE6QdpE&K&9Wr*2m*D!;}JPWaq!TwR6%Ygr|-Y54d z42|?sz;k4|pJOjBE6meWI@f;u+R&4J($dBQZE^^IP2`Nfsn4i!=I~MaN`L(SOW$r= zQC6VivFyG7y8XLk?qT~Rfl_)nmkMpUYzUTzEbeN(CTnS$k@=o#)FA<( zNqeJRogqqgd`A>V52=i|z0Y=tB#*XIDiW@~Xlk}aw2-r*RvORoy2;~aoKis47U-@( zcSIg`A6KN$)x-SQY0Od;FFRz?1jjO}l<>5u7;vrPcW~yfAqlpcv zJ@u3H;QzhcB!5C(^Zw6LcAnDD1r3D{s@+Fd`D_Otq7$IdGdIlhnUq`%m1eE6qL@~% zpZTN*yXj-7<>HWBP@zDIErJpKJ;)+>Tw_+MnvGe&=qoW%uvd})YLE?5jvunC4;o;7 zI|=K-N2g${SX6V(_=3wX9SaOJa^G*Mv$=Qd!e(jC4c!*y0QD*TY2_%_2W+cK3^vEW zzQuf7|M_WvSZyB$;~$iG3SSe}5SDN`Swa)6(9c)v4wiqJbl-1OrQL3EUqL$~AKV z?#4o_z+hwD6`gV6!`IE6`T?tLLxFYU&Y6{Me`M0zl-1&VKLZjTpvI?yf`8GodQT+{ z)`|vqHkN=q(DGxA%E0Ka5zVZ=n&VO%mr7x7(a zEk!DisJ5|8%Y?d}-OT(oiSoz<4C>+w+GQWHs_beRkSXO}%=S>|TYboZL2Jnre4>bw za^JYU01g+5zR!_yoO@&E3iaHxEGsy<*xA_J=eflc74OQcFncjpYQj3nK$D61H{%^V z`vZ^ls-0o&UbJJq#$g?M9;{FBSnHcK)_1<=us#-5JNxq7GOu4x`o2TmmC4bb$GbuBXHV{cbpb`wSjYYotcRcH z2_9r%t@T?br?_|Rh;MR;U$-g)aeWgaPWhl`Chq^(1KfA(h~oncy-PHCevZ!HBwYv^lf7-nHs4{p>#xC9V@rIkZ$fN?>c2TM%T|n%B#C0p1NBz=fo&E?E(Jq0 zRa1C`K5DX$TuhPMpHs2mn!aDOv3-0*R?S$g6^qi_X??caPAk)1)98wlr^lTm!)LKJ zoTA@pJ59|@r=HQmZUs`*Jq*tLM`-?TCwZ{v+U*G4vN*%ql}Xul`__6#-#EPD>Dxrb zqOa3-U3@1F#&oCKVr(T4thqSW_MFbQj@)((B`fFwCG6^hbCUGDYE(R@=T)QPIX$ns zNOwiVlh;#0R?XrSo!OJcS3vt|BtNpK&*@5|q2+Ixwo4oNP7RFu^*nn@1Zxoa`Beq( z>f>SLi8+k9pB(SF*hhVics<;1>Gca(n3+s1u^qMNe=BS7K8pIZ`EwL|L)&^Thk=8> zT51ffS72qX>~$WA#tH>$T?HDS?Ft%udNllATj6VNFr{*T^3XPDoM~v}35{Sq=__}P zLWhc5X3&#SqE=M*;8ZW%+(+Z){<=avF>5&I4%qz44>2!XhIgV!X4{;_=DD#!q>j4n z2Ce9{oS6Yx&Q5jRM;3-VK2{OixpNL;p|d-72syhq{>JnI;iO`%jN$Y0f}S8BK1v6C z4a}3(0-Gm|ZykFO4SI(Ya`o|9WfQeb<&4WDRz zS%#t8v2b->nuSf1b>{*J+pO9F^@~(#R_$r@)_`5Y`EgVq$2nEJ!i0X%8RoufG1#fn zH=85?b^OfKX9N(8lS3K!*H;sij>)Ij-kjTq`t$?L=r3Y@oia3{ktBU8O&=aTWQMS4?LanyqN+gXoNr1;MLq zqJ(=osDNq&o11yD#Hf72xyJ&csK9~hW7ou>f)&%$p`BJtlZ4?iLccWGI!Q58O^%m7 z@VKgEwLQx#=krXB)Ikh0>-hrOh{c0*Z5PMAw5VsTW?Y$eM4ogdLb}}7WB|O0Fma!w z)=a^J9%r5{2O#{Pz9*9S^B`7EUC3KeBf4^Gv%ig(Zhj0bwWD{3kPl}3%~M06*HiUq z#ngP)Jl9(+3#-WsRu@gyjg2Pmi1IF)c%q6+y!3Iwa@zkYO12Uoct@E&NIo%|OK`OT zKUGO^)l>S0dq_^FL!7;B|C1Pa*dNoo>=F;j2M@6u($E@M`fa}^A$KR$6p z)|CDPg^^b7M&@b$0c6+=SS7by(^M-R()`V zEA6s9*rPN~CXuFo)wN4xT6d3ilo;HuUB-PcB%&-(BjTk~1+%fH8&h~y@cG8~74D3n zsRF&MRvQ~atFb@lxBr}d0rpKA{=@^Ue0c{YxeOXj$q|E6y-3;6&ysd!la8VF5UKW( z0gA^?oz&~^Oy+l|)P?ixvBhGCQp(%m5T_d7(PWR`9|-6pUyY`^A+vh_j9;--*Xm%t zIY@-=V&T@|c_Y*$$p>>5sQE4G;&^5%P;v|U;2Y4 z%0wF0xt47%`G%Gic5GR{zn!N12TNvkXq$9CYYS9xn7Q0iwC!F2cWqOnXy45|3Ep_m z;b&h%BsV5q+vcR(_VU9W+eXgR!3Y4>KX2{0d8=HD`hQc4w&|FvWQX>s&6({; zw=dbFr8wOl+VV2Ltgm+eR_*DsO?zBl-DW8-x9h8D{HZ3ILqAyrLh?58S7bpawg3LU zh%)6pb@U5o{^QYRYFKZc!;mLY_2oCt5_^rYOI?Ap9g-QXu?=;{%a+8x``6uEU*D)rUeTasPb8^lq#VAVm1OJ(<`n3Mm$ z=+Um|p_4O24M0gRWa-YYxs_OT3AmnCkt-3sLMB&nknQRyOeS zLIa(>_G>Wx@Gwp1=8GHUq{-7BO0%WD!q)aH+h%bIQk<>LH{+b`aPdfNk3x-5=;u*j z-t%$l#GeX0<1aYn1>Df;= ztXs?%S<%RV=lRDDaLAzdWywU6n3-ei)$Gyt-HkS1o;C#$NW$!Vs!NV3nsA{klmq$Zs)44l))Ox@bG%lPj@o(*3@p3R54MxN&y zSzeyG$hdL#wp0bu?m!ZMhS0inxk1oUf;Oikv{(mdM{frW9kt4uFmnW#;Q1yQgdy0o zPyzetBl<}bZWd9Xu4c^kmG?Yn=*E^)Em1Z@4S=7v*mahVCmF(6*wnUm3ibNSCCAKWRc0tfH^?sdsdcg7Xrm8vL9m?tnYR}>B& zlZck-rh=P(04peC$#6fwRyfVwB>&2(vV&1d3Z!>y`9byY!6>uNYMLlAK1Z zW8TN366{5G(3~6gv`vja<^XI=V{55wDn-^xH&fVl2G(Skx9NeuX#St><|y|Wc^3(~ z3a1tG|8WKt(Q6}6+xIp!zuNrfja!u3qz@24%%4mBCWcRL>N~4_w@+R$l&GgfP;-dW zu3UeNq{9al5dZ#DQMDJ^V-D%R@`AzS05wa7h&d?_Sp^ygIsa+C2bM|2MY&!TijE*?&+M zVE}Ep>f=m%h3pgU=TkhvYQ~$`B!k@f;!Y^BL&+13F)=Mh%^_mKrG?F+LA>yO*?s1+f{GS%3=A24WKCuv=?SB0;v zkPWj`1)Zq|1zJ?bOaFQw^l}=lK5Mlj7Oa8EaYeTN2uA(ckADVeLQ5|cXV!|S=Y5+c zA5LAyOilwFnamOrFP$#9T5#KvKG-i4#qM99q@BY?M~U3hbrpv=HmDMi-s?+HoPa-t?O#`?7L`lFh=( zcb{2`{-6g=joDsbozJES-RAn;_Bw)H*V&v_Ge9+1SqRXfroFbU=^N|u{78N44H3`I$VTH&b}^8q z@F(#=8BD3wzWTe;+0QDI57qOlB5|L9F#p{H!5VA!tw`QyES&gj@DlqZm5DOpGThFT7wbl~e3&yggGG&Jy60`?yLT5$e>sO_g8ljKq9 z8C?1{x15ikz_zTAru}!J2uo8!)exc*V%S7O*J=Ngz7WewheJObEcp|5xc5L~)9qxd zxl!HzU8;tKcB?ESr|GKNU9ibCA~q7Q%m2q()}*FSe;2_dh7c0Ll70ALLTX36@ZIb8 z<1v~nuX3i>kpmA~-7fKw#@&#n29X|EYZ6Z>$eR^X2!Wzk;{f1j*! zTMKG?4Ni93HMY3_kRJ>_>zw|bDofUuM`m;2-`0Z0)?LaM0W7OFe^BzoU88^W-#~z^ zWs%t{8aan|^BBuJif-eYth4S>7x%aEJD}mY+9S#uHrE~^0ULgRamzUb=-bX+Zn%jr zYHo1;MMss;VX5pxKX&^0sr$RRc(|IB%020XFulXmiEkLm-=#~11NN5bGVw)IP61`= z`<91}E~*DHscRB5x{CcZ?xn{{P11BKuFvsA+0G?~_YSW2 zP~o?mn!NRrZ4+jv+1}Ac4%++}Z8f$hu5?;>dp63shQX>}{Y4JrW~(tnQZfI0_wkY4 zvKk$`VL$2EfBmt9GA3L%iAZEv^C3%Y4;@a zM^1n8)3yA|+A2pAhUYBI&^RyQzuBkr|E+urt%T_KNfdT8caC=oN09$QnS80VH)Pr$9D~8Cd86pezlGeKrblL7bt&l%A6>2w_9e?|)E#jMSq*h9L zK7!L&t1(e?&;K}MqDFFK>VaMH;B>BTM}8!MT>@lAs`Ift^G2l_58*ETKi*J{w}G z3;v9h8nrN9T5rXVlWf_dCZw{5P!HJ=f?xKOYUG4%=!h1=WNZAyLgbW=!>TEiGo+n| zRa01?TX{p`&#hai#H}(?j4y7PgTpIfxRnQ!)A60ILz0(u&WV-$v*x7A)UZzY=GVTf zR@XZ$cEg8?#bfaES9R{af9!jyWeK~fXD4eqGb}erKWurN2f?dPylV(I3j&|6(zShh z@8H)FJZ2G|dY1O)Xz4+`S-2(J;i~xA3Bzp76aTP??jm-!B&+7sC|S(R!#MZ~qX_e7 z4KIhwCFGnc)at+xxpR|UCKNEo%l!dOV@=zug!>e648t@65m`S!*rB@Zeu(Uw*f;ks z4(;o&8OBLfRrQOPQ3+bZV|ox@teR1#ETsej;vVA`1fPBWV>2GamqPruKk6acRxpIp!^B>Pos*reMWC=`Cl$Nw+sp0;lo4r~GPp-O5C(BH;OKTC<1Z3~cR!F2LfdaH)E0C^;SbdBKznYs}) z_(5P`|2da;kpD*Uv6Dp&>6yz4?5IbO=(ZoG{vc;L=bvzXT}6^5jB9XZ@)v4PW%5^Q zB*7oe&f z-+*K+j}?9Gt|&HNAB#Xu;-me%mICwKxA7@ebWlI-sVC2i+S+jOD(Mr+C)aSnTD_i2 za6>_>Vpyi{L!Hw4MYhW1$g1-CB~1_+TK~jq_87z$Yr1snt4PDMf)}5tieA}GpwFSA z&aveE^?VacCTDO7dffCcv(inUY_+r}t9qHIz zhezh=NXPCvJTgy5I(FCLk$F1OvAYhB%)5d0SoaAu?P)tPb8S%d@>UBq`iSbnZql$2 zPAH)VbnT);2nd?xH|8v+wvi*)f*5@uM*lM0+hc6(X0ptxV|KtY$@w;j{+RW}9XIT$ zc6HjyJU+Q;W>#b0wxIGraZ2qW5)7(VI~)hHlK%-ib!-6N#f631NxTsv+YP^IP9UCF zpz@>bD|hx{-?p}OJ0D^Hm#}tT%g*2Ye^bAW{Ed?%L`pAb(4U)C`w{a4de}#m(?8OV zzw6n`|>o7_jCeM9SK;OOB%@6UC!vibor5m1zSNvDPfHmR)$1coe1P>9)0Lv6f^;-G)K` z@>9p46-T!+Yt8cG^j^c2iD8a7IeG7TUHCcIu1`l7Za8uNYt!EBc_yl8^otKT!f!7f zVHZ8}jV^aI^9?e0wmwao?OeiRgqSv!eb|ed-eh0eu)B06zsZXwN%szXG>=;qC!un@ zbgx^P;N*$pdQqCZU~xuT`pJ{4co00kOnRPs8%yA*qJyKxqimpXPLm$V|A?h&>%-f` zG?f!^thLE0x2b4t~uF_!~oG+-=!H@Zd)xp%iYIUGR zn2Qz+M*Y|oGo1(4F_90wnuIJZbV!uv2T%58iImD+{VeRy`>}?Mf6wn~|J%yby;feK zlj|$68Mv=W=wM&@CA9I^sKL~Oc5;A)UdcxV<>PgY(6j;)&H)mtu5~_Uglb%M^Q<}- z+nFxr_;-mC%BHewo;EkeA6^Wliq7OwT7G;v`CtZUx50>{Wwk*gR=GL(DCo)3$G9+R zS3(GOBxJ!pgAk5b^2st95lb$Pa%p7eA-)3d!k1*TzwJQ9cq9jNz++NlL~4J#W#3pW z$;$G6jn?3jL*7C^X0kbcTWKOzcOSdL+e(+#St=n?uBe~GU)}cZi@?mPGEM&9DV)}@+{$F(^R(-j!rG5C>HLj_AoiP<<7j(u7ehC=Lw{!Rr_r{I z%xxR{=r1I$!qrqu#Wo8mmw)IBn&H<_Wo9ElZODhK;!V65gKyE8^2mTSa_l@te~A7r zbJodditzY!0KiL}ZQFo9)-+0~&Z;E?xeJO9vv>oJuaO_tF~N+LEF4q0KW~;O!%TNl;YkilOUf)%srTP7}u@cb| zz$U7ZlHRfxH!D zae~OHbf>czbr#bthr-^e>`z{&>D{`zrk`$P%02JT8BK4jq3Khf5oTJy9zt{3Kchcx z-NjN#I`=T=z8YCj9+h}>=$~H{?EQV@B9d+kREj3vLBCaeA;&bkv(K;3(_I0NuIGnz5Z+a?%!$QsEWnV-1&MHIBgJm6i}8SZyJVWYJiwt^s{P41Uo|D?Cj-k?AhCfqyacD8ACu+wJoQoWXhO z^2&_Ti?CDB%P+CMnskK!{0AAIuZS1%i^_%(I)URX=@YEL`k>nt;>B6cYMpq;4v>S= z--1`jd{M@+yJc;wYhMi8$!doc&rmppgX`aovZgGi-apdzEP%2=vyRvL%yqohXRhP5 zKBMEAya2kqtnH=R7g0b_N`aMbvRV8+!NMj7gO0HV*B&lXiW7nn$R~}H232mZXWDzR zVI==}KcK|H1@?gtIrYVtK<}(zcmXhYvdPHizf2e1=?(Bbe!-nuoU7k->TCEE|B3_r z;|J~WH@EFtyvz)SNvE)Vb%m~d)6X;zA&aStZR$0C8dl_s_UKs8j@Tv`co?$9^b@P? zb&(}($5lsqK#T2ZC}M^du#bvTH@-;GPntKmM=W>;AXEnRMP$K*=op^8Xz#DLZ*vUJ z6Q(KgD&PHV(ii;PXkR9zl1Qx!?B}2Y-K&9E1Oeh)ez>Q?&~N5!`zBA{q_TTFMR@Am ztu`+u^e97vO+@p=uhIa}WLYY_KM}Fuc0Gi%)ExtZ$WoP(E5g~f*15Kx-OlcJ2)|&Z za&G!k_?Ao7sURC1*yLSde1|c1v8}>$xw)W?7qCe}TdGlsXL|>!sv_NI@eR5@ZL2F# zgsg~1)B_PaWo3H5(J;q1U%lD(lvvMP6xj^G7@1Z_m7zm+YH9 z*uF^m$u?y*`vwc{^Am4N3OjTM8>`~;7CPf>4?LOpGc^Pm_Shzs{{4 z5nFimxW|Le-1;CD`!Thn(6=axLe7YTNS7e4}l7AC(TojXcpljtE|F z_vgT>Y}Q0OeHu-jcuF)ip)*Sm+$CSt<0@)B1Z0#UbZt<4p}L<;P^Pg(OJ2GGPxY@_ z_tT-7sgu6?JsxVG+b4o2$2IM=;jc47`j?3XM7}ytz>a2~mZhJ0V5vieNHzf;t#hl{ zaB@XjZ9Cfvr%t+CRov;TXfNpMxgevSPHQx~G+I?(n*0lvEL43ypOz+(Jv17rTSE)| zYbwE2ow6b+b-Tk$=e!9YE6*{Y8Au%$qKCaB%%S|%JhlIaswJeiB^}xbz*u4nCv7$B z$h!WWw^rzAn($Z}*j#7QELG_RR@&1eh0)?%JDSn7+XAtDIo|FL%Nun%}ksA&r~{$%ZDo{C{ZRbRE|w+9fb`F(;r zETmDNr1zb~l?4_>tXSJVE!VOR?I51~`8j`}&;9x--)$SB>SG7Q*gk?OtxB#N{>)b` z*1Ha26L%8}R9xPBemIlXp45vA3)J%g)c3h~X+sTDOidoJih}*wh+?bUw#XAvB7#}T ze@26%N#3)Y6<;jg&th4zuC-fZvd44R-Ihhhl-Zc2`xh29tiw$y*}L07IoL;w8kCIT zh^ORV_1;@;^@PQ8x)7hW(#-7l@0^(xd~g&FUCHbX+-v;zJW@aTVrSKj46CE2v#9Cu z0U0&@;Sbcb@b4XJ!Z@8h-Jr`pH_263qpE*bl&*_Ts48NocT8gFWq!4muO(g9k|Np~ z{C!`kq1kV~0QfIAGi|dPJXSPG<HEZQg@t*#Dg$tY^kxjKHXtQwRq%|vN_ zku|@DF|tZhom?FtuKsjQa9$O8J*-oATTQ1He(pL|>4)glW2RYU4IZ5o7paQ#%q zeC`x6-xqG_VisaQNFukK5m95GY!ck$$qksZmb#se_{|XZmY((+3s~|D-#%sd3lv<@iD5sLVr7>C7*SSS^k%ftg#IY#*?{)<@M-4+eP{&$C~gFmT-$z2L> z_9wDktOBHwDk)MmgIHvGSAI#sR6AnvMJ7Tbx9qp4o>uiC7OzT~VO4hwSy~W766RMX z6HOG3CHt~UA~Y|SSW~V9Kh3pMRHFcc#l@Un6D|2vn@~<$k1Uu1@~)@HBwD~cv6A*ro$Zh7>}=MJig{h=iIJpkie_Rz1Jc=O@lJ9ist$L8AxL;WH8M0oijKJ z0M^&1_R-gAP7jh8t;{I1J4P9GM^t#X)8XjJ?R1d*on(ts2Jz}_edk@kQYW1WvYHJI zi^MW@r9nbJ;%T$t=BQPX>T#DoE?FCyUJ4L7S?g2d?^wyE$aGU^QrV41lyN@JC$Mh_ zEIE``olmRiaP23IU_YVdN1B>)f=lLTTH0S){=Pf{FSu|BT`X)8S+k)Zj zYORrFkD6nqju1=VB;U8`hImR6TjqIlg84CU0$*|Vgg(A#wN$AEJV9AXm2pIzXa{aCbgr@`Wxf2A^lhv%0b#3>n{%% zqz$eI#i}B|yna$O2 zPrpW8g`N5#=}f^I(pH-5_oaZdIJhy5E!SFeycjOhXNd?cPGwJf_6+U6-~X`_XQ%KA zLA-?QFKJurL8GBm`#^F)R+NoK$H14{(@8TS#vEDku-P~(UNsgSXT__=qT{T1)%LcG z&#L+3ta#N`x|0>J8uj#Te(;eQB?Y0oEP{E0;Ea-j&|Mb6JVEGgMoB^FZbr#!XOs*+ zC~^c-Kal=8Dh_qrI{}g}wf=OQII+a@INgx6S82J*Dt^BDegayzt321aG?ww809QSSGuvG5>EoWsd%2f|t@t9nK zn`^H~4^-)dBazk7_>EEzhUhkxeNo|=#IJrt2O?*xtOY(BT9Uw-umQiNc2_P+C>Ljp>*it zo39Z!xO++t|Li;4yR^H<-piRgj}@+fa_{8!Kj})y*&&GQ1KZHZ2;zd7l_%@YA7(OR zXlB>~B4qug0d9T>4Mv#_xTl*Mu(SE0BP2-_rlkkGFS&d}19hS;Yt zmDG};`f<7~JzTcYgrLYqqsT0WDfk#%Bk|@vz6ryffeb;QD{?-TKybctZ{|3pkW)O` z5v&%1FNv>q0XeNdppdt@P4Z z^=R5s+mM3Ms7r+qnI`Vjm>R(gmQD=CaY(~K1^pANg72R%en*CW#!E#3P6!%?ZeR)%MCB{Dco$0JJvJbRH&a1jF=|wsL z0xN36Vxo@&{lu6zT8K4txR54Xi+!cJO4CA-5fTOOIpYz$5rFd zPq^I7dTXCEFjpkrM@Ge*c43rFv;;HvmMidVH{KH?nKTArvpivp#8MtWa)MP&UL+~} zloa~x{5D)C@?*T|V~zBAheHN39vruugAdwygxqO?cy& zuH1w-ZbZcSuM{%ZAilD!V?sCXFb3AILvYlICQp}E!#ZVxh18esb&B}sq`h^aV>gNZ zXcBdjbedm+pLfw}H}rgv9(94f7VK0cC|_J0oYa;&vQn8 zERn0gLrrTJn#*=^eBs_a;J$2UDQ9z+JnvA{Rt&d%W6=(^jN(&z8e5}rk=MeLLzxC4 zDf6p6rkjKm1~>d!Iya|C}H&16D+z_ie2vX)5Dj>a)>KSAyH{?Y5vp}h&;{*q}4 zN(mFEk&Qt7&k&QUdxTXqxv+?qA5C3Moy)r8JFZd3uc=-K0mC=@H@9 zNn{+#PFj!F!30#+U** z=f-b?$-m0v<)F5Tm`u*cVo6$&_#nn1Dau{(Dn`%rDu-fafRX==$XuB`rzn;@r?^5f zs1A~*I)e-qRFjtTpq*uvJ7sU1(lp&lyM}vLeoDK>x#ny1t_PY%_(nlBk97|_;DH)c zv~$ezR6Urf3)DZ&f+5VvVIKxe&GQP~N>w6!ZAoYa{h}BEs-s1I=rMStjH6%DREs6P zG{jB3k}2K7&*5m1OnadS??7e<^!~ z_GK)wc)h`ysRHQbhY^cp? z!1}V3Hd^Ht+)#T?{giXFYAROLZv;6u(Z>;JIc0QK%_+`2J<#EHhHx9{ar3E5Zl4q4 z_I6cA+$?J1wm$=~exbl(peaM`e1^Md>Vm?2W|>p@M;@}&TzNKF|3^zctASSbAh|Fm zEE6?_`AqZ$d}f>XshbK5qa|P1XL^uac&`7fkk5_@kR<)tS^60`zF5SXs?MA1#iFe!uECArhUnA1v0lz#K3WDJs%tX zMEdK9#@odHMA_FIpuL!4Ogd%4F?ms)Ww~iNl;wk_#gFDuV~(#;J5bcv{c=~M@lPsu z<`9t;y${T>f1YlPBlof=RQ828J8;V3<3enQS+O*ywC5M2^Xr(lj7-U=gg7b|Xf2dv zh?l-GQlpc=n1!SH9bCgEQaWASTs`sy8!1?kyyYG%KYxZUiG}tsQLl&Ozf42Y+u)E6 zkgPy_@m$_y)szFXKn`T)-&KP<-h?s{Hkuq#hW*zZ%npwx&*FWsWXqdO_jI6~%OFW> zE}K!i^?feP@6OsR#Zbm1F4&l64;WKY7mZ9W;UT{W9_UxZZdEZBEgBPd_t>OyX65gaIc+p_X7(B0u0^+-e^F?*Q zHS1xbeifH^>E0oR3m5V`c%%a`JxT+cf)l~OYET-DzeODY>J7lU5o#g|M_qMrMP}*h z>S)|LI;(bA8i?_cTfer|oCa#vzmBhj9$iwYHJ$; zoV7|HZSqF_SMe2jqzguZOgTrJDQtt+wpx;3i9`5lm*C0ICDLjO+C`dxR9QAjDP*Wc zWZ!N5efxV!j+U=kc1ZG!pR4x2(LvUY9NIzh=|8R1JP}RyZi{J$~vb_ zz+wXwu6ldKb1eRz{lLidzotqRG#_bDQYUueDM@D zm1n+qikiw(tWj!C1CZwqPtO2<3K(^Zjj!v%57WvpXul5o@$O8DOC<&?6+{rW$PWM z;B2Uoa?$r4r#$4d_%=BK0EP1r9a{iRoTqlpE2WMqgxQ*8d>7wCi{7Ml_b zeSG}?W@DW*JnOKKR6Rw(ZL@i`rUV5LEXM$_gN5L@$!aKXj>m)J53S+<6rHuLS&l^cQ zF-B$NxH25amE2&xrNrdkB@@(RxNL`U-r=-COWBoJ!~XfJp2TH75x#{Eq@Q6wG`jZ~ z7t%c$dWJYthx`-koqyspVJA%eaEmn*^On)xd2wp^x`l04up&D=U&^HRRDG7p&fAR^ z9{mb@fxN002!^eJNDYPBvz-h}xv`5xl%Z0N@e-NNKUyNw`A17+I>&f3RGMSFM5c3$ zHwS&rg-=es$Exu??7e8;114}SKz6)fOX%mx-`)ktju&hR{XBtn0kY$(bjP2(@si0C zFonD<{U+$SrxVTA9wj-j)Cdm`5!Xa2lAVK7IHub+$YhP?(0WI;7|fdLJx12@gp7jw zT*#fbNd`xB)||GXwzOToahT0HjCoJ$lC{yu5X79%(o(V>@wV3;Y4N7+(GXp)lP<6b zx}WJA_4u~ZZlCI%NV~5yrQLSsFYg~VjT-#;498gZ%pc9v{_3P`b|Q$6-#z$*%-6c3 zDQG*;Y+o03(LpW>J9-!Cg(U2~AQG=Ihgg?OrD_XTipSr_L@ zm9Hb@_w%KVl?PqtTVncI%P5qO?a@v@k^fT`O>``NbR?~x*qTW5s@6sruA1yhb||~T zqq?TDPdjS>uU7}dPo!2pAFapCO7=SODr=F0&Q5fttJwL`tN7FTu~e)RX`a>FF5(oO zMXyR$M{c`YOBJkQ8zHDhgq6uW$tZj8gJzLGJKEv=Ba4rSFBGqH@aS(;Hrd#uORD$R z=t0qvHzL!|*i#_EP*o&nIAOONyIXnD)Hph3^Gz3H(uKz=)@~t+Kf1Ohy4zaaENkhU zzU!L4%SqqmrSA%Kx9q)LqLDv57hU-@ly8eh`ad5{b?Y0Y(Kw{xXuB#{1-(gnaIW~* znQ3Y(B=A@`dzWXZB|>U{_9^7iw$Fzodp(b3(8k|}TWomAmeX=4->Ql0jRLOkoCDKO zKHloA*fR2{UVUQaC$+xEQa|^^S7Q95nRUUvo~eCjiGv`b@iR^bR$krtXBTls?p@Bf2o7FsxQ z>UNyiemIDJ@#!O=znj&ag;T_;qUPYZ zP4pEnqxx}(|53&ddTQ@C@CA7BPntfD7^DVb#bvWXFX1MA)Y>cfZG&Wkd+f6_>5X$e zMJAFEC&ivI2qNRZMFOp{f^8DQcBr&uCia8k8r-f4Sc?5`TYd0;qyMcY>HENbKWQD5 zTx`6{Qz0R_(`?sqjC>@+al&5%z_7xG)h2mhYm9Q=essCgZEt`Vjyu^ps;$8=>N_+K#H2+tlN)49%==a<*>{5I4)8%JWgYWrT> zs@~-1O?FGuek4(S!CxurBAGF8N8B&miNk<)V%m$R_?M*MI~jY zzs-#XckI~z`@x+V!ua2gY?4>e@;<)h!FDZgdEd3%z42d$Ew`0R_=DCi(fX3}8N%sZ zeC9=8G>LZ8QS)b?P#-X#RO_0`E?&<39u*2mL%mDS@9_y8=l5YhWq!X_k=-lVK(i9L zUp<{MzkmAujQKtI+f=6y=EHi?WUrO#N{ysokNmH#U+o2H@2FQpzkMQ^=d?j=9TM7F zFBI@TEze7uZ~A3S6Qx3!{|g_C(FmJy{K>msX@16y4es1qDUxuNxnGS#M3h+%Ep^*Ee@c@s{- z^xYP#KbmjTvFRaqYnLnR^x#U)@k)~`abL52K64e9c&e( z%&mhnJ7UfBoipZ-&k$qkFb}a{a2S=DQ6Q5mBMm3n0%l%ehZcrG7;E3L#(mIA_k%8Ftg>FH%)9F<^|! zizX}lVU;a+Y}&y}+}Zc`VEfbC560?D@fjMXsI855eW0-3uG&{mWgoQ)rR(p@T>I^V z|dPd;4c>;qhUczOMoooaK+HBz!#-{MzU?dvv&wBpXe zc4R%t8Yh*_xT$b}60Y}Wg(4KcF=uodGRn*n_Hj=)=o3v)tNmbDIo zXcZ0A@%|sTsUw8SoMKRQjh7yj0d?L4Pd$gSHaxWbCjZGA4Crkugc(%F{ZF)1a?g5z z$le}FT`ECCZ$=4iJX8L;1B1U2K_~gmdcu1VMCK1K?B6;!RdrDPSDhlaiiPbFVS_b( z&yC>5esDhlfO163ynZTXKkvi%4Cu!M7hlI?K7^MC`HKYI8kI3kMgRR4?7-}Oh zRTt=FkAXPARE*f#a)c}|dePX@i`!IHZ^LPp$7#Sf;WQ`%rw5+^r}I1F^xP@JiIvWv ze9eEOwnuBgPS9%2Hk=IemIjGBq3C|rn&ew!o#JfLW}zIzSV7+6?GcO{l_^)$TE+k` zS{5-wr|o&$-pGFK&%eEgUNj*y^}{*pSmyY!97dV=F!ftYp_K{wzE) zR$}8GeG`AW&WW|Q=d{yg<=BC|?LcD_L)d?rV&?=E>%Z{0m6~?F)U-ULGN(vwQmC&&Q;1+-a{!oRXV>Q5Q{^Nb{=`_Nu`wNd76#g}xi=Fhi} zRS`bb!pGFc>apgD;+zPBK6Ikl``20Dx;kyAJ555)|62m~hl72`7c$*ij|Vf)&+O-x zQ-QT@r)K=t{4t@*&mG7vB_+MrrVs4rN6QV10lL3Ay(MFP6ipa~OzXLcKa-Q*65)=$ zf_iA_9^0mf*{_1HM|gBvXJ=HKzIF50z9DPHKSYLHpj_tt6#y^!u%V{1zIaqE`<%n` z+v>miVePTe)G%a61GT9>gvGQqx=Rh)8cnFri!Y1t6dbI`{C2adX8uah` zWm_b#Yhk22J7SSM{o$?vpD3(x+_dhZ<2!_Zv%)QDjRfP^)`;Ias)Ax|tDS$&?nDc8 zX{-P8*qRR^A8&&9YVe|cn?H?4N!PJY{Gda}K5ZTA==ZC3`hg;Qd5YnyhbWc-Ty3qE z5P+$X6#V{Y=s33v!IR^p?Y zGZ$^rFDGp+(EDh1E)ouMsoHub^6$n)8bSErq7%SjHF{l*hS7WygAU^*po-b0JKlCs zxc3%Rn@{44WZmmjy9dXAZsZOhzsg1cXW#DQql2D;&XV#tp_t0uw~t#=rg9%T@@({% z)^1UEI)v@psrzi^VmHq`Bb5K@=3}EJ=jGIVEV#e9jaBNZg&jaHKQ0701dy#ucAV`n zUb^W-FW6nW#A)oK*nFcIbE+Z#9IC~Qnp)DMwO#L1C*d&+BgrkLI9PseW^X%rDRFHC zbpFF4T+6@NUy}S@UCW3Wa!vs-^&kJ|Vdz3<;7%B$n0t4>ZH{H(AE;F(SRI?1#Pl9R^fI+{=^!GYv zpo%*Mx<*m7B)9nSnaTq3Tq`?>y$|IFNze;8Kj6(amsqZu7UABCgOoUT zzV71iem~B3>V%^}P$(l)dogB-$n;C8HaJ^RxI&_$0}^gK4OO8>dNM^FP>n6GqHRJK z8ZTN@LC8UrK~_2AR}G@#N#Zn;0_jKsMv-o;5eVdN?sZ0ECcH00rtX&=dA8q_ z)x-}Q(ZMm~$ksFiUAzxcn&;CuNbvN1c*ByiYbUKMotu=>d6@j6|8j16r?Fu}rms|F z`Va&f&X%edTv;icaGZ@#d{+yCRaa_!p5Tt>l_Ra!{*u*rn|e>o`SldV3v)e}c89vgyM=sKLp_)tyCU$)&;{ei;SyVQJ({bj5IlpKNSEW zOSwn;6~yA^=*f=E&v;hoEJ!l6zX>pCAs#En{RyTLsikN_D;fC$>hyj z)}>xPdkMz=gp*-K88WPwmtj_aFiKXTZ3Nj2Km`x=mV7tR*JXeX9zWDq=r(pd8ndyZ z+qZo)zSaD6KQRaPB9ieU$S&6G1%2&Rt7scG=yGh4rGc**$TmG_wmKmHxO5YELeR|m6j6*d~idMs-CnW<)n z9V33;!|)%Y!N6IV2n&T#uRbM%XBsUMLZU!O-a05u5$EUA(1FJP3^^^$a^LD^N25Jm zFqZhV;@}tYndn-Xyr2(fl5D6sDV7??nIs!ra^g86S1S8+X1gG7oSGksEf>kp!MrV# z@uwiXzE57ucoY0cUe%d+_##%1&ub~M6IGtCJa}1b+1p(QCok9&kT2^*l|do)K6gYa`-{gEn)h-r zqytpp%h#X(+x1`Mmg|{<{TdK)SC!8JuL(6EBK5Mn;oR+Ich%C5rtf0+=koMl z0vVq;n%ht8c5yuye!c5{HM(Da)-OwrJGiVdS~94N1hsl3-B>e5K4B=#_9KgpzrS8- zktml+Lq@g^#dnnOApD%JrzKP1?FnSqI;RTFTYeLoTJo2elgQIA*uYpaje+s%ubq(m zzUoQkHjl^&pM=fQ<47w3nx-$>_6O(J~bs z<%^cOqHF6iioVq=U3FM%H&-;9qE3GG^yQCn<@@cCQT}J!mw#ckwffnqVfhWea!oIH z<)59EQU0P1<$uH%!7NvPdb<4mzWk}K{FB#als~Awybh?^WSPjjo<+FG8kgMcz@<_` zPdbPT9i)j;uKPpBvJ$DOaPqNaO-(=7Yg*w2-CX_I>H2&6`cHB7*N)Ao|7ShZ^kZ3Z zLcFx{2+6fPRS~>%u>>3TU@bh#$J)tx!wd7rBnE{E#mu2j{9-lV`MgmsSx=`u`nV&S z@9%^2Gb%l*z0$U3_;-`#6noloihbmAifw7xFI)u%8_x1WwdHyXh)Y{W+>QL}iuu?r z;jY{(y@V?hH?tOVvrttvBc=|;kq{fy67SBD*p#92wMT6>iBuQ}Og1799SBX;{Qz-Z zf$7edl73P0f5~GTIp26I=egSOagu&URTl};_JZe7Z~~@-<%`h%0FDVkCna_G#(*<$ zAMgR>Zaxp4(w+L<4sl|gpC30XFwInlsz*ZAp`{y%)(`lBiT;=+IiuzwM z(ik0>swFR0`#=?&AdlJ~rknbV$fd+0vkN!!5z(Q2V##t^e@>t8&?k2`sRCOY^`ors znpMi#cqk}*bH8L1#;Ws;-IMXD)${Fosa-YQPy3|OSo>}k<<;Vr5zHy*uA8{eiA=ZT zGoivQC7A5y$#c;1*_o+hr(CQoH9>~tExM*z=bU^#Vu<>MNh*7{OXO;}IyiWDjhr+W z@)>#3Cgh}-FeNXF47QBYT_d=kxuMDGK{BOH`RO`csR2fUXIxYIDMTs?f0_{Ae z^oK(*gEzNXA}(*k;mcPg5<3VwmYr2%9jnCqDzr-M31GiUT-MjE68)HF!{)(FytTEU zWwlMt*Em!dPRmb(5353bppDCWbOk5zlv^0?{Vc}pN)Lw_2UfXB{iA1WkiIvO zLE7mNH%Pr@aAdCxAw9iE#vo0PRxKhe)~4^jiM6>JR%imnknP>+$aXk$WwMME0C(2& zwlZM{*2GI+EnwQI-9=$Ktp`>n?Nl2J&@N;CXIrK+vA0fB(fi889inXcim7UPr^Z&6 zhi+(v1Ire&GinMil9=Dfw;VIk#DxRD5HS;rQGILnizP>~*y?dQ$39gi4;etFgO&yv zW}L|UCGjJn|L>{npPAUaiTXmZsep5VR@$43b|xbwOUIPQ7ZqqQ)K(%^g>qKyndy$R zd2^&<&r;dLZlp`D{e|n2623!jPQ4(bOFrE@qe~!?fXTmYL(PE7zR>)wWkglha&?r|%jn&8mS_qMX9GAV!dF@6XH>c-TL=U`zP{a~#f@ zbMzhAKDm^ym}b8;szo{-=8c~|PbTJt7*~CFtauyMb!O)<_*C%8YatwK1aka-1=jT+Ux@|Z+)oZmot#Vy& z^-`J0txkkMKmS>OQKa)cVzxeKHtPUDYJ$GomLthCvzGjkoJ}d;EgfQMn{al9rRC4D zBP_3HcaG>5y)D*VaVyh;!%X}6vX{kJVZbu?PzRY4n(XpWqiRgtriT@Y2lX&sy1yZg z=gDn)8~lo07(2}6?3{|kqk0re&TRrjlL3<~{}Jn4l8Wbxg106k~=kGXEfOJ_U4FhoIcWINzWJg#|GO=Id5 z9nZLj?#UjH0)^As1*N6C0SC)y0pSd<^wZFPDd>t>!0k_AQ+NwRLLSx(5FCyb&aLmv zusc`pQ@MHTT>RXqcxhMRBOiFDX0%5e?_^7{ao-GW)j+8TOLmFGQ1Pw+GGtp zzlekRUKwU2l6gEFzmA|Sy#U+Zs<3&LiPe<{uXUz_%VawEOHD~->TK}0!&rTqnpE~p z_ksU@hQE8ZE&d$m-ZnT{f%%|JYZ70?yGX+?p#j+_Nv1Pm zEbD{HlC$$`26LdU$*g#3>;4)62gH(huCfm;w@5HyxER95LTu$Uz0rRv6>!g^js8)~ z5poxV)M5^|e!n?S4u|Zjmabod3XPLlY7RJ9y#OjC%HEB|Cal-=o#^@%@wKc`X}+4^Tu$r$DV+k~uoy zGS_TdL)~>c6A>P>LMAwJK_@vsIr(I&!E^ybaV-Xz{zGwn81-ILW*@`O0psw5v6?#d z8Jb2JdV3V}Z=rx-qQ`&1_W5?l6eHi+~( z2t-!b{;hS_*ve;w2xB^unoO@6zPX-{(GVRBV{Gw>G5Ay@t&dZWBvvAsR=38

9bhSav?NBl`w7;rJqv0{ige{2dc6G)6}j+%ZQFuo2>zRENO7 z)z~w6yI6~q9Bt~#gpaA;FyA`-m22pzkMDAQU8oOIx#v8bF)YXLN?$uOFGZ!u8~+CP zyYjPD{&&9oA+G#$vogw`(4qXb>GGpo`Qa*moiFbb6Fru>BK>Tabp2+dCOFOPZ#`Z4 zeN_H9U*4~17vyFz+W(}>$5JCZRg|oryibhG=!g_n5WQHamAqX0_tw0a3oA{_cf}9Q zYND?CMUu)aCKCF)An`nxX!7ngV#bo^r<^KBE2V6Y_A!qztxA}3e)y<5vh+eO5dL13 zfqFJ5FZn%$PZQKcV|drQd@8+PdK4oDY( zz+XX6566qzE(jJkW*uyfO_@_iNctkRz>7AyOBnM3~Z`@hLM)#b+-t2q)s z#>g%5)9@}%CPkSw3dF$lEi669T8jeUR{Dum#y>yx^XW}y@m2bGSBP~LhMcneSaOE? zIhM4v87$+P1xA_VSGTQm{uf^({v@MaUE`>0zUmSrU2!U|CgIGu;(GSJNXiXXj@q0- zBa57zQcql7M*Pd2kS&#)b4dD#TnAD9RLWAT=%D4Ym&xZOm0fTkE9VU-$jT;2@-IY+ zrzgU+A0NInJ@(@(>UBKmFhyOfCLw(tKGm>XPI#EE8e){1`gBfbwbXBzrn37`ABMi( z^*Um=8x0fvzV7KD&oHVeVG@SM(e2d0#%tl$9F8E&n(ecf7Xg{#wE5JF=zCAQc8t9L zugq1-sW=hrI6MmfJT}un;nABz6oN^<{(1xKb3u&=A)1Xjvwmw?BBTCE;;#c6tU!>t#W1x^^gT^9GN$Bjd!eU$4QIs<$Jv${=t8<*Wt7}=V$}hlr%<$33ZK*C0>a^x{xHkk7Dv0 zsz?>ewDZ0*?R>F^V4tXEkVXpKv?2u(2j2}hhoyZj?fv4u_0H7a;`mNy$5DSq7VN&n z2+M+{UiG0cMCB1VA{hLl26MCAMO{ZWw#w!pS-=d!p|tJwpHl!^@oyYzZa*BAdcSaS zG;7g8z}ub@!M=k$lc*yF!`LX<@0;M=p9xQRs*k}F58Ply%;41y5uO^8!MuHnnE-yX zJCt;(1vK(oahh@FIxn(=?+viNbCb(dLG{)X-$c5giHB0Q7}t&lZaRMXHyUU5*ng9z z%T5bveBZzGa%lizMK;M_r2?t!OD}cv^Q4rU3VI8zRPJGeGUn&D{~e^QvJm&B9(Qe2 zgdnRZ7VNik9B61xaQ9K6j`|U+#SS~D@_%h~lf!B(wSIEYz>+xJqH9u{r+wsqOSMs) zmDXv;kxVqn(kTg9<91D+lh;xzJ1@S@Z1dza%XZd4SsrOAb{Ku-wpLO-Rxdprg^8qT zuNrI!-e4S~s^q{`kvu!6GT9iVh~%HFcB4_kYI@4;H_G%NBFa zIqo{6ocjrX8T~pj^;VFHxgxm-E_GueK)m#!T^S0>--uJ)Xr2Ve_tV;G580qA5;OG3 zN$H0BxutZTsdB^Y2ML{ZdIds9gX^25wB9p&BShU`kwBIZlPq4SYqAXS8ztbrDks+V zbY(KXvSjV}YxH@eeTE)DmgVO{@%zFIB;OVPaN<{AIAi)NyLj>2Ik>9ai(kuU6ynHH zNvP|Vs^7+FMvr3T%^8yFx{iO#D^q0)h_7s1`#z6P%3}@p79v~xPr8%(Idl@CbhUfePb%V7f>#z!_>qb%#j zvI4YnNFRmt%PNz36(!G&zqpjuqr6N*I%{L9yfz_1rj~DwHjLD52o z>U#B9flB4B`#eKh58aZ{t4mZ=^TQ-px<;jM_oYvErMqY5tlK-Yw6}fx@!v3s@9S^G zf05AAVZ|IQSH{6|NMu|S6W5Q3m)_Myy_m-$EE*hry1MaHHv`@nZN<1WsZUnTsm@8` zqerbR?_B^kojf)dIBfc7o=i0Ti;TATDKy|a!a}a)5mlu1T;P0>q$(E8B!pGxGn zoJY{RCXU-iL666#J9>C4MD4$JIB^`RwuO_>zLeK);lWQwm%StZ$y3Z^dweW4)SGM( zyBmdjDtq^7Sg0gW6^i>~Chr8^Hh%>DWy|EWf- zy-o#qH$w$r)I{C60{Pt5*ReF?6f<-Jdr^%}5G6hZ`(>n|hdok6M(M1nP9q>9<4oK6 z9pn;;L>e9y`V70>KM)Igwe7#k4J5o+_%WLf9bw^=??zMeY?1ljBnGO@4f!4LZo@5H zD{oR0m?KoNWeCDPcRz_F^~}9{!0n4MpZmgVkb=P%vQgn)bv+vctDiLeM-j&vhgQ~J z9xq+fmU7B1f{4=EGjw-Iw-LdxQ#7vGGn9B9NqgmwHb}1Hk%micX>RmCran#o$$A>@ z@_BsH_4}OD?zk&Ud!8IR8mCaWy&T}KjpUkav|gJlH6UJktT3zruf`etcKXYb5~&^L zCWvmL=MqCessd6OF4M5)+Eyc-&kOc9qVhpJhE1Sx_Ejf2&OWGt0h;EEw9kk>T1Rc(C%u z47g5J`xD!hjIqOkpb5$gm;W&kptQ3i5((2r~{G&o|k+!Wsk^$)2hdmyjJ^h>#ot2 zE3|0>Ek{3W|bdV(2qCX=Z!s(`^#pNTS*N{Svzz8e9ZSVB&=1NgFb#54f7l%}8Z22{dfz-frUt=ugkGew`%j2w zEjdI5BY$^oGr^K3$=BkqG&%4lnq%ZJ`e+MC{8yR0lvT^s=whRAODp8e!E3MrUQY^iRU8oLyXXi*9IH@qDD2>LPG~CvS3(e%|Ak7Oyaz;8B)MutP!uIOxQ44 z5oC|NDed)XJ4lR(9AON92lkaGji%?|qX!`kqrts#ng8@Png7JD8JYi%*&}B2^Zf^Q zO#Wxeaw_}b;hMh7@PD1+W}-D#-17f@?d6zDwWIuhwnyTAX2wb!^l@hYcj&|ZLNx3{ zI;o}rt0=KAzrNR81fvu78Bu6!=I4LB+?6?2>nBzt3@Ec-tu$Hd(%NA#1a`15#P5N z{iuwH2xf1GO5H?e^dFb~Kh(VmcvMC9KAa$th+qc+jp7nCqacC-S%Mf0dj}E>ix@%2 z3?d?K2mvFY1d>3SrZp&z2#m%ZcibQ%Isq9(Kn2_o9F4f$HjaXhtPc6V@2RTW_jb~q z1pWDZAJ0Sj-nvzFPM!0fQ+t(?qoIEfhHZKzlvd5JB^T$u3Okn*nM;;47h~L*xthXR zVrCe;o=-9=F#A+9DzG0LBWkn^Q~<{ZEY&y|g?^wOA5gV|*~BDRD}esRH#c1Y&CyEl z7eq*xyY*$ys9F!Vl&clenB78EvmlwtGW-whfh02gKGu6U_KahJtl-ce%C~mT!I%|V zUz2z+Ikso+tHN;?ayWU_Xck0jD`ulS`0>j?J`nfy)26eH@91n>7hWWQBIk~NwtB7i zx<(x9^h$CWvQSqT+?mh$k-X6v{v23h^F8^r#1;em=?TG)qzFaH1&I8*nBL^2!q^SN zP!Y_Xp`2n{d__fY?s!KxqUjG}6q-@&F690Q_Mz8eeoe1MyjgNrlEh7!Bx1&fISh(1 z`DV$yaX6m0VkSTw_hI&pYf!JZ$Az!K7AspBn2;tXn5D)~VcNj`tf(=v@JI>XtsR|p zkNg@SeGY@_MYFA<*(F5tr^Xx$mlYv;AUfM-fs37;1JMN_gJQpi`Uv;a@Z2Ttbh{A% zVG{YO#}~^GqxNe+6|48KY`6xLWy3h;@%wNM=*f6i?Uym#bk@81xt6Rkq?!~q6#B)l zItz9U0AoFFnQfh*GE+BPmq~_w;lP&^$fK%ptaoNNf{b_n3K^^OgOn9ifr@&!4A%}%0K)UNdFvd6noIXofbVKN^Oy%vE_7@V%m}mBYd}d%N#lzC;o{n( z+v&_hmhY{swp+QfDVj#9aN zEiJ1LbxR%jqDNRlXMpAKT1I&XrJU96-&8NB2-;7SwUrVnKEdh2@CMN<+ zc*belzWgL4!sgnKe_?`n>rxY!Thi6|8k$&Mb#Tv&RXVcO%8K=vQDku(?% z%}?hBM0BvOf6aBiKh`hC(rO@}6)Z94m!F3ej$u&{wp^s32K9SL<PLZ)(@rMVj=O!mCsV6&vv|ah-_sto*IwQ=NFhn+U;qD zxs{peJCfD*r;N4VH6G%hd2zfKYlgg;fjeV4K2gnP-y*$^Ff_BwN#%!bMU&~&9<*s$ zSg2xU_|}uBQm}*bQR3j{E>6hwKP!dF^52o2;Xjk7?%>ARS@ESfH^+bacmMLE{Am_{ ze8@}?qj9o{WmVpj>^ssE+GrRdGx`NgKG>%v3 z4}pxq+>O1oyf1u{>b7Fg*Q{#x6upHk^vdQRCQ%2nvRTpxzm)7}vW~#XpL}uZrPSJm zL(N(Ie3?SWH^xDCfHQrL?m)AFxO)2T6WJG#Ic!zcK!!`bXwR&aox^g#8G8W7vJh&T zt^nDf2QalgefxrBzB+pVr++1l9i>!tXTkhdw8Cvzge~}&{xihwiDtjGELXlnmMf!u z_8;p16{Y_`+?HFQ@^iaU<)$I3z8S${-EwdW;4f>IF~4*jO(781YFBTRze^>?Ivn+1 ztki$$j{46gbT$Y{{nu5|szk|&jEy3J3TlC_H#i%09je0Egy3y>%EZa5fzzwG)dOpC zeV^d0H0ySDXX}zchHrajTb!l8n;X3oz}Bw3jEul=>Gpg@XHY@@-qoNf%JTyJ^b!8bOsaxF(^xJ*n>ZrXXAI7L_uSj zfNaxen+y-Ajc@;fU~Ixq`BlxWs&mLYo=v5^NG~u5)gV~UD((3STm)g-^J9b&))FUj zQ;Ml2U_b1r^5B8;ajA23DRPKmZ#0F{rtB&>Pkb%`_(@&L~xYdkPX%kpLU7qfg>ez|as1G@!y zMFk&m;RnB?{Ic+aIRF-F;m2}3a9&a5g<%W|jI&u~_+={`P7w_!Og!V5On;+{o;#)t zAaW+5Yh@t#)|>r)^a$ zHU>zNGl(?S6DKp*$*kpd@nkKLZUfbOZHBJEHi9C1pgYul3-#*qDymhD{TBVWKJ{y^ zPh~e(Cg5>C=?(B;*QO}1LWOXB2hd!>YBMKzxoKJlv+S1j{Y_2F`lj$b)U?kMWuLEM zyja^O(NK_|fcnouXH|8_QB{VmykZpIJSZ;#ouq*uo4 zF){5Add_JSg8>-Nf>mU*5c737s#50Khxhl7k@E=#aQ|AL!o$^hm#D$RAq!v+7?kU) z$Ct+3h>~K=R8Pad|CXbx{KaQddyw0!-sUKr;{o8?H0dr~om zJbS%j&-Efh6}o;`Igez{x9FVp?BXMzI?DRXE=O5$dQWE0;2q7d)@chC!=H)enrJ3t zAv})P-T-^T`CFta`df+jEdSMsS%GV+GYWre=_y=;5C|#*RX}N0&(Az_pI{Og8l3_M zO4az`NMPUJx(#9t^sH=ksuvr7^O-3oG3FlHhpGS;mf^oVQ6Je$ zN;MjU&)F&3r)8r@bnmzH@>mL|Zg}U)Aa6U?zirwQ`zqAlbER7^zMOV!lqim`$oBHW zYYY=&FU{!-O2D1}7_V<9_tIb%(3)KGJ?8j4t1B;=auU2njCbw#XJ(Wa%zE*Y<|yjm zz-f)Vt7DG4xdeN;s=cv0=`IWKA;VW%jvsn(inYIgaN_~Kk_rTI_=}`73U5z}$!l6T zJ+&G)>aL?Ew+|@cLd)Upu>KIG9G;Y=ZvDzKw|+hL4SiZm_+a`Et9z1kGP7`21L!db z8|sr-ze~rqJ*ePrI67TV5lI8*8zhf5~inlAYzN%a@Pb1@?X;%0*c>fc+G zTb5MNGd~`sXI6%aoCiGsW88fm@7?G{vaY7=(`OJ+3z7>!NSd;yPl3*z2Ix6CANdx*L=}M%1xz?tPc_!wp0!j$@Kg*;huUM|PjbHLByszNKcp}NX;r1O z0Rg^v;3Bd$hvW(YIf;>722`3OljGF|-RCkO-Rr{$Li|@+zkT94KYBX#i+M{f=fO6t z!u2Vv{S3Fxym7#z^}{hv=9ww_%H~+d;856>y98=~#biKRmtm3&uV8T)Y=@f&F`U!$ zZBOwNg8IT#)L#qnh*~H`+P|LSvyhg~uRzprCD#*R_$Bs`x92B!{uQEL-3ws&=vw9T z+b~j~`Qm2EGY6Vq`7!;39+31kElg{=o2751I&kS&A9$LhP1P4NfIAT);IJScHR4#C zUUt$Qmw{jg369eQ^|aaarmB(&G_U$7jNk)bl3)Tx0^+SsikLpb8$HOF;G^W2ds|Ve z%s^wDMB&9cp|w-ar`t|Nn;Ofayn${Xo{5cl?{8EMr&Nj@w*jujjFoUJmrBb5JnAbY zBha`7HsneF;jliv8EN#I3EwEFOpY@hl~kB^s1od{=C`*B>+XjpSS4+!V>Hmw1Xrw% zN|5TYaQ!4;BY=LS?U&dAN-Y3ef#!RYc&>$XGG){sw;KXqZPdpP^~YR7i*2^cmt#1j zy{HRG{wWPk-w~@>%O7Bx6;tI-tuJ~)(ub~5s#S5DpNVu{vjP3i4S?v6(>Tl4wNjX!~n}c;0MXF$R?>+HO!0K3IeK zTDU&JX(iT2hKSg7)l)VZh5xyLw5Ab{YMKl7VsHuvf1rC9-ND9p9NT$2rfR+HZuuwS zpvVosd42oslNlT1s73^E1${my44QQ*OiTZQz(Tt@#rpUZf*5-?xcDGmoneE4)gByQ zdB-zX#up0@#(L)dOp1jE8+qn_jwj#`FUNT1Zo!McsplPNud&of4{6RyZPqFp!rJ4X z+pP6+u~yEabIkW_D0$il@K<;scG^JvZ8QyAbPgOdEk*cfmdr?}!M!y0uKhB}-zr%y znLEB5f~3af=w|h6-43I&^7!W#{+Y->*W!;yjnD9P6#opvAEzH~TTN@CqZ2 zwb>6`f0GE@s3!Q6m?;uH&i+9zSb$q%ueoGdaz2}A0kxkL#&Hq;Pfy^VB>urjYm4dW z{NqK_uLNa4MgJCE-gv+PE4I9aYh*Vm+~0U{e`}I+SyY@qb|z@DvEs#hMqx#x49Mz^ zp|GH}-8p~1E7#@u9&BPf-`H)i4UD#@Fh4Mw%3tK8ZoW~R@-iZFUa%%Phvf3mKo3!( z|H$mAwsGIV!}l)*MQfras6AhSZeGLwx7JNC$g;C`X0OH2!qJ;JlL42sF$_y22e3uM zY8kgAa*3q)hCsJ%r@{qpd5gYAanJOOhE;8st+j=`_!Yq5&deT%qogCucTVPK8Acy8sDbOE)?&fG`qDdIkBUc|HszoOV1 zG2Yxi`6djO+uEH#x_HgSFYV7$+yRTBjU-(9{jw|ddzkxw(ZA9)+naGlzjNNNTiiw# z_0;bzplHq41hsz4jxjY`i+T|JJ^J072>t%Bwjuhxu`d1od#uuLI?WTP^2)DMzx-l- zJUX&|3(7Y_Rj}6&w0bui^-dJ^-f*@9t3}nep{Rj{Why;h<+#5rQiSkRp~cH>o>KAe)+}P zmlI9DiDHYgQHtjKhSBeY>R5+rX|W;8Egssj7PV%ji+MlWd%jb8L-Lo_;}E{$#;tu&gXHQKI* zM)}1`zC4;nS=Yh4Vt&R`g!`GrD<6wr@yg@HY_G$m!M0bP=+^Dk7|e2tT&i5^cIX8V z_w`q}bbEe`5%->VjzYKBI|((N~kH>0udl#8u^cRNA>*5xh*Jac4_#``TB zk3saSJ~e>Y?~(t`7Lfl(s~aT$aZ%-8P%e!w003x)8%|fD{GWXH3|PSs`+rkQK;soT2*s7RP(P6 z9DasUQbc(D(fjNON(h__B`hE2Qo;=fj1n$b zcN9v9Y#&J^)=Lx9_AzXqk^j22^(Xdw&vvP1E7pRlrtBh&q}SJ**!FQ*2vwV=g$VQcd}d>{o-e%(d>E<`#t(hiHANryx0(Z=G3LnH5p2uFADy2t9!Gq{<6~URYYB+?CLUvg zui&rP^(e9H%i|o%AB}Ggo4)V#2+BX>Ea;Va=8_y5Nf%|FChq%X3sw`G< zkEV|A_jZ5pk)|<0-rLUc*%Cqk%{%dba5x1ZDR3DnaJj6h11|Tw;W7eanVekrA~>UP zEk?8tHoD_l=KRxND7)27>z;h$7J9+3nv+0!w1OuHe#-xMCKqFs28`4O4AvjjflvoIh{c0ILoLQlVrnMAI>CqRzF?l5F^7C8q zI3CKIW8rEHT(JUrpY~NQW)JAI$~Yju&MJdntd|Bv#vq3lD1H{YKz^0Du|5|&Pxk_n zoKuGjnt_}E#-TV5p%yIO!jgagOsM41u-F_GRC-LXy>P4cuCZ_=M0~Oe6Fd$VJdSYI zU14}!kx0&!nlcL40gs0i9zYcWa@%SGM9%rtK!h{=-Do^f+BoMIN2zY!}<8e3fxJ={G%JhAO zt&aweSHwaqBcBdwCA<)3lVyhQU$T<=GbbJ?1yg#qV1~o><(&={J*M%f+43n?fX8>z z6dtjXNbqRMuM>~_Vx845Ivz>bh}m!qAjYHY0OBlULHq!WnHr2e+>UW~%*9xrWsP|% zRPbnU>=F~~fIJC73l!)YE6D+%n1FDBVzxkWSQpzh@_wN(FeaQtwnJF3!MOcY;NU;~ zU0_^MWx$yCY7`s*Y~-ajFp@V)i9FW>j9Fx2f@VT@Y3>XfF#hyP6ej){Fm5^0E5>^J z$&gN{T4y1mf{{{if-$>JFs?~eVB88h(K+srUndy(#kwy&Iv7dVh}m!qFwzhK#@mnu zfH=5zuXqKE{NWR!B1eN^g7S!j;SSOS%UsM%IBvzez;LL*@KUTXum`}yKzLir2q4T# zr2hN5K-eK@K={*3QS=Xxk%QVmNDe6-a$FA(Zaf)Ge8qjim|@W%Jov2v;lyZ6{4pRL z^cytN_wkTMs8VMkqJof8aDs4XognOiB>?QyRfr~WG@txBLC7ywLhtAxBw-_F!!bZO zL4i=W6C;4|!^0@@rH_S*91VmWVuGE7MSV0MKp2B}g0ccU2naI;gjpRNAY2AU_^L+= zzDS4w!i}w||4UpTeBxUJ!ig)QgK#4_s11a|AwWnD4G3|5*ELROY*);j4C(_mP(Nrs zG!Ae5+Td{a3sLycIK=pYYAYUX-TcNusHGeW3{8osS7%A0B9WqSA~Ca0BzDBoXCiTh zs23Z^5zr1Hz~N3ynPX zkB~;FQfDEef{;>hg3wzh2p?#xKv=3lxVQ!g`Nf*tJvs;l5L(QJV}P(6(nk~VPGk|e ziP)V*esNi-$k9O9Q4Qj-Nw^q!6NIJmivwvuOh7nLKsczQ1B4Iao1=D)KQ00Y&pUzo zPj!JX{tE-bEz6_mAEhTpwSkbF5rpK_1|i1xLoU$V{td3Z~#O>C^vz4xn&ds{<%ojwMT>%W#|3q{El_2}t0HnyN;VBzHd9?zFy9&mE30XfsgL{!f_*uBq;HOcojJSs( zDLW_O-`U!G|0ken(_%N8ocTvZ6D8wBQ~x^ARE=X;SiR;#+jJ9?@Jm(Z%X?As1bKH> zw~T3(bdG|q!t$+9JUrSO{0M~l3WWN#cR*;Y8$#0>)A&ORlkLf+H;)5UKE2Qdm1R2( zRB|7S0u^oHMj$pM#ySZ(<`-oBGs#WVkMj`p0(0LsTrGtCaoEbx zpE10M!H*O0n}K7c=RJ=6=*ZLMgX;HWwO@zpM>F>C%vgKqlB~AtGVva}P3AM?q^f>Q zgGsAWq_HQhICF*5cw6N2wBP)6{_$cv!J6a>#G+H`6D#Yh+cGh>bmZ&3$P45eRp?u4 z*1Q>X0n5o<^*UA|EAV*7czA%ZP1OB|o!$2Tu~B!UN0hqB6i0^GS_}<*V(+C9l;NDE zZih%bLOnmYgnkMkq-R*j3XF~Am@IoAnLWRpa(QTufMc>|6ZOU_0O74g0D_;ptF>T4 z+3R@)l93@d93#`W0UM~WIWHIV^^r2Z z_Yun7JtoxZ`8`c4?&n}H6#MiJKFqg0G4b1KtE~#(slr<_{4Rte>f0(PhCwq_&?_qF zKP3p7pn@J&K|2|AnF_i~1-;FnzA9*j3VMY>7pR~KD(GPZVSTs?8>zwqj25qg`lz7k z4EptYVXTu1x{g7+RZtrhG?GE@tDtxl)CWPO*6S+lzm}A~Bcm->L0_t%QyFxh3VKfk zHDS;k74*6a`tLjh-J*h)tDr9tgz*s-wn&A&%V=H|G+PC&W>7a3bh8S2l0j#wpfM_F z5raG`$g6^8BMAE=CP>M4*c)aIoY!9vwd% zo5!$q4|io`CU^46md1MkShc0G_+eUv+~U2q5&V6;!Q&oKzw3OLvwLitadxf4>A$r+L_enneIYIDM}l(7pzLqV!T!b}m~)zd{f+NT$>27- z^h_Tdo4v#5r*GldzQ3F5ip0M-G}-GTqJWRXwyIS#lRJ$c;G4;5CESAK^I~7)S!597 zcPDW}Wq;qN)=Rs;#o;g=c%Nw>+zM^xa~ zvB!vUtl=u1ANbHa_I08He6c zTY7&Z3}AFT>S65UmG$?Tue1qaC-0@8G>ep$w0B{C#d`+xZC#YMKQ5GH8}D_B zlG(-^TqYXwCe^WrHvuBGjt^*fhwtI#)>-WL&4kTDL}m}K)$2PIKZVDLKyYgFE>z0R zyJ=*Kn|G0ln|B8$Sew6Ke7wtkP;TlTiiw`}*`m}Fz7nMlnggY-yT(@PZT~V#?HIlZ zvNrwVXgr>u0~K@rGMauT@fMJFw%C<^k2?aXC%1Fy_q+FuexF(F)bEv#h4j1k^M>m8 zq5px>>T_NC-MYo-w~vd`&yR-mJ5Nz+sD4v+L%$vT4b$(KZ=&e;Dl+BPZ`Hq}=(p3C zqTlNZpx@npv-NvFH%+nz3`Wqe<+NWhP@I2=x&>D{p${-~I-g_Z|k#=l|lu!um}H3*B5azkN7Fb4Fb>gE%iA z=YrAtS;LJ$4VRO^OIG^O%cbC=a(%-Jy)FE6(@LNu&Zo4l*v8>=vXEydl?3-JWkOoi zY~!S6OUCUwI37SMwhUoTsx_<|vUcsFOxmzo!%Cn`9B>)D0u0$E-{uQ}#K=1ViTAIz zAyLGAmI8@Gwd{(ww?A)D_Rl-SjDIhf9*oOuk9V;hR+@X_h# z)5HBh4m1*bs5jbgZIWFu_DFc?u5Qi-**CJbDT{%Y-U(7y8a)V}`SgVg`o zZvAhx_3t9~?L$ILeEkeX%=QIk5qy0Lt5*2$jq1FH`Ipax^0!}QD}UZUwem6l*e2ZLhjh;;>VMiqt$Va# zS3HARu)>qs2Lim^ zGXu?UM`G5yqCvDs>G4=3yJ0soImLSA3^ucvws3 zzl=?NS?Z*8kD??tb*`dh+f+T3>UW*pvU`DE9Q; zr(#b{ZihY18ExBB5AKc>XBwe?eLjTGT;g*QTqp6#(G46pw3Yb0Q&|a+m*O9l2s=pz zL;+JY-~8RZ0hp9)Fa}jk>sf+aaXakl0mIoyhq^ism++{@J?^(8a6uAXrDQ8`l7evx zV2lcjW~pF22{88DeLK&_DqNqd?GXOc8uPj-Tj$!4T%&!MUXS)ax*=Dx+QvD{Xdl8K z*a!MZ`~Mf9s__{v{Jy>3;MaebLKX60`+rFYzuP{n4Znhu6loaL!0#+lT5`IpPFS(d z;J2-d()I_0l4}1eO7+8UJG)Lu*unPyY=vJqArw7yh7UX_To84LN(4veWT-QItX`L*9W)L2U3a;S-`lu*F*1Iq4b;9B zx}D5sArLtn_`@8V@|;Q1V5F3|F#ER zq>aH!!`b%ae0cP>=L{MaWQq2bH_={W&bFt2FLeGy8yC8+UuV$Oae>okeSUukT~lyq zrQ@7m8Dv5JR82~#?P-s!$hZpIooz_3yQZgoWM+lI*c*N)y_+5Mj;V`Y@W*KFPJn2K zyWM%uM?hcTPK74La?N%p$^*-+wcWYx?-YjJ?!0Cj<>6{~Ugd0eKKh|R?XxL>+U1wo zP;17GngX>(((sV>MOUqRcmlY^K(|4_6@etp1vi?`KUvUZ&M3q9C3hAw!>U(Y4Fmn6 z{FAf&s$B09jv=dttDGLL8m>NpP5)##X=zZd<{UwI+m$F9@KbL!zG00y#Ra7^Dh!l% zV|1A4KwfZE_udzRQoF4+p;Tx4^@AUQqaPDpzN+z?21ip}#LiK~#8f68~+h3XSiZX0_4IOtVyO$KNn2W=j7nLpd@0< zE48?$hl>2JeS%wjpl8m3uZ$ny+oXExSvWj7%b$y@kR~KbuN~{&cFfBoG#pSA~zUPc6ifUUxlEwV8^#2_m`fATcVW{C0{4Wh;H-CRS^*hm zx!{0CCU@dQS$3vh=z6#KGPS7FJh*g^yah45MnbF^nt2S!gOO;7-ZOIDRi3 z=l|jSOS!*;N2kg8f3*@1;u=_B&h+v*j-8)?_7R7&alR%x>vD~?J(Qii)%5>vSN0R7 zV7R3k>vcFPtMG!%xcu#W+`HcO%+QE-_Cg8|SNl#%$i#T|ZcJ-r@gm77==ftiJ3k@# zI8PLwy`Jck>i*34#e8yZhWUJOsck+b+@eVH0sp~XQM>=T|L^FZq@#V8P{;T#nklM% zmsnf-?zr!vu;f-Q%zU@nVCESNI1|#UeRpMP2rzp$)dY-?K|8AU_T584P+Hy61&yux zQnx_!J}yc>-z}8HXU{o-}Pxo1@BrtoCy-=#94 z6Jh-5^G$-MlP3aC_YAS|H0U{vr$46tg^u+!RFak1JPcpExDk@hDjL3iLl&<70~>j$ zbaN4|26X)QOb{qxq!>Mk<1mV???>TS_9OUIYkvawKYgU@#3D(~-kGigReF0&`@(O4 zkD(qH7+b6~VEky76CZQ^AuzVtP!o)xLgYHev?m*?Qtgd{1-$h&Edb}=oZxbAdtWw? z9P1+4(m`@LrhCHi?;;ueceJhrYPztlMUQvj__|D1Ks|~f?P>EV54&p-FZ{W>7Maej zg?FQ%a`tsH|L?V7x#DRJl^`yn)Mt6tr+?vU|1}N6-x!l=Wc*E=p|R%}AN9YKPQdu@ z@#3dyD4TUj(l_SVql`Po{SC0UJI?9+=pJ(HLss;VBYND-K#kSpaLDmF887AiVz3SC z)u&9+Z*Y&&)bzjXTH_ujEOjX>48&x32JEPN{5~PP55)2NKD#-7Kc<-r@@KqkAio=f z&LRJMZ%GL9?Jyk`j=wtn?+0JPzJ5I31@^`-8n91w5j#f_Q~jTHLad?wciaZk|G7oM zy1xF`FZFW-{~MTB!~eDcf06q?{}QC%KaTyMfi}=(|08|kALD;r_-_)9|0gxFBIDmP zH~Ga7$kP!zc@s)U0oy_>VH?g1^@ffjS8qo;eYoPkvZG{mSB1) zY-q>je>biZRK|{_|DDm#hGoj*8Y;iT|7OO8;cplB93E}`Z)q3nHK+Rj-{J4Vf3yB? z;=*5x=MDZoy3GlOxp2H@@m3qm799=#-ug_}|Hryq;@)Qr{>HjUwseqO{ze@n8;ZXk zYgzwKJZk(+o8!V?yzm#L{;yE=|J73er`z~j!F`Z~%J0D6mPTRt8)Gs(8vn=syzzf! zc>cfie>>^_8oThf@EL=@%ceTJI_h--hvRx zc6E_#DE?NxN&k1uuvNrL1=RdFIwK{+z(UzB>EA zi83TuOaFHVrH{=w)~-e_l|T5DQTbSmyoc(amQqBuUUWHTV8T^iXZvdeC|WmbVy6H5 zq*3;-lbyt#xKorZ?XO;nSVP-iU#~I!-)ogx>)ZZ19+fMLjk$!H^S#ZB--~TU4|-55x_<4iTJ?W`&7nH=9}`LcAKUtmaqIs{TmKj|cj*6)ko_&k z98AOY4~o{!nwZi5-`cfQ(~4IA)Z$-~>V>a%(kQR#U#|Vo;A_T_ zFPtZt_kP^qtI;h^mA^bagfH)_M}e(8M&pk{>nrx(`FxAutbA#Kgbs!u$-t z+)#WKm1}&>z%ohZTwnk43@WdP_}L<*Q!y#SC>>9U*A2@Abi#8 zU$(NjQKx^|A&rt+^uOKK|8H*nKWgj$CZ|eX&Ufhl<)hL6HtJs!Gx~qn);~tH9r{Tvk=F#YXrO`juL^eqOsLvwn|F)X?2Y(Ukmpflo`X5RCcMs|R{s!s4A^zou{bBxP zhN0C!{~}vt>cm%h1boG9HTY_C$c3-Z%M89A!Ju1Ya{0v4;AWxy7rpt@6EmtSFqS!sr}e+|E)@LkeixcbA2ethIl+mhxV#XWmf-Bm@YWD=mth|q z{v$Lpd!{GdF$zSoNMwR0qEU3`GJ~R@Fd`j-Y}pizqRH`AH$_BU(4}vg0}-5$m=~H< z?uX5v>hibFdPaF8789FYpW9zVC+A%(IutaSg<}*3rpZ&drSpP5C0$R+^rd6gl{=u4 z4E;$7)~lGY$x;`DVL}-fh;_S0EE5X_*(dcnR^z5y8-EcUsx2eCRtSVzWdlNYceWwa z|6UED;6<{Ir?#~>3{&IJABE``Q!@piuZE#dxyd;UE$bw>8b{5qc#4ZdN|#Q`YPGn+ zU1xFK;ES7~n=QY(0C4v*1Ar0Zow{i}IRtdbt3Ip^Lkd3+Lr6N0M6bWJ5|GIB7g+dtjn1d)lnmdtEPqD);6StEynzf{+p`X? zVI#&T=pAxSE&ec3$cYUJSOZ=&NvG&2dO4Urv=29bzKAef+{c)9;jZ#a5uEFsf zQjXa_ES8?#GW#Sg9$i!vQv0PI5H33{>s&ZTRCeCf)wr;K_&gZu7{3QOtg5Zku>i4F8a3@Nscta)rZwMz<3}pTa^)8l!A1yy6H$3F1g&lBV+A>OZpU6Hp+-SfQ8FPxB;E1 zc_sxTk{lDV$e>Z3cOINa5uW*0;hFpGsd&IegPysc;K{S9$N04y;>Y_YCn9dTXVHeL zI63kEHw4?ZwvY8?2fYKf&uNmk?K)UmAYK_Ik|L`K1( zr&xFk3{J%*!K&D@+}671;IGw16?yqy9Oj)!LEs-WtM>8RQAI+51rkI2!x)vUJ0U~p zAj$1Hg=t^iNEkNr`iEs(IhX>%RiId*cJp-spkP?`hS`a*y_l+GY_^}hele2KBJ4+8 zB%8w(T!Y8^M&=yhnG8v!>nUo2RJ`#JC$4c_7(;;ooVMFU3zu8|$-Eq9fL|=#1q2+z zZIl(e7S;_2sN_5$foBj93QSmz|1^39Gv0p*{ePBd^uHNTeLSlY#;;um0FcAkhpOQL zRe@qr++45!iX6GYzE3v%hqvcWPvQBnWG@cHWtmZRZhRWPxF41y%0UGn2!qKjOj~gS zMaChvY-<3H>kQQ?Sj)66_#IrMQ$~erCxmHmE86Bo;QUpRfzSwX2yHQ6q11Ac$3IbO z1zu_>l`*XOl1tubJBO**>Z;CaK}v_&djn`ZxPlVBuNCNjbdb5+0-ulaSu4>u<;x_z zxRfqD*?M;sPankLDf&xOrF5M5$YN}D7GnpC!F}!gB@mA7ybnf}LEB^AbO{^f+uKJn zdAlQ5oNze(b!INjzNd^O% zh~p{BgI}bam|9vxURVivwR-MTY8fsu;x@h98xfbO!*2qa$(dI9uFtCrxP&rU#aLb= z#;7kpuig*?cqtq6`WL1WHvR|X+>GkCy#Cn)F~G)s@ix$|UJjt`%yt58J`)zE^}n82 zgR6Ln>8y_*6}YM9}iOZVu{C z?<$mdJXVkv9ft?tUqXvJ0lR3D4-^HK;ERnzX|6$mqR8UyQ_t^5S zI!c><3RUC3o&`erPgnz>19=z0Gk}<6D$W*njnf2$$LA(VMdy3xY ztEN;M{5nB+PVmfIiLYR{dEO}eP4E<-LZ%^@Bqz;wwb5h@>*t?UL1t)bjLG|L&-Q@- z@eHJoLm2-F{}p(s!9QbIPav-l|6O&Cj1T_*;^P0|=EC)fQ(JGCO+40zc==iQkI0# z_>UEn6WeTvqI>t^4*52_5GosnHtgIIG>bZn7U;ujslP+ugY?M8M*+P}v(K3OtW z&YDaF?%S;V3mWg9BDsIP=Vq_(J+CM87jMr4dF{B|56!~EUf*6T2er4Ge=Y^r>3i<= z6t89Bp?gw-vR&^Dox_*yC_1EMqW4tr{HWEetuyxI!<;%*OgCd@f=eF}G@GqH)COlpnEd2$&e zvQtrpUui|kxtDTU8=E2zBUrT}@8OewegYWt`h`E~HOz@Y02UL+8vT9hDZCi{2lAaf z)N~;Re0(vyPk(^%FqZW>aLeop)2_W*Yzo6<%+1=5`5?PDAwk%qg4|I52P@s(3hM^g zpEVwThWf@O#uGKP0eFnpF$%$po+cniu#Bfk@}&J(K3*tB#;zenS`(#6bB-!Srlu4b zQ4X)euaV-^CZgafw6`J1RL}$eN|xu~1>Le1s!6^`c$6B1gzcst`L&+;UN`krD-Hg& z_}?rK3d$m&pzrb3KferbP|RZfu!XI5VBzMSenttE$M(VbZ3A5LXR5-qZ>}=(FU7lc z+hV8u8RYdz#!!P2D4|C36jA|y17oT))_xVo8-K|5_<_F0i9>yvi3vk}BNGz~(+Wv} z?YE+lP~cF1|HOE1>S+#2S-!KgeEqnohx+Xnre8nigRQxo6!tBlDg_DNkX5LPt>|4e zUf9$2k|&&;2${HyV-PtmK`1$1jNhngWpb*O5vf)t6t$L$b=-|tQR?6MAbqTPcoHix zHp^pV=2H~V3Heq!$>mc|m`Ep>h|$Z0rRes2g>{7vyI{(~w5%(smy`9%ei^^m^>?Rk zm|t*rn87&xSnmo75q zh$nnY5qah43463<2*Xn&&)kLT=@`#ko}%B!pWxYq>{t#CiY!`J6}KACF-6-w#h>9< z`~w4Uk0W0JhULt`KYs^8p{lL?5%bx|CzwxvqozKM`=EW&tFKE>Ojelo_-L^oeZqm& z19L#33Rg1nshrWCju%2}k`wUTA5bN)I4BP0^Ciqjon<-Lmlq#D*f%piVW6*nJj|y* z2~hr?qI03`!TzrC*0x2ootEqb2TycEfci~Ax%f}?o616lx7rxP8uBgmnRh%T!&os> z6C4#O_UG@h>`!99&B#CU_d4^>#*2W4dCK@4TcV6&egBOD%sa@NIWa1Vv6`!OC(Gf@$QxAJA>ssU}^GP$}gI1WVbs>U-(aJnbm;rqjBhqIv zq4+FuS@dYckC>E01b(I}=}3vpS#l9E)sc zcr0dNb-c&vtr(Ch9%b;!ysVQk2Nc4mWbb?1>-(J3 z8Im<-I6+6V@Sb<=w~ax%M?B8|U`Dvv5)jPvH|}A*i`f_5QVMQ}fXkQu3l#g7l%ddJ z5Tx-Sw}ps62=cWi0BMp0-~s$b1t60XfQ(20GGPdStTWmEVOyvM{+8n-oNpO_#QGQG z$;RI$HJX!u-wgb{hy{ucNi&bav^JL+{4opbxw~!opzFgRjlU|lu&iVlxT@dqKjKe#$LxM-}6EG~5KM_f}V13t=VJ0{)rDKXdR0{(lCar}59N{BtAz zsF_F_C#LW+lM}glE6M628%eP`p6dm$pNt=H1Wi)#im%LOxmqS*IdzHy12994ytcko zBL?R;S70De&2MfB&2MhxunLqZqegzrv_S@HA9a2_I>l3)djrkS%nHPG-rjj%6^_bV zBi9yj$}ycO196S;5gp{t?_kE|<5IK;xAi2xO}w4#O+z&j+qaenSW7DihE@TgvtzDs zw9)H3X#GkQ!=x2AIx4^_QIHFhR2|FXr+E;y4!5&Z-!XffBr{8IFn@o3J5_&FPxXMq zk(mJ;VvQSEx2wV&&{$4Yh3SURrZC5`FpYI#Bpw)(c)ksCZ^tIK{K|D97Q?mDd(b$% zK2*rq@psVrOFhcNK@Fy+%$S>0@W=%>#qN{YObT5-Kus!pl>k%ZsiuJ`mE}j0Iy*fJ zW}T23IQ_aIEbP|ii3ly%M5=BX;_&bx}L-;VrZl3cD)t zF$%@UBorSrrudjG#m7vC1e#q!dGQ-WXg!HK?$3}P={e;`p0v=&mVOkj{ADy(k>Bww zyuZ90?+*E`P@;HtppxGtTYf2suH;vW6iR+unFZvRpc37NL=O3R=L3HIE>!Yk6v~fD zC_iRQ`7v9{kC{?d4A=0R5cqS%N0LtQktHoNa-|=IF@M=sggD{11Mg^`+W1?pL~-K) zCBF%_{MsQ`B|o-@l>9a#jPjG)>H~2-kjNpwcpv01tja=zRVa#7zRhn!cyqCKkq(+s2tFnu5#~zaF;BLi^Nr;Afs%X9_vc8C^r}vQ zfV7OrkUWk{&euW0lD~|C6tSrmN;yGFqZOf*Dxt0FqlA`?Tou$35K9Sdk`meq1W;&u zD1ks+F;X~$HmVpFJFJru8lzBXOhTbCR|<`JQfQNCt_;-XdV9&ABQuh8%8dMInN89% z6R!Ma>G-1O&qZ_|yu)O@__0M-0?{c6O@KV6rYi}0K|@I}9+8#kmNPX(XHgD;xWS0( z5Z%&3i0-70N_31u(J=`{HG%SDo|GSRMEZ$Hz>bXsqn9=z)AwDb?})Yi$8Y|WN|$s) zVjPz|LCcQp=|@J%^q1u##A&e;zd7YsfDbnQ@|FC4OH=YoMfOU52jE1N{Bo5179$zuw}Zk6#BD+fhy0e#hW!41 zo{}GIH%Wslxzu6GVs~0OVrXUL?#y!Yi$&dL_ep@MwK-_#pb;$4a@6%(fQSFud7=`j< z63PoR_-bN-LS&9ij|8+|lHw=}>Ljt>6RZ9l`z2kcAjy^pa9nb>79^uUkSj!9=-lcW zx7;be2?~ERdnv)SLlPx8HgpvJyh?s0T7DZ@VE8|zaLBLCEc(B8N`8z&`7sGa$6P5o z=1F;Cj!*@L@Yie3pMyWL;uITM(qi*!u`vq7wh_#`?N{S(t5bftHvZBflx`O(F(x4k zCB{nRujEIwC;loZ4ER4pb;xg*1^j({j*=gvP<~88d8Jc`%#%W7j!6GB5)gk94E&{Q z{M}>yIrt;pkRZn;r)%kvJ^jci5M-su3;5IWvz+qFvE`SFLj9Vm!4C_g5l=$I?zm_qq6N7^p~L-sr4&OgU~N!2MfawFmzmz<)-CXD&Z z_~W+UClD9yKZ@0spI6CmW_KmOczjcW+la_YlI@iICTRIBM-<3!Fj6?=*Je8X-`Prj zj6(S_3FXIJDLUp!Ikuzx7#NaYuRByyhC0i~B)WX`326%~y;N_5N&-x!cnu`zv* z83&aj!#4wy7uiY7d4(dK&gX0qU$)ol%Sq+?a`g?ZmqjuNi8Q%h-=u85m#J^)lq}Li zg4y|AU;YHF!7t$_{{saQqm*xjX;nQrn-g!1!)yumSb2Sm`Ps8_VJUt}O8J*LE#|MU zv`oLI3PYvjqcCkbvzU4!qvdOHOk(j*vo4S+7!|CG&o5GZU#aAYL_)(?Dze6Fipsl! zqeXk> z6=N8sIU|>n9 ze8T?3Nr*0tBf5%L%90nRT>*bCScTrf3b49yvSOI8WY||q4v-_&P*Tdj+#`$5RjF5= z7pcCLuQVI4g=tMfIeJx&({zq}RXL_3CUVTdPf02N>V3VX6XaPfO96pNcr8qO6+Sa& zst7q9SrFH$^81Q310m#*ngTy-Av1;%a*8~QkaIP$9OPc0i7C;RmhjcLIA6y=>$7yR zjv=}LASK3%Qv7&U`j+FTq=bLj5QVvvl*_YeaFtZxwJ>czJXQ<_3?TV-!nJ8UyrL^X zEY3kV=a1s?TXm_|U%~*Hf7o@aQU+7%f+fkLGU-HlRwm6fG-;C&R=Fi%6Jt9RV}<51 z9XxK;JXQ*xN_Ozow|JwDk%}0Wjv;{emF$riD=KviR7NE+AVqg3i1n3_ZLhEVfQ|u* zC1i{-#D;t&T)IaP?==EG|pQ%GkFqL{B|ef zn1nBbNbq_I$WVy1d#qn=BiU6yLJZ)%TjgX_ox9pV{FI;B@vgbX zBz7*=E{sebikm-MVcWYB2WwN(;e=iRenp(zd8Q@V%Oy$fpZNlF*3LqUFw;=lzXf={ z>5Nq_Y4-lBk!GXF#kHlG(mwZ3J(#ZFbb0U_% z9`b$6ujTvtt15pj-)*CfeEUYu|LEY_c@pG%{wa0HcW_ks3S7N5T#3(%Trw>_4m+4@ zh?BPe(tH@_yRW#USvtl@bL3y@mgX2|zIuGr2CdjXNlervjQw9>1iBa7dLy`(qZ4T5 z&9wiM>kz0nsz3|!F9Tp_Lxv*Sfz>!0K>1WzMHlj^4<<&C>u4VeJ@sXmTvJCIx&C%` z#6sIB9qE*-OQ1(ekoPG%Z!ORZa*ROBBIjLo+tE1GyKjO(=bsc=puBcsAg`T>=uhF6 z-vOg$-wQi2Qt$e<$^tB|)=_iG)|?k`iioR@$wyUIw8Z!hI0q~w8*sAG$Axa3A3iC9 zJ~qvR%)WWirH|z~Mjtnx^?USjGxPT8ytO_a8fEm65IOIo19q#5 z7g+bTJ%-y|@P6KhuzA)AK->S$o=g9`bcIWjf4$sD@~pOXOEPl(mW<4$e(R<4*U}tz znUUtYq=@++oityZ2x&gsvJPqXjVeuVVL4k3!07_xGSUU7eG&{#Q=K@4d^@y?Am6sd zly9#WT=G3~nUU|hGb5JY_8gJryS_-vch~bOe=Xm=BaD2YgsBg>cG zBfT!~vH1e!J)}Jk?;)*ym-pZotN$}$-UFIpyAGO}Yc$haG;_&`Ml)d^eHOM{*8o0i z%927@`J>Od^fG>=(aU*f)UB7u9{qggJxJ%Rb#m2kqm%bekC^w->Ew;;pp){1=sM|L zmri8D^E^fRM*bp2dZmwu+7rS!8{ z>!(b9o%-PyYswR0`Y9;isMK?>QBSIUXtMUeg?ZA2s8v5}j*p<96YqfVIzH*r&z>x!pI1(fD7^anw-;uD z#HJ@){;hI|(a*5RB#ur$>3@TMdNqx%pYC<)2jc_mPULI-6x7fUzgQPO8m1pqK1pHv z=_>l^7S+EU*EE8DCeMKI0*|}&lbvbw)9R!@KtCRmI8T$%_LDx?=;y`O5lI}Ke#)+f zewM~Z*H72F^mFKBrJo5}Ka*~*Pnp-~r$uBEN2i~dzd}EUkBzRME_LdsrP5E1 z)=zE?{qT$R%R@Ewvq$M?CcaBIGUZ5ft(xMnw)As27p2x#!NvIy+2xP8v~p^O(aPs1 z)~%JuZRyI}koVz-UGA*KAft{sk@G$}b=-O-)Nx~6bakZErH&iWzNI_!YIS7SPzS$Q z;~osDqo6znK`@j&Gd9u*d5Ddm{hZ7ULha{-IJ{z}rUWT)0$L+EHLVB7|E57&@0PhV zQ98(IVq}ZjG+~tUovpTs1p|x{{+Cc&wpCNYN2k1j5g6{r zCJb`jbK8^)^l*QL*Y|-L?%z8a^8eu&&buObr#*J0NBT39JE7~|ERox@r117gzsgn+ zd_IMu#`n&3%k5vB&vzD*r_E7r)2E_<_dVp2Th2fux6^7ZpphH)56UF7tqdc%i;!_! zWQ_j5&RL6YSbrnBb)G*?bStlb=w56TS#;+|6&>d`C-Gpamb`rz6Sv#2C93mw?2f|z zE+aImZ#mSL*>jy|&SW6fp1y%p*)`8qX^pLG85;!p#1&?sA59U6Ix_d=D}dC#S=vJrS>ayB#|-YahsHZ%Hkq&t!U0LeM_dvH<&;or8+d=HNx0ByRvUi7D=+Z@QYA;Hrui|x>fLt`O zMp8)s!rJu!9g*5kPYAT8p0^?*Ab>Fd9;LIrDxEPZ5y+2pRvA6F-gX56z$%^^AZHN( zP(c9rKEUxNUfraWkRDXgI-WUmI`W% zAdHWyun$#Ob4DvsL2Fgeq5mRistS5u1%1b$u_|b(3i^;im#Ux=6|@#X@DD01PlY|l zXzf(c-&D{N2DMf}Lsif`1~pPay;M*hgMRu*WYJCq{S84le?f({Qejz)wowJes-TM) z^eTc%)d9v$dDbWAy9FP?HeW{B9lQnS8{7Av&qmFp4>uM&0U#F(I{M;h8=ORg{p;RD z?6_ZxGnj`bX5#eKluXm#~fo?cSt)g{G}N{4KqWhp9X+jP_lvNt-9c##?9C zperPUcac%oJ>$6vykxu|-Aa0<4{pW2Wc;5a;8s@u#&wA`Sr(t-x>X!Y4OZPKwdncq zDqhs2JSP5ND>9`o|NGSPU#d?a8ltWh&rQhi=OktLz3npm`6+KEfj#TG&egEF)@4u! zm4?ZE93jtoxd313Ln&=Jgo5)yGn4bJsrS*#AQo8Yn{6MvkbJ(0t*$EhYe?74;H>2I zeY3vdGRXVAn;`Gt{VrWU+uP`RQhb=a&yb=idA~fgHa%nEMZ1{1n+zd2=l^ODx)y|# zf1IJIY3(k&*l4#=IJFfmL)slsJGI~)A|P)P_S7e;B@pVs|882l8?nFJw1>VN){FLg zNU7HwTK^ze1}dq~k+>#at$#4b{Zb_dtn7GeN2U-mmn&3FHTHv6 zC#vT31iQrv`(agNs^wYPu%GD%zj3rUZP}Xo7ghp+h^4&WLJ9}|6RdHdnZ;{|MnJ5f zz+>a{unrc-4fo6p#61o@)9K~#oIk8J%;QqyJZ_E3X`QZFt05#IUat>V|SRgjNCja5*Z3Yx~Cz3IBWQ~@#|A;`JXc@G0I^Uv!+Y3IF)lE%!QRD+qnxhS2e zD9N2JPY%|A83GIF8y{R|TV*z^vN6sVQ&t&v2SfHyz-7pO?QVrHW0d3*6&KcuW1Srp zpOO)1+=3@H%owIxeJQowM|Xz@#dqJoa6EXE)p}Tkn*pQs`i5faaecOcVrZ6tV%`r> zccb@gb+5v9Mzut(BbK6tl#8d@^gA4jZAYg{9gF^DH2tDbHT9b@0a71#k4wMj_B8sf zYUI@KvJ*o3?VQn2{eE#BC>>hp(r-c!qu<#sN?jBs(eK+h5EMu<_iWTxzmqbd-y42y zn0}X{z9gP&)$c!=*U)bV@D@?OHxCj0KKVWLd)5|Pzn@_HU{wA7%VodR?-Dl1Ri%1Y z$bfxe2E3YmsBj%$3Cp^6yj}m5x)j~Jhf#E+Sf`?2ZWdCscTgRQzFHeH>Zg$ZzZSYa zK@&6nznjtZeKAgA0~ImR^)8&B>C|;u1Y1s#=A~L-h^|x7U~~W1FAdZ8GpN-f>ifCl zYv{X|obL&*P@6s9nIZaKWkKIvHre|A4%;0?-}Sp+vO)KM`BBXjI_?*oVQ59WpQ#pn zv5QzYzIH^wSKK&*uQqqN@b!6DgRe)9WH>5{5lut*victdzV5vS_bJrKUSWSK2HePZcmm@*5V<@mAC z!#N9FN)L81N`LM*rF8Tr&^q{Qd`RiP;G9W!>ws;7QrvUF1}iDBC7B5dPyG!P*85$W z-kD-FJ;X)fw`<1%twj1go`2Ik*L1J}z$w~Bi?d)Y7IPA;%VP3fXn+zLh|M8-1-g*(Oe&Gyi zZS_lBu5JJGT~PQu#X#YaLoWM2HUtF=M_#(25Y|wK0c}BK>G8Sh4a_VFx`|qdhe>d&_EgMAhupRRE+W#hC z?5OPjueARXm(qisjMASw;IjY5A*KI`y2#5AQdCxb`0=+HUTa?O>rP^^!c>rz$kjz(3D_B-wKHSEpqAiuN{nj&%#hQ^_DAD@dq&>{Z8mrQ@^f`dTsuB_ z{_TyLU&SDFh}d{VOxjgRu(3dNBBU5e?B+WhZVy+n1V?Sks=Ut_B-^9*C7A^%%f|BKB;H4vU;-FRnM`|I%O zI>Tt~uR`Qt`*#_DV?)pXlFYOC?|th(BjMEF7i>BV;Pv>^>@zv;7(zgHv-| zBTnv@+Qy%L=lJ3~mjPd2&vGI7$#V>XZ`kAXB&YorLhy^-!x0?TY^*W9cr__a*OWAp zOL3)wSGH5ex+uMLSSSgS2PsMh$@Lw7+S3y_uG-zO_F@}Uw$xXx<4>oPDR+DE862A# z(O>2?lE&Uu+QmXN2RQ8xom!Wc=5aKN>Q&eKiZue`($M zd*+7Mub83B$5FrD!09vpyC5dRGhm0RY70Znr#nNVqGXC#O1E^RRrI+>zCFTDVr3U-IuJnKZ zZWx~0$Z~}UcsiX-h50|6n;F^vU8wxu2lRih*m%19B#oz<{*U|rlTZb!{r^Xr+e;wS za?EA+Q8^RfFL=N6{9h?2x!;+iYFyRB_02r0Q&!gEe&=|w=(^u|)!8`FWpV*Dj=6Pa z#N~C8%5PGw(Pu)fd$TdD7iS7ME_%gV=zeF{CyYzEZhMwa1vpaO1{^9%Phf6)?i%g3 zXIBa=Nn%cHAIQ1ybD0g!cacb87d|s0R~1#@mv?c6E?En^@R^CZtDh0M+n))`*|frG z@_B9LT7cV|kzHPhGZ9Zw?|E)k4l%<1g0C}&5O3i(Jv-TpdegIFPaQr_Hif+;&7R|? z=lQ=7l8&36PsOpC?wg*?T?c1-%`MN&Ox9Ca&(5;1zakKDzk#{3THQzXe<|b+BIG96 z;9wu0go$E``$sIQ4~aV)8sTl#)W6(V-AN#;S;Jip>b`HREW{zAD4DJPYR46O(0(lM z*sGR1_G(o=HAv;R6uzz{4=a15mrNdxKu^(Y{ECHyOp3L&GRKQMD-Q4#|6m7e)VYxX zg(YbYdjsk)M5{mA>Es{sm7A0$7j=_zJJ5AmQIa=+nSNJL*iFh<27q%Fkk!6TM6qMnFc!(aCdJRO$P!tZX@}CqX5ieZm#Hi{@ zZFT>~0D_x^rnKYbW8|xpnV7aE@oQ2@<6#pIkyQuL!wM+ zOO%XSKhIRx(DarVafKJDYm_NXZy+;ypmpn5eT{Mp72|I;Vt6LVHOgG|GEkpSfNL*L z_RMPxKY%CPWV{q~aewjDb162;1Op^#SiDZrOu*}gIV@vruoc3nU!;mt2lvR=z9V9T z2eGWl2Ds!}{1lujeJzND%XG|1N*3TuPq`_>R-$s7GKgo~9psrl`F@`k|`9TCo&s^K(2^?gVjY^Uc-x_6C^32K(Ax|EvntzSUUO#F)Z(s{V_K`bRz&2!B?ZU| z_rLwf$`k$C$@$i9oGB@-RvG`x5B5cRNV9`y-WAXap3a`y!f0Yc-;uGwwkkqT9BhW;rDzfr3vCZ^wKM4Av2n(E0@v=^({#7h-Oq3JVk#gpwb zU*d3ja28@o5sFixUUH~dvhPI~V`k1YW>WGNMmA=}kz$=!eKy**Hx(SrS=V4*m-9Dc@N13YpJDuy$v=be$G*w11UbN~^9)wjIP{JDCtke_ z4+5A1JlNGaqgZE8Wdlj-2Xm8Q8N!j1xyevGw|~BJwo6L!P2FWig1pJlzK1pS0UXi# z3sx^W(8N@QX;)bWMoeV=be0oFl8;YitnV=_LoC8)x%@8BtG+|`7&d2qo}w7J=?nK5 zj>r0bvJ1%Ul8{je+-Q`RUy&wfL6SyLgCbKn9gx_zCj z=Wlks3tX@$W`0g*DpPdWBXa@v$Y6#JjFNJWEWkwi^~?tSP=OsvB`Cy^7O3C!78rhk z{&$V%z&G-@_dlgOcD|HWb>+uwN@5Z>y`%}_+!&D4pzSVYpmx<;*1Md(4g5det^_Ws zYX5_X;({|)7G)L|6}EzDfkuJr9i36sGSqruCDD!uiaR)9Oyd-q^-BAf?Y6wKGBxe> zKz**2s4b=~+Ipw4_iTBoVe$Wdf9KrU1k?9?kB`pWx%b?&{I>Jk&N=b3&lW$!-&VuV z(Cg`-pW*&imY?AqD*$+``5o;!obddvh4H%1Bl)Kc*mOF+P(~UM)?$bO4!>-}JtYB5 z^C&PQYwWN%ktBnx)QlMTudX58sP!4&!vwS9yRyyDDEdFI1j+O)jBr;S=wP|4-h!){ ze5RNgIX}03MV1e(&uBovCE9C+PDw)WIIA%UCet_emn<~4;g$&c{H(o2pF^V?`|V3M zMtw5DoTnPHvdEF2P0VL=FCrs3I$vM5E7Yz~D_=kTEV!>O+)Ocs_d?{VfQikfgXutF z5#^~?4-iqdqX&@@<;UPp;^dV_MC6MAR)M5E^X!{Rw-%}tn(RQ+|5<3dP|$Qyrt(~m z2w|y5n-G@N@s?a#G2se8?!JNuG!09%(A4RpC^W74LLetgS@IANY6e9$C5Pjv4O>dl zEorY}uXYxWUi>hsrBSLS!O=fX51RmjG5=%0kuMoIs@`~H99^i__*yF}KH8(H1UR|_ zJ&457X&`#7U_elW;Rxa_8~GDAM&YS^N-EH_8!Db~)A@p?3(i+)x;})aDX@Yq`W9v) zmfnR;Y??PmVCltn7MAXYA3TDYx~QHDmR>^;rx`4j++j5&jPxfobTb-K{nw3YM9pnu zA*w}mV@r02NTPq!jU9RYOB6rtIYZXJAZ@WZhLZI!=SQ!9k#2<6zaahtgjwrf1m+lv zfE)O+RfVO*{0z(1f<#b$jm`wfOK*w*c}80ckeM=QU^cL8tQfmFjIg8Q;4aIgGKV?En$ z4n-HjV2z0b`6-ppSQ4oRw-;c>%FPy)GyZWa?BEEXb79@rms|NM4Pzr9|8{}}`B~ed zAfIOS1gq=*j;Kr%z>ryEyww`%TL_*jz9yhW^FG~}hWyj5EXa3?Zfwn`S|(uT$Wx6) z&m7ABD#OHov>5njXJFvFwasIIGl;cehb5gdt)4(Sy@$;*Bc;=$H0?2i6mkYB3X@KS z=AP>hlS~HC^%qMrVYd#VORW+cXratj^$ZPOopcKo63z*lhL>Ij_zlUAKvu`r7P3C5 zk3yFFlaR1TLa!r{C3w2tY9zQuU`tQ5@!buo4UMCicne44quV$$tc|4z;e@pjm}221 zJh@kPC4dyFC;7}yToCchXMDC=O+-FU>n9w1AoGIP)(t2x^*z>zMGMK)(vi`0& z8jf5jCL$<}!0ko-N$r_Ch3i{00A$GOP$J$i0Cr~&4EkSxiU912cnh%8wnPE;d}%%; ze^zyh7&vF2k{hf>3Tm90eboB932f#*-Hb*5aTaVlMK`l%r>6fwpnuhb748e%g&<%u zmKezjN5k6(>sRY0TtFosunjJ6Y;mfbU*Awia#sqV!?S}1f+$L91xTBAdio?8oV%bvd-^uO3FVzW6Tc)=1vks&2JaxBB81?YC9x z?$4*lyBD$GVs&eex^)_FJ*aNIr*5_8ty${UDs}7UWw>=WZYc}UOp#@qOqp1K)5Ifl zV#0qll^-MV;WYBzAH|0=nu-rU-yN7-dtC&<+!JRJ%;0xPFjiXMp&cPMoQth9!&pQV z;E1%o!}4RUVoRfSOPXeiVlA54^G8bFRMPql;{Tx_vM)ctJ`veX=EpP{{}=P= zkMIlPZzBGm2B?2EIs(7X#aj5ieRDX}Pv-!22H&e4j}^Z+u%#)wC5_*jMysXRh?ZXa zFeDHLs+Nuwzxz%Cegl6!HvD#${EKGr+l8Hq#P5stBjEQRCklSgdmZ?Fa()oM*Zy)u z{Qgn?2xpRD{@=(b`@BKc8-jM4x6l8me#{!d`rAj>zwnRiZz}((g-U;#z9l^UsWPMl zh@T%`mwbx#Y%B$aui$V}J>y~!P-b2PsUG@$05lSwM^L*VoK(lZA0pLOwm%?Mr5nWl z3jeNNKmPhfXzIOdRa2T)zdB^m>NOEfwNg!qELzwhd@@P!FXFT>7JuYg;Izo(r+z1B z|5Wc)$40NWW3p^k9^JY9FnVoBJOaI5*-_|q(h|_?k8^|c`kbt31Wo;M{uA?8%7XbT zJrFC@F2oq(8c8Wh@~z@o%wO5Gjc9T)Mw2R!lpEeET8Wpqe7)a4`Y8Kx)%8FL{1g(% zK{!DIJ6>HcJpQZ%Udrfn72GPzCT+p>;Uty8QyFwg(@#y$BLCD}=Ki(i^p@$r1kx$x z;blZ=M1l@EJO_;ZpBr_JSGm7!X~gcwId^2D;DiML|VKQM^Vl|}MQWmp_3 zD#mxMd>Uev?@8cN>=$lmaF&F|644J88v8vIBrJecafSr`>uG2J27EmTLUz_Xc%6!X zy(}f-?>$Wg{_F9~@Htb?Fw6Srz<-4*QFvI1lZ{~D{|v+#?Y4Uk;%$lFBi5fxaMj`l zROmxuoT#|rx;{p%eqM0Rw<6Vo87x`;xH3?4#~5jz%#D>)vi;ML=^IOrpQ? z8nCA)kADLD8e9;)MZs`4ADiv;`!l2?`p^@GyYCEDST$B2s*_L<>pta|FTo?$xksZD z+*vn6?#7hZ3~zVy*EU)}G0xq>-xjZ8Jm;(6Ho0nDpVV0YPq@JCOj~6mdZ7Y>iB_Hd zmk_{UEU%V**0H=O>O)XWm zMaJ(4Oa@>!;M>t`{EppVtemAtdVI@@-(81+7)OZTU7+XhTx)RTc!}Rt{u9;sPv`ql zL;Z7mHPly-(ic5cs93ZwetOp$s@<$cxJK*?$t=L|qlXIqQh7!H_E3ZQB@(lo!SM&j zd|1db1G8adxAl-qjS%HmZfIz13|tr{k&f#ngG&rFDq&~Fw`26HALzXS`@brihtk?k z>JqIr*{qY5kC=s`qF(-LgrqGSC?dX*goz{2ws*`bh#C;Y#}Z$A?d!&MG4a-|^v3jG zVDKd&mNFLg*96|SYHIphbqXnrw)wSdnkd5ktBynbEa@oYXNl)POGzCXp`~2;v!$iH z@;4|%03g`!KaHO~-Nst~1o#=g|6crT;b3}^{#WrcA0w&0_yGx`_so0_de5)bLA_^a zfc#B6EFykpoBa)hrjBn3Yz;1yF7HMAx{~p$8V0m*G7O!QK9p7QER{d?5Pyd@MdBLv zfoB7YH@XxSv3)V-fy8ruw$xhxUzJ*G7+k}?V50~Yalv2GGFq(_M_0a8J$2a;sQ=ru zP=56H$LJRln%6TV(T0%P}JRoB7`sd1xdvf(2h!a6hDoh3vxIzMglt zh5>fll8~<}xR6x`TEW?tn``w3j0^i;LOdFF^BS}qwu;JcXrNvUP!g#0Z0R5&bA|MP z!QWh6Gz3HbxhsZjb4Gx4+m9AVA9^bsqyyP>Nk@Vd@!J+n!gN$POt~w-18m^s!4aId zcAo{)o)HavvtCaIaBfXi^;@=VV0@V4FbK?xDQ2u)0W>hrY9;=y&aX5L&WjPZ4g==| zt4RPe0ZoPh6XH&736L8vRPT8jRNrzo**YF4d4l-5OysQ}s)CI0tSov2Bh>gC4uynm z6Y@`UMKT8f*0>JR8UhGnd|FBpn4&eXc95#|uE2Rn+=BA_VK8wE3iVFIU59(}LJ8&m z)p);ZR|)p`!aeF|*!dIbzT46_26|FT$XtN^#WowB&y4-MjJk%a++W5TvD=Ntjp6m6 zAEJ}jFe-0DB@;*3mbI;RrnJTl+x)tKQrQb?ppB=a=5#$(kkrqi-Fj`Jv@e&JW+80V+*!L{RA&|FEd^{x`t} z$7g=1jMMYO)R+Fd^TX8s|I7K|POuKx;@lR(7B@Trw%9o<$QGAijcAke19QbSC**PN zEu=Ulq?5g;nxn4b2zWiJCEqSI2l5X57qo~_2(t;E@(M~Ro{K@C96p9QwV#w-%2`BE zXO+!XWpQ6SZ!*lGs;nW}kCW>-b-iiPWmCwykLM&@o5ESIEY6RMHB1q|#XxK+CajBdnv0C3r)r+F8)nu<(5Z5D_=|x(#oGdw`k?);}h_4{c-$B^aO}0D21`V8krx> zU=CKdBtX4ip9uW6_FMSf{8~7Er@bA*Z%5gPGg1;98NYu!1ugB&iNNo^Z!G+djcDlv z)spDR&mmqT(%=~Pe>?>I4u0m?@H@3pm2VQi)Bk!He%nbbsTuqZX%PJ0vjF&QF)fJS z<+5gyc26_-9gLYu%YZ_9YRg6TV5@g}bPv2m9AMk>w{*7T9G#7)%2^)WZ6EZ(`5OZP zY|L?Gbg|Ii#T6S;8$2TPh(-81lkp2H51~~ibM6yqz(bFxLDhsKj`N(%3aRj2hWT%k z$vTLCHt)Ypl`S?YT$084I4hzeIzcxEE+a!7Q&n$@+W`*GbnaI_+YWDJ4b)$()rg^E z(tWUnZT1hG$K40xY_plccswpC|Frr+FsDF9Oh@K%J`U`+zhirL}k?fEpIup4(Kg+uPvm)vX3e|lCN;SZRNFq zTF}3ZG+tDuyt8oQOIo8|{h~3NLE?bltGRVActvk<0V;b_x~5#%0NzQW(-5JtxC&dl zrd-&6mvQvdJ7aJ}x$yrFP~Pjscvyg5pK(4Gxv(HQmxpyLq+I277lO-W_wtWKyLs#$ z1pTy>TrPRyauP6KRqe#v>0O_QcMr6fcnv<|CJrKfk&MecBQprHJizO1O!on}c5xT* z^S^?h7GR^lEz<`uH%DOKT5||L9Q^2q58}t{&0m-CBb^@?^5Z;yoQ02q8nZL6Pv%EQ zezeC&jcA-?YsmkgyKmdadXkBD_f3XlGE%7s`*ob`tHh(UuY4UbV=V3+F=M>F+nO;h zdFi;>S1G^rQt_|O4D0+C{coK!pvqAr{h#EoCo-Dsi(mJ%%tMV2U>=%MYEgu_W%tysD5aJ3QO5(DEVF)+BmAv<|G?Tb6vNVRT6d)^-V%%TrlL?g9tNF!ojT%#I^ zN&(D(eNkfhi`1%zChQ9g8sf9(k3T`X`2JBsuqpc@wA8^${L8l5hk5Y)%mXT4nGi(f%^z5(>~$pbLfZ$|9BKUk{H(Uh4p6zSUa*OQ0Lr(b3t><$$FBHc^nIaPc7a2QA>5+q`{(GCey)%CwJm_rsb>V-ckHs@{^&DN zz!)Sw3DNg1#5|53@;)}UxQA*?L;mfLEy!OI-Por~LXatlqzqmQ!~ZFK>V|L1oRkQe&K`iaBny9{Y8mg^`;-}BmF=zqC10?tJ{Ejagp2R(wm zzjy^h57KujT0VLxpU0;9=%zH3^LAKJ-uP5hQ?dV?h$Z5u)~7; zTTey-<2LC@h`t-lV}bl%TBETI=@In(*@qV7hekK{+h1hZGKJ4m4Mk1i$FR02eJ>z? z;e*XXp4t1>aj4cLKGo_0CUHA@5IKp@fS_(Bd;jc%U;kT38BO|J4eRyDu#QO~XF2(9{W@^a%D?^HPXr^AK%nhB=yC|HYP4bW55$dVOHw z=*2}*Esatw36B2pjkNUd z!JcnLGd}GeXvPl~q8B)SO5JMBTeH-yRqEEyvvKQgb!)M@wFkGbzk<3qU)_6`#SC?; zLfu-)TRqjSyVR}cc?p520lit9XRs-@7-jCX*z6#{g17> zo6kSC&8`5*g7%vjXl%$^3}?*n?7$cTGMPL8S8({wqc`BSKiqkAG3hE{I&9W|{YUxlbn;pG_3h7#qVI)P-AAHt6QcGo`i9Un#?A zJ^x5J-bX(ZqOgA=juTB`%oYPVX3Ob;VsA~b+9UtSQH5jC<^#W@&6iVEo0`_vzH8B1 z&xkg^c{^nvd3F~LLe0@Z)Ezho)#=%2EvRezC8#idj-o2n zZHH%#!?RINK$Uo^j0p)fFbHmz^9oZsJCS&V^Xm{3b4cg(d4;>oU7ryqon0QDSGddR z$+P=Mp+j0^_~JW%AtZNo1xRkojX{#DlvS1_xnGeR8|ILVx;$3-IwvKH{yJL?{X6uR zV9_5Ot;do6?l}Znc=Fr``WyGIMStD?98P~bpA6B$-H0>&yYzP=+q_t}sp+rZW{dvb zcqqKhg0MClKKX+-kCp!J-3|Jy^8DNMxA6%ABuIZ_q<_uR-@?y@{@$Mf`Wu=bq`#J{ z*?~W%Kd#Rx3a-y^z=0rgs$y>fNRGLOF4v6$`D1d;#?_=N|i~7%kZh3 zce4~)xO-o$TE!ut3I@6^V-EEObR)(Jed!8RSW9K_n>`M%ptK#|ESEPsAoNnPmN=oF zQqKnu^8xZphr!%pe5;=t{9@k5pFl)~2=(c-TuH4$m$H6CpaoDYLgD7aUFuzeLdxkF zuEf2p_#fAAAo$gqc8WwZ55P?{MU3(0qXv$38gi;oJ1Yz>w#cV_u?s3UHyQj5 zuQS9|2-}F~eOp!f`x1WGFtHRmy>6vXY^?t+l)?LWa!JVz`0QRH%N^JY{}fIDR)AR= z#|rhR#tm~UT9*CQe7fmeG+hzaH0MwM-+2Q>yN?6GpWy8PE~09jBPGoCdN}>1PJN7d zX3&Nz5a&c3^QzYLHy0Gr1a6-3wj0_SpV>-h*LB0-^g%#7|L~7|c@>{0+p5)ht+q z?V+Z2xj{Q3w*qks2yA!%%H#x8^F(=|&Iewl8R~vePRCbJuOM9ka7_vsn z%?m_vZL>>wG4dtB5YwZXHw#%!3$@n22Tx`f59 zI2rHY|L{1K9ZJ!@4&1OV2GbE!8=w9* z1QyyS)wyx_(b6_sg?G0`WB7HhWO8&V=e*gzgTuvdvD%Jq{!nHMVkk z);sp^K>gsE-L2VQ9G2eJ5nD@-MBof(w~sJ|{pRresyWNmb*IB!m*k4A=P@Hl>Avr6 zkd4E8D%V5J-im9NcUS^BvFFjMxJ z@9HFmTm@W=102jUUY23n9oZwp<=g7MNU$xN(5lUczLBjnx0arZWd4KUyRf!KGQZQ8bI=JD2~hVO?4Q0Z za0ysQ79UvO&TgMOJij^if9k0F?J8H-Py2QI#?@_yGxj_8y5Ag)tE+yQ*bf4w<+RJd zhNnUJtRb84%BlMje7Wq#7X90N(%*MoN?iZU9mVZjnL8%DQsXZH8Clg^-y|z|=a4Z* zEG26@@@gzF!1<8_dx4a<%jz(Z4@iR}y+O8c9iV3Mmx0Q;lv1X@Tzl*im=zDo59Yj&28>v73#?S|hXG=6jNKN7=R- z7Z@N&@pW90{wP0fvlsE#^4jCS=x^Fq$!7Xyy9L(`ejx#b37EgD2ha@T=~a?D9|e^M%8r3-c~L&yJ%`%k*Kaj!4F)mAY|uPTC3 zx^kFB2c}Kd$5P@1*U!=Z+Rw*HNe-JJI~UF63nmPiJ0}Re17qN z-Kv`s`j>bH(;FTLfO1~$6hS#_S6Ya<+$T&{f+~!VWN1+vnObp-8`%N1z7Aohe{GJ4VpO&;eCjxbel~k| zSPT%j_F_9OCgQ_h4E3<%M10tbnQl7~ANJyGUg5)DoXabG*o*Udg%5i%H&>WgSU#mJ zrnD2S5iwEFd)$6Y&J-x0GFd;eb5zzN+FN7~R*X(`L}%>mLr3<;&OUTxZ|v+tNA||f zK6GSn?Ce8F_QuXWbYySr6WNhs*or~V!&SI3)6S1%exQnuGx2uEnS6UDUz}M47*il~ z!&h;705}=w80tHYz|nihn$O$8u@!5{09-%ei(m1saMKTWfSc|Z66B_?SV*bn@8!*} z!K3_Kq?oH16>8?9p-1kanMIGk;VZ_(wN%_GU^?*zCZ+F!e&O#%1YpX?J++|T@M7Eh z@z7r#cEgu-1yUjCnW5p$8dk`+wG+U6Eg&D2=jPB37#SvL0=hT;PbJu=^4C;?eQGv8 z2==M@{3zl_85Tl)B$dj1DoX*G>W%DKs7~{x%Nh^q_!c4^k9rl6jz{H+NXMfEMWo}= zj3UzUXiE|4cr>VpbbKM@Isv2Sw?xWMJ#?s)YR+oJ=FJxPL^sf|%iM08^B%+*@JASj z*1x=L;p%og4f6qq&2Oti_*ujOyRj{9jqUy?1p(GnGf438uzH?L|Ib=pL*ulsf&(VT zyuG!8aT0)cG%yBuGaz+2twH?}7%QI-07BwEjzHyPX|`)mcv_R3-a;Gm6IAdiv>#tU zp;afaArvO*rL(7f=ln%&M0xe0Pq-cNpsBlK3|jf0BhX zf7WmuKJq0P@2C;k>3+UOQlP{H0oZ{&k(gu%B{9hmN@9{Bl*A-MD2YjiP!f|2p(N&b zB{9w6ZDqLZnvRuHKQ$M=XpJ--T4MC@Bz`)vSlh1IV$VU~vV$GO{t+)& z{TttG|IXC?ONRdd-2jhyrzDwU$w{)Fm)%YaZ7$=SIw6b1jp>Y2BEp?c?*6Wj|zSU z;Fk;d<(XZ{zhUqjZ`BkIKZ$=e4gWpyk?*HB_r7g5b5Au64Ng}1#8@7~6;rFJXF+M2 zmQq9-DwM}ol;X<1IWgws6QQ(0FNSA@&!I1YJW(7B(B!UBxL-y-DI<%Np;i#3B2P4u zihI*QuJ8_L1B#eknQ&kQAY}U}Od%+Dq$M25bQyr|$pN9b1J>8{OG(mk2h4tIerh-| z7%dCJs!-NjEihulv(zj zp%=2_TL@pz{+u7sqh!;uSW`r_`Bv0~s0-6S_OuN0#|}aU!KHothBipz;~#*hytbkX z8NNA+EKk80F@P2UwILSYM&CjX-b+w3tEpuj_>*cj;DTu2=+&KaT!_<~%>`Si#Sin1 z6O_|?C#OQ6>X3GeJ5$QchxB8OR#REUEfV;GrYx9I_|mv2jv3VFa^kV+7%fcKmJpWdiR`@hBi zj|>9OreNR*`oa6aO4y-Zl;8Xl7(I*&Za-Ac@6gFa*`&}i_M#dO97j4ek8g6TB^D&r zmWjs}Ubd1{p-*vJ@1e0KZjEiY3LZ*Sk}?4MFW@M(2lyPsT^5W)u$PLyJ9ku=xtnF6 zhY9H2lM`ZBP_UWy{rQZ*e_feo=ca+QHgKb@ta^T$rGRdoXnNy`Q*BjylkAeBnp zfD3>J&!M@`ra+Y`)iD}TP=nCW`S>ZMp&}Hv%1`(PYRkvBs;v-RMeRX~&o`e&U7X(; z3F3}le3$CkPrSCM+B*p1a&*4(xaW}tvMm-^d#UzsOua3F4GP^^<}9)Sju9%(D?onO zU&A<|PaaqyU$Fw(qqm|+f(GF+pv8P2r-lLV!Ubjqs<1*pC(2!mOmvjgR%tQ>)F1vo zt(OOn!`p%Jh`h5Ngq8WjOY+|s@Si!7AH(ob6Ox!_*Qdher2ofXn^2E*e%XBVLeF2& zbi}u0B&a#XUDuKqbWNt!iqBs1`_{!^p(IrzFnis13F@Tw+}LVE*xx$)3R|eGrr$E# z@Sb6KCngw~?-@4ddq(DVz+cTV^=2kEpXU6RN_h?$|FQNmr&%gM-jjMD{vn5{05X4% zl)lS62xtGazK8GRBHOrdNJVx;B2IK?eOaz$q1~K}kce!CI|9!Wgei!TW@ewwPlQ92 zFp&8)*9X9*;lMt>t~Bd#n7WTzaQ24H76gX|Iqg_yg-ZNpiqSThi@;oyg-+f z95?@A%G=iZzgqwg4&}e(KkOVsofY-}PyC08U}aGHy0^sR(KrSkk11IeTbWz9))AB% z=08;NiNzLb-Fu;XYNw&zZ!1@%;Zdyr`v|D}K31VldkdE=w!DQU#q<_hX_@EDAoZ%H zNh=XX2?b6;!u0~KX4e0)k!szD_Afv7tVJKTh(>CsOC#bUyhb$=?IJv;^?$3Nlze|P zAs9w2k`IR z+5u{_-Ax+9Vr5uDq51sV-sCt?L>lJ_04`#GkSum8GXHk-8!X>U{%wah1=$1hfb7+o zL1a%_Xd%0q{UewZrsuy5;x3mT$(;96X>+7Op+hL&+9~XU!{-<56y}?Zox*5XDR%+P zE{We_w=itxOgDno12^)>trFA@9XG8x4G`t2&0;c!#Uq;$P{)&v!X_)F?@Zi?*p)%= zYtRFF;F+-{ZR92JX9@|@sEnym1_#2Q(6o}xelU)8!WbWKEVUu9k-)<+plD$;g9Iy9 zDf6LT1vw8jJ5sQ4A(SOEA>OX%%Ts&6C z#f>@%jK>*mew4lJGB?pMhbH733UW2<#{Q2DgoNFDpsIcB&U$AOr2tGsyLlrv)@)KO zYF0H`^04k_6cPBZZBjK7DmYI1(Mdc61L*D44Ivvdkv*qvJY%KK~wYxb}d; zp;nacdEA;m2j3b#e;z6c&7X5+r^?9nVMm@nuVPE1bxT@XD*8W*TJ{u%w=_?+#Audz zo@(h>=g<1rFn?|yLnb0V>81PQ`LjXh!)E5s-zFS3e|jYn)Xe<(-m8Mw*293;S>1zp zy?nlA?B@1ga!1&Y*D+5e!YPRa-BN3hO(gDx_Sl5WgEJ@YVV+Yfti;D$wF~7p2F{I| zx01{`jX%>Bhg>kc5W}4^TcmIFY`_F%nTu@N9yT?dW_3PVD&v|7eypt$71sO-@ed21b+w^oibrC=PFrQ*g6 z+=y3E1m7Srq?5ru-!74fg!+NmkVn|kl4hpcet1*X#UuvP(`uk}ARA|wIG>;tgc9Gh ze+JKypTpf356gdBfSbYmw`$fv)s#MsG8cmR{i=oV!<(1j zk~J>dkyp0enYp>-Oo{hzHSZ()qk??ZW2!a5`dq$Y@s7+*wtJG;nQog@-J5mYuCAMg z_}bfZ2%KD3)h^rYz0kQ_-uzTo>{l+&*N(bF2?MHA><)JW#=9BM22|f+hY7VBS#{fj zd$P80#%@CAlhMCa6(25OHLULnT!R%ua+p-ZY4d0{&WB+GH-S1bqzlk?uKg0fGz;xxic#h=32507Kn@{EI zSW7d+A}?WVN4s?4ix#i1XRE_Dw4P|p1IPdCC8athUZb!G23o2YcZ`Iv8i};uVRz}N zYCwYd4MH42Q*VGM)kQ|;j*`>KcX?)O$-H3GKz5N;70DovU99TF{=$2{2$bmPR_}z{ zntgI~+v@V=HiT02oL#p$eJ7ph@{MgM$7<-x-&n|fsD*6~z1X(pC!I(w(%~yZ@?hwo z5s<@2K><~;A87-&Dnck6%CE(+mk}cLPyO{0lwhrfC+`$pGcX|h9m>)kYz75WP`NsM_8F(co z&^fy6Lp)dSHgR;H%d>-$s4|H(OZkTU%sFxR0f;AnA?wiP+^8IXFzrT1>}nU1^Y5=m z?NCw-IL^b@PuxQESn`M2&BTu7OrLZ*hSXi~W9>x5H5HHFuF=vb!|Z`U1kr*e88qfa zE)hYwluYoZ%V{^Gkp`MFW{AhRd*2Yxb-NF^x@}Mqo;4cIuC5!9H|@^KX7#qpILNOd zUMC0tvH31`r<4>?u7=!<@%z7mu!)8hLrFLf0ZIXA!08>C4A`70>AKkV=JY2ee^Ea05V|qv!X};tv~eWUgue4VcsvRGMliEf~i;9 ze=J*yjaN+Frv)gtHbEBDT&y4pEawFbW|$D*eh$>|6b9 z0f&h!!Xi83e`sHVcM}q@{u+vW&s!-WL!MnDo)#qU>{F7t!`5Av^+{&Ki|jDS2g*dl(9QQhtJ)%67*51gmu7NE)FN2M3qb=C%m5ktsJ# z@`LrJyGatgHv|7Xf`P8zT4O!~u2cCH3vt!-tT|Q|aUSkd_Ad@|DJ%Y24ghHQ!d`+R z1K|OYC3(8TTFLm}{cNke0>1cLo)B$Z?C+@#`j>I=0boGSgkDzW`4Lt?LUwgg3!2cN z55Q)Vj&h^sO+kyatqyUc$tFYGz<0el@@YjNAi{_ccZL<>E_GWJbU~!ARE>`sX}FKK z?X-!_nlq)>!jwtSe&04mEd9Q}U`vmn-}jdYzc2a^zwi5FDF?*wdmFasY}W7FtnYWJ zEbeRqS-m626XyDtOO9{ixf*wnzVTk}68X(npEX8#{OvGXhoX_dyAf3=Rf|jfnm+$Z z!S8|){|Sxfk`fH1v4dRTJFP7_4PrFG@btz?;( zJUbe zYtwgGMd$|dI`AKM0_ynVSKz#Hb**#M?P=-qUYDNWKw?FA_#I;55h?u=(EPtW)#&|p z^NnXQ9Z<@JcNG~rHU6`KABVRj-OfRJ_W31&1>*#fNBYsWm1`1>Qeyp>21;Zuo=i zYj&W3N>TmD!b8R0MWVJK4_m&GXC~i|rZC=Q4!}mK+J1*utZFWw!H8wqf{MvT%Q#!* zI>C!tR*r$rKeZp?yI)|Gp1PIr=F#ek&Ym>fwb_lEO25XVGOXp^{U-{4pk1%Q@jfbR z)R~;ch5}c~N`p~${|2)a?;&FwU!V-%{FL43@!PuF(Fq~&fn_(oR|=2g94SXgs7mMP1r!$a zblMRTe-8+B9!+_e4I$u%$eMat!$vZ*k$`QN%Wl}=F?=HhOrIp+g&78}vG+70mc){1E=IFbRgx?*9 zOt&C^Pb0;b85L_>gr;uq&GrJ~E#_&1rGirUE#O%-H@Ez)5tDMM90yglZWcq!!I#o^ zAxFWp#XPrvh`wRVOH!MAZ#id!9q@%1>bjXv(>R@-t3sLZYwfbeAf04d>R`}id z+4^q0+*RYrX=*(8_R}Rlkf#D^4k9)h;5h@C&Psqj6IPEk#JEA?pOELG!U}Z$5+~5H zRprYo`uI@qFfh-kWW!6QDWO6;0n;Y4?xC}l*_KZ<3h?V(FrqxqGrX@Z=Gbww5Z6oe zHAJvygK&9!(ka3P-V)J=?Fw)KL=Bcl`H&l*{2xwznDiOshA%OVeS)E@W_#EI zxWF3*oO4S@Q&w~q!c&T5(B(u2M`7R!{b;U<4w%nANaBaS>F``iJ+;W;nVKLDDx3p^ zv>m*G4V{u4p1zP2BhWpprx#)G$;IH|xWzeiXt^wziKXWjcycqGo@@+>(~Kt<1Hghb zT;#!GF$_-y+pLk(8SWXDs^*iUBqpryYKF=<*UA0^Q!LG7SW})@#&1_B{>`$SuoZi2 z1q({zFpbp`M?2)cN-l==hcPHGDEwe>b^|I-?{EwX8#Fkv62hrHxlZqmP*0zhTx@u9 zZp(lzd`HRO->$HRy5X`8B=;dC+PSI3fii+;Ryu{(9K zaV%DP1LUpBHaABe_=*HL^dah{nCI9gz$V1(i(h=#z?fB+@}5sUQ+_$m@6b=o2G4hm z6e{a+;vCd#2#<=jwJ1wj@|Kz(g7ZePod7S#Qz#;!x~n18pdb2r^fG)CTR_z}Z2dpv zZTe;Vpfk`+JX_7YD@g*}gb0M2Yh-Sjgpk&+fm0~{eLYV@IkVGMEW-LcpOeS(X-VX9 z3=d0dY5^WA8!Qtkz2cZ>r7OPEPhrLR$lon)OEJb*0$r^uG_m|aH1V4BBK$?wjyM%{ zJF)eggk|FJ92EI&?vkX0M^kpAQZbg=iR4kBfq%aO*~Rc+`-paq01FdVw~+oQ`JcHp ztW%c+JLTDK?e}&XJJ(4%XTf_Xd%*@_Z3Ue-Eq-_UTAt#}teb$NDbWtr&thnw%*Wdw zA;nO&4VaLb9he4m6#`A|I}eT0bI@#|vn}%3SwK@IjR$goy8CVb!K9-eZ2tm<=y&tO zdzv8<@IT~oWEI+(#7cE0x($1d3}J_=QKxz9AwmiQ>pDu`xAdaTrJ_7B>Ok~S#O2ZJ z3n%cSn*EUptV0r>ci88moW}Ph)i*@2hpU}3A8`0-=BuSz5=AMX6tohCO!MD$m@}2~ zX|a+|`B*9{`bEXwdUTP*xm&&;4YJ8T{N@B^{=MCA%06XOwrVOh3N4HbU#EoWIidL% z`zKVL%;)Y^41B_yfEdJL){D{ZmhW8nzh@PJ?3~_v%j9cbIf>A{vJhV}$PeSD6rb}2 zBAZzJ-&s8$T5LywO&bhlU*p<9a@JcxprKDo((T7f#O> zr{_bn=3!307|&_c0hA3wB~D?516(4_TWaR8T&#&SIHF(tv_MG?q<~;Y*=N;P^Zg;b zAKuO32Krdj_#v6D>TY%!CRBHK)~zErm4eY#Gl3-Q%J2@$HTU|oJCMoPIk`0f(3#aA zEB3IC&PdNs3O=if4uN-c!=436Y{+wOGQQkdzYj-K+;m`;9ly;QRku2dPi~Q1Ic5Y% zj3k%0hLCl6AEt8R@-8CE3UVqAwu~#zW5l;gu;xvy-$bK|qR8(F&} ztajV-X(F_cB79-T*;=OU0X!032=7Bg zht^OjAbT<9Rzy_+GN?~(I(EkV*y;Jm>G{TNGc!aH1)e@eB|Kzn@W#46gJKIjv#JSf z&#YvC2>er!)iSQ+8j|rM6alT4)@EH%f*qYy09qhwHlu ze90EFKTN+Kx?1}|1v!}qCw-6f0SETO=|i?D6H@O3xulx)^}O~zOoH1kBavIYqnJj> z8r3*c`Zyq|K(6v~-tU2h7SFppYq7B^c38D|*}oH3rtZRMyxS68s5lT8Hz~k%LYbdW z$g(eu_D#=z*-L`xNjHxn|oq|-6fnc7QMc5z++x}uJpaVAF1(+oJ+m^MD>5rV???42- z=O7<9nf*ZcbqI3(!do%c4@i|~>j$Lq+nwcgQRKpvJ|tPo2df{0F^mD|2h1|`Q-%Y^ zh0sr>I+TqISUln*g9D7Jo#gkJohN~tB^_*AAkMbjUQqFCTwE~@$5tQ#c?~m)PYJ-f zQa8%8z8;7!*eZ9TKfwHCBQCCVEKvt%#=#`pteX=s7I&RVwE;4Aq#1PO0w7RW9KMz~ z+~i=wN|cK+Y(qEUaMEk$^p7zz*OZi*bM7Mq@TS$Cyc4(~tbyNKAA19bysCjy%nO=q z01<6;{c+U1A_?6Jz*8%IK!3$q=)m0R^qvN{Ur8%2KnZkkdb`wjy*CDv(pG+Pi{h=2 zPtZuQ6`1+=4c}V&4QA(9SZ)?tVSyz%+$%XHQ9jzLp1^bkYYf}_Et{8tyZx(2z&abA zjC)DAw~#Y#|LW1$<7s$u&bmIsQFu7!(gnnDK@EG9bGo!$YcSp9N(J=6xw5_C(4 zLt(kYjzSU7BZX|&Q^69Lg%V`@KQ7&02melp%AvGD*GCxOlF5g_w}n=Fnr{&{P*+ax zf?9#XXXe+4eFUSTvv`+N)7_LTs0?B-=>N&=;$K`Xu8B@2F0=y)hSph~KSO>MPBg?? zU6rk*CjZ;MKhzk&>PLOA2z8qyagTHab`;OhS_&YhPK-{Hh-Ua z1?KMxjciUbqc?=QB@}N(mtgnouryfWRt17$)2pumsoXcSd%aH z4r@~E7r^Y#(yXQT3{Gm?8q|;JKdgKf&k>HPIQVqubFV5r8+HEu8ohs}k-5QEHJk5i z)UL}(j}15~4*D*voKV^oMNcc}1KGWy^yY{X=V|{>#lh>ZOkau+jxX`m7FklTcc|c{ za4#Q*=R(2r)6!8?fj9!I{kn@Y)B7ZNceXPr$hAVS3VwC1Oe$?TkMifHxp>bLX^tb;dauqi9KOO&=hY9Mi z_=mN%6|k7XC1A+J)_y_QWlIFuYV)h~js6+<3AL@{I^vvr!re7SI}R;B(0vmXA)Qb4 ze(e8c;ry1V>lMhAe=)H)UI~J{@p6DXWRHobm}H^+jr>XfaV_@0+3fUu2J?%YabFio zKnM|oV~2v73%W%9h0_a%F60?EN%i~`XpL+HyvPk>XRLC1Z^0aYi6is<(y8?LWK;a* zOZu}DuHL+AXUZj#f*zm?aq*r{KsuEeEhWCKs=tU_v}Id{a&)AnaUR2@!kXZ?#FV9g zMz<97r1{E%gfJrnonB;FJH2Rzi4p)_U|b}!8o`awo$Lg|@~w+c&2iY`gNINg;w z4mwdbf~K;-uEyV!@zdaAKeMevKe2ytr-&Q=R`^*77tAa)3MHDvDlf<{}X zjsMC7{NMv8{K|l+`ADf*rQ|nkyC4VEm3#;KvW&F{7J`3X{<}h^7WQLwE{=$W?w9=$ zGF3#Hpi2{iQIUa2i-w3v4msue0W%rq@*5AcaR_$E1eK?zPa3Dc4AKmIrPNK(bT)QvMI1=>T!KGQHVr@_+j161liBov0K<5P$F-kJ zIND)`4l^g*b%+Z`Fh;%{Srjx4$4sD2wr&2pHa{>EG_!6-#~jUKzm%A==S^S_ zWkFk1E0_=DRPHM2RRea5$F0Dnz>|FeP;kN82!1*vPw|tl%WFLZ{*nTd1c{pYk?rx? zt{a4#+-rG8e=uMIc$u@+JYbiZUO)#jlzGl{*v-%pRzv} zv<%vx)u7Ih^FB8T`!RZf4g|Eyv#NSgKY{@=B^O#-9^}pfC^!%a-T}EtoG@}A4nbmhR{tPxZBHGrENa!ph;e=hunKP!OC5Ycvb}&|%z?PaDgz4HFP$p#XIT&VjF~_BzaEYkvL~(^mXaUhn^r*I~sDYqmX_O}CoW zZB~T0IsYECdH*ZTws|$%8LHYec1m1?S-OY3K=(y9?1uvIgI>-C z|3w1L7DZ>nlYqa1%t1*L`l*4Ae)WMy~}$#c_*&)A7q_f%pS@_=`-u4 zbTYoeN_PmAMt-3#U-Dp}J4C^L1Ym^CE(TE+CW0t^@sq2dT>|tMn|J@^(?;7efB=-} ze_*8{9j47RZZ3U~ zbjtcco1oFTY{T#(?D42--OGd_cfH(weTRH4+|4h~w@zQBw4L)N1S`C8b|mU_yd2-m z)9EaZRS;0d$#4nAn2D$9||%@o>mHo z&)3iw?r;_Zhwwa0n!H_KX5Jym%K%U}YKS#rf*^Bdgc=O}||FFM$&xy7e}0 z0(`&N?q81!+w!HV7H`&!SIEHeGx253Pp-_m=_d^Fp0q{DFZfTpmzw0_Z3sn`wifXi z7+nCIe1f{1XflEQ1~C)+K)c~ny$a5n3dI&+)%e&4c^_Tp`$$g!!U%!vN(3wiV}8U$ z5BalRCivd?O%YXw?(8e|`(KADl3q*sDWo+IKM6tAlck!iW z#-$IXt#J`(SHN>nT9(2uy0P?(2#{IxH=fukpOY6s!*f*)IK31XhW7@LswT=qI}}lR zK!p}f8SWW4QfIdEo{j{m!K=1%14RpbNB9Ec?7){zzCncZX=q4H7@Mfc_@`niu6g7Cu7ay3`8~K@Ua#Ercl}Ckq1d1-gH~z^r=vQ5% zHV#S_bi0uc`6&eEAY+e!tkNZov&?!+`;E z@<9ED;Ze>~k2p)+S@AunX3~dA(3yX}D{PI6f~I#oe7HG9csbwj6hjrBRgRMGtj(A5 zO~h}Ci1LdH4t0wERWQ{wpqgL9RB{jyoD-Q5>+gc zFOMMG^I9!`d1h_EmpiL(u$C40ZGLcP_y~AQ&`@2R@6JkMQ6>~D748b88s14TeghQTzDCz#V_WFuk$@iP&lnUd{9$lIM2*PVE@L!r(vAHIVixRg1FWMoFZIjio# zn1TBYRnaASA4-M}G1;6OW()5iDT5qf>rRire0IjNacokN5J(Bhs?(hHOe4 ziW7I%b?NNpdEkZZWqolz_gmnFP`gx?MC|By(E@jrz7*e*w>$w7PUS66fS6Nx%M&2$ z?6RZu1a!tOJ4#Q0)U%IgKPKeW;PY=JLwDBaX>1$@((-crHiz9VU^3R}$b=zQkcy(SZLPnJ4D6TcG9&e^9Jd`Gg%YEeg(HD#}DgU&}g;uYvM75c8rh z#Tvj2D6i=Bb*}+Q$n9_|pF*o<;i*dh%w?JXNdFWRi~czb2*CQ6FDXM=@83XaF@Ors zG$1_XOap@bi|aT>`CR(-1B(aE?H zesO0_hrALwB>B3g4SR7q7~2Ccdgd-h545Buu~Q*cVL%cor2r=)j$joMw~_z14WPpv z^+cDfSZlqyL+P^mXXrlo&pd@|OkqpneCg;MR`MUxqV)QN>=T3hw_Ap1Bw;J0@;51= za3-eVt**s|Y?X?gvak=ux||UR5ulX&P0~~hHYVZS3Qm2o)ZZ2fo{gmPH`#AlbvP*3 zw#-w9AMPJwYq)(0$GcCO%T2BxbTw-T@i|x?XYK?!^TMyuJ~*U|<&Pg{O7ogCm!Qk; ztko9*b%>vlH!m**Z~nMK@uqH>yvdT}YrYK{`j2^&Y(juRoaH*)D+KDLX<;0D5j(|% zE@4rT?+da2q{|a`IM?1gg6x;LkO3#fwfi>1j3mFl2IA*zuYhjxYr4FUbsJwmM>sgd z=cdvgr$uuYU-HFY@D1kd0ZRZ2YHNZuD?$W{K!z=}Ku;d%y9hfjPrs1;O)!5c5W+V+ zc#J(_x)iV}c#?cshZwBUtA2PIKGXdmpsl&Buu`yy z5_1yzqX+~@s|C?Jy+grMGn2*o{0YgaNKV9hI{3dEw+WnIWL=0*-9-$sVkgd}zsrG> zo>!Nq(ClL)OxR1MBcDCNqW(bzymLOU3PYGZ0iYg?J*pI_=Q4m42I?n1Jw*RGP%CGQ z=*n>HUXb?SpRwH+&;I!0N4$Zp+K0Rhu!CD4R`<^Q3326KxL2?~CN`S{ArIE)*a13d z!8u9%c4tjIpGW}ihb5Tp5DJob@(9pK4oF6ip<)UWRf_wqi^V+L$1vC4L1_n95nIAR zkA@tWc#*1zCwH5xZw6)v*xx$YF0=RLuC#GQaStAvxmrE z+(~cQX0yaj5sAPE+w&HqU&GN~mD~%z&J@&uyw+KK$#NS|LQ-fWSSg)+RL-QKh$d3R zZ3q5oct?qCD#er;Qnq5P^|BV*NA)xGmc{`3Yq2o=>$yO$FY(2*=in>rX@;&evd!hY zG)X^#6f3KPX4kD2{wIXp2FVo4yK1?axk?xkPTs4ePzb`7fU@29Cq4Xpe)|${{q%}Z zey7Bz8Qw6wm>Q^qjsf_;#jJZ2=l&ELp7z+ku_TyMR&TzOgsLdRo+c^)0BMv*wUl6` zuL8Z{Ua=TYCH`!iUD%EVYZgg)Sg2wWAd8qq;J?F8Rq8FQ7v9DhD_2IdR2gl)E@K!r z0%b43ZS!T34I9;>IbvCapwz6?iU2(A8`QEeK`G*c;aE$My6aUU=$=i$iZ8y`Cs)9` z$cp4CXpTcN<8H-M>s^FruxeE`L4w=ICLwQR@E~lysTjA6T9ndk;h@Tf{b5(i)Cy_( zKXK-%@zR+Wu1vAse_NRn|Ff;?`BsFa8b%1Biqyz6GE5LNQ3Gk10Ek)s3uh*1p(oy_ zWVGYC%bN|sh~+ezIUL@5YXL3W@?wKc6bcwVcX~F%F$np_{qL*Zh-dqXnV991Q$Dpw zufMcaLE(t0>F4dzz3ZHq{*;z6i= z|CCf*r#U?rrZ^GjfzV_8jT7>FPN<`vx_(Iddg#4S2Mo`GC1?Rj+$-?q&dNN8!V`1; zlcZR4GdACZ{A50n;hDu-emBRYsaV90IeUYU*3220Dik*s74yJB;B_&FUMN$;BNQ!cK zj}}Q$p5fVpAE-jkIuai*tsCXzl>?-T_>ikI?W{o=SgfHVts8rhGO*08dk6+aHMZqU zzXuaTMq?5N3e-`}SRWv(1U5+qJ!wrwijpxHl{sXqszP3i!o#Z&tYLWQ`=@9;FiDRz z;ee(M^1Bh_+@T++Or#|Cl#1zaTzzBjq#*`djIC zlr*b6i(Wyl&Ny%9AtV5l;}y^^MDt=6x5R-j(R@F|A0mGThE<0pSe$52w=EwG#ZOPL z-r{5sX=+V+qrV+}jlj5w7*IKR&b-XVj-e%P)KXoUvV|?9L6hIm#uZ86v@tveMvfv< zfKo>?mPNDw4^B@aNfaYUiTKkO9FLwSWMZF!iJi;Pdthn_G9>6j2IE_^EY5j_nW*^@gDsc7REl#y2*O-I2l~^hHH4q_OqUH+h66?9<+lzWh=TuA{k|IKVWZJ= z@ii>vi+}lpCI>KSY{USNyQw>z77jeI(%b9i)DvAY)ZOs0hXPPdYk#1;eAJJPF2JZu zm8S0*S%_|a%e5B1#M+CfnqUbfN|`6VEyi7GPL0f|{Ie=;w zj-u!~(O6%>pZwEq2;GlhcN^E&AWdU>B10215SrLfx)J;Q!Np6VZTF$qck$y&rn~MI_yN>jyqCW^_3jea?;r#p3Md07P*@}O6vwx`EV5Qjqa3c8E{)FOR z^^E*`eU~8rvLN{Pooi`_%#ruP`M0EFIR9F`B#)Sn)C%p+V-tT_q$c}5Y~Gi6Rdv{8 zpWb{GBUy!ob|nS+s#>pLt=H;WvsA4E?+mMTmp!aw=DVYn85J^1e&QM#U)D(%kXDsf z!8~sZnnPeIk>Gw91NV3PiMWU`hK6`fuZ8O^Rfq747!_WDvY0t8>u>8wZD1lo!Aj+r zh*bQJMM*e{dBS9;ucd>bq*@fF7Pvva)y^8&cCR)8TM5>}IkCGlx#Hm=-uAUl&n~lg zB)Ot9vfGiUy(>^oEU<5eXL2_F!>9a;ynxwbScch8N@LqDF=I3Qt-%uJ7BE(g3e-P+ zh2?Tvu(w&~w~pT@<6V`4^cj3C+W(y=O>2eK3ypEU(1cQK@}SUEFD5o1!E;&CyJ87{ zdY4eCK$bd`QS8;?@?zs27xJK>eB|TT9lV7dvs_5!!7Z3#-o6Rg4j?J0o-#WKjd8~e z*M**IJ&EfLCtWKiKgl13pOxR5S{Wh3Y+LMK+l?@{eu)&2npSCI}N zTu!>QG1!3|l|!tm)$pM(VtX(nkqcF8t-tV#qZ?Q{fcMy^ee$gm92^QWX9dTg(zTEw zD#PIVRvC$&a`lKv(`o?2F@WI+^~h=lYsQfV&?z=pP?H0%5(XYaNZ|bpd`GHzNAc2Q!T#vHZBv`Ee$wI2X;@(YE_}?Id%ajir5xA zZ=e(muh9nFT??x5!{NDi1HRl@iAiMXb71q;<2M%J?B?S*W&J;xhZgASlr0c03{#Ml)(CnclijDwt~Htjo<0)jWi;V zP=fW{%w!;%q%EJ?wnC(j56TCgQ6xj#xLiasE+*M|mCP%AsI#FbiNMb0J$$IMp(oLN zn@C-KQl8-zV-`Vg)@XRe`c)o&)GMc`vRZYDDyvnesIpphiYlvBr>L@8b&BdFWe1oe z-&X^8m{n(vPADzF+7#ya*7#rHEdZ-pTGc=kr8ehHKnDBsZm@JhRYa{8HgCEXPb=0E z4aBNe?DWszeGO`5mG4_275eYOl-lwUHBn!{W_^iI?F(DLP~AqRR8y6CU&9*K31*_v?OCKPAm$N#Irbeob|AxM8&vrC0|7^~`DplV6 z_I0HzUP+|NE8s=Jf958fPqsJcS{Bp#eAk;#A0n=U5#;|MhfcL6 zIdp6*6vo_*rv6RO8xhN%O8f%j5xDUXOgSfW{RxBymYBAH{WZo#aOhJbuty4xi>#0_ z9^lq))*fEw)sPY5OIyW<8bnM!gbHs*x1*BitUch6F<_1oJVke+4?BVQn+@GCKg6b& z5uGSCEM?O0wvqs?uZur}#J&~E=5xu|pK>*9Qu-Hn!SJy(OA=LZfxr5p_o%Z567^Hl zyH%93dsBB!*J5A#dxukVl<*e)?&g$orQEGWU$POTzInbP^>Tr;omy)Oy;Nx&0J$%lTM@*C1j5Q6+tmRMl>LiEH5zFL8 zfKW<6Ut>$K|39|*W{dRIo0Wmi5|9`;h1b0NnS)r@ThjqJD?NewH3`r%y#nx! zN8TCgJst7RokHJcgCXdpxE<_ixk=)YH%q5hJd9dmZB^Gm{jmZ#zAo)HU4bclr>!bQ z;!(;9!l~t6>@Mgl2HJm_HWqd|I_BI85w*$K>Nnb8xgn0}^tT9JwG3V*1h4GDt7Kl) zebdUY{dJ?Uel^-}G;IB_5WYRK)*P`aXJLct|E{-xYs5;JPSJz(Kc?La!jzyiB2r~? zm`n8L6*YnrrF)p$UXt{EuS;!NA& z8l_vP;)$P64Kvp-j0K-yI}Ox83b*#9niF(iN;m15G;`2RQl1h45uVF#?1;7HmaofS z-yeYdh)a~`qgq%@lfulu9D}1&ry+JlTXc<>(gITqz1P{$guVBe{B7dgxXCZz9 zq+`)Dd4DPll-2w35*B4?hh#$kWzIgb!QhznH`D_E0nhc;b`JnqDe zf5F?nzQTPwSo{7RM%{s{+`BQ&TB-_iWHuq8HmEo}no`S>m=ac?Hu|qSzpD6m34WU$ z^pC}C(-+^k05SQM_bJ%c^F^?&FnTODSjC!K6mw@CXiHEdc}Mx@$>MxJkSy|dYJY-V zJ)%=kKUFzO(C3h!4mHL^=u*l3n6)w-&E{HIfXKWD#U$%bV(C=s9+vS-{qCpjei90Kw zRg}hqb^`2BHEx>U_YGEs`!3HDylboEeyL6`TAQ~Bzmce3lHcDu+D`vKMT0B~KgH?m zvgDL2aNfvHTjfV66u4646Q0XTa6Y%E_EFE5^Z6Opb6Ey$=lg5*`+vrBatnN7V?!x8|HKil+z?e}mUfr&>@iT;Cl8F_9zKJ3MXyec$b{OBMiL1^jpmosOe zP`=+vS;TJOJcOSCO>A7~`9bh+_P#V$7J14p86y1CP|)o60z~Ezl)s(j!3pv@2Egjf z*_Wu7I@iF>AFFoQkasWQy9s<(d`fap;vzpkFETgr^{epwUL~=}lGt7p;?RIQc33O2 z175R$q`X{#)6E^(YGxqpI5U91*b8N$iBcz>!$zfIpUG<9ek$IjkZqpqBtGXWx#U?; zD-GXEQgLT}98Zye__}x;%-hkJm>S%#XBJ5a&@4?BiwTVq6w+_4DDk|fKTFDU6r{0J zl?=RLu?+mA*D!FKr>TMGu>+LPQ3F@a z^R!oGpPo_HLbrna!vt3MkZJr&_g3nh{rQzWy>OaX)?(a6u)!qjroT5FQFxo)r+#F3 zmwHr_4A-{_f*l)d2%}ikc6}=u<7Lsvqi2^iuvl{{cy{K=7D#T>yRf@d-|t!y_NEd= z?n1k7WP5wpAaBD&Td_RU%cY`DZbI7ac>4YLYTkd71GF{G+*QsQr~Lxp2cudKw!PU? zqrM0FEs-k~r8ZdsL2I?98;KVxC8{5{WQD`y4&P za%Doe&G5+4C~`Q&uZxnSE>T_Yb39KJOl!%68gguQO%YKcN1#ixZX7wrC#ny#9D5u8 zz9*Xtb?vsOq3B(8cKKC}F3Gy)XmU;q1thB9>mgKQ2C=)oqp#!tKEGaho5uuMY=G4q zHZD)jflU>i#zCeXFcRT-eU zyK(@@IgCb|V3VjGqx7VH+EN4QIqkfUJaWcGt!*p0(>B6H^^w*Ae74*sQvA321dsXh z{X5r**436L)LB~B>oM83Q5Uzbf5#H_KU(#{)U#RN^nuzkK2Y0G;paFD)HVXwOvky> zgMV3r!{fk=P}FcUL`n*XmyPft+AJF((*7fwBvRu`nR+xpGyCpjA#?Qix=h+sqgpHHvk3lH7-Ip%_3FHn>{Zib_qZwQ9?`LAGxnhkqHjp$wuiSgc#uuJ;lKjO(T7*X1#Y`y~=GV?TzAVYo~`SXGZe^wxAI5S^&3>7t*H%@K&ke`ErYdH~>dw95xBJ(YyQW9`A-#vbf< z+#c*;L%ACtZJt;BI8l5xt)Z$eI*|of@A8^l-f`k$+kidNwc=!2A^G?`-;hDBAzKP_ z8uHqQxeX!kS2S_sg#0E%!yCu9oRrsiVzz64`H6My&u7!MJ$#9kuEckb%_%Y6rNnf> zZ-(YX-&_5bCSKM@w{+L&dqvwBug2my(f5L%vc{5S&Jht8~?L3{w;3&eSo8q`*PIM@gL-XoeCOH zUi^Iu3EEu#r1Ia_HUIW|bMlwx<`40KEiCl=)EZzH)mEx_^0bGbfbGn{fscEqM)G=^z#ijIzS9n_HXfj(X>YUFrABHTiC+Ob2nV9=4+yj zs!i3oK7@e;mQEeOvShz=i6roJ(|c`fJbv|7?LRJhjSGQqGlg1oOH_aFGXWI)`tS<; z!&xRVw*wa9ljl}|V2wWn?<#Wq`(_M)zeXP2qahh(*PG%;p3Avj2Q?(msZ&a}S(gNN zJn#Ws#8?AT5s^>8CjRfIstBF_Heq1U=BjcG(v(o;5Ztv>JM!o`(cl}03-o=LV}~?@ zvPugv9SyI|N`Fq9s9Nn7GlN2IowX+h_YV$sd*5e#!#>3&LMRFmB4MiyUf-jAv86i| ztJxELcsH{<-S={#167%Fmi8OKc^+?h#;QDT#Ds@XgI7Cgq*cPRiJEGb-_A??JHo&Q z6MxhJgu;bBH7rFFgX>(icQ7_8%tR(iwrZRh<*TXpjSj1c>e*FenbHOG^QdMoU(GyA zUWd5&kU@>LH|5kpj6h{L4(P(bwoETe=drb1!?fzhhW<~EsYZSZHeB!Uzsf*ZH14=u z{C_V8|J~fVnan7HkNb6Cj}Yd!loKjs)?I>i(ZN60=7%uQgZKEOAJek|L)^El;y&u@ zIq|aw&_Lq%`u4?L`x?oc)!cuJw1BZOoN5c)I#Xgf80^;_cd*vzc`y-OZn;l|Xh`kq z(nlWMrvYIM`C=5Z4`FM#LD3@;6gSKnR3oKM7kn@m73;z4Ufp5BSOcDqj3csdU9ri# z+;EUZhbWUIU>9<-4a4I(wxHvlWdTD+P++0qM!y=cf6vrO+1f+nn`-u7jC==(KQ1nz za&d)+ZIWteNlB~bsa1Y{F;yFI^Bz4@X<2I@VRAD@H`2&iy*AZbMxEX8Nil}hx9{)8 zkc#%>qD4uWqEucibzNaB#qQmdcJDgIv`VfNjw#A_9U@ZCGTyjEb)LG~xF0?_Lt^0?wI*FO`NAB`emj$k*(kxr;-xcWIZrd$ zn7^ORalD5QUPbPl5PsGlP0C=c(xnTY8AZ+SG`pJnyPAJFIEQ&(-lb;xEMPe{*XD{y zs)+l15f!e89$RyYDDP54xXKmIQW^Sx)v9c%WQ#7zht_jRRL}p|bCZWw^BfF6S_83{ z6MSdul{c{Yf_Ah^zlv9_pL#l6v1~YU>F2$API^bMK2-(0{v+%0OSLrjFOyx5%_TZr z^n+eGu)a3Pfi)wmfn#yh={Lf^8FAh))-nv&rjmu4To8Y?8dBJu&AL+28uYyve~R%D z*wuMwDU`-mJ;Q2|7K>w2Q;FZ5%8ymOH0j&=+-}LA57olSO&p^0l?_fh)i<|}e&a_1 z7;d-61bvS(taZTZ5w_+Q*VqmOhq<>isrH)8{P&|E&}YVYyI6v;RfaU3>!& z^Sul+3&oTsEEluj-?=BX5yd^IY_hmYYY?O}e(VOuY=e=!2_f{}(Qmm~`lRF4;Is zZ%!?$O&z&`+~3M`5zXGi@2}|;lDE#X3I$LK+;6sN2ob!YbA z2gP1ir&RynErr0Q3)T&(<`OSEHF)M?AEL=ktdO!wp=%TL@nEU%csQGXrpte4Hvi3k zNB+zN<0npkzV0ib?s~=tJL#@cWKCPuqEgk$NvCKHJM!qU!>29p`)7GzqklGV)br%8 zMXR2kbODOG9E?kIB0)6oG?RwI?=f$+DdT1dn3Q1_SwN3zcL$f3Vrx7D^E( z@u6Kg=|V|vm143mQ7Y#KCMxghvGU?M5P$GtJ8b=)kb;LxkgAmVqL9_%NfhD|McMg6 z?7?26cC7U+K$kD274w)3!M*&nb(%$jwYC8>w1Z?W0Yqve)zbvgq}!Yrl@xjDV2+$w z8r`u9|Bh8R?1L{sLsgHa4(l;-iI#@F>ym$tjbCyu7tm%ma1{Ioa#QyLrspTfjPt_bWhhk3`l|%YE zxc_=2{R5go`0yk58rJgH{H6@KRx4N4-2s=T6BIYRT%xm9kR%d`pXuy}a-~Y$zLJa1 zH_hCn?zCHsCSL)Q*Eq_w+im7fi86D4IML1AuaO#FmYS5q4i0$JX0FTKr6}=qS^8p$ zCmB`0hDSs-xQ;c8&(C-nPBpJv>F@NjLR9CU?7q0v-ICYud%$&WYje{aVag)!nTZ(@#KSk zA#ru^l@|mKw}A1lMU_yWWsU?V#V0yFvc~h_U+~CMi$%gqtOpiAO`Y*a$ShJ-0zw1m z$S$q}IR#Sj>Cfg-h*D>*iZW2)hRI2^@S5Vb=x?*p#`5ux_6t%oKhYxf;Idm8d|aqf zMW6O)1#Y1-@L?EiY(3SApHxtMFsd!c2{z{Jrz<13{sEpLTu~F`nEO?T`I{{w(%*QC z3r4Pkv(7Z#pqZJl0&$C>%b@oM!!4lSj=t4uDeFVnbZzQ8CE8&p#FLA;KcBv~>VlHU z%rnKbXr#l&dgSR}h+5YYPEk(d#k7lpVu`=@Xe!{QV{dMIH5CCro|^W_>`Q*DNwdk^ z%kz1o{^@%!Ch=rs+3d>x`)L7boxugMeJYQhpsPz**hmTkfn*(T5e)N!F6JpAvCd(}#EO_Dad`i%}AfIG## zYEhDO!AFBwKpORZk&)~I{9JuPlA6br|8_q=yr(pE$x!y^`j{=g4!_CJe`4zHn1Hn2 zEKXae^rdUL)R9 zesknGzqDR9?t!Z7NpQNL*MFXf_*8@c#+8!OivI99C#Op#WowU3^H_zkH7$Sg&h`9^ z@@VQ>-d_#t#W@GRwt|N!oB89McZ%x0EvntqJ8DkJ8}=BM7((K$A=qW`;wOW_1+V>s6B{)e5CX}>8Wq>x zuA?%BR*qEs&fvTP>wTz4`G7?f=SXANT})KHo43PP*>3&czF?PP44owchFOw8ktl$7 z8m+6B(+vQ0rD2A5r)9FZwk_~-y2}+*Ow4WYM99UgfPAw23O$MZ7fH;5ltfccY~*<~ z`-DcN#;zzFnHsu+FrZC)C<=0BG%3&+fi+NA;CDhl?zbv9664gZ0Vx;?EiSaS`51Cp z6!6&Yl72GVSn>Ncu;M*0cdXcasIct+Zw@QIMWG+VB0}PjY1#_@CAQ)Ux35+8xHFC= zZY-7l`V$)3VkT!CMOt}Kus>F778p{s+)$F&sPLz!LX^i;KwgRP9ZlUbpM;Kn->O+f zY~A(_jEl48soSal68cBn`o_$c>1Buou24CWD@6#|jw8r@7=MR^)pE~*woA=DD=6VT z0n07S;PT-|}U5}>cG9ficS|Te)|+^V2a3WdGJd);9h>(g*0eX9Y%0W)DZCG ztpY|od6Qt3sQ%U4Uj4mwF3-WqrSjAvmec8l@#K&6ip=B5Jb}#P2(8vk&K6!LswZ2{ z;%I90gkbO7Y-dkkB$NhB)yR>vnQFzl$UKKjqWXkvwMr2@b8v38dPNaRNfC4H=@Dh8 zly)wZvXV=p`s264#xLYKm_;e(<1QzMNA-%KAZ(KoYg9^6aFS2)uzdKyFdm#IZCO;% z7HSM#uL+KO#i(&@aBBiY)mr4eR$_=W+KR8;nP9;b#*i36_^0Al0x@cci5Trga>)-G zewn&7{K4=KAxoXLVeuxgkTy%(GOM46B+Mfs{wMd-16Cc0?i^OyJ*H;%le84huMdC-OpYz~j~%Rgn% z`Vo6Lf&cmIgSHtP*srmI{TeGWN5Rp9pRj6)f3AMruAm9MLRD}U+aa9}sS`(}YKk)-Y0lWW?M=9ttx@1>WJ7l}`>IBkXJxD6 z#8a+d;aC~2D3SAYJgk%1N-D!v_k8nBZBz{|yT>Clq%)B8RSX#Z-J7cQj#09U&$3e3rXW zK+Cm)Ga>lJEg}_cAJm5$^uP8-T$il-Z4~cm0|!zimvruBefPK+6qI)5KKc>d7bgXeo$SJz@6FIQjVzL<__BU5Ad z0autg7M~?^CAtgtpZI_$qf6f4G>@_SQ`m=%oWF5KzR9O+nl^%ecU&yceH3gu+!e=| z83sI=St^VsTXE(w?rM`uVgt6umTc?=Yul}`EmpOr@yOcrFir+p(?kT(g1xMuwZXle z1%-p3c@Cj>WU6sD+V><&w}#(~C0c8hUGU~ZysRWxk-v-2LPjEZr`nyp^Y{xgdi;&H zG!H~;`Hs*trE}N{SrymBhkG4wIBOm~aX@aPT2Gy;gQgAENxj7PPr}ja;Pri6{Gvvz z6@oAAE00$7f9XVygW@EYzAtj))ecC+zQ1}!L1^JhBg$%wD?9#n9$VvdoS5EDpcTPL z?UmyZeAA%{iDglF3knmNB{kZAtL>@vwW%5ce6$8+iKP~*1F_Wntz2jwjT`YiyUfW@ z&k2k*D5*_@6V+F}1`$TA|Uym9h^XAXxGyOOGd3dNi|&vpusGmaB#Ha1GhD zg)7Zu7o_yj8l77T;}`VK3(3p(Kombh^6zSO`%~_M4BH@0+obM9Q^l-Z753z=>Y=R= zpr&DB(Rqwf11#F49<=)PmUMobUCd=47yQPvV1$J%VD!JR6)mhcYG~#yL{5gy#Xfp_ zn(^pYk4GTdb|EN@?`NfoNEdyjue1H8`?su#l4FS-DXA7Q4w7o2BfZ3LaA2%KzMcwZ zi06zlL4YvKhFKPq6; zOPA+u$H&9!aO+g9b+~)%l=pU5tpbuReGGY$+7NM9qsi}_GHf8&oTKdcG=lSi+?dyY--slnUFit-iguuDOpYe%LvBW(Etobybk}8!6<-Vp4*`Nj~Nl%Z| zj2Y2dGsb^vnM+c>+7*%0iN<2dOyBBn6V*ps;}ls}vo2V&UyeLu#124DYJ&3@(2Qu|mq*P|ahR_Q8g z34bqZp2HKZkZD<8p`!3Q!5+O3%ulFds%@}+*d?3lJiiN+z9U0HA{a@j$YI&6`~A-LmRCym+o zB=6Sv5TQzAlc@gDOTsX%(Al^Q?CUjAc{I3j(Z(W&xLLHw#_)JZFhFN%yhsZzc;O7Z zKs4jPQ?Pbm-`p!gz`FtbRseK~b(kgQYkge|N z{!#5Hu~VVNM((~DQltgkq-x5}uVaXAj(*j+o5*O#p)FI&^Zfk*%ZHaEB=>OqWAQB_ z#(q|c4h^zmTpKM~)3t4?06W5N))l|yCf#>Q{;)juSFyi(o++iijO;XNH-h$Xi7pC& za=ASxitUmr)dhjzy8Zr&>59XdcjpBR4pedl5oby;8`i?=Xj5rNVfcP%e$&~x-x_<( zXzw^J3stSa1*cwbAcJXOB zU`latUr!xSUIS!yG+o-ofS{DYf4`#$S?Grv*%|CjC9_8xvyFfEI_u!K2hqW6&vPC0 z9u~)E`A^<19n2Qe8Qi{~)jm@aPQ5>2Jrxae>Mi4TS!Rf8fk`}5GUcpkrb zk(p1cR7m4WyM|^c(+i|Kd>w%VG`~nlq2?_geo=m+y3aaDkoF;XK)^heAN``V^WDUf zAZ@Em?qe)D#I48Tw+M0sq&JG0r5;@{=9`>d3gtZVXaI29Ic|u&Ph_8s&V-Zh|Lm%r z0D%8$mr~wqwo?9d6s6?*QjSwc34FgJETwhlQg$k2o-5=h6heHgde@dAu9QT-a4?4d zjZ!XhrJSdxT+_9Xp4meFx^kxunJ7Fy+bLwayr9ID^ugyf08qLP-`%zVxyfz&#Lp`d2YP{Fwm$f zvj{1*;y_@MMFscG#}EGCB>Hk)AC_bS7 z2gJ7bI^F8b1|B%vFFs%$+edp5WoJ-fZPl{I%2;|53fNm5&B$tmZ)p!oj3<`{2U>~# zH6G*Oi{#KuF*`B{9yq8tvm1A&g4y9{LF{9RO3+6;{w#CC$5~-Mt95nWIQ?rK494qU z<{ff2&%oho<52REwBuyegqf(=qW>tLAXL zDy2))A@NjO)SiE!i?#vJ8K>vey}Gc1vX7QSkph>M+ahSR>iMY$Ax|DD?~tK!43qCS z2DwS_t|UTHUDoyTgQ*80Jd};JJS2a6r{ryORD9}TUC6}x?h?s&RokZaBVWIf$~=mE zFE_s3S&imrn`S;4jQ}`DPkAS>$URh<`i+8deb$)i%%nUTBJ$|sTNtlemCe&jdA4@V zV=5#<7?SqbvQjdk0isOHt(3v6lmt_wBkM}zK;|l{5FC*Yo{uDYO9@N0)u_(ovr%S3 zG_}~Eof@$x{IE~&Xw~*e;%$=*7AqO7Gs1_VRT#aS_SfE+k|;u0@-tjKg7H_qELFHA zr$>=T>q;7`&Max%-5nTrF}5B%KO$OndO617RUK&5HKj!FEe!^e-CBz@td?^GAm*fK z4M}S(X+M(EpYtlUKJeN1yQU`Sdq;s)LOx$x6WJ$_eS&4j$-V{(a^85&?_lvx`N=hm z;8(4TnZ8G>Qo0RG`Z@=;wAgUoqYL!sI`Xr=liT23>K_$(q^*tQl|RsLSQcGqUC1+4 z=wfXfK>73aE_IJClz-4p?W2F49s3pquOwaN5A+)rd=dq(=h?Skw^n!=g|Fs;!gcZT z<(0d@uWR`w40q)Z^qX6LInTa)-Db-#<$>~bapj-aZTUrp8;qaH6ZE2<43$67Z=-iC zX`~k|Dy=G|i`9Vrzol94QupX$<9|ih_S5*m0<3+mG2pt~?OM=kneTGz;`>j2#;>D5 zIXw9Y8urG6->6qbXinp;!eS|Do2`O{ z8f>)Gb8R-U{W&$NJet_X@$-j}o6|;kb4^8b1vVfhL%aT)j`3#BKcmgLl_EF zR;mt^bW6Q70ca7w2M<_`D`w_mPv;h_1@OJON{u}g3Zn=OgSU+KitWha%)xu9q_C84 zmmIOuo5?mP(U}+ia;;LRw%E3D7L*eI>mOL9;s4b%vEfa)VY3kQEdPE zGpa(dRklvW_IM7sGsV`{w^({?Rc^Z7V%Hf?77RPaGL`@+kbJR*yCA0`>4hs*5*=)@ ztBVtYp8LJ0wf>;BA+P5?xWVbU4lNWGHyr)faZJam#T!O{mqCx`FUOUL;7LzMt2T2| zhD?+gP+1=>(s(-ni3D?Nc$V7PWcD47wnF78xNMZv-$F)J^Ea~})k?k*m5}r>$2#Da z%G~1OUElxQFv@-Lp<|~l6N2k}Vt)tIGTYfCZT?7p5WIP*1{pMIZ^9ZL4xqQ2m`-l< z53Q`RG?uEDF>iCN8S_rj@`AZJbQX<{#yF?@zsHV@cydK>3R=14H_iH78B;rpJnX^OV48H`n9$tqNeHn-lcBHens z!}E*A2Pd;w)4AS09+kI^ks+$H8wOyFW!ta5Q|}$r3%;d?2;ZP1dBH_5&Zg==GqlcD%Rhz|Xj81#9Q1mFf0G3=$^zg@ch5hNkPGI2*uv1fF5JL>rdzUF1 zHBMLf|vQWaxzJA|Od{8ZRfa zVp7KGGOMr7ktz&)i6KD-Fb>O24J|{5m~>4%d7mwj$CF!eG7Eiqe-XpE_SFA%*2p@w z-C|-ryaH@cK%zZ^SPwt)r(@qTUtTp;YvJv7RZG-@Sn>}sKo$baqjOAlxOlp3!|CaM z??lbR_iQWMJba_7FkNt%8Zm8*v=|R+53mrBGCnHpKkDHNNoFB+&&38<$f1q4+5C{? zCIr7sQau!b{SmI-whno<7%72(=sdhEK7im;AchmmvHoJS?0;ncQ}Z4>*h50)YD~rn z5)*=J3Os`JG)Xojfy2M7ywCdOl-Cuq!C{ow=^rq2BHaOM^Is<%$}eJqnm-~Tb(>~T zGf$yV4BYNMoZ(_5@s8n%4;4uM7^mIjjH3-r7^;({q=Q zrR?O$(nR%KE2)_77YBo_G#@2xIPV;T$3h-GVnpl6a-;lVqZ|l{Yc{N<`9f2bhL^+= z3&r#hqd06TpKsXZabs(pK*MWOZOwL>BSDLl>Qr9iS<%#RNX)s#3`9wAW;+r?c611% zpwMf#yY3$&7ee}>X%wc3C0}A2h}Vj(V;*ScQ9q9g=$M)%`y=Aeo&07^_%qd3B80fe ztHEUa=W^gv34Cf2)h){eX~Cx==)2=BM=fO&23@e)6?tx`CUy)Fi(9QKU~wX(Ap$xU z_lOSF2Bz*y_UtQ%m)M=%dv8f@kIc}7^i1o#(>j^ff$IO4R#f|C6=h??`S}2aaZL^z zmdllUetAh>mUX3$O#Y(Yc239aybO16gws?u?gbgK`6cjTiIb1uLI@|$iG=6U+7e+{ zPHl2&?SR!61gl#R9iCE?uz4shC(U*~6Jw9D=!T9Il{dZv^<6 zYgpDEof?r}oVkL#Zi+r$Ma#e9E&MAOlNyZ;{P`3L-@W_7Gk0KKafQw{L(7Np0cgWA zw47f-dp9&57fVm1y&IgN#TR*iid;~r_CD^aaaI;Jy)E-L+X3K;6~&ni+y#3xk#{i% zZD{N-bC4@IT`+G11zxNIlTT*mV}4=HTx(tR{ zo-zM&Z3l2mu-78&`6bvwTIZI^ZHFLaszeY%sK~nJol!^l6?3HIm?pod_RI!o-~%Jn zHfQhF(M)K+&W;*+bXYXFw5QO^uiPdfAIXtyj9b%gvsDK6;Cr9hY?W^lv$ZgIROGue z2h?mN3yX7I4(4}hFxce?4`UMj3qS)F86jd81IiAX-GeS@|BMJxOx~=>7!v39yV{+? z^ym8>-*tp)BGgT%FkN3JD^Q6?RsrUMr8`9jpBzs+WeJA(WzoSSiQ+<<;3I@PDi?0U zb6bORBZNQkTfyXxFhY3UrvghDAv|*}!zRG4r=y)g!e?6^EYW9R{=j~5kY&mS3dd(S z1db#IjVW82M89J0SWw7sz8bY?Mvp{w<_UG`7%99WlcuT2)AXTX$Q(r@HBCHA z%w}{c0j&ZR5%kMNl$<~yuwsiSsnfWNEuy4OYH@pJc1bn%25&-FE?|^Lw=Od$Tr#sQC_R(ss+G?V>>a zY?xD^#-KpuWiGKrxAn3&Pg~}2CvIRo@GYZ|(c}y9WP5PO1P{go92no4T!VrED9;<_ zKq*SUT+VTB&^WHTrXg9^gBev5JoM9u0O3{(Hu3HP&db) znz#56?lpb~-A`WTs&$5J<1{CL4$IV5|KjuC;&_CyWusd@eFGQcbkS^9YB~l|%&@CZ zlKsDi_N~YR7a2Gy5O@?@dXnBqQmGLR%dWu3By|D%Q?4wvRk0H>3dd8`ch|InSjVTX zEAGII=jLsWf6S0^049W-cc%#-W67=20b8O=-hl$gPb!R8J>7VQ{J!LYimBVj&ypUY zjToC4NrobEy#yICvLjpGtK(?Jk zY|-jy{s-Ll1P{lPBJxO|{i5kUh+<=UM5~^<0fykGRyo;%x6cnlqy;=WA@_OS2_ai} zV|xS0A^hW{5vf%<@iuovh_^ZY=^||^ z6&v2ief#s34Eg>yUTv4vFWg2kV}n$!L7`(ZRMxN5S!YW?q_oKN@H zSM>RM-EaB)6&T~1_yB^ez9DI>*rc)QSb9t-jb%}8uc4saVLQm2WiS34K8N&pBW=u_ z%Z>}2YKx28GNZYzP5!ZVz#B2j9-X>=U&?;1v8FctEw?_mgY~&ijJ|mY#jn_|;zQrG z5ThO8jv=!xz!7M4YV5vR|C`5supg7uiEKf~dI5*kwakUcgUDx>l==A0@4-pDaON1N z^KX)$9K2Mpji;g&1h8*4b#Zo^T^7x;i&^_vL(^g>WUN9-*{AGY0(RmyrVb%FCVDA&OySW7Z|M+QP@Q6RBY2aj#e zt*DuIJ5|=52@Hs-q^w=d8_kiQerN6Y{P1i$9$PBQ80Ha;SJa8DWVdGRY!;hqja>T} z?8Dn9Kif^S+SjH?1(6x|*x=k}CD>LrOk!6u_AVC7m)XSTQ!MCYHnD|VRSh<=2TcZz zvn$RRZ98vuU`kYb-&X1&8R#Q>;U0ACN^v3xBM~K>M0CfBc&aDshm)?A#ogg&yNeJR z+Qfcz9HQYdKX!l5-u@P4E$!bxX>Pr{wt2TW9B+UzD_Q1-PfIUnJcdZeL^B>v+-vNtu zt;W2j=T@489~1;ZGsTlvT; zerH7VAD6Z8O0%S1WeF(8)bMZqmhj)+`$T^`SFrp`GI>$nHKB`Pq0np=C*{~I%-3^4 zNLq`JgE#zQtK$u>yY8Du$>z*QFdGaEg~gc+cc#M!FRcj~!e(4Wa#VM_b^aB#OiJ%x zG0u?+F@>>0dgBP24Haf@waX$+;iy~x$>9hS@!%1uhs@kP&wx2wb0|?=`72E`++JtT zrxL+-4=DEb1{TlBE(WvDlaI%vXWze%1QPc~+c{ ze`#|q^_Wd@G%B3s-TL9Nt<0?5q=xoZ7qqw~mGP!^2nBbK22#TJ2h|jH;P0cr>4KJa zNAijK>oz0?qn;4S2X4SX0}Q>FDIigOtTkCKrki;kEGJ5+ksEU{)hh}86IeD=c(-9K ziRF7!e!>`B`fSCn!7FbKPIk@TiUFxvLXAJ+0|e$#vS zj}Z|7%c^zp`nA~7wB%@uNx?L#aAkDazi|v$_)_DsUG{G|49?PzbSt=c%XXmskxr8uk*Xk$}HPaKDY&gst(fSY(jF}DqF?R4ObRjrN8I*ShyVFK!EC5Vbuy`apkSh*%hi4xwEKSqAR zm;(r%NUX79N%>bx+>-J}9#yfVDo31JHNvkgjoq?H_2O^DzdIcYS1SXpwbIfBFD=Jn)-;Hz!#ihqay@bLW5WZg`VQlx2w{-j zQ01#5+Ut-1$J1J8B9RCbEe{S49II3f$YjorR#zT*gcSgRC`vLM6-5S2zJo8gdzk9T zutW~yC9S-Kii36Us6h7y3zVbWR)|2(EQMr;C(+2iR$VceVf#JM0=PKg_g{;9;Oc@s zq;7L?+B3=t#_0uSU-&2D9tgj8JlA9)z|>k4LV?BFe{Q)mG7foAw5r&QjH~~YGwX+! z+W2T)V}{sG);KT3C&IR#Tg=3uWiJMOZ+95sK$x{*5O?7k0)An_D4S*`j6-!{@QSU)XEO(K z_K$4Fy93+yg@Te2AhpBU)x_i(y&{j?VaPROP2=t>hE*ELf)iVX>Hcr8iRKO3G3b-v z!3%b_A2@h<`+biuKKsiFOEg5w0^Lv5`!+>$2Z zS}HfU^5BT41!|GcNAwkeiix7HEOVA;o`J9D@^I15mMs0OF3i%;tu_L1@jKkHXEHn` zo@k@Nc{dD^SkyFF17#C8^yO%sqyETO|0|aJ+elN@FMUH)cXw@pYLyp5;szbj{xhXa zuBLw$rR8Q9uP^zpoX=ivb!vK^Q6FWqt(%(_y!|KUCiC*y9nahO?442{MQKyTk9~}l zaF4$`fx(44-`gUshhKb3BtD;YHHZ|9|Bh7483HBH!fa}eixg|Pk}jHe-cILN-vD)- z(Ni+NdV@r-(}$4i-RVPD%MNX)57}YicKXoOvP0YHLppfeoj!E6?9h`iLA!wYlU%@j zcf{PkaMZL4ly$rKY85yU)2)L?FksFOj0%#Beod>x*LZP(NK@*)e{E!jA~6R|+9Tro z_pcG@e=8PnKG<_j&)8{~k(m!^xP0eCf^4)BQwqW6gP?P^*ClP_WmVG@VTm8kbL!2+ zr_I?n+g!3$s5b-DBwi>H#`GR-gFeZag^fwIF{dWCU+~v4!KYv!ijs?YXCMe=4_pA0FkR(a{7%m0!?ig(O0 zQtT%$j>=U}TVtaQRa;zRm$=5Ry8a&grsm%w&6oN7GL0VkdgC7Azd8mQ4b;6>(3$LYre7{`k&ZROm9C z2dIVNa57Rc+cWY(FpaROqJK>T)n)-Fcy_ZXQjL3t>D$YB-1*f@`dJ|1O-B$>rd8rW~UHqQ&vWnXl?jdRy>-ZD!?; z`tQM0Ay?qo>E787PN6s6et@26#uB6hwxkQ97dd>A^l|lLq z@I2wRyc-#H_ld3fO(&pckZMXZDBhw<-C67swQ9`X8LUpLo$VItpS|lgvM#^UxZo_C zPPU5Q-X`iZ0+jgdYmWX5ph)P?Z}!QdKR4b1(pd@Ui)B6dITH1B(}+D@H(hr$U&=e0tV)O%M_s=No+`ky* z;IYWf(+wW^*l`ORhAmlA$jvHF)!W`c{DtS6;xYw6v+;LGEZOc1$gCS}c~MJ8iP!O+ zy{;slPecfoEaRz@OLeHpIIT|-8?$J`*Nk9{NPVX`Qy`>IRhMtOiOb-DTnxtSu1YLx zMlwrP7r9US?D9!!(rp4Ug7SoDszlyEyJ4L&?W6zwjTUbB0WLz9nmA37t>VOS2vmAykl`3Lw#y>e- zuzm}~>7xM-4{B6Ry6DUuh6f-gdD7KQw}T1E=z&hF+r>ybXQ zR}Rw8zRi%HGcla~hblWB+X*W>A02+44{`N%U{M;ObtCPErs1q#7Bp`_6Sd((6HO)5 z1*~+42PF+l{#;noibv>}lGZwW8?@qte>MRez>SfH8-r(0G~7sWQPH^TM0?;R9Zx>} z+oLpA$?Y+Cf8zoEaD)ehqv^hvAP>oy-5jg3<8p{oXvj+qoZ2NP7uN5`X#JiY--oO0 zRNrzgv6LMrrlTl1w-^MgdqOQ&6}P>OeMsuO%qr?&h1yd?2Y;j!4<0%g1mXn~O))bP zOK7FylG6W|oOe;%bamZgmD*Co=t9CYVRCul9;x+_Xlno9%5~njs>6SGH~Yb=$gB@l zA;77?&=+0uZeeS2Ga?{Mp3if;v z4q3pDr_Zd1wh68PB%BPv^2NK%gUrNkr-0T^H#+0wQd(t5I&G8b$%s5+UTx9z*s^j| zrxW;_f-cv4N~wO(;CfG~(GPlC?KV2v^56e zcq0LD%+|}^^5BIdNKDvnN|pZG6&8yY?Fx(CU`1|@%Dyn3CkKMpnFAgKq10EZX@R&= zVOJMOmGNBm0&}*E3S~Wd;YO;UACh4Kms_i(qhAcMw&)WAl>nv1@wqDK34u(o(i=hE zK($$)@cMA=z(>aEXdPqJC^t?Eyjk?CZoAP92EaGJA^`eNiRA#$C*J`+yQYRMmEWZm zKXcWMKZ~Z>GKjYPPr8x?d+onzI9y{>u&%nQq0Fl zZ#w1|t?@9~EmE8p>COC{;TnUqXc`1b1p8nN_#3KDIDIf@KkM^YA3?`&>fvMn27hyq zWNu^=641tv5(uI(-4#LZTDU8Myd6#!;}2Dyc4O{?sttXUjqJ{+H@PiXtl*!CWhE+i zz1uY%JfNo9JDkmO=A~J|f`QZ*c|;$;X(&}_0PFZcC)>#02|rg;oWsu(_sQbtJSj8a z+(Nsu;n}Wiq_XSdWvlJVz9d~!KXRDjjM^OcHW#?X$vqB;oPrK|vYZ|3d5F32!B#4- ztTY5_w=-Mm=<2>EYa40zAa$}rhbV;_uFVQ25`T;Ek8`*;#iRue}==HBV zteNh7DK%J5^N#**crMrIT@g>!l(#_xMwFew^i|mQW|7Qhk<4b1%x00yW|7S1ar&8{ zpQae0ws8I^j!xS#6M#*|I=D5Oj+dR$ae~aabwE^FqqH!@rN@*8esR)T=F}4a%Ma*g{a`P7V)pd=KRACfGV3~CX-W!oY}p=Ojuajg5}GKV z8hb=$oxyi|&#N9XNknES1avPO%%2Y$8ddS&9Sajo08V691J5fW&jUXzz#2wOpjmhrNx=y=wmSC zY0Ku3iAkO=ShWdO{?>kul~))9i-zCnB*b+8%dvnn7G1O4sVu+pS-esG-t)pNmAhoI z#ypQPNz+L~32+YNfQHX{_KZv)#j}8EGd#7(F^Gq@sv)V_0hbXvd1PsDp==_)_e426 z!th!r)dmk-{~6Ll3rU@QcOy4Ysyd;8Xrx9!=D>peesxn`P!&UTOcm^@`zud-$7olb zz-dXrl|mcUZn+&%sR-xgz+DQs%USBJuzg^>69Fo*D_lTV(ys3&ZMjcd;nSA-v^JcS zQRBZy?LFJP=z;)O$uo<=pJe*u8ODHwAuZ6!hU8b7Ba8*J)B;SE?UP>gy^y2V`O?#GzapxzxY$ybN9^&Ew*JgY}!<`B!k zK4H5$Ba)F7Ap(tRw}MZQKFG?K&R#=hJ)*&c|F7!;DH5(&r7D8~E94qHaZayBS-WowKIR zGOsdj>HZ%dcdEBf9Q3d=s0r~!FXkv)x}Yp014a%0t@|=jDcOCO!)5EODd%trL`jTM zZObY(-#vOCy>$PdCc2r(zYmzm!B^be$D2oD{1I=56ZxuLvh0F&APeLiILGWL0zx)0 zfO;0P)C>OUf`|9ve5a@tPULCcIX|!D_Tc+VGP2+_9RY_a7)D#LkNd{B^hJ}&n{^m{ zZMwRUjj`qM-h>7LiOF8#fHgUWe)bg=L?hkU|Gm+nhJ7Hf6`v$Z6fSBZP3Bk%HsU|c`KM`y zMw;F+L1LxX^d^xM6U+je*4n%cMtl_92isLsTx&h|QE1evS0mHy%uS+Du}x2GLd}g2 zd^SGtxp;c?=j?W*r_jZD?7~o)gaw*T2|P6q&W0 z0x%hkEjt3f^={!Qt$hfsEndMe8h@M1ol9^^>(~;Q+KNx*d%xwi=#m{LCEn=~%il&V zpLVbTaWy4g^L_QlK!?{mI{vWMK`Q8)QNvoV&5xxgY|ln3=n+fz8Wc;PzCBv?9D?q1 z0@*^r7jg0i9%+j?;D;%U0kQ1=k@c9epc{x_J)0Ty$)Ft_lQd^G zDwT-5z9#Q;`dPZy3EE(QbTZ@jZ&?)o&3v}50&qjY9n1e_#VS%dQH5Q@s{C_edrzXj z(0`RCPNo_-RI9KyT{fgPb%YKNNt}m9DQC`=mgdJ^d0Wkv@VEjp51zFOP)(btk#ogr z1*BAo*f8R5cUd&*I2`)%lM}T+<)D2;%>4e8oBd)3dU(3%b*(N@k+=dr zr0fI?xdKi~ea0DA=xY~Z8d!xd2(1HdHJpN;hEr{E8$HA>w(4#2^^{Yc9pmg%jU|9G_F~$7Tu{!dG8ODpbbQ;D>okm{4p|mgr zLagj~4%*o%?B|b6_k;f9>o^9f>eNE#WJ72bSrJo&k&xEEGT3*T+cTtk9(djAna8C| zJ>IOX8dKHNU82O!iMoSOgL$q@nAbgoB9F>*<-=|lGNiwk^2O=zPwbu5-^J@=iRQvy zk()mjQl^SqPUsn#`6&08d-EHXJXy&8wQ|G+%$1*_5M57R94J|2IiqK7`rKYlzlvAA z6uJ3wGD$X*02#(rK+rChOi{|W+VnWs-rKP)FUOXAjso>oulT?<@${6>YX`1oKiKEW zTdXo1!-@}htv3IeQR#jW)<+UMSU=HTs)lKmFvj7-SPZXfSh9lFH6KCdu8fXFl~3dO zuW8j~suYNCY}82fKS~$&G1I;a*zffzR8Yulb)wJDx<|^MS!!FkL)kePM!QtYG#g@x zr9J3m)A^F>uP znDbQawUC^g;)`54`*bNs9{;YdS%Diip`M9dY^1&MsvT4N0-e2^37Ga`)9=Id9mUZV zD_|H3zTo5&(bt=op#QWr3`=}gGP#c~`!@n#o*GNqGFS6W4+k{vr3=Oq3laj9oa%CO zSu>+1h9|W|Os!rZhU3mrgJ6J#_KXy34IE#e`~W(2 zR{zA<@@g*`TQ(=MR9jWM?JCv?g6;;BSZBed*hPf&QmP^q;K*%+p$2mr+as(ENX>SA z+}dgcBQoQIzmk zJte)6wbEr_<4fFn-R?@GcB`x_&!&D~^TdN!SM|T{u8_Pqe$0n{{~n zWnn2P96Yro$s3T~Z(t2)UsWfbaANSY$NfmMsU(S>N%F)Ecqz@gN$z*4cd$h3V|u|OdhM1YAzSB>koUoVZ)tARyt&zydEI@( zv=bm}U&APMgb>J(-NhP=rWQ-2Xk%?B<1}L|PMQm;X>)lWP2DBZ5iGjWn+!GplcAx` zEv%A!V|w?``GPS4ll_mKsUAP*ViJHbUuaBl4e4qiC{gXqxKg_=urdU8(fyr`2^BtV zrB7RKY5b07%82^sQo|FcgIZbsxrXmqqrxYFv%S0SKjgY^9z2=`&18uudl3}anFF*w z&MqBCqV>QOecU=8ORkS4Sq%6{`xEfbKm`~RoYNox5*6fhRgGB=Tk)>mGmqbj7*~Z01bFzyo9` zGM&nAtsclof+(nSsm|z^03Q{C}R9(+?AU!sfDD7 zvus1bE#o~df0d^$7#msyd;JGiz{3ZdMR4nnxj*ll<KQvnP*iQdSmmWo!7*H?TlS zSJ7-3RyhVu<(JlK-1SKT`ggZNhRu)@#L0nHRa%?62%Dj7X{>{gCp6be%uyLiEA-zv zZQ#>xwky^spSHxm&m)iW3jI}Pp?_}i&s(|5cBn&_3cmM(p~HAxLV%hjJqI1q1;1Ly z=sc6>hSLWPo^gN9=+s@EGdh2-{%v6nrGKAD3%&k*q1f?OAlXI#9<&(daO5Ro4lJqC zei7;lUFoM%ck15_tPk7d3kOZ)Jxr>s(zgX()3+~HK{Zw&OPl)2bETe5-`=2@rF~$} zg6BeBccX7-u|pMEQBVXcf;=jcE!;h)PR`YY)WE|}t8Ej^o8NAW878S9h5eOjcH{q!C^-Kn43`1xY} zQFOi{sJ%z+fc)>YwrNVFJbEfJ?|vAry=#%v)>kj`x+8poAkLhcX!|7%tatZsNc## zv~vxZwQE}lR{jPek4`?3-~F2oXv0UQ*IhT|S@c}+0ymrA{{~~r#Y)t4wm!c%r_1MG z>hlObAK-GY>-zateLj@W{oUu^cKuwb&t{Pu^a){G`yvQ~Vlwy2W{y$MR;AMgC2N4! zH;Dm|1Fu6%9broMUvvd1VhdJ&6*~k}gZ!$3>+Z^hPvlYFW!~vjb)EjN>EhutUP4X_ z&kSL9ZyLe;QvJ7WzbTLHXxDs~`?tCGd(1|ZjUzSK-nTBL4Q9AaDyweB!6CZtBAfax zHFi52$Xvc$6SY%qF5QzBh(&#w*RXUI4+`nWH^;NXXI za(mgiCf}Ah$j~6W9>4QVJbg*oR;S!+Kd}SCvKA2~Q!GV_)jKHWT)X-+MR1lG&$GIH z&TQB1abdUdz^W_UrR&q_f$MtBY;_%TEYBQUga6(6W#fX|XVG=Ayji$eFW;&O(VSX7 zN@i;bk2?{z;P16dO(m*HWs0KAQ8iG}xpsAqDS-d(q}l+@%p0}{!$e-NuT`Ht|4r?{ zy@8=rI})2(x}SpBAAi(69Y734orJ%7Gw?|cLmjZW5PjsV}SrtsD^Y7N(1|= zXD}=|<8XOrp)eh5w;uemSHa>y1LRLAPO3)Mjyh3c3-$?3niIdV`>M^W(M z|ENdYd;SUTw@{zFX%p3Bm71uOzbBD>w{byLNf(?@eqvtmN9`9*7kytDl31Y2l)lNz zuBYrfecAPv7wfu_sP1@Du-6^k12*$eC(+FzLdHLbc-U5|MEV!kyc<)fP(bE~*oj$q z*3F(e*tQzdhDyaBCQG3Jh$JIVr0hmL8|SuQgYAs`QjXsIB_z^~|0;-;Z)0ggV(S5s zn+Agsj(=|5KQiMf;Kuus#_!qJnL{8fgmYSP8v?hrDqXO)|4GD`_{%Fh2$**O|2m;d%dh&v!uw_mZ>a9*9l2>w z10VPey!sQdMDWvxnfan~siLVl^`CPFkvWca^>_56*ao1`yTfd^@OnJ>ApkUZA~Y%Z&Qfx5Zb+bgNm6kh5Z1?y&oAs z`U@aeEeHX!=_&zaPYqvjhplg(=UY>}%V_3j%WtUO)H^ccIRnCby&I3CjB!oe+n&@&uzM>{bE(S0wpSJ<)~XbhwYHM;W|Iyvk$GE?-}3>H?}=&tp#u= zT5Fl*4)NyO3Q8973~(2Ez?BjnkY-faHQl$Mx5_ZU?dfiF09QYck71LZzQr|3fV*`x zBYBx?&?ak;fv+Olp#S;4z(@Qcfv>m8w+Hz~dH7kQN`0et8qM*=*+yOIZgU#7^ntKZ z4Wbyq#kZm$Jjz|>0JNJNiq!Si&HwYj%1-+4={+Km@jr?~RuFNnDV7N9?X|W=*XS8r z_C*EifWYq`;+VhjABd#uMe5oT!ouZx&23vG-?)yWM8_b95@I_2rITpz5u#i_>|2DJGSib?{C&uGZCx)iv)w+N zuThPc)u{M!f+%&w3_a=v|M|c__P&EZJn&1sG(9vx$H(IYDKn9vnH z>Vm_Kox83@9%bW|wM9*%K{XPAZ1+mJHds`+Q`{LSL@vJ?DQCvys#ub>vyU{K%d=ng zfW6r`_e;coX2C=Pewg{oKJSDCJ2CR$;nXfT(Yfv3Y37?lr{|n0Z1Tl~kav5~TTip2 z4)pD;C_CMP_yn{4I?YF*IsNRn7hRY4&1pGD@Vp?X4Ec{NRECsG%JKGYcUgZJDkC<4|53}~7iQ6WX8cBGM0bSfY3QzG$fbMp6R-mSpqMuj+2ea3<-bkjCX z9=bCtA^Jf|6yf3M1S5+_rTgr~=_MT2wR+M?s;W*^h3%t07NuUJl}FJ^Di02$p_+Vk zgcr5R_L5*b!I~?%mgYk6<8-h7bczm*CaZ(mU0bWkU$5$n@KiAH!7rgQZ@w!k<3Qd? z=mCKv^duIc@Ao~=HYfu^f6GquAKR|wN@sVU+}`B`o;&Z*pv-aLze(lo{FOHeh3g-AJ9%A7R8efNd- zKW>6M`DqgjawcVP;Z3_t#SA-4yUGHZfAgGu9I|pWY2^@v3#;GBX$VgH64gj;*a)8JYen&wl+lUiEBby3~u>7nka=$zuhH{4O~rdve=dlu_d3K6dSNMI&fVq|1)+SW4P1y zMGBIi!aJfA8)>G{hFM`crnl`tDG2ghn_M3}LXb+u<)8V2QHljV8j*qwlfB*dvc-yV zC?hWFIO75-6Uz|r~%biW0OJ+Hk*%TwcPb!*X>r^ zs^IARJ^IQZWUWv4BmNOOGaj51k=mVIqGLdKM^*Ryl&bDLedmm{e7ve!NYNr76QcR6 zRnrpki=xpm8Ik9mHrS@oF0$^?@T+!nlKJW*>Z z5E2s*#&t{;ldOxUdl6NUW^>%*M6~S2vgVFK$`2_}7mVc(p+4<)`KDEAc0M7oQW(Xc zY7?U)`WvqvhSXc6BGHJ6MVye4w+#F8zZuOf!^{{&eb{ z;QfVK9Ya};B*V~RoXpywaU(xRJ>gS~j_^rhs(Y@qXLYtt{RF|;b^sxkLEELs76vs! zmEYz}-MnoCDvYpj#pb7`+$~zZ6Y`Y`4Jpl(Nb^4bXX_7J7~LD2W%GE#D+gm?C8YcH78u5nWpA)va;zsJ-cbjbeI9h+K2*u1| zG59%QQ7X4x59y2YV@o!jG%|hcA<^_T`O)XMx5*(B!^5DpRQ z27(11+jDZz5dqFJH?YHnEEg=rKFj)H@QHpt;Ky)2M@iX9WRL`Bx*v!S?GpXH$F{M4 z0c};EzYhED&W@%| zFOMvGz2~Gu+xU_nIg$Mr_q+`2NEg{|H;jepqKiHi+@ggYhbYm@`>?t+*`=uylq}70 zJ`JPFud)=Qx({F5MqEn2}aUUmQGkt+&(~_sERwVk0s8&RLzjL0l6C(Lz;H zQQQEHLC?Xx58!cwY1tfJJ`g^d;YN%fc`{w_zk{j%vTIq8Gb$ve@^_C#FtORupTh2# zTz3QE=+BTY-O2L3@aEszzvqsnf3utax&GZg`TwGSIr8f^h=?1=Wi1Vioo0xX?D;m9 zej6O`SKIr?J?&tlpFMk>mC2}?8cVaKkMWkx{lz<~SZWSF9IE#F9py}kI)gt>x04H^ z$xk~DlyhWy@Pi}{9;jAQzfVvoqJkVfL9P^ab8R4gWw3!+D_+QJr_n{dP8pW}qC`JP zO9$aCL}Ai{qpIU%t0Om`tH7#~T;h}_Ltw%*G*XSC4hSgehiryg`x_G5-8{W_3-k1X zhH0O&#d_x5q>}n1(CK{7@?nuhZ}ps1+7?eA`YvFW=hp=8ANk}oyKj!Bk)JxgYTuQY z@8kG>i~o+f(3EjFs%KtML{WdF!wqXk@Xi)20r5$->@Bja3UyU z^1It@zJK)?5c1l6{d_Ogd`BuXQTuw?s~V-$BU)+dLeVii1;1!=)PSZaG1Vb8DKWGh z0;j|pTs5H{`uMl_`@eO5T{VdA9MSa8&97r@qv=0D$Zh;H|1asstrhfdWaB^AzcJcb z$@u*H>0@M;Vp4k^&@9#0m^GwA_&*{&*QU#`#OL{wiwCV?_x0qDnJeFQ^9RP}yn5rQ zi~Te?RMS9ba%vik=l<4@+%%c6h*eN<9@|gHVM?@JXiuVg?l1C*#w}t;iX{^M8RIOE zr~7~NyC1WqQWG0A7FoJz3R)FKMT3&74Wg{C;6Gx1xgR{SA7z9y2sQ<2s^0BXLXK+= zSuD16!L(a#4!v{~gEF|d3(wRXD)~a$A^09UHzQj6{5x1x=I-tn-aLc)x6YrV)s=T0 zG|&S6G5-7Eg#Ro2y5`>{UyS|+{oC`O?B7@ZPx>eR8^+J-nbmJJf5d`Im{(%KrN%RU z?6*$cY@2o@UYRE}dXDp7_B)K3e{xk81J(S?WyPb?#)`i;SVQG?PEqTfx$t463kKlr z7#3oJnz2R`@H`iG62kMr*=7gaECf+0vb?)CIp21DSc%#LNfgi<@xwpI|vp{sfhh$>m zjsSK}%dC~+s`EcM-y(9;4s|~H5*s}^=i29q4_Ff)xE4b~ZPgo*o7R(p_?M(zWoZ#v zY6t$IHu;WM9&1q^2d<6fn+mBhsjd2Jq@$S_Yj2&B(Xn!B+=g<1d=;tkdOuyftr*-;yUO&(1XN7*AHk&#BD0PSSw~`1o%n`kTQtqO8ot?8{9UVXL)Vt-N8yI9te8%#&=wqERBMYOCb%u+KYPUeMgyP>T zN0c0YN8-N=y)Z~^dq&F_2GFrmDzO;qae|;!p*ytSqCUS@qR?g9)_J_^7cY(8f!3ne z|H=qFmoQpg{xzm?qL-)DZeWA84UXW_EXFx=pLay~x60Sg9YV#k8~!=^ar<}wujt3W zO}>7Afaw2s|GEA>bjkl!|01(=K#`4d75K{qpo;?ledFBxU7N5ifHo=UDRNCn8*( zu>z;x9RB4=Z1C2FZnjM@a;F8E7II{Ya{De5!~b9XXN{z5|L=Y2-`oFj|49F50UM8> z;|br38&2q#oL%DRf}IBQe$Z5e~1ION7I)hV4J4hP^s#;G7h;J}%y) z^9_X+2J64=aG@}B)Goj@_>K1PD^%qOhe)0sc&q6iI$Ih|wQiNr`t{bro?JLYr%zBu zSJi&O;g2+^(0fSPor<9>7T1Ws7*?*LiaTx%0qd_h_MwR(6AR<3`z4rEo2#}>jfl*& zor-B#7(nbcJVKP+gmsh!JYf>rrQ0kfI8NsN@!~RQ-ZiDMRJ2&fNwa{eL+ar`r`S?J zcxLd$PYk1jI^V;Q-KaY=`0}ChFC|XPF+n~HR@sO-y}R>hK(nLd{NGyOKZvw$lt z%U9K!8U}Vx3RaBai&jV-FjmY5D5oNdb1+!(LKnBARXTX4wLxV;QiV_es5uyns@CGLk z1T`YMSyvHVR|Cvo6dGLBD2#q|JJJa#?S0~C=lR&jvQROzu#X!J|8kO{rYuRS5;S6S5;RZWd)3)@7TulHC=F6R0=Vs=Js)!Ld!&< zrDY~y^ef}BaItRPn{wQLy+aec1wCeX*(w#%ZOIxS)GKxEDt z#@J|*1@AoydCc{X_El2`K!t)bgs7!dT-&vfecLNH5g!OM4H&REydbg=b74;yF=XIorbX_T`u_dXo1O=-wBvCb9)S znM|Gkgi_%6gr-i&W;Q`ix{pIdf)`H@V-!b81T)Ut%%qD@3bnoUKeZGUHUIt9_&_>s z^LPe#z7%$b`+5`S!B=9?t=5l6qVPLD&%TxRWukdaUfTJ9pNm0Y1!Qx>UVBYZ?}iWD zop8*ex3bUurW!5=4tUI)i$tcTYrXje@`S(eO=DBI8~_o}{_+xns`qdpw8A*tnJ5$8 z-pOZ7HNynKh>%e2$3B0UiDgiYIb%Tbbo1`KIl=)%ydKyqk4n(kU!IV!4=#|8_g>-$ z;(V%351~t%F#T6Ucy(OP=icm$%gm{FA73+`n<(s{t(Bi>-$aDqgs(%9Zxv|RNMfaP zQe{}A02uJMxB3j?4oFNVqhv(C)sB&Ju`d~)7VQ+yiD^kFxBNPba)mLJQwx-=j~9j4 zNB{7|K;LRf-?P`gs3X$%RBZNOsat1^K8R*y^)uF83w>gZdY}0XDIZmcS5ilFo|W&( zA+mI&M^yuFZY9eB?xt$+0OTOIc}+D=MXwZlejLs`Pc%Y&JPXWUJqAA!R@>ZQySgo=$G9;VhY>7UbR!6EgUdFeFkm5g!vh%n*Gpm${L+mUg71Wh`M420E~@!3g2}|= z*+;qAhsnf`TlWPdB_2l~p{XZ>-5*MT-QXF=#;)sV*yW5qQ)aYGfep1dkvJzpEs){9_PZaQ^U^FgNHX3LG1 z1-Y(B$*bDQeavM6D$^!QXPo~h(D?B#pfS&JY_l-M^&ZOs@^U-#syd`ZRs*vKtPX4y z_JMp8n}97MsWJ#ncp6onjU92+uq|w+R$;gU-;BZLks=G5wJ>J4G+Yat;{)z%qZ_u6 znG0mr&Kbo0N8KXTzKPDCuC>s4^HJIlO*$D|7TyV5Ue%du)iya2U~+dDm)g;AS$1y< zm~)hg&SBBaSsu%r)i7#AkJ@C;O|yZ{Jqu&d`Nnk?Iw!++ek^plZ;WczJYQ^~l>B)& zd$`~1!9?hSYb=CzJW3BI&7Z&B0h}H{1Yt}3IqYaSjp9#0*&=_AWAcm0w6yrMtP;bW z_eKmtZ@Sh(=-H{qM(EM_^K7)v{ju4;iOx}DEOgeM)pGkM$Da#t2QL5Ksb&5gdNf?( z-csyMVJ~s{bFtNj8At3-$clZ>S=w4?i(pdzgVKx`2y!e$G7E94P`A13GGR%l-DP-3 z5YrO;*k+(Tw1pUL=5pj+UmZsH#ul12?}xDa_;%oCZu4fZAICNe6VR~f1Ic8>7fV(cB^ z8)F>wX201ByDxhM(>adtk1-6K;g$X0K)9s}eCHJSMk626?jSEZ&~%&*0&rL0|4i7S zI?hbxADW}LWr73CY&;4IMJ_;g0BKw=9t0;C*hA{N+G}Dk7G(Pzu}K# z3Rb0#lMv+i0ha&*Yf}YSt zS!sHlyExoYVd{+0=;_57=&ANa)sxA>+guh4J7apPKSz3kEiTb`NcH6OU4>o-CsKX~ z7jQIU_G5a-1VlS(IEh^|8TLU$qbM5;1WNy#vG(?9Pdqb7g|Jx$7{W@UA`d~x!kXdK z6L7i(2}*Ks{#U{>=uwBkAA`RZJ|PKnxi%H|KN2_(;$QJ5{p&*=M(9TNf#1mdz zpd)YqK0m?J>fiAIn|DaoyZ|Kspa+Gl?gfnOsp7BT!n_>*^4_a+;`R*L(kHkgs9-Y*kf zI6(=3ao@|wGN``mgLBbL0Q_^?H1N-Te^va`3x(L6KK-3=Djp{#c2TTaB&@ouXM}-9 zz?ma155+(jl|}=$9A!=305k3cZjXD0uvo^Oi0@<-DcKPdRVt@^etF z?8vwn2i3}s6YBt9hp;;u7J9o)ZG7vrd{0 zCm^s(fs5ybcwVuZ-$5^jL_Zi8KCW<_g0UPAj)C4xQFa-Y3Z$kIscatz`5z;d3%~Kf zJmS+F4)7{N0S>W9O`QOB`4v=J(TO#G|K}4PiQL`*_V|A?l6a1!eDwmr3Lzf;B5PFs zAdBAJV(A?#eO3MeL(!j8NEX@hJ+iLqoR?s><0fS1htPtsf~JEhK|uPzx#JQaxa_#Z z2QE7<@qx>ZixWcaxHuuyj*AmQ?YJhY9hcGRDH$$7Go7wVKN)C^v@f=%ip)uf0diHHHj_DvH_&S~IVTM{HfsPcz_ar%p zFUfQy>nK&BkgCGpu@2^h0Yv`g%PsgOwg}%@CVb$11RaQ@eQJu)lQT(00t!thS}lb( zM1~m^U-4mte!|p{uSzO%ZekM089zR(AP2A42yKsll6HPna6(xF+NS<*Y0LRYP>s8u z5E>JF6NSdKEDL`fj|+bq@COo4Ei!gJ7K^{WR!h%B3xxb8T>u*)tr7c zHZh>IE7>0%O}~P$Z>nDfOQ7{6%!|>l*5+FJmA`$oel_Uyh<>$c)QRd>v)I#9PsQk0 z3$L{FtDZ4EZSE3Lb8k~US^K2p)vp}aK)-5#1UuCe(60s-kto{XXI zw^v&9{d?PJ`i|=yq3=&fDtXj>a1;IcnY+-_@+V^GyD{6MZ*ELa`;sH{ouhg>QTk?# z27NF5?ZoJN1A;kPr0A6bVbTrJVN zlfp~%LQ%^eFfS5TmpxIXu4cJz`|9)|P#|-#e}5e4g`OkjSn4K-GAS?185OGqL`lLY znIDHgL-}VITA43SHY~))p~y|34ZaK#jsNh9nM4bmUV>CQt!A|8yBW6iONmN=00T4R z*%1xbJ6m_uwbJ6Zy7XM!T`A`H>5STh*;}RVgf*?Fq&}^KH(YMJoBbia+283mzGe-s z+AQe`LFk5^k7pt)H+$N^n7=;MpBC}7SLD9)pQmi=#OZw-1izS-aDV%~mwCeMfM_nac#hf+1Y2>)@m z*f_7>e;T}d<1Gp@su7k9+<{|Oy#@hfI4{MzN;CKsyNrrzPqNgrUQ^BXQq^cI(R5|! zH`bu~(b~tQV4yqs5AcH+B>jLW($l07p*)DOl@}I*J4+~#Ou~~G7~f|1X@Z2+aEaTO zw5xKZ4Mm}SZcSu3zmx7FU4ialE<5h7B0XIb?rE6Slc%%T6y2vP{Eqh>A-Xa#(dur8 z4BP*xl3_grNl6C^O=;Ojy4*jt z3+SU}l$c?NdsZ=q&nKzu6@S4GjuX0UI5HCvbBxT)vb^gvt25(_tOH8o6{`s5m+cg! zNF3NtrY%C{<@hV4u@tVQi<3gRv>TxmN z`_^z#7H?nTP8%xvPfo>tPn$J^bK*kna>|axdv3#bc|6Q~l43pSx@ItLp2tR6+1V>3 zwjvPZ(H8)kOhEg@0-6y96t^@tA|qbebsOVv4nG_-xZf;;agY0&d*?O0W2}pP<(u#; zBb&V9^yO_kNT6RLm%ubhFJO_gVV#w~5+-o_gKHIKcp}QI=|?gkTnp--i5-ot?29Vg zKh&027b3B?Y|>1=DT1O@xh zlQg3qi6zCDMFtuSvv0Kq=3yfU?Zp|aEY`JG^aDdU{qAiCjrEZi;2-abayT`t=|RVp z`*N`@crF2wr;i819uFuSUnI0jTDjk1pflr}&;_{C*f)-m7jhtgB}ZU^)6O@w#GCzc z2b2FN6+^xn0|8Bex;NM58;r@cSX~W^_vu~Z`$h8pn`P|Xx196VoBaoAg%~I`4#IsA zX@Z_pGxY>!bv0`9U#t)nOGG&|`+zA$9=jF8T=-B7D=l(a!@Lak@>nSXzSt*HWGNfB zSA2>!gF<8@f8w9Ounk`*L)cqbhOmaw23;%v2qnoad|5bxCLMc4clmv_rujS3&9wl- z?^|ufL`hQ7ZxX;0yY}tI#SdfK1Dzfu6NbP*#SroxJB)AgnKD?F2xdknx_oi6W`>YW zJa79!dP$fctwN4TQ}h>d8Pq5l2{*v_C;oCw27lt8jA<{vh+yP6!h>QJqc8T$9L^sS zIGorcV`PVesD#-tX$NM5tqrdr#QsO7#Ch_@IP^}t8bMK6iRTJ%A-Ga1OqZ?#*P0q% zv<4cs|AeXGlPpy9=X$fXcEa$KfS9e@4;tI@!isUQfyOzQ@QPi2?*ahi^825_2OPX#5d>>m=qrp3v zmsaxTby7|ceA4$-dViy781(Ysnr{30 zW?mly{27NIh+*2_oEFpG_aCT`F-srbdkyay>tbJ7AAV(I(^sgsl$F9OK9j6a1qAb- zumU}OQ92A4NIo}uVc$+ZID{YM0~S*0W&OU@#_&E&Xeo}orxv0uZ}#Jf78YN^Z=)By zQDK25env3s`0`RX*6sK0Lk$&!JeJMsPb@`&QVJG5s`^#de5iDy|9I;Yp!@FcTir+# z{4H7&Oi-F2E}Di_#1Gvc194!O1#y?A5bL&Fyn^#*vG0rv zzw@Q!h>RYk@d+5+*uX#kz#qlmEBJE>|183vXq>?R^E&`l?~4KIFtTV#EP0RerXAeH zc5dgNTkuEpuN(O5TK*ZuKQ897JY`D zCHPn+f^`7l&$s0UGS2A6;i1QL`#Ynw@xH>Y_`C(5P%vouToKpyt}1}ipv6O)TL0zosMOf9hm~~y@y2WT+iNGf*VbOY(v>uR`eNXV0H+!D> zUUK-oQu~roj;g}$_$aO_%t0&Fe9!;nI{8>66W$k)HhoVlK%qDL8ncy;;bw9A0O>;Z zY=6f&e!Q=0C%(c$mtt8oo#&d=B>jT}k8Phf@6Y@g%d#T!>N4ivQ4lPa<(+C^g&f_% zQYE8?mu3Mw4p)r$$OPHmnhdVG8c3Zo7*+|SuFd$4>x*^!C5)FVr3pk8oKm3YIJi$P z=I$6b%)_jCs^%YX@#j^*Oy@rQz*EqJnNHt#pksnMV`=Yb5>pn z`_^nQ7G5g#W_M{#LgR!aR^JC?Jg9UtDvd{c;)CQr?$7}lAvgU(8Th0}L7hLRM?sxG zpOnsT=_?2W6CWSGDtz9 zt;cbN1OF3D@IM~#F1e(nkW(P(cvK0dThoMi24UW+nJ(Ly??6M$;oONL_?<0P0nw!URd@K@>Jq6ox7n7$v+(2VkR_+xJKj~{Ub}2@$4;Y z{*>>jCUlq?+vIbxirDfV%9!4dzGOp6&EP|;mOg4HSLZ@x6g#6pckU!~#p45^Ay)SL z^3`k=m;hijZXqSI+NzPKcd|*)8(24c14;Cn=kd)e*qF#@|6CBoXr&&-XyC7CMzaPgyrxF0vVmlVxh*Q=#o<)9%&KDCDc_r@ z0vGnJ3xw>*Y~2p|uH*Y2Y5OxnPmq^;dMHp)mt&v1Cda;HKW;{kw^z=F7!5g^(n5_f zEDgRdR??tpO@I#Zh4ijra(QbuQbOinxcdhw33=+*)b&LeNllqcDs!+oxfcsnjdMTU z3+3O;i|(!2%h@Z;=3V2EC=xXjA=D(_5^R&})NDhE#AAJq9dR|NVlEmHWuVzfvj5B` z3PQ7!&bYNA~hvzWV#rWtl0*V6O3&=8+f<;bo;@Vd({kpB{schVT z$+q;Q9fQ~{THE&T)Pd8P@0W8eY^6_ zH~@T_aRB_5ipD0T@*7riL|*e75i===-`L-zLVjbXlZyFG#R0g&V|Db)w_w=WenZoUx#2f7jhGvLn}FG7A>)Kd*BF&xh%%uWww)&J0`jSH zcN+yfnF&Icu@HEZO2C^`!jkX=%7ax=3G~T-DPjIQ14k}R{!{8TtRqA=%zixSz!-Zu z`G7?%4!=o+5U}pOq8T?Pg|NaL3J*qELWoS4@8bgBCfwb_rE&sK zLllcS2|XCLdw;R)FHl^6mN8fvB(aSrcEJ8@1=13+oKT?a+uJM8MuBtLko>F1IEOli zP=7ASO0-wDM==tgmL}$ou~#x@a&B2^yL>zC6ZXm<*cf!jb@-%Bsv4iphH6S@4iC%6>hc$-yRvF0Phl$5GCqKu!^wuZX&GqUjH8Vl&PaP1!N%y{sQZFTf*GG>F1=hr z6lK+zn1NJUf$+ki2i3k6eyfIQ9go2ESvdv1ahvuQ_-@$*W6a?LT*EuUa=OVd9_l9s zcG`Ced}B5lJPk5IGzjw40stMH2w^5AVo}25f~*bd<}p4F-AD?Q;T!uSNY;xudg6+V zZuS6}o8mb#K+ft^QOTo3AYW5ynj+&=gK+8-8?>5l5}+t$KxAJjuw%VT&M-dhYuZR@ z2~5ZcuBROdw!UgK8t2A>Z*nd$M^0wH*gftet0;o1@ zBmlqpUIn!{y74pP$y2z5N@;#?gj$H3KMH#O1!Al*$OPfOjhwBNgz(~JiEn3|uLsFXy zl^?ZIlCfGX`rllD8WH)h-(Hah=e4-P?tcl7${SwjcHWit%F|>{b-p})AWr$=7R@6f zcT{k(_ed(@0KfP;8;=g!E0r*x1}e37`LDtT2r4orZYKVhIy7%Xs{Ov($aLPdJDuK| zoz4TFJ8KSInd{w^dX?TikrkGuqG!$S`b5jx=4pdHODc{fV(`_-z8KH#3WFU z5vxZ5Ph0G1)(3yJ(RLl2gbz&L+pfa=yU(NMx4F|EV?X)%_u1D`^RK)??_Dw3UilLt z(>u>|ApH)}^M#;mz*Ud)_g;^uqO~$l7}w7dyLaUsBsCf%F1A_RY~>pLFu0-?2Mt z^k}~W+dtoIzo(+!g*Tl%{L^FGKQVn2dkox6VJ!?Ns?E}P#+$IL^_GhUwS}9($Z(!i zU~nLrs0|X_YDrgbX(CijHRT=JdzQATW%ct+!TCxknV!4KrnbxXP)FD?4EQ=QQPJC} z@O8<=lc$I4%V>I-Ac>BU!}%vVLe+z!BmDkZr6b4#2u8K-vgI#=j!-U;JRq*`u#Qle zs&s_j)Dg}B;Nt%_VOMV?or1T+YQp=w0L%%_*)YC!TlG-jrmjTc#`N7^^x4VtQU<|^ zw6A0dxq>SZ_HzHj;{s-SJ(G3db8|lgoc)-O0kty+WQsP=dnZ4j-|dVV5Mo*qV9y%V z3Wlzqw1(=ie=l|VSAmN42zatDsR@?Q)v~ra6(g4YjnNI6a*Zzd6X4=lhH~zlgnO|o zQL2x5ag?bsQLW&zquyW9;n+J;O9!X+&o_hPmGcP}R%Jh;*U_{er7D{lR5X|aVVyND z_bRnO1v=4SOKlrAKvnqOCgD1t@Yiy8DK* z%Ij~wAhX(Y8cP3>%j}GKcmt2Rgw8Cl&&*E!hX+2b&KLZfi}prOJJa@)N(+are;!CT z@-D@T=8?-Ul7-i?$Iz2L{WnPATMPf5MBL*OKmt-4{;~7OG2VJghT+Br!uIVDG}g*& zER}HUN%PbRGihv2Y-7;51s2_QDhFeR^jl^1Igzp$bGS)gIkOpK{|?THSgeTuDd{He zQ;6|&BhgilE$JsP*(+^-+o=d2i8!DlwnWbV741wr7zd2K8q9g2S0YCA=GxZ^W7}VF zwDxZ}@%D{^*!CwJt^LDoPZ<96t7F^GI9mJjj@`a}HkDP22E17?UGw+ogh(Oq%D{eu z@B#m+(Rb{QhO*2!x4E6T2O97GHqdwv{UxFr_jMyDbdN8V$*XbUSNC7P0|{{*p;mo2 zBiz(%06uuzyKG=-lLr2#8hF32)%V+x1`v27ydXCqB7b(G$_t+u>wLu>yzD-vT4_QPkU(d`X9DX|^F!MPvS?K1fjmbYe?e8yo}yBoUhS zN`s0RPj)xdg1-^KIco&xe-7vW9cuoYY2P|^G(~sP*6o=6(7iQ{hr8!|BQ_VF%EkHi zo)Qhhphlj##zs@lbmMMb=|aoGnQj+4*m5O0_~G^#0h3_qR-36sMJYj3-~ez9Jm|Ga&}2@7XP!-uHPlPA^g2%YpfIXT=P;Y%0#kBh{Pg!j&~R zbp|PRAG+ZBV770{>_wKYn{;+e`&+(};Ys@wV%rb>5&OqfY*TSQeh9X!gXMg@qo+vQA#=1{ zINsMk3WI6ku5kYqcJW1Z&@qAviiT>`j8 zx9_dsLDZL&ewxFZJ!==ZjV?E=UZEu8C-Gh2JAHRPL?@uU2rav@5_I%CAsQVBkx(kf zt+$EFL2sL%g7X98=VwU49(QhqcBUu&^?6HvtVlzz{#?{KY8(HmE+$VhWM=& zC{r|z=q-(WpvHmtCOSYP_h)c!L}hBSzD&ur)@}{=WMrM@=>;j7XzJftqZ8c;h~7h7 zYYC($j6aNA{n_v?+R=b@uez~fW!w=1Oz1B$-8K0k>*M4||3F~YRf(SKA*MzD%Np(Q zxa>;`lQTyrdxj`_aV^mN-84Vt;|(+GV1IB!;}}D=gExBcxN6qW6t}H!bsz+L)(8r} zRAbY^79d_47mdEA_d`taMBo$r+yH>PGNo zMt5A22&#d-glZqXA$^0G;A8P$vu`bHxTEFHpKPE!vo!FK9z#Rv-@1Pwoh*vE%do1- zI(K&si)t!n9i|UpU&YS4@9|G$r&zOs7#ll>C^6HQL01 z#+Hf+!vr>5#JN%u0_Wnx+!0_bMIchD$QRsiS8)lKD7=xucT)*E5HuQi8*t;zbFgBy z$pha9mq@Mc6dZ|AtAbt`%aw7SVQSdWRgCY8|Am^R`D&Qfw&=_RDex_G~i*Vd>zsx)W^OgUZUbbP^M8qBY>!FOld$RX_pFO zQ;=_1`{O;|gqy_j;;qIZ@(+O8nNG?e9D3SAq^6UEna~J93%T^A4HQ5by3raS0RD

rxW2%}7WZWZ`tW$XUjSoCI5;OE@C?IwW%cXOU0A@9D^kLKUdoTywoIhA>IVB271`YDRJ8^(bMKwoK zNZn8)O^P`ttb#Q&McRRXPqn|3071R4VH4*U1l^iu-(YLhE2>4WfQ`i6#--=Phb|DS zI(%A(z*bm48AX-~e>J89msaT#@f*@B&<>w<&CId(*{@&@FnTO?FuUiT3i9<-0Rtdl z5swgZ|G$Bf2W z(KL+k4xvsDYEf&sl7Ii7e*ZoFCNT-`(dqXFa?2X8@XufI=P2|WfAB=;H)V*qc0t^o z(E3TM8Y~a8o;G48W4D}oj1fPfN1_%^^Q+>YzyDuZKV5#?(>KgP=Fr4E|7b_>>qhHm zc{A(hYu9uAY_ql5^)ui&x%G3AtdA7ul@ifg#0izb8Crt#r*B7APXPSDOaa*G+wAIz zgkZ^6W5w8r6{F65u~WYqt7o08p0}c!vQO5X6<#o8{ZzTZLhTCtu8p{0XWT}tpX)uP z;l+*~dbNIzt(Gq@z*tszs3tL-Ql?$u zgMSYfIqgN7X<-t$=G&E(-U^S#dFaTS{p%*+4gMj7$C>Q4Br%Rp9*C~3lhPgcb@x?`(ef2WUuG} zRUP(<)%(h^075_N$=_(Dh&an+{*XRp^~6+tS5G=IwE*xT9^f9JZSn*yevOv3Z?e5? z+RZjuKkb$DNHWZnBvt?F z;d=j8hEasUuSg(#W}eh3!NUud!y}YmfQNe0zd3f2W$t>A#RF46Ep|ypn*_=-d>0at zI%c9wS|AvK3w)6<;LjCZzktTH=M$23G!d2)sVuk7Sz)I*ed&+Ky=@zE873=_vS8}N zbhJWz&2Uxh@pFv4?q8smw8p96T}@Q$w(r}BYhcM-czd3m13uAh+f~t{EP4<{(WEKU zggbD8soGskt6^4EHNd{7QzZT?tBRhKd)DL8Mt(UJU$*hfJ3=4)+R0yS@x|bm1^BX; zU!Jv|AH=UIkA~&|mJte;1CIihRtmgXP=xqFRhF#EbXHr3qN6Mh zZG+L$x$)uMTY zQ-=R@4NED*6Y$%(4KA374F72!C9pDVdnoymU}7`Q;Uvd$oeKC8qv11N{x*8>!Ko2v zLrd`WwBRG3ooZi#`Smx1m`KA$*Ke`Ra$+PJBdwN0>#U|^d`;iCMc&{3P56EL@xA{J z;$t0Fc!lv)+F-Lav{_(!8Q~3R{k@p`uuJ_^WFwQ+K{C?NS`y-F*ed5pd*D(IJ ze;pbBalOy}^Jl{U;0d=o+?vC;T@Tl52+kPt$`{Tp5H=$;LUC=Du7R)m{+ z*CJ)JpE2{#5x(Rz1$TV5<@#kDu9AkWDPmk0Zg@2tl=rVQ;VUG6y|k1MUv~5FrVur$XS?pX)4Wtds6T5*Kdc!EkodVoMHcV7Y9*@%OWbi3S)H{uWJyj zv|t~ba-rFO3j2rp$c50lA7J2lf@#PPBO}}C6<2x5f45{9 zWiM!N{PJZBu!%uj&chpy7625hI2DbI;GY@`D}nDk6FziHABM<6NMZ1ZmI`X(gl~ki zBdAg9!@Mt>V5LcXV7GAlRITOMaB57W#x+(ep^szGr}+CQ@TDIMzQediq7l`O2R>eG z8yU3mw$)0r@Lgbz52#~oAMl3-C~74&_Mh_`CsyntTC+16ve4VH12=yOeU91wl;R^z z+yDLXv>yPCLFcOz5t|n``P?!Db>ZIn<-6i1w=bL8H!k2w!GhSYZ0aR(o>TEH9skqH zruK`2^V;7D(e7I7)|1;Yu5U6|&bCXTFvf8^V8!?e{Fx?xGKilX(|0Dmv8!J7_^r{;X7Rm!u@kKQ9A`(M*J>(1HlAF1#_V&49fWlAI7lE(9gb#@5 z(d_|f1K2;jIZO_RzlXg{oG}G|yx9-EXK4{r0?;CQ9%5u&Yqb-!{Q*TFaXRK|6<`bf zEvo%Avwa*4vbDb(DHp%V#iW;$b}O9-(pOV_6kq$K8Tjn87odN$4NORS<}f{hNGph% zDAmyTUE8r@_@r@8WC&9*BC}+O5ns1`d>EbI&gUrA5Tpaue%ZSi6;*q*2-W^Van0bn zMDbv{QWkq_QXm)+iLlQ2`?XL$!8PLKL??3~BD|{^L`@YYA{|7qD_WJ}CWuB;P^7!^ z)-l0fqd`agBz^3&Ly_@kvI`l1k-8~6gB|mF>$Bnjm#?;OwV2+qKKGLp5HQU5B)W>s z7dIN~W^(t!616vDd-{Mk(FfrLg0X&Tx_rYL$(E59X)I9n;7T%pgO{@y=fHm?yLbjG zAi-uaPZhG z2jB~nr&P)317_01`DPNvVg$QRNF1q8w;`M)u^{WW$+<4yt8!#Tj#eLb`F1hMjXuDC z2rNANIU>aD4Ew{4?9{L7%em91H|Euq1@T`wYxbPweAi0hRS>_2cu{Yetsrq;DO%w_ z0x2y6c-BF74D?lqZ|FJB?k#A?UK>+!o6`4;A4h)+1xlZr_92>rswqhY5|*EaU+=-H z6&JjlwyguTDfsSAMvDmnySENMocid7;3;@WR;f^_Ts6$I!o=ZvciaOE8UFd?0Xz>` z3{Zq4$P2R$fET7NATOvVjd=pRActe|634-pi8BqKPPxO1TwpvQ(FBneUXp5!S>WNN z!U7~KY0VrXZJ$TzF@5S$!gToOaR19@@`CHi~f8#)8@uUfc#o;*SRubd?`Q%J1*!$amY<7c=(qTYu*U6a?k;qrh>hf07P8=3fDn!w4h06i@w&uD9F zz{3rpZa6cWkyqvFp2IBA`Vh3U5s@nbA3~+t&A@rtL-8}OEWnNN3_ig^wbVK#p!v2s z4+LHD8?>7G*0?3lr6+V6sV9^b^up}VLm%G5$&;Q5dWjwH!DPGF&2f6G(O+HyOjVHV zIKPYwbDh1aQJk#lrF&fdc1RS?OVqH0S`<_=hKAcXv=F{mZO1P_%x6y%F{*}@*1^17 z5R@T3dFD!eDo!Go<`5D+`3y}T2S_;NL&o02vflDK&q z6OtkC9Lf1nk?!e)`5b{+@rzu%tU4XPHX-HmRD`@5Mk zndFXorukZNAdMtrlR=Ke&%A=sd%_@V zBMgE#K<5F2m#Kk4v|jZtJsAv={76AB7{GGqpG=NNI|O0@1F zFbn)rk<89HT26oh%=-e&d-xiiy*4|&wP2m8dz=XLJn%&Uj%+w7Mit4;$q6Bli5F$= zg3Sj!yN~y~&YPzu6(5m@iF!(cp`bAm3f5y1TSDM+@@mat2!S;b8f(7K zqG`O{rFQ_0JNOEEA(Z$?@}$27A4IATHUDSf8zu$mnIIh9Fr|Q^izR|71u}$` z$i)Y<^nk5LyTI>js5-6&rPT!Yr5PXsxMSR}_5#go>i5nk+)m6|lQw3AHH7 zii~d+if$5$9%?rO1~AHJNOoqELc)Zj5p_djqCPM3J@`sni?Z|Z&86oGWu?QTP_{*~ zrbm;t;Rlel{_*C>%6b-AEtP}hC2cH~L<#r#2?C5FYm%(Cra)*U-#PQugle;}8L~bi z**RMvYj}#f2=XuiIhv-6-w039;b^BRK~qI;|8F$fuycj1kJ=|yU!Nk&+Q0-qIH68M8pP~eNO|6A}+(6=M!|0(pxNN$n&Di0*Y?M`%R34H=^ zyh0!Pf+@jGWsRC&s;~qu?WNFvbr0zC;$upL@`)uec&Rs;$0;(O5~fVvixa0l~93Wan$11VmT^G{}V^dvDoU@5WwC$SAiXo{5P^$Q~!f+qA6P`{cn1dkWfgD z68l}0kjU#ly{XJUC7?9FlM(taDf!^G0mq{G-HLBY^5-Q?KbGb<+@fT(%uf-Dm@@y% z?|8qGQTJ$b;(;}fPdtnREJ`-~gtasLPK&bPyT8X$Qr7P&;uvX$h_UN;AAoFJAOJ@T zhsW8ZqT)qps3j^gQ=Zb|xwqgHi4ygvTU4A7Bj-s!S-MX`$_xEu{eC_u8GeL{kF_Qh zDdqDLCLD{3&Fb%tXexFO0wt$EqG+h*UyZ246><+Z=|Q=C^p$%YAW<~DNY>tCE!*e4 z(hLpX6dy@r8dCCX0|2?m+1<+SeGFJP_hz})N`Ae8A&hyr@!YI=8Jz?aS?Pa?kkx9F zMlWvC5DB8PiRG5>5~IQ&)@w@#eKAsh{H{)3MCCdU?9yt!YwOZoX=A_xS@?f%f}%ZT zdvF1PG8bC{r!Juh!?)~Pz_&Qi7`~oS@GXI7qhiQ3Fr)Yn=`7$B#cqP z%hzKE`MI-K4SF?qkR7oN;QqpuwPEsz=444CA(m?%fMF~QkA4FzJ@}AfM6#TDVFQmk zRmfd6mTZVv7pxt=+803G=&E5aImYD0XC+R+v~o4Fe38>(1%tNt)QiH4*FKANf*oK}6#K(G_$!S+^UuTl^8o+M;h+2P2l8WGVrkDHkaoum{N;pu;)XvB8O zVeEsuh2b!3!R#g=yG7S5~1i^@M7nrF8?Gb)TEcNQ?F9oo|6BWO!vQKb*q| zOlqt7aY}PaVkiL@Q$Q;-18{(A$T2Hf%mbphaQUl3pMgC8;M9UYRFf7ZVFhn|zXTRKS4_6*>T{lbOC8?P6l;PxJ^2fFM@Ecozu?pzl$pK)p zZ<9~cj8VD%eTDoy;5@ro6? z9i0Ar{J$~L=`V2PHhjt&EavK`wp))s$4M?$%!}ZOi7Z6izu+)z2jtVhGMQU;u$|l4 z*fLtT6LNd2PpxjMU2dX>s5W`*^>esn(5AYT2lg?w=(Y<4m}F?NOw8P+04Q#6o_$f9 zT=+8caVr$=$kv;kv@D&i<(m#ASih3(zZfuP@<~wLu9}G4%Iq*eX(oB_tF^f_E^d`_81~>s#;1Arplb%q`lo`$CNaGYGAj>Hb@{JO zH|DlN?m2JxX6%R`*?8*xCY^;|j&0wHuR;6c;MLVTkB77V|GOeqy3Ov zOXF~%3K>r#8%DETiwoOW-n4)5UWY0O1jlEeU55T*X@Du@(i5=AU7bi+;7U&~kJ;a%&!In!?=OH5`YZQyX?-}Ix%x1}D-27e> zyah)@lSXhT^l@AK?RVgG^*DcFLe}U64|G>V_VSznHoL++(qVL#3+QL_?vfKH=Mxg( zcNByOt7VN&@to!#m6|m=)zjYZOv}0|t>p{~*TsMuoDc=&am8=kYQhh4G9m&&R0qnllUs$FS0;6*Slf46F|%N$m$CzYzUt!lLxlKfW?hV4G|Xrd3hWe*-LOg;@c24 zIOVt**J7knbV`%dv)D9b^HTX#w*YZbmEZ8wb7iDxSM}nI$veJhP`bVHTr|iR_o4#x z=Wd>kAa#{2xj;vjqpS@xl7eboRi&cUp)$3)wmB6I>Sn&2s_AKc3iM>~gPBMjP7j=W zpPyDOJwy4!C;VhWmH~@D&%}={#;fs~n4g#6c5vCz2 z?J%iVV^Ni0f96yE3Y(D-E~Lu7>(|*B+km_AAtXoj^3@~;314C2LTNY_*m8o{sucSJ z=S!u-12_T^X@~JlTb7lfQ3N$1zL0r;ExM4j9LHWh^_L_PzxzEO$|X_BZR7=GEDwzGa*17h$`dFb zNHuJUs8?6X4+)mBmk~EC1QS_?e@{+;0?qOctwi z4??QCT;E3ThE#9uGiCK>OgUXtr;f1oxAL4-mYL+~T2>n0j<*eu;YCLZ2&6ae&K-@} z5A{4eQ%WG7F-0qcx^-=nWOgMQaPF69z{^*gKTM*Tzu}+PZ98}8#jQ9~-sf)Th%xK~ z-nU^UOYgdGV4N|4rzo+DU@fRDuj37FGAPAu%N}5;SaUri8-z2fdS)`bn91?EW%a4< z@A0>-`&*RS?;A=>6-HR(>{SczG985nwmV^XaP{1XXn}a#;)?j!*7$%|b$UlM(jg_c z?2t5ah>hr_@d0PnVO%;0$pXbKmAT8btV5G*7zA&nRC+I$F^!3G^#LQcV!?6FB6o=n z@CBK%jAIg=0Tm}ic6&d`{$<+dtc~R3WMaiYNEwIMOK{&BdNd_T<$mpbh;9CxrP*Bv zv|d}i**85N-eCpMNeJ(04kNgUEvj=!;awJ^0eyvz5bg#*0=jQ7Ad7!-f9p<(&?v>XF84#2-k#!Yrb~s z_r^PsZv4K3KqjXJVRix^@H3|%k$6WB10;#ROD}JL=H?V*HOw})mr9T-0*ZFy~r#?m+Cs_my4uY%|GPl~; zgv`OS6|CH;Dhr7`y+g5>;4K4CXJQs2uFBp6guk)d)Et^%!?B{WMaqmC)^b z;vbazTGPkIgVQD@#egF7W5s6lzXX2*5dltIrWoaK69E+J;3S9aOoGT<8qtj-`XdQx z>M#yAlZqo;K&cDw;zld9k;*2~P@K{J6A_}G+Xkh&|1~}^sI41$k;J&wR`cGg#Z4ap zB`h5S@wCJ5jJR1>;QP$Ba+&?8^iZOqlGnCTK2{DoX4gzC70M9ccg{vd4?)Rk~RF9(LDh5V`FHa8mIen}Ho^RBNHTp}By;_Iu8djH)vm zJ;ouF{WIIaC5!bTJwS%bF&VA|3|9(tJ`o*qG3Uyd@ayN*7tksKH1k&LUkVI8o0XHdBN zPi9!5DHutD=Q@i?T4cMO2zCMmPj7ap6dF;OvpA8lip>5UZ>zp z^bkfc;+lIcoE_)M=8VnYjD<+Kf(R^g=Ym&A18MIyrhJ*bw1|wv25T11P=o zPgl@iAYzYuSKU^Di?3ItlbvT5tVS8HzY92uTDzU`6mVby_w zxbJ#7#0UMl16aQ7&_(vSwXm*eSs&ORd=Zs#sU!&ciSH+6d3A2tnWsCe%MRrfoUyr} zXRUJu$5wx5L+gT`+o58hcs(=dErsM%MtA%%tNv}l{ z8vO?k1EgkGW>u)@Uj?~k(jS@zxep|4L$iXqGZWhzT0^kg83{e;gPC{#FY)7f8OoY< ziPF<*%*X&R z`cTl|;2HO{)vw*@+Zx(DK7f`#)UOp{toE)+4ZY8~EILX?z~A{&-~DmWq1K4xM(B@7wLBeH19?l#`qoQeH>NOLW!oZZVs~Zn};JQiR5>hTM3QAh`E$f}} z`NEhH2qQ=2mT~#tqe;rCm=YWsCaU-cv4dA8fIb!-%l9nA3QPaMiaxt>{{B-yF9)DI zZ@B@c;|30QNm&`^&o?DyQMY9st&bS!#au)v_rdmrGiD`$$NkJo>t1?!$ku23xkJcX0%C zv|+1CgPDt)Wy_Q&rfggP;vAgcl|`W^AU>`ddk<7fC#Lxl+9th#T)}sM*T&3_gJz(dIN%h z3CKrTjm?*U6!p}qZIR$-7;Un8Vd{Rkhhu?}t0NR>&aw%lQ?)d?GObKL7pptO{MlD_ zkhLlYA6Tn$@nQ6S{JVyH+_qBjFo;I`e4*)1St-Uy<5duskNe>+paPr>ub0lAZ_P7AM}aw?8o? z?mf(cIOE!KtiZC^K=3+Wg~u9i=kV>9_!jPSzA*>GnV+_kKhYZ-rQ%d#9PYyT2g{0e zpBoB!5Tn;YXL)rdr&{G^_$+JlD>fI{^ViXAms7yQ7ZqqijK=l{egzN&ktP6Cr>k`g z)0<;{2REWjeqtrHSJbiw&`K8JAp|FHsl(>4NIURvt>(y;-ftXQJY1K`!R^i7Q9*Hl zb6YRSNEprD$(R6-j#X0NJEs6b!R0#}qx^APPLoj@Pf?6F3Lx-idsV~aOTxmi7>8jO zSCJ|)rHx2Cq8ZWKccSF;`kB9!( zmGm{U21z2Gxu#9H5N_=0sxzX2O(`@aiaSS@G=qkvgc-b4hELePF&EFojwARPeo8)q z@87|ViQVywuKjBHMBs@r>2FYglFkunG8Ac0nvo_*@d#1#TJ!Jsb)kBtM5GCl<829kOHEAs?oAwFE03uT+oU#Rs6U z9vJ!Xz&76D7>?)3HZcaLK=20mbDLSWtRh*k;4nkT5BSj!X>RzQi%OtC{UQ~!SS@i+ zbqOzVMdV{}V5xl0H%}B+$mv1x_H)gXFWh!R{MM!qi<3Q!p=C+HkNdO$^fS``rB1Y; z1{dQaK+Y)P8_=4NP*XL?j7DbU0Q;pPIwD@=1NA%PzfT4?e{9`PyXD(FJ(sdnJ7crf zv)(BIMO4<2vJ~ncNR|#LI%2!tuiQi_?B;!KeQ>pOcMiK}0K%+k>%$!6`Xl z$$RvEtukJ}jTBThBS%CI${av_;#(FJQ!rCzX0kUNZ&O}}`75y=Jbvpj zV4#jkIN#0cr)h@ zjuFPpAGx)_(mxe@hrP#BR;c-N*DVp=kIbK)=KLup9XTz+^9J->z~9mH=YCneEJZRh zf2{drftd+pTJr}e7gMuZ`mxJtEufj|Q`W{A1#~L3$@LzbH4ACnwfImk@vmUVxYsze z<4fQy>V25)5PL_0vCn+HaA&T!{-!Cf;`O%fzadwhU8g~c3`kZAKypQ9Ljf*a=@I<3 z1D@;FSyc1WoG%evhgpwJ31eddTIbFgfyq zP@+{O2IeH}4+w5j@DhUC^2~?=55CQ;jiKRDFiu?t7(F*P2cszjp-E|4Ry~iEnd+Ja z4k3<)G~2FIM1`RoFSu=|fSksYfngvO?r>fNdrgaX6%r}$2eDbjYOCId@PlX?uxTj( z{qXnX&}NahjWUn#;E1iqJ^rG#c`20d7Rp``zC+gm(rw0RpM44YAO1AbgKYJ0!)&bg7@ddR?dz8U z4*EgC0-Nx%k~(Dv&vv(g;xi7}#j|ScbIN3UxK``+iPLw`d0-n4&AWQmSeVuH?tO*t zBlB}0H<=de0~=*PwZ--pibv?lr|^&(<%kQhKFD%lp?ErX$p}Cf0&PQ>4^X}eV2gd~ zCZY~C*bXV;^sU07W}<@iBO+U2mjTG6#Z`JjYZz=1zrOUuQ6FBNseg(lVM@rXTFB0U z*o|s>V@*QUum&BbRIKt4Ubeqp%+X>0YSi5b_!`YzOEO1u_&Bmc8Alw$f|kto)dbI> zc?2m==RAh-YrUZIeWo4QE+f1+_S= zju!4*pj9&L_qR4C)iFqPjwOr+za{$Jz;R9K6HS-1gXi#Ms&0GaO_^t*9L%$!m*6Gc zHcJ(4W6>ojGG2dE%5PKU)hzF(s*X`budyhRRlTa}AXWYt%lG!f+nBvr`#FJM#H5o6 z3=QB5Na>sG-ZEem6Zr!7t@*y%T<^M8j88bo&=EVOTy_hDWc9<=}D^&myS%QbLdJ0+A6omzP+CUfBj4WD^wUeXuPzk95ufD3`^sPl40rKK-=F(JQNhhXJSs=ex zT7u;)a;jGX98OH6Taz%nL5UVCc1qoo6Dz$eo_%m3#^$>oV>=FsaxUW^hvoVgRVWDbs~egDECwb_9t8~EZVjffjB2B>Gg{X~VGPeD>hF})!Qn7oiCAt8NRKI& z&8^^S;kd?I!KP9*IQ2D=i(3Xlf?W&;gz++ckh<+=Rlb7dUFew5Z6j6DODt-wiUz5o z$5^!YBB|9&72Ss-(60`K#swk+62CMhyslrcH;YF-h zrHX1)QCAjuRMG3I=oA*+tcvETqF*jY(MS}IcN3cIl^HGQS(!ssP z#XrPs-=V)WWB)2|Mn8%yx?vt}+5SaEUECAl{ri%?oA$3UiVqi}Mr8jk_2DmtJL7ol zU$3h+lpYh=zq8Gjc-fLaN^p0!+8;^4<>?7PYCOLuiWJRI;ZqK$MUak31=I0mpp`HcG5{&9km&>#vLu!Y ztV*x-gyW(@-fJgLg`kIyM%|YFvdro7%OwAKFEpgvl2zHCP-d)CMe(X=EQ{VoQDb|! zUHOOo1SBse3iJG6*e1^Shbhy|*asL`l_tXDNzD7D>8>>9Om6XvXCacn83%vCRfFv` zJr6;ju3u@c#9Jg8jvT0?BtRw=9L?XZVH3{oeTrCxQf%zhUpNsHjm7tyU!)(e~0?b?AlNto30XP2Ikg3N{yyLi}euKE7mcQZmW5d!BP zNHx4~0GelJpYg~KtHA~5^z92f;No5JYha2%5SOjbYWg;MWZ*+?--4ml)?Sr$U>THM z7mQ=sjVu+WAC$UlLC+5(8mqJCVWq8laL*tv7#xoC;UOCi$s|E7EvV0CF29UDeTYW0a?Y z)Tpr&lr?@af(?fK7tC3(&_YgRJfS9KT+VG9d<$b)@{&AJUTMXj-A*Opt%JF9Re#*& z{m_n$m^O9p_O?dv_Eri&TKp&Aje!`y>3zqEl=9UC9o*$ZWQzGZ%w7wG{~j>2JFXOA z1NjDu+AI1}HHFWVf`@BDsz9mgA_OQs(vJ1M~Zs%JHVef*lw@*LEcgO4w5v$y1>~4e!{?( zVs!36F0g7Km4#Uex|mdg0wAZ?^o1(6D8IfA^&N;`s_wK^)c4|R)?6N>RZK8Ocj?eDc`MY0Rd4ZQNCNFJ&A8mg8-zpyk7R0Bqgs961vjK)+q_0~U`Y z4Yqo|YIOKfxx4s7`A-n_!0X?6HXH1gBVTa}*;Iu%hMiK@i8#*WSDjHQdUjU3VR4cQ z*|=;DBRWhLy8k+b7FI?7hYt|lo(nW&f#qoUFEXO2)UaZK-GZlbL=w(o-#WoRqMjJ= z!eamga3gDg%EbbSt-IM<27iJG3VszV!|@pdg_Gx+?=gfc{SPKz&Xq>UmslU4CKXgk z_|OpeKUhog3NBkH9VnU0j#P&$%^0Y~O7ezfBVG{wu%TMCb-AAiKuZ}+ZcEWvc-d#` z3T)-nG^$zw7Cota0n`+bft5MpYJosCVtf@Zb)J4s)mdlO*~m}bmOFb$+zJ@b@m;5RcL=io#2Cqf8R{3w)}D>RIj;tTdq|#2{ zUS~Xnb&|X;cWeS8qA+4X<}ZcnXV_p9RKu`fj*KIOvLznQQhBRp@>QHX>jVWAW^!zW zg0Oo2@L!aA?i;4?Mf^lINk!7O)x-mWJyMTYrJ;@3i}7m-z#O@Si6~F6 z(!b`(f;ZPZihZ2iw-ToXbs#F5 zXwVzEK^&@BwZ&>FR;>sL;Dk5a0J&ZcM(b0mzLr+o`mF7v)*@A_K`4V*1+;+TfH<9a zwc_xQLCydBTl<`w8wP9tZQuX%&*zhK_T6WXYp=cb+H0-7whTH!2MwiT)1vu={~NCM zy2_m5h`}-x=Kig792yQ(2B27J@6dwqP|z}-IZwM?QNw+|ouh`z?Wo}|XE^{UrkxtL z&Xw;5SoE&J+fS?y&&T!t6WV3J_{Do{Pj$qhY?hk(klQbw@1piqRK1J(t&7@KQQuWm zX2`GSiJ3n3Azl)Fz-s1*sP2AS5bWCu(<{UMJ(7b@)cWao#MW0#y*1<_m;YjWbtKby zWd(J(xec!2k++L;>%(Lpt8P?$tbY6vmyW;eiYs){Vo$XkHXPRz!Adcq=HViQqrz@~0wA{i0Q;^! zV}@B447MYiIS_Qo-yk~s{W~B`+wEbI>K~OHd|=(KXihhZB0*q`LNXUbtXbd?klS;N zt%BJeYFWrA*xs}TQw27i-puck-<$R;J+ZY)ZaL6vEak`O=H!-(y{QL)h6%r_Fo7Om zro^BU_7);P-LZiy8@m_Vl?wSvi5J?H65;s~bQ50Vvl=$0#7HBysDKD^MPA)rtp5e- znIg3B7-^qu_Q zDP<8MkKotUYt+>f2{2`(X-McFHqEj*Q2(^{Bv|M;{-}pONxopFq4cjsR-yE7{`d>c z%1MHGa~roH>fEg34q4iBU4KR+< zP{s)|)RKt)k;CY#=--L)0r>g3fec&1Eo_1#)pmb)_fA;ANV^z{Ld58_m+1DVD8Kib zhw}Su9+0iBcNrzStlt?=?r{hn_SXttg913M}=uAQ|x;KxU2TRr!cu5oU_@G}BQ zn6egrQi|UJ%Vew+36YlJKfRaKN=xgyRwYk35!3Gl+0J+l8_J&U7~S^lO}Uqxa@W_t z#=j7xFp=VG`SK$(;GXUJe6p=MYCfG`Ca8*DiL^U_T} z5O6BJxhD-uwVD0Z*(Qv@eHQzV8y*Ed=mv44uA}mq(q}#ZKAV8gd;$(Ww|~9bDmy}K z7Y>WB%=V=P-gNmVtr@Vi#y^`5=d11g9=kc|-Y_tA^G(p5W4f|8{Abh%i7u;P0)(jm z?MwVj#^<-467TzZyl^!QOmB5Q{pv(9L+eYdMvqy=%EpR;kj4y6S*acTkIh>X0JAVL z0&|DKP;xDFfY7KDbV~3|R4l#eQo(<)2C11u(Kzg?6{8tZfe65|;FCYNalkwT4}y%t zsqcs5P(i@Zbe4u8SC0mHq$(TS5$vTyC8}JS9boi_`n~D80~YAlrk@E<{nzweD#fsx zQ(O2_s0FP`Rt)KYuE#@vYEoOk*tH_U;756M-T*rHSw6;cDA%PMjw4DRJ5cMl*Qq5tF4c2{oq#xsq%oOZ)P@5OlY80G$bV zY`pR-9M}<#yMn$;n>E=td()+Ds2T7~jepKI_*?jq=t?i`gOe)JII3XuXJSOx)=$<_ z+zZ_m_ad##)+p%+CAD=EL}RUu^pZc z5(A}=jC=YCknyIKlSmYrvx)uc5Q$z}n0<|Br+CFDlgG#L?GeY9%e4Oi)x5bkmK0X| zXDoOACnjR^_(^tuB7Rzx+*Is-da1=vfuEJhw&ID$^4*&@*K*dCbn+)JC%VgoJ^aZ( z)%OWqQj4CV*5ZjAc13P}ZRghS!b1vx5$7qH{cF|3&h;h~F+D1x6V@~ov8Bs|g9ri8EtY?TKV*nX_Dl4BLO&jhJ_ zJ(~1L@u2;|4f-)bk8Aa~ibo#SH3uhN+X3xnz<9N5hdP`;{DNgQkN!uk8oJLUp_@v#$wi^OBI!L>qCTZ(TyOcX># zRcCf#V1^gf%zvZ2w#$;5Kh}M3Qr%J1Sz9q*o+_KO_{Mcfr9J|A;+pazyl(t)W$88k z!WtPFUK9tXvOPvV>X#0`>9hhfpAGI<$FA5Mr0tPwNmy|93b61I<$;12W${aU<}$8* zn~aMqOC)Ve4S9AryJ_dI_tdoW)#&&9?Km8srjc1UI`B}8^)w_v!KP=$?7nOqi0#YW z(I%zeq?VIj;0!iA=hQ#5tvj+;-!{eYzrn)N|K*kqk*~d>Z^1G8;_vsDFXN_V>NkT) zh0xg&ii)++$FhMO-OUWq+2c?z!Au(!Z2n*;g&KdeR$u-7>cWDb&FrAy&yJ$tqbb;Y zj{2qFA9hPY-X*tO8(yz#!$%MuWIXEkdoC18AfGW#)$e&MpY*du9rD9yey`)V(97iW z8g(UlKyMZXP$4`N!}!qz_5X`FuhN6nO8*H<8C0D47Dp=UIE3AEW&!co#!Y=k=$paB z;4}_|3@gi)*qRTDX$^$%92x+pUkbLq_i`I5UDTb?0Z4Nr;ruPH4PNt*|QqDKTk3s+okj7Wo%)Ui78$eG=)V(RQxeEo|qeeM6`D=oF5OG^xg_ z+hgK5kcvaF;8aSG9IazaIQyviH=Cm6eXB=FaOE`76Bm_J@PxaHG-v1OhK&=b6&HQF zC)*LbmRKuoNv2BtufA{i)#G!AxL2j~@XJ5;)h~}{lh6Y4yl@0K_S^|?NpAw7*#-pY z#kE{a$}s^U2sj@sYvI!R7b=)v+@jbV9D4QZbYKT*^F$`$0(B!Io2_=1G7_GI3ltyz z5&y6gh4an@Qg@2WzdzCJ2SWd?*PJQhf-zh1gg$ikjYd0UPu~~A!E(-i6tOG>SEz`{ zf2;J*V_7rY7H|f$DkR~KP&-9{BjutofbDoks^iV@7=Yu%ekcqOl1$YK2c)jFiRq-D zA~i;#{OGr{I8!Nwh{#|U8I7GAH}LVgQF@GJ?(K0hN50^J;n@Uyzvs1qdKIeBP!x&u z$~ihJI!EU<5!{U~4GYyBc5SMXH6|#&`vbRriu}7Hv7vAZqN}Nk^J7o^LGbuBZ?GWx zr3*ef-5nnsw6SJ!3lMYpgU5esBDu~t-shHwdlBRJM;6!lMs{sw$rBE$y9IA<<;fEc zt#3$PUwEW9bs~AyhswBrDl#ghD!K!JCgcC0^oZ}U;;>mO2s%C3ivAYOz2^^A4yGG~ zMIsJDgB4=J72kNM(XF1Fjc)yLn&=ixbCA467d_+)v6KgiGU8NB!v9^m=1hM zb;ySp{vQzXzEBS|lWhG76b22)ftjg=C7}E&&NXIV%;#I8u;d@1|Af8Ukv~v}Lga1d zW9ZjWAO>h33_UP#<8P?npyYmOS%~@uMRFThKz;YynOLX{hx#MFKI-p{J)j00bk@N6 zJtw>^)E6!+M$lzQuPYzbY=`8eL^~?{?S0n=tPf7cC*ZP`L1x1-`}J47VfPz2{4Jck z1T+PBE4^u3D28K>7}y-tT=zTGGgvDS!n!z4h0kr%@h4p0h~`(qRQdaT27NIWJE*+^ zZ5I_VjyJ{zi+-=gdR;3}C3jDhY0Vf|gP%L0uokB{28Z6vGeOXr%(c|Mal#EXnTq5o z2i4!}ECfNyIf8CQ@qwd3$^(Ry^AwRO-G>OyhjaeFvBjLlY-CRgR$6+nQpuP};j)#ZoJSHs%#X!sE*2lMDh$F-b-(P{B zZ+s(%pT}{)a>w}T_IJ0@l@Q0v>G}7cnFauQj^U*)YtI941=KR9`K$T$1{{c-V?RWNrmzxiex({(Y&D6@aI5?udJB1_nR z$TzxTjqF02d#z%mCsT zjig8NmN)x6t2;GjOgvT5sqXvn#f2j9`kb^kF1i`IQMFv2ta&!LMy3|9KQ%b<7QwV=q}SkL{S|$0e`lZ|H(6 zFYAcE_dxo0Jal>R|AeAK_>VBy;>fh5HbcA50qxG|RkK)X5M5ST=uQ2TLR_~~3o)jh zwV8bpf{nl2kr2?b(v1#11hV6LCDMr8mKl2)94X66U_laHQt%US!Wf#a!7(?69)pGf zUp)NM;hOYHgiajSQui4j%BxLNrC(!QXifU!ZVcqNtc<;CGCjJXbP3+SA?JC>)F?&W zXuA+$o?%03;fPBXpzjSXzqljV?yz%{(X?-UJAzuC{5(Sm2Be1fMS6ny@2tnl>E%lG zVNa&((mi0xu4=Czq@PQaNVuj1sMzzjs0@wXDpHnziu~O<+8%1VLgc70394&PjGy5Fy89CRWwK_b@7DA~3p8TTT^hi8&(rby# z8I?L^`i5f>GiR_EF9`4-Z~UDodJ)x9oIyPFdypypy-+JNL$3lw3~qrFEouNn|4-l(j!%QUpD}6H=Ad zUw4FezOCzyM!?Z`$>T!$LRG*|eTC6EyAxKG-6q^%d?om_B-kj76iE2WUx4_a!437A1o&AV1 zBHsklrS!!)JKfy&wo^9=WnzyN9}V>Fu!or>-@rv zEmKHs8Oy`@g&S*MD;3A1Y{CeIc$7^Tr4Wy@31b!FQ8qVh=^Xbio2wS{agN>~dJ8Z3 zrH+HBb-7&pZSRXi%oifC7>Zwl_bqQd)kf6e_X3It@w;4L7~F2()qu@RLBY)vR6f|O z<(s0R0b0%dk>i?2r{m*b%^?|;qqNrAT`5m>rNlPQ=SXMPJ>2Dnd>t${>niC_CH?ud zMkUd%O0_HAhKzlUX0S``7eDqR=EPtB)L~BC^F-d9xbR5kgiE~x7zF!Xv=aaniYavc zkFh|7{U4)_PHI=eIJuMEAF-#jOI6-aTdKP(iu`lwWZTS}>8wQbmf+@MdEfj-Wm8@3 zw6H6jfIsGL=mN}t6G^?fd@}QHj&bJ+YKB5ZyHqu70^S9ae*}s>bvs>u`3cwce#Amq zu6!Y{>)$@Yx<2NT1=vy79YU5F69*RzS{wZ00ChTI;39?6GSfC(_#-vuqoDhb1t)#UwH~C1JboA-<=EgC*tcsfJ5;*KtqxBXe0JMJZ2R#)@yt8guwq|s zyNYxBH^;rl)}JzdZ>hiLzjr|V$>hzyTaA5VLA>zeW}NnA&K*ehE07cKrgvRg&@m{#oE)Vv_7E!}XX;WNj?;dNVB{H{I zY1dh4y=&8A-S2j#VI}_-%b8Fh6OW4lsix%0;4j-1c6Z0Z4&QNM>0Dt55tgcT_`lz- ztl?G`4(Y66ZvVRW8ufL%)*Tuan3|WQ`(Q~*P{_nbYFa^G<8;@=9B~MmtPA|&k5&yS z2xiQ4d_koKh;)%CBsh1G++VgBA%09na;@MqsUeRa1FRg6J4zCA;7Ie5d=ILuW!)Uy zEXu$o9to%oJ77NIoma zN~EyhngwAx#>ow3A2m;i@vsf$Z+{pf#(0L(fXKqYjwz32`a8djtx}qd;T1oTuZLxH z;F4^Cg+F=Rj%0S2|89NlWEM0f`Sv+sF6csN8C2F>s|q_4VP<`K)aJf2B9xCQUX%|By1FrIF3fcoU<5Ky-npr&4J zSmkEWk3*cVzan#+!Qa1dT>9*BncFmW>9Z$r6~f4PrfQU}?j^)Ugdc36hHxlui)wH~ zagf!(9Bm(p{B=F#1>AJAA7-x*M$fVqG5Ok;_23*kbqSzbAIRfH1>XsyLfH0auNk9# z1+3E(yEXB{cFoy+AD65FB;XVnyPsIF%TwH)YV!-Xx}!7|PA%+z$pXfA zD_Gtvz9Lw0&YNu_^w~^~`+fFVtC`OtI^MK%p+M#+Ht9`iWl&|m__R0W1&!~Pb>l}O zckguLncm#7h5qCuw-7%0t0_1dc(lg|%n&NaA3T5kE`=ZC5xk|6Vp5yP#h!J`#uQ~1 z?G@fa$9+95w3cr$eF_d*ddY(1mJMF&c5C+5&fbh9q4r8H>`=+YRtcSNBoP%fY)NuL z#Y;`5L~riMPX730*rG2h$H$cTd!XN55H36Ij%^JlN+4);uh5x{E?YJSWOImlNbJ(3tO81 z$cs<6$Af=2@GF?Wqd5=j+JpZb{+;}bJoxVf|E~Y^pTxhH?$58}Ux0tXC$2^RJpP@W z-?aZt{Ojks@UO(bl^^HEsU!YXNW&ZA-w}D?zAkL|*E27^OMATN-w(jQjXZXYe{OyI zFXm84gQ2BjEFg*f2QB6Nal5!?pbT;A#$7Ldq)hfAI<)&j?$9n*JS`87fOD2ggj`D0 zHb2{vTIV%GrFX0Ek$TfZ-1y#qHozDZy_}=pg$RdIOG-#nT1P(V6$)2mn<9Z}FU?uV zIq%>|^+RogJzzI1{(WmApMP&XT${qYKU-fe3;R}XOS5f#S!v{gSBr|a3alG_g5~_i ziuVY$eQ>;D$&K97kcjn3Ztlbt4V#PVcQwM0Ek@^g$9%+D;j)*v$XTm`F&&$9-8N0i zYn`*Nn{ayAzB100<1AT=)mwJDBtb|0o@?NqHVe+6D$D2w>-q-Qq5GZVFRAw!$}&(winxGp2lda=thD zWpX^eqlcVJBRJDFk%sU;p^$5+NOGL>29g~vA!9F@)**q7F8$&NT~RmbVD}d5Bia2- zZH+a=y(qDe5^ZC+H2s>k3&zb>if0^L1=2YDs1fFrrQY!pe$P4gG!)ckiayR_THEtJ zeoz@&iYoK}UiHG8)!w6{5a?|#AG%M=(7p?Xc6nuVb$V2%s?=Mt(N(F>V|5eQ#G*vl zw2POzkA@`tey>h$C^#!qv{1@}GV)i)_82{M>H@B_z#Na5rUKhH+LyiTi>}YAj`iS+ z@gJ=%Ff)q^ib+w~X>`?REeDo+jStyYb2(>C3`O{?Ol`j6EI~ubg zclHmN%i_2B9rQ6I@2v*r7?l2B9_bh2});%D#a zFylM^aN|EA8voS$akXJ268$|A>1icap+xjt!-lzaMUyJ@X70x`qR*Slz0?4HLwS~X zbMZ=Cw4~OrwE16ExEwcIo8k>^NgC%(->4>5Z1JWC3V@{j6PaW$>PTdo%y?nIYA$}P zNciU@-93;v?P|6*_&v(v{_Ro@)l{q*f1EaFgGEv*B^AOFU^(*~9_@#hOaD_Uyq6MB zHUJU_p{n7^yCt$3AcF+ARw4!16OW2Eyf^!t*f<34@7%(aA^d5em8ux-}Z|KUUa3N#>zRwE|NM>u@IQaJom# z3X=b1+YE2Q_BGn~J8kWlU?CoNqc{dfZ45R@#~Oy;B5Z?GCS2(y5SI(<`b%vF!hu9) ze-hkNE!5Elk(Mz@?J7d01Cx-!DIIZ@t>4&YV8dzX=HJEtg7N)$Z;fwV_o#>KyX|ct=Xi)|>g|3s?`z8ljN?&uZ7+q8U^dOBqS_1wDw?u89k?1%=4YzfRwAq!(R6X_Y|fva zqpPvcmHy~RBeH9EcT<~Ljt=mS zj7ktF;zoF^ai`W6u1{oUsn5V+;$`u+q{4i&z76#+Evjyst!~OSBqnfM%e^UYum|JX zHD^SMeo@G3d#EVLr*eVB?Dy89UmTvfYR#tM>BHC5rsXVk@~m3_vQWNOllr`T{9(g= zzWG;g89KO@-N6JlG^%Rc;;1)YQw=>WbS3_mT!uuk6Es*K3DAi9w%4q;ItKRc-d-t)JB2+zRjmeu;n0szKQ$kf)GC+;n8Vr*A{;Jsyv zw?ibjf)f@2R9xA&pajKK34ZLm4=@234=f+;sMug{t^q%_ARL9bo7e`@e(}XcYbci{ z9J8irx3~{s=MZGm?%@cs0wT_i;CToha)SfqCN~7&UW5&RC7M#fyC*s@m1rKdZtk$4 zZ8L`)e8laA@EM5OMr0)QduvUPHQwB#;|*UX`Q=Uj5l@bsK|{gxO)z&G@QPkg8*=WS zy_DK~^TZyUjh^tmQ>8cpLQZ6Iq9DYil+6z`vA-4vfCU;aGX-{V?61^fzG&)m&YRCV z*2v;h89}D9iCdhC083?I6T+f}17#tKeT4M4As9RtE~k}2XTlC7MrJfSg6B^N;bH_v zsNekc?vI>Ji4lE?;3K1fc&5i1b;u?jkMm;t6h7n4MdH3S$>)jZ=zR9XGt56g9%>;N z;X)q=H7Psy@a8^IB4{D)PL3~1Z_4hb!?#YOe*J73ZE}R*C^^9m`+ATIms3r!H{ra# z2Jcqn_p^2IR|ufo_+Luh(fH>N73;EpSHXE~hAzXb!zM=6ydTACZm;qFdjs?`Hel72 ztNJ7^TNENh)nf|>c3)8I{kM4k*w6v%zaBKZp}8NQH;-+75ot?!Ho z@-)9ky2|fy+kjR6lb2F;@bdkreaPR?R`3wJ?(?ir%GqVyg|3p+{4M!~?9#CKSKrh2 zPiAR;(a}`0g>&^2yD?G|`c^ibv{$w`m`b5`i=;!udFTejrGk^eE!Y?bQ+c@c^#=W% zz$0&fj8+4Y^3lk52Ir5J(PLU$-g=pvwQhVQt%~qZ<1^6DxKY6_@|iem&XXFHxcA>$ z#9{-U1Ezhhe6G)cWz4u<@ykG^mz2szhg3M#-x{-zJsK8he1gAXybXMN06f3@ZOlRP zHY^bQGzSL;f6#ZzYS?N(ENfWcV5Dz9mf^P{sG8;|(D#lHdu0^p_?;u5>))&G_y?7M zl?>M~&8>2|2u3>bnOIr>`=pHf69KNlJw5pj{$n_=!6I&zz^it!L4y+n1CSah1 zl?lH)f{U6?oXCuO)vsaLQr8#h#h~iJi%=k@+Q?)|`OGm(SoJnhNnv)HXh;9xGvt@F z3KLOl8Uo7TEusKeAOE(358K*OTlO43#BcuT-xTaQ{^%=KBw*LC+|bAGzL%fA{Ew?` z=VAEV-`$VtN|FGA(H@wcOgT)mhAsCWhKB1bzj-7@Nxqxf(tCX66)PUSdhOhXrwh8* z+&=&5{TsH_+#c&Pae&{w&`)1T!d$!h2Zw7gwkf=?uxg;-GM?(JPV0x3b~@{GGCRFO zAIdd1`lH})y#?%xr;XWWXe)C|PsHi{0$pmj8bwjJw?_rj^1{~>-WKR?{DmJJ6xn~?=>@^kS6zu?BP7C7 z5wHGie{3-_=_)6Ty3nyvbPU`QV*OSKW2p17kSSAyIH?+{BWbUmiP#ZmLA7hpw=x;M z=`EzH^+%W>tG4fQ7Crn25qG*b_YPb6U=gczo57Yh>SJcOJ}u=wHx?8UK%nwD>sM8B zQ=`{dPDE7YF{(Fa^$y^C{Kl3NuTkVO;hzTAy$LkcEx2Ga9C^(aFuMy|gZh$0dJ)G% zxd5_aQJrVGj~hC8NtJgex90Fc=a8q0jA&Af2v=fJIK=b4FcGBAlY}<_4SUm|m?)6u zB=6Cs^WP}*9$k)`+t#B#a6h+C*?P4QPfX^K4jwG{Z3|j2Fm!~i`XpFpx&#}!v~7&SVGLQ#?jsm{ zzxdB*>7d$vKl}`QxNbQnY2oJ&&Vm{Tdc4UaT1!{Ea5=pSmJxR7>hSZPqeJ{`y*9^G z=J8MtKjq*kw|;US@;fIMJpLQR1%s9b7vX;;HRPDxB^QvD{(WywF9;T)sHt({M8w<8 zM9IwF6jF@gF#!8U;zVD(rJ9%CGoWv*xtX3_N!h_KZwKbY=ukI`x_GLkBtB%!e%wRe zPtyYiz30Q}(}BP-on#l^CtmSc-GeYIcq2M5)+hT@U}o%7CH8NFkXq}we_p5Zg06oO z?sZsygg}s1QzBvCr%l!fb)k%eRLin}5xJeuejG3aa@~L^pjXqyv3=l^_mza8x0t{_ zk`U}?5&|UpwiiKfXu20~?!~d)HSge#Zj9|Ip0J1Ebx(9HiP&EBp&b8Ww&tigWwxps zWl?kbYZ?v2{&-+GenLmUr8-1kw7w%nAx&$qo%TNRfALTB{|4(nQ2Bq=|D*n?{)eO9 z3obmSu^o+wx$(yg=jb5?$#J7|W6sF#P7n9sf6w&Oqvr=DgnH`!@rgwbl*op0Is94E zc`=Rz*vYXTF^ppPzc^N?LGGkM?yNyBvO$(YEfL#=K}PQ@`V$GJtBm;deCvWnyW(RH zwV*^TqXk{6(l4aex3s+1sVe=VY%0%-m5v4tb{jq9uSa-O{+m=)sW(r7J?!kCQ%DW( zHPrJhC3ayf-HZ29oaaX+XA zeY-pQPRzPt<9oUyJ0bptrRcE-6?e^^hT^fa%SIcq%~a1z;^}{+=l>U3fI}fhF7wli zZAHLIhyx|E$Ay-u_2WAZ*|M(aQ1F?cZ7( zWempF(EclVIH3^#j$QC5GspYU)7b;~@WHtKCiWxZC*yk7m$IEbp;L0p{od_Q zXFCmAiBBTbX`ck|-G-6D^`S|I?l-sL^rkmhbIPptb{l|~*g|19Ozjur7^^EA-1o+v zqZ!_{P*rcD>iO9Nh*s4VM1)l*x^_x#rt0}ry%Z7f{=n>$;K&~_*lYpoy0q7C6e9e& zAn1-(G}x6#K8#l%+5t!M?GGj2U+3ieXGKhA!~3Rs%gkya2B#C9(TlDDzBiwk8ggY9 zE#!#Bo9FOxH0#T0rg&z>ed#x+!(CZCpOt}MDx&o|3rC)ybe@Nmb7Z`Dj>Vf!4F5v# zIMUzA)>Nu336yIyw>>}srr4}X{;`2i`+L)GR|*#L!7zWfDGqpE96M=f;mbpt>^Ds3 z{u8=ZEo#umf^0dy>FRq+*j%Y>lCqzNlpT5;rkC48+<0KDiwfWyp;BOcPAM?nDFtdW zx6M|~89da4jN&9|AClA|)kBlLofEX$OoMt3|7xm%I7F$2h5t+~{KK^HC$#X_+QL8F zgx(U{tILUWle!E9AE2_-kS)80oKuqk9?U?Clk*50!dlKX8Ww8IVCTbPw9p#|3ap#l zI5zcHxj=rDgM7%}AzOYtsivEGDLoq%yla~;MHa+|=rwUKS(qxMu8(T3ZSj0X26qkx z!MOitsBxXa`*59|7p)I*Fc{fCM8DRV+p&<&%hyXgJ;s)YpML`$Mg$`KoVVNn)wG0{ zlSFow|Er2EH)#XVeRpo2YGE=b>sqC85^%*GjT8t_>C9PU;HZm@${tMeM65~}GGdtD z1MCiy14L4iL@d)tsrG$mxK2X3)*K72RPcYDaOFDGMt1TcLAMWB=|>Gf?aLS=KL)`a2S-O2hdBADKp$*EZ(%qoQ|Y@D z)s7$$8h<0o;?VfdQ5Kz9*Z~>`)sPiO!h(Gcj?m}B?a;^kYt9MjS5Xc>me^QF{+Aq{ zMD_z2!x!ls9hD35z$w|erTkvy_1&pCPN}tf`iF0JZh-_T%S(}_w?spqv>KgL1o=L8>l=RDD;Z>N1h4%SEcbXQXPh+C56Bh{i4q zjX;ZeP61K~+7C8yj#}Np=Ay*AB&p6jZ$hz*UrK% zlsImf+&UBd2a1pA#LVKPP)vUuCp+&~T67#z&FM>2!$J){hs?42me@>gTq3g`GwLuI z$6l0>$n-$Q!J;4=ZSr{2KV^Q(IHxxKg6wl@`mTg9Tpkm%a8;~oXyMx|I3FPKM=f%D ze@cLVgnxE<|4Vbb;(cZoftt_O)(&{P*1s`^e54JH*t=-N2FLw-3M^H&);sG}$3G{S zjEy5SKLP3_-F|AcLd4-EhaXIY2v#EMEID*3@^0DO+Jn5!=-{RD(%+(FQlXrDFzVYT zBL7Wj9inqk_S!b6oCwdr)l{q;$JwnAkGZI2Kn}|j>1Ic5+%$}+%_<$AGwd(?I5lKr zK}c`r7`sEH5?*wW85kgVFC8PCj-AwXYe86;Jx+;RoDOar+EfbFixU zzlb&$q%)@?LPyp801@&uJ(k_s#jy#^*j%o~Lcs6$Nljyc-0TkefTQf+&FNoj8n(Lq z+bm?&Bzu-*+Q#*%O1*u`8U9uKaliQ07^^+{LA2AG{vA?QwJjiSZLR;fY?ZK`aA^8^ z?SNO$^81{GyWa$U3&d2*601eH6B=nahux6c;r>a;=P-8mW(xP)ClNA`1eEas%j76# zBK=T^*Y`TtduW^`(RLbV*5VeG;3J=L6N{}7mUG6o=>8&+pQL(tjJ8KiytNL!w;((=8u*`$f}0TyY4;yY_L^xDv=5Kt7h>5lJ7QtgY4~;dej$bDD@s7ttC&d z4W38q!C613kz(`*W@R}(jq~NL;C*fS!`k#0SPIlgMT{AoyLBg=9<_xlG$npb)@lR@ z$HNH=0}|opBhj21^1VSNL8t*>CO!|K_BNg{oDY*cbyxVI`S zbulBzJ6mxo;=HQD7qPR^&#L6-`%l(f zsfN}*R_+}(dhv#*)gjg1pXj`87#_R7`-YgLFk$9yYe;HAXU;1sm|Nc~?iQMRGtXDu z5E)zN!R8HCX`}Tcn9GJvdu#PM*Fez164OE@W;V6n%sU)gSVYxR%gt_yw1FW}G0Ro; zW{LVgyM=mj1pihY`<@4u@T0ckRc~5TSCb=N-lH&k5Q*kl{43tHD~TtaW*6(z z{{ud8*6{UR`RHFrO>o9G>!bdKv)`LJrdUmMcMEBJ)~SC0ZjGAmhAp3Z9QVI5g{xze z;Fhn0TfSc0@(tpaZxpwDlX1(F#UsP7b(pFaXB>2H&JF1z&=~uNLV;d1X?F2GFIGJi zqS$1=*~#udp)4F7b5fB#Y;^NbH~GYnL(m74DG?jO#uve><#P5X$dJ(OG5LyxC8^C! zxp|<1r9Q5DaFd%6-(tAlxt_3OLjtxsM ziD$Z^wpT(E+sOQneuzuiih?5iNmf=7O)LTLx82!vW z?Tr4r+CMZbj7s0!D*Z}o$nzU1x4sybL?^v%SD8q^7F1ZNdlFs4?Sy{MeXJz=jQvGt z<6v%7Un5hfx53896iTKQGK<4w3eHpgxtgyv6@RVq5`Xoi->gB6zJFXU?sefvaD-Vi zL|k8Zsa$kCph4vth*%D{1rc^MIC#(Iy461Q8y#t41X?r#S|3wG-uxf+mE&TLKf$x(4j;oGqUq;kS(faH~G{F(FCEk>}sDja=NSUN4n$;6sK2Y0t z8TE9={*ih8+?3(4LXw& zociD{Rb$^s;>LZBEl~pFGVO69eAK%0nzi9!8^+9ImX2$z(DUA|ag#)2N+(e!9OO^` z6vBi!3i(*>XeCE2U&k>=>r_{ah9X)Y;uT+dQ=U*3<^3-O{3*7mW^UKWC}-X!8C&Cp zxI_5zW{2V4@aN(cYwFM$H|Fj{ZK94~^f3+#%2fg|Q)Jb=q^g&_-qSXoTXiNU8WN_4 zbqigD|32w*?KAnQH@!10(^g9O6!+svm1Ea-EKX#mIP@;sJMJf~>7TtMhh!t-na3P> zKJ%tL30jzVM-13nV!?vul;mx6hR8TQK6LXCE24twE0R2-T%?04n}5Q&P{yeZ8DaN6xnPby}> zDkNsvDiv-CUiPM37A5#5fwQVswne|ns0AI#O`cX~Xe z$FKDGIS=$d_b7ZPk4VUJiz24-F!~?dpq~@;xRwXTQUZ7Iz1;VU^yz#(&ekKrBP_|~ zKT)yA=`l!;!}U0XM^s&Jg}MLka8o^8{UWM|rr&UzRA=IWpVN;<@*n9M!|ymJfkeHe z^|24Ol_}**n56$$;)F|&LqbCRhfxuTRtvDi9@lRcUWgk`5+Tl41Pj+|9B$eDXx=*8 z!T}eBoGyzA^MFly=Zs27(M*<{WEhDXkwY;hy;Wj!sPmFMZ*XYh6g!1f>IYzyofh>$3LFaRP`gzrb zE1T@6RFAuL;L;BkkA8r}wy2&W@wkjZEPXzM-pQMKBy#f9kmC0{(4C2BKpfqjXF;m-h;JMX;dj}n0Naag3?eDG<+f;(U~NlZ;wzX8t{{`4tYMqSEk3-o$ zy4@r2y}{WVa?sa|PJ&F=r~_3%*5uz~a`NwPB{>pRW+>YM}^;MN@``KsFZbeT7`3DQTDiOYG<(jExU=JmT&nQ&>iAKSgA;d5p5Zk@(A z1P$WGY75^(zo1Z}A|ylK2*1)gTVHCYeo(hJqE08jSnW+al}#D~iXMk%W0a!hxVGZ2 z-n4@yp~#6ZdK?<@cbFO=zj%;j)sUMr66yP0ciQEM0j>J_azv#Tq1#~Z8KH#c2@?~G z(3MbAyBtyW1(GDrCN+}8pXoIt_H$m6B;IH5M`HK$mL%~PyiJn$O9C2z*}OG(#0P{V zFp8EmVN#Cp^<;CF|78?|&@QC7d>bJ}NAfoyC!#>Tg`9${iP$AO6H(ORV+wyG2U@B# zMmI;oiPSQ5zY)^3PNKo7A+NvFf%u(`n#NJdqcS-v8D+_i%Z0||CRfOj-eu)roND`- zV1O&fdHyn9)JW~M9cz2DJgV)DTXMB^B(?l%p`ny36ci`>jT}n|3;sAeo@REV-js(3 zB?dg7&l5hM81NiKx;Z{x>-0WVRs_-%{-ihVu>W`qcm}e*n|#B z5-)YU(UDxDP?LhTZfSjYr>27*XD`IQaQ?@6&Clf05L4 zYa>P8^qWXn)y8uA=+avMXU>(t+con)M}F~a?SN%x`P~n!`Rr9GF6OCwh(sT-x4Q?U zeH?Z_0oLkzF@D!0pmn1o3cM-IRbZ3;A)_eZm}9mMgnJr<)NN@Z{dyw(H}3zeYI_lo zithsOx9K$_CQoewypF?FHa!x<;NJlMAG{6la%3jJE1T+U(i`T_VMxBojA)%=#d$8* zJN-mR^BhyBZH%=PGUfW)7}CJ7)O2?8gAnj74Q_d=jXQ|u&WJ%AXoS0t%0xr^ z+hh!n9&=qJ{+n{dFVsReIhz+dEyN{~nigtRqHt+y$k_EFH<)QVm2+m6t*E{CvlUgI zF*x5|#*(^(0c3$)KP|Vw2Is$O0!uf6D8MbZ+wp?Z&kGo8^%~ydkI}d3h`N|}cSL<$ zFNMS(TPZpCg;xLpM~$%7iU@9Q&1mP~$2{pcc)={VL5Uj{x~2txIRIJ^8p_Vk3;%&| zFh`GH>+wrHe#Qev=UWFDqw~ok7@gf_v-3*pVufNp0 z_Wir}G*T>#vV}Ldnx8BLWjiuT?DW538&g;}Hn#^fWy91HY*%yC>*0Fsc+sEj6Y-)q zr*c!pmfBr9CY+Q@IH5fuOzRrWXE!pzi+Q_J+v4ovwmAP^>~GG7ftLNxj`lZeHOszY zf76q^f8YM+@9%G3=*_Hsjz_e=c{(pV*M-Z$^WZ^+{o>1d+qD1uX{P<&_vZFDSA8k} z*OF`G?{7qb!u<_>Y>Xu-D944B#=F}Vr^a5#p2>?X&M;p2TbzqFxGhdM$UE}yS3o7H zKU`T-f4C52(a3W3-Vu9tbVELSW~+K6FTwUpO17c7&3N30CVwsRqLbXrEM&AY43&wf z&eC9))lOy$|LEw6IvezG+o-Y8HmdrI2u?3EH?|>)c|T=e)B@}4L_kf<+)xB0VX9d% z=uNZXVLI9>5~X87OmZ2qvS-G^x!*Uho(2QC&Pxr>&(4~=&VIwo@g`kA($(M>PJ2G~ z+PY>Jeg-EI&eSORv+oxB$4USt{oM9OJI+E^wmnn- zc85>;GT`P9LZf3Z)Tp=E1*YaWav7B?AU&(>E%C_g~pCfh$ImAG4 zY(fW23WAH!%d`H^qfO3w+=cL^{Oq&saJjX1TQnB_F3Hj7lk!CLAr>ytTgwWQF5i|M)P+>q3exkb?}w&s0g@71pBJ!fyw!`&EOYtNqw{{dNG(`4Y1S{sY zauz_J1!5 z@%n_sQ!S&(e;h@VdyEpo;Z;fyD|U6FOp8NFVjaSUE)GW?R%9eJqe0DwoI(VSWx9j0WdY> z^B2_N{Sz5;Rhh`lEGIhn6=j+?#?$bp#_e2-?JLlr7`ui(`$LJ0MAzq#UUdCD9ToU_ zvznZ_+g9GpEhbh%9dD5jO9F~6dO0tQH##CrBE2qHDUnmu#WZ&$)6iV&xlym;^~tPm z8%&=Oe2?`iKQTrCIIYl~^tm>5Y+-Qj?%Pj6!LRqH+t0%3?f$Srt`az&$wK`t;CD_5 z&J9Z9ZHqkF=fo@KG|{8UKXi^V+@9;C4e|6zF`c+AtU?dl`Gk1I<{R1aofNAo+?4HZ zm;ZHbTP*!S_29+he~%KXhAZ}JNU|FL27S7PUJ%9~CT|Dk32Erym+Ka1_q20(xF~g< zOUYYl6czE+KPZFXe2)hao~#K$ZTl#W8t*=cV`7Mf>a~%si%CLMFU4D3OuE5(ghluN9X*@7t`4i4 zHCE|zt_h6z!Z!n{(6q*m(fF%1iOkO(irvzSPl?QfCH8tu7%uxkIRtj?ZIy&3#KBPi zlc;FHB*aPyMKS1*rkFiRda-1texFnDXqR(6_RLv+Q4gFBIUlM>oTH;S;(yZtrYnbf z5YK+|gjMK>a%Xk;F}5cCXU9#5uaJZ-NyWqbqN6y>kHL6w)*hP6rcN=!?f5_$IIq!S zLt;&}d&4ovsDtrzO1*~vTdtYR{LiTS!9vt1kOP^z#nV4hlnNe`D<(LNIWGJ^k@p!* ziT-W)fvDyFhl(|mIfXMt2qyeYR4f>Od98m&A-9@nkkP_*-v^70@z_zo{L3xgS@fF@ zME43Ex|{lsSB7YOz-kg9>Qncv5v(SovbV%#Te~@tey_DZGdFm+w8I1qrfkTcn62k- zyD~Z!Pv?&(Y~z1C!W;ZXHD_avU>qar;#_+U40fd~kt`@8@We#{N7im!&DPGrX_f&t z(` zY`(ptgAR{4vtaTG54e!+I3%A-aaCEY!ya!)06Ejn7csjYP)-Q{9NsdZEx}r*^=^8@ zJKI@zdR9C$xt~rO%vOquRxdSPUx`rVI^Qv%D)~in+>6azA758$wblBUwjpx9O)y}~ zhBQG&^xT$&uFW>e$||z1GPMk;owSUB=hi97*TFw@SXY2DKae@=l`?0&O6IIrn>p(b zB}y72QPL=md|m4FXI|r7U|sIZNWL7$5#8VAM^+k!9mg{=Xidb9GjrDN*7AAujT>^M zCn{G-+nchI-Y6=k$y#*TU~en&c;-j-V2-L`0cL$-`OkWIgy)h}kqn^@6WocRtCH7o zmz13XMjU4QWt#I%=@;u_Qkc>SL}L0R6LwCp8GYq@5&B0yTjZrYFOGdTk+~{13GHIF z&NQs3NiWpC&G03pc_a%-+Lz#ReNRpx*Ki*ZQz~?B{(e%D0M3ENQx>GDW1}A$BqQV6 zxN>$XR~RngvMfel@%2B{=UhROf(vUoKMvt>YeRnhN}K=NFZR2bROjH|A=Rn61*uN( zcoztjVWc z@8?g}IK$66-oZbKP-3tKM|ec0)_D8!pMU=In&RC0XwYLSt`Qcn7_Q^px2aEN5)j@hn;N--+mNagac zWu!7zC6Ck$xFjbR%QsRftlvB5h8D4#v&3(GM@=%ra`h@6!cF%r3P=J>M5B#!tCUZyqf2f?ah3hyFJyCd!)`7lDsf9pCBZ^T7ve_IK>0ROW0o0}kW? zd+!)E|LMa=?I=0A*=xKsM9QS91a;v1wn57O-X;YHgxf8r5*?7T}|xg9njKi{EJ#(ICzsn|85-Ah(f=>0`Sjk+#5M=-iViu`ya!)@%B2lju%*0&nqA6 zroQB`?$`&~u}&U^f6Y>GTq8u)34l%C%<6>aaD|Kdup*7~K!%nqqn9 zj(1m$MU6haW11!_aad=Xi!pScPS)H#fKz+(9DO}eZ3bZNZEo*S2e7txV4LW?P9in= z^^;Qyyhn@9&X2{S4j2X_3T;zt;p)8bV8X#Sc;w-m(3$N4j6$&a&3vqD=OC>8t@nW4 z+oN4B=HG&UhphTa{0l&pe+>Ut{qfCg>+!JOS`e%zXNrXx$K1z7eMKXD)K67OPmxJa6(u`;7QE($|uxHD3q6qsuRM zPG9L**xdgO`r7T>)XwPZhOO=R{Z?Lh4dLJg9^2x#qpv@HZ95FN9oqjp`uhE{uf)H9 zoWAZwf&T*h`xnvICNFHw{|5g3tLbZI#7^;V?B;g-yF4#El5lV?k8SZ!^tJaZ+hN~V z(bw;6PhTs0h4gj9S=O{1ef=5q_1>RAUyskRH_%rl5B|In{`*P&dVkbST^y*m2~@VbouOA4w7yurGIZ+gFI zAE_nW{Q+yyat5pPSixgEJ%rZZ$ExPHAB#cDy!@oJL;PJgQFg~$PIG+A8=-xY!Gxx!g&P4*{JYLg(X*+B*TG(2r z#_ZtF+82-7=UNp^|8lL`G^*%?j&1trY1#z(ZPTVn`$lb2lY%a^L7S}XebguU^(-g9 zz8p&qtEl1qbt(h7*Cu;6+GzqA?3Ta)A`$L|EqZ;IK`RGsl*{ac;+dn{R&iaK4glJ1 zplmQVSk5oGn87k7ClwcXQ$OsYVv+x<>@}p2|DTQC)CPjdNks*9H*lD~egbmmqk!4@1{v>jG!6O7{|q$KVB_{#Zp-M~;D?iAVCeo+CIoJ()goOjKY z5!E6=Obca7aLIj5PC%HbaQYr^W;r~xI+?&RNbepb!zcJuH}#Po%g`T@g}@Z{FI3OF zGFzvpv0+dXe_5vWe_kAZ91h-d6!)?HiqjX;X2Ox_7QY4ZNh`{tLQ_1WE zrrno@F!lF41Y2FX8a`@tbL$;K39h!jv0KC7Nk2T|2%NS#pKbNk61!M$N~L9C00fdO zLzRyt!S#C!PETvM&nUUEXw`*@j=$Bd*;DS3y+LZh=gR7CM@_v^6fa!D{Jf{P;J38y zLA>BYe z^B;Db3KCON!7m>b_QFR+5KOc?D8tU0e8tc|>M>0VQ7ltg#>wpZ?h!EXAF+Q8gq=bu z*+knPj3^M@(7q52r!Zs=CDgRF2pbiQM8f!D zs!Iqfn~AKgczSYwytK5{RxI$Q?$2(Q7;oAEoY<+Ezpm)4Om#^KZT6;i=93Cdsw7IB z&71LmA7Q$pB{8h^H?meyJPU=Z-jKB>H*t}isAz7M1?Jg&Le^@fD1Uow%(#%VyPx&eH`mtj*ukFt1k<9C^4~tSFK_hi` zH_qRgeuN*}5y=z(98KtB&&LWkyO(QLcDL}oi+khMB97h|Ff=S&N6lK9Tf+LxDZ1JTLr88Gdyy~ZRzg@HGO)rSq@+MzD+7m&VFCXb@szyD9h z;>cqhjjfEQMPnz=$*o#eS6T4Edv4Xz&yEAa{{6uPr_y1(gVR_wf;H+-Ew)ApUFRrE z8yA1Npysb|nq!Q0V4y=R}qLa7IM)w{@>D@&T3NpUuP$moe%}S{!%WalhY--qfs7jTa^ikd{r;I?=T-w7)=2 z%j|wew1YK&Hu+lr#E;P@{E=8PBw$;vu^ebJej^Ex^BK~lV_CrNl7HcG|LCRyttVWi-f@J|JPj%G%HR_TJ@ z)85q2ZG7f?({v(DcHol`0iRa}3=vfWzE?C9Azf{Ko*&@bY4@CL{O#j|IxOqmek+vg zrq-;Xux3{E>w+C|N+M?9+@}|yWdP@LfHna8$5ubtfjMf`B}Ku9S=jvd^mv(4<%=+2u*S@s1sMh5FB@6q#O!@E2^n#zWw)~t>VgJ+A_u7kxNEmuk5bPRfe^p-`$ zdj!6r=xw4Z-I7|@c_=s7H>}%asj=x!_&pBbl8w>T-cVN90xquK)Olj9UY%qe;!Z|a zC2uIibBX3a)f1IGM-TOeF3etMsq25xp6o|WXu0mH-dxa%YJ~+x@(b;utgg0IGJfr2m71A}DmMXfiuABQh^%B}6N-?sg zVv{%h7RI$E{dw(xg|aLebC!Q&KL&Lj?hoC;&vmlN6NqXH3BpX)R%{)I87!1W$g+el zT4^1~iOi1BPZ7e1EyCj%9)-mS_{a7~;1OjDdf&F*_&?>f%Aew@8aO~ps}@8_42sY7S_$8afB`UMbghv^}za{%s@Fj~^B>%ey> z@VpAkzlvAKnQezanLS0PQ1hV|K`W7N1%AOh#}@=|-m1PvZFI1Ab*29jfl#x^74wh* zEm626v?MGxKEi#C`{#DnM6q61tZ?lRY_o@`UWGVm^OO*n%CA)AqgA;Gg)3q7;-X$3 zKDDU2SEoO151$tRk(+uEoc&dLo zLf%Sm>MVEx-(Ag4sx??g?4WXOqkNKnEhwX5j6Mpe+kD@})wU?%vEj6`5HLd-v_pr!m=C%~nVVPnnv@r~O()y}3JDPI^ zMgK1RSn?J_w7}mveu!=hFN7a9>fzjN$B(z)Wjzv7?+_RQvgHdWr+O$fG3dBq$qn0d zZZZ=)%@FIv46fFu7lKOh0Sr6_f6NS|W}8D_RB?IR3y+8wJ|oOvX1ts?Gfs`HU&JOE zX3_+qiTs)Q$3FMw@ibyZuxN%O1lB04hHDzbwLt6BSgj#rG))Y}3R^(%;3KmhP`phD zmNKpH(S%UKtR3}s)#WC{x2QAtrYh8gAbW?|;1))VEJLvZcvSO;(+g_7q3dK$DWoN8 z)%Ptb5MVbEWy`Z$k_B7QGx0`g9B)DEKH7HO)%N1J(N&+d6qIu<4T%S}1P9@Y#flN> zb`!=`=L8R}7m>{R_mMZ{O2Y90ADzk76E*22p^NB5-$g9Mu&v{VwFBKPtKkw4gT&+( z+|OSxxGxQcXGF|d|A7TfrOgr4)iZ}8z}2>*5sNU)FWNJxe;fGuj`L+Bo_|n{3bRAIoV_^mpBr8j ze(H!~#S)CT@c$NKRJI33S5$75$~rsPut?0OwvE6ywRGKA!Pl{mGGBfdKL)w2Z}2`^ z(%@Y^*7KnLwFakdlr+GAQ!|MkA0wH!sKJlfm;&7e(`~zSR^0?((7*r;K z7r2ZdHZyi`ykeD?`m>-k|D7V(TKvXcJV-bEmdl!)+l4YC`o|HxOgA+GYyQA^26R~= zSUF)@yzdHxX*9MdrioR8Rc+akLBr6O+lG1UNajPD; z@NjUm{ozGVhY)N12p%wE`*UvxpC{YlGf+LiqGwWBLH+jy{z?~t0AYkQD(bsm`t}*8 z7nsbRgM7}|F1US{RwHzz|5mSf`pojwkSAw@eB2kFIkPM{7xj%@IVgksQ_Ca|0qZEz zPEJK5@$rO#afEy}66wT1WB}JkWpp1Hcvgn_r;Vrk06M$yR{BxbVYQT!WeRn<9eM4D zC}oU6uH#|A^}iI(C5In2!W3d19}KF`T8cQWrLG8B{iW<2yZA^d8V~9qsd(|H^i(dN zkU?fkgVWKESXjQE(j}2(9l(|RUNQ~p#V~A)%3BQOnTQ%dre&!gcQgcY0 zXcM^FbHbD11_Gw5edDl5OAEJK^f_Kk;F*#KYs1ik{OPCR@Eg{Pri!WehAtnS+R}OA z5T2dt@c~&E8<^xCdh_D+RHagRLsw^iphWfOyU!=P(`Uy2*w+MKVc(s6j&Og;V=2fE zsb!DkMmjk6ys}Fuw!Q4#EN#xdjQrd$`X#8TI=#kE-R}Gs8ST!YUqSB!I{^C1p9s)h z9H2eXk2O03^-q7759;6lHV10Ic#(ei`+euqC@wUfV#Wt&qVU`foq9gCJ>8j)9LDrt z-n24!nGk;rYeq^BbE&Ch&Sscb-vY**(^ra^U;k&W{Uft#fA6sUBez49wR7^@|A}t* zO6e-xu&snl7nGdTslaPo0gy4nE1G z(=P4ROzKS6URT#Lm5>c?xeu;H-;;j2U*|F{aFvoOlvzK=s{wyIphG`T?%04it9I7U z>pL`{>7fYJ+FlZ28Czt6WkZI5JDUsRlHR8NSH{w%i8Rr8_yp%4o?bo>% zVg>dpgCu_#QqZe@zqt40Mr~xB0M_q;8}V~?_2wQ;pE$2W$EGfXZlsq>i zsyo3kpQ6K-DC7^;xepyYV6nD%RT>)QC7WONeHwLT|t1V?c; zw#uJX+`o|GTq+#N$f$Z9(GWYo_|~b+@veO|pkaNcCb(dh#?%zCDjSjQqLpfs(*kU# zCb-qcbwnBVmVW8I4=}9h#df~H)uZ8Mk|L@3Kh(W@d{oud|DON@;Swh(Xb{nWh>6!A zpotKjfdnRyXcVeZ)JCz0mud_NL_tUxK&EjtRiA2$K2@vLTCLZ5!`gs8+_VZ}5v28A zIpf$0+A0@oe(%rT=bV{@V12%?=bxW1$((ccZSA$!UVH7e)?V9d*#mlHd-(YX4TN84 zQZt3pfwb{7F*e{%FHa=)g$d5_t&0VrxHPuClvTY#(GhMg)aDQAf-QpG5rkuV!!Hge zTlfzespO#2_;tvpC<8s3BA8u&c+k0*>99{D% zU)qgdZ}KF*|55bcw0F?lz9kcj6jn_-~ zg+u8|S+MfMaEw5wtICSMS$K3f`pRFzU;m|Y#>bVx$NuK>7s5s&l`Rb3+>@Wg@yKD3 z=5M7M2*!WHOE|W*v|yX=U>Z^}V;iyL6-Yk(hhf`KTR|nCm9PAFL0Q3HliA_eHm>oU z7(Z@sc;mk#@ryFih?R2OG`9KYU+)darv=y&5{h%io8cA7dk*-N-ffDk{Pd`3+wkT+ zYXE-X$I(3mqCbI#V{1xdYs0aPDww%yLcGVimG5^8M^}#Ea^G-tcY8z6ueWflu*c8C zU+<0&=oM~8>5;?bWed%~TBQxkMnx%q@LiDht9WagQfYE2>&Y}v0RypE-7$ z?so&uC6xA*CLUdt@-b4%`ZLYlREn_Hl-~IbKU^_2BeQbGXBEZC;G!P^hVJ<(K&#ze zzH)mvaCCa*(0^CX;L5}Ih*@5q`9GD#?*$i~LPqUD+o*u7l?Crr7QCwF^r4(S+nD_? zSH^q5V&CJ&h4(6po#5i0h&^I8TgWCo-E*eAHL8_z0Zmn8{m9 zown&6)V|hKLE7U~<#v>M41Fc;fIgU=Y_qu?;DA5A&l$^(OyT-wn8Lpf>C68hQFnrP?9 zecGut?I1tf4kQQI^$p93_h}zicmJ=``t-!Fy6Dq5we{@5ow3(rpFYk0u6D+yw^QC# zJ8vzdoiq1o=dN2jb^EmA zjM%^`Ka@Y{Pk#GuyK^v)6JrUvM zOinlKUpk~3Zw=65AzewEQ}M+I45yX{vy`Iz(nR;UfOL`*BvI9brC$1rr>yZ-iOTpD znH4&(d^PM;jHXn!sWz%8kN!JrVLsQ9HXNzQy@yBQm@!Z_jpg6GoaePk3!C#?iBS|q zeZyra9%njb1DvU@Q3x}N%uYbTl}e>$GtI>QN@vVLy9pj}i4U}?(;Y3F6OW?^akeu* z(&QuO*(X%Bw^>hQrG+U}e3w}OWL@k=r$nF}&?`2SXMSHa*M&(>S7_evGWV!N;sfR( zDY6*2R_o}Vyt%{8{i`2i@sW5VE|waBAGq}u>lVDl@E;42Sl}&sM7@gSR|D#TD@@A;3?AQMs&&04qd*5Agy4=D7rjdO`$f zkHABJr}1w=&I@_uvNS0B8RUXj%SMj|zkCfE{6~YZmktpGX_iI&vD{`vfT%~-TVTC@ zl`XqqOnbP!E%7w87;axx9{a0ZU+(7}8{vXd;yd6%JR2R#j=ll!F$2LaalV1SqWJUR>u9Q)E2~qPrF@43xM34_=EJT1<`! zXV2fe9$oR3bX;B_8FiX3XIxs^B1q6I%?DQ^^d<^~i`OjZU5YdxuLGdc*sjDC{FcT3 zT~_c$8QyD^GukU>tV1;0T{+{`aw|OI(oo5k^QIXH9FyYxjsQ0m2p~6q1m=Z{M)kB_ z9j{f#Yl!JGZcsSdZo2Yv@>-$l9@-WS-)VlWMZoLgR_BmTT{O8}yFq#v>(#{?b+J*s zt1ZRYJ0FyCr;f0yPO5>j;?HjwNC;r9uLKkh#w+P#A_(}wTgLM!si{@@VsC_>AI^io zt}cu1P9D2#+Nkz$e9CZb4V1;SpwtR$fDv~J$5xs#r19#qg1PppMStoMnE}15_)o!Go~H6}yz(z!Z!IfG0OR7mfQR79o<1d`cK`X;yT`}- z9TVMs=yCCiVqKlH-6)*CtESNw&TO5VQX(=tC0=qxVk|LVI(r}UMPe<9W}kf79E6|``&l8#u1j*KJ256<3x~bi%_^BZ zNcxNA#-d`s>?1#3dRLmfb?whn@|NG!Hw`p3cb}$SS?0@iB6+stqrR)1Zi^^OQ=8BIj`LG(yZ zsVBuU2Tz^ zr*4XNaehxgIfbu4Fl*Y(^YFCiT%MhS_>(5n8afmGZTs~;RJPCgsqmt zaPNpJ`m^TUZA1A~fUn_>76aO3J6g>z&x1!p`h#Y1ga;VVnouQa`o_+W2D1M@pRbyS{nMGFKiBeSKj*71W)iq#faGahBV6w(*6!Na zDm3cdaYtA?^XpakH81%<$Zi=J>4QdF+U&z9PH>4r-sR~#34)Ed^11FDTlz0pAo;hv zw}jYH&z45IRp7O{=pDY|zxs0UM#X-tEZBno0b#_le?zv)*ed^~>X*-q_ZY+_X0uP# zo-tIxvK%qyb({~_Gro=g!RD1LjvKF#^8tz4ABK#^1cwacZouwxzCKOEOi1^LY};cH z${D$e>=hxal#Cli${&KhsxEw4wvQ8x=lmIhi}okV!@z6~*i|$M2PSltfkJ+5Rf1v) zP)K>DbZuLeUp|#6a9mhSFDw{9h24_gnJX@wYk)-#HzzcInDIXD8^~W+6EohgKMCwT z{4Tan*%^%?z^IB_2FCe_4?O9{wH^HyVan)CveJHuPi<$rHz&`0L}2L-Y*aDwi)H2! zYpw09Gp$X?3zSeF@@Hw!%(9VdOPBR1inQapznS2QH*B0eBoaS|0Se@i3BjXZ5%ase zc*EQ^&cT#+`s+_W{pqDY-S~rjZ!eZZ=PUlScJg^Oi;z4+^EIM{&Xf1;;{t1zBLSSR zaV<=oDT`yr|Fk~MxyYqm)-T)$il=1h?9kL);V)8LmD_N#OlSE*Io5T;kz_az9Py4! z+ISXB(>KL!#3&VM!7xuCM`tO?Ce~N=880sgv zUIOgt<`2(zR^(BF^M5aC7oC3ouc7Pne;;jk&;L0W-@DCaV9w9(b(>Az(y{wpwcookjH1dp>MWIv$u- ze)wmKzsPd3z2Vf16$8o6l~F5>qH7>HPdcD@_K&{7Vv|i0+1kkF%sY5n`|6BLUZ3Dq zRGmk*H@Er$OxB2P))6%zYr+p3*WH>AQ^quu7_@9+wO7=l#xu3o<-(*K8O^|t-7e)_d(=_P*qgZ=cg($ZfE(f{S1Q2-Z5sMgRTujcMsWxz|gd=chlBmVR9;>5|->>3;f8 z)6#d~`|w9pT#Ub;er;NMd=&7BU^zeO!GBg-`tL`0@b5jyq(@73&X-7UoCflexOW74 zpLrwaOXoeSsaY{R5B~*wNH}}P88=Fz%x4Y3K7Kbxg}-9Q;?0PTzlMKZ?(z@jfH>hp zpMMJv*xP;nAsn3!K2zImKeD+Y1X~$ zIA_>?>Q#A|d5zuQ%l?YdkQU@qwCG-F#weRNbB?qf710{k^EA3WQx|r?zd1K@DpGr1 z{d-zJcwJ@`lmzNcOIUT-*9P*n-fNCht%Ee%_DMVO1eQmgB=xW5(s zmW~p!$oI%$uWvN>k<8>cbpr_sS3LRK3qQ{CcdWvm%2ch_kXtiHEOe@o)f)={^@Pge zRe$7+;-IOtNTvi^pht)ch?1ttlgr|l0Q@(D=JpWqTp>AU49D2|q5Qnq z|GqM>tZ033@ujvG-5KYRZLNvD$TSA@#7>@^*PcOKTEid6-IF@ZUdry-<3CTIwBkF= zr1|XGr|pNs*!epWdUEG)NbB!atiPi{3hVFK!|nQ8#L>#Lt%MREII(dOOYH#Sg-(M? zIPk~rYy2PeZ8UBM^ZOtT!AiK3K5!RRId30;jKT0j=EzSHayX)?F_-_t?$Prfik3Vz z7w)Mjpac7amS#9*PrBZaQ>iNOwIVUZ1Ffq7tHgqJ{}2mSAz)4NzPF@0l5xEm(}7nU$Xg-wFSI zhQaE{x4k#RzlXcH#Xlr)?4AFRAd7DnVb>KQ` z&fZR!WWjqfv^qqm4WeU_s%XhMbNr>L5J$7MkBdm)gT|!} zUtEe*w>td~`w$1bV^Vo@lEjR!AemE+&QlaJSkQ=s^PGC$+*v}A_yHmmDqbF`+71K6JV=;0_09zckYywYEv-nu!gw>^) z?F%d7Rn3XVw4J9K@z*Y@x?ELV`dw8mqpHM#T597qNPw)E>M(IwM-OLrq8sIi{LYhZ zhF0WvJ?1u9*Zz$9ezIn1@NqPm;#Kk=3aevg4estn#uX!Ws|goR8$LRC8z;N#C!x`w z`n?B07Y__VP831cO5u-(poI)+prKwXgdIq0IMqt=K49w*i^DGqo9k^s`I>U@Jgb}; zSBoo+(@g{G4hAmcjOFCoXh}<*_$2ePuEym*kGk`6HuG|P4Y$#K-!>~Tu%xxQY`}1i zWZ;Y{wbiMUjb=?AR6abhT zCT0^NbbL+XdU%EN_+$Er@!_L|<;|})QQxFx7i8k(^Jy>XRI1%u5$cL{%$+H)spAxQ z;xXvsiIb3NSVmQf7#Q5qZaOp#33KJA9FB+RjIYU`r1 z7k@`(&z@^L{T-Dpo7RUT>hGAb889fiJ}o2nWo_OOP5&CXQD zCQ_3)0S``R!0$vcoyMk5J2s$R5+Z8cd%Ww$mA9`Fn2b$&p9c!e90MkqyY6uEmu}gU zI+oq~C}rO|M_t@+*$L`jVlYF)A*yinLkMWSMr7i$X?=Ylx%~jw{fvyd6O0{hs{zs* zmDy_LYPS`FVff2J@=-T;0bqH#%gAl#@7OMij5n<=*=Dfa-ypkxBqll$u9sacT;u3m zRRjMYjFl!G+rN;MsQKBYfN1n-3YlN%Tw)H0?rYvL`ZO35d6172^KeM%B$K4STKVK* zu;R)mi2qWSvhbKaM78A78Z|ph&9asRR^Ft^uQS@LAI`kvb+1(eS!hsfG_u&HO7wuE zsI-J_15vG0VYAbFBN*IhuTZ^khbGpZ>C5L6U#;Qj<4XCUDiR)I3*lu)% zAH>~uz(r2-nRKkCo-KYQt+;J~TDj4K)mp*aD4lZ?$%@~g`CGcoE~(sBP~Yo?9KIwE zAi6)#Aw72+`KC*bhqBO3^62sR4@13=PqjvC*p>9aY5~kQI=SrbwW>5xfi`ez#_6t) z(N`krI)l_k#GupYZMBUmDy6NEiKy=+Z~6}G8a1xAQAG^5ir9eqU+-7EcF&jeMV4^! z18PKO-Z5}A@vVR>ENSugqFe||5Am*6W(iZSGyY4`smXugael4z6ni7K(;nq7-}F8a zh!p9h?qV@#EC0MbdxAPzW%i4(Y1I85R)6>#uzLR47OS(=xhk_ql%-k?czS=R6t9t}2HE(v_ExPuQnh+@Z80_kQ`ZFXEB%F%>g=MgH9SAn`yGIJ~+vqkSR!j^@NS3~^U=-J`mef1kRR zP0MIcTwy5X+l6(fxEyAv2h_Q$=xkGw+ff&u)ur8mA%0GC!bGQ&cgxndcD`?JIY6#MuLp`c@H?g8wO$b+?1QU~Nw9m! z>kLwB@?p2Y2(Q2~Dsa^P3WznEoiSr>*3Z31KsU@^jj2p|X!u6wAUlVajb;kq!nh?- z#FTJuyI%s>Mgr&1fpzKtEGNV7K$X{l(-hDRqCx=kiRzB~0qNGt|4dZLyWP_1Bzc}n zPx~IF!-kBGbSH3@MwKo|g~bGB7Gvjg9$9K9YnCP}GuBgZ8L1_4^*&lIvp%2Y&dnl? zd_?tDSreG{_Z(dHPS52lNx?U-Ex`CC^F{<$vsCcSTh@5SFI8j#bPnwRQS#>0+N~$k ze&_g_lX}pJcyu75iy#I5P#yR$BRYg)RTITfR!=buRO+ z>NNXjp^Yx0_@}GQ5Y%)ncBt?9&a%Z_(+Iln;rWU69fS$Xzt;hoi@#jj_vzrYNl2*A zf3git*MT#Tx~+LfI<&>cI?_>xX2iYKO=7f}t_ zXqUP3os&D{&WE+<$IdEhjh)3da;+<$`5HAkU`f-A&%CIO#%ktEBHNQ&Jt{Tyd6fFT znDDm8t9@;;BOzziU4qa(OkN#IN4PVBN>d_o@&&K9eSa(Bmkxj5I;TtFW02hZnNXy4 zQWA zx^sD@qOi%=qotZ9-Q4dypKVDz(DNMhz~Nn14-Cl?+m)z9G=fHkD347%L?&oTKuJJeXuDB_NZ2H!6zO=M&{}#&|^R3Z|Z%J#D>0~o0kSvh{ zSpEoPzzT>*=>~5(*n0yS-h(5;w_9gya!#})TBDH)5*pVTwA>{nX@I)95h5*SsWd)% zc_e<=7m@h%Ezy!nQ|d^uxmw`*C3Op~h|`cnh3vy)Qu*v&PdbWUbD{HW5S??aa6CKL zl#9fzpFf{F-CoU?I%U-L)CyzJ9misBe$LB`6gsnnyXIF!1nE@OiPf83D)Et<(n+lo z!$+usb0+Ta#j$+|(9Ul;fV=Zsb_@t22gJk>AwY~#G#dCJsGK?xlPJopXsIehYdrfP$sdud1%$(c*oXx4VDbR0Urw*VbkJ-yk)N5mtzv3f&JJ@D zl&8c@e;Qi&WPozvgHR)lkz3o{*u=$eJd7*MF;<40SS!yPt)a2Yko? zt_fwyW(|)m9XNrB#pq`*KYJoi(&7UHqZT;k%yHyk@wEJR@UJLnOc5imAg3`1yFAQ2 z$eZU5l2hozFQb}8wT1sZL_ZI|W_k4;gxQ}57ym^-(R@UJFk@QPiAcP*)~xBc;50UH zH7iQ@SmUf{$wL>4w58vup2_`1*jEf2lHH-YI-wAgcs@HXmnfWu>TIcMjI=y%s#Gkm zN{OK@ji|hvn#fyTup?4H80D&(idbk?TI`zmfK#F+<4jvjzuIbJf5F4oz4^BKyO3_h zLsk=l>1|6M?jDIXBQ6T1i=>&EC;+34HCP-Z#5;c%^u>WW&n?MlzzA;KT8!6G_LY2c zUO#>tZbuDAsbdg=NrCmOUZlB#uA{B~9$SBGRq{NSE1`NN=Ie0i`Q%7^4*a98W&r`p zhjgPtbRymPF}7Q&Lt4%Uw8=H-W@o7h#UGzH&f>A!oa(h*(Afx_r#D#|cB+5jk+8-V zLh?j1=+hZ|L)Y^&@u8WNmOj1!dY3+!MMB5Yt?Cd%9DL@$uU0h$mng(aY;*L(wx&Iy z;NrXW_C@rQ9ihcv)i1zaol`#}`r-Rcd-59kIuB)0G%EiI$a(M6Q2)X2S?bSGrSa^e z10MC?eWs;;L`Y$j@UIn?`g5IOxG!14FS^VSKJ}T4T%Kp0B0d&>Z6o$0RF&cUF7*)| zIp$H~L;IhcLbYz-a*o0d>(2T;^IQZac65+D?EKOC_?%rI3#iE;srj=u)x`R^LBB24 z3>uT8rE%7C#$_eaTdZL*X{0K?xjZGcI2OXX(n2F?{fA~6f-*O#DvpqU!Vf-_CD-9Y z*>YAE`sEFCL&P*}s*In#x3Z--p$0Z$NEt~@GQt?PZ)`Az?bqdcRheMLjDO<4Oog`o z%9iu8Dl^}q&N<a6<*lLlfz$kV9m)LLO{|d3wSGGw|`oCBS62rIjsbXK`O;Wx-pO zv3Dv9KC0BM1- zWqGU|o$__?p5x9l0#JF&S=G+U+kDPb9y^aQ;M|60A0siJjUiLK7L9J%$TsJc0Qhfy zr47(7~my*9Pcg{Ia&e8X}#N{$X{PdZm&YP z9eXkV)mev`)Y6vb-}37`@_M4HRZx~S?f)!^{Q&irOJX6>41iRb-lG7vfD-0&a|odW$1GkGuNX})#=gacY{_D zm#)rEjZyqwtDCN8%ieh{!MYK#RKL`?$4dXy=toY3iZlj_ZKg?`9>z5}&rqL^lsF&$ z%MjiQPJE=!eJ-}gFyn#YlPuwxtcNW32=Dky4B?45wCZm_{$l(&5X+6VeDg-SJhsOk zaIDa|^DjBTL^Kwo={3&F()6BOp#y93oVm`cK{w(_;W}n9C;i?9bP3XVeDw9FP@g1i z&fm_^wm?Tmp%jiBYQnMXF!e0ON-un}CS$E8W059f$f<=pill`d6&H47AGl0XA~y}2 z^0rnxg^B(m__s2<+*n6nt6L{> z2eL;5?(+IH!(BAZoEf)>yNr^REE21wPKe#vH|i%NCO?wkXK1OtQN1R!6l1|)FAV-j(O$7;SEQBbfItA|J&;o> zCbREwO6$88Ym8)Pw;e&PABnNPD757`)T8WJK4TEPyN}7 zSVszsc=qR;JrV2FiDEE1DL^MeWM4PlideY+1OJMjdAw!gg=CCci;-E;>~lO&r2412 z^-r?(um4jiwQ2+NPFbh=FYi$Qbie*<)9TlDtGUiw8RvE(c)6qH?!QvwgQN&D70$4eXo?HW_Q=|gN5?G;1U<7XLrom6{DyL{6J zsOw7*dv+ntt1Wb;V;45ZTy<^~*)mMh_X z%;}G4F$#qEF(Q2~<5Lmag3kj%6)F|y=pL|#C*#oa_VtyqKbL>~PWj3`1WW%gvn;kf z9Q}A9j+y0~KCaB%SgDgA1k0@)w5@XJM-`dxguhzTR9{&UukKaOl>>DTY3?zbwFQCB zG_E^C8rLD~f6GSYZ?`k5c7I|V#7vGcpHDYI-CfwUeqh4k5KTqw^9~&uIEOmu$XtHN ztP3DEyPb>&9*&=)W}Z6Uo?o1P0PF=809|&NtImD3vLGn|I4qA5SIr{8UoA2n zcudFr={C_E)XViO2VoaF+KSm9AWxwmM!vpV=}bM=nX}n#u_6;{XwC?Ple-^QM~3`2 zKkg<_3kp~EaL{<2l{QH82lO`DCESn`)WylBz#oD*SneA1kwoO3=iv&8 zYw?nR$&a+n7JNb$RiTWVkgMO-6Y|VJG@5}hBC5NrivVG2Mb5EqV~{Osexu*-Nl2VG znPy_1usjH+F1OW>5Ak~N##_`x%c)dK9MPS+XR2UxWaYP~mk-@BIeu6#B>dmcejmKD zCpHSjh&qz5ma8Lc!Y+hi3t<=t`d#O^VlosVRdWbuk;?|!Q&!>PZ;J8ZM8!!)o~k)Qq89i-HHYvzJktrFGg6Qa{9 zWyepOSa*IHHckgYo+f^cx?0`ZGVs;Ou?*xgsWaPnq;t*xDC2y?-hqDajN(J(=v@t- zyg7&8$hb>!7Te4=$rn_UeXtVw=l_V$@h13}44B8!vf-IrAd*$t`vZxSx#8%`S$Irm zp;u#c^D8-pE{>AG5j?BzdEz?lDv$k%fLoQZH_A69A}t3l?$)$B6dCkY`Ouwsk?oAM zpy5+si3da$(Ni-To|SNVh{At!FFL2ej*aB%wiv_h1#DsPne%%)|1(lr5xJN=Q=SFC zzjXK^;eyxvQM6r@Z8%Rc>8mT~F-PP-EG1$fRF<^OGSZZQ2KY{IUuw<2(}tkB2GL2Z>o*TU=DCbtY&C8jjq^lxfu z(fL_(D@`wr{*VcH9nhqAc8MJ3k)Pgsz{pSU>&I$-S^|6Rw{QG!w1`7~ueqm{#!J2n8(v4d-LKsEUM!|OG~c{C1JV!1?=^h!rs27?(=zR*T&QvYllYqrP3*}=qron@ z7^spt6)lH^7k4Xf8TTezy3*KsbZ=R~rJqq%bTyN0EzU5pjhjBT*_w9el?~cfI+Pfj zZ&tPpcvF#+ULrQdK{ANssYe)d3Qf-fb+^*nAHUiGlZS5tljrd*TJq$ij+o4GhAz^` z`Y06Ycr&%N9J;uBv}B=Igq;~}By-IkO|7+z`_kz~absbd2kG?qQhOxfSf29p9ikhj9PkFr>OFp0eHQzgH;s}h zvgwmE;yq|!V-g>j9viVZRmA%ppi|HB2I{G335FMEVq4cB%r1zQygE@^z_%(}4%9xrwl)+GV^`QTj4hq@uQ{| zHD^p}8E|`LZ$hE&$_p;KkwUmb;9>f54@jjlwy}KEr`%I9n7%mD)@mQ!!B`$FBq8QXQ)oQOC+-Q=JG0A@qvwurt3O`(e4xF+cha zhMTym6OBs0eUD|XGd(A%=FheW3~XkypKS`>qWC)EuSQpa;${cQ&?@s;DArk_lpaHA z=6biQ#L%qWEf}3`YEbTumOb1?zss^mSat3+up!V4Em}MAEJ-jjkiL5gJJX-PWo@>R zNO4ZXF!3M*XUq9{g3r(Ur1Hk!vw4|?(u1J$#0ZPo zJwgQ1@}UH47}t#o$Ndl!Gp8A*C3Sqxw#8wTEZGq>l$8Z*ll@u6Y?wVB=H((BN=h#; zUVFpT)?oBza!rZ%Yr@oxA^UawpTlCIsC8@zDdW>eOK)C;p**hD)E^-?101EuYcF|Q zMFA0}x#6Yw^}3NLMY3osw>&<&ccggdT<&+M%Y_MxK4HS~z>tMzGkWq76Nw+u{z1D_ zfeqA|q(9^N1AiVXqo_EX2Ie`+(Ff~OgX@*}`};->JD{10*cmB@NWD$J09NIkYBPM< zWHYRFGi=arJdpnlZZP@g*%mgZnj?6^bo|(#By#(=#Ml-vD z8@+6jHUU%pr(O2C=0u(=ZHA;QA=T>7NM8ZPO2Spb{zOTu_N%N($Ce;~3Ca0PyAP}O zORQru_yVNGpYGuF^m_=}+EL6onky;9-vS#iTw=^3L})MA5`nl~9oQD{!8kmzp-iV7 z=g4;r-Q2~XY8+q{#y{SmB%JH?u*o;L$!6CU0#8R?2)!t{u=QLsOAf^H=X%9Z1DF>xb!mPYh#Wb^X`Q_4kG>iiFP4+-Fy0#-5D_{&Qz%X~gq27Yl)6 zWVbH;=gtHQI?Zmtx&I<>KkID0$Za=ytB+RyLHM0h?Y58ZrLDd!5~n5jx`baD_G%G| zF)8ZFbN>-*^|Vt^8_EIsenp(ux4{(yRv8k-B*}9eqq~;|Ji3xk%=xv>TlyB&IolKmu>7H8 zjgNT)@BW(cpU|OxB$MtEO1KO4P=sdgm(8mSH0@b1=Tlb&Xqs^@S>d#sfU%vMbsTdx z((lAwoto_Ms{N_1E4CukD#*ydLWp~$Db0ik;#_;nBpZ!{InaeuT%P6!e{$w%%G9x6 ztd*uliy)hmT1YLr)ss;!R&&5>}wwZkG|hx;9x#c z>e;kXeNCy4i``P$d;3yqj#oO}B35V_|$w>?5o3_gYQ%Iwd+UafFo*G40V2Mz>Cr*eZ<5Ha*v zV^*}JL|`_Um>oq#Cv3@aUYjif!VKpc4EII8Gls(=OIQ$!Veic|#} z0Q?LSg+{NE*xp_Kx~JhE}^wyi9~S<=mF-I&oPD%HT7`lz==U3ib2M*}B9m!a?FuMx>;n@)^^ zTKoZH8$6=Sv&*Ed!Z`@R9ZJUx@JeQ<4s7b3)`6MFx*Z^X%&QtPU`P6lZIBA~%g$grcbLPF-h@g> zyX8Tc=3jFfc4&9t<2Sj~=8NIYT>ZUN9FXy(FTMwOeMRFBTwV z_$@zBW?Fvy60haao7A$OzQm?4_S65lM(K=ibZ=(x=GW9eAx#%4ZQy?KAC`~LcuB&5 z^V?rJ%##Z=Ph9s?{8RsoIPm845}oBOYv_6ygN6RV>bA6PNai@VU~*Bf^=e{aE*^dl zk7fq@pnY0uKu=ukfxZNbg6exwle1^FKPEb7(|J_bKQbz7)!Su)6?@Lj#$Sq&qO0C6$Qz{Nca?R%xNGY# zz!)4##gp7W}K0-f+##=EfdZ{fP1XQBz~jy85!@g`^+A_V$Gd*IZryqpRzW*KRk`+?ZAI zqpL4#IGz0c>SxstNsb|3|ArHp$CrOPKI3^4BWdoNM#dm=s&#BiylwW2Zo5_xvlsC} z>1<$JJVg4vI*1 zC0e(mo4Cj{>=VmHsw1A=ZI(wYe}6;7Vm*JPdD=zc)<|pszL@nka8SreY~I=_AW;_~intVUZc z@KdcdX%-hfu0M2w(F`=o{k)0#2l5ZA&{yH-^~4g=#t%F?YCS@F1(z(+ch^y*xp=~v zXPnVcH?#S=9%U06u4uZh=d^}Pl{r_luHihm@G-v+VZZ&oCcAejjf)TN*CYPNN#MAl zkCbl_)Va+1pI>EA?R|kgz$0xDVL>Q_Di{H2EHzU#)13*&ex~@c+S1KYb|osi5_O1< z%D2e_stQ-9vHY7S@27e4yPB7;Rii2t{N-w$=cv`r!YC1Iq$4zw*z8HQ#gn$MQG5F) zpkT?v*qp*q{QF}4+uHFRv7SY37VCQQYjjTF)Mer~+*s-@FRp*blXS{m0}BOwNHGLI z2nZd9pDNPFIy+#2hO}wC>>Q9Gwv4bd)pfhA_0wMzd@Dpa;^uNoZp)4%|chm zSi@j2R~^Xq6HOx*-sjbS#^2ucpP;lq?AawWGG+)r7}O8v$LSsRE*e}jJ_qn&wm&d! za}8ZxuCpG432jH#jL%h~b1Gca1#>)0?D>E?!h&kDuQ1s;&9Bo1leI+;F8KrHP@Axa zKa7hWw<5Ofz|U%hs*40GV26_lF1T2)#{Lk>$XHMbjC)(0I%0byed6x}hQ0LA#+Nc8%wjD}IzkNQ=q|Jm94;o8J#$rUOm z^}u-JKj-YdT-|j;uK~YBsr@TK$2q^s6>t)T=^J}@gpGVN-5p!#p2oO+@>uj2aQm?{ zv476^3_jZf2ExUb+NtMoyJc=4CkjvO7}g9fl9v&@yA2TVKN{)&8fnYH{IRa43@%YPcIj@|5@N;_bm()K5KWE4 za7MqC3WD-qf*~&$SkaP&GjL($v1jF%<2n|+=}klh>0{!NJjrdNCfZVzZ#71I^GaAy4YMNKFh_nByi`oA|cY4Bg_G1*-vV;|007MErqzWzxww(;;(G&LEylFq~X?mu(H^Z zsbXXi3xKHX&l^PG+xP*y(-(z+nTV+%B zE0aBku!1~0ksILy0I~I07YKOI)c|33k76cFV_k9z1tfo@{#S4&;#~R?<{{P372lXh zti>c0Dxqb}Nb@sa?j+|@|8-vd=jJ*GnEG9(%DL3PD;co(P%}(j#un|Iaht*SLi?L} z@CPISZ_A_ELI$R)6Rt?#`J{A#iCJknRJ(uk_vO*gs#f%2ZaJ4;uH`Sp{6cWB@{O5` zpgdAsa?TX`ivMc%4|o7d32blfH67*X#=uE@g_}oA;@cIm)k&0YDv6YU?_bG{*HfHp zc(a%C;1<8l7RRZf>sJmO}aJ3!J z-dx|I(2|aYoCYShr2=R2WOvw2{}Y3mkp61F?}HuxZ)n8j&pAS89<#gNx*eScK<5ge zx<_m;hFXB`xWk<NUHlQ?v2F z;}mgTb@Lx)^H-rymJTF79JTax39Tlm1;l%-8FFYpBk{ z!*~HD)EU;{>=|X$giwk7*{y;#o+{?1s`xwh3tPp!ab6XJ(yCZEl`4!XV}e_SAd8la zRuxi&VYW$vz3dBiEv4NY^v799dk^JkCKsCGEo;)-3;x!eV+&p(R8?=)C>KC#?M2>R(TC3yJuKt0v5o<*Ko-1z_1v1b|Ky(7JXR?)Q1- zySu}Pla9;<6Z4yvCXjQ+VqJEikf3fj-k3vFoe#v>E)cI6H64-Xy#fG*f1(ON%krZJ zsA{wCh>xkiR6rrj=;JK+<7Mv0nn;|Kk?l#&3u<+Uu4Z|YJ&u^{wszIVz%frmLDBYZ zHyo+8jR|B{lb(^5i?W>OcUtVcU@mNW4{*Mc6RE7$5BG@t{KNKF?ek8o}?Mizt(1)WraIr*T(^4N5kW|k@e z0a~7!?7Z+X0;JXuh`hZn_+Ozy_F^I)l&JTW%Kn;I-pS#>pPBZ-&d*mV;?7Tq8`-pF zl-a2dXg*E*_J)2<3)rWFj;f+0ewl3PBQ~YA;dDNRkVor_n()`hB_tkLHlJDit6y8b zdbXvWAFputF++|yB*o6rrZTb=4vXf%ry1id&aa^@<4$S}m4(h%@DKPGXQkLXxNKEr z?NzHrE1UkT%9wgsK*0ZmbXJ?_m!|s^25kRlrT9~g3fHFAZ+VTEkgVz&O`5ZIkhU}$ zWDB&Y2x;{Ib{1L06XK^Zqk-F*Srp#*0XiTyknjpWTvU14`|ZwR>ag<9wt94Onj}l! zRQC!sv_)*yli6-ZYgqFH#iIt3Pzc%{*Md&|S`kpAbNfnTW{dyu6d;wK2cR*vWEkaG z2qSl1mb9qsJ&hx!2oGdeGg=RygCWkYW|Z^I=O0boZuJvw4F#=ad+K@y_4WJhpt_6S zH54^WPEy6$12wMbpY7HSs8jI!gQLFqgJbmXd&3>Z=c*3e@ii0Qbc1W$N%2Q9Kkf6{ z^s6n)b!LRzV}tU0e$`oZ+&`gz=`)v9nN+zz!$6xSff^%ncuYa<>6C}>n^QkeiiMx7wT~Cb&wNyJjf9te6AN*39 zZcjyh0s1w!v|PK`Pgsp)Ma%hYb1tb$=!|k2a?&1cF}eob46R|x0>3bs85+_j53kYler+$0)}L}TI(FgDKahPY-?^ZX~`3# zC3A*o(Mf$`y|al#E)F@n2^;B~EW@ElOPEnQFW32ii;1P5P+hnCbsgi?<$j_r`-Bpp z$a&P(Wt9NqS=`3wVclUh%>L(loec+e|FnFO)2{0P+#tl!HX2uajrLbfx;Wp>v!p46 zan*`kcNhZjJ3RIwNcrHqA!S%_3ew*(#WNdvHx(TdTwKp=Q}J2egmxw#0&j5Zhdt6|N{0 zwHiR_iSzN%|77yQQY3>^ODR+)1enX&L=uUIDbiFlyy zd`y^xRz!|&^M`r-X=b>&=$I24`jp2*+-q`vJ4PpIw%d{i@+;WI9KG`^(9hD5>;r<& zB*n-jp>IRqr~s zNsD3DasvyNy()u=;mg6Y9Xh%z1}0v8kABI-Sl#4$7|KnFm&XMt4%g>4?LHy+U;e50 z2Pd3HLDxQwA5PkItz~M?GPHSZja`4)&|#!KPxJKgsAornS+MS%XAs zpn0<5qwXcBWr|SgJfYyx8+sMen5c$5H>!j)j}f_!J2+Z0+|&WN&ObQIdCsdsp5&zm z^JjhHSg9K6VVePKv3us&i`d}eVv7<%jKRhGdWi>G%1ijMOS|^x%kctA>pyezJUch9 zjr^znziIl9!=Fb{DBPH)vvR%uN7R2z7ODP6_US*<)$jj_1%Cfc9bW&vD$@HeKFs;8 z894RdspI4E>?iV78dX8|jR#`rXFK5cYfV@p3R}K#wSJ=|uN>mClCvVtd0zF>8HXd( zdYNh+Z)=_I*E(|FS|!)2)>>QZ)qbrtPWKMA)*$p~MM3EC9-QVM$g_T){+dP0sVZ`p zs>Dp+#H0P|F1t9LLwUQ2c%{kXw2>CJC|CrjVXe~|lHBYDUaNA#m(O?B^U3O& zG5=)4K@QnkmSMRHa(<&~s=-=0G=Dr75+k;vt;EaInDv~8Pkp~Vc{HWqndB7jh?gvR zsVu`r2{as1 z!x1%Hq+jKsYyIjK5lbpBQb?0v=QX6ch@&B0-0=tP*^~?4uH7G3!TS zZ;F;Wp~k#g{9NEqZ99gwLQWG%6NJnZ?J4a{ouOxx& z=U)mPlozmNTwlRCKh8K?S%ib)v zNEOcWk8kBLOUHWU5y~(hua=Qo{4qYby!cg95<$w4`X=XkidzCV!w%UJZ}WIt=?AZoEGBk?LuWikCf z(XBtv@FzJ@qmqGAT|VV}9q@RR(@(`y{PDXvmH6vm53cXStghaNS=ssbBBboX2rIH% z35D!7{D}xbi!Gya#ZNawB+eAXcU4ZU`}G5dMO+{jf$FCswx%NXdL`z92fzJNObi2@ z)Cei+K3W{iNVqNs!x(4OOm_`$0z&7ONByy`7I~NQZQF_e3xqj;Kk@ssc2j?1+kQzq zjekkHa`6`uw*rYU1C2I<0_ZzNq6p~1KYst{l3Ikb?nV)!1%Oq6O2kg`h;2B3D#r%P z3pQ{hva*2FeqJn#%AqSK$9weU9#_K`P87w|SQx-O9Brdh{fK2@H5v<66jcr5p5-zb zcloG*e{n0_1lyqaSDjd1F8qtQ#VP((k;w%S>r7*VjG1_o^Yw4lK&NVt)94najqVVR z{Fq|q>_|SLdPKh~DC^GO5Yy+XDID$Tb;AE(P=m>{oj?TiB0InwsHH22gZ|eCg&fXmSQ}Zd7SLNa0{s!r-I4AWQx&#~qZvWd- zDx}KiGrs=mT-i|~vFsK;MoV7oqkRzG_1RJ0oinJ@->d~{^=WWWfCmNu?FyY;l{)n3 zoxr>%a4G5L)0)7=?j!zBrbb9SJIpusf0#*9RUWS@A3D%f`Ri}6>Tnqs=iA@Lsv~_; zR#VYP;zo%OmIZe7h*5s}Atv**^Fixlah=r8@?kz&c=$z!1_tm6aE~Ip<&X1BnYVg- z{oK2iGBZ1rari`;o#)X+g~|SapZzUmKcz$Vl{Wh-vNL{zO@Vs9z;9KcXNLlJ+5$gS z{h!^WE|mG%7c2YQ*ice9y4GgD#MZyU6d2$Y7&u)8e(e>|mNgJj0rnr48n2ByelUxU zdROE7mn^s61CQn1xten3+9F+z6UgP0=7BU#hN9yG|NT2VMRsVUNy_qwJwEV@$83_a zDk;}ZVv3ypnw=s!Zc@HiiYb!EbEhd1nFu0Y{(OH^#I$Xu$Pvo;izmzk`LdJ=^1GHU zC&*X5I!%z%w$Ryo$M1K798S6>$R|V01bOO1Z-Qi|Cdk8ljFv1{)n z-IzQN_0y};(y#gh>Bjka&)r`Ag=y)xj3r%$G3Ond9xd6>)5Q|9h|V?#^4Bc_9 zC*MgiJ4@fAkLdKxT`FU`Kk6@hJb}!q?&s;#bd#^%&v%eM_Uw=^L!U;GPiuyYrX#%m zG4UF|0ZpU)Zd}f*ho&Vjdfhz8PcKhPf9O=Nn_u2#&=4(21k}ymTDwCtTh-Blr*8&; zx{$qoJ(QXNNAulSyP;7yz`$$PiNv*ik+oZ%4t$(7TuX!W7c$nnIZryoe)Ns?cEktv zIoz%zO)ASI(RS1=@}@g~j3`OcLnOJSwz#X$J#MMzQl(y7YiHf#ZqizQUBGr7ZQE*d zleX~dw$<|yTWW)wXC#A_}7Im{~T@3rqXiZeIO(aX>v1PWe=-mIj`cYCJXiRTzrc36-AnE^DkJAPx3K(9q9yCPt1zZ+Hozgy z7y0EMIMFNrpkH3PC8yCXuhEK@#5$JWTjI5U(P3Ws%lz_!*C}$#XPNTl9m}uq%jX!E z7QuhCUtUc*yKb_bxA6B?`G($F`nkU}c?2u%HJhMg4kbM1)}^F0Uzr061Q;vDz=>pZ ze)EuK_Ns1FGqcsq?bG%7Y*W~EaSj~ECvnJEat()k;;&tB$cOld|D!50)!f6o)3-x4 zaXwMY&n}{tmh3z96AL^9e~FfaRnD{@_@x-mo8yE??~dx5_+-Xs?}Huq#`dL5cq78Z z1EF2;jlFkz>~AEm9^a^Z&f^=~Y&!n$nZlcqqCzr=WuNt?_FY>OKH zLVI7-Ey-~HG-+GAaVb3@N89M$e4l*C#0&u!xSR)lYdTro1-C@xY#O>t}b=Hr?PIr@#3ob~N8%Xj-a+c9+bVnlc9cqV3`KxgMn5fm|h2#x+|PFnjdYAz#3 zRH*y2o#h`}{vc4^m`OONpEQHpHKAOSXH6(izu15OP3xNdXfl)8PMI;a@GNhzSR@A( zPGg~^h@aeXx+ucaAFenYs+zNp-pB*cz?V)RS3baU)l)DS`nupB1g*66buBgR=YHjf z!I0a>eEM=CBimz*#$SI#kMC5@eR}-CH}tr*fmKop6pcx8 zm>rsyDY?%5r`XwuPbF+`I=jaSL{q_|RnBkm?7ww~mv9~n_cs>e2|{k&0~ijipXGx? zz{z-n6Vv|!7j~^($Ib#&i6Kt2?iw*jID~I560V|Xa=nMWF6L*;uMjC#FZA$t*DqPh zE&fKTXjk`BcbK2ayTJcazx-d$_UU`)Vc)0xl*5_d6aDhz{^6H@Vt?g>OMk~YpGKqG zPvsQ57Aa1#&%4*7PgkBZ@J!fU)#NCN$-y3=lSKYc+4w* znO|NqxpSvm-lA{au8#fp%iqx8l|R}qFCS#5x-0@>MeU5Eawyp?}B-(}?A?Q0}IApg2`!SP`1zOVRf z1DGVcmz2@)cITs9!uN82#MrdMG%2>^KUw|gi;%E8zl)s9@3u1<^IM4hulttIvAe?w z3V~2jG5l~C;U#oJ`k`wq@EQr?Uwn)z!-YlMnU$vFR4_!w^8&Z`tOOOqhdA$C zZ7ZGN?vtPm2!#vFW*ezQK4|}V>SuP;9CyP|0KmQB8zC&7`aXK=-{g+=sy7kYynFL#l#Neg%!AJZv7}HZE+=TV95Kl+w|X8&#?UG7qM(*4cDqj$fWa=8+yU zj|8G}AaZ)RaM%s)m=qkp#X@7rVpLxbjyv2w2#zZS$LgyDNBciJ!*R1Q?{tLYg-wS#mNCa9Ca2BCdv^a(*}z9bbf?0!mYs0 z*>h7B{0VD@?Z|{9ypBBYmQ_c7td2NWs3SvF%9Y;=P2EY%CE49yw!H2mV;5m&d6!dZ zy9Lv8r8oq+fm>D?Zl`cp|2hbXtq`9npRu_QmcQj99Ju_g(23pY;$|iaFVwg0I0-uk zXq?IcPZVR9qwBx$v9p7qkhXIN{>F4p6&&6zgMxof$IszTPqzv?)TgAXc+{`rFg*Ja zBvi#=Y%Jq}ThpsJ%z6283xx~_-2cAQhvEvqis>KwRUFzwRh*e##i6c!z^%tFPLHJO z8Rpk>%}T$X5dqcHE4`i(PLW%Ml@BgARrvD7Hlkcwq?~huU(N8Is;2FvG@=>q?3`tL zG{E#|n5yyV->+oDYknoevQ){u^h$;~kGPd!H32Pu-9aTDr#b@a`BR&vo+WODmS_1Z zW%M7aT`T4N%4nQqoag&PJ8z|2raO?(%#t6p1#kQtt<5a?O~%~XnbBQ8o?Gl6?`Y+H zaByio8-jS`!59xw&`@{7fn(1 zTjs+XeBeDVxbzj}H}o;HWE!QOR;l0XW66@Xx#!I+xw38U@$qF3*#h0ULC92apM9so zDDQ6hOWI~PCg;bO-D(rF=UfqAwn)!5o%ZKc&n#KgHv8=4IWtS{ZkszIzO1ohdQp5? zy)E5+&T%tKZf%=AB6&=FS&jXcIVU&1>;mt(Uwm1$`#iVjbKoKacc=Y3kjcMri}f#@ zKxV@Pnm@aTVv)G@pJi*Dc1J63*U91Gx*|y@+;7!&B4?cBIMp&Who4JZruLHpy=CeE zerB~y4e@hT%T$8s$`X%hnTJLm*lxORPc2i~c3NKu&Q9ho^BfGPqJ(yxyl^LA+iq_P z<5!`nZ4^F*rnd3Mt`(#TQk`>ck)DboEq6AlYxrQOw~=`1@Ep5YtxxN*JQY;+_XvGW zt~ynHZ4r8?d#J;@%K#;w21Y)dcYs6#oho6is!rV0$^ITK;%v*Bj6D=>jW+gUvaSjB zlgfg(Ea+SBS$Zdi)}Yqr#sTf^85uY9T@xCR!Pmvxl7snoNT&pD72B5VMu{A1$<0`J zh?E0lPaa_3sgw6m2E}st$*Aki0~07?4k@&igWfaRn4hum0F-{4`!A4efHok%3o^3n z$9ggt($P68#o>sw^p&2pTP&+-9%r_CtPb_yC?x6yK6Z~qP)ba3{m<+Nw1r*)lJeYa zIXs*5RTM#Jog!}v700GCrAW`L+(d|InG*6|SRtoGyqChJc~z$EBDGzu&w09Kc1==? z1CQ zb2(9S0ZTk^wX&Dn?5pOStol{pRVsH2ggO@Zdw>GDwm|;{ZvF98cHl{`|7Xgcc*cO! z?XPbA4QIG@(~Vn?@1{EAoY-v|3& zeyR-p{MSXig8#k8c_pq@`e(ehN-dV<4DIWVOyWP@uTz*BANUF`RsI5@umJRHVYwav zx<23i5?pdWXhIpkXB#~uvK@BH9$=^M?^zAS-bq^cb1!L(l6E|eg6T>(&_I2K;qQ9O zquQZ*2(cKSMY&!LUb(wf?m3kk#rMx2@V;NjcT?V3uEc{$JbS*En5#ljzC#xXcd(!N zY_MWmoNJaLxy7^d3sARN#}n!8A>^r6N->cymyX1Z=4wf=cw;%!X6STWWK- zrz?-!xq^#^ky=4Sn9Aaf!9_W|RJLR&G)lo2x{;`I=sT4KTc^ZFcT0}d3C5)f2!!%f z7RfCy-Wj}6M`kKpaw-WjT^V~7kF)ZXyD3Jv>37eJ_vl|v$m!VX^5S(krBwzi2*&wt zeMJ6h)k2nG|Fg8J<;w@I(71_xN%(i?_yQr(c33E6RUnfvI!i8T_zjc2qJWb#-@2jO zDu%8RP?ee7%M;11C6G$AE!xUdfKhN0@8|vu+IGsIt6xQ3{>{;vzy^NKSXvYM>_ZHUcVX?wMGq#u++X z=PL&D*Ev{!`s+_W{pqDY-S{K^a-?_uB1P-QHQrg-b030NQ+bK}G+7v1TUX1XKMU;o z_zm50_gC;Af(>imuj+9Wm*2p;dZ>l;c^4c2IkE>K;LEu z3fa8NrWZHn-Ovv=b1{+VE4a;yQBK^YDPRJF6Nz1CR@#|m+?4R`>`T{avhQxy|6rX z!Hyl}v5FnLq9vnD4gJeo<`ds)4VDg5$2{yZr8^vGKaT;_hRk$8-jG0P^xuPfq+>Dh zS{m*|gu>sP>pa@i(g%-y_Q|CgW<@(~82kD2E-?{W!9$jN$~Apm0qThJRX&SwJUck7 z)53Da`z$QlYIayyob9DvkZBssavHmT*iJQBiEAJae`eSR17F00&n{)ojkdX(d<^=q zp?r;o*0Jpv7giwnc51G%V{^UT=90gn3GHtjyT6fFnrW!{vsTsN9Tvo$`*Geu=y7H? z{lX-^XcsA(r{#TiI-CzR82NXe#fYKG8ajELv)-os>Szl*6k^U)SYKcn=gS#99ngbm znsw0I^TY$I&m&a8Ft>lzf3#xvx6YjtKxgwS0vhrK80|Rho(%cbHdpTgQl#cW29U5# zIn)ItVre=axbhfUv0;g*>W{3A;Nn~7r1VxaZXkrk*~Gz^&q3-ZGwmp{Rw2IYGgChI zKdt|a+HY6U-f^_j#rDC{=fc$7HiwYSkQ>cjdS9K|5eDbwBP?cZS2e8)wSeYxzr7KE z5<~2m_#G}C4FE^DXiarEJl;?#GfKTR6H499b=GFso~8ty#1HnR+%)>F^ypV8j<`g8 ziG^mm3r)V#M8rLuu7ok?sjxR^l+l8t^>r-3sE^D|X8b%5AM|e zV+j<_t@v%u6XA+QVfo4oIli-d)h$_M_;P(dnK7ij3@N=AJ zzH#v_2zv{{K0w$H2y@JJUFjI<_-yfW6-?H}563fcBc+vDv~oGETtO>W(MoOb8DeKb zJO^9i8PmK|#4`?OvS|lrB_~2GCstU(iSQhKG(|X7^rIOiwNE$^Z;!|NP_muVb>;x@ zI}x2g0talTHagv2blN%caz#dco^ad97W3ku8%@Xg8-=Wyb_G=C2ryM$<@~}{ z^;GAoR(+JJ>Wu@a%7pppP?h-ObZTS#;NtD{Y%BNWMk`^~y0G*Lq~F*|bL@B1C!xig z|3B8w1U{?k=>G{23`%^05{)7nZPcJvgMubt^a&>V1QQL48n-r9OH-{iLV{5gf=Or| zAFho`ty^2IwZ+!9s1!k504BVn*4> z#@F2Xdufx{R8E6+UkW|_fs|MFFSZjz?&y07NDJsY!tyP@fcrGAg}Tz27xyA4NU;oz zkl*$$)mpzh^i1DX)PWmwh$tpGURy zcMQ{MEYs;&rc)8q$@U>}AT`Tt?qDrIrP(`5V{jO=_Xy)|5f+M@KIMq1WBQlyu7CT* zRmYZXVK+duQs*|Q(akaHCfDP2B?ID+(DiTVmklLq6xtz+t>;P?I}|J@WhR>e-T04~ zOfp-{rfswI1su5sCXf-j{w}L(1&fx?@h{j4kC)Z4sTo4>7ywGNSQdI@4^CfOky#pg z=OlZ->LBdYxx!G^i(^d1kGPEijF`#f~^1IBj=v9(e;! z;Q!2Q8xKy}BOgn4`(B*XSF!xl%(C{A)7#G;(7aenTEccIUpv?IV&=PpTFbp4l-9`v78Dd*8gS{5&+A&Wb>s+fP z(+MEnbdI(9fjXjA4~@5qN~B0_X-2WB)&4qMDY#PIX18e!r}B19sP0%bAq>K>CcVEg z=s4*i)NwAAu{lDN-{8KjVxwFndaE9-yk1apxre_ zRe_toUofY|@Gk;~M|}_D>8`Ff7k?CXy*bwbCGJ`a4%cS6Z78)^x+~}3dko27Grm$E25;P`1$Fo%vTx51mO-{NL9^~fVQ_19?4qF@6M8p6**p zerzDHI<7A8-^4p1zdzP(;F1(8P@#xdO>W|%;5eDMO!I$6!WV>CHLQ9PZ2Als=w$e3 zjrz!ppPYXIcb9O3g_tMGN>RlBa0j~sLT#Thb0Bs^o@=bQJ{)SPqm`Fn5=P+WyF$={t4ogZRTiZOo70kT#M^->Z8-uaiDf&$zxeyDV+#6h4t+ zRTn3I|EU2z^CR9e3RBge&UBiBE1q>9pIW#AR*{UOpDq^?AZnxG$q4v{{4s+12n6Ef z{BKL}ABo^6N@f`cM@H9`DOvr~O&31Z_cH+f@IdmRgO(%6YyQ6dz96Lz_n{ODL~JF< zT6AsxxKjMeF=BqS`Qo^~mHsbbF(A}ZvIhyF?SM~`NziAY?)iZO*UiCB?YtDpi~hg< zeCkW`mpS{{D%@i>QD<)x`x9la=GuN&zSuzf+sNI!2eZX@*Y1VV6IGONT7?eaupN>g%lhdc;@_;Jym(gPHy}24-b6KVKOSS=U{XkN?QB7+#W}T^Zd_+P%@)=but{ zyqtBL%CV=f54HVP_p#HFU}gtA9g*a+n8iXoIUZuZ?+|6rE<)yYla*wk{S^@h6iC{NL^(mhWC!e3-U}pGkW#(wre=V~a$|Q5`KUfDDfJ zbNAfZO;%#;yD#d^DwfH!pVkn&46unCSuAbD?4XO;&jJbZ0fw9F=g^=vB&+v%xy_F* z7 zfJ^wd;pvs3wpXYoJ}Y41RgQ)0iRLO#P7Ad?$}c)1!iSAlhuZGvSMq{Leue+y}k| zn_pGcgUvs|rwKNHDw(`&;=jt`WNQLhcEdEOkDue6c!OQzr5DKe=VcZCiT#3?WyJ#s zz+^U<92RcBHh&M0H@pliaz4$warOwy%@%VXCg#2e{Cs#B$j~CyxoUGCwYe{% zY`;=zrc@h!(Z7O*T{+|AM!zHC;C5cwp8_NQ$9%`XpTnOJ@NZ+-cUewD_;x2FCcgcy z27F=uHVrh>b30ekeH`B&Ilg)EJ=}0S$aU1Asrwptu?YK5<$kP#=|c0WW=N<_>#5W~eIlf495M^JTk8qtlpywk9#K*LWK%E%N8M0>82XbMu>dtX4I- z;1!>|hz0j(`_0F3ZPUN%Dadf6!F~5O>~?eS8E-5 zHA^IiZ)&@!sEFEviQ?rvbo(jPHk4#p?ttw$vaW$(A>LaC3t2(3OK@S+%*)!(Dsho| zqA%LcsY|IzY&_mOVfF}DTX|61GQFm@)w+_%;Y23s$@bgzz-2PPJ2ZThLoTa>GSpHp zV_=>;-(kc=hhJU@zn87-gWsB7_#J{HN%*blgWoIIv5XEk>FB$7B~bHs9c0{0}gQeJ1SiNd2apxYoGo{diUQvIOfQQLTPz~3bB(`{lWQy2gO}WxIRZt9# zW?3V~6X|7~k1~$^hq;lhn3zpbW7ddA)0Tcf4QMJjEa9Jd7d}OcIt>Z`0>%X;>kD&+ z@y8X#|GxJ4ic$ZrjMkAjswR*87f&&q(s8P@{n0pGs$_mp@)UMSYCj+1+RK>#Is;_Y zy5>Lo3(YGoJ=wgMwb2H%RHj`iDgRu|Ga967u(KcC)%D#T5 zW&)yWFi>OrQzO;>lx-%6!WVYH@Ss7su4r($zR%S_R1*NQ9@9ZmVgCy4T&03c z5N?u{piX@NlzFm`6bMQ{)dw0A+V4ESKdBa%zVZ07U&KXQ%QoimWBJX7P{&7g5>DvR zHxHOLqet~;%B^eGFjX;-QvyIMtwbjcgOq$__@HV4KR zOx+;RTS~^Mg$7O^yk02rpZ)yxq&jYozOL8mGB#ZYyxJ^pug3b-uIjKf9`4KN=X88Y!dnKYw5Q8C@R)f$A3 zBa!Hh4u;2!1^{C3mXcGS6hg7hQc)Lnv^m!67xBv2qr^(Yo>RZz-3K7&{TCpA`df!R z+6wAqf>lfBp)qmY^mSVGS*y{{-1=gvNgFwqdcY@uqqn*tc;txyCd^ARo8D+JO)!{v zWG2^BA@E!E+_-$`d0`1`iI46n_%B z{&A~OVSir6MaSvn~HH# zwrs@NCg`lk4m(qCLuw80g`M?(HSBEpUK~5F?Ay=x5yoEDeXi^wiL#>Kuat1dyzHpr zYb4yzUJ}lY|6_m}$hhog;?7%t#sl&=57r51T3=NowN^$JCr0m+HzLd59bofsJ$C5W z*?B~;4yp78&8qUk11gJGOr2C2J1x7?8$QcITfJF>PYFG;->^vW=TncaEM7IW0EgUD znJ2}{b{#OKtaxkVt)bPn(FD37pdy$=*~m}-8s?ebs6X|ZaqR#7jNn@0y>GGom0Pcl z$6`-mo@e`q|09?kp+~sw=p6CY@-Zd;?NrudhJ+yg%}yd*kS|BCUx%GsBwf5nFCj9_2=sGzb5*+$%Iu z=^tb<=jhyIYF3i(cz|2z5f;5us9c+a5Dx+1aOi`-M;U2Jtkku^PUo^-p6}L%8zP z(*%`9ZAIo3ZA{wF{tAZMKkos<4To>x;0I{vOfc_!`Ek%wdg0&8?38@CldFHLrmEna zD>%I|{6Btr#G3`Ci$4opuNVt}=E)fTPaj+!dSp?_a#`K59F*(i;kGT8Gz6JuQ_mscrbav@^9(xH!ahvAlRidz|vbO>LW#P@Cv=&@6WbH>?j;_Bw#KWHJCf4PRc zMZ$v+E>coPbu5|+DP%g@*ur!Q@sThqdk`pTq~8{SVnw~~!bt2Y4fT-tP%BjYg38!A zJx2N@P`Phq@ye+s8suX{f7$FcngR|_iZ$#xAjB!@TcRIf$vxPfgD66k2Knv&aQ9 zE}AOV5!YX&FCHcJ%IRr=p4bRTe*G`iw7y9wg0(_xed$VeH>?UXa|hvw>Z|1~T7+;> z3a<{6{1MW7CX(ctYR9sSC7(IIOG9ffCjjic85!meeAP&?S|%kXnh}?%f+<08g`fXoDw%1NQQWjS z;SW7$p__j<(yw6tg#*>NBN%Okt4upYZ9sYJ0;gn?JRascErL1dKP zgN#hqZYjB9VL(RhMn>t@@gTW`qpTxe3D%9SQ{pe@|2^nP=OnP4;2ZHD4*qpX__NX9 z!su_M(%&Yazm|mC8p>Ol$ab5Ny4JwWxe(orM!}h&J79&Wskd*vcp{2 zq<;0VEBsiZuu%S$8c*p94l`e)@oed(@x(Fbt`2`g8MDOr(=KYDjad&OC;+oewp1F} zpX_G-K4fi>S%G&(1~seTR%wIV&l|LILPpxk34{5+3;)@Up2}MSqB!rNU^W;d@wbs) zk_CkeBru|2tLbOMrePOfXGnW8lgc5#d$%7e|B-*^?O-8jSo0SuJ#R?RkdRC)iCe{d z@L&(>YjF*^)FzJl7HmzWJ`qwb`u7HhW$Y2$_q%^0H0R7D{uJ9<3;kUr`uiUAcZuk) z&ej1+zbQgYZZA~lGDCCa9~Z?{M_N{VD#fWFv89TcEhVO9InQkpW5bON3q3RY4W`2^ z-VKjc3<|9=x#eZNci4%48 zU*A&l*9F2AW*ea% zqBgGo4w-ghA9e{riBXX<4)aFtk%aZ5}ch;K;B-(7mnk-*Aw?4N@<;uz=Z zPLsbnlXH>b03VVtmLB(Y1 z33U%kiW-V;nf<1yur#`Pc~|BX7Br>HJ9Eq1BSWT?Mr(F0ZHH$%^@N})vwO5Wh3vGM z9x2{3?Lr_<0e0OsfL;5u-oO_11oj!fKVW;HHvlwhZHCrNh*l2#PhX2qLS@2)a)f3X z<{Q9~$>(H2QW`*l>_{0ptJ|zM$Qjvtsw=!f+0NeM|JXt&G>eedpxarOKz$@(F}w7S zpk4+ZX1k0jZb<+Aj_Wl(rBs24{xIStV@frFoQE*8Ao^wL?GXG!k+~@Clr4+DAcAf z72SqoLqcn2zb*pDi`mx9W2p{DIBvIgH%ugXJWJ(Z?=LiNcg3Wh-0qD0z?@=bsk%i?606TC zVRZ_NzGpRTci&z>7dxOQB!K?f5m;rr8^6w*VEnIh#!eV-K!9$1nv&xa#$KK|n{YQw zQpd%O?ni>1hX&%U{oA+cG@;;bds^0iJ__>DD8OsdFRin3LTFlos|y0|lbGpR9F1lQ z5scGofi&4?#-DzZ@oGdsoIO{A;0wf_OKo|SnP#jmFqA(7x5H2#!BD=wbosj&%BwMy z6KRsF<^(K!+Wi5?b@M#~e+)~g-Yona!PSd}Kl%=k{iP$|4+$22kSZkpl2zFan!f%+ zI8R{WPN6ZrF4+6{0^oCSjCo|4g{B3J`@sZB+zH$IHe$$T)=9X+{4Vvw+ zf*RBb^a?ERX3=7Nu6)~;#dkE9r}+o}AigU0uZg$V^>CairCdXcA_I0T9~Ao8PIA;Z z`YBBMcNkjd^&sv{cp-iv%0=-Daxo&xWn)qNf(az@({fC>-*~ttlRMTo5t|~#spT;% zmlkTh9UURGXra}T2%qV2&dZyrQVyzmC1c(XujRq3<-E)~go`;Z@m%7++|XsttEPUP zmvuNVtGqhrymSG4=r@W2sW2a&WDPhCVwKEHTYO)jMJ1h>lpv}foFgy-CuY4IW_5Cy zH34m2sP#Z*TSd!%2VEyO>x@I%N^9gym$AcL zGdb1_4ak*CGaX%d72RvAqAyo`vbAFQ7c}!`dR6*b5QM*Ah_zAH9vLPt?ltBzG%s#X zEd1tkuy6n%B(Z?zN=%Kzg1*38i;uJCXA7l*=JxmuvL*b}ea68+Rnd0^S#+)Wen)*s zU#>;ftIos!ThLN+_kEhuY`?0e`py2)uO;+kKEXYlqAKsT%2<;8x)MxzqU%!!@z2++uWV-ozK}JIUHh}=mOT~qS9)070X;}f254G-1DdIPN&)c+y z%q5vzIymZO4bSG=GyJIO+}t0(86<2zz@4 z5~y61bB1nE90*f(_S2%AupVXU(RYh-#&9EdZJvT&7OQ5bzm^ddBB-$e>4LsJWZHOE zc_(XeS6LZd-P7DQ_zie=dhGRX`PM51;N)ajSUhGGt@{GEb^Fug5s-nAT<%}s#P!j0cYS@(9t-&0x z-z_878#nUm-rm>AuS@>jpb-yF)FrH{pN(qpR)Ea#6Uv}C;)=WSIB`{qftcrUmagIo%|ZuD2?`mjX&HY zY~%#SJM{DM_*;76gE1#|$I#)HAf=(zCr8V6ORhm2K;4A%&C7ofK!Pz8Ea$aP&M!v| zaDheM*rl%misj$wJurC&O2RY#(AM672xsL|00PR3IA|ucb0BpBH^CC+G3OP=2OYqo z-~p46z%*LR;5td6dd;+2z+;hgAds;>k(-90trhP?%20+T#cwHV=XGKakxLxwXe9cX zf9e~F@(bMzOS;7C0+%@XpJfAfZt(h~8~ph#`j(m#2sbx4@-|}z`H+at7VjV=0TsPa1i4nf>IE^XH8V-@9}0J`tHBKm*|7av{a*+BiwS0Uj-d} zJgWiK?v4X@qS~oPb)iKSgHSN|Ss?oun?Z`7k>-+IL+z`8V$-KwpRZa7Wf6PmO8PQF zvm?c9J?gjCliyFUp5%%k!A^kT;h;5hFVK3Dwq^6e3>iI)j7ijWD_%1tEZ}Zg$(0T! zwYf*{v*w;kHurUii#+~~5cj$e=ji{EB>jgI@m@*AW3=d-R{w`<#=I?Xju9CUBYuo8x;&L5@{v>Tt4{oy;YKS8t&mqL3( zM?ib4MmpL{_1TC(g@|5&tzvts8bZbZOc_R)i=Khz4i|BIn2@Poo(^5 zUpvund-NO8>j$ZLi7$bLpT6sB);BCK$Yqzhz8?0Ht*^&j$@==Q=OotG`v$FN{vX!Y zE0go5HWI`z_A`%S6l-16u#25$Da~D|K@D)hj`0rzl{&8TNR>VrZr^`^<6|!}#~vY7 zj+U>zWABo7n$&>CA*B}3h)Mc?VW(O9b4?EPJDYRpcjx2(={f5n-gkz`dVRRmAWnWY zi}7&583NAUFq#2|pnda9nT;9uT7?%L5}1s~TYQA(r{re8CgbA-lT#!t{?4(373TOz zjlXkVtaq2$40YkC7k1hV{f;hQ8))bM>yebXs&z^qEAo52t;qia`n>W5XaD)J>_2BE z=<}L*qyGo`JS^$IDKs^;e~cCy(W3;Fy;~>(otcm(l=LnQ)JW`Vb%;;GEPod zGMK}Pbv0woq9+1boHS$b+LRkL zO|~$Um-5}FG}Oieliz^^nwQz!tlKFiyEgQ0;au0kmf~a!U!$45qceBERx>mFch2ZN zBjTLfU7dW}CB8MbWm_Fv;F{?OR?1c`Vu~P>>q1*@RbqFLzq$;&<=u9jmwyje7JtoL z`mvhagzdAubpu>ClLF$pC@B>0N!=l1+0k^Mhk`5r1P4k+ppFE?i~a`YW#82 z1`5tD)=Xkyd^;^97K~=Z(8AaZ7V2AITG^EH%~h= z@FB*n2x$WE3+34^ zq7y;vHHj7b%^Fj;Vz2GmHwauuevSxyMKlnkhlsD)Ctc>&>>6tpyGL_tt99)#)oR`7 zBUrLqbcyoc+LHZu&(VipU*!;s;N(THWUm$Y02PGDRR>G<7vr)rz-huSTb)?1Z}@2d zKO&)P-(a;a`TvY-2KZAwvwq7G6SH-;Uf=P$iP=wdX?fZ`d&50@Gx5w{fa9`5uq9Mv zjZ1EFKTH{uvak$dAMIbVK+RGVA<~~e7o(fXijqfn{(R>F?uzdX^7jvkJ4u54{iH}G zgp$~8PKRt+LA)$kia)sS2N4eoNRZwBIOVTb*zQ&Q$)1|4U%8bYyG^-0t~@jh2(qur z=108>T$QU|Y@s5D1gUZ~FyZDC$2Ht-E+HZTe=^JFP<3V(O{;kc3`D5RORUI zuH6Jrg;$zR4rL`U_msdw%^F-mvr`kzPIb+i14gu52h-Rk^iz2y#6L0`4=9~oJg)wt zhEUthR8-o0^`N>?>$AL`($U$>6D!{~UGFG(`S%+dbEcHerqmT3jk{5N@Fk(vUr=0c zr(ImvINaWT|8n>8`=Qq6_{)ZiLTyJTWoI?Jc16-4Xr-j;v^V6cdyUwA>A&mz` zo*Y*{^@@foF216oxH#1Iv8rjlI`c;jM|b-CW_?GwU0r?+%3jpiPNI!zK zG&{@eZORrqr7ZN~V|IeM4#dKotfY1JwV&G`S5g7PL5+4Zh`h1sHre(UiQEq?6_ zwlcSrOpb~BFk|N0dome3W!@Ke8zkm|uMwM=asM-Lzo)eWnp*8hb-q&Vv8b%tZEGIo zZ+fWg87uw8vy{FyD6O+ksA1K=$&`P6@GMu)f*MEzHJ^_qIO;oAPKcztDm&Q5tq?UT zT^nUlH&MH%uP;7P@vY-kjh8hK`3ZO}B{#?$-N;^c2a`Miu7$houz0u22*D-5MF%xq zC;L|geN`va*WerJl-jQ(s5yfYg|9(o(`hIW?)!@9j6ACYr-v5*nM7&AP~>^5&x=Hx z3P_+-*i!OI6p*B@ekbhDeLApqoKNAC!fWcUFo^k zy3Yd`cl;UWaQ*=@1wajH*LmP%_czHPFiKmfiBT9UOnO_t>|5C_xjdljhD)#tx@pH zo+L*i{xg!YH0H2p{D|KJ20Ij5f5>F$yqd;>4!NGd=xquJEMX`T8$enr*Efs4rGV>T zqH7v^5_40{OqLX9O7&|PS{XZ;{JJY_$sJjBaxN&OuELdr`ODz*x~cMTQy_4R&&=| ze^(6@9D0+04*LHl4+s0>s>4(^V~UUqqin+%GPn!zep^Tbkk7vGH!t7X)e|XD^i0#$Qc7n`UG;E zYpF8svJXTb{*1L-f^3~&e0O=56SUonB6bzk8nyRN5q>p!F>IT~g}@-VMTul^V=TsK zcr}Hm7Wiv$b0l-gFc$Af0}r*{EeM$;A}PgK+NNZ*jIM!-4`vG0iLW&&2T8MvdN~JZ z7W5j51Kq3k55LJ!SatI(X$9lZd`_QnK!1GI4Md^HzfK5XNQU%}b@=&eH4lUVx<_u5 z=ii~*&weHa)%V``e?T<@+4XCEZzB$ZQTn z9rm1ge7D|vIlq?*+ly#|`8(_9--Kx5H74jLa#kO@@$+AXY`l!}d-{wLPk%BuiQj?9 zDU&4qjoVkEV8L~oQi=1flXz`yh# z26^o6{viKbED3oe)g5btvF`iJRr@0j-GvA%%pk2!FN{q@rwo+A*cq5ZgZvG#^YSVKxl$SX9yaJp z@~fLmPP;}-rd3i^;xwN1to31QCXnM^M(*z9Hv4FRQ|OJ`cp1OB%Q61d6!rIhnq<;m zR)?M;79B&{mHcP33=L9U{D+sMn2{!sXwC&J^~h6p=$gQvrJ#FcD>(SFl0c*G^(wxA z2a5WbZ`XLooUoMj8Nzp3OJ(c-5z32|x-*$Jch?VRs)i>5}@f3C)r7KU0q?IDN^3q*MoR;;Pog58h?-IANFZ>0Y zMPi5oBJ%g$&j@JaPkIqhx?pwrX*2zwE!sK#q)>S0nX-!D(<8eqM(^R79W9^Fnl-r6 zo0Q%)+OPk|YveKNJyB9VCu4MUi+H_Bp|I#%-yh1fc(>9kDICz8c1mc`k4muDzt=FV zWyOE zcpNs&9O)VeJS82hR74=1CZ()-4uC8Y-4REfpZO~dV^FgkZ}-8OW0SI%zq?1v8@r(2 z{9tu?T6aD)moxTuMpY>>o204-5VWSOw_27BU7870%KW=vUr|ENn!^-x6kjDJ;=FHe z5rN$0IEP_PwQ74V|YVQSdRdF$r^ApaT&Rq3s80YeD2UTUCC zg{r^Q;%R2a6S^R%@<=BvWh(CB`N-ehL3n8Y5N^M|2ZV(?hj7l8w=rR*0bm#kO`*b>a>{+ z@g~K$B8P)(o#?kO%l`=)LK>WqtLw@Md1;;B1p@tucr!s#TX$&guX*Cu_Y-rgMy-~Y zVeXAQo9K-p1^je6#0hswztSM!qf;|GN9aeK1a{Yrmoq!w#cejcjsjY)$xLfJP_SEH zypg9qP@1+xM^X68Ym^V%6-x|9Y{F1~_2VYaUtiSkSiIZZg9?uR%g*RDWcgobY)TGD zr{bJ|^d~c6{~Ygt8UDDE4fY|73wr|d_-26FP1W`x zjE`PQfkXKmfa4_$Fb04uk`b@ZDOo9?_zyp3NO|@zLW&m2@V?q)fo%U~SKzY81gM<% z6sV6Eh{Q@^Q0Fq^DhmAhdl{`SKg3nVioZ3#*&xX9X7xbs#~CN3J(+K>8uDvO7elL@ z0=e8jB&9Q5q@HkkiJTUJhJt%=G&7tB&|>j(S8=M$I8?lBEbWm|FIJ9P?oO52&Z#oH zj9%vNb=RvYN6OrDGe^qA#hib~!(@*58Go3Er#%eF-pH#e%hUV;W9-p*_vn%;9{uYW zdsN^aP2v&zlX>Q>*=})jxNY`~FE_|9!B(ooYNPKD=bx5wH(2A;A@z^9X%;)7(mMqu z=?qM&7W6xq$<(<26!1PyMoMqwl9!-$k%RyDvp5iilnUcC%3)~DCG^BTeEy?0u9M$( zX%xd6Hc77I{pIe>7WIY!#r7#fgqP7N11XA4E!<_rETOumP_mA@M9*SFh=Cz6i~oN@m>Di78Nl6lU!zl>j~Cr24i zE93@9GJZFzEzN)9MAB4xStGi~LgTALZ866s*6JerIrKk^a)HfhZho`AMR97kI#d7| zwTv5851LN}&1M|JTxHIc^D{@Yu)Xs{Eo`MUVtxI|fvP>0wY!{(#jCG9TSY;ft@B52 ze@*KnzV+t}lS4)aA6kuau8ks4X>H__tr2$FL=N02b82108-!yQfz%R0FaSL_&oA0*GXXB=bYD^#8*?z} zt9sZWXG6p3N>Z%xx!anv zz@T}~Dd1&%IUy0X9OOM^9H{F{{M#?QP5z!?G+>^qxqrspa!R3YH+C(6{+IrlT_Dl{ zOg_W`1J3{^{`-YK^>T&>uvsZ!TdexMjFKu=Y)YgR@tm}bFWdZkH@Hpez#Cw(=Yiab zTv>4*csvupqI>iOg~~n@owQzV;_I9* z32Hs)s@;jTS5!)LMdut9LXfv@xcJt?jjh6=W)$&F9O!UpB^l)=`Q^R2X)-)a$ z@g{LT?iLPmIkDx90TCUA`^A8U-6GzMFPCIfN7r#oqV29w{NM^S)T^{H*h@h_jcx!VpsGe^)XB#iP# zE_j=hSLWUPDnrU{EnzMUW!$^ESoTYQ>4)%Fh=~`L|NRR1i#y#T+!ccUX50@g@IGu# z#LUqqsJqq6vwY4?DR z2NoMT{;12Ul^Wg7cWl*}b+dbOOY)7$mo@Hft9#qV1!7w09$w)d*1LzlvbAOW@LTl; zlxAvBv&GBk|F!w_Tg$sCH)_!0LR=_i%IPiWDd?P^GF#pJ`Xk5)=9dQTqhFM!EtS;N z_>V&`qaoJ6L%a8heG$Mo5L&zEk;~z@a|H!Qb2*5E23G`b%r4K_sj|asm{G#_y*Q-x6 zNOHOSwLyU2buBVAHXJxFNC$cAsH^7ps6f3x4DOA8{W!o)H7Gbj8cJb8L-ChBX!^;* zmz{o6C|nhRgCqO{AF?;&{^0bJu$uv1#u_wox7|-QCDM!U@f?V5(Lp>3bwu;?&bcWX zN$2Igdu#B`4B#u$ml0y2P98r8j-T=51IjGNeDeSODgu40ES}66Qn5x?(^OIXY*w1x5=k(L?RX^rI6 zGdjz7asIJsOVi-YcK%znh<`G~s#TpH>Ud+WEhXQ+6pmtUz-)iTZ&D3cOredDRnp%n zHdw_R<0dnaY80A>lyg&WHE{(lT5Hhj*_6LaFiylDi3Ns8>k2&uDx5)hJ(JkK?VpdcB+jjkL92RW54MFBY~N<(2^F_PHjDgG z_65OmSQJ;48b+CJSF5EWht`bW?$0FlMxHp}#58})F>eq6bEYcMkRhqG;^HCz(4T&- z_V?st32vr-qJ1%vj(Dm}g&7Og{^7Q3lV6?7g-n}YV-vUoFU&6}Ap#|krhws$K3Abb zV$gVBCEC$HRgD;r>UZd#we605Idj*oJ;yD6=f>}>&5@;+zVHP!sHD=P3IIG9c;tdoE+}Hic{sp0LZTmbu;+<@e8m1CliNYNdM#^`ei{S zXV6wk3`jK}g4{Y|^YEug@$%613k+>v*jGx~Yw>lQqw z0~V7ot9G3zIJ#Q^CqxpUYkxjW%l{sexTC)@G7+jc&_eOw5w^3l?|_*om4&^qv!>6i zi;v#3&oaF;zwUh7>C=q96wp|_aawI8mKIt5CLthWB(!sRxPIEnk>#)RWO62CHz*VQ zSdcHb2e|=0~0dWzvTeiMero7<3Gi{TS=R!LAR(8TxBS1JHWa?~m`^ zWI-EuEn{5r0Pz_ntp8X3^Z~J>tq+JDUw1yS*5`M-_4&;BB$~Z#lL(eol5d2YEqVj( ziv1E1Bj)N80$!{qPk$uyua;@zYKf*n%M^YG{O7-q)PxLR3#=!ZYBm{bBT@S4DQ4=9 z9tA|9VUbO}TYnIS6l!f27~Xm56|w9p=p|CTY1(lDrA|~>?If-@_R4!Cn3)`_!JYr+ zL?Ocxb5I5@WQW#l*JKJi7U50njx2wB5Os`(SdP9JVhOc=*JjD_qy49TVSJGgxXjLp zdPsZrVU3L3h8TsF(s z796`h^x!_Bc~7-&3=3Ej%|Ye;!i5 zlp#Gem!KmCL6!=d1K%(y3q<0XV6tp0b(#)7J<6@7(t* zCz#EzQ9<9cwQlZM$_L%sL(A=asqVE68UAsH*h)H^+4C$rn7f`y&QXWI8JHV_I%*vL z4CK1RmO3!eB+{v;pNAS+3&0W!BqE^-h1?aRm)SwbAou8SXx_?j>yE|)5P$yGgB)g? zj2JcO^$M?S=4*CXl*rzMNP@C#X4$WX{Ax9m9x>zh=@ff=w$!AlkZG(|q$dAjwp(9} zz*A+R^CGx2vbz{CYzGIc$Bbuxt;VL-*;XXml^dJNaPDXv#EP3CoxqTurXgk4{c3q% zh?!cdRK7y34*{?yt>MN-vp*VDYyHru>3`Ry3Mx&tTxqy@oxe6RHTv8;;H{Z-Khv)eM{Ic-bxYrmzZQbr zoMgzoetjeQJ|{0h-`i&NN8g7g>6?)^=N3x1ac@oCy|I3>;Cmxj@Ii0EeyDmY9PoGN zz}{XKdT>B#Xx=iC{xp)e+4gI#^FQ8Clx>Q?dv<)aEn2SpTUy+Z5N#z5h@AIOK_R^*y9VOpiJO-5bw})9Rs)R!tnx zF%CCDj`!{%olCOqf1Rr~VB1q8{w1z~1lx}8)>87ky=S7Hni;$w@3QI5fH2N$!k4_Y zVIRDC^CxX##nQ+j-fA{h+T`yj<=g=}Wite(LC~xlHl|&Xn|3WvM=pFSC}Vh7v6C|B zVyFBZP0<_KF&dTZi@njL{j+93_EtrIbgoe@@JCEp$ z9Ab1zQ7z0bR>9PfiYIwyO^Ia&LuI-jGlVDuccfJ*qg+w@jX&^zcXeE2OsR$DGJTKk zOKxX&4s>ecH{u_AYx1_}U=aTSc0Kmh4|TvyfWNqYEodW-2oVywAUG|+V_Xj$9oGZ1 zgv5=x4vEO2vCczBmW%+2_6t?Qk#Eb@O=*o+g6r3?jE>&wFFAS(2ArGEW^y5>m=h8C z5@iOAUD@Q1z%`VJFDq@r995%YEmtGWjsPNt1AiZ89DmYjHm%I~!?&ePwm!S_1g+1k zHom4)8ZH_QDfV7%*V*Vl{RReK zM$8rqrs-+LV5@~84w_tKUW*PHvR;~Y<{t@kMqa8F1swbOH(CGBNQJ-d8^QmZz50Pa zl!U+apPRe;h5poi443^uU*DJtedk4*AsV01oWCUbgYE0MSc`w?El$$C(9E=6?GG>r zgNT;cx!{+nj!1Qp39J$4v)p#Ld6AxgO2?WcLF)0# z=0|xdd?02S2;Pi<`Yw(8`|h6@P%pz9(qZe#q;DEf3?|k1r&2y? z53hld<)!JoN^J#-oku7E#|h&8%u}$?d4>8#`#ZLiyLgzO^Rg~|X#lkw0B8!6YFbLp zvFbDZb$DQ8>Ly?~2)}4ze`Pww0fgG|h!UtUmfVB$A^jBl(`@`6Q)WM^eUgI)hFYd_ z8;RX4tFB^XIxp9~mvPe;P&D@iA>p6ZLV|f_o5ZXEp7^)||HlSFuup$Nfu5DFY+go1 zWHXsiP!S8)Rm5uQl@=npxoejyZz4zXtfkL0_fzhZma8)dG`?FEBmMjA;<}?7UuAza z4bk|y*v2AF%5P}NPio>eu?ug6f;JteA&^=co!Hb;5)p6>d(dFr6ylrkm4I)j2~Hq2 z-#P=gB3gsmdQx`r$vV<2C!Ej zI(l^Cz@QVE)`^Oxbqx*mM~yymbXD;_jhi|x3L&K@cC2WkC%1U?WcQvunR&W;0^Llk z^Y?W9a0+G5enh-evGiddUR9QvnQ8qfvoBFq_sjH`;L%{e8}sd0Pd@kkGToAJjLF9@ zK7Ne>9j@|D`Zjg3QQFZ<4fwm$z9zm~#y}JqFXM+@5M%2GBgPV&N2v1~PfJt~?#lAZ z&5Hv0+pI7HrKU#4AN6g-eLGumuiEna^Z2)zHu!dkeamm7Wm#55(7^-|0CiEhHM6d~ z2uHMr%|8cW(Na>KtR|v-i3F%auv>%tl4QgP@-Jjl#lgVg>`P16TSvy&+6Z8FwOXvb zYR&H%!S_3bW=p$4^VA@`);ci6U-OorSy2T-;`tjRvJYkYr}u>=8H7eMs?N1|=5_8^ z@w)3qa+cB1a0fHtv%{A)Wa@gxE5&R zI>8j}$+m=rDX!6$*b4g&axm|3&g(X0n)WEDb=;UaquzdC)TJEumBhYQxwS&S{cm^I zxo%n9qs}7L877SC+h1KL<;+u%@%NF54QtAGQR6SX@4qnTjK6JzzU!VhlDbC_iM}5> zRdd5O=gSt$igg`Oc8a zogBM{>Ergd5#RQpg$cy{t4Rp`1N%bOwV;Ra=EmUrs`{5M*jfF{FYVLwoz$P=-?cbW z22}g4YzV$2SS#>=dL#G$s65SKyl;P;RkN~hqlWIC`FG`?`qcTSl1cKOZq_6ct(3LL zQ^W>A?-(169@tMR`78tee6Hk*KX0EoT!0!9EzqgKCsf1;CwoTDh#*iO%jDhq2%}`2 zsH_r*OqCE0u4bjgP%e#vbzOU&jkHk*T z<-|bk&yKecgg%l`KrQsDIl8Jsq#cLKK~w2rrzUI2c>d2&B9R$+`lClP!a^>);w-St zrnc;yA~xltZnCq}ULC!|e@?KqY-_%dT~q(8I`AJA%ikJwdhFVvnH9w^HJn@JeLuYl zu-{~&<|}wFx)J_!Ba^ic*gX-{2mCnf=qDdDjZTkM4$TH9mC@%r-{M}7!K-@MyUoTT zXbb&q{x>oRo6i9*s1nlt_V9Pr`Iby*#vZ?K7r?P|l=w&oH8Y2RA* zRIQ}01#*fi0Iq;VJ=iOtCCI)Ym;wnJX6nf&N>X)0{*rX=* zGlHMmP%Jd(s(*f$mLY5pQ7^rWBZzj#X3}<`aNe3f-#tB>r?!pB|55PbZug?(j`)i+ zgBQ2C7nkS@5S8YS3tn`%7ctjBe(<#2JsnFuG`oB7w3(;PC4V{*95xJ(Wt|dkCv8mQ zuKxS$MEuKL>ds(0te3HAHv&-4T&;z}17$)xM{7bW;8=*YE`U{o7=EEuh{T@8LR-Eh z*|k|y!(2&up}aEo8^e-zk_s`Elow2$I``9`Z=NOBf~0Fusrjsfig9}r#N#SwX}~^g z*8t&MdGSW7qGz&#aSc^PFGeD}#;T&175Rf`L#+z>s_6JiCO>!TLlqwN%IFum6|T9Z zrN{DxUVhUO+qv9tT5@3Xyug&QdIaY}NAGsJQ4__TGoJGxipWM27SJMea^lUmOZ(k+ z;ZO8usH!bGgKLU4=B`48x>vlcry2?N29mfNj00bV8xeSgrkhBFYB^T&x;v9h9UP3LZ zy$k1t`xS}Btlp3D8^uf6O6VjuL2JuMb%a&Hj>Y0UF+miGw&(+N&)7}P{O}&qkax^R ztTD!+U#)7}5c<`MaM9=1bsQ2!{w% zV1sW&0uQm97Vxz{2KW+Yk=c4gmqcCB>aybMG1GHaaQSB6_krdqREDWlv)%k>feb6g_US-?$_0DX?=Y#ot7 z)>R9Tud(9T^z6!oJZ} z%ae!4WUY0|)^O9LZdxrGVW z@>ICAdv)XABC!Q(e#-0<1`Z5e{~!%>0!j@vvOj(h3xIt?kDNTnpH$i1jbSff$HD&5 zR&r*&DI92k_;F1xj8+fPIj=iAdrU~ksMSdm4jddt?E=#4Y4afT*T&@v%W;}JenQ2-ihM%D4 z*kAo`TPuo2F6hxp^mSn)4-mf@kx(j7ko_%ev`$sjC9Mq7;2}5j+#067?$nG+|VPXgRmbq8-HDR zwSpIkjM00>>26)Uj9)&^-hyul-w?3gCAJp~`~~ZJ*@<6GKsr>=T?P&Jg^q#g3!O$Q z4%||GOgF!`Yp^xlKd9e|`tN2+FSSGWz%MPZGFCa7h2`dkgDbpx7M5#lVY%A_t!e%o zb(-9x0ggLw_(DoZ!|3eJW`1EMt~zje1s2=WVi$y{Vr#=lOyN|q)vB2P2dX&9Rnb|& z{@aNZgNwh?c|13M^n9F@LBELK-q~8yzv#TLSY~$K`+@mv%)T-;u-_EO>LF`0>Ju3( zCdt~Br*&*DLpAj(jo@bgh67ZsnUU-*v1-wYbuA_9i!_-KAyaGoDfnj+PFn)nSZlV} z?gmA-*)KtD`q_wc$rjB`=Tx|TZ|hHB{}~a$N9Ec-NQ_Mz=f+ZzJlb1oFi>sk`=xv0 z{6GI@@Pj%cGLO}%Q^2ha!&pjKgKlhc#LJMj`>C6g|w81n|a6jz1fb<7JH;tKH@V!f%pW6^6!V{`}_>Raq?x zt#T{tGguz#ygM&rkf|rgq!CNS&{d8ILaRd(n-(^lWi2cnLkr&6hT<@}WY+nWsvEdq z-U=A$MIC+>$VxhRZ5TT@BW!nuzQDfwW)gqZs772Yz1#59vJj&@ZOY&{r zV*PmnwnZ1W`}Z4zGdrvT9Tln8wt=H_J}6|cLgk;2-b(-LWK3yN@$=?r?z!T5{

zJ2G#Hlt_UyDVJ!q7HzyTY|%C5n&_LZ<@qDd2`~oWd|-4h^XZ!oYc_v=6wp>~BxcH6 zbIC2hLVQ9j=LovQkP;M*Q(x6)`)ig91b&(Rg>!Zvb+{nbzMT#ZY*!LrOek?@?Tl$= zmS31vp5`BgucpI*^jpsk!0NoF-+2=sP{=XzwfhfJ?7!hWf6ZE(TiAbHQ~Si5>e>*m zHF>4SQr08hZB7EO?$wx^e=pLf07rSMw9rkTj@3MGE}3$akac)$Y&Sm$);&;sC)dAc znZpwa64)L;i=x6)q0NO@N2U`X|EMoc!?9QF4D}^Nn;+jGKi$VaGc$g;FU$J;j6N*uf0O@ir}f|Qwe^SQywAV{<5wsQ zF&J@2fsh0HX7~A1HhS2k?F13`oWQzT4P1?^@=eK4alW@QTnt$8$WdpsrlCe}=$gP5 zr+jYW)>$^lu>W&__`g~M?XWvli2tTW7{_=63zoIM$q9!rXC7o(FiY22&c9FnnL33LlfRT5+1GHwpm zeyg;rOobwm;*7QyV9pr5tfOlf>$h3lsr%Kwmo9AV36D;*O1PgbSWdmgluaTZ@Cg3~T02Cxdw+G^Anw3)^j~!aJK58l)l( zQn>R^eS#<*fA~X^zL4`a*`-=QX$*V7CBug~kur8OKj4yx6!b5D1`%GOk38d&r-=r+ zt1)!B5%G&Y`LbKUO_E5DBaxORDw)tVVUYz$8Q@c6$J0aU4efiob5A4l7ZE5#+mZSYY$c!T!E^R=7=Z z_PaJ8Olfn>Op-QT5{bHJsCO3p7r{c8x;5IKqF;L%pI&B6fAnCO{sY_MOg~8+{wJsP zVNspma{7V%dyAd(=4bTUn8@sH%Y5Pd0HA_-#V2g#By78pMT(D+FIan6b6VZ8(ulw0VkpG4EY@xA=~QSd$X|jb z;ckP*C2rJGdx7q$pQ>E`a+Ul6Jb)SZWBSWl6P+>ofi}CE>Z;&ne(|Mr z0e(@Nyr=xKD#HPrF%DzVK7=+iWCi|2QDKV(g$OT6GEcySdqE08I=$8ehuU_c5Fo!g zzequ53SQzrH9xky`SB7+2=bes$Xu6>frw@34g@J-y40^5Nf@DTBN1q zZ=bf&6@*gO)BK_dwiBA+DY;kEg2-=tR~WJlCK-27k~N}Ii#Z|&t|D=QLP4lKAp55; zro(An8CD<7{MecqkCXiXf8bd!E5DJ@Vfmo)oM?&VOjNz3+1ILpg#etT`$cwR>@UCj z0rS%vLJnx42&e44P{BNtJ^uY~gC&39M656^i8Z$WQ6xUNov9RW{NwBPZ(g;{#z@wT zp;VI^pD+LaYqA+x9P|66MG2@OK+B9+|-|ke6Ue>~Fwa$B6+y@PCZ)RVa@<4ne-U)}+&YMNGDR^Q#0uy^;Ar?u``GVm^E?auiY6S8- ztVyCzbd8S@%S3`uZ$31PhZGE05$88=E;(EcHypwUT>cE!l0#@WZYXi?h}|UrZ?t+SkFy8!SQE5u z12fY+I2$9gR|qB1>fsc~O_%3xf$FK=kNdnqX|bD}BQL+Xf$-YWh`rkn(({r5%1Qcqqn{Nwty*)T*<;mRfFii~6?l3Ej9%-SRSSS%I7H$loDV zysT6HWFg)yCD(mRWMz?qYJteXZ5N8oxcOlkpGK6J9E_0W^Y+(1{1$3@S+5VxN#}sP zsZM13H1#C?t$IYeS70PJwM4xZHR{UbYq$HraSh>r3drOy6f1~#otdUWXj?ZfSBIiE zx|x=-bUFPx`?uDwKmRf4*L~tsJ^D4gzkUUkx{iJLkUDmmeTf?6P|zVKV8AW#SF305 zUXa=|J)&o4k!4anYYKYS9Q4fH$76+B^H-~9nd+IBG5hIp_>b}6em>E=2lfX2 zTpEl65e$i+F$z7`%XnfLoj=#r@ZkeN=jZpSVeh^*Fq(_g=8e6||Kh>7(B27!5Jh@f zLk*6(`E@}@>VuBB`yeAOLnIx@_~ZB!UhekKKIWg@q?lv0R88kwHbSlW&3468X4D=> zqtdL!xm6`qy@o(QD=*@I6ZYw44J^rJ;|`Smwhf%Omb?+H`a){1&s9eC33i6cI=$Mi zSB#i7$$)%n_kl1X1(R2@`LvVLo;VK3O6^1%oF)EM@8kBk8AgkyCAo*3Y)!orN2)a) zc&+4gof>FXpHLLgw-@H;+D-hSQWSKPM?)V0xTXcxV7A=jdITK(gF8Q#zgn>Ia8vM* z=*qfEj}6`2gN&3wMRNAnRC*8O*SR;>>GgGrVZ4q2o@?r@wi?wIJ40)z$MPfGh?&=@ zZDyF-)qSn*5j_#R-j!c%*Wct9+4X_^uw5U^FVL0mRH?ozUt^x8o$#X@bb19PR9^P_9j8hN6x;v4CA#W}OzZ^NT}51r!X zT5cLAV*c45ABk~zAfNeh7ex~Jk8?&- zWkVTt7g|G42$jV-hwJG`@)PBZ(&ILFewJ&>AKU=5J~!Sn)t*JQU6J?$>5&kr+$TW< znBR~|fkWx-hxh*akx<+1^aezofbrij6jkqt2#2~kX-oAONxLfKKZ>!a)YKlXfp7UV zJ=D69+bJFV9uR7+1fBdE7;3dl$`lsCX_~Co)yui?c*JP&#>PEj!^&c%gDQ!&ueAJK zU3=>bsKx#+vA_1D@wj+zq8rPi%L#q0jK1hs9jt113f*+gL%O`qT3={0D_)KN0gmji z_;#GWg|w@=R&sT-&>||1F2^0NSO%Tx=%Pud<_RS#t6tUw?bh0Lp~X%pzN}t#@xIBP z2ZJ|izpsSjA>ooKRiJN}f_3x-cf1Z_zz60IVzARJ?XZISTz~VoNv0)f3i8Aip-ZkP z)*_^U|1>{ZLA8+a?RptIkF_{Rw3>%05VlFZYs&L4-&1>B8-ARM2od19G4VIt=pii&`|bRevw@l=7+for4ij@X1y4SXMT}NrPW~{L}~WrOiuD75*D?`BkM~jk^X$Pc<6lJPVA;GYq86*Em>2ee)4XoHV03jXBg>fUCcv zWl62-4YlpdUA&dXAtc`kweG?rQa$c=$}A)R`>*p{_gxdlTKZ|Hb3OT$g*xGaSg{mQ z5BWTnpQ*XG7VnzAoL{;mIy zwKsu}vbz5N6J#_jae|6QF&Z`1;8Ft`Ou*=Xpc4rik+!JR#vQHI027FUI50_N97m(l zic6KY+EQC9T8k)tD~GBeL}*R$Vq z&po%sITso`H~**mX1)0r2Kl}tusNd0Tt9uh#QuR#fnJBWX8-dx&A$JV+!yz9(lE2! zkFUtv|5g5yPDmt?J^!PE-;lp#NB!@T-~Xa<2Ei-U|7F&HMSlM~s{ho0yzx(U^^aEl z!>#^1Lv}j;-+jd{L3aF0RPYk|*N89Hj#5GF9GKQ%D#siq!CVKuJcCzn#YM1Hay_4GA=k2Mnk9b zVJ9u{AG-aSfgft6cWh5ih+ladYem=A!zvg}Rspxij?K9!Xt}qRqOQo9dkD`ma) zzsmN=B)9dud$%6zL;&>B&D-8NG~eBrM;Y#`^Ur2Lf{)+kd=tc}R)2%>AH|Z4-y2E1 z?Cx_4MiI|eF9jE;uGUI`-5ppA8gTgk@^0Z@TMMc1>`cCi5?(4+vz_Dsp8_1BNf zRFFwo#gw}ziS-9$G(BF|)`v+$9*{tjx`0iC>2G6$%)qS5nE|$bXT2V;8(}RRDgraG zrOVoHMIIeu!=qBx47mO^N04;kcNSH*jfO?p+X6{8^NR_M#@wD@D%AS|?fVq>(T9^j z2%2wI*^!7v5(RsV*gu2hCiA6JUPt0_lRvuaLA2R9X}jP6Sa_%U{nvZt>BsMnF%Ag7 z1_$(hPWpWX_c#RlJ^a&+P)U~mb%KSR#j4rox!_Y-D>h`?4bw4~ zv+Y3JKAd%7VOV_fES(2ssd#Ql=V7#MGY7HDo>Uv;L*_In=i4;DJ5z7dn2!kylxbHq z7`rtKX0#QQVlpqy;8ZQUm0t#@$JB(^^MMVP-yI>&MyDc2(q&DYq40jc`IWBD2Pk5F zHd>YJ$p8IEIfeW0_9SUX z_w>}|eJuX9zV@Zq;4!ck(ZBy{c|#4b$rXCn;%Q#InEV~%q*L@%@x&md^CkrT=v1ta z%g>{u65h*4aS2Di9Vr6IH$VUFojLioL7+fdc=qXzPU@&}3AmKMtjIo}@Q*j*rBgY@ zM+_hDUH=&T1qcw$p#xU56?pr;0wt!4$1Wt4MEgsJn53H^3Fwpnn93#1VH@NLJHf`u zVjNUXNzC=nJo@njFlm8}U~a{H>v^s}B6dCa9bV+lYRzGvfuD)G@As8-ImAvw{QghK z+@DGj`@IWz>^!iBI`6*x&2W=j$|mBy^Rt{;6mEOS+Vkr$bkjP(OBFFmkz$Qa=3cNieRYf--eJF8Tu5Lv z<%mnYLoh+`4aPLWzXm^@EjyA;vQV9U`c;6M#Abjf$!Ze;rmYf3afazj z-IxGu5#zQ7Fmv9wUk}_xc&Zzj3O&lVQONW`f>5P5ey+nsrHQAR^d&*sBpLz-Y6nDs z5;ex@>=2SkX@>hp4|7h@(8yF_W>@C|Z3&G`+9j~;1>%M4U*XDR>+LBoYR^=^%&z7o z?TB$-EWYqh*E58~=RI54u2P5T{+UA+AtI-1tnXrmRFEO4PPXn+e_X+kTx4gHE}qpn zqmd(1C*g?ye9|vE_HWq(AMqX}Y-y-{s^y54r(9N;`3|otcS%0lvOll7=tHkc;@4hQ z5bMpkx0Ys$4keY`IZEJA2a#_QaJ3!czO}EvhQp&#I4pvwwq@u}ftBhoCP>Ad6d7Bi z@FO7WU94TI1R?cipD!M1R5VEH`*Pd14c+G+y}^M;?<^j52)&pk+jGBn$6;SXSRI{9 zw&!`b@^OE~|Ni~W*Wg3<`QOG151SOl$7KAD9N1ul=I(D6;W-)T$KyO%Ao@ByRXx7Y z;*ZLW5WO#McGMLy>gq`+vQgD?e6jq8EEZlfXPdvvs0|h4Yf?hWKfkp{%hi&%HU_;M zMd{R}5*NQa>#O^JR$0+f$`OyVKyD+y#{PuVNBpwc+shJmrFoHeiB@_ zV_?C-BZMcXd{@qvyPdJ+8k(pdo0zVXs{AnIBR~+*ew-pdqG-U?icd&fCljOp6Pmd0 za9%IzLyQ(P67IErqeV5X7yh3J` zEua+OzUCfxO}m)iYd+b)eyN@zjI2mtXrx1LG;oLD@m9^f3v|1;;R0ODXZ|v9G1s4n zi@E30P43!2zoWhKJKD{4RIuZYemR4VPT5gMSE{4;=La2aI)RSvd{RrU(BJqDR(|*j z0)38qw9GyFVgrv_c=R%00-RVMB#>ZK(KeL^R@;`S$5YmC!vY zNVF73OxTe6T*= z*grS-&H*a1>ZB&7UXbGcQ@mAVg<5Rk1r9u&pYw`Am{vU&t-8wrQZFBc+yB7}nmxo? zFW!p}^AAkVZ-0raER`E>|D!6Ts}C;o8@O99Q$+|;6p=+A*Xw{6V5{N_q8n>{c&f1{ zpXG4O!9!~`{$bbH&1@62yp}*l(pT^~ko@i*~5k9N-g7Ei9VOO5x3vagW@ zcFN3-({#3RUPnCW)(^SVX`6wSNHpN1-dn^+1L31z@lAYG=J@EOIX)km**3{Yi;6z` zwCoXIte^?5!dw~G7Zw0cfW#NOo%(iNFA`sDo5k*8(fDFrFN(P*LWnQ64dsqluf*c< z*3kEKRFXHuX*(R$6AjwIR&H#FY$L3HB91d8BT(RR*Y%rJlv}j2mv6CkaP+4dGo$RB zN>H|ai!YXyMc}}%R6bo+0Z%~)?|yon?P+#+Uw-13boN+*U6{BsZbPN~vjeRBpZ)UQ zvqACBJ?Ua)+~x-<#5#r*csI=ysj+HG-K;~E$&%E~np?7wixtbxrX>r*WWl1d2%KIM zeN4|bxSTbh111z^C#}+^N)!Zb#xBc*~-yLV2A&9M&rwH zWWH~&hnbVb&oAIh5I%6r{-u~hX1-G8qznh zTd9|MilHU!FgrT=I2-;x8vZSdv%`OHKY#e-hdbwM!{?oUH^^^@Z03APs`&Xe?ZRdJ zd)36J{uBHql&9PKU|%%PbAjf`pT7c@{Q1*HF#k_9|Eg5~1$<%tC=iYbAiGVRlz7A2 zMHvnTEx3?)sRgJ{xv~BM;qIE8CoH=`tc;7UG44eeh3<_v%^jXoj^=denIQ&~U0#rc z0RL=#JI>eQ&U=i-wMFjM@n zOv};VIc<5fyo&K1ej72FPfs^f>+acpOy*vn(}FwJR+%aGemYpAbpkixY@6V+^SR~0y zI=4L^vNSh;C*P!jnPY?Rb}~Pb4~)`}1dIby{U72>2hiZGBLnotDiMkel_MkPGM>Uw zPK89hEyDzjvhjOMd-$=`NEy?A=Ma0TYKYX^Z#%!cCUXdtd-6k-+o&v6K{u3jX?HXh4!`zwXKAaA{^|IY{(1HP z#t+pWxzqZr^HartKFMsXMf#xh&s(=Y(Ax)3)vOhQv^J6}jl-cJJV=_v5*;Ly9jP40&Nx z>zOb;&zdPyGrGIYM@+hGNg11jgs>q`T?5&D!t*V?K!8D87t^PA1XjGf{cVrPe#XA# z>)nhV3vSjIcP@RuwWXS6|98If?H^J#hufV?(KTh6p1g}#vUH#GtS`(_GlI&M|5N2Q z21Qq@e}dW{P0W=pikVW9!b#{F!#@0SJLt{&;wOg=@xtv!wCVnj|97No#Yhl{dNiBb z6B4X~e`H#4V1XDpb!PrNjz=9kXF^5woQ8@auwe~cczp6hEnPQJ#^p=OCm^ zWda(J{u)N-oxiY(;$xK0_?-a-hYg+QPW6yhMsf1;AQ2>={iZgWMc`aFFNL4k1r`$x z$JGnP>Ba30#p@b2i=Yn*W{;3AoK48u>6FZZ=l1{WQp9AyT-^X;{@0qLO%zXBgDBqo zU?7T3@rc=w!~S7Y|6ph39{I{h!XI(0BFN-Qv%x#tgC)7vzn+u79-QOL-+(LUYeoUU z;Z`G!K+ay7(cDhNG~bO`$}~U5)=1uh8BWqRiGC$)uNF^&FKZ5pbj>(C#uv*tC?GE_ z`7?IsQhKuI^gom@f&9ezxd-)E##OE`ux>8(t((|xhV0BaEI0wg>aO*$M-=v`hdoXO zFb%K=qRsqo4He_~H9^ec22(pnOcK6j8GSxXh8D?u5tjlv-7s<6f2MHF_IKfNTiwbz zYCimBUh(k6CN7_-p0;3A!HBMkm9+AXTB&8sy0V$mPHufWYlR>x^Q!-ppn%gYYrQY_ zrC?rx{g}J8U<+DWcudgC7Es$y(->`={vIG#efDj-e=2ByzANMnMXlx+I5q6IZ%4Rk z|Mtr61tz%`TF!@B5Bd=i_naz%sq6ZEj-X0c-!fPB&+P7Xo+hD+c23A_x7Lg5{9WFV zn*9d*>7`O7?Rbz@2hvUeX%WygQb;>q1a3%!GiShA>Ck1*IJ0M*$p>%xF(#bG z=_zH6!wENe(GzhV8X%gf3_T4gQEpSAp+H1<10EOmkys{gz+3v*Y+}xF9&T@^R_ctN zsfEH~?aPz*8u)V3zNhMYayVcy?3}rf98^Tzivy|{M-Bg4$!k9Y~NDHM?cNG`+vW^1o1vC-cDq6zKQ1Y*XQCAe|>@lgkF!hTzq8c|1Gjmng^rAkh>VSBc+r_XK3iTGs|&&u4`)eWfp@i|`?i$1pgqdZ ziHm4b^IVwWYVVTi?>L;9v6`69S?TWp$w93-Xk5qC*)ZBUYt-!xAgYo*4r2Yo7c73;sR4Rgf1ktUJmLfgzx@pmro(7}i|Sb34oQvfo9Y1L1?gjZ z*M1njYni2Zt$C)UD7jFNGe3X?jxm6g-SF;pf(5C?0{Nli_cD@hqofHq88+&%DRoBQ z)RbuY_`Pet2;a55{WG%1u8h>Y+_GPCdQ>17FZ>Q;ec{88M&SSmzY4-X)+c;z%BDl# zt8r9c<&8etsD4T%xGGXl>ADRc`&3VpULR~oH^5x0))@#MH-<`tU#e0SZ?q!nrdHgesX1tvb{| zSg?#2(|_9?ertPmhu^oN{}UjF9ne3L9z#k(JCG>@-WDW>rm7#|i};iE+mVu~tbb$q zfZTv}@5lm5rM|I~n#1oLO+3>xYo8~+V1M*Xm0opH6N^4-o!P9Dz=w6juP$QEQlWRO zk@ol(3lmYbXuo@lt@-8MwI%Dkx5y;3qw=XUi^7k;RWP}z%TmE*cI~pna7@vb-=m8F z@IMbB_{Qx&ExFt+1nKr+TM>}{I226{$%F=d27a~Yf2k#{PEFMb=FfD3`2@_)622wRs6X&Di9jIjphux3;K2t1N?aF5BE1Xn*0_;!s)V4 zI1$0U=q>$J7c5OFVzpFqaYu$gS|0ob#1uTKKP~+=WrklpsJ4xs>IUC`8=t@9*UU75r!g_{J<$WiT%RAOx%pUo;iJ|mC^~_uIWp8zBvniS#z zKrSA4h1`VNhjA5!AESe`R-;!P;Uus&2y7Tk&pFr&FXnvhds+Ram+8>`2N_+wy~OF4 zbAHtgJKpbm=HsKIbNaW@FN`mckK=`(i5G*PW=0&#>X^begd?)a+`$)g4B2Fu5c^M8 zI{Z}GN~@nQ7AJ-uWycAYj$KTE$h716+oPp4@l2t%PPbk(jP3({lDK z)`VTxP94kJL*3i!fMn)m-iBHZNMB!o!)4ait|z++rhb<)JzSZDS~!?8McMXCc>7Mq z+P_F|NinV1Co-5_3?0Vnj(c5GX)^AK0@0ek9?w{qu=mHq%$Pq+515|WN{#WlU9AGf zp_3(7UW6roh~a!jMKo*4pYcZ^kuHA!St_fffq;SSGOeD!g|YAQw@1sKB>jmMgnwq2 z6yV=qLpv(eaxt_KOV085-T8)OJ7$;my=~K;7L*Jhw-|a*ED^1HI{6nS`FBy|KOoE{YpJx`c8<% z>vppWcn{t5-}o)lcOnJjDm(qL4`d0I?xWhmc@c`%_jKsf1B__D`xvb8yL$qP6_uGg z*ZZ{4r`qtNJYv*)b)Ij5S@I8Ta{hr+n1$~jm?!w)@mRno?tyM@f$@mvjNYGB{^D4kIC4Q z-GDc~ObdQ6x@lzw{e_QG@QAwu=nMGVPgmeW9{MTiOm8bK^87RBv5@!SuXU*4Ki@tB zhnT;C@b_070{S<1BT=pFI3?r!4i=;InH5$zE{ zQ*?#fbQlf;gOrWnyrFQVq65-b+d~(Bo|=rS)&VcISRL1H3C}L1z`!j@`<*&f%lbD@ zw3WNO4iHTfrc=Z_>Kdu}{uc|O0A-?tHR3dM!zskvj1V@U)`@|dmwi5}oYThXlY4S^!%qhqG8_g*rsfC*9m8usoE)m1GJeX~oeiR2b`ZO{ zL0tL=2C=6b#N2ng&CFZDUT}6=!v}siGHKlmoHAZ%_(nApo+P`i#LSom*|sdLyqm6p zMM&a)zEHsG3i>qv{vCPawF^l7*^KQua^P|@5s3*JJ0O`q)=?uMd>9&{;f;5jJ$9AM z(#)XC{5DSQ868OX4j44?W6GLM6ySu2$R3|9D~v%Q8@#`w-}B$%9}XJYmZ+WoRHU5* zMBPbyR~ryS&5B}uY|r@BT*e*5lnWay^Zh=apK=WtkCob2kM4DkUU!f7)}xzw#DXS>WA@(sf`*VGtW+eLCkHO`9qey^ z#bo^Tt+U@Sh*$G0UU%x>B#eh}_~0$R=};yKZM6cDgf;kGl&=bkR9&Mk%YKnx zD`!E4gIc2H^Z(%nHgV;wb+jM&5}ZA8-`)nwHx>f7vu^7Sx8H5;2DewYRcSkb-)0!h zho6bmRy(YebRgW#CVN<_|9rk+`4Rx6{qPYNy74*3*w2kcb<8mpMGtI64`?To{4UX& zaNAP8N-{^Yb_5H;h^?Q_nI>{6o-0D2T|i{38%1fQhSy+UyZ15wy`i@Wk~@Ad5+4oW z+IU>6pmv`|Y{c)*7DpD3IM?_UE1Hy-Nz3gGSdiX1^zRSx>=KHlifh$js&1%0RLRP*@E>F)g@RQP zW%kelZ=zYB)AllIS@=h&<%pjJ)Z+C2^esNMbbe?CXE*8y{HK4SHJ?6eqKQ`N{5uTb z?Dc?B(s+`}`sVxFad)iOMyBrm3?=m&rg6JsK&MA%q+p353R0*Hl(ctMQ69<~js|6y zoaIpF$`(K4MRF+1unQ-6M0bWVZ{XEHEU}_S<_yxqyZy6ZhDUE7OCMSS}9 zophz_yT$fNwjX^4B4x|-V*X=Ut>3iHt=20w&4^cZp5us!S$LQFQIpn2DrjR*G88Dg zemLq>SbE~Fia0;LGxs$;vHISe&ffHTR;p`|UdcqN&03+!13Q1n-m67< zPkr6ziXb8xy@OKiJh>*qc>9=@eFt970k%GNpzrECi4kH(d566sjJS$wB-QZ&mAjVL zc5Jprmhv~6SiFIcf|hew;KcdjPZBxf^wu1{Fv;l$J@RU5he% zSTE(bjd+cyl0@C5s@TH0OxnZ$S!!Q!{>tw1{>AP@_Trt{dL%90BnxCBYnliU8~Py- ztNkk6{v#XJXarGxd7^F)HEY-Rlz6|jR=7V7FKbfQq>M&NpBfQd1tmKI1R5JH`)gG; zwmlts?sD|Ur8=>U{y59@hwn0ra*X6b#Em6Mb;o)$d)oTO_EX#wr%~w7kzV}ja@*Gr zg`4pL#U#)S7+{IX49CEZus?X7z_V1xmE7yhXhE)3FpPGWTs2gBo$||>X?{3P?hN3BR5TK|&(aP0jH~v--pz-Fs`yV6O`yYvaypsMdvi|!2 z#bChcphqNgr9)ZmqC*e0ZulO=7iJ+_&*16-sT?pizb}8Jh{IS=AEakEh0g~=YQC8G zAof$hIG31$s}T&!M&^jy2{?1fYZWS;yw1D-V8)-L+SR%VA^S63mYJH9JwM{;1{*w^ zV(8sJou6MVUG}3BDd#WBk8|Y~t6ZvEInn^6%StcP6-CAU?yo8E8ukz(LihDGjehQ( zvj5VuphCB}M{9q>qmy~mAs{m+Y-jK1|M69zGo=;(Bncb$g{sM^vw7n@l>k z2L4NjZ{+coa!!5?IJZ!SMy0Q9tv{JbrQWQ6=XWa9m1a7&F)#f6?P6HTA48+M_n9}) zxb3UOTSum<4_Jc*8eHAr`d@OEQ@Z7*bmcKLj$IX(KH`_VrI(Yu61?6~h`lyS7zf0=B0Kq=9{v_a-ns?~|jsbuoD?r;@O3bV(m`T){GDX;hs6In*zJwE@lQ(B>Za@}AK08y8mL*;-^q|xtGI9+`>N<;GThq=<+ z?Xt2m+O;fNyY-qMH>91uASJ{Q(ljV{<5Z<=wcL$UOZAOp4(x)ETd|5?gZOM#fl2%+ zX;y(rrSb%~7R361w{Qn7# zzFBZ|#5$NMrz}1UU$-wpQX#GlDel`&_f6I(pJ^DVYY=ydF57xy{XuIQ2EN=-_KkIuKbnW`ov%L7jaST5L)s>hB5~{c(OjOx8pg@5xjqlvAv6ZAGlgr4 zwe)+TwWPT0bZFBdC-TfhHA`aep>wq|LRiTZ?LwI9`~&waPB~MS%~Gql&aEob)omfA z$i=?-QYmc$TO4C7Q8#gw_?IjogJnN`$<9mG;_G3~-gVI=E=4*?PwCP{m0FQE6684; ziFkx6x9qONeHwB{=g)AjL{rBP_8z98;4yb}%MPV|%iJKtPduyWoUi5MKkk)BsK4xE zgxWb4LiJ7Pj_K%MZ#RVZtU}Ub8A0~XEHio&9lGR+hEDC8n1}2I2Z{r z1Cq{F(QdgEAR3;yb;z+=hg91-1UhCNa$MJXf79FYE95}a%*7Py&et@B@)o%HD*)D? zKl%~}6`&lC_MM>6-zNHYn&I^)MOnwDs;4eBI|WyxF5)Xa!|4Ne5#Phc#M;jjuwKK=TMkhi^$>dxi4D@2xNA2*`p zckR+laDAJSFOs=yo~D>At7Znw;Sg!zMBO=7kyCRqK@1mWW^d2?O0{{Q`+W5*SW{JI zkIgfL^Y^t&mxj$3S1KMLeRCX4a{se62@qq@N9G{=jHYIi<>%y5?^)XR&20>Y5?aO_ zIGKOnZ%o~+UB}eS=*V=>eMZ(USIk?NZcLBV{Jo{;$RtOs+(iiA2V`e(i~QA*f{vNo zMHRa30t}$Rr--DA`;773ZnK^OBpnVWI+OI#{~S!RXOe8tup|oxz^w&?_uQFUES#d6 zsyMEqGQ+LKd|;Zjdh2K*D=J2`x>>tZJq+TOt{Sa>$9ro=zCt5C)X2s3-;lbHX7)l{ zc{kC3{T!1#L}pS$vRthLnLAAGxkYq+>deaF5JnNLO^__-1oo)pvQf$9&KRs5nL4{@ zc=++R3np`6287fV{{+A*i@g2#fFItyH*{J4FShSmz9SSgf&!-MU&Da(<5a`RCEc!J z(77-dg2DON0uv!eX@T*19LS|ZgWRLb?%>h8JaSS+LIv`4Cz8CQ-WHHyA=zq-pJ{U# zsdJHk+B7RxvR`yR%VI>RGr^8T&iN+TQfNVPeVu*YRk6W7IZdI@fZ;BG0wBjCsp`=G z8N&?;BLBU6$B5_rOhAf(|3CRzklNNBFI+o*yCNr2hLA!gu^a>EIn#=N1&-156Q)^E zd&&=uGIWWur436aOA$^(7q?YJ85K{C!>ExVG);Dn8A8*XA*Ayajg%>f#iWx}JbvQP zmP_=*R9~X2Fg$xNjWN-+TezKAJ5wf0HHNO|qg(zFUDkDC;=RIAslGMC!;j9W=^0)2 zUU_}5tA0}0fx?87;WN?s0nCU&}GsH8=l?ek$U4;QL+@`v! zvc79I+i~F=Rm#%n^XX56eB5ptlbp^sb4|&&GE%%wvT{*3vU=sTlu)G|?hHY6|9y`z^h+p83R zxmSJSY3BQU03hjyiDTNk!Z-et*+$bh1ha0@icgEE78uekqFN+?CS{2bjulrPTfrBj zRESVtwMOBy-Yl_y_~JCBHpK6SV8Hs`U7A+n3wl; zvsd``tkXH(!>4J~7E9ueyDX)m_F1yfM-V=ty1pQsHT0y@PdhE#zJO;J&$_zjsFT9& zckw-b^{(T>?YHm^`N^=u?GN)EMrqj{Vcyb9SB|vb!=wL~*&JJxH=D!UY^ImxX7k8X z-DmU8m>tgs8~rqf605IggR5otStm}6#hP1ojbGbyN(|N}gWJ*mv%{SIy5vV#3?Q#W zQ1xlW%)8WCC4)Ze$jr<={AQe7v0L6O&Ql)qblKr!nT5a5|M&84v(Wl)z)mJ&hQLbp zuipr#1#4LXVi_3fYb}9tSLSOiflA5{@F8id;#dN)o0v1p{FlSmebQ5aFf9#d_gz$< z{HS5zO1I4a>cobFo@*GmK3e#dug-zoLYl}N;gjp)4e&;WQU9 zlO(&CNs>P5t9RzeQmG&F#HGU*-3?MQRl)}K?&~f!)@Y6T^gY=Ug3PUG@*9q;VFoeY z|GkjkUhxtC1KVN(IHaD1Bj+nH}1XG z_j4YVQ5dZ62XM=H)@a|^`u>Ru8?9U7M^(S2ScZhg-1)0ug}?4YneXnYzrye6Y|~rR zyM#@F&Ni3*bA6=XF_7r%-+eXXHWNy66RO;H2x0t1nxB#ZX$v%q7=T=06UWEGXGaHM zdxub;C0YHxWT0z*o)zPAB~?#{D!%XgKL!kCSwu4q&vFP)T%`H2-@~R6mADk`?;kiA z>Zk1?k?Y5rE1{*UZ_HuI8qymmR~=p40snwEqUm_b5syfTJ`;64bA6~KZMhVA9ey`@ zVjlLb&S$>q@9B>t34uF^ODluVB38-GeBEB;_oG-us7 zGsM%W64^f%_G}WH>29K9e?KygKK!z@bSDX z$XKpB>nb^Xe1__|_h?f@SLn%=_~g&7aR_vSI%7Ou^eTi!gp(#X|EqsbdLYZcG@mv# zcp*`fnWN8iXyd9A3cS75M!NV13JOm~BZ;~TAIZ{y%0UA!+HMW!ruk_!&N7kL| zTX2kM<$v^vvV!<#UjJiEkozqF8*2ecq3l|rmIH4M|0HMn^O?^1isX0#Wy^B z3o0_ltrnHfV-xQK3o4q{(upw$$KN!DO7({q!7U?@58?J-3vlVsnKwa)H&)A8_1;4w zK4S=jE@URyWcK&2u)Q8+9Y1Y9$-S{HCEGwM2`_Sq1|xImCe7`M4C+Y-m;O%aRbqnPNZAB^Gx%E`i6)jtx}Ix!4#Jb!wZj_n zp*2O5HyaiqriC`$n>AJqz|olFKhLzQn2|ERpc1D$J6u%g?EZ4TfiGzhS`l$^XCOZy zcM@~{Z*-CK>avBG z4n=N-3GL3lt)4!Q^CP11eSV_{nb$fL)J5fRN5IrrJ1gC`xnPBT_68Z zRUc37CSSkIkhC+o6^oC%S>L}+?eb>^4)Er62hT7#*F5+@A zj#`icFWAld`5_oWgKl;B#sa!tl@fJ#|6U^{a^rec^{Uvv$zpo89tjvmOh{#hRiE5Y zFCJW{(KaM)H1+95Hu>HP4NvahFHzTEEq-@QYGl8nF{yF=O2(un^eb&3^8ZY0ypQ69 zz<$XX2ot1(sFOf`Lq8tQ=*MeG)GY!o%5t6yn^t?xa7(Iu1z zV0b!On4Dv>D;@gRR3}W77#o$A~@Zk-I1yEu6kE+;hi6W zG11heiUbiDtvigs_~k>d=VcCnE*m|QM9JBVuji$Kd6gwJ?RAxlR4Tob*ZL$!FOK2_ zU)X_{oyq(Njc<(47_f^0Lh%`m&ukx`;pq1lIr?oB{X%L!v0iqsNZ_zk^)C0>4uGGX z^1fc5W%K^1@&i%C4-JlLq^IV?`#qZI9?8>_W1D}f~-LoxkM1`1TU!52|=)-8? zD~Y%r)M)z0XD4TXI9-O9*k zR7~VTC4wJP)tjfb;~EcD!$sQTfIr#A<3U@GYI}g_mMTr#hA-Bn>J{?mfI=kElj@uI z5or??gYDwRDmdD#P!Z!ZD)JVKSQU4PrjBFw5sMrDqU&X~qua3#Bz%cf@`|QiV5yr8>Ye*5Pg@*3I(_7|V6ho>hvg5#nQ(#zNj_7vW^_ohWe< zH@3+-3funs#uu0utpjM=%g^>h+7S5{&(ZBg5I4QExT|IP`hq!zmvN$yjw0S2cSuyJ z0lFH_Ig0wvIoJ`Lqu~5oY&VyX@G!2Ysn$CpwrFs?>;KCbyUiaIqSn-g){Sl4f$+K} z!~G*~$zH;QmA%w21&FcfJ9rm79Mt7K-pmB*R49Dia#dq8HR>Q@F3Idw=Fv1_1>(!| z%`-m@ngAJ>BBe<%m?-1}4I>Bw5A+T7>-rUTYq$=fu)v!=QmoYf&T+63e#p3WjoU(> z0t}Ek=HDpK1N0z0qoV0A(0GAvM)h>$K6}dwWuxAoNqm=kv}&16$MCZRe(vx-eQHxz z=emF?^Sl7Yp9lK9Rho+*Buz(Q2i>^Lv5Tml`CDGK>{q9sL_2;PJ4b zAr_I9f>Q90vnPHQZ6y@y39%3R8*kI}X@_!@p{72Id;QlX*UmTNMR)5e3 z^~*N(#4;%jv!``W~ zoAi+*@E}X436a2)YqnsJ$`8pB+%mP+0v}8YNgm}|37zK}KR>^5-#a&-K_i&6g^B-o z!!+DAtw8Vda{~>RliJ=%%eE(@=eK7t#~+GW_4%VYYq~vnhv=h`INDS0baAv~ylJb5 zQ&#fW1OdBv5?5wWdFzxY1iG=SGN%gNRu+6&83@Mew6B?YCKp0AYp_kW$O*1~ih#b{ zeVIrY^BZuMOb8=@$)pYeR@>eCG<7idJ|(y>Q@I=lzHXp7f11U|Zv5f)z{y$4_{W!S z2dA8^O#X{+mA^^bemjsaj5?A9XVdKhXJx8-D_;nbM~f@??9Rg-&=h>uLTM=)@!p_~ zVUv&31zt&I*7;4kCm`0Jzogg574?3gGA4tV{^76L^e>p|@~>>1u>JhKL!aDk(w&2M zC}SLb{3;MFiOn^VS5e`vF*~*Pd79b~;{V;$$VesfXMR=Q5^~Zw(JHUSDC2LVeq#`| zg7f_p#VfKcdcz)if5DUq(ZUb;7#}TsE~*OvyRHr2^fr@Bj-D`Ut6T`z^r{^_ekO@i zG8Yz(9>40O3A`-Ga1x3(ek*8P&@opZg)i{UsITyus7v5-?X=_^y>sWk{pR}C+VOX5 zv82$xuZpXb{u{KO*k)zF;m9I$s$_CU0_gMRxV$8l-ac<3)YE0rC*(~)(a)%8bk;)@ z|I@9^->OpO##aqDx9K3sh;zUJ=i}U?m>wPN9!+$QCh-XRbkD}QXJb^X$UPeF9$l?R zpPs!vmL2^J`@ii`eOTaqaOX#-4hv`(g_ka_XUalgi7;JCKrgf39X}tNO(-PqnTvFR zJsGb=aEebyRe3Kx;rEjHV>k6={;h2Ll{$H9h8;LRkfXAv{af<1?sR>m&zy)dCU}&i zvb#nMXqB|@y}AV5zPNj&#b&z}FN$~DkJ+zUs?22wyp<#N$6Qw>I*Y2a zDkTBy_P`42%vOi8H5|#FndwtjT`xj_4aucm1!2Q}B@M!wvUL(@vvhZ5w>&P`7vIVU z*>&Ah;Zmap^?0eA<^RRw+Yyin$WAe)!|ydd{X|q3zDI_67hvt1{ZN+N%%sQZX}R7T zFpy^bui|+Q2De^jFer1@DHBTF5f>~|*9R77xdTJFKw`kDVbqbGtXD?vY}BK>i#bO> zsT}<@=X9IXUmb3Y-ba13k*lQ#lZbeS?EjVQ1JH(H;LKwXQq_<;mBcD|<1#Nmt#^7(8SH8W?W`c|4fJZO~KW}h=kw~ zL^5+!J#<`O`%Ftl`Vl3Gv#(wYD5R?Q>mj;emhpw#O(15+NFiM@617owWFEu`8-XWl zEM%YSfC$(>G4SiX@lrMC*RB--1S^13BZ<0|w@KcY=!}zh&iXv3p61Wo&7GPajoZB+d4;Y(D=8;1{27K_yYB`P5kcb$E@ z7UHdANu=rxq@Qmpieyj#bWu+vXKIgGL!+aHj||VXixuOoXCNo8VzD%5Tt)TD$Qf{Z zguSw|h5?}7?O$*GFSv`-HTEZg=Q>|5s)O``BclG^V5%N=asgkTg4vjsx=+xxadwA^Bxf zXET}5iVqd(Q{1{=uqXfGK--f?#yye+@;uE8f@$nr5PXw3ZNJ`rxpMKD0DUsC>CrLi z=v{=PUN8;+zZ*s-)=@v}^Jgg?>&2HUxW!%Tr-sSu$}A0!xXAn40fXvM@GI^?zj}4Y z5(NWz`^?(_Nc?dLXs_zZX1@?*zRidMxQ!fJ0M0&F(|zd!o9^=eMGBtmt0v#6e5Gs7 zgo+_q5T-^5$7R*v82g3&g)PFd@EhaQ_FRLBpx!x)x8X(ODu!@h6vUHzlesMTMYMag zA${^))UQu`e!(<{uF;rE4ijf`HnzA&iien7Pz@_C7Lcnp}fkk)`AbAt)yN_@)!592!k7 z{|?gk#AxAq@)jOgzc_yFLw_%(rG`ST)R8~JDsn8Pm4^(+#3RkH*PgEX{Dt8Ke<|a+ zxB78ix$V0mB#g5IcLR;Ofj+y6f$pXXw^fMbL1c4L=Mm^7t_S@NreaHfadb;qL#K<} zC3lTg9V|&|GOTx2Z}ZCEy-X}Gkq{k^B>pB*AlXb(r8P67T8=KXi9v$8!jXFp)1f>5 z&BptmaY46jjNS8%jj2M7hNJ6OHlsB?6TxQNXW?}Gl?Hw?s3KMXrU zg;HmfbMN`h(hkV?XQdgGLq#vp_>(}?RaN{h*Ey9$-L-zf&)KaYJ1O@)madFcAr6VO zOL51Ic7nVC|B)f3acR&-##uydiyh|{4S;+$5bl8oYb%aNfquS$-tm)uo6JeO!*SlY zauHk(yK=?bX}tE&uKn#c^yO_fMwqt=`ZD>k1^NPe*W}6>vrnUd30LpuAODw0Xb}g6 zH|2_%sJz`ZSD$UJ=qQmZTNIKHi7!Ge6|&!&X4PJB`IS>z_8}1EBISt0;ur1-mvMVwKIJ&pGUAmfk0pvVB;#VN|r+e-Yxlk}_ zjSEr}bx++SeQwgc!{GXa$wYV+F++LQ zW~WqrayBu*K4^E}Ex)$O;W+7iF!L;FPOyX1h(;%W2Pkh0keO%;5gfOW@nps{qoTPD zb8C-i;;W(=d)6-=H~G9vFTZH=(1zL`!^3lzWr}l;6yeXkI`^}YPucw_L6YIb%FpYQ zALdSa6g9AdhQZ)nIb>3&a5_p`8L3l{H0HE8QR{`qESG92@*(%P`uC%OOSaXxe@~wJ z;B3NJTJvp`TRUMYWYmvMRv}UgAMxsW?rhNkvrK{6gMc$ii#~6X+Vih~z#wrwN zn4EwG3d1+PBJxa!Zat~3z&q_M3!>O(5mjfbtqa1TAv@IukGbzF|6Coyne5w%k8Jn&QZZ6jkL@Nu&v06y|dP_A;n+n-5 zEt~n(mcFEBB-03Q%o3mg?TaH*Jy=z;=$QYqq6Tq>^3EI36tHH>}jf=7%KehF=fJ zIyiAlH{PFDi1c=et{UD9NDDgU&_x9_6DQ);-n9*K7>tjcM)>n6r9QXe);IgdEDziF zovzN?Y2sr1S9k8bw&?2|)i(h^{O3T)9H~uNSF3UfyUJJV= zj(=?F5%3SGFOK)N&f5n0-T3F6!+GoT59FkEvG-p89RDo&n%d%@0jlrw&y|P5KfUef zeev62pMTE!X*d2^Yx@>;2iLw2EM)7ui_!%aTYn{=_xAiZn!UE{_zj5ycb9Bc<}?u>!qn7i|HFBcb0?1c z{wpl6Bl6FcIyOoTj;8L8Yy7Dj%|u0Ki@ju)2!S^#A7rvWzt#Sd?j-ebz<_P5 zr0o!sEx74%{G5SQV>4;cQpfdD`}s*xrpQjwtJq8wZJq@r~r~l&A$HT z?yd&}m2~I>MI+E^fwyauj>!Kbk)^y6`RuGRvUuWO@@UDt+fsDwan>WK6eg4og?=du zYa~q#+s!25BkDqu@Oo?1B02#(b{?939~xBi<)UdlbM8Qwk;uFK`q#USJVx4rCHN7# zJ_s*6Yhu@0j&2|!DmBU7qnf1s_y8^oLJb{Oy2WvwiVcccGW} zOY(2(#9aHrEjNoKt|~9kb#Zj%)mAE})!5lPLPoi_k)4+uV*}FR<*s)oe&AA@c%~ZR;*|`^vFt48zdzdVpJ|CVV|~0)LRVr%iIMS!C#{(e&!(9hvdx&}hyS_X!5R}6 zlw=;vo14Ds{Dw~Fx+TydyJnX_ir$h7mczRu2q^}1FU9}imN z9dQ`rrEN0-(r)$tO)IZ0uTeYYLXf;uN&C`SY<=D3pDMtQ!-jZV{gNL~h110|LxJb> zmA%Xr$ej?OKl%;1qQ&nGp^PpY^8QR2Em6PA+O;RHgfZ&QO5qb6Nmk z5M5X@(gA7CBk;gm(MvNn%_4t9x@T`G>1g)kOv?(>^{>$LV^6S2GL9%i!Bm<>>)W_} z?#JuLUp;}74BnqA{@>~DTB-(w;H@vxh-~ZJrOhC93qy)%+!M3o?rY=LV+KD_Bbl#} zXp_>i%4ciH|Dvhar&!g3H#TND)ZVs4rO_o#TIROa<1v*&1M=z63rm=1gV+ZV9m%er z*M+Zp(<*77D;-+7h}MLn?X{uxe&POHQKTs+cr@bzeXg37M8}XeMa(QqWn}v z-fp(v!%y288eNnvk}RDzB|7j0?LFwU`&%U0*h*mOGtqS4Jv;v`gr-BM<_(}B$tkVB zd;8EiJl+bO_ED!Xv`mpV>rqM0K2eDmAuRw}=Y2*QPDFJ6m{qg4H+#@tKmO#=DFWZ8 zm3dNe`H0DrLnSeE6@R$PxuF4H+Z!J=qO$M5#*u0D04wE5j!|V(E5GwrQ6VS@7&%Z zslW^0co%bXx@zlmQfSg+(ASYe12yIAm+5zD8iAXw^AEYyn5Jn=e;)4ZuNu{X!oE^Q z9v#q=>Wugeu?!^LebKT{w?0H|X!;ohf&bF!$I5Q)b9yrQl^s=B(~w*X zYuD_ob=mhz?#v&*wVk;?rzG9_X9yD5?*lsq<6bVcCbTi@PfX=qcr9H?mJptoi!~>@ z5*R+?6GhUqjC{;f2LCKnpnKpK13#pKWU;)1Drpm~Fx zqc3dd2roq0L4UOXfrI(50D;OMK2@LIt2Vle+_8-`)JT3_f*WJi^|kA-sRDyXzeonu zQ~w8vu8I^55meH}bACAjvM9njdf_J)SrN1)LkBQNuo)3BTcgP>-s#J*{}XnmhUXkH zfq%VMpUOT=hsHc=rpQz+R|?rq@7NJO%^WnRq##w})!eZi3JkqwDGDf60!mG1GnAdf zjQeKvb%~Fga`gt^nyx5aIecs(_TR^1sYhDHgt+inQDpFW+rq-~*A4iSq|7n?i6+UX zqs@zV!9he1iPF5SCt7oq02w2EAS3e zYm{ULfh{3}fT&wj440_!Sg{-b#)kyI0haGCbq0sr>g_G^&0c7G2`bXQQudJ3-#5N!pBU{<$CO13bJluK-SN;g%{s`Dc)Ry8n}L6)+!+Spp|f z3%8HA+xHm1Uslh`ezPV~;C(nQ`!pT8_You1*H42`$5(eFRByp;`SjSi?+(Z=ONO$a z7gE64&-EC_MhCMtuQp67az5C~$L)#ryI5FDEnLkTzsDo+bR_%;N4W&I``s*ZC?~`xy6d6%dVISLCsp>*I>gm z-DU&wzNd^XOkSfiW9=TBEG7hpi|s4+8I;(nLd_}!{KVzh1+pTlAC~f6>x~)jtcVS& zlMbD*&P`;KH4#K)Od_09>tA#s(Tp;He7LxT7`VC@bR ze;qW@J^@CxDRng@>Yw5cPIaf0vV;per!tDbrg+2|4+M4N|AS%2R;ij6E~0Qdf<&_- zJpI=4Mco*E@VnCgy~%$cv3hU$N8^<=MR_Y+(iG*b=%<6t?s&cqHoN2b%3$G+=TBx1 z0aLh(*t|=gRPw$!?Sm|m`BYdB&KlH8aDiUHTJ!kqn)SK;I-^o!ox}HBR(YF2I@G#5 zZofT010m_+%|!7_T~b?Rqj<;@b>E*X%wVLuoJnMZc-r8otSLSJE9-bEVyBHCJPY2iD$c zeZ31oe7PS!;ZuBiuAif)-%#LwwQT|~rk62N_vzy2KRTg6X$_)`S!oU$`PAu^dT8SY zKT*vSE`d!tbmIFMmIrGFoI`b9?XSECUVOL9tL%q-HIwpy2QevMIhvp8&>nn8RFAGl zBCq68htn_9Z^qsE^PMJHHU0l}`K!NN11FgF_Nr)V+x*qezMIQLeEr=h{oT}okgaaZM-jNDU7w>V*$O1FIz1G(qwN^}itP6ncA+I}6S3x&yN8d-H6*EPqXEqWUR56iLUDnS2RYIWd5(EYFm3 z^9$c-J{nAUP^Drl$7Q!#j1abcrK9D^&)|qj_pnHlg>a7@Yqg_bc%QvvcNdWtAN2?6 z0a^Wwq7kZ}SjqjmmBL7xr`fgFee>T1yCZo_IMBcj3Qk#t?SA8j5C*opt5AFdl_iXf zm-aXx-Q~93^t<@wIN>kGcjSj(!`KFODT)ql!jj+|;#LZ;g=`=LrGovUh>!wY#D9so zFoY@5+Ci})Hvjc8dB#3jN%vvD`(tgq#jhvxy1(_jpnHD@O534ApLf=cKGHg`+#Xeq z|73mm{D(^E|J#2EHG?0UwdikUu$2}c&+B-q!c}#$95K=JN+s}(6x7#lh#em7TBXcw zFRMSyz0f7p_h$b|^0jQ^6(<5C4ma^CgFlip=>otpNcnX28ywFe`A^GHDLZn&ibqEl z`gXWG{ZJiqmnA+dghI_-G{E%{zD zRNH(N+or{l#DEN+^?9$EQ`0R+bGEgzMMqDZiP%uPD%?JnmPV#d?ztHEFQ;LPAN+Zw zAT!A5k9t2jbch#j|1M>y`z)s!td6!$N2YdNj8Up8_18t{m(|xu{v7FIFj8gT9o8;0 z=TUCn7@1t=J?Qxqn5qH?Eqix#fR!U%jOQ^|@D6#aOG08=FDrBao)`}+fPx|&Gk#QN>#_16T|-P0`A)? zvhR$;tYKY|*7@waW||?wdUxntVqhEl2kvIA5PC%>pCj2YC%@g#Zjw$ugK}FZd;96w zDYJr8B?l$*a;xKx&O3J$HIiMP`0`KmPs@G=sCUA zmv+5i`CZ(?Hy!$TIRaq!e>wS6Yd|TkyUzpwQ5xyuTiHY-#Kd^Smdf2YR%}`kO`pzT z%cUH)1QVqI_#YeL(^p|2IWU=GX=WDl>sQiAKnTy6Gwb*31Ex}z+T6taZ>Ikb_UDEq zRKw^CW*G&38-$-kc01HGiMJ-1575m2ZP#Z0gF#E5%Ky3DcN-<{%>n$YkEZK;Mad%k zi(DleUvNJRBeF;aqi=s7vqmjcMN_9&Mw1_in*6v0)XR*D2={NWx?~E0_aUbY^GIaN zoctMWLn575?FeqcL~MLbKKvL9gsv{k3WC7TWK^q_HXG%X+Ba3-Q~9)YhPdrfhQ-Kv z?+>^Uq5!zp~wAW`>V3{sn;lGOL6@XwR7hc5t()}+pNg+>py8jzBCnG5O z5_l)Lr9;ch^R#(YR$@H58i|ou(G+OJQ?B#z#refyJDhfa9_Qa2{e$t`{Um!RKCXeQ_tzV!*{8 z5rw%TK^w?4LUY7Zs*y@>Zo3;FmCdV0b1HzfSS}A%W#^O~3zt-!;v`$NHCg?|P)LH@}$hd+kI&&&f^+&K7s-tQaXSLgR%?z(3FM)piE zkG}X-4{Z8YxDbTI&g7DJsXv}Pg_W7tZBThX!0$JY?=XLS5KNwY_u=DheZYVc#Jp$@ zCEh!Ue4^g@`9zM6_xd{c$bS3W*>6W;@wkDkh|7zh<+n_&1$@Tq4*nrNfN!Hf&$w*-tRL65GOXrx05q@`s$R~`N)xQg}7w! zC^V!qnZHUf{yx&jzfBXVr?VN8k#ZwSInD?Fjb(kc!bI#2#M{tW+jW-tU6umBoqm}S znC^+q6Gelq*?0m_D)SCbfp4WLp}s~H;qJdxCl&DuV4qZ~&y^>YQ_gl=S#q%kY0>&> z))%XJ*Rqeh*fL#x=u~X)p;-?t@8z6m**$pQOYiq%`#rhN8O~pvpEaBjL=ZvQFXnQt zVK?>6x<2``SA&TtjcjVH6`K!9aRv~-3V=_7i(c^d?xiW1`*L!lmh=Y#WQx1?O4rez zotpYL_fQ1onoNEMg~tbl=VT~sN8Fa>6^;buYJzh6Pp6y~58mxTIh{>x9777&F{$%Q zI{*Re-!Zjshi896u`#L3NG7(&n1OGP8Tjs)RP51!gsd90v;kscSDm#y`(qnpQ|s}9M+ypN?)I2IGP^Wz z9H;h`X%p)Qu5AFHRSoPX4t%~rdZm8LKkB(jqW+-gm4SWy>FFbfHY6{vh|rG0_T{ZJ zdPqJ$Jh?Oqg98}1plC?GFuV&-$kK3I3%Y{*(=NPuBFTNeuMN(0D0~;}%sKVraDhFw z|0eVA4C58Z?yfC&wIiQ;CS_&})H!yC3jt>z6=y}4==ZLQc!7u`aA88vBj?Pm_#F@B z)thfG$#!Xj!QelYFiI|6}b;;G-TP*l7B+!e-PKGug(1*J%*93{UU_^TH5~rz3Y0G9`ru#9;5do?=gC>$MEaDRzwKP zc%JV@?1#jzo^)^k|-!XpMzpL-*z=EV@+7251f##R&-DsMFXFtkj_zWuyybQ19-le;_8a! zTrcU`#c!|uBcKpl@(hSeBb$U&PwA`w9@%zE>NqD4qD#;qQ1^9DmS4<5U4yd39nM2* zPzk`_qFc;CqvVbS9j)`b43i6zc}w=*hrsz^yiA`_WASot4UPn zrUrT6`pu?p)UIlR%ILE}eU@2)V>o!arUw81#(6pChn^UCc$E(CS46vh$Lqsxd6=I2 z@qeBr3Y4nz4jdq4{ulPA<`fu;H2wAgWCySq*7rYtor%)CGh8;n;ZBw^P;X)<)vwz8 zZL4)YiMvAXrZwU?6|IRuCe^#Tdr5WqN4Flys0Nl-;3Ax{KY!;pf2i+GZ}S(|V(M9e z(IU+nff*-0Kg(}^u=?r1LsL^8YQ86P@>;9wjVD*XO)e zh^yi^utfjT68)>H{QbFCRSo}8;N>Q;I;}yUs^M2rhvZZ)wzO*G+6psNxkj|ta(d@- z7a3X|+redG?&aRA0gO3!nvQn2j*g57p`$&FJJb8Ie42^8ueq1E=;Z)jb_%EfG%#x# z0kOm--sGG1Oh0DvI5g1acBdi9pUuwx^a(3xN?zL*x0~{9LhR?v2!kjv7LQ4)%K&Hs zUt2EY(ze_j9wE6zU4BhGZ^6Ia3*5W*6&%*D&XozGJ5R$yy2Ux8AXbM8UF7 z_W;Qwn!=a+oh6|sXlT&zqs~LxI-`A~xFyIh7yVs-*(9la$0Ap;CCd{y>wN6`BLr0R z?QeBUH(5!BWn{E;`n;6c{3<;z!H4h z*yG>5+Yxo0NeqnuR)I84-h!~05U=b7IW5IroxGagdqOKO_nUi0spQHmbaMLZ8b;^u z55NXRmI5juLue-Jd!d>KaBvSj51W6R9}d1%cDU{g0SW^m4JqmKm9-GJ&NfH#y$yIX zEKWb1ub0qN1g+lwvQUbTfU4P`^}_epMDA65kMT+QW>y#LVdeAQJOlWitjfT*B)}l+ zf6gz77}~alrLic7Eq4$x^xy%zlbZK27d>c@v>w<*fdA*^KX&k`1%Z9|Fj|pExRiSr zYlbf+in_Rld^p;3{@thqe5oy8GOx(lr$Vw|g7btJ>)O~AE(B#7d#~=bi{dj%{&z&5Q81SZE=cA>tGMUICO=I>B z|IW+cAJm6ukE*DWby#!rW-lZOKBpvJ^BPy6T@w@%>i8~$6{KJuGf<(oHJy*W780xc zWP5b<%4)%ZE7og1+1}}m!W+Z#WAXoFyMs5eO|z#5_!lYvB(z|Rnv2b7Ah|^%@8Kx~ zCm#EfxDy>9mmQ_Xr)V&LzTLm1dDx5V39G+MT}knn?5=3e_qLedg`epoDTN|R1{x8^ z54B5tScGL+bo3E6QVL8d^L|Z5xQNR$KMs~0u8WTTS42}$fw1>&E5N<*N<=><+@2d9 z{Z{b0BJAC4uMg%v30_YOBeKHnFsf&RB9St$E+``Xs;(>*iH^Q6{kqN@+2eJcZtc3& zUZd2Ep}}!w-YG#5U1D(o9C{MVHObF&=ygIl#_>wUE4};gG|BYL?M|MQYGI|*9Xyf1 zNa4PiU1`AVykE^mkia1a=nou2>CcgG&+aF5BL3@s#ecm>lf-|y+6AlX{I-WD& z?8=-JK__rPAs&o;AacJbys&B5kV=vV4V4+@2w63c^p;Q0LQ3T0KxuKh=Y0tKDiziK z;RrL;9GU#;t~i^mr8xZE1OjE`3zKIA4L<%p(-GkBqc6DKp?K+ohH@57HzUlwjm;-U zM~BY$v8jnXD;V(j(7oqg3mzQhpIUKVoiI2x2Lvu_@5}n1XXrtW8`j?n!DF=kx3F9@ z!tL;f*`V2zL9z47yc*Y*D>e@_QzzvY*EJtU*>H4p+{z9jpB?Tm{14vX9u>gjuZa%c zZ#Ozx|#yyNh%WIzV}t2d!a`UV^+8DWmA6jvw0rE(VB0MVp#2$3GSu@wHq~+HDqO&f+eL44n(#$shX0SnanZaG?zm~ zXYn8(UUg}HA>hd`@@}9tsj&@~7>Qgks=&0F@>IY`MZPfan@iY~P?O}NaM4TigL$h* zq71*=peVzo%?Aki8)^yWNg>nuiupvD?!NUZ0MMZ@PQX@|RLAiw0EKFWy#NJ2jF$V{ zHUogOPUx}B504Q5h)odyw12?AleN^=3#y+69x@WkU^+We;fbI^nN*rjcqoobr&!}a3 zfJlW}^_c;euerI&*R;pS59~EAerd1#aq*g7h2!FLdlija(MQ|Robic)y_`b&yRe3H z^mvsU&wi|MeEj-erV~!HPI@S$<5pDml32}&bcb;Rtqk-*nWvrRrahH!`t0qfVGJIbnPWat%?PYrOY)g^rQCIw@1 z=g!iG`uH858gmwoOq`7L+(BD{SMw=KXSv;8xBC~6&V*6l=by=2WS7r(uT#1^C6&p7IjeykWQQLz({YgyP~L1y zn8*5QlC-nZKHa?`CO-zBPD#dek2=k)S7v|3x^2=s*3HV$h~YhOeafD%P<8y+*cVT5 zbn>WQ-a3U&tW)v}#z1eXcj>i+pIoGB)7v&&6~T2|3gXc1GsvCcXHA8I4-Y-_PQMxK z^3HhR46vN)>LSSzWSc{eNyZ>CV%Y4B}sH3l)|$M4R!gnMQ~d%46p)O1)g2lM@B^QQHD*@XWi zk@wW9vxwUxo2PeUv1Z|?*jeH4Cje|CyL+rckCaOwlF{Q-uM&TbsXaF%yKzkTU9+UF zyVE2HIt|foM(kNf&ff`F$U2X~uU*ohUi%&S0$=l%F54jb0#6&&yxK~Q6p~u2tRaJv z5i;Qzm-jK{wN8{a+hlNHR8OoRo>5h;VT|H*etekhXVZaNHP?TCTOhAs_4@8s67ymt*8tr}+>n!Yrk0tg3vvI& z`UKVL^y4A_2b&3>+@wJ2hY>kHBKpx~#nf~+NU3?2ZsO#_ zIJ;k#sWwCskK2S`{AaSJI)yt^kp;R(zHnxdz7-|UfzSnhp@4L9c)I_B}$evv;22BGasK79K$lo_TIZBo1T*w?ae_c`qjcZ z`W;IYldnG+B|?35^d!Wpw@+UwLSt&M-;etz!Z$V{m@Z_Gl6S#ReYeVmh2o#dMnySs zuE`~@yW3C6w8-5toyfa%2&;t3q6v9_ovkJE+fEGKT!BAC4(6cOz~|4_lN0nIvro){ zSxSQw9$>UwJ91l!NXV`dPJ60<`Xw(o{G|pu)4H*or5IpK`D~OW)~=3jEYdf&08Y1% zp&mP`i*vz~CXe;f+VZ8h7UMi0(x2$cW1lle`j8=2?HillQ9aRM>NWu%5{Sm%NoU+ zx>SQ75FbVlX{*+5yhwL$a1+>&ybjFcl3zD|fETI=aA@!T$@=Og+t00tZqBXA?egK% zbR3#&PDShX;-(G!?bq}gfA?>C$>7V^f~KXx+1{q3DO%aP+X`<{eXH<}Re00NGUyD8 zBZ-U4j{tbf_`gLEZzO4wNH0!T=$*l090np;uZXFRhS}+oN@zR z7V=76RC#&o(3sfFljfJx%*Q{jP~O$U#U4;cWb z@n+!vF^M)ce_X83fMh3zDc8G(67-&&wdco|^El|+=JOOBgI!sJP_O-G_9IsV7Y#{V zEY_#=i;qCmn%L?Jf>e0D*MT66Sj`CC-RzI`M)frJa{7#@xDPN3Csr5OVw{sdlxsPe2|w0KFD`vU+clt z5_#Wy!1*L6w21%sypH9vVkp$2?KEFg#XE7;6J{*@(s3o$%Bm_$t(dYC=^bi zhNX=bwUe^hvX-YP%V_b<-H-V@`^7YROWQAGl~B9ppNy1mntvhYzozkgYvwe$;wI?1 z)QlJEIc%p&Im`d5H{zAoNfg>lmuiB}%fxg_&F>1AJNzlSkq?MHKbng^$xqqMHuP@_ zYaPCm7`)K86km?PI&|BMe1RPzAfL#sC|lo@AAPZy&*qoV(dHczdg9Vv-P1Z-cNRD8 z-@5apro7gj{hEIjNenqFQvO!c$sy%|)fT!>k(fzy9#2z)_=fxt2g-8f9mnn5 zIK^PA4^9l{jE^1I>!ChP1i)G2m^ji6->QbU53+`Pv{`6vUY6D7T6`+5&H8n&P1+&S zbJRy;bIg?Eb>90yw?&w_oh7qfeQp>0SbMwpNG6z6yT6IR9M&i<)MLuSf<5^_+fA zYJuWghDZ!{@-8g~BMD~+=}eLE$m!wVzU~a$#k}f0bg;&!r|?p}(GD#2<@b)(8Jnc^*U1TXzWkjDg_VSEKLyDe8UES$ z#E^rkV}Fn6ChX5hR`^Lx;-s>g@;7d-RJ=C=@#p?N9UlUltXFGdAF_Xb@7gnr|9Kl3 ztb`rjSCx(jrB|cvN_k^;4LU@EYVNEC;}U)P)x@|G>}}Iec0zR$9GYBuzHHg*n1c{m zO$!)sdH-J3#Khd1^0hZR_>v#4c>b|mo77y4q-y3EG71uu<+f(rP8weu>LSMJ|^Z0L!zVXJ;4&lmD?8vd^la!Y8l zmAC{W42k#fRljb{oR^+Y3`1Lb36r%Ta>hQgGjylC`=JFg%)w;GC;H$hA@Rz_2qFKG zqc*|)`pS(nS~tQ@7n(h#l7UaBCiXh(G5H$iGGRb^Ev)1cR6dPC<;7HXSpy6lIo_P> z{W<}BAs*SCS9wQ?YyuSXehqnhkMJjpMOys}d}5L)DNO!+myHH#r&f(qHj9GQeC&Q2 zL}ucB`N*6ZdG96cG=Dw9cIBSS7=H-vk3)1SpkA6NfV5> zXyqpKvx1Ik&S_tw(kKX(ik4!(;$83FU**3q)B7+A-IW&*1}8xy0xSvg9Rc5sQ_QXJ zlDIt5h9hs)&(N}P;=9rXCr~r(#IGH~mM>}nRB5=;Q`o{4!o zS;T$ne|nb1WVehf0>hp_uQGjmlv(b|G!=+gmk}OlqvNX^8Fh-?qaN?S;1BidFkbY1 z@A=udmE>?i4?sKo>ST64d<`Qw{K-A!FOBu{Ieq1=_1%iYI9^S|LWwqni>zc1PqEqQ zVuch_*w{DLnI4X-1zU$j2|8$PM@GAIdUx6IW&~04G)5cOuiu#2H@m zf6@_gL&|>xZ2q+phF$a%ZHp~3pZpqx;3o$C_(YlJCeqy$>yGJ6Ec5<~XTwYo7t&Wn z8N&ry=sk`d;d)Sr`%z0=9;?aa((kLw-)I_H&G8k&Mu`vhY414ln|e#8t6Kw%;Nco7 zNlpdr8BICpU5WFhhM(Rc4L$UdjKo0xjPdc=^b?bfPGlTyoXqfRh>za@m$WIiFgE{a zI&+S9chF4gr8I8pi`B2s&_}%@+^)VA5=#_JswD%NQc8JG{0b#8%3Vqd8Kwu!@bLkh zh{R*8O%nU-M8Qw)qO_ed&)>=njT!`xe6J|o_gy{uPWOLvy8mcPNiJ+9+EU65hpeh= zC2pg7b*_!7t2Vr-t_jB1+R~EK zT!+FWC{?)eeDqC!JYMHxpAV&TMpIgvgZGXuT(O}zL7f?u_hHx{6ZA1>Poqi?&(<$= z+kG_Xj}eSDjb`X^lY^tfEel8ifkakrv>O=s!Z`pE5foDEQrlOsKCW)c;5S67PILI9e=r@`EMFNTXMW2Zh13 zEKjH>@_bqWc8?5Lc43uD{m5@8y0oaedo}!F-qq>Y=JE~AA8I=U z&r`5C8`V-ks`!};o--TQseaQo8;WQs^?T__r*2A8-_x3vCab^~jw_zShe17~W($6> zp{8La0v<6ksPW+cIeX?W>Z?Q(!q82@5-14!c zO>!;ROF7P@!Rvh8DoI780DZv4=mGP2}+Y7-X(h%%}+ z_F{E(R(|i!=45UBsH)JDCk?|sc;&EO6-(YLtm^lEI>4f$?O*3tP0ndvT8lWvjGgMl z+OtTD2f6~`q{q5J$h2&Cnq%hR>_&V_VGRd$KtVf?i;R+q10(|lU-ec#Z74`Yt#(?> z3K}pmrnO7AEVL-?1j~6>mP*iVY_ACC4LW-tSeATp?=h&dZ~6Hb|CO%NN%Xz~%bfZi&Ss&~k^_`oA-Vw=3i3(W%SqHK3! z)rG(Mu@LbwMq>?x_teDJSxgT{%tYTCcm)DB-R?Mb=;hbCa@~5@oxN$ zah8%aXMvvtD=boiV?~5M2vLBPx>vAjOf5j3Ne$X7dog+DJ@%D-@EDV1$wzQ*WppQf zbMotLVDHPXGW8O{)REhKOl#Q)_7Z%>|D4FX|F>h^^=(+xrMZ<|wrpBwXu%KC>!wI! z=3T69lFQv7JjjJuk)oZQkyszH*-ajn&++)e5#A5svQ?o=y05H>pMES!R)Dci^>%C& za0tn)S#R>QeAz8{#bhtwajCZ@rGhfo0;ZD4@K1$`%~V;Xrkb^C;0MM^gs9~F5;({La$^M znqEqwK6K{I`q}#K=OxJox&qa|`uV87{PgVg(_D%) z?qap>l(ytpx29SCp+vBVZCkoD<-p$q^SoRUD4soBG;DMBOI8vdx>nZ~_zU7pijbpn^S_W}joNcf&^HN z>Ub_UWr=gJ64+@3*3PsG0`9q)`hkA+9+!Xz`sFX^?0@owANRRQ&>Bt59acIG{T9?> z^-~Ko1EAY_Evb49qZf%YtL;o*4j5`5r_8+HYfNE{2W@B!fiE^lmeLKftTPzY1O_Ep z^j{2U>@EYM_*{}2Z+XaulgW@P5-H4V_`TGrdtTb)se2?++n=7}(`G(qtG|uF^e}DZ zJAwQcBP(hx8`*sD^1Lwz-VPna^IlPz1eyzmJh<(wu@lCR4|ROV&uMM5`&5k$b!_B&>+Jm| zhdSH|kg*)FspkMlq_jHTq68aZZ~uIPDK|FVqQ+Y(?rkX6Jte-T)d*-G`Vm2OWBv2j ztc$L2_>V%wUb7i98!<@cnO6tlA=4oipB3T4lQlr3joQ> zpeIFaF7fZXl6Ne$3IrT-7!4I7EcvWi8-MV0c0Q|e)K$7ym5hH4Ci%RkA``P?hhUrQ zpqeJl$`tl~gBeVvtS{yY`npo2f~AzjNhz8+=v%0&7O@XuplRP2>S*_;r=~gcYn3A0 zKUE$HHy;6z8MMwbBiQqo#E2y{?kDKcyy%^VdfbF3=28 zFXR6fVkiiU(jT#a7O{YqI{j(TpGN*X)vCHsUPK{|o9%~xB7ooP{of8QlOVA%klLgM zl~oLtbo1?$@m@N@;XC#mxKrV#fKcyPP4Cr^4Ay1?h24 zXPguLaZcZ5oD99CC&FHRNcK20V*Qt=Wb+Qg&*Z3G9GbgOx#UBqBkoT##O-N4AZo$h z+_a%FvQ>Hhw4_R{ zEgZORzn`BG1W&2=;t0IL6v(2-yZsXf3OKhd88-ECCc7j*7UL1v*v!3&?qC8ZON(oi zikM}o!#?+xjSnM9m~C|g%q1rS@DZtK9Ee3|MJSlkV_%I{WBg z*~I+_Iqubbc&z=@4AN_w&g`_Ar>HxfE^1Dr7BRKjr_ViDyv6#>sTe-stkD&|C6SCu zR&YX5B>r_k##Z!_{OaNW&&JP{2fYJLbzCt0EE2$}YJYC2lWbh9Asd71) zkH5O%7pHZ0Y`itk``+8|t*CB8_G*Tsimc8wA^x<|@uzo@w7&8o zY8OPcmO|MsK1FRpG*RDX`*aA1;R!PY3bw@`DC^Gw;2gOdkS#1$T@!m0J{y*QhXl&17+joFRSg5T-8v4^o@W>RQkI=e{HUinQQnKZ! zh1`BzNq&~dCW%2edHLf<1ohiVT%bIDIF=Hl*Zv}i>w9XrhA0cJWH$glKE`!B@5G!^ z!P7bt3!J*2FRYtQR^j^p5{D0+9i4EZF=OLx|{ zW~7z(*fD#ijAYRscg{}6n0zYt*S^?R7_^6r*;>V3@#dWCR=d<9^%z`5y?1qlsb~3X zzY_GEdNd=sGVOsf`my!$x$Q?j zr~PM-+ViUW?aO{4yP8uWDuJQRrEQDbz_k0fS=K{c&aMwl?(=x$1(zZlesYJ-Mj|>9 z?Ix!aEJK^oS50o!whf$gohm0YPv&ZLkniGkY<>YT!2S4i8xklua52Xvu#&I-_0MFIPh?= zqxncP*amxe@4O#7O~E{cJ(W3*`L1lT!ZbG3`T}L^TKVDKaDV0aV_VAo zgQzn3-V^0o1Rk(;b=hY?57%OHJ=7;%p+txp|CJz96JH=zDMjK1=K+aCm$MCkUsZRn z%#?Kv=rqrrbE)ji&1iR~{lyQ`Y)s>d&jatYgJ+_Ld)GeT=H^}n{pxkFSn(<1r3c^hr#AzRP=({e%z5uB{9Q}cFR zUph?ub?{9DUj+KkDeH78^?imO-rIMpX9euAW7BccLLH4DCe7^{u~Y~CwI@g6{yFu1 z&C7Qxk@PG&`Un4FCERh~Gs^tPB}GZ~vi{asv=&V#ZYIIa2fBF=XHl&3R4flysiwS= zPJr0~@|t*`Q@uaqLkXVxN#~LuY606`5W%3JUpFdnC4{v9@kSjHaE`mO)Q&Usfag`%8{Vool2H3224b0r<99ej{k{QKpjsd_5`PoO z!U3GVbrx{i|2@G;)nZmHI{KD>3Qk0nnJLff#~dxn>jGe94Mk$EWtS?Zk7|SUq=ku& z9;LdnD`JyNk#=WbzPHMpC;TQot9+G_*bv0MyQS0q_GEudBBmg`w>3gZX6Nd!&aFis8@%O6&`N7B|CvnDSWS5<&LEW5jQaE(?a%Eu|A_IGo zhzOy+(p&bN+R+dCD(W1$?e-a`ccyi_DJP-W0r{2QoZnF{OBVlZu-|{GT}YU*y~j|0u2@b#iGt_0_&ESl zh!(9tBZ&YK1y%H=skG>5r*Ji=RZw-T!M?LO<)&0^~_@7R84 z`S$Cbb0x8Y(~4kx^`}~K)HiqbK2_*Fb(%oxewu9(+BKm7mRJIsMBZ=SDrYM0WVz>! z7VaTP3O@U@)Dg)SOfroXPif{Ts=#m<<1+nZY71_NT&a;Lo%xZ`YVg+61xYvsh7-34 z0Z)!AmpF_pEbOfle$;0+PRyc9)5ECly>O27B!69_U19EjhKunzBt z{Y7vcU9}~Wm~kIzy035woAEa;ocIIfLhT)DxowA>1iEj5w9C@)JGr(dQ1P3t5~@zO z1!IU2G5VD@9*0&aGB!`<(xu0_W2WzQnx`tJb}!RR4C>o^kBeIR$E-!T;%v7F!O~*C zFx=jCA@1!(s;YG}m474vxeap{xbL6V-*<<5V$e()*#nmS;LWT7tsV8n2DHBhRAmDa z0MeuScLtQ#aXK5R#L&OIGB(F6C#!sQ?BklFUX~ano78^T8h19GR-KrUOLA(?zk`o= zU&96`w$nRMxSK{KksXNENZ3X4dx*Dj@uvMq0?Id+x?tWsg4;hWQy%uyiezou%aZLP z5&9nL^C&eAg|mlGUbtsFn(@!EKL0F=w9PIQ4Jk$ig@gR!zhKyjp=Wxh6MwmcR$U}~ zBCq{41Hivt1^{J`Z(@KSa|&{A`;#d6==TBhCH$b%Yy!UJ?6HZ3p}Uv1uWcqAyrR$> z{-j1PLqHVj;haYz?}<~+&hZ}8>ElGf6gel5GFBon5k2LTzr#_KvhAxS-p@x!_*$Az zWzsV?600a-+*tqAb-tI>aZMnJftB;gQ+w`5(u#%u#o%*nF!pTQA`wB+F7mfNZBR+K z9uHbiy`UzX{LPwwiL;LsYb<5pTqwsg4K`75mx$KH6H`Ol%JP!%O&-N6nXAzL{cW-= zYK7S!ygB$}&^96~DvGEt79WDwm??xwb0)|8bP$+hU;X(H{CDSnaxj0{SJN`Go(S_C z#H546g--==@VtY;gyjx^ZvG!<)<5j#&-_pq8SU}RUm;eBf|25q%(_HNTc>ZOntzF; zlOT0`ZtJX4_$rGHUoFmQzHxa)DdMaGTtJjf3TwN|C9rEjn5*tC_vO!=nZlYu<`9U1 zEUQ13_%ZaUOC5xL;$%UC4xRlh-}}?2Z+6?b#BI@C#F?VfKm3O%NXQ6#LPv8;jSlku z03DP*COWudpn;nT4&1YWhM`+>YoL_*xE0{X%tL+nGAhn}T*LfmKVJqc&KGfJF|{G9 zM$fN?pI>Bse*HvxeIjbI$NE$OdVdVIFcEDQ2-F6umOf)*I#U~1tK@Au*{7QuwNP<_;PodvIrPcDUXuWdS^Hc?^cE#75;cU~dJ{hD{- zSH!r5o$~9_S+W|=K_bsmm<+*ZuO-X*?UwxZ{{E8Vzq@x2i=MTFjy{wsz=!`H=;JBU z9zY+8X!v~kXewD=F)~9HLpQE&2has?+Q;ZW+Q%e}DyhMHz-RJ=d)FGEa6Y!qF6I1I zN;qleq6~p$lZP}3BL?rT{yh=Dtyhpa^EEnth4nuHWnGwT+h+$v=19#JPDssa!g#$G=tIj)1Az!l{YTci1z+9z z%|WU3#}H9V^|BW-#Ee1?kY^GqsUzHWZ+NbKX*mSXG^ zP3XmIL$^&~4526Lj#66<3lD*Exw~W!((VQtdy2B0#J6*Vw6{E5nk(BNN479tl=Y}Y zfSv-=xDWbt8@>TRPv9*zajusLLrz--;s!;FqRBTZPm1F$+FSy`u$H0T`?X@9^o{<2 z0PMu+&yJ^1%=<`UL?!I4v4+U-NLgoR=QH4+T!MJ$RyQFkki1az{g1gNraT$J8-6>CcX2hOZ;$riUcG= z)HL!6`HH<>1#UuF7;GEyWHoRK(AVvs&+~D&NDY-lxb3nP894;SZ}eMiKW#&G;g6!+ z@9x+p`A-;G+i)A~ju#l&8H}uRmti>j&71>w8%FAmboaJ@UhIsgZv{luwq?Dsy8A5O zk?d8TekbxKz`eY28iS&)XNhhSgLd4-X`}Krp^iJL->H41D}6@A*0KC9|F{{;%;T;p z@;|hnNwpL}@gD&-WY(yh=E;ITQ+hV1P<(cSSMe$f05WjYaBRLkTrsv#pV84Bf0D+D z)AL|&Fs`KZnZDlX?t|vzqiW(@ln}q5Fp_Y_uzeYTBXR`+dvi7~w9nvPuV9P)_^`!1 z*H&M9KOwfhYwM-&(b0cOYG{WunQ#1VH1S)5o2CC`97)9__9EeD|I_%?Wp4d%=1<{G zJnnz9-rZEHZ~Q5|DXee&DZEL!SZ-!;>)8xzZJ-KmVjQ3ct^dndR^V0b>Dvv?sl2Bs z#HF;6HqP_`u~5Pl&3oy2GNpRgGbCfsiM;2I&w}_XuL$Llv2?drBRRtml43R~b&CQu z+m~SFVL9*&mn_R!HYnTZAcZB{foYj1FdYJz&SFSf<|1$F%>tDvphyqqEjSq@0Fg_C zW^igu!>KV1r^Ym#8Y5{S>CkAR;ORy-ai^acoKQA8^{(ufO%}<2?8&w%Dsl4VL~z!p z(MHijE6~NHUxs`h#}sZkE(?fvyezc!7kov9kGT~-=Dzr$kGcK5Z{RseV{R_&DXsKz zRTE%PQontzf?3n-z}{T99`b{LjT``QF#fvrh22fu;rXN;ZSLv+>YOv3jyEb*&%STtHWp%r{He#N3fM#9#_ z8BKo_4SlQ>>Tb+u2kt2yQ#rlkn z{^R>v?Ls#5h2D%}f4OCrCVms#w3clEE3opZ!q2S&@fQ?|&ncTme1%ox6#C8iq@*X( z6<)|cK1=K~b|DbEnO(zrU|%Y2MBqcX)rqJgO!zc_Cr8RJD4NTi zZ0p$tbgX*Dh94TwF>u@c=Ka?($QX_<{pLmHXmp>*OV(lxc)&mWjL1?zTwQT=^w#&7 zEIfz4O9YQds)+H=IZ{}_Bkk|>)S1-f7Ljfdi!gk2FE@6h*M2uZukFY8pjW39{xZ+U zC{4{8C`vw?Elo3WE%@f}OEK+%jD>FH=N}(T=b59k*7Bv*T1!np`+3%oPk$}@YkFGC ziG|)zaEhc!mjGU9cZF7i75vk?D#kWTdP!rMH^+)%5W#bU^<9Oa>lQi)m+6P%?jtAG zA@z3{qGN+8IDQ#ueOO?h)G&nY1$BC?%eK(42caA^+zKWu3-?NtH}B&|0FE;cu~7Nm zf<8X5lH2!Aem;MDG{fH@BeX#V<<6HWeSn;Ef)QLiqlcE_tbW0XT{TE zkqm4J1M6M|g~zs5g69PfrpIMNVsbVbQoC^h9&5_&9-zRa;_kKn`MdI=T4nVL`iWRg=}h$U7d=BEPU#%D7aS0M%na;n`JHBExScJMW$DyZcTF^K zV$g%LugU*j0w|pdx$Xd;&f2!rfi%tq6EXB@_cO9Ca;d&?k4)z|JK3*5W2gn91qj0h z*?Grq^z-*CkbO1p)stVb*}cgxm<25d|DBWK^67;qYxKCq?Gxv+W{+ zG<9?hks}q^4YHu1scIo!RZEM~sP4n+zKjE+0CNoSrQCfKoLa?}lRcxE>;<>YI~_`2 zj^{6M8p-bds5R)HTTKM#R2SJf1A!2G!?;K!epVztzYaj)h=FO;geI)0PCR8?EH(=k zJ9~Pc<`XH|&{keI;ljx}Q4bn2s=8w^{Sv|$A?_KH$ydqL}ts1}<7-YqsT1m59 z)z;TaKH9~v)^kqa>NcT+aph92Q3F4@#bJ7MblF?R*rDzQ@1-I!_S2kQoA~&vWa8(-*U?hCn*rJE!bo&}I9E$GzpVA#6Pl0KZEE>g-MFEy`e{qs zbm}Rk+%Jo3bp_cMm3a%V{Q);3f-v#aKx4LBSk@|L*A}% zJJ<0n;|u5Wqo4I{E@o^x%hP-)qio?IPxChTUuDb7!wYm;>T=cSTvpRFzlH8_)9X|km z#x(r+b05)QjV&V8d(@MUXr0T#3+E0yjVybtxEZkHtS+ZuXOdk+{U?vyPs8^a42s@$ z*8k%UcN1sStkiH^h_5c#Iy1a&xx3*QzLXhBL~#?zK2JLU=f|cCe%ca6k{U}QyZVi-7#M+u8Dmc zo=nXbH>l=eHSuqYr;|?In_`tYz^w~)I7t0{y`Wxcbo75);X`WT-(TYwKAFO`&b=lA zTx^fOZEq8U7H%U!d-|cx-Gkt7B)uYHwlRxw(~{$u-h=J|k}U7O6VA=? zZn;!B#n!B6>IfZ>MW7LWX#5JSZRImn;(gOxHSVsRpx#6&e)u% zrPg}`?dEU4f#t8O0rY_xW!_Y)k9x`eAT~y)?VJi^G(D~JOR}S${CfF=;obQ4!Ayw} zzS$?kuf5Qap1k_p&HLchx&{8<fFHQ?8~4{D$r)cM(inmxGZpdQ}z|8Y>t9}O?s z8cO^fC(n7LZRV8Opbsyz?D+@oKdnW8(1o{$o>jI{x>{VfVPr$D1g8)=}G* z&039UO9cDeR7Kb|UDVoAmm{r#<18~QodqY!@_hSTxT4w3Xx#Pbaj*A_n5d{1dZ{0Oe=L>Y zXt8_hm0G=Ehg2PBSA@-)!xUT(*=~s=FezAW5j1YR-`Y7VnCyFnL_7|dD~yx10OQ^5 zNqSI|7`XE8ImL~*QNU{uGSzukUL#?Sxd}#3Ly``4YbAf+x^kMAuhtyvJ5%hz^SyQE zB;mJ(e9HFbmx&eKGCMN-Rhd|n@#7t`r+!M#)w0Q z*Xyp?76R_pzbcf#_?7RCrytqDoUuq?g(LuF@+WEq@o6~8lg8v@*tHaYun|Y7w~jxZ znlAY-KNcAHmdusqOZ#udH8>LZL52ht3g!vC7JM?0tc%(CH59WM+p__bJ^4G#Vh7^^nSjXx6$o|q1#WUFAZrr4IFX=Cc(QVJM^6np3Bx% zXcZF?Zg~CQH3B_r?ZUNF1HCH`kfFl;Ob42}O-2Oqz9L-0aL}5=%56kHk>W_=^Y1r` zq*yw?6^d(L!W{Q*L`Oe(wik!P{IXy2mNa>1ZUT;%Dzo>Ob?&eebLVRNg%&Mf$|zJE z6mgsZTi^P_FnqBwC;s`y*JVihhBi%Ccebwzb@XFXDq_@9XQ1?@4g2I-q9M5$gC@bp z|C2YywdWP$5$*K;^w&+@$*RC=EBsxY#@~yXq0hqCYcimrXP>wt^%>9c4p`OA^g|s= zNhj4&?_1|9i24>QvB;H7OuVnt_SbDYqUipi+y4tKERvXbFYz&#&qV#(?p3@7*wBhy z%dRDy3!=@?w|=X?>>s##<*HD-@>8Q~vYQ`Qq7C-Ed^6*vLY*MBZL)u`RDKAKI&;Y> z@?eD`N@A})PuEx(wtD}2q8h+8YGWJ&lN>$izZDoVfUOdobm-sl;*Q+r6?{))3d-?P zMTfpViVbAEV7+~e-oS@<A zZ|Q6N>m~=o>9ev>KneBsMJ?I^o;(~8xbPB*z~ljWI%%1FtPe=pywjoJ8UZTy_WuD} zKzZ%46eU7V8s|k!KEYxe|G}Mc$IWANk}oh;C!cm&aE_m!|NmFdY(8Djoym6@Owe_R zu4RsU$YyD*Z%+(XWV=~K;x1o}_xg34Akcy}{p3tRu@Vx1+Kcr`S!+%b*L%bje9$lW zkYDgozo2%O-u|x4vIAUW8k-vHvNHID?UUm>xnR}lBgW)BU7?{Qur}}}jgT)8?U=@u z2&Zy@_W|rV3cJItpN(kxb0pE&t&O@8gU&sW&H1U}*6tC_e_=nqV!5nfdVX{yF^}}Y z+h?2>8NOAGki9H@O+zGi2l7jvw~mz%cmTsuGgv-31if6jU=bh<0_kEK{^57 zg8V&0(^>+W4Gur1y3&*V(t8Bylh;^_jr)HAkQNsL(ouT?=}nzIL2CU6aP8&b>U|-& z9vQ&3bkA@#pelnw0Mri}0qUay>d*U1u0q|!ha77Ljx)w{nDih9?5&xCPPCUSzjErl zrCFuV638@cxqmJ3`|rYP;gPS=IuX@}FoL;kfPHj}RWv5==RMp583vjOtIbR&9m`uk z-N5_meh$1=0F3Rlg1cbsixu38aS)kTEAl>^7>r&$r7Wp^i=g$WMiXh>+Um|xP(9u0tK@a_;r1l|HMY7hf3aJ z3Vgox;QLC*?{&044?Sk+))eAhO?ltDOv=2U#UQQEw=S1biHy_<8|m}+*$h)hO4II> zD>`sbvXpu&7%K|hK3_xKi(;Q#t<_KDg|o)wtMvtp1T2?YpR4XWonAjPXIH(xMUxP~ zleZcw`RWBw)aoYZns%@K+s@wT_uKfBAszzNj=c(4B?{gGZ?tj?ePDI!Gm&@pUqSc5 zngLj%ckX~(>@)Ar$G_k0O;=?L`uJLJ;C@(pkJvEp8q35JY~7QyF#rU+_1!<6|2&NR z_4n|NLgCHo8$8zpbDFM2MS1)*Q&E0nAETe(!&`EoR1~)a*-P4`$^c?BpV-f=)X={> z&(c5aWArxra7DaXRwC1>P(7#V8ah4Fbz1B?JxZO{_?@bdI$dL*E>lR*sdv2Vv(@$4 z=K5Ta-Dh5QpNYxCWS7g@Ldi1OO3T4kR!3LE=JwVb;jG?>1L{qk-b4axrrt>6>rI1s z;4meS5`8IF?j@+3y+euL^BN;azRAyRP499dYzU*PDPIzbnks5$1NO>nwG;q^7HPit z#K3C24#|;PiXj{@s#(W&Xzsc~?@TlQ4E?3ODR|UAMn7gBK9C1m2_MLCZQGX?vp>4G zK&v=(va5QLt9o&E)eZZrL{QZ?UrbM)ASJ=VfxJT@M%%tl_qMzXZpKlal0UR9fb{>) ze+2v2-wsXd|DL%(?;DnbOIfGsLmmGFD$6;y7*TBesgd}ZmGRqjtbp7g+)A@8RnQrK zLZI*1rXz=>7{eFVLXrmZ`Q%izl|`y5Dv3eB{eXv9T*`5)=Y|#1gNQ8OK3$Kx4P?5m zR=SR)Px<0)bEa3Z_zr21NdWg&y@j8X5TS!u7mp5A*R3cs@U+I4mmSTsvTUhQ>b zDph;wP&>aoxJJr0C^7=!C7>w0s@<+T#lw1y__{lGId+(k=?7Hd1`1ByU2>k;7AEALk@OoNFQ zOVkFXTI<~}J2k3f+x!G84oLIP)8JrTZea`N&qRglPj_BoVzvq;90Q!GJTQvQ9|R3| zbl!S7fP`RG@w*oD!6El5S;B7RJKn0v!>*~qv(RVc##AG(?90{od|F7Ld|!2R=M}f~ z<<&*df3-WG*wl|NlD{0!*hr4%MBa}E_ZZ@Y%0SC|_`>zw(Z4|@!9W;QFdFu#8AMderE4yEU5&dlc=90+s z*Ijj0&R zBj7-{fuiXqR;c+z{cb+iVaVlR$Um=`d8o~AH~gpoH*P!rURV;67r7T;_yum&D zT6SR2*X84bMG-iAl1g=SdtURPwzICd{+l;97qrgqb5(O+QN{Gs!S(@CVk~qyHxv}* zzWIJQOU0KcSh`^>`g^VNU+%|2hDd5Zg}p!_g;nwJ5QIW=;J8x-L_s}xwH)khwOp0H zeLB?fQ+w2=s-cc=^P`rl2h#B=ikWCH=V=u=^()$TzHot8+&rMRe08Yf7@q1FM)D}W z@ap8`kDm>76!3$4EC0EEtl5vORf?=*CI%bn5B8RaDov!u83Y{iaXN_%{DskhlhoO`vMzmeY)&n=g%QG3 z$Er>$B;m-4rP{zd{T=+t$?20bx1aGqD)seKMG+(Cj%`$NZi5)P)lDZXymZ(NFvx4k zPhZLTjko8!0}!ZxS;OOA)nPZV0Si{oT?{sImDo-Qrz4`^MivArZQ%f=7-OjYM*Myx z-ow0BaMCF{`QD!;bn&UlDTBaII*=Giq3rwL;JfY{@`6o@uXH8OyHCIqTkrJe7u|lv z%mIB7{hNRa5DEi z!TaP`3R+gawaGHRN|9(~s8B}kAw8(@gQKC018K#}hcbZW^_>Ee6EQ<8r(oYL)Z2%L zu!F@%<>$Jcs71eCZfNbD8dDYaA-2Xn&G-3idt=iHYD>D3;3AF2yF8}RxLku`%$sT4 z)up5jk(c#us230FG1NEL_%RXae^YD4GUV;{jWp36-N_{y=ut1?ucM7FHB1L9?bE5; zot=@;Gn>zy)_JqiK^zOZog2wr8(H$FBdecno&VVD1(dDHeM1b$Rr8yH5v}2s{%Jy8 z_USjx0G$4CR(oG8tPk*x^QPM>oZh-{@~Rt~u4$U3G3i+icSE&rFxV{` zRu9`uD|24z611j7!F&JE!5#NfgK40UmPRa!BeRX(SXXZDC$8Ldy{BAbk8+4JneooP z1e?=Es)#Bc4gLQCn|*+uG44;mOTs5vvoZ?Fo?`KA3xo!t_UCQiJ5AN;wu9?(AOG{GNVok37}t{}UKgFQ~8IVOsYZ*~scg89$_Mt4m>!kHnAt zoNxq-ARiM9+sEJK3f^!Nbq*q{p*7E1T9V|g4c0eRC6KBVQIP(cXB7?J9T~hc{Mo&L zA%NBe6-NtiX;7m|95$$@U4x92+j4#xotC)fg;a}PvIF$MRb)bwXxsj4Al$n~yLYYUT{st)H z2^A7~hxhM+G8fW})0K~^_VYiQXO}q|)L~q+wX$Wba8IPr(?+%emI$rqt2DlVF7NLF zT~sZoE)0p#IPtj-UBdhjx~Ru2bXo9lfG&%#4TgLQSiToz37Ai?l72K`Y)SH<{RnbH zOBkO8*$i06(zpZbN5^G>wa=m~uwGJ^1=bH8SeJ!*fc2l(1Y=x%zN5rFLNyE^dV)@1 zX<>w40;;MOR2Nk1XxvM+I;chr8Aly$E8QS9z^)Jq52eVrD`32C$w{3 z9=thqXs9F7TLfW2t)+Z5{Dmpm0R_9f^qZ`Km~+QB{Kb&OSU#qI&hpz^fh%m_ai7$- z`Dp*6>B0I;JT_~6uDl~_eV&vm8=(D%Zhek9sK@$TN;3}aPdINM>k|Q_yRT1c-j`Y* zRnz*|C+kyBr({$wJN>&BYxroIu}8_ z_Wg6sEV5mYLZaue7GMeLw^IBfUAaSG1K--pu9)6@W2oaLzE30W_`0h?9ZUF5=<$`I zjwe-ix8?f#v|zb@cudxE{bpg-a^<74q?gNc%hhyXkLCIW&A8>7Q|Xq=3FZuwGNGnh z?{{CWg`nn_ASYGRa@i-#)j;FY@7;RU^GjSxU1qJW?z3OIG_iZ&r6Sa;MmX6 zAL@b5?x5C%6#D}8-t-666RhnMSWl;QuXL^hb%QMgORdigY25Tc0P1gD>4O^mVQ|&I z4{T*w4Ygk^h@%3w800g2$3gkOPX)@RT5TxKg7B7(41^v0$2lmgm86f%5BBQ;J2Wd$1DIB{wM(O z{UiMm6Mq9@?1sz^WP264HSr1TWhY{xKpO0@;|_D_iW~Jf?y%@4>(!}mt-ou9{#lIQ z^A`&fXTlWG+4m`+nS+JV?zqgmBp-Mt3i|$&Z4dH-{GX!%x;&+w`?wJG!c`Q9TCso5 z=H&NQgp2DmV22sC&nXK;?TjV}qva~QMEzvZ&OMC7D_YbIA?>>^&2!SD3j z1*b+E<({|mTt8`G#}QdLbx$;dQ(g-7A)s3AUwxFC+_wix{c}eEimB)JM5%i93`!Y) zoDLT3j#7&$@+DA8)r3;^2}-rlIOj)O98NVF!reVgU1s6bbBhCUM}6FkK8xZog88**t{Iv(S31Z2KItZ#MtR!4r# z-5bXLbEx_EF0zl&7xUr0y)`L^y6=++zR0}0kRft^97aC^Iv5StqnhbT;=GgJfeTC^ zga{;hWoNtdJ-&!zwo+erL8z{bVrs88epq#U7AB$xd{@kSO=om=a)3fv-M%|G3*CR( znn8E=$H;eeqBfIX#}J{jeOz64->@)G*uPBalfisl(0c9JLU>(>1a2XE7R&olnpp&^sEX5;i>_ET@;IX#du`KH{#v6abrTp0-d!Hnq1nX;0le~X94-bLyCa+ z8#{Fx;(v86VvVBNUQ~%&n0^s=PZT%(Wg74MHGQZ;@2Jop_5KnK9nbouI?AmGZA^<- zk99E?-hmeb1A?E5Fy1N_9lv{-zEPBz{Z1K=%sqUyTtH#}(c^{$O?0TUE4P;#ZZ&b;GaQu+ z8Qm*&TK$vt)l0UYTM^xyTa&w7NHPosXuk>_jr${i`!&4||KZF2O)vAeplPKbWPyMc z6s#<@`}eH4XT{&KvTs`1b!w0E!-2P76V@4xt$w~ZL4mQ~M0DWCp=dsAH+h?lS(z1e z_)P2fGWQ-uKG_sm(tU39L)Pz8VhWp%4Lwm#s9|x_Cc`hj_G|hd{xVAb`lD1-V$-Ri zC+3bMtd6pOwqhSzvA3<*MwNg_Y%w?vzLGmpyI*%p;N4CTySIQpz^ezodbP`TL)GLg z3sl%WG{&B|_!wCmeEbA)DqYx=C|%x&#hSQ(dkmKJff#iEm^#-*bCdsYOR_uFpJ&~{ zGp~e4qGvVW-8+-oVCAi9H!Q3KfNX4d$E6}L1Zy6uRO#o9ORoH}T(ZHr8BnRkJ0qzk z`Sxrv#k~De{!bxjSQJ_2{VM$|G4!0r86PyK{V9)A^CAiEWY2QN zw*T3g%bgd|7p5!hfwjVKlEqpS{!${pd#U#yOZ=6S1B!(Yn2fNEgV7X8*1@25T}C^f zbb`NjWdd(qB=#Bpd?{=`4ACz%wx}*#wL$F4;0_J?)`YV9PTlYFdzJKPpM&19&#GhV zt7EIU8Jf7ivc0t~_&(dU8%Cxc&dfsjuNS(*A6K&Pv5wldY*mY(UXB<80xO?SDN5O16w$^AGI ztAo)uHgbf%yXgqh`rWE37q}`lyH>f+0T)U>nj>S-@FL$K^_;DO_aE<@HXZb!5`HiR zCADr|e=n62L6Hv-uO3mml>wxWEhd;cbS*>TYv!E*vIwY2pMjq`|8N= z^m+F;I{ES_pz(PK+^>@S&8ElQzHl)w4EIA0_kZz+ZtJ&LIA;9w-nYf-mCadc)BpTL z@E+%zvoAsF{(BaM%WtmDRM3Nnx8dP*i5_aFYn0gNc$@EuxBJXtw z`5oOLm?`Y=z$O*c4?YoOJ6<=syMnVJ-Xrw^et5mp^FC}(^A0$;$)AJ&A9?Q{9%Xg) ze<#3T6ygjD8V_ht)S#jPK@&BSaF7WM5`?yhhhkM4+o}OG5Je#&2@;3V)I+sut<|<- zYZWb}Dn1HGIe0|0LZvDmYVT=$T09g{TJwIsYv1?GBm}kn{r-5b_sw->?$bW3z4qE` zuf5jVYx`}_^9HNUjfy>N6Akm{3hnO{CAGa8)DwFTDzU4H4_1?`(6+Q96+YuAvxH>R>BNgewVyDXM_ljb? z?@u(YDvE+N0bCR(4ybNJ?Fi-n?VFCyNe>Z+mZ`K0g3_o_rMZfydh0f+G`3-uPqorA z2=`)-2jn`^y3O!=TnE@a#XAZ>W42GP!?KDA1;w;I)d?Y;9vyye$>7KJp|?hhDVkrL zUh6UE5mjs&!!7@qUQ)&k!JDU*Gm7{?z!P@@S7_iLuFdiO`ePd5_txghFg~pAP&{ zqRB(gh(49G_vMR-)xen*Z*rUf*p^JY_lvEnyf}K@90EfC3T}zDM~az4Zr_})F2G9- zpJXlUfVbSXs%x~kUSNO2E5;@M{e8H^qA3BF=p;xAVMX4C_>hzH(uK%rr{VQTotK>#hN(Kny_a$ z(eJW6QTEV8U8HR$YgyvI^a{AIg5Hu69cr`)g-QF%=t-CfYz3-PlKpCK5F3BFHnc*c znlltQuDpkIDZLs>XI*mP#qsR2jDu5VR`HcBJEH?WjjsADgC%w#-uI(XU6yXBJ*F~Q z$B5Ywf0M!T++ILPM1^Nwmog-%J$0e+geeC?;%q+Jn3|;LG&a3|azuk#OdF90Qft$l zDF65A{|fxylPrR)FFC)=j8ll}c3nKM#IAP@EY{Udl`4n!Dixrev5dFmVoTZv5k?CQ zKf$YL%Q;1jWoO?EXVr>$Qla_?9vekJqg zw4O|x*Rp1jyzL;k%OGNYA4Ghdtfj_INI^#5EnM|SzwE@lPl~U*H#w{$$$>3tHdAy@C_hY3-U?DynpoIZgXS!Fo-`eq~!`}<}=Tj&YZryvh!#K_f3 zt}!Su`L9E5JQmH0d&zyV?r&G|iTUMPo8QB|yzEmUOmg1XWz@xqSk$2*Jg+!Mak&UX zL^T3*C8@)Q*Q+|smrdh(tE6*;u@6G>A>1ob8A;8^*IR!PhMc{VTwZK%hc34QqdUP# zW7+S1sA-Q*bjWF=XMHrW3&blSz^H|gxRUN7uoCilRIt-XTNu>P_%Y(RYaxW zNru|)goCa9g{If`Rv&5>DxgYGyF1PpsPYzADL#>n(vF6WWPLm*0v3AyO8K7-^7~Md z-`xSlRBvQ#nfeKT6)r!47Fd(xt&fiI~uBo<_?n!v4h?g0|!;;5DU zG=3dRa^s_nKR%k(*WQHer>sr@QSLNEt-26o@f7nx?V?KWA&q_9P}NDSzIPgE!AA3R z$40*_U|;FHl3K#~O{3y*^pHC$&h|ojEjuY5y0YQ{W4o$J(~DnSVrY6dOt|?a>{sZJ z*g_-IsD?JsttT7v=hn+?KfOh}RipG8{F~p+{C!*9aUYxngLP~^m#I0mh}xk`dY#S) z7!7{!+)w*X()r362T)2C8|1d#;FAaYEGV?C(1`2T8$?_jFyY?1xVEDr5E{*#3bBck zzyE7Ed5aK0JTtFxBab5Y-+(1*a>=qZ14TUVb0Ee%NmAp zS(%6BRDn~&&0CBMx!Q$B<3^1uYlM>`zO|w$^u`?HhKsAD!dm535#x?^!Fja5`S{>` zlRNv+{$&0q2Wb}yH4&WA07Kk7JK9*bHK}ox=S^9!X74Y|WPqPVxzoTFGsbrB(SyMe z3y`1yTYRA(yhFY1zhvYavrPAPw_N=TYFuW zey91D2CyS2FM;r*`V1`@J3|!0hp3+&vO%=((u)6jr+wt;C+rvE^3jnTrv5bObQ^fR zSJ~s$YUt+OkgeW(M+w0JeEYGBW^`hK#9$ov!_Crfw6h1VTI5R2% zmTCG-!g8*hH%jb$BZ<7^-HIXPj>7Wk^8~#~4?5uDytTw^NGni~DzK1_zRSct+ij31 zD*OQr z^#nH=!_$=W%z8CEKoz^(K-IJY+yC%B5KUm|5lb9(eER}!j~_UO?}9ItE8YUVbj5{Q ziMM#}&1&q&@ruX(359sif7>O`kXI$+9t{^{A>Crr3}aEV7$s%fzQ8ocTzYmS)g1^N zu-^4hk^+Ey;1h+oD;phdrk+^oCg)8nU}8FfRm&yzJoKqB*}#4(OggMB?y{v<0tQ}( zw6y=d)IK3`q#BxP5p+!aTT~YueW}Xld7C|N^mbgJ?@Y&*?k=ZSWt8Z<_b2~jq5rYK zMoRVwb0{d#cUBTZwe^$c=VqFJw@~-Uud^t@yD$4mutk(TiMtWkw5Fb$s|xiaga1|K z`jMIcs_7bv2HlDx24XV5b_44Z`a!wXl6qZ9V=ZD%EffUdL6$aeolCpOPuuFJ6;?F= z3QOL*uG~Mbb!l(+)81oO*qN@${L8*0M$b-ZzX$`V$Yp(dz03NTpLM05#_&ir!Xy46 zKKy;1$V{lpz$n&{F-{j^*BwA=i&5xY{buF3q<)?tz%H*WNh%OHhy-lqbr3w_+w9uWOJH+q*g2RIQygGm; zwIkgTisa=w;t4X>XZ-g8HlxP^_rgV*eMI?l)jPFHCi@mN%0K)Kg}08e=|Yco#MSE+qdWd zwyXtTw$xng^~PM3S=zzmeAY@FZ^5sX3rjqDyu^CyofSej;d+MB`y96snHAwiE<=%7 z;u~@qip&!8n8|*P)#cH~Rpp$QLloA4f1N{|(j83_a!yb)^XNsLkQ(X^#6dmY0TCx8 zIWwJ6C`e6QwZv&huJJCIapA*vE`Yl*QB7LQ%?&|N_r8nhr) zmRSjX;xg-2Qi`Td=4w4U+h|I8XBUKayyx|MmP%}cl9VfMw_(>bSm{>KX zQb{J(_HX#YLZ1^Vv#=HcCWq&5kiR$i<9nG}v8^|o?eqBWF=PYrUpLgAC^QOC;c%+1 zl2azx3kCQNZTY7pg**ugSJ_+E)>2Rzea`f|){(}hc_khDx$~+rTTr!c61;;`6(7D1 zE^ur}T%fVx%eX+#Cp&QgoP*TqH&lNL*Z#jd_&=-Peem}L(4Zdgpx*!Y2S4GF6)0W& zwY|0o881)44WQhos%vX&P8@Oq5gv!4lMNn+Xva3o-WOAYVczJ@qlpWq!WPO_oWf-B zviG|_;tW_n=-EdgFAZu>qr&I;`o^nm_R3$}a4$#9&pj1*i*IYcWnh7k0KUsgt0~rh zc07Xq^`EUQz8C8`8QOn1etb!U4<5aRYaF8z2t<&VPo-Gr1ldjRa@;1FUva%A*LCd1 z<;*tk=AUKFlj6kNtr@I~4Ca7cr!9C=96|{@sg5z}`*oyMf6SlyqH^$yGc>qzT)AH8 z@V7MmfAOT7{_{*cZyFe}v_W06@E(3J7T%)-O7cl7GT6H4jU40j5BGF{TXN9Oy_kMu zHa#w6xe3Kt)M-kMe@5_LT zOB0&e*?Bm9)#e$qYHfq~`?YUWTeiD%Fue_If5BZ`n&xu3JyMvIA4H05+Uzj4ZpAQ; zSz|iTF>9}1M3aD{o^Qd+A?;pc+URafcEpIFvI#+DGH;dn>cfXye&4Gyh{wKar-=md{Pdr8) zIq{2QnDDBz>agw<8hm3!#`j2FUaiux^4zwRXK#j8;OmC3(<|AerphKY zy|U$VwT&>q1jENeYO}Wm1xaAe>|meDV8eXC%=JR>m3z&1zSVi0n#*Y?{|m&$f#s>k z5c-1g+WFcw{@3Gl{){En_}=cu_e+`aZG^~}x}BCuzFT5f7urKpNn)BNpOwp)e3JPO z6tm8>jko{Ew^>O0tmjB*rJ_9f_e(OMUHp* zLo$MAWq1l6roZ`?js@Z|Y`@#r_MaTYc)Bgbc(RaxxWi_7zt|lQ(f$*0t$QcuE%iD~oB+j=mpNv0Kf#%?Q z07Y0U)`LU(6j@~btpspfBDfZaSjt5#QO&J9R1uwoiq4jF3f1aWou=-36_*U%zF6wz z^N7#+_b2HfzE0~e}3mKUM2fIUx-~whLpd}kzkf5rZrvXTc7)=DADK|tIKF? zo-R6a6=l0{R>{yQ{YrDZv#p@~<9@%3Do~&QOa-;Z%@?Am4Sp7ry>wE6S4oLx4hqaO zSWa7TLP&=Gahzm`^YDfoBS0Z;$Om4w%%>oXSmz0Vbv9YN2<^SmFe<10HHjv8%J}`A z-Sq%W;c{UDT?O6=x9>KrQlDeJ>^y2R&(1#l9Oe7`sa!~?@c_1Zy(?k2lNRA9ZTz@w2o8LJb2&boMm^3%yG; zl1OX~TUV|X5?tu4+3Fh$q*2WJCBgY3-qxjR5+sw3LJcJV;fkM;hwta!51@MC&3v7^ zMx8`12=matDkpbeb-r?V;YpO`x4*=lzs_U`&*TV&15w%Ih5>xCJP;bjj6B=Jk36!G zSBhkYuK_`Zk_~$H7N4SUFq&_Z!lPn<*e^@gHf$pU;+n%6 zB6tL(EIw!y;%_vzQhZI%EKO^kwR zo*VHn4Y#)q4!$>h?!qeBjGFBCiyNJa0z=vsyf7G_ht!Cyjar&l8vicx-4~!gcpcmj zTK|4C9EK?sdZX8ZaG6?Pta$akc0a^DZ1GK)U$Xz$gF*a)Ti<9``TK!CvwZhiIt=?o zF^|nF+iuklksrn zkop$yx0eNY21Q?q?_G^u;oCdwmEDp3dI8Apcgq{?-qJ{b>R&ztsxLgzq52LQ1isU# z_LlrG8_O1}Hw&X3Z#&R815o6^z-5}?%8naR5!ycU*OG@(x)z)8Ou+O?I@D*qYO_q+ zy}|jw69Un%@q?)fMrG8Rj;9!tG@$@P6ke_MfoX^IRNSiR@8(ZHmPuhRzN6{Sk6!%t zSU0Z~d#Chfr=C*YyM>fEn{fWBr9_TV$#9*}{$VD{eLr>+Wr^m#gN)qsM_yA7JIW(T zYfzw?P_8BvVPEdq)l50?iu6obBHL)5_uB`Abfl@wJZT`kcOm=O@v*=^y)#Jl`vTJ3 zkFr3L{e-#uvHOC#``>5!ZOnk=JrL>&qMI)74AFqyAyO$|xUxv2p+>qA^@P@GdXMIo z6^Pt)`u*h{R?PUBRYuz2`(VR3M^xGBl&zj@Hh#QA_NCp){JsymC23UMR;6?xP<;wN zi3a?{yWx+R2^!Z-6(PM89q^%3NssPhj+Xw*q#diQ>PgZe>iC(U9qE1T41ofncu|0no!8|-kj6RpZ=(tcWZ>_MPnuUl7R@{8}KYuHArHheSlyzBi+^d`eAv<>y! zDAR3^k2*0WorQpLJt~X$sdiFkct*pBv18(S_4B(;AwK&7yzCKfUQX(U5mN7mn}5Z< zW1O!9?C{n%xTe zMg^Ic3zsIT8(V5}yQsi(5lEQPij}}&Cfuw|5NU)EC9J#nL%8`-d%fR`hEvCm2{-?o zr~0eAO$j&S>_hTUTd9r_ak0YG`8D3&_pxIxt$eU!jGL@BZ{ithdA}LAiv9K-sD(!! zgVt?D)CjrV%B&qYol_alxMoC7g>3@FXk6LC!M8|8Pdzvy$6Im({=)Q}wF-q9M=0sI z$Kgxg5K}!v4j1RMn%qudVkRz>0u0u<<#-$NKojvhe<_aYN9YDzttvDW9Nqc6BI&-T z8SLPV@3ptxSBbfNz~|1`9vcdC-5?uq70h*mEa3RIsVqjvB3+ZA0|gj9yWxj5K>XM8 zb$2OKQ;qjd85&8QWxUq~HW$BT;uco|+~?pe28Ory!IaXtv%U5>;hTu^>%-TrRYilC zxSzFiqCVq{C^WBrIk}%X{OdpWi!nk;swCey4t@}{g?vO|L z1>zr^SM$R~@3xCrE?^i9k&ZLp-^hF-J2ptXi5Q{>Ialx3_8sN)k7UKc`}fz=VfcUp zkW~eXtXGxx@ecb4=vz`nI5m0S)A+UXHm}KNA8?OIMg7hbm5h-);&&Nrl<4%dL32lX%3SnusHSe&)j0g=C5J?{DsJN9zrhj zH8U_Axd!VSkwgO_E{d-32jpWG60 z-TpPyb-9=>DSTRteffldkDsK%%7uzz5bd9h=Y8CLGj34|S7VwGs*`EJ7gIo-b^tux zJDV)RrhmS3QQG-G8M>PUZZd7ub^x=#+}EK$z2g>U_g!mh>z6KX-2T@~eB2cZ=n{cn z%!rx^a@>ge{Q-<9Hq{Rnz{P4oiT7^Jhi-niZQQ|Yy0(z6b-(Gv{xjv~sfLKRusIvZ z)Evk*-J>0EiETX0N&nu8x z0wx9sHRAfWD{EpVrpYgecxD!qL}|kaowOWomP%+w!+Z`~4mTgeef@mSTW;>pUCc}j zl&Veq8nr$UFs_Xdns+HIJB$8^k9~s;=4BR|RIa4gT`6d^6a=It`j`w&-hqzs@9&EN zno&j)!WkE(=WnG#Lio*3ggB==H3>mSu|)){-Z}<0j>Xf}(BCuWro=w!32?n+=+W;Z zd^M~Q-smAxyXN0fulf_$8!Ofc<(lbTixdV%TwiMcnlVE*c{iFYMwDBr>8mrJ-6W9G zE)&!wuD~CwK-TAXN^GT>LXFy7tYT5__AX>aBmzZz;R61ImXG_JT_-Dv|Z0v{E5R&XIi`b zDuR+}hm*YouL=}8RFI6p)>!DlDv-nMD||?!RV&&LW76`zhJW1Nd=Zn9ONtQ0lop76 ziwD;0WioW~xg|N?%kM!P$^7fpKGusix3xqect06i1{%wHT_}>lan(6Lwn8&knXSb= z8_nS23~}JJU<6Xx@|jFJ$_x=_!_{zG#(`K(jo3>j6?K{Bcp#}Y@!5|>l* zMz?jIGV!B|wY(i``9~JnWnt0yo2FHGBF#C-yufklAZ!9-cDm$)mDYS0{2T!#E7%QB zbuuv2X=PX^gJ<1z{nYSd@xwKL7hA{q^Edr2kuF1Cm4H17DygKZ#V+b3d7`B8-Zyq( z+q8Tm5##402Iz!$-2g3*nh5`sZ>I<7?SKlhd*9&(s2)2FP^1L9%9_N|etO5z*|$0y z`S6H~d=R1{hkGcE9y(DVJo}CVfe+#l2WLP~DnMw_?n3%skDWl^?RwtohzZ#pt~NrD zGh>=dEdFi>IMN*Z)%hw^k6PBIF8SQ&*lzwE1=9REq$Vxb0e8JsrY$isjmL2j-4wem z6Q<7>M1iVMBDPcOUzI*Wnk10B!iKyvGzULsXKth6cyKCs(j)T zEN{D+D(=gaH{B^X*}}Stsa$S2u6Ec7h0YB_D_% z-CNF4-t8x=3I5A0?&wI-hXroBg-qh2s#{#tU`_TbrCl1$8d90T5InoNP@v{gVSy5~ zlF&P{46H&G)7_*4-9ec|{nGkE6=*D~0`FjoM=;w*H495^(cn(_M;}ysN^6i<%O1SWlweU z1wilT^CXlu`BRnXI*mBL(^w>I1KcbjgeSouw0Z+icg<%&`Rgetr`#LNlU*n0!@q$hSI^-dHx?GO*3&9CnY7rXgFgk7RPu95D$o z0VBg|kzpOxQ6FNHqgc4y61_=uWBtBSVgTcr9O5n28bLME$kj0`EhU+RAtMu|2#C6K zL0_jBZ|U5v#v^yD$RJ492Jj#tu-Wd}N8-Y(HEaTwYa>6SNwig%?Gbi95}&X%>?k?A zCtIHl@_94;Ffwn27Kz)#tENWUvClMby*A|CHY9C7ie1%}{peQkXY`?LB}u|JO1GQCg(ho~P@4kE7CiGJh;(`0Uu zem|N2hjv`bph?c}egsaBkX0zl(=9S(knS;ka<^vP;Fb5CA9YyxsQ>Z*0{l)mOO@_< zb@9BN&zxCbjAwZGEL3u`W1)2#D`G2lMT)m8tktdrc(SWofj~E>7^f@&V8aQUwShCK_HMgQf-A2w^i3oFZy0hN% zREK-^%JMG5#Y#h}jB2IHKffFZP&|~Y_5e8JuBKcMR$G4CVcmucIFfLq&AlaD-S|DN zqFo!y*g~SRAOoxwXv6e9AO|}Y+PyO__}ITkI_-$ow|8FUc#6ZaR_;Oh>SqSF1IBx$ zyj{}q^CA>T0so!F28AA`^I`uVBiL|Xjesz=PLeHajTx*z_EWG%fAwFk6teo$iEt6? z`NTfXj|_%oY*-fbK>j8FiaBo3clBB2b~)6&=GnW^X=ZGvzMHWU*!aE1AA5D`lSOKw zZH8m>R1%`6Z?pD=@RYroD4OW$)xEW)y=@=$aDn$c_l}j&6^F5D*BM+~TqlG=+qVBI zL#@u1@%mLGykT)4;MDgz45zQfUrrgE<}V-AcEw+wfgJocS{FB~4eE%xaV2tLs;^f(IaObWSYS46Lp%+xINZp#4xHH+uDo zrTRAplo(`nTdf|qn!hxU(UvEKrpB^7)m=L*mbk;?IhMFLk5XfaUqy6jdCS`yNX$QJ zF5Abij7(^`s9-|NsKN;?-v@^4l_%QrsO4$7zQFR_RA`q4Dgmt?nBC%oZR@nnW}PkH zO@4LO**mW6n$%Odl42#lE_L#2iqd`Nt8RD9ccp>jGzN^z!yQj8YI1=xuUpj0cRF{` zW0p?KhL+X-2}$_q+@aUuTb?0aEK85|-rx6^8;IK{Nbmks?P0`MMU&SD1;98=|Ke6^ zsxp@~t@nxX<P!zMN;Tjs;MRg}PnZqFlHtPsB=g4ab zw0>(?qjJxG2L5>GEXNPd1k;^KFn~vj3l!=f9b-1=+nMw{<65HEB>-? zKw6C-81z%si_@W-R@d!#nX*FT*ssS(n6rI!_>l&E&~cPw@U}cq6!2&tb*Qalm7La0 zk0lzmkt~*IQEygqJZQq)jV6??zw(>J4kT`^2{kw!eX{i=&i}QAkW^DG*DGUV*?AK+ zR#_=rzmaF}?=8NtJ3cSkvOup;M`^H^o1#%wwpd+_Wk)C{_P0Lc61D4hddn>5A=<7# zuI0S-JJVSDu^NJx6$NheUKCk1c8nzBeRf6m0JXz)Gx*Q)pTz|{7@vy-S>pDUxH&++FK+??-8P3qdPvJuE0oKk%#i2 zhzS|_6G4L6Pa?&`azLd+3fq3+7o+_eS@Z^2Kuv@(btLo+(R|}M;!*M zWwo9Rtzt}|pL<1)w@A)Yg+Y)Pc%gW!F8A@)_Cy9>o$pkBcwuvZy2cOCHY+9?QxENB zd~C(!yrhS=MXNDpgPc^&wT58w2OBw3XI@4G<~E9<0jt)vhoi=e5*nBlPB-v!dN&l= z-QsU!pRFDme_aNlXN*gsUHpjzX=T;0^Y#iLC%)aeJ|a2;?mtWaF7umX(Ld~&CIL+e zbo-OeK8##a%nK(up|~sIL1L@~NK!GAfzX=uP(iPanq`~J%nJR-ME};1q%W@}Ls6w` z)NG9Csfj2Y@g>SWP+h+V4yA{jS(B~U;7pN;T>VT$eio?|CCk}Y0I4@p4JF%8gFn8c zqJ0Zyf_1yX?4TohX}o}etgg)SnlPi-Of4tgE15h{nkI+uSRf%11CM;+PHO7O>i0BI zBHgkZtjnBgoAzz93YVqdYwi?!5V#zyG$J|tjn|ZWnPZ~l65C8Hy`5j&BaV!QbQeuJ zMW|QYPaMeQ&cMHPiPA{(twp_AxV*Lb@P@F~&syv&S_8+vOhTrS3P|at;!uZ4)w9%| z-JV2!7sH4p-5Oe|Bgp`QynCg>`mtX#LSLS)%}vSvWn&iRv>k7wQxgM7ttWT;%USjh z05}01eNZDC=eJa2?oH;e8cWooh{FY3bQ zYV~Q2qcWx*Cy&@367$@WU8iAH1VhJPUsNXq6RRwU8%%i6wqx;xatcIox9P(2J;L&9%%3pAaMMsL4ND^qbA+n5 zW;4q$zlBaO0K2!bnYpoSdld4f^I$a8=(OXlZ3lT*HHwe9XQ@N=-6=4G4HD$h(#OKT zL<@$ryEr#Ld!!w4A$0Xcr{;LWwOu;d?;&d*UiM8^7s5=i*TEe+-*%|i%W8A473heH z1+a^CrID-|R%VTsDjbB74<`PZStE53!XotWKX)2EJf%wqdSF;NN;OgB>-BXq^ky?Y z4$1z%AAlM7rkiOeTizwzSraB z<6}95>dxH|We|C!fdRUG5YdLua-O~8v?ufv4NrX5^`D{xR^^dH-DeW4%O--_PId{d zzkB~pt#0?dpG62=ywhF>p{sn3knCUe0h>0C*0SSnSll4unLi%P$4|F|VRkaf(t3{4kBOOA3fd>jTZ_syL z3!x>wgP;mh!$0dAEEKW-5-_eP#IHT9GDnKq(Pkf!uRt4&Rt;^Q+@lco{x z)_vX7q}nv-x7gK{rjGaQ+0~|*Ku}1Wa}|;vd^_HnP9tTRYm@ zdP5JJUVxLmuns~3n0u6ga#WvpyJZSErlhBHY8b$EvaoLSrhyYN2g}kjttQ$suCB4{ z-BFtBp^jPAUfn!j>elXwk<|pAEzE%jyZEzvagFBG7N%Rl#0-yQvn*Ake^9U?JCqdp zX6@;|cLv)wk33dX=vTXLq$VX4gCmP{Z7jPuU44P~85SPXa9j0=#J2=uQ)c&6Av`4e zpn5${*AIQL;_BHnzB2o0&{ZWrHx4jfx4aVWAN0FdhqqV2AMtFYYiN;l&-sBfPl7c!ZaT;O-;5L}m*3*|;&U zjMr)EeS7d}tRD{fg8;$6Cio;}URt4Pn5mI9xHW9qK#?X>G^}}yOh`THo5bzv7cE(WS6=b_-8JT2nIF8rUMN7sRnr_a zqn*rH9;E+D&E13H!RJ?Q{qq|@@p)Vk!+jBt>G+I{dM%GMog;QlMgI~SI~V^W3)6ZVL%e)F4XvOE>3k@d3`j3!CeW;cKx8Y@CU>ACeD|y#J;P?&?^Q*Ls9qzM}GyIGxfn`Qw?5qm$@9PQ4zB z{IX+px7u^%7B}$BiXAJv5#6)>nP};st~?-6e9XND)#{F;-U0}6;3L96o{GzZtXU3u}N zqAUC`7{t9Oh##n0fRE*=`y{)Juih$x;S4+;$2CBDlWG}aoCTu%JW`4pP&m_<*W0Jdgy}!Z|Qm2 zbfd-=aDKqxnffE%GeTE1w*pMChVF9jBKN z!|AgFV(=bWCrZ#x>)_+znU8&++pO-BN;)6}M+4r$=do&V(s(`Sr&QA?zEj*yBm?b zC#LQOK-&Z9KC;NOH`D)x^<}3HWnhGxjlwCg*xS6Ly?sfyc;1p8;id;wTq5-RHx?iwl@q`8@4ifP zpkx}v#?T{t@^sW@rvu0Nf)nz?X$%a^Uy~S1RR^rTFg7l_gpdlb|rF5PxKQ^J#)vMpuz}MToqBVKm z1K;vH%;dveUxWXR_wie(g=c={3NXMRh#0mBrH)pmK=;KsFdzZ5sP~Q%M+E(_{AeLk zW07Hk$q#QTRiVdGto8mQnK8mo?wNc!7Eu!GZobV3bDfkk15z@ z6V%vk4t-<^LyFf(fZ7F-3>E$n;pC9Vg>MN`Se2g2d~B*a$<1r@3j3vna1JV+P*X*%oCVYz2Z2OaB{g`iX%(2_7;=ed95=KC#wmeX?PgDnbS6JnZCNRE3ssveo9^QK7w_U;*kCF(hkrI zb0V~JU3rmR6aB_Qv6xn(Tw;lSmp&kU=)t2CM{S-oDyMDlXyXU1wsb44nF) z9YiE;3yoLoMx@vvZl@`l2>%9tyhE0~-EKjpR4jF-)kyD5*^Td{Ufj(@*(sNCPZxQ{ zk(=x%TNnb4#Lk0(8?85da1XQ~s#%*KVIR8eh2_Fn8O41TE0-qn}+bMa(aZ{|xa zG+Ie({AbrepCVinKU`$g^54g!^fgV1pQ_TvvWoeZh|50D! zyQr3-ZV~X&r1M|?Z$nbja-^08EoT)53VgRJg4ZTu-Pu*LjBKr)BH| zrjba8ES;n73e4jfKr#}gcf-WpK+4cwswTVR{Mp(d1FC|0wwU94UHajy%c86x2YnG; z^#!{)UyBZUIhy-1_7zq599xi0=y(#EN|?2pZ`{f!G_xkL0`4 zz7%|4J{|v~LJ>nxY0vO&> zC_yNotpANN%Qdd-@i;1X_Rl}}T6-&UGJ%|w5bi)41f0k6_}X@~+629zb?fR*#c2M) z3;5a}u$#Ac?f=G-<=tbY>t@Z2m9Cug9h{AO0?R0>>>f99j2`blm`8?+dBD2)eeSbH zvH*dw-U$+1M3SN6*$8lK!qO<}0F2AO>r#-pgP&HlGHZMpS)-qebxqQ#du^y?=%aMk ztSM18S`B(h2kJ%#Y>p0kC7SGAf}aOGXJxc>%e6;`m-o%B|2%K@f%TvFs@*R+>!VgS z8~2`_*SPw<`p>)1+2YdydbkogT>(T`a-JjL_C%o3GEEub8_j>M?0CDsT)&4mk()-B zS+w38@6vta&KdJZ@OyFX@%&y=dyxDqcg_em--7D^sQP=o??EZ^M^*uhH&MiZH*s$7jE7p8(A`R><1*?&(9gn6jL@#ISz_CIGca&Qb!h(+I3Je zl$*&~rhp{#F@dZ6n{*HSKjdoAO~?S03_ZV*B7EFQi)ksg%;IGL|ErmYvLE?n-5R94 zn?sk=@ZQF$$F|f07uwQkWi9@0R6~! zbxMSl{9Jcn?(3I)&cQq=Ko2Q?p|Z}4mMON~{G%OyCD~c7&*zfxa6i{=f1?uDk!AOi zLVc&);bxCtVEpx`Sx~IKjR&7b?&o{<_|fSyR(@soEU3J*$3DDx;> zqy0`S+d+!(jax__Eqj>z`Il$#`=Fjrh?f0|tDw}gzuP()nwL+V{rom9eUTD6jSzDkfLT36-r+uiduCf4+q*q z*}q638j=dapm;f#j{${TbuR@wwpI28DLB}@tX<{w)Aem%}S&DNI|Uv8ALC&rr)%~D`8!jvhCN0~4(ov?Gr zplD6a>f^Q0JBykIwx}SK6f5oeXuU23V8%&wUxJ6*L_Jl~2|ABphqn)4l7?z&shmh9 z!`d!x_+tCC`1#@HC!lzI`o>N;1K?C5^2g3_^L=`qm&h2B>0oUni4I!iS}g-GiKf$wZeyk0;H~hWs?v_}qq#wD z8rJZ+;fh%&rS@|2ITOmAtTl{}`*Gg@7C)}_=swFhw} z$yU{HhQ;AOOGTDLKA+AjquKetW_oi(j73`4+#BMy7heLh_YXiH6Dc=r1c8m#Yq&yuTOtU4nN_L zP6(j=Bn{svBL!WcF{>ev96lv0*Up3eTy520>e*{)?_ch-_TGJz-`-(`opE*_hL!+@ zhO;PU*u_@Eq9`EeA8a*fv!_5#w=vnTr9w2}7)NUgWwZL{mJ``pe}${HD5&+R!#meH zxO1(6BZ~7}ghPPBWT>awFu;{|bzi>?HC7tT$vHo^_0|0D+gCFFkn~5#cAR~>^6%CT zzX6Gvk$|(lWi1*0t8$H_55vuJ1s1=k5gFIv_JkVigTrW%^f2S1UIUgLJ4RBQ4Q9bw z77wgf5iR4Yg3-eMf^X5BZ#{(~`|Nw^64cW0YB7r>&Kc5SlWV2ktgG;uSw%JVqTy>$ zRjsOv!y@}xUBQW_@Xcq_jT{Gj&S|x=Y(fCutUB)<>?m}s^L`mum--u}27LNW)tDUq z)3GQF)l{twIyW^pT|aHT)e1YwxwUp^>(rpFwcn(rm;Dbdt^QeumfnXb)Ul=3LRwto zT6$Z5AE}e3d&gTvK|`l^Xs8jP_#pmYmIeLaqvD<34$KwlwqCDSwkFPS)-7%?gT9E- zc6>}HV_kTzIZf`^F*3(nwe`*27Oh_IGj?09rnY>#n_EMAIVnGS+xoCRTdSS^?CTFk z!Q_1X0Zo>%1Hb%a=%;lyuWZ}IydtsDduXXYueiui=qD6Q{a_I)Gk&@FXptt?VlC7u z1Wpl}<_ftpUC4&VRET|_g~sWN-1&XN&0@?r1{JaYZZ*|<}On9T2!%>*D<$LdbLmk1rF)v1-6s*A>*dtEymC04QYSEjn^-ngz1r=seK zBRJ!Cd5;{lr+oO#bXqG5N0+RtU6&e+x^L~sXs)mRp{Z&@o_FbKK8dRTQi>mxA-CP` zB;WeycML+X@a0<#GDO6CgoP|0!IeCZ=Dj9Ac~?8}*Lg64{q1qc)q=_W>~3EYqW!-X zwXyj}dw^i>(9=AOV?$-dhJI68s36ziHolS*R3U<>q@_O;Fzd;_WFpTcN+a=2XDHo6 zxIy%B`J`>sHdE?F#vkhFg7`^@vKf!?V>jEM3x?*uIrByNWVt;E=jujX!}bX8eaM7mdaH-M^rR!%Z=r()rmxd5S)8j|3IyUwOjbz zyLJ=5`_w+qZ+`9Cww~mrf0cRwsYjpEZb?&?^j%B(2H!39tA4-BM-Dz#?bZnzl(8g7 z8YIUPFk6P4dN3831E!iez@&NQaKgO`K+rA6CJ?^im!zJMh)jU^+6pS$pPSI~=gLnp zkN%66yq7y6_Z^K7j?Jk(njv;XMg709O7OdP?JNB5Q~QG7zJKM{u5RnD{3JbMYh!|ij_@*gGwCOge{B76Yw+d*xyN^8g4$0zDB++ zBBgcXWp@T7v!o@9WLEq=i)8lw?PjJVLfZ#v;Xm1lZ^%wu@f(dihMYzpUWE)m91CMw zOe_L53^T`olfw_3!mNGMzu|{SMef@;Hleil)4Z&~>fMShB<*n2&FFa}b2D37@}kKr z@f>`gqv>G(Og=;5f`3rX_+B#GOmFKKOY|7(O{N5U#y^qm(yae_52Ynf&V*<9BLb$ni5=p8$U-p<$TiL*?jZTdN<$jZZr}bdmt88; z7%#6$&o}GF!pm_p9wc1eaXE9%?{0S@i%Xlo5BVgr*rZarw**KTk%s8d5b?(IpINlK zF570`(R?WO-XAV6FeQO5X@hM|yv8ZUD0J-3EF=l69TL2OG^M5&j%^R-%VY_V&D`jWTe0-Y*h%+mhGJ1cl2YFtx2(*`N3w> z#??TCpb%}xC3f_{LUTwq;8~K)E7k}s!IsD&F7$2wgdtSK%)tKB+x`XN);?jGtOS>n zLaW3!xDaxY2-mtP)TKi!)`^P`3F$GL)USx z6>HQfR@mLE%=Ja+ArI&a41ms=^^jq^34G3(b)?xRT>nkX^dGe6M*JeTfHxY-pN_}M z(@ydaZMdAp&3nI8h`e&-x7t~nLNw}_)uu^agm2K3tcbWNH1rH0yJ^C`#m!mh`RU&r zZ>U%IeDu)fc5m=w3^L0RcbY3O;XWRZ_H(GG)6fv6YQ%5LaNdW=(9G>e^7l^V*FE6;xTkfZHU3FAg&^h z-r4orgl13)+H%I2dr)UAqA$E34-Mp**he4`2u!B4NkIdj7LSaXyf={3@!=v;V)6W&DP@~D>)(#HVvyKnEtIPZ)j8j=j z8(L2uD=nHFdAv94WkKM-1smmR4NF2leRBARmfSQ>vyKTM|AN<+H%A`l$91xJCTphEA?6SEPoatb8k6s8uW`OoaH@~=Jc70Ph_wGW=qm4EFY zGyTVC$BDSUZkUt5QQq=Rkij1CYrvZ!F&of0Q{EAFY5z-4z}2$(6Th>dcjGzzrt#We zY2*3u>YKPxqUnB0$!L6ZZTT>~;p-wfY)VKDzm*th(bD2LTRH3U+Cop0DksjSlKGLG zdGMG1{Zv>Y{{Sv+bNnGgHOwEEW}e#4_wuDJgxi=NGCE`3nZt5&+mK*H2h>_Y)oOOXn3-$%RJHb&FW zX=GfNOGdrI{!)618a0PTsp&aPl8y6dG+x;Kiw9eyhHzOsc35s3ERsC+^M~aq^!B%4 zpyf1X6Jdr7rN&IMDALd@=F#YU_4{u--pYHMi*ZqT@OMR0(ZPElsekOgR&?Y0HX!%q z6R4e;)jSm1z_Q3uaXWbD6YX=}`f{C>*6-4}3)oG8^Fswer(~=j^d_NAql2D{uG%%C za=?~Y?n>e3Bmc}aQ9DREj$DLy^}7G+H45RKb{c6FadTU*K$I~z1DahV{~5K=iy!Yd zDK#FkIx{_({ifd8Z%)P*>922hs)L!Q^F-T;^1>C64d)98?$Z80ym~=Se5}6)v6+vR zC+(TZd$+H`oAJPF?QVT2N&Z?99n6SC!2*PjO%%y{wzPy7k2bPw4>uogNrS!d6@|oi zVHj&*yltS|;)8T{VKj*v2#%QvLdK|*(q@GgiTuq6mKnsqXkb>8;X-%)kn89P(z5fEF85xjP+zd#EP+DWzi2})j#Vn!q-l|bqFfGul)N8^@Y5&^> zK>>rs2+Kv()9L)hyvlI1p0A6WX%O32OSi?T7)4r=v_rGb(`f8}r7jI?{MX6Qao=IN zapq#T+!(6*I4|bFtmVeD{~DQuCN9nR!2`aM?sU!}fpTAhb#C{^ksiOR9 z@724t3NcAivxEsNRjeUb>;=vlz?x3mu9KiKZls1PkG|V=>T-xV8=_0IAY%U?Cl-%T zimt&b48SS|tSc@`gH>f4KWkB+$7K1x?+4vGCb_2G$v<_0;SP~vgs&xSMZhCa(i2dm1xlK9 zJW-NXk3oHe;9YUNmsqb_oI*dA?5A<*jwDS^I$k$5u_WtX-PNho-1@7AGyBR)RDTr{ zM{i$6lsc3*Xl$8k_N%{&fH~<8-7V=LU%wS@S_>ek8u#BdGACA=8}At-R!3W2#bdk{ zeh#i|V3N-1!92XS;$&iZnFcELKYWGAe{-}E`9r$2yu=LGL-c&izU*=w+4MI04MtNX zALH;8)B|obF|MKvsZz^i!v+E2x36hP)gp_MPHO@;)0X>;RpYEo#mlqaSwq*BpPbv; zc1rNrhDI>d-@$X3gD35;p3J{RCly@Lth1Jb+{0-MqK;sapo)EU+F3sLoDdM*H?F)d#AffFjx5dvrr`xZ9nAZMI^Yhnhzs7{$ z{v*3;|Br#%mrwqi_W$8OYyYsu?YUou0&ie83VaFW6##b_*v-HCtNVXlru|2B)&BeT z(09tmW*ZDROMF9t_2{2${OfuB`C1lW8_I|D=QfBsw5^wJ5S?kYpw0H_L zkc=#Riulu!3=1O;lhrinBHkL>Vd&8Kj--aeWwWHV%^`|J4Cg=SlP0@gWi3$#2`6dcSB`fSo;RQd)IDm<+4xh zMt<{a(Z(`Js5yvDxmn<^CSLW9mzW z#5sH{G@RG2{1xmU+P(eBP~%CM;STLs*Tb)MuB%fgd6yMtla=*P>Z(9jk)f*0ozYhi zzYakMhUZ1CRudLjYqKrggxhG#>p@5vtJTX5>iVkqb+b?M`##c|$UpMm%{gqyWA{s_ zfLjzp1MbGye2Y!{p`%`EWY)Hwu=gJR7V~G@QyEyhx)c22g|grKbrgA*ZgCNLVeX-8 z55;X}O9LXFv2ro_rrgG|qrPB(<4kD!?Z*?ubeqDaJdH;hOd6tbD58hO?1*qv!%xH_ zderFKOmx_NYRo?D9kPwu@XxuM6E?0;MalfU{}lkJm!6`5zVKJj#wl9)XTI3T`7R~u zqbUOmOvF-rxbdJE;jATeG~a1H>pSnh!_5Cab;zDLgTqEA{*Vmyx->ZT_rgCRl3EKt zt;WXduo|P-?D?~6t9%C2R{rTeZs8y1v}T**6bc!hP@}Pi)SwTbu2`c2W#h%Sv3yPQ zkz!*!;vJ*)5Eldkbfy?D_XtI{Hk1Z|UT^Wk z1-ippoc?4(xcLHWiz(?`xIT#VK7-yr1`sf}Xwai{+^#Fno;^$K1m>vs$$^sX{M__Z zvA5t=X=QKmjo{ND_m@7`s0zmt`+1jO0K#78Hh5x636edro?;uzeqkxu1bWj-p1o5n zHD)nwA-rC%f*i4yk%f(Avn{!8`1X2P+LL5L!|SMk0}PYjLsEuGetDmUr&UG$X5j)fWyIcMaS|GVkC+)$+UCOY-WaFrftk%S+J- zoIa}r&pYI6&IdB~>5 zk9;*IumtZGO&NG%D>kEp5MGk~k2)Unf-Fql1BWm!(6}jl*G^`1@AeP9G`LMz5RTa? zI>pg7QCab*aeJTRP}cE4C(~yTq_qjX;z6B=>RI22&jIV zbP}^Bv-nTu7wwOw4S3P-EQ0?x*5&1fZ|s&;s+t{3oC&|3jg@f0A_Kp#Rl|T>P_L}N z93rIngUq=`2bDEGp&U8!OCS(yA)DmGpkY(l zveZ@klO4j^{*{TP^}O~@v}!s1=1L~TR=w)bM)0*>@9>XumCiYWN_#5jt=F@9#ue;6 zeW%UrTmO?~$KmGcyu5JpbM~}f^r_3Q7<|!%7gb-9_Rk&~ZhlA~*~z6+8R@Q){O?~z z>G^!}PI09-BlRoYqFZqnXuQhtZPPp9)|hAC^6xy+Ir}9;?@a1YTK{xu4=ko%$N}SE zW(oG^-}FyVA#KbuQ)RW`n;VgR>kuSo%kHO`*8CTffVpI(Ad2-j(s6-Mnh@U+3|1JU)8Nr zr}VPDk?^GGwDv|m>xO#{^4v&XgX^oxbK__vDog51kBy%|PZZ{1{?u;DC!$lPRGm2V zgyLvvpE$lgXkTS^GIY%-S-U>6-ei5BW zhU=Z;V`ce5+%N&<}a1 zC@OwrczG4@6W=rbXPyxN2fuo0FR=k;GEEYSsih3Vd~R5V(2GqDJB#938-+Wj*$n zXmnU~)!RKVhnj!VkKRO<@v%*>Tf4Ww!|;W5nDMp@B1FI|`gxI`R<#zqqZU>N7N{!= z)u~0^jlHwGU)@1d^i|DH?fLwZ;Tih$`8QE~9RChxALH9Mw(Nm#AJC!VwqIpsZ5*poa~AL(=7Iq&}{tjyK9I0b*p0tD#nNf0(Fu zo#*`5_wIm`hk}yb)ynTIKjARbmHgEDxRDBcUDYNe*Bbvkt3WNh0Nyn+;yt%;4=p^q zBOJc`Wc7c2{9U%E(m%=T(8><@3oq;=72uB6%i{cOie5w0uN| z7VSyCG5pO<(}$CPFUsz}4()p3_tq{}i?mA)6#}+&P9$EOnANv*PTx2$3rgn{7{pj` zkl)4@re{YwePWTL($xrCV50gkpt zhM?6S*nbL4e!{DVrF>}zz7cQidQ`P~yF%G*YkRok@V4^>wqt;D`t`rUI;^b?A1p#- z(dzkjt~w=Vqdh;Fj%Rm|J#*R&S92DrFbjSggv;?I`iLTMDc2YaU1jDVTLoZS4|A$u zrwLjN70n(EUaAo3&!zX(juh!RCbX=n9P~+LG-gC>Osu zdeM0Uzcq&7m*3I>2ph=*ALYEem%XEpQoZh-?Za`ErK?JV=&HZ%SvRB|h%b7Q*#~X_BT;6^^3#kBChpW`p)7H~ngPmv@ z|GOJ{lHX2w^}AvMvfjdK${`5Tav?+gIWgH|^@L>kmRRyZi)%0@94Q_X?h|JNV5BCZ zJANWH1-dJs@FvQ4@alAwlk$>D)6J$c|)U+U3z?wFw>7hML9h z%v7kW&YqVItmj(U@(v|YTA!g@RTw89=uYs=DyZOq-{zGSIw#9VO@M|DDC(}G(&6hU z(Sn{hyLeAM5%fSMk@|dqrA7Fa1w>e@dPE!2OMgpyO1_zT=U?rRNxI;ykrI$hFk)QR zP6a=rj)m^3A^UFz;4`YCgSM+wRaV*ZN^H>TSb_mkx$1-Nv6i0?yocA(($({f=htPb zA6dTVb~&mK8s)jIOi5vt68Jz!2Yb<$IZd+a~8O_!DL!_LX ziKbs;`F3y-Ygykm!Y7qs0|Q#A9hfGT+JTTvL}cAZ#3`!oW5gL3Db0it{He0^!}-02 zY*P8D-qac^-4I?lkV+;d4{bRsIdE&%7*QQ=kXRjVlvo`MlL^TSIa>Mc@WOXg3J@*= z!n2Y+wz`4#)gxuXe=@D;>C-lfJ2OM9D9^{Ky>7T+2pD?WSer`gtatr65 zzS+#MYAT@;5%@O2f$3qTU426-%G3u+dHpU?`n-ZmQ5YvfA1*1SLB0+eE+hz;AFKHY z>|fqo*EThKi>mR5dyLYo+Jp~=->%eMIMJmk(!2c-mX0^;=LY?>@DqF_{@~Sm7v~3T zoC2*FQO*(7Iij2+vdbb$(m0}2nurnQ9DLl@vIDe|#qEbJ?qN)B8O#@`jj zJwALD#tq%_GM<<`{m!$Jr|)Vk`|+O*-4|$W%@p0rN1?mkt^xX=bmrG&Xz~3%+CTGt z_FY5!)x60@yTI_8^^H~j^bCdF;#+-#Y0t09Co7@as?0*QN{TTLs7q2$K@QPD8%=6h zQ<)q+kUd2HjBA2Ps%d9?yO)13$j;+u&#QQ8HVD;;SyfJ~<=zwjl7c`>epns?afd~{ z?J$%sqQo83{+rG!cKI)Ofac_@qKyASE4^cT*L78Q_2gSDc_`g=DEtGj2R_hU3|2=H z8mvA^T^>&rJ z2=VQHq3+wNQS;6v)_p5@qn7h^vBBhR&<93>RY12aQAJ24Rvz7D<$)5yrTQR|9k<|g zlQc_r$%6vw6yJ5+(ipGfmNN^)*(=-EtAnbvOs3+x!+QGm-|J zrpGgqHp+pI0*k3t1)Hp5<(jObVw>y?M7{~xq>C7?l`vwct|^!x@9rl5y!5;55OtxT z%9{SRwPQey8jTCG*9Y5w?R-}-3sP(qI0Vm?B+!JUM~ zmQ%Z+W^QK5Mea%+Ca;6G*1V>ckJb`a!~V6OsnLJ({(hk~b{&suY>gVbox;68+6Py% zaRVbt34t{|3~a$tFc8$zrp0w|BtZ;;tz8!E_~7WgPcf=KZu~R`NKVY_*(qoY|9w% zhr3^4l!TkAk>)z^i2Lsjcm(?K3v9^T!mBiYP<7tD`tTp}2W2$=kottRqShBSzL)bl zGrrjb!YKNZ!Tr}w8r)|DgZs0exWV1WLHaiy{lU$V6yC1$1;1@9ffxK=8P>L~%Z+LF z4@Qu<{vY<<1wN|kY8y`=!2p37Bw!HKprZx_O%OFHpa~{=1}7TORupX0f)vHpkYqwc zE`bS{aXcC?ZGEeKrLFbSo77rFr8NO60jvb@f>IH+>K?}`qAw6=$^UuQK4<1kW)gz7 zeZT+r`}mP_&Ya7>thM%9Yp=ET+CSvs9v<%G;dUOD;Q;@_ZM?4KVIB`R^YC39daj@i z`}`Obw3|CAXjDroNIw#%+z9iMW&g?sB~U-hV7d~MD?=*M+Gtc?CfpCo#*tU zNN{R&KyW}&QtGE6|xcW7nx%##TY_6_8m?mTE1>CWiI$32K?{*qk7Q?jE_9!BK zTH`|tH9P+Z>>QRS=sMZJ1$3PTI7i9f)or*?wLHw@;btDbi^DPSzfX>V|7F5%=5zs& zl5(Q_uMkrwi~mhSJ2^{iB!d7KYLYW-XmbA{ZG^=%vyS)8Zy?JXQ))GPv7bQTV7klv zCB~ds$w|TMIF+7LR@k=0mA^gQ7oXVnVPD}k*NU|=a~W~3Z8{^zIvQrn%~&ip(Uf#<6D$ilw>Kf zyt0+p&9>Ey|A0dy;tRf`wtQWN#v{1HF7ho(o;^6L zC;2QM2Uf(L6ERHdq?f? zO3s5TIsVP5sgeK+v2aT_OhXfxdnkIj1~+I~)(>nG6l&{o!h>gB&-{V;a*TzZK*$2TKPLWMS_ZouA2PYGIE?bV;x@4v29XLs~$M>0$;7v>N`O z8ZIt#G4Tw`OA|p1{5RrEwH7it4`<5)!z+%oO3Yc^twOAR8v2mw{XP<)PPd~jxJro9 zCHG=P$+Fdnd}dW(R~XJ?Aw8hfcszuMgL|q?@Tk&8Q;*UKYHRY#2{tCUxKqVhHk&Q9 zkQAg88^{pY+LJced_#|sGQ@%3HBMv~iqKO1|Cc1NXfd&|20*m2(>?kJy(s8sS|Om{ zbB_c47fuoMyX9UC{VZDz=Q9WTc{4n*hv<(7efW<=|K{G1(0|6krPs&t=V}~!BCyr> zKIoCG4&MM{wTNlvZ`i9RCqu!&Z09_ohRMlFo|%ju=M+c{UvM2WVR~ECMP;VPja-tw zt~5u_Dl^l@!QwR=%mOk0hcaAulG{rA@e}ez5}1M`Jb+@NPH(Gx8pfsxzhO$%Rjd(W z|8brXO%m$mHM7PU=G2ZdbHcbXb4e;HnO%n8{IP;%Z>D#xNCo9;|n0ShTDU91MS-&`2ZEc)XhBK>h@B-({njA|a(RkcBuoEQABTdA$- zPh21Pn!2W9aUjFJa@I>TNk%C^9eqv|RCcu_!kv5%Aqv{!jTx=Qa=Vz+A!0TrZ!|XS z^!jTpQqq3rqXZN9f^TZ2Z_!CaHe2WI5RH-zr%+-?BH8vsR?9nlB3;98X*z_+LENW! zU-3_r0{8K~)PdS?6W4#G$+!vE=oaOogj$GTlu!#1jQ(sdEaNK}fuqMtP_ojd1tA$W z_{^iggd>YUwE`_z7l+qZfQsfVM}h-&=W5u?L9{L zROpj-d^(eR$5LC%Ec_M+C!tGzg19&R0!JVzg*S6V@~B?CE@+x; zPPo)Cmvs1Cf86ZdxDM0HjxtxtX4vPEo(H}~on6Sg<6U+jJ5qv})Vk}}L;Q;!1?PED zXMx1;h%PnG1Fec98|cRsU%@3+Ed&g8Y`ntEycF>PslLLkOP(w;mKi6<(Bu5 zB=$YIiX3NOy*G$gBi|tOa=h46u(uZ*4PrBx66IOaD>0A;fFy`LviQ{L8-sI z)gv+r|JjxjtZt8%50hj1i8LFGT#rb-8wvG_oq!Rwh-Nw4yOKO4T7{@D;0s=}9PpC- zTRV)Fk1mFOfn+~ZJB)3IBGdT5z$&J);AU^|GbjvdJZfc#ry&Vmttv72*02h2lT~uo zO|aJ{TVmZ3Ab{F5EOA@(^YGnx7u2V@4K8eM!%NOWKyIJ}KXVLFtM`)*#jfBd8CGRW z!*=SnVpQYpXzkNY1N|VWx9iTovJVuL@8AOPI4>5~akDt!x|Oro zbjP*gXZVr?2>Qyp7k@hf6PuqCg}OiJQ@k65Z3R^8P0Pg&hW$XvpLUfBeLjtwQBzo@ z`ZMn)^oHMe3Gx`Ui=x)C%BJw0RK=HWAjN=`uaudfLRgW)a6`-Jy;s7`; zimhsKU#f+OE?{*CFs}epx}eOQo?2G8({zSILpepgM7^8N zsz5!M2h0MFvDl>?Iv2_+D)*UMhe8=B=RamoUo@^W;0Pcn70IDT6jem9sY5)lkNV9t zD6|8`#z@%0>h_4O;ac$PcI091)n5=W03Q={l>}nNm1fCrXs?9fri5_;|2qJ@$!Ee2 z$1zxrfvQR0$Df~9n42*A% zD5T-AFI2-9RDX(~|KLK^@-PpFo(y}@demvJ_h{Vfu&kk?>%@EV(mV{XL&80urxz5FG&BUOiPdB_BwCZe*Ixgb z!&1+Qm70ZuMsT-*ES7{tu0GFDl$5O=eH|H^0?2a4{h42hcI@0&ZTNRuzr(dUR!@++ zthuH(l!1BBXyj0PDS(VkX8PAZzaT|bo`=O5lGhB~D$j_NKxjjOg8npGWgSA&2Xnxf z&$&Yb(SZU%WyUMNmioivyW>9g{C_FBWA(3`{PX)rJAqaD>>Xo+^3Z0zZEUbr-SmYt zcxKM|4o)dNv`s$=|6O;bhzKyiL+cJ+WbME%U4br%FOR4eH@XtoP!6UrG}ipfx7vJD z)(6^@`)?V1UMI%R~HrKkB9&AmFQpK1B&o4QAVIW zy&Ad<*3O$lF8L#MnKXn&&*(=r>GvN&g}dS}PT5ahE8{oMg0jeetR#oq02x=fiZN7& z_494&f*D7&ykD>Svj`cwdi;#nT5b$*xGf{*n!&Rh{L7lwV?%57QTC&|q~i(l^(f8FH5(jfRhDEJAf|=B>aE0<9&% zEk3MDS~geu#9WaVMyp~0P^hqmKz+xql-jahR}i_UbM+d2W1RgvG2{+SO9S+*O4YDU zLOj&HUfvSzQ*XQY$l8QL9XF(8^rbIWAP&ItI200OA@(a@q5q|^{zseT?Ee-E=-u|; z>iPfW`qAo_V&i}FR~-MksMz@5WYhM)Tt6xSe;@r78FQ4fJIz1-rTq5-n~IWYdD4rR z)}zkaV&fv2vctEt)T6CksyHPOg;|ltxbbr=`t7eaOZ8FwjYn1gCjIvRPW;`Z*&*f{ zUE}YA7yoVei?qh$?>1ERZ^GaIo1f?@rkcO8yCK_oeiGi$CG!6R^OG$v#?!}iwC1bR z2ec>{ktkhZxxi{fI-H7%8lko&7V>9g794-Fb75|31^)IPJ^p7bv|7I_9 z*h_R(j5Nq)&0ZFXrKJ9ADK&7sUYCR1Gr7p2kgd%ln1Q_ZHl`%zNgcN$lldJLU6>hJ zP_Ejt&ca7bEs-2fuGM%N# z$FwHmHAfms8!Tqn-d_7#(p*32Dt+BcP=>pGN!ovv1z&&`77x}20+Phl3q1yFD<^!B z0tPClY^u|xb>{Eu2|ReQ$q@&45+tg|DW+{z?}W(|=IjSKyDNAJ>Y;n0*7&H}Us2 z*HkhaCJ4Sj&F^!B8>_9{yEFyqn>1$;9z$*u8q$ROcDB52>X+Y_6hD~8auX@Wko~xx z7LCvytc6X@(OU!IQx<}8ng>QygqhX3$Q#&{jN;VS|CD@8G#$-;BlLy&TOV$qg(_b9 zqhs<0`m~>;nFHqh5&a0AbS+N#&DXEj^XmsYeb8xy*xzU9Em2X!O>rN{b3hbHVw+tJ zj}ZcJR4?O(H?*-Eqdvn%A;zd9+|}GWa<5@lr6M|{H(pwJ95!pjssV0TzDW|4wZf*` z(QFj9EgFrr`)PgXA2JGCt0!}JdECh=u(z0h_wCYxbv4`hWn_auoAsLm+z(%z68X8j_7gSeO;{*0c{q-TpRFaNgumGNmB9bV`T))oY<#yP zFQIw{TYv$Dph=uNjC+ zfx{ng!oDehP3xkwkqo|9QT>sO+TpMt;-Y`e@#f-vMfDw-wS5CG{tb6}&)*?^&RjE0 z!{JYlF-I~iq5!e#`v!Xd2vX#6k}v(Y?I-AeBL5d}FK`JJV<*xg`jG7=xV5`fy#k4t zZmMp5z8jcO<3b1vRF?3(c+Rh3CG9&^s4VcYg&$gSm@jW?_Uxwa8Y2G1!_OtJJ@N~w zK*}F)m5(kaYEkTt!R|l^BK;xrZ4wAlaa{IXG7davzQ?Hd0P#It)Grhvy${zV>$vW| z#?KkC_C*yu$<2(k$w*DrMN{k6@huB!oi9Py?BU&F?tNvq zHupmDB8iyk(`#U#&Jyx+dM7_V^d5&w0qCq4=>YXmQMGm>B6nN;vQJVo1{^X%r!QN8 zEp6%-o_@8H(b~oRC{D5Zm-m8gw9eH1n}#NS8=3j6{{4{KTBFR2u&)y? zg}&n9tBs!)kkxoy|2V7uD16@n>v~?ZF(-WQY>&eC9b~$*>K|&?p8(&Z*8ltky8o}} z{zvOS^=Z_9qSgPH_c=3G|F>iH|L_^B|HoeccwPUv&h`Ij6Y7`!mEyeLcOH!OAG!AI z{(t%UpFdyse@CbOr}Y9cj!f)-tp0Du>i^;DuKI6Ltvi|JDaIouq~R-C((Dlxf41uX z_xd-!s(9`rNy6vfd8-0lVmX3D>DPS(5!#n@Q^UVJU|CrhxmrT~nn7KYa&gA>Q z?~YJdQWoKbXaxk;5MH@z*Qze5MNIkBO=XP%LKg6T=l#1yz8;Hxf6G(x^f4Xvf5rK2 zbpJ?bpHcl#CNb2Mk*jnk!^DE^9j`$%qnq%tCvC~u$v~t2@}$+8PS&q3_m33Jp{_K} zDAg4#I8Fcwd`4UNg^q@3d+N!#oMa&>^i}xPD*7vZ$gU*qQeR7KQsjwf9d`Xtgy9fP z-DH@VUc>bEH43-Tn~C_b=YHF{P0^2WA?=%FwGYaV)4zK<%y~X8*rKPJ-rcv2;LE-s z!ZtUllGBe+&!u&!AO=m<@Y@7HM(%S~Y+c*!clclXIvXtQJKJhsC;Sc!A%Ee6 zXG%ke*0$dyX~^N_3IwPr>}<3jS2OiW8nwT0E^HDB+&OD z3oz4k6BzwACRr1vC27KAN$BGwU4QsjJ?%f~WBS-AR#x%Dg#Q1k$NjhB18z*HKbD_8 zj{h)Hp)!pFXDb3$u`A4#=SAD%N!FGtleFb1^day!e2r&u*a325n^fxtbp6+ zH>fCA1oO6BVL^F7(4D_b0;6YsnFu3ietL)fDBgZzTTRG)VMvl% zY|SyoEMhhTRhC#&YzK*C_9N;4SFw-mdLp53Qlry8V(0%C&|WI>HG1NWiL?fD5!kq@ zydGvUz|@>*{P?1jKXJ-T0|%CSh(`*U6;#=;fr7vW1CT!T2^-St8oLdVDBp?WKlb>B zu!y=QFut%S6~^}uqPDrV$L$h3!B*{mJb5R3$bSMKi@Z7)!Uc=a+zf}q_Or+SS{xqJAvU`(wCjMM276Mcj4bS1al6w5+@;b37qo>!>u2E!F z&6IvpwWRcus=4$CfF^Nckuo+j;R>5+G%;0pk@6zA$s0U`C}pJh^94Ut2A2E)33IMr zKO6Gnv95sD@>p`9g$;*|L+H=O59B-II|+PXib5X7usjH6+}atpH*shDe4~r1j*cIx zf4BuZ7=-Yjra^CZTz%?)9<}-sc{v^jJ!(IC(|!AYXcyl}ZTj-<&xvpU`E~_K+utMm zEwHikOWALq{Y7#*h*>bdto=5(2lm_XUDWR6Pe-Fa$c66l_u3=LyZGhtmluyezg@wx z#2FN?qSpC|9!m%<+$!j!1m{$9`n{N2_??N0o4OTTvii@tRKfA;U{e^F2R z-$m`m+<)Us_y4E=uKpW6>3*!k@dP58FRg{$=6w z#>#&oe5jv9#|QRD?@r|t{a|_*wL9tKqNsd}%2$e4NY~NuG{O1!dd^G}J!TbTemtW1|E{CUU%y>LQvUbl z`WG)EyX)V9|NfWvFTQg11G|Q#{d4Tk<+RUa3B_`5puT>YsAQbQ_xtaz6tXe{8}^TK*gvM>TmdbvO-HzU zgYCYkHhBo@AhgK>lzb&i?li%a$&K>=#EAimOyMbQ3g6~XCY=qpuH*DG=wX(BelS#j zYkk1wG5!CcuBzYvQ1a?~DBmx);1jF=Jk(!bcYaC}1I~t=u$6%o=V#*tM}2>F8N$S5 zb>Pcf8i+gvI(8th%l3Vv%l7pMK9jBXK`u{*4vxSuBZNh!#W+pQg(8CSi`&IHfr&3I zz*^oKyjPs7z70Q$H#poIyaW%g#XfOdOQ_C%5b--P`fCC zu!TV$!6SO2Z*4ZWEa!+t7s)6>T;wHi_vDpeEm^*L`p3yJBuWZmKlmbTz4_sr;s{3C zcY@V_^mkH*dgAndvf>O*z*5w76dZXY31#V9@_lKH{^R=xJ~;=*0_-xAq=%aRZoB8x zqjgjKIBNTUb<;x~2yjbW*Q9~czSFJtVFZF5vq6^W0!wEOzb(B5=ZJw>&5o-p@?4kQ zm;48IYV73z8d`W2C>Qg<*3^oJ|8&2vUNfPqhr7W zyF0?INLgV+RPZy_!Vl_*+J7WivKGRaEw@cg!8WnMCz^oN(?3d}j>ykZiIo4P#^0&K zj%ECfORPU;csknntF-zL{AvD^8}b6yL*AZ@HCUnZ_uxc51ForYI*tM$CSHp`F~c{E z2WdepszC@zBJy&vaXo@{Z~DQcl>CnT{RXn9agFsh)izg1oyMc(Kg6gG*zoBz{vVDT z|9tZ(+QS@d^He zK)c6Ex%TX&ifv=DzVkcw_*88_KvR<0A3A@3js8A|-|zZ%^!uiset(Moeoq^|e=zoa zc~8IJS|aUV$?vDfzIS)^eJA)&5Q%K@-(B|~9sb>Y|KKryAFLO`xA}h$zK_8_k-t7z zE2YKr*FGpzoOYs#b;n;3poqY|7A~D!bQ&W0T3yc^Z)8EWQqGdFtbe3T*XmXbrmuYjC8Kb2tzLi`8geRsI~HJ${T<@k?a!iT@(d{|$=keUS_a|^ zhr3qPgAL;9q}nPRJvHYw;dHud`6e=L^Kt~yZoxY!0lVJymi!*|hep-(hO~N)$qmBI zj`x=R3O||vm{ixY2YElR9ty-8#(_7CmiCJS@1z>3t+Y>$dQ3gp{xQ3Y(>c|4rM!zdm+IEefk&R;`uXtKH3Z17@tQR70-@eJ)BOnT7E z_tn;Wc6VUHC)~~T4BkR3J;!t9!(b{XdgXrj31=oHNz#YxDq4jo>l0NWl;m_oE=M4q zChdcAMpC?V{$A_Jz`3aLX^$Ic=6vKHk%kGAH{OFb(Y2OARbv|8tOwM)coUk#{hnOb z7<$N)CpGJ2q-==}(?;q=wh+%#sWo(yQfhu^@*B1c0wA>e%9czohX_d5`Z`;(fz>NFW50ev%D6 z_-$1V-(6|F%QkoSE}m6WBdfx}U0uX09Ng9Ayu!gTT$jUD_GmA=szPrDG1Ltl;2ORVT2iYa4HwEny56X4jAxUD!B?8O< zPp~5+Jd2Z(sJNm`eW!k{hdJ+3Tn#H&9a2xN0_#J9=9+;_Zb??&6lUrys;(8BHcew9 zMHcEai&IPRP7$v`t0g=aHoF2BL)~O_3R1-TJS7M=V2T;@e18eFq~JlxKcgD2-rZ3G zMX7{IH0Hp;V+1!sMGE)kw~kgI-==Owcn{kLka2J!Nml{>>X1KiP+blW%-dC0#6vj` zXyjUXlOCuhLWh}w1xh%hQ_P~ZQqC9*JmdLFc@G(J<%~?Ya(>#gM$XtKQO@^!T6snr zbJ5|BW_+lu8?9EsZF1Hd$Fblx`4GwDtOEA%ymSNE%k}H82wwe(@&=l-vB@v@2fpi1 z=%~@LzAWS}LyCdYPz5$hezW>}Od?xB5CaEww0TvM4w!y;eb(>D^W1jCF z`Lz_~xr!3rA|$kz@6rxdNo+|`Pyy>o;AX?u$i#$gjBOI~nWLv)5uEYK-b;hCJ~=ok z==Gj&Kdd(!rR!7-&^jbGQNw2TUL9fr5n!ML_&R$pcyw}&?B)y*G=(YL? zt`MukkdNUry6iI+O2Uew)5zM%_DGVFEe|A`4N9Q|$-$Yu%*C1fm09ytT8KTdJ_eI# zYCY1ed&v_stDx9@Q)5$0!qkO@gDvM|U94OpE53r_CBWqH-@KyAIG@-XV2+Fmwv7T@7 zUr0B0<~Ha^QSyX-cW8<0_GJ(Tm=JBvEJ^9`>`;$^nwjaBl@*6V>|~(*ELTG{8WH{) zM)r&K3s@@Y<6eBKpo4dWe~8UV)Xlge9{K5uOZnE|@GX4hDtTaaK$>Dsd3bhH;Lx!7 z$34r!A~Ve?FYsrk{&}^Gzd-x9{MPeJ0_{r{Th|vZ-(=q&ZBA(m9O`SAa#EmujK8lg zVi5Gh;n?n(SkyH)Z1QL7#`h2Jgk;j!Bh(M@7WS1s(SFahy74yldQ)nnTtqN!)Fr4p zhC)$(2;XY{a2wO^#dX*nUW}&-^U6*SGQ&6Uf!9NfX%ICEh{9#OpP%r-$k|Qdv3w-C z{o*Rg2oJ*p^zSf7Vcequ;UnO|>Qtnrn~nX~YDPwze#_~dYiw zh5aDmLBB9X4)#~W8WV2v_AF3nmt&0x!<>R_@EDDSI~GoHExQ>FX0FrQzsU=XM%Oc$ z{bnz1A9IoaJT*=#ut0pK^T&w^Ri}kdVw>I>fcoS5cQ=+(*|5-%Z3^!Lx!UbgFJprM z`vpy%L&MvgFO+#Ymk|CPo~u^}3w`87OY$VX*yt>1RzgjK!r#RUf%bD<%d2ov9J-IA zxVZ4XIXJoQ{wD5~g=SWkh33vF3q7ydS5Zp%D%@AAPfKXliMWsPrw$+L+@-$ZBM^q_ z-Gm3Hh2O`67;=zrT_fjvu4QlX36b-Xyh7xR=!f!WFFibRjNb>-Zogjj7+I6l9a65w z6zK0Z$4~Wr=Z|kEG$1`Zi!Cz}9t;Uz&IjivJUBi)mJfy|Jje6~D4)?jOF7zGZ!1S1M0bI7uH|>~L-s1PiX3)!lTo6l4g4dbrOEAF6Fv zdkyx$3!A)wgU2sQ%ikXH(Z6b*RDH_DDbIq1Sn~hDf4CK>=;}1AYcN z&hqElID*E#68F@;FEkEP(64~Jf3E+jrie?u;dl^P>G+HzL_IH0?NG)|u7>sap5_@A z>cduMcH0qUUx~fEUCS0hd`A^Xrk}ojHtrx0AMo3ZEbm}FQ4ntSrLN2062XvP!FtsF)gjFv}tbB#16o_NSf*dClA7KIMl zcsA2r>Elw=S?|2w5ttabemNYeXOc+P$V=;Kl4{oPU3MSlQa@94XIPJ;mCANew1>!c zQDP6FJ!Md34q-yr!c+vF@QBsOMM()v!d<^b!-XPi4I3tqHgmUB}*k;R@5?C23OY?WByljBa&fv_th+rY3;O0?p z0?0KsF6#?0*X2`RsGbe+g&Nr|ZrL7cVoR~DWA#lw)WKYNE%wa&%4LNq>X(;rlv=O| z-oeiU6SHOz-0=E8#jn+)@WXh6y}iL|_~@3|U6xXbruksG-Au0;iiR z(GZf^DxC8-g;|x%3K~G;f8(=2a{-)IhyUySSa(8q?B$ctQ^bbR@uCrWZV#^tKdZ(N z#l)XKqVc~65w2;2=4m%b>h4K#pkY~oiS5@}pt*xZsSunr0vft6m+_WZhjtS+Qaos- zUhe8fn3=V(Ol{o@B-aJ6-g*!`X)Cr{_{T=TfyMt=ibpiT)mxQ1$1eOT6kf7bMX8~T zsNBTCYK{OPT&pMK2RfE4>EpwW9FZb1BuSlnVbM|<&%Xtbz_x^2s1{VCp-3`aiF?6~ zz@SY^L|>o-to6q%z`Qlpi%mL~y?`HO*z9UlD>hN%j)@0$%EnhC4`Oq_jD;sm4o&Fe zU0YdoL-h?+wKw<*KP+-yOrMoMAi)QuDSWfnK#_<{puS8(2;L|9Une!;c1ib z{iUIjKE1sydvbhzH^$yW^-|X8*ew_xPmcYfsf4}gRF|t^Cj=5V@O!8wyc1I~wG=K_ z=(jkkS{ypo`)01kxLA~5U2`dtUGyq7uRG9G3^zyZ2wcKFfUEw+fkQd|SMXY-9}b9L z>5bF;i+sU)5@4{Ac8=f!nK%X}zCBGS17q+Y+N0*(N6LVuiSZsyyv6x7Cq`;N#*_Mt zhmU#qkcW41(1H`v&kZS_vIv#g_7g2TX86D9 zFr?6mA}To?_t(8Xq)5f^eRy1{^H4?ArM@R&K!v=|n;rKjbMkel#GpQ7xlM04Dla z`26KaJ zSv@aCA-KzSSkf(LX1WP0c+9fg^@r-K`v%*zy$=JfRo%0DcgMt}7&IOZv=6I230ZD< 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

6Q5go-El8d*k?FjvEUN&^Xx(^c zats`-4i~PGf2{$Jgk^LJfMp0%SSIhN3wsr}cu}{LM;mB&^gt!)k@!12qJMLeet*V< z885@k-zPna_k{T?c{HZF^hk#}%Z7=#D#;&XU|;o^oyjJ?Y$rbW7vTixWV2DKY9Np;#|6rK#?@3+`?N8vl{9RSimR2!u=^30SRYCB#YSm^zSXhOIm3yqn)uPg zR#C?GrMd%*VjD-N_p8|0TDq~}zFTbIhXgk7m9}}q%N5~u!Tni_t9jG)Ng1C`SNWqz zSL#%RT^IkF1f497mI;c^ZQ%rZ3py9~A7zAdx%t>UW24H=swz%zZccj^-FvaB9(N%K z>nfx~Il9z=i>M+|s3Mh`i63LGLJ#9trkYd{zc#5sKO)GyEjBfp)5&JT)m&;EpNkOH z`B~-0=#RM}IB-5YX*h6Y&X}9*HD-RRsLHyof52UtnbA4kKTx{Hyhui z0>6#nY`{c>!W&4R+*w37?75yBMpd2#gr+|i~^sBh4M=-uTxM`z^w9gSu~oiq=Qo{##U zhdJ|I>u4B-xuzT!=HVy(VGiHHIr{lrgqh|GlRumIrwH;aBI`5?W?;PyEQ>Y-uVVvC z4hrnkkGQ}RD6n;rUjP29zeTi)>u|F8fnf7X)-?TPtY%k71Y&HHDv8{c_nwCUc zY$rmvz#@VITeO`stpWm*_y1M?9~f8N3GQXuWlUj%%bM-DrmpX^C_Y9o#6h%PaKOy;I z?x`m2m?6p8Cgvh~nyF3-m7OSFpv}od6-5P#(o8e&w^68R<}X{N58ip)S5IR6lvFYn zVD@trCPd|ET^_+;${Q7~t{`B++_lz%`hbi1;UAm}-#+elVVvT7UAP|o5E!8NO?QT9 zej~}Zv)pnt%Y_$W2Cf!DL!595Y2mV^ibXsz1TW~{oTLFZmZoyb{r!j13tY!K&jCD5 zUVKtfdh!1nOZMB=no1PQEB}(dcw_k_*Z87h$zWqi$g6^Fwrwa^vT> zYy?lzerA0Yfp>g%w-KoEdH4hAhPP*OLGln0zx zLMWDJf9KqI|1rNCX(|?P&-^wUJ#)){6UbLHY<$gM$veDppyM6xK5PBh=m8WPkVf|)&BQ8fQ(VdQ0gS4 z2mPCqlwgtdWP0p=Pin8{NsqUI46MA$lnURalt@){{YZxzLDWT;xdO3$mJzCkVP8e{ z4#TPB_-%?>LkVna#~`h5$cs6%B$OilS_2nzbx}_0A+RPWs7+DJ#3E3v_;V|m)i!ij z@-38~JCoz_V}}@o|K=)dT2Ic zrs)+ee(r!+#kvRL{dbqh5l(=sX+x`>3edZFHEbsNE7tXT(>hLS8J71V&-51SdVwY) zSp3#m)a&hC)Z0#n=6o~&&w9nbj77aRKiWk-^K_tozN-kPsOJOYVd8^NV0|wMzr*_8 zl_u~7`lu#_B~e~Zh@&aJmAWDpeN zZ>QdnLx@&do72YTg5Ts2^5)&vzawI`KA;k>*CsCU4$s0EinEySaBDU&vm8u^Ccw02 zF@p#rmjx8%)JBdnjwr?Dj2LyZS{;WnrZFgcFK}YcPxn)DSV|;OhFgldzia(+YuU@B zC6lGhaVctkSDWP&&D8yKCDcfg5B-L9b6`mXyZ9?7sXoEH{j+)l=Uf6_jjFG zW;N|>2+Y$gX45p~T(*3`EGE!RQ1GMY{;v5d>Q)Xr( zA`c3}w!Ur+da(g0V_3?zgd5bh;kDiI&w!_D-I|`l>!y z@hocyvApB=>^q#KNniyI{-Gp2fZ6}mR9_l6nEr&>|1&4)@?=Mn*d@thDOHJ*r762Y zXf%SdrN|n$jEoz}QVN484Oz;{X`qB#irB3v2PtzdUbT`+Zvbq;InKDPlY;uE7t1<46`JBKMmaaj!8|~i)+}ZaVW|F_`f_S5 zDe~8sHp-$_;vGtX3RrT=NxI&CSk;#|)rY^YALF|JnK;U5Ty%C8Rb%B zeYx@$CngsdIew2`Hj0|d@f+)~rdu#~tU%Jwy!Z)rqXcF9=QNLqGbiPiFRZBU9% zbCwm4ceJSblEHFHC+hx5v@m5{o&y_2uy__WgkYk7Oy-|mO`80fpP(#iwXp)!1S(-c z3Ge^Yp=LKyng6!>us8F6|A)=|nA&JwWqu`;0WC4!~I1yQ!Y$@!K>lx4pf%WjgEU3kH2`T06ficWEs6_0ha==^6nrP;cF z5-m&_m*>Dn5iFjC4I!8>|5uQvp!`=Bwc1E)8-Yq#B|`q|P;LIJ5Bu_ev6KJTp?RJE zLICCed1IEkaeWUyV)8!@@lOnJW-T3~jxgT* zr#EiWYJ+Fu-;XG(elcQb(TVbZkrh*eC@a3_#2g&$rwn5$ryl_&)lyEV{C6mQiIT!n zvRsPJ|K*&TTyRwW|7;{BsQhfTGXq{U{n#Qu2 zMOl95Vp+=Cv7kg*iaJ>ib|}4x62Vg9f+*XUalWMyW!X7n*)1yn7g#MnR|Tc0l(VdO zl%qxGKg%f{qx&b(!jy4&4r~;`;#t@bg8B0QbQQgtIirRI{%-uVrmd&#Ys-g!I6H-FqU#U3zSq# z`Bvq>L+MMD6qb_ZQgr?oacXkGQTczyNa`Z{C)R;Ys{&Zb2~JWd!F>78vTBm1Y>lDy zh00Vpw>@i}yAT7+SQfMBA-{96EM@H|P@*(tSBTmK8SGF}$+-xY5*I|-{wn8N8c~*= zHkMTi5%1T!P-wOMK$aC9=PWB8;b_tM&vHs1*8P)cVYKZ5ZZu%=ENlqDy!~_b z6;9J6umT5vG@3#~u8snxfrEK~F#EsZG+iFBKkFD#v`?m@y9bZ`cAZ~xALEyM~5Etdz2~Y{z`WCAyB$oimGG_97=X1C|y~~ z7?)z6Ke&PokKox%E=Vf>e=wrdibkx1OCemz*PN(O!g8I%Z?5*I|-zJ&8FjVQ}b8Ozix1+AgTQS&WKV|npg*yLb#G6oTyO3dB@jWmQ|Bf zWm}BezuZ<}y_-&$u`FiMP``JvEM;vbC{dO|cLAV>20N5B;h;pYl(-HWHY5-m*6{~g#gg2l72Aq4aG&)LPCrb%E0 z4t{Gisdpkaa4>bR24;T=r|I&2jwYG^ETt+@vMfcP|MRVLORfTCBugpO6r2Bo5|sZc z=vEtN=={fe5AxrBUg!TJ@**hz5su0Kt8j$Q|6z!J%}L`CJ%vR1|D=t+6YcS?{F3wN z(BJ$XWeR#w{tpGEyQS#-cPQCmpmb#^V_b^O|Akzi=Ypj2|Ab#utbi)ATmhkz1gDe7j7!473j1yCYbN?Z_S`vT6l zG@>j!ZY)!)z!zp)Ehk7z(HER$#rHT`bpErP())D(BwARMT++;QVABW|&%%Zf%-cU_ zpXW490xNLv8>8tCIkp=(n7ZYG*?*AJba}9&N#;LGsY;YAOHs~k!TmjYF->L?ya>vFgk$o*9FEZW|2IUx=AXtR_1=m< z9=FkVqCMD^2RM%oW%xbH6!f6{zZaD5mJ%9Lk*drBhmsu%N>`RL#--T&f0pa>T#!`$ zf9)3)>)=udSMoV0DwJ^E@imua)g)Ef7Nhe&*LpXdFk@NFqCtM|Vp+=Cdq9b@6rKML zWlabu5iBJxh_bzq^DT`i%f2#}>HL4pYB@n#iuQAs6%TZ@==^6nrGs_gXUr>VbUj>c)$8FCd|FPbK{I{Ri`Tq=g5tRQ3$K?MX$87#*Ao?{& zjYs(%wF5zkvJ{>F z4rR^nphU2gxFE{*d7N))L|Jy&Sf=h@yfDLRIYC;A_HmXK-{ol0`Ok7n2k8DubYWsk zGtYrdBUn5O8$vK||D2u6X_^F9;9!Z-q|g5jrtTGB_J6`@x}5H4lKIb4suCs3Qq*0N zTmEjHTXGqcku0T9Q*8bVN>Ki*pppL-RQ_YV2l;P5uk(KnoBs&MHME=qwhppu`Bm-9v$lE_b5})gYv&WDBUeZ=f6YAz66iDvXn6{#pZtj*XOw)sr*0W z7ZvN^QV3V_F()dNaNhAXmu1x?RoND!^M9K4ZaQJcvY17E{ocj0l(lz(5@jhm{~gMj zi=afXl(-Vf<}_XI?P!wu&r+%qCCgIu`G1OaZpj5u zMzWMbO|kheC_(wJf=2%1W(INo$9fO)-+o@_|C4O~BOH_e7o7a>hv?TFFdpgrpKPP= zL|d^dcX1va>gD$+Q_zF*zb`1=Ek)=VDT($2*JGl zbM^^N(t#eC$24y5mDby63 z|AG>f|0-zYKW=6a`H%G;V);rA$0(1Y^7Cn()5Md!am$vy{Hllh-QLzp#g>WU? zI8mX5^Nz2%EUPA|%C;Dt|KqK9(+M+{#VqRX_b!&DtW5(Y%2IUxJCrp)ffB(|;({pK zALD#WBg(RU#xgzs&$e1lkd~sYoMpw`94$KkSx)Jlx_=TaOt1etuxSK~XJJDK=Ix)e zIh>|RUgx9>Q_zF*zdI=1Ek)>Ks8GUr z$JbnzRg+X@Ta3>CvDUlkgc-|X7Tw|ZE|#UN?FLGerRe;3C~JNMC4!~I1yQ!o;CxFX z%CbGivS?W{FO0ETPLP(O_c+UnQyeWi|5;9Hs_vge3)AO+2R4mh@hofz!My!*_V1jg zNniyI?lzkA`QO3REdyr%7EaUUE{-Od|16~{QL-#WIk#oBb#BQIpp0ZGg_>gXUr>Vb zUj>c)PgePl^&aHE{k+cq>1_TZ9FzY)IQicd(XZKMJj#&${zsOLz7y?{uH4Ldbf~l6 zqf9{$%Ktk+>24{ZxQmU}{~b#9DR|VCrHpYYHvgw_eVz-F%Kx24)V)$vtb8d8BM*Va}69!-S2_fzk$3AcTWCyM)Yg88;|t;KM&dHJJBBL z%6B=B4&CneC{xgb^1l-(-7Q6*{~bzpDLm@RQpUIxoBxxzKF9}jL!cN*1PG18Ovf8b?|!^%Tm^M1SQH+dZ_$&C~Lk2C4!~I z1yShxy@T(YOe4y&t;RAv{~vC(oFFYl?{JnCCplVl{>+}_b7^Pi1Ij(+M+{#Vl&)_b!&DtW5$X%2L{>{C6m8z5ykI zrNjkMwr6v`r4eP>d&aT|Nx5*p)pCNg6ure+R-E8y(fQAEO55xHNwl!5BrMN?O(R%5 z3mZZ(Z~vSf$7z}bR^Z?kqp6X^G;lC={|U_gHJql)@s1{$|16~{QL-#WIk#n)b#BSm zpp0ZGg_>gXUr>VbUjT= z{!FZ~v zF{+H57-BX3aSWKJST~!N%YV1(VTN_h%(1g8p$eh>~B^~$q`WUS<1RN$2mdi z%u@E<21-*)QI<_`D1(U7n5Fd86sjWVpBTJf{Ad=b@z;^Y${eaA;UR$wSYgRYinbqb zT88(di|+1mXaPsIr%WBWfW0%zhf-Z`R`C3A}u?XbC#WH?P$^Y z&vL@RQTcCS>SAK~U~Am7BxwK(n@KQl|3tH_g>leyex1>DmHbZ4P7bCmVa_e%G}Ur7 z$^0M5IoF0Lb1bEa%Kr>2rsNPP`7C8!E5|vR|14!+8&H~Bin@xJ;7|q;r7=tCsVQ#$ zKg8z0GKca%2KkQ_7UaMFI87q-_aiJ8pT}>UdBm!C7gCw z$Gy(E|3XW@FU=Isd%l0?7Eod=MP16@>rf_t0ZJrGX&Xe@F@o#kUPO80ZKFly;KhMf z%Q~XG{u-y{vlfmPbA6J*l1f|a{7AI8&eFO(2lv%M;Nn@_5W;!$5H`IJ{w^j4e=b+4GDI0E94pLUa!I(f-LGhoHpH@LrPSy(v48=lD zPSOQwIxFTa9d2zGG^C#gQcy!CVSFwVIIumXh^ zbECwZ=w~&3T@1|AEM`+vzjNJK%7JE}w6GNQmV&7cpzQbuXW5w>l@@1yF-36vwQPrKkZKv4dk!l&IZ3PS$L;k+qWZkIoaOel z*B1--*>bk>Cd40Z<4=`+(I1EF>x)IS%NoYU-$DmKxuV9`<{_L@bvJS^WQ=G-9xy>vG^AcfNvzS4I@#g=1oT70=DPC^Gs5h_F zaVRB3+4~|V=6qv6C5NR%5@oohsJ*uJy{%=Hh?2=t=C~A{|177dsqUXE%Zwy-ebLQ< z-AaS`;tQOl`ULak|KB+062J-+T8x;_6oj4VWi=flO;59!O^y7{bz><9ZUm);rKnws zsSai0$DlN0Dd|C!llO93MiFKA>yBk&CR5#^T;2o9j>Vj1XBsLkZvG2SQ2wh1DgS36 z|FOb@{I?%>@?U-4m;XJT{NLl`e-p$XZsS*18~t&($^Y*Ve;6Bo3mt%)|Mze{rGTUI z|21Ql&i^zE+p!z41&cVdwl;uS-tpCoWgTt|O>q{Z^WVX|M3~krW)NY#`9GLbG>$06 zMMjKz^I9E;QbLry3pp|8>-#A=EG3dC!!0F2*5~ziTFWXCC6lGhaVa|gSx!+S-9J}e zHImf+VK)bMD-Gt03ph#j3Fhse)ft>~319^ZEvAw>|M#$(4w0s(S^+sMA?kHby=pFsR!Z2T>B z0B-&d8(axgCurZtNh zL>O=W58xDyBTDg7BSx)l)Nv>!MA`c+C+7V1eo78Yi6qK!OHu2K>r<^|m57qbQs%f6 zo&PMSsGjbhD@&9lb4k<9flb>E*u_FlQhkE?^8aqmxdgBRg&Jet?0%xF)l^KHo@Ozd z>iC`O#!?R407?r>QLC6!9m*J@G-E00L6npIIW41zvil!q6f}`zt-3?GW*aCw=5v;v zsqJV{{WFE-gn=XTC&R*2;aq-)HLhSQU;|j#OoEC2p=u-6O`-+MUuy=c;6<$|7q|%v zN;yfLZKz`1Bs}o>UD6N~8oeP(_fK5;&{mgTb>Yq%FBx~9lI~ngu>rTIJ>1uy;oSMG zmgA0H|5I4+dS>bM+Mh&=D<>DO^Bi2}hrq?NxFLk|j^DHCT%S(@D{$~dzp4ffrUPO2 zKh3GST+>k{*Z){bRib2BO0M*7OBd^13{gh1l)@lNLzc3#4k+Q4at*C5;`hs?7enBU@jJfnZo0;#_Li8~<`exFjdvUlv@4rm@qLFO$Z8bez zuaWKO!+F$;C~qt>9;p-l#g3M8a0@7}&*41!th&<^Hvd^tX-z%85-m>6U-KMX5#i!l z+z`U~^1nByY7$t1gA0u+b>?s2V7?~I{sKPGXGghRib2BiaN7wNw(g_5M?Aw zDGZ`CWGO3afD*1L=9J&xp**=6lrWak!lmf^@5OnR0*=c61;#ja{yKHLmGlKkTJRKS z+}3JA{nLwO9lj2l;w+|u%6|tlfiSIE%pk&e^S>vjXdF?BpEqLaN=hAvQezV+d-FLl z=d1cDIV>fTD8nrUtC-QK&+9u_%PwyOC6lGhaVdKK$8w6Q>;Ad&oROsZr<((7POytl za+2y3%sanWokq_2YuY8%o~UWzfse5OlaqAv8f8ef{{DzZ)Q7zVZA%gg8YMO^WIo$q z3);8Wk^lsksN;uCb8)aPX9uu7ChqTKgTG(nO-1|VPOjId0TU>BR#^nZ%?=`b1NcYt zICCllwLhP2|9WbFqSO8-?X85syJ&w3+y1Ln{Nt$&+x~mi(0&c4{fC|Qn^OF>+4j2x zwSS-o=g&RV{)R&9Pi3e5`zZd+vpIjhjq%4nj&1*6Rnh(cr~Nk*tv}zaNBbFU`;P^+ zUzKhDMQZ=zd>j9rPWx-9{VPv!@iz);e{FZppCoF3fz$qv?QHxdKaJWidB*y4v(tXlchLUP$2os01hqe(ZU1^| zf1=a=CkfV{7;1kC+y1Ljet+7q?Y~zA?bp!l@4~$rVn6Kxhtho=DA%%-4w{0JCa<9O zrIJhj3U{3{MO3($Kmdy;IZ2`PVO1a1oNcc9w70|^j<;*Ir`OsN7mC=izyGu{e^-cF z(prw=b(K3!TaE*Axh|L)srjbHMGHQDw3l!wX$xcE(fN4>qh@WL98BG{z?^%G!_*>- z=lr?6D>stb5M_>~(47r{AG^(px%f6H`7C8!Wk01eOW79fWwbF~Q$ce6t6UNg&6qs!~{N~dxT=v&g7K!Yy7x)3IF*!-) zb*N^3^NjkiH~Ejn*$cLxR@>ySAOs+|i~`do-KAN}@ez~%v~f0ICf6l1E9&@d{)-TT z^1m|rE0U1Q8O+sn6D=MJp|rVopmOc+o9RAedhiE`#iBPKFLd~-#6htiasE1S-V zsTM?er6cECbE3?)6m`jdsI}GdF`JP;lMKA1gr)N z>qs!~`oO2joTh$?(InOfMzEA$!a?b2DUtHdlNVZ9 z=Vq(`r3XvN)|6~LlPNDK_|fx4z-cOIQOlC)`l&WngmRMN^yky{^D*0RmtLTp>E+x_8C`qgY>OosITR7)Fj^W6w}!Bozetrdd&@1>aD`OD#};Y^&xgoae1nZ+yz zbMG6#v}Q4b2;<3*QysWo9!HeoC;VdSIFxvz?481iIbYsS$zdsxL>aCrsrbgFsF3Pp zTV6OMt!`nRdj*|M{${Ye$28CMcU8gj_xC+2e9_-C0xhuYlatg{f7o>Pp`_r>F1Orv zcK@po_FIn|bEe3i{q8B1y}#$E0Pri}@OH7jso8 zs)l(oTQuh2rX<#{0zAHI~{>@4HFvKWR_b~TTOz%C+hs%Q*r90F$Rb0iD~*aDo^lZ^90V1Z~st! zr0X4paUufzXwN5T@?W7K4X`9NH+?PEl4iXM%3UmFdJrX&r94lRpJy69YHphBPzDp_ z?08N~jUdYF@!SY%O_ZlBMcqMoq^Z^N98vOE%G>|)JJyk<>iKVDXPqstZ{R$`z zS<0P3l%uzCS~5XV^WPc9HZ_^6=%9WjK^w9;+m8PZLEic}nq^)3^A^m1Ek=E(+RHck zeCxwvCKG17dw+LDmNK6xXZ~))s5@iYJCyjBA*O5`C#G5u<(0OaZ_SA^+fvk%5Qmyr zEt{5tlFL$7T~S)7ieUar&nG4dj=zrNs<2fZsel9x^uaPwPSQiV4O2%h-6|t>>qz6J zwvHrt+X|<)!bDqjgW6ijv~_riZR@lWs^W^Fwl-odCMW6h%SM}8EgK@*^4FvljZu>- z;d8C`$ok^6{^`Hq?oHE8AKrz-P(&u;Bf2hac@OU1_z2gBy>$dslg$3((KxOjGeJ`0 zf11IC%2R4Z2Uq$J;5LlqaK|q}uy6dctV_Ss__r9P>g7gO)%%3$!(t{A#ykF5%6y`n znQFw8$}8vg4&@?I%EoYFss&MAX~X%}oG7y`MOE5E4Xu`&h?2`vR$X+o=<7e0v*U{H zpV}H`E}Ta=uoqtftOg6~NHA~ze0mF~X&_jEbyJLUQF7Fkb1-K}(_5oC=Z^g5Xp+}| zEajKWp!BqqXi0gYfpu;kQF^eH>>x^cmQp~Jz+|JPtE9AbD7U-_N@*6SCCa6!{#o3b z^Qx1wnMHRm=&r0=He@q(>pf4c;?Hcc{awU%y$I|A;c4b*o>ac+I{tH0+* z3p&b=XAX4fA}HyWqUJy^*RwWFUkpkgmNGerQjw+1C(4IZ7J%JutPUkEzb}om!+&a?>MIOpXKcMO^>hI7S>XB&j<(h-Xg$iu&|B< z^W}dFPSZfJ0_z@C&Y3b(&cU=L%v&Ql=Z^g1Xp;HQQhvDrN>5EOPlmlv*E%0u#(AxJp{q)}h=)l+uSdEm1B-=YMm~v&P`4{I{@161L}hD{039z$UV= zr9TJtPfM1y@mFZ7W-;oSt)UL)4#HGnG3^K=YlNyYdv2CB0$JLoTVB8L)Vx-hWK>la zsVb8UEnKw$l819vXU&H~rE=TJ;hR*E5?F zw2zrKg6o$FnocttF~-6K-Ct?u66J?%Ls69`-l0@`9+dBgbCejDV&+eao3Z^5lInkp z)Ahf$6;=8i^*@VS`crWKv#gE3Q2$$u+7le=VCs^pDlDcQVW|I&cYAK)6!jy@s&U4< zSlL6r*Ro=Ilb96`a^4+0>!%E3DW`u1B~?>Qt$EI&eEcjZDJ&(+rKtS863eN{1xNPJ z(MOCVnssBO$2zcU$+(gSI7y)d^VZL~EUPAI%C?v=iP=`uI=7yj8_QxAo$)&t%Tm^! z10~8*>PyOChcciLln9m*7ev|Kl=Cf(D9gtBExS;|YB@3=l%h<|vf|T9OSZkf%Mcv= z!c%RERM@K8%z&7{SgbtdBt5CyNY^X%HC3eU^(@`qTIs>(8XKi2vYd>rYcB)^DFdtX~e} z{0Xrn<eioSG=hdHrq`dR%KZM+7EHfC znM#882dxBJV?`(@sk?1Kov98tCV#ShYl96DkbYspZBJXbdYplp*Ro6o^d=1jVdt;4 z@yF8+-z!5o&p!FVpUoM9?mttNp4Rm#(W2DpD$hY>&I2l*MGYa8w?3V1#EsucUfT zD8ntKv+SSs*I3KmE&wHyrOa_Ds()&;oT49e|6F;fO(q5Z2C?)N9ROwmETQJ{Aa}ZDr#NPu;eM`-x*lk z$w|t#t*EM2UbW(#f2ScReY^3Hr)*Ule+n8t8)2+cbCkM{hM}~3w(lO!stcw5-p{Sa zITcNmhb%=Ev<)%Vslt3v9%L!=T#A{0*JepY0n`7(jVQH#-_5~g67J$)PE>uu`TG9` zPE`U}fkKN>-kpfHs$L?@(=2Aww|?)sv6KVfgVMrM#CfqGY^p=~>`73Xv6S>6%E`K% zmQh66{h+eUl(gy&r8`k}WN?<9Iq7Io`8kEVEtg-git3-EbvQMd;K=^joN0{1 zjX#lqRdir!1lur>Gw%5Dp#B-nvMzlKP3aa>Uf%iha%Jn><4*w7hs8`L44vOh{j4Y` z{`%QZMXl>+xT>GEv7Utce{3tNer~T#zW8T_kqAo93hO^%>*uYcVcz}5s+;9d{yM^H zXh2(q1p_#%)_>#g{S-k@_pOwEdJ>eIEJfANi4Gw{vHcH{>i=Oz zl-~bzaE%GK;ciaU@qY&QKg+swg8JWL)cVECm8^I75~dG}nM@eZ{H7vHnNO56LyedQ zvWMC`lzF+Jl=bJtR12cKQj_zoIZxLNTDoE$bIhYHi>8-ms=Z<{kXcCoe1WWnl z8&G;$$_#+d7oVL@7<@v_!cS)jx}`<2-8& zj?AAa7N*vh_FQcxt(*neL>9L6nC>4_*;)#gzp_nI!RyL~tLi`sR(Y`hLruuqsH)oO z>J+WNs@;Z&%>K_TTh;#dPq?+|Z^o_mvQNSt0e8}#+`Iiax4t>*@A=V!?yqW>z6K@T zQdCuY`6_GE^qHXaVJVY?C>2@Ce4?DW*J$Y_wX}CA1Bg=Am(x-$i1Ny{T)#Ib%4|zf zZ_zmvX0<#+lw6jw>WJf*&VQD(<10PBYFpTCQql+q_TCJ@YOt`51oP#8HBQq&umbDu zQO=o~R?fk+CCpoWIOmQWb~MTSXDPoN1Er^?> z0)x#c2$z($4&^4Il=kMdM7b25|5Z898iS+q-@;nT{@GLBO4>0Uu!$^eX-QE3v}9Qu zk3v&5i&6L740SMf5T*)?X-61YBh>Zho@-={@UF;KRTk+gQ%~>zU?m0nKVOfNdrt6#M9LmR2KuKXKSuRE8=apzqO)faHe~u0?l2plwbzs+$aV2+hl0pgQ zt)FvQR!!2BZ82&Zut zA?*LyHdLjlsao(>nqde@&uJc=WGhYnAt?B+zfq7OeTs7wOr+holifK5l{MW|n#GZv zPmMuQ`EOC7SmD56-t#YOR?$SDCbFodp9hVvmMm-I7f@8qVw9qx4rV%Gs<4=Lgz@Ho zWlm8)qO7{h_@>tHfB)Tz*+7&P-8kP4?)OuMv6RyXK}ofg?y`5Db0|MN3Q7t~$#N+= z|06gxx!|b$Pgjymv59qH_YkZkm6H@oFkk+&teT`LTVu@n{kALCxmD!cSQfMBGrx1O zEM@HhP@*g)Mh>>Y4y89yB3MdX5M_HM&bKt8EbC`RL7MEJ3zw~ypT~nz)RnWW_)|xV z>YogjQ~J5?pF|5&3+s6fY!t!bS=bPQiT*4%f4q%Cx`w=pCF} zONt%0#LT&+priD7?w{MZACzjAqGmNi9ZH96P^z$$c0rUq;at!6Bg(2iMvI!v{C?4D zsX>$#DV&yr`}|slv6R!Ffs$$|>iX$9htiiQDJ&(+rRe;>np2Ytj>`YuMp94NJ+TgK z+Bm>Ux^R+03FgaxmQ|B9WowMNe%kh%b?(9=z>H-vi$3u?7t2!CehNyIrkLxe!44&r zoQq&7aY2;rS8=|j5oK8~V_CRdf4*?RYWaaIE9%TyR=n5IqVu2Slosp$Nwl!mvVZa% zSngQB;#t@bf_eMrY#66$5?FzQJ&h*yd}{*-^8jJ?cj7c%{@BqZvNVsSR3%E5rKqd4 zEx%glmW%;qBugpO6jRF@3W~p$jZ#7DT85?cKmwMRa+3Pm7E~=eUV+>|Y4gmynjs)n z%f$X-;uu@cdhLUTH`0t#s-9guZ#A?pfQHvQa!!4=$8pMBKV^t0{57rg6Vv||rwUu1 zgUcLE{m3V`KxSca@>#m^w>BX`Re+*4=8bj~6k@r71m@IOxHH#TU7|;CnR4Aut98rq9n^B-D zTOEfILzKN8I5FpU`YAaqC6Xw^Ek%{I_2;Z*Z$Au5CQF&)QdIxcW;sQBbpKrGW+bWW zk8TdEfM6GsI7#&h=FOkgA)IpwU-M)l8$pRA^xBY}CE#cbN4oHLcJo1pkB+k6$Z zsciK1mS{BtD?+&c!M38RTY1%rx4NYvDEdb19~N)@DgXyG;Lg^^5A} z;4%q!F_9BhpK!kZ|ASMN09K&TV$}CrpEzSxy+oL&S7pG+uQFh;9EQ^+u>JFtGjpZHfILpp#bF`@ZoWgR#z>)Pc!@{s} zL+b;}Pg~<&B;y9Ku$ct&_D?j+TDSw6&ZihncS=kr2h(9VFy|6DO|@K2;{3M!ch0#s zM44kL%DH1dS}`9!2ueOnS+`X=XR1JFLGf3C0u{8W0{Cj$fmmzGNqWS#pejJ9YQb9p zdLSV8`O1t3p(d|Oqo#0v^heO}aTnuMvUIA3qhau4(6B3>bLyuLo!&S3IpqrHRv1XC z|1D0|@WNz#V4oN>qB59*)MEbG!%XiB#jwLbjvDeK&Ggz3X#CKJXpzp2Pl z<`d;iM>KZz`7 z$A`LqYFn7Pq#EJC(uM(6gN1b@n8+Vfb3XlzH2G^zO=Xd(Iru`{Qmm!qB>l0)#4Bn} zc%VSEknZ_5%#B0Qs;V%Nh&wPm+4Mp{?$xaS-um+hg`643^}-y@qln=TJs)42jX6_! zU}DCXc(xWXceib*I(hhlRPC*k4H1%FKfldU(BlIrcF-e9 zxDS*tmeRtdsQlY}p7SgP9CiJdq>QuIf8Sb3*Ar|(YtFc>8-x0%7t1=l1)AbChQ2ve zOp|6gm@IOxHH#TU7*BmX^$VwH98rqfn^AC;q||XJF+|zhiW75wgP)SaQX+{m+)^4# z%KDSmvbXOAC6lGhaVe^QYO|c8&ANZCBpOM|xNZ)tIl(Tr{>&9D|M}yvYR~wCCX2BCl9TlQ zdgV{H-d{*lEqH73^T+K~>x#kFtq(TBty)$G0YNP?Bz z#7PPzm@oeYD=7a}dnW&9Apfz#gZzJ6xnlEQwcyMDuk2iG#Q^A0)$)UP;8rawK&{6Q z$KfXbX@m4SRzR|*oALGOkDONniL&liW0TH*hw}B^pu82!*>vPBf6tF#DZi`(rKhE+ ztJD{cSuGog(u1XB2T{tilmemz;*1uZ{|@D6qLen}v_!cSo&RN=XN|#8`EOyjs{B7{ zC0$Rji7agC8a=*D|FmRT8`nZpHH%U6*P#xk=Kx@;u$Xp)@#g;zoT7e2S=Gikr`E@R zKVrrFL}FIl$T@d#wVyJKrJQ~nlvGPm>*LQklxOY&C55GAxfGrMr#Lma;Hdn+#Yj>Y ztFaDj6v0ZGaFRj^=Dog{%d%>crfiE*{j=?`b?&uvV8*hTMXQu^C@b*sdmFBLupkYmGW7R-8l>aEP z8amM)>B`2ORfkskdp}dqF|a-B<7d}^(%n*2rCH!mvipJ3m8FbvDQ5lc%J*#lgQWVu zm0wh>gG(V?Nh3~FDB*nl&$4Qgs%(o<>*L$LwBAi8%vct)=uN+Ou`FfnYEYsqMfK2N zhq9(GC=o0rE{L-IJI=Q>qAY7^EK{qz7Y2DF5F?``w-PUvk=?+zaie zvF%R?YCnu^e=fEE!_7AS4o>@nsQuIRxcI9FwO@3S8%Zsx{U>$%yF%1Gk|hVMONB&v zf~Blk=D1|)S0YQ=u|nrZZH=S-3kS5lXEG`r-fzyby0|PcY7d;?6x{<(U_&$OSY-#1 z3`Ah_4V+`&zV2ud?T=&I|JNI6e}L2eo1a^+7LZpNZ2SKob8iA4Rdx1{2a~p+Lj_J)dVO6 zuo%FFO-0=9I4X!$Az1SJexGyiEJ;w_zW@K{^ZJp@y=QsObDr%y=Q+y_wu666hw%SM z`1?;y;_pd;?;`wzCv=3rqaFOeecTa!Mic&nDe%AAl*Hfg0RF=r!e9M#Tl!4t5dH_x z0e*1`{JT=%HxvHI4&h(Z4*qw$I>P@}!rwYLNuMDp@a=@Zqkl*A$+F-l?9sgfzpXv` zzyz1HM_I;mh}{H6uY3v=m~PIWOpA2B2_xMn`9pKUA{j4ELN82f)cEXK_5x%7e0ck#j%ai#+A)?Em^4}|msUgBI;S-A;Y2j^mwp{l zYWtIIIemSHt$gZnhiob=KLqwm^J^|nCw!2HdfnVV~;)2jz4F1*w(90qffo9W)flO zt5TY|zZA{%>adv+Y$kpF^Fc>Fn!;B8d~$+v-ITEX^si)R40h&)<2$0djxhb_3YyPvdquzwjj_LmnN_1&}YHV;yV}o=wwzW@3 zUFyWf()H(_4%_O(K6#VPnENYNzLlh07dA7q!)6|OtS#jRci76`oa~qO``TA<0T$$Gq{p;9ZI{h`X#q?R#AD#eZ{(Vy0X2zy8bH#aR z=G)^sYUcQ4zhwTIZ9KQVBZ)ejt=!$Nm7VL8ohf81kq%o~`e=fBW-H@5Y~^2%qm_bW zD}5BnW~a3BYjSx|hpkMuS|OLAA6!4(v8^LM4>F09)K<^H?;ny7=-{GC$w(=FZmG>=RmB z-|Fx`PxKnc*0Pb)?b@9$bk4}QNDqIe*L}5w-3|vGFU#*@$8!0-%h4deD;!PoyVTK) zU$@rl7DqMyu5kF799d*mTjY2U@196ds(T=nl|>ElDn0CR=pOuWdBTev^(Zna+S{&& zx9QCwZ2{tH_3{$@ywEUB&`~0p>e2I>_ERO^wu1S@vZ4|rwKo_QXiTRUAF5X3vW?_8$^y0x}KE5S7q0bOxB zsyyLlJ^Ya#9ro~!q6|-XgK=+gXR8PO(M!WCOF;}gRtf)O8xEm1fTFb(LUBE^SU6A* z|631j_G%t>$m3iI{N6;H?eQal{KO`jbsQnrdYp~33Q5CC;x$7L-{L6rfd0{8J%EqV z1<0_;NJ@@7l~NOu9WMY(2E1ca2YqJ;XS-q+EH~AEVHViVLiN3|8cwS z+%l(|UblJ)aJqbz9%}H~jH3_kXf?|42fk02?M3KC|10TTy>=OJiQ2x~CP^M9J%glr zk};du+ldb({}xBS9>#RjFjf$I<^pRwnTy#Db2%A}b^lMQE{MPfzA7NJV!}WlysCHL zk;gH^Lp~R+i)ZSsjkwplwrG)RpCl_QY>#7f-Y| zelP4gUR!oF{&gF#y^^6V8>1~dM|kl zn5H?hJ&_@fvd|81*Rsg18J@u{;JHsL4IJ!rThG$SMcMk`_kdmaJw5b;BzKl%yFU1R zCjY31T75Zs0R7MK+TH~6keOEPp3@R&H-&{NYv7 zi_81Z>5v_r^(X6*W0l1M3VxJ8Q$LGBXfcPi#e%(2i}8qUPLB6YAVVNx-(NQ~1tF#i zLK8p|mi0jRh!ss|u!|mre7iOKIcR=3erJ;cbMVJLJC9F!_5PNuImZMydr$VaboLH} zd?3NwC%!OR)8g_U>NNW(e@i!SH-AeHEi@BNEUa)$0KqOy&(ueZRyU1Kl+~ z8K~r=KZVSXS`-o1HU^&vSI8U?C?!l3rd(_`DW$=bz08Q5D^>^6Luu&;m4H#JfU$z4 zkZZq$%+!aJq_7{xWI-x^>_WGrFYzG&;}1yGmN5m$FojBbowlqy-#PvUVZ$&uK@849 zYiHxPhJrDRf>A@km<7Q&kTu61T<1N(f1tCs58k}J<9~==(Bg0DG`qY1KsT?=f1rnN z0S$rJ+47>+xDWCJzFq`uj%Qnb)wVC&=rRhd!$@F`@Y*Y0N5AP|uj2#=)2a8OL*XqH zr4ukdzYby2mQ^^8UkD*ml#YdEL^NM+;Y;0W@)MHLx>k3-uSE|c5eE4XjPW5FV;W!> zWISKk8MYU{Q(>qb_`SwqD=E(Qt$}&&j8Zgp%lamU?|RzDtyseH^>-Kd-^7RBu#fBb z(4$05QY?gS(Uw<&TrlIkXejNp;=N$d`AAa^gYJo3L&?9N+4=*Jom(X^kU7ZB|k6xv9C$2Cen_M@}EB$9dq^kdZtru`%m zu&O}^s~SBAP&t?afnbVg#&~H&EEU5auvGM8a1sak&KB#Bz7)w;uHNFT?fa9 zFr{ua8E2YE$d9q(Zx;7^K_c34|E;&QW!c3&e1o-D^v=_rlREnbXv_4h;z?P)WAR{{ zUSB-P=IepSF2$3&Xp0&!^m5cq{-^4nny8;|)juv-zh|O;W4v?Gx^Pnp2+Oky9O!)O zOn4eiByn`;hT>y=SMpVd!g6Fq5}mE-&SQNTaU?y+*jbzwG~$_?1fN;Csujl9^Oc z#RsAlj$+v65%@Qc{=~d|{wd@i7yp#=PZj@EZ1f})n}bAE?5mg2Kp&OmT>+@W6Iq*(r7~&)s8eOL>MUnQ3h0_H z+H1ReSq+rbqVP}-aDqo9r2*GX$oe?ZKy{*l*-Me}#8FnAOHvxp0eeVISN@!4HL;t0 zn4f@CkkZ5hQ;~IFA}c4+#GfBV#!f^r60qF0m8G-lQm@`*xN;1Q(UYrQzFT4U3Z$sPz!5KX=8x&;BIT(_DCUB1e!ll2RAV04mo(D?q4YCQM~v^e%xs&aJLDkKtrBK0VeOxT@% z0X9me!Tt$nSp>#Zf(^{i&eZN<$if7NSW2cI!8ej3lfZ5@d9qHgiJ2$Q8=hYJ6_F0)|=PikG^&dq^Y%JxeG56zvx?uSSzdsgO3Qo z887@9`W!fzeY-9K!yw2Kludxd!#v2XB8Ax}o8YDOf*=&_0I)Yk+9eHA zp@@#Nk`Yk@2`e(Hi1_fcrZPw{5jvC?%T5V5DE*!Wj+y$M2Q})wkGK>P3Sx?gbW>Ax z*FvwO98r|aIlpEs#aqVyn6<@nrY+TGwRY>n^L%WN)N?cdLtG z{XE!(NdNbqygeh_h}2tg@nRzNSu6FFfR$Pg$XQx21ju-@c`w4>E?P(igs836@60ep zpe5P{%tkoLLckF?>j*-W+XJI-xigTF;mtO_Z`j$2B?nnyurMk~VidJi5a~VL-fI={ zDg*&Iu$Z|2m|F6A+=y!Y6D5=R$ED_XUoC;&0JfAvzl_)2i1pGm2~D8{(-`aZz@CAo z1*B=A@#E7wTVdi*1h&A=EYUf#bj`KCQ~h(ZYJCnOP^p_rXdJ^*5^6=Gm0TE*`Ce+7qK2Z)MLUXq zfTi{zy5Wv@^B}Sw{?LtRhjYIcT>vS_CDWqm$bM@>e0Yhe+QQohZMh&aJbqhQ8+C z?g(!7Vp=Gse^=cBfYB|AOgCQrCgMWLg^9$ksGhKFvTf&ouA83 zcU5V)u{4aCpmakKa_ky+kJc+0(Ed(uUBy;MgH&VF;hj%-69JD^$94$RqS1K^D|)n! zFWMZN%Q#8shZ60+l_lM_1AOc{mEt?- zgSkFj5YI6-%c=|93v9WC@qht=MYrwb_!d}Q2(zXBQk8{VG_TX)zdeykG(gXb=_w9} z!v6~xbQ6D_$U^NPCenZU53eDcDK5ZtM9S@rU-k;@9)JPxjVnqrS{?7{(cB8+;cV7I zccZL-ejdzikhM6xPR%y{-XkMpRF)R1mb3~Q!_Io-vh2u2yAsyGY8_pO=H6Iq!a0v6 z(LdaRYW$dGnovX;1K)O9$iAZ|4pYu;!&%9K@N1fEVv=RGKP6j6_brBojwi}pg>vHm zX`$_$1}R6tEcqE^RQLmiq5sHFM>7PAs^V8@DOiI1*nI>N&Aq{DK7@B|*_1+mOJ8k4 zHbmXua=aDxBRdnlw1+Dp377a$3xh=S zYaArb*2C5CS1!nl%q;LkN?@nU^TO2yfzgF#vFA{%ES%{HyO5Vgr?=HOAe6RUg_a>7 z4`)i-2wr#C_Kw?C+Z8|G_ENLh>4$B5N}_FlOFu1m8VEx9^0)NYf{zPP99rmtOfq5| zMwco1kx2yzQyUM%*QZFT(Ow3osO{*YVU(AQIfeQF%aEs|4~+ zhB6Ta*ifJ?g0)H${9{uAJ%^XX0t6uj{|fnwy^BB4-xsWA{)u<`y>P|F3-30ss|;B2 zo_KB0?pvijw6fb4cndIuwqeAf95}Ee1KM@u{#hv-%+#C>l}x!aXB9V!E4p=uUI zOTta1;RB*?@hd@&`ntXWxy*=XovUW=r293Lm`MmYg0rQ4ibx2VrBER;+5X6uN?!t zSHBcD;eI)kwSf66`KpkA&%KGkma89;B`<;n<6bafzM3 z^juF1ZWcas6;vC)Nd!g@Z^SeFPq@~C+AWUalJHh-{6~I2%7h#Phq3Abhe#t%}3djQFv}zyC@#g>aff*o@R63_>kKSYg@_Hp+63 zw)!9tmVhO!ft3LKftj_<$LR3~HP@5rI8n=s?LU~b2Wrs!0nas zf&Sy)kqythG1fWoF|1|of{W-ju7{ibA6h9yKY|NTBo@UVB+j@=61}szHzwyHG0086 zS(YyuR$iQ){$kEzGxs7Z_lDHm+Z1^3koYi^-HQ`0Xv}*;{1m*cL@Si?MwZ7m@{L-R+>ZitTruV&uwJr1$HFva%Z{~mCy6n{5{B2> zyyXT4g~rKgogkBGKJzJT1#Wb%Fy=Pr2#UWOEz=+P3h0X!o#rS{@b?*Hr%VfSo~a;z zH-V_5P5y?0D55Q!l;=N?IcF;NIe4(oVRp~y*!Pg>t&UAcu8bKRKQF0weM&;u*KH`mVtEhlRWPG)6@RXOa- z#A`|X<`i-kqd|z&In?HIJyHT@Uz%^6$SDpa>Ku^7n>DHnD3)y0f1s=H81i>iSEMH? z9bO+;*U5jN6ZWaJboKTLH!2p{QU0)eN+BHG0>$DdF?k10!_#rP8>z%;xU|FeDIW#g zqBaiJ8=GN#$8d}~2QMl7!d_2BPxTk^Tu$T2kooBAtbBK598_D3L}B=?+J)h3ZalycfAYoTFMWNTMBWJH|W<%`SIP5BC5z6 zj678HRiwy0gkW(vhv2 z$4^}+3~ooZs?xMoDP}kEsO;Cvke8nspF+qM`(=}`M$Q*l=Mwvs`@wZWbS=akh)}LO z9~qVLI@RG-ypyCd3gzA}BTKV)Y;1&-%N>M-M0_ALNL9Y&K2)ZTB`YJo70oSHwYAWH z2s3JX^m&xaPAkV^MHVjasbZfkY6p(R)?3A1QpM)|4aMm9C0k{&s|7PPTrA8%R~QczOr@--eiRv18}zL2iwC_&WTCZ zA^2)N1LTFy)A*&)n7RGfLKc+?)mn_m`^woSxnc2^C{B9py$6cDmd8egb#y;(ewQ3jgn> z0Q^6!aElX6gM45&O1yIbB_PGsbmFicDq8`uR;soFawXMXlaI9*uB6&)uvf5GbpbYa z!bs`)ky-@V6><`FrWZQH4NWMXUT@IiVSZseWWAMh4I`MlDuI{tJ)aGcXNKGxOO}(I+}I6rAr4CFRgq>So=XVl>rzteD)fec&i0Q% zp4@Ng51Rpa=PDXWL4#g!dPP)Ws zYa>mo^ciLf^sv0%gnL9%6bgn$=err_wj4e2gcCjzIZ!AZh|R}fVF_agze+ye2R%&r zO!1%Sl~s`@Gh~&PBM7&S2N&T1Bt)Zg%a zMDg8N9y4DpN&@A)HjXCc@2*tc6(kd6RIcW>6m@P#LGCZM!@jE!#9CNSp<~@wvTqV9 zT`TIj*x~0dCmVN4!U{({et{AQxY)4^6pd8d>kh4GIQu+p!TosE2KezeqwdfhgS+6bGl2J+fP{}YI}^vFxvn4YXh8}u|Jousynp0WontXDiNQmJ9PfuXWrC8 zrsevL1!IXcqk>>q$+Zn_JclS5Z^?20pG8NEVsuz%fa3gTukR8_9b+%U-H}XpWKveR z$sJzh4zJV0E%mMMC2&J4H?1y4{PSy?GPTuTk932Ys&EwpQaLz2l3L-9&&Xoqd1r%C z7ZmJlofMw79_KCYl5;ktfks%+$(?vs2Qq>4ARBe(0WJD9$qm-I^sqVt#T902Cn&a1 zt9|v{Lv5c;n@PiIpG})t13{;e#vX{jre7h#7!^Up`x#3gry3^lGjmeaAJb7WnL{k~H_0P}N#al2rzhmo z<6NT!9zz@02|k;jcR+HUa?F{J(r%kz`c*m^~ZG#VE? zwX+rbjWFoSX&~9XB!_`y_tLDy?xk6Y-Al6)yO(Aqb}!A6-AjR;gy zuLi+08wuCBXtTC#sX8hcRVOL1d|ZrwwRZkN_j}c%=e=st>0Y(yZ?9T(wO8$og^L`O z=zweCQpct22!~wCL^TJ%TJDzFiw4-W{rGi5Y`MprHj$AxDjXwkNY0bm>L{TVK6L~4 zXQlcgN4^wa>L|c3!4yh)i5+v~bMDgu4JhilVLkS5o01mo*F7-$9GFlD*#J5$Xs(L& zU|;J;K%*LsOZQT$1dN%-!O&w8!GaX~SP9|{S3nT&G?XA>xaCd_3gYH#+6rRHqdy~v z{n7;S;;F8rSu~m;|MeYAdW?HQglM@Opf21$gk@qs?mw)L!SQhhFjwQ_nWrSiM|-BC zeS!RfnEVax(1PdoV#ZR33kevYyb`~M|4hm$h6No<@Q#td+AxMNT<(;nk_>DXL(nd_ z=`s$EL9ha~oLjWuPCJ5kpW_cQCsnyr;##~iZQ7h`tZ~$yzZazHmAZtZ>$%%$qJV$EmD4Jb&XvpasJNwSTdh|C} z65u|>P>@|3Kp`zOSv?luaU34aDMsCD5(xVX>JEKqoPMenIt6)v@RkMPI8`kh)q3(V z0>i?iXkADuEP837?=?vVkIs@^9iQRd9hnSsbYXVFK9;Sj*9ZS5sc0Mh^lsXDRh;B5E60Gy><#4}JzwMB;uV21a|X3Sf3IfYz8w zuL|xj9D(x{GAgTbRvs)y5ex=x$V@vPWSTLPL#9kKX41lN!=`;EHxgHKI`b878a5WN zO~5BYAh;|?mqHKJa&*(Lh(oqfvY2MPho}e&6G6qOJ8wOa^)ASRcQXzB)x*aJM*m)F zfjF0C8>dLk%+l~w03DmXretg3y@cknA{~B58U(_%m|ff@i>g>;?vZ{#0f1=QzA8 z{)Bqsv4hI#lEgXnOT-fj5!#+Zc|INTuLU>axqVSLiqe0S;xC|xw(J5dFO+7xBNsrb z`*4j+7L*;U-j@{;TXRI39iH_9e=L2WqVBaE0SW#8+{Y zFt`{3#@z>Z%)(HB5f~e7+~G~0@E4x&H^yZ#9((bPBg08`4l1+*usmK5o(aqou`p3s z(1T-Rbl@=zpru$IKyzH8=^zMJv*ZwISTj5CbO5BueEZ9Vu%#6klqFAK!!Jo0yU;8nK%zMgjF{99k8?e}zopVr-1Y{V zfJN?)!U#A`F03!{AL#4rWkD(N&nwLL<|7JWf@S{kFx9BVya8J1OClMWoac%5ueubg zc+PFU9K1vCu7KX193SLyp5W`@iClqj$Mk~wc(?IIpK{H&Xooxed0F_aGSc8XPxSN? zf#LM}GUrzed~9UkV`GVUTw3T(X>M*d@_n~L^lqf+iLs_3N2VTLi*;pBc$b^2!`u~z z^W}!UoXbDHlSyEff;2*H%OYmZG`yuWyt*{}0kxJ4 zL(|mRinbabs}LR})sVbkAyxt;R4{e;PON69$QO3*^g-36FimIvf2-qzSsC4=jzfMh z<{nr{AP5^gD82JN;%(s(vdDihkdi)bEy&4)00!f~S~n!^(0M92rG8H=S^=ad4M zcHbKAB1eifHk5>$f4TYkxa)s`yddccV#jP4fgjlIKmQASjqOZQL|ax`C`;&fnU|u_ zgja|OA9yKPT(4|61(?E1CV^(6j!}uvk?h2z%@!N}CN!yA+ zpZ6NdDE^s@fUrd+*|GAYiEr+0m#941K^a@k0@2)3Bqsbr@t+qXBlfh)om6guyFUpI zdoD`Dn_}nD4?+C(qBiwIH=ro|2ZrCZ;1zgj=Wh)25^LvoT4)Ti{V+{hXqY^8%kT}+ zBZU!X!_WwKYNk&yV)Imuzgb{3yvO>e#7Cx>uv;*4#j;f5 zb7gJlAKb~@&+!NSo@5du^d8>H6fRnF)5FmMtCtq~2Qu0)$Q>Q~pA!H6PP51RTdCStZivokRQNIlfTeu(%z+* z$y|^hnG1Q}WIV}Au;6MczgT=v7+ZK^YP^OYU#LeW7DwiRGuDVUGO)J{`_BOp;4DiUiy((ZV0~^}$N1m- zNekG1epXNsuzXk2h?o$uc)syAmNYnH16i4)F1S*;uzipt1UnEhRXnfFW0T=phy$j+ zsA3L#g``Bd+y$#xtU_(HibF4SrC3FaZxL*1o|uh|xy$p>H-^jDF5^bk#@J8OBvy%) zCvvoh+rqJxH@pV-B9(;KEg!(D;Vqugb79+DfAA5Bnyy8SKwi_SH9n3YOHL zrEQA2Vb#s~nXjGNneKYR1L8R7CqV;^2wte*T4`$&DKAkLY%3Efl(`WnUh5O`&)DzX z?}ER2c!dPOu;x=`ZJlH=z(DUA93Xs8q`L>f1$X2!yC*uR1SrD){1_GmW!$Lfr8`0H z@#Zh#ebhF!4DqaG??PYztQJ7PtO=vAPwsK10dd9cY%tp^`=(cFR&}hLvT%>m@VM-<@Ho4N60~+K1s6N+#xm{)4FqkS~D1_MZJpR6IrWrTg%Bh^t2g0k)uLx z_>a>lDWo#j4e$PtW*lOaDl&TXE{6*R5ai+IGYAK%6=%kS)QU6XL3YNOdodnluVE-? zW-)PKJ=!51zs7gl7$(p{^^&+qTIKkTyKcH;E-QzNaKC-j*8MVsamH_Xx77_&m9uHg z58aeLK@|ABjIN-OjxK0IyO<`T66wx%86PGPssQUzC6=>3I^IB%M9RytPOjt7k|*MF z>CWx5F7kvMU_s5@kHcD?#hTT9=P0fU3gL<6fzh4MhnQpky&bFDF5|v1Eh8dQTn!!T zBGm*-u-IKnaLsxcjYNCzD2?`O)}vFG2Sztc1_W;rnNm$ma6Xz%eYuT#mEK!Yk!6HR zATpzJya!04a&ixlMCGtk329`-EV4qPa>teoTwW07fhWfn;*B9n}0?vRPDWRwWqW!FV&VvP)a z;c!FnUg^vZtn5c^yni4f7W1Ck{j`e&ui<{F955{LK{%OA6Jf}SAZ zD-3~m;%su@k#neD#=$c{$uNRT+i@hBMOg(btfl}Fj3?Uj!iiz`Mq_N)vvGf5bm;^z z#e2-;NX5pzkk1`;vYCMAD<+1gZQL7c06{Gb6G(Gp0Ib*(q;}MH-dH%rkF9?f_W`$@ zM{u|#5G`jCS-Y_iAVp?TBk^?|EFYOcxTviwt9Rb4#(7msF#{%tUY0UKcu+C?fMDW47xrccKw<`;=`mIi?sEJEeJ=T-5rMNS zDXXwF_2>~s7!OCELZ(G+=ZpcvXEv!x)C@8U`(a;|^RrWtiv4$(RGU7D+ATrpEf;{< za?!)RZi-p9(eri@S9p`z;Cm%XaO}tV>5(oKHT*P=jmbI}yGnSh4woQc zHp*nv!ZF7hhcI`mD{+BQdY(+@-C@KR{_jX_(m7(d*{R~us-&KoL_D;4C{e4wK}GK;cb+3 zst^TliOIl1;E=SxnAqKdgyh6d*>4(w<)9N3_#EgjjlgXBJz@lA)9(=@Fq?jl7=hUd zBQQH*1ZF3U!0dz(C_rO2E%*hI0c*CR4YFnzemP;4*ER#joDaY%T)%*DBX%CL1bhir zK&MzCeyz4_kz+6bBSP&PMvF&!Q&Rl$tA-}hUuc15g%)@xEn@#tR=a#9_9nzvLkpuh zSx%SGOtlu2);M~wJkeG4f4&`ygnIPSPQ3AAWXkY#&5a{ud^4tE*WzIjHhF-N%X7n) z+OlZx&bR<|VPN!AE(n&lhGCdWA_THj%P+_Rx{~Qz@e2+8=>~36!oaxB_{#=0ph(FC ziBye_NJR)%7r5TXmaxCA2n^@#Tr(*Ray!>dN`u_aHIvdHw{y*;G|25-Gbs&nJJ(D~ zgWS$FlhRN#1LJe-0?IP(pK-zh-n@zbE0ABc7ZY~s zns#GSS}<-Y>~|s-XNBLaaGb>EK*YC6g;Q6mVWgG<5w*QufLPqIOoP;l;evs(VsV$B z3sNid%;HwWEj<=@p!WZpSllL1Ff|sZaeiz(jJOZwe<2w`GyIY~sLdAFkewuyIq|So zw^bRZtw8Ztuw8kN# zwqMCen|R#r5iZ0(Vm~BoaV##6ZA~%4Xz+I0odhsCU%`g0&3JkQyYax6eC~WKh=sPA zJMz^2{_BB}xxXKi7G9$ZfKVTZBuD14$ObWZbxK{!xPLrz1~;qa{tBC-vHu$9Z%#x$ zM4|Z{h)0hGibvY*1;r?c&GzNk9^P`>llRtWp>HXh(cD%VK?3*~@BaCPxHbHJ<^Y32 zVt^21;wT(Whm~_G6wQsDg<9x^uHxGl=lO68+Qs=eUJW`D&wK(vKmx~9>$Ok=61j8| zk|0W89+nPOJSA!yK!h)QlL))zFw9XegVm)-P#%%&zUPW;zVP{;k>oSZq*pjx@f@Sm zY!VpH%BMkS6>H9s3k#G(G>%w`LsXfpR*Y)veX1HR@eo(24YA_Is3*iy0YG_lExZNS zG&sBXia6&nPU$IYI(^Zg@KbkQZ1>@NBHY~{-W$6OJx*kSFU2pRSF_$YOs`%Yk=Coz zO!U%v#S=8{$k+mPhQ1o-Ib1lXb31FoC*1F)PpCQ*%{i4F;K>@I9Bu+qI95*P%MA|r zC9##nf>(LQWm8k-lwumY4uWo;q)_r%haQ>onYT|H(x6?kd7pM_GcK}d#_e)AZE!|| z@1%JHr|a5nm|?ER9-VK;;N_;qdfb4KTYhK^7VOSgIXhcU59Set3Wpt8Iqzn;5I_9g z2d(>bfF%X(h*8~|{o_{P%z`O@<$|$nWs!PnWDSxr45XyF^K9UIv|96x4W0KVF zeEFY|O>r%d>z}A1zRTew>^cXOJWki+>5_EKJy!7m%HLe({t(*7@uHXPP8fh$6h# z@fdK;_R+yHiQ}_i5^m|U`bL&Ta~2GB!TIr{yFx!XkQ6%)5Rex+!-U8)xV%siI|+E1 zk1odxGcxwyt^_9yVy;hW!BWWx#|sy+Zg8TUIpoEQxF4gAd!Mx6F0`3awH<0-SUpkWi??8Xyf8W6FuHeyx z+g#T9)zjHQ(7hQ&1dZ;XoALQ+SR0V>J&1tvQsfCGm2hK-xD&=#EKpa!@czFG>@n*OG%l(yS()lzn*+fKB_-UcS6FVpdnb@cdY8<%s5lg$_-=si|Tu zM)9|6OJDTiUZjt=0qu|S_dZbW`5B+ z;gX5`#zvw}qBrdy*uUAoHv0yjhJFei8=lQ8=ZQ)zBzWoZ@cxZG&^c~?GOxl!ONiP{ zbL1QENrvwzprzTH1T&ml$D?R9=-|eM*3IO?MQ3XzUKl zA1z3SI_X>Dm{_iDFwGbIcghd;t$@C;x$1H|%P#`Urq|cC2-8kNogx`4to`=091G*Ch6G63oaGYe?iKJNGVYo z2To(m=Nv$IVwSN?vw#OKkP`U*Zs1pFe9B{=2~q5blP3x%RsSAO_7DCS?yfDMtJMHM zYwwtPJ)Gq*7CrO<4yRqxdW|PCbP$gF&_%Lc^8FYX?Ms1&w#?S$v_J-8EI3*+qDMog zxXtJk`k+-`o8jhT~9^#H>>V9XU0!KCZctKVO$#g00*^m zKOY?62!|S)y%`TGS6p1Wwxw`waj6#k+EVSNO~~)x>j!abx0h)5HpT}qr4{ssjKq%y zxCa!t{&AHy9#>afV71?v89!dLH_|^ab_C%3O0$IU50oZdeS_wmL>AMP-Y2f~N+fTs zIZC+!iOY~NdnFxk4W@a(1m}i92b^fdY(c>XA<(!M{4vw=jFPnvN4+iwP3l#GdN*my za@G}qdboUp!jqsLwa(}Z{88Xp6p(IITGV5%Q18Tf`RvNdL{~6(u=n5cZ$&-r-j(tG zOjwBoT=Ulpz@{o-{a=zK-rh0-$Xo4$ddGr##$$Jwl&fU*fP&Ykg^og5?YCT3VYBO! zlMzx-yJHW0p|(^!3>_qXfMW5ZsGfdY#%}JV|&~ zoEJX+BMsPa@GR=UxF6Q2?7_(bBK#+T&FjnsTbFUMiQNoo(Pf+`(0OJknw1TVGSe`s zHJ;w9P&bP|z*mK!K?HRT75Vl z_s9MqG!4o05ax`vQx40em@~r;u@O`DO%Jw&;6M1lQ0olVLCe|li&!~-qdm{&qDYlI z+bU+@A_3fQ@Ri1%tHU9TI7>Es`~}bD5C*n5vU~*Ft?&!|*PUB&wL!G!(Z;@Cv!+#` z4Fs%g5SdckZSmtrdSmMtz0+oWV2j>qC1DAE&Mn@alcGJ*NVD-YVIlr?660TgQn6dX zByn8$379~06^|HU74PV)73O@EXb=1rhWS8e+r^9&)~zN_E?*_8REbACm?2@r-=D+U z$DSA7ks3)~l};8J3M>C999-Hv}Nowy7WLut9(YI#4ogZo*Y zMaw>`WtEGTnY&M$)~4m(98t^0bTn$tKcS8vVO}Fm>sHfyRnu3p>6YisPODrr&0M%e zZJOS9LJAEJ+i4^Io$Bwetwvo|qlRkq%V*GN$ZAyOqEY7V)2?XK=&eWA=xnpm@3Ud| zuD^}Op4JD{y@jnEr&`0Q6Qrkz#egG&o@YXTfY5Ka-Gt8d-xCP^)#rqOSP@Q#-q`<$ z2=>}O5{%c5Ddq0iS24~8OGUYR0SlZo!AzZ+M}%$H$3?qO_E5HzEIB`9CfwGGNk(Fc*p0t@9O3gxn= zfbxuIO^IZppv+=|^1W#&Kic<*P_D%Ib_5jOgq{hyFY(|@DurJL{(^3yh3>No-AA4z z|DQ3@Rk@I5=5|2gy~iIBy3b*>1G-~=fx;&O-Rbp$@F6JLbp`-oHnw{2ZWxR@Kcl#%^p9#V}Va26Y!2Fq&1$Pzc*+ zz{8yXJ}u`ef&R};76#44VA~fdgpicADusmD`8Y6`lZwHY!~h;n8zRg) zG8AqU6mS>w&s&qvKr5lY$j=*?3#18rZ`FaI9Ox5T)}tpt_r=G6Zqt*dz~_l{L4KGk z^0R2A_Hg6C_4w9lVz6vE?ucmjHylhzRno)Ql_5Y}aPHm~=N?D^szKS(D>yGyI3HL7 zoO@e1+bx`#D>&b`QhTVeTN=*irQ?iipb+7Kcl77ch@xYz7{wd|)16ar{{J9us<;iW z7Qyw%SWGZ4%jaEgmdBCIOSvJz4@4NhN#5CsaGgNs3v~Y<(>@fF?*FDSuZfB*FSe(E7D0trvCN`cQW zD-qPcwYOV)B@3GoU+H;C*{b%e6KnYOpWRAhpY*#85PcF?4Xc^5g)#V@nJ9G!_nOT z4ho>ZuXhT}=*fA4#(TO%BjIT@M9<4Ii(%&2cIOsR`_xZ zVIJp4z8oBDz)Y|#ylHxU{OH7s94o@Tmz&u*?uwY6$MgKS&F&`rJJ%B)h20CYfhfNF zSLWR5?OulaRU!@t?pOg(eo9)Q_y~TOZ(+s7>G6@{-OdxV&>ix8VV2u@ah9*vgY&1bW%B?H6a4Tx=ceIGkP29|+>5<#Bjg@N2fFGmb9+{Z{f#5H$oH9C>1a=L;2Ggp8 zu8eW54t$3#_gxwjuDwm9D+$pGz7JC2G8}tJ-TpIgpIe3P8`0c*q|_$wNwHUvEB*tr zZ~nt`xB2=b`(?YJfb-SJEoxAop9=89LnxK`>T%y|p*rLc%Ujg2cZm$F5o{gVIi<)SAW%2CI-XFW|~Tv5qe=UZkR%vWj;D>a9XO(T`2)(}TEX!FL{4HBW*=+!gR$2|Am)eCWD_zDp+!-dcM=PbkGI2gv zioQ$#1~J=-sRDPL(3fbRy&UEw16TT3vXqdxb4`SM@e+%)ZYfj|KYRTV#oL)^BOS?T z?wB0*7rd=75twBnAbZHfKVtiri?BM+&xYl~LV9F)QA2EmfW!W`lki~i0H68Jy@7TZ zJm?!gnf_ZUdF!RQO&yYVGcBefZ#NTTt|PX^_%{~Dk0X=tMIsNF5^3TwrxFh$h=Z{| z0`j*F`4B07YgAKidOL|Tt7@SaQ5M~J5~fYyqkix%q{SBD4@!wNU5^qc_5>RV-*>B$ z?J-KW*-Fj_TYpZr&2RqvqHIHd&|*S7%h4j+>qtC*PqY>N)-6^Xza2?!>6arQntjtL zZsSwMjRx!`Wx#wx+KH2e#?jJ#nmn4VPLWo<>9`d&SW=s!Pxvk_*6wdTMtfz{SUPCu zO)qio_r|a}YP$fAZ=s3LmXTX6y>e}oUy3X+{xy_APUa?8Q@LxBABil8y^Xb))WHMK zYW&!Zcz`*6R1tVJf!8wp>leDMP}@(Vxi6X&fRxK90{v0LNR>H^bYg4-A!V6cCF%<> zfHemg4Fe25f;;S^wJzRixCW$MB!Ho6+_ga>+Hm`A9Gz@=6Bxj=c!A@SwrpIUyLdvL z7UGpH=C%cEKq~?!m=+B%*E3AqG0zoTK#$tkbkq_W!c-9BXzr-)E;NUB$ECK5OLbMd z^;+mGWKcOQdm9>v1nsx{ZV{4?gT6q6awM&*O4GR5*}y;R;8T}qiyO*9>+sV!zPM2f z?v_DBAwc~=+iN*=n0qj8z+yoHyGJlcNQtLd!lDYU{4=S-{X4%$770@b!W3$u082t3 zF#d^cwWxCp;Qj)2bU}l6@0fE`*&T`-Brsu}mv3x>k^Th;T>v4SzKg9Md?NGlO+G9) zrQyZUUgFbbn~Q!3ZuZWhbEjJy{jil3h~1WN6f4B~wPAb; ztT>{ls$cL3E-U5>z)Zx;ykg@3R(R1b?1qzduntfGyyU`8XW*5pTnN`0D6{e2;TnJ}zA$|Og?y|Q zISR%s+qglt2>41(8#Mx(QE=hRSUYJ4!-cJLnAZ$7uEAhO`#}F%?cl_<-Tt{lGkjTV zN``i}C{RwKBL``nQqq$4r>=!x;#sEhX@^pbU=q8sdNy5 zA&tN)kBM z(Mxoe`x^?7p!PS+0%p?By05rU&HVsX@@uZ)Gtkfz37~QXHcVoCs%trO*p5%NAicc0 zmh)cucMMlG;~ApRm|@w^Elj}v1g=06W&_``Cj#|3m!H#*mx<>g6Q}0Xjp}+-T{c)B zN3g&=_l^5u&MU%6YF@84XwMGbS_WfdW=1UN817U99>%36Wf#d;v=0Hex&N{hs6B0S zK~1c!niAlSk3jl2hsH?yAhl!tY>>V01h)CA29%ALzS+@QwC*)N7ww4m$C>+j8cWxoaPACOO}U(hLj zCW2(IOIugZ;0Mzc3>5xp@hIFoim=*t_D=xP{_;~RI*-dS%8a|1TU#?SZa){7`S2p2 z(^78nsQ~GWw}C%ky$o19bd2jnOzPo6EkLR~6dMOo&;zSFC#u5}056B-vULkJ0LY%)L8dE6Dl3 zRdHGvW!|Kw)}7S#@%MHKSo=ZPdF%)2T%z`a@Kx;x5rKd@;C_PtjLC@A0CH)d0rz#R zD+_Oj3$NXME&N*^DkQaN_<y}oha z&)%=VUPuSg=TS%Y5*WPN3Bu0X;80;bk3~(eR77cz(wwsBl-AP5-B}aYx{syt!DZepULwhn-+=||%H&3D?}{m>X(w5(%G0{cbNCU=U%!-Vhgt#R-g!cQJ} zmL|+8Oi8!_S2hz}X#omX<;F-;P7!)m^&f!)(Yf)S=q32_$);IFIE^e^;{13lxN@0v zK;h2Orkt!{ZP8_boPJ)|U4AHbI#drpIwydbs`n6qmfaXzrW*L9EP1NyJnthAz<$n88IM7%fsk_AWzSxQ!V*!)_d>zO7r$ zW+dOaNnMaaU5$^WTuCz6P8lL|m;)1RQT=)s2=-|VY?W(KENSCLG}iP)$3oC|W#P7y zF1QkZL}v=QeR8B{7vpU#qsX^rC*dxXES&1JhAO2Z9q88O7%)Voa7i?@iwYH6i20bu zIVIaSS=1EixH@d~JFCZJD35yZ&AWk`T)`BSYndSNe+SMY@x~;B@>t=hWNS^*vrYJv z114@5Sz^D3g~!f&$Qb3`kZfxoAhs9r-MLM>TMQP4mb`jvY?;z2j?2m$WU#_@ikpng ztCU`0l4VxpZ2|ybwVNDm*bE06PuqcJf*!r16Nd_%y-C~`_vILn|626I0>q)llQPs$ zn=93L1Nl3HBTn=R8FAopZ+g=d`zHVf_QmM?OOXD%p~sT@#VwHg_XA4q*?nv15n9Tz z+q?|QJuc~4Bm~FMvtWdhc@n1W(6a%%;$s(3sZ8miOpu|FXwydlp((N+YC>!?<0onE ztI?F-)?bZXgk7QupDp!){+o{0l>fH!n1uhP4)|j*pw7|vlHV2PeG1t4iFfzHyUcqP zmO6NC1p|N8w3Wc8!ua@mViuI$o8UesPKzD+EQOA-6#K(k?4YsKEG!u)$P9XkytslF zGT;_pE%+JfOCPcU50?K}zAlAVP_g+!QVuWJY%M$I9iFfowW=StjjIqVTIm|?71!wD+(t9VDS(JD#;Hy?m_*;b>}&xb!z z^s8c@rGVM)82DOk+l^PDjpwjEKaOLTqnF@8M`&CvKI2{!o`&_EAp`Sw#>zXn{|(=f z?cbKw5V&&q+mvvAVj9+QUE-B7Z_1t(-x6^u~NuNa~ zl%_Hr27W8XgL9N!f5c@O?en8xaQc%9+&d z*24)5e!mSji^gx0eJ{A6O(aFo3FD+uxV$(p`t*Z$z|{31zC?@Phk1CIvUPkHTZikG zkS*pS!cS?8gN2931<22SN)g^H>IGU=56Wk1+$u??E_*tej6?0)n@ z={I8ELb}|A$Vl*y@%0*}qtR5Z6ieD%aA<{09rdWV&bZo@&lwyeT2Zee*pwTX{=Z*uph^Tx(^)3PeH973{G33)acCkOb2XYW}ghNPJ& zCaQp0V&}piLeH1)0kH6fm>q%oWR2wDkq`>w8(cGM#PG-R?bV(#^7vWm4N!QNDBvRg zy9eOma8CWnmy*9`W#HmxB`}CUl1{yVvYdL%qVJM(0hUKUksf`0!W#z!*uG&shr_#B z@R1T9f=zr!q7pCZF1^fe&Ps9XhjMNJ_7c#lbCiEG@|R%!cb7HV^S!PIUAqc;@_XBwsnEKh%`~ zah)OiW9kr8-Qi5S_=Mf%W3(uh?_A+cZ5Ryh3p zl|CpLvyf>}$hX>vQVU{X~E3>3>+f;|t z6N|%{CBY!oEcHkOX5tY3Hg*$HO|U6Jlbw@Elf^Pz7&kwn@F!d7{nG%IMLf+0bt_*I z6@AL^^#eu=_5w55LoA4zUo?$WH18sp3=}RkIkucFM{U19TM_Bh9jXxpPsI#8&Xw8% z7gle{NsCB?f%O~f{L)!+g|(H9!9?&eV-6rTanZv+>OX#{Hy%>wm-d-9&Wn7ONJLRrye!b1T zeiu3IHvuR~#ifMoGy0-_&3q6^@?rn~gJ{{nIZCTJU_?rBFD?djbMZ5*7xGz3hjk3> z6-2<-n+z0?Xp%T$e_lUho2;Oy3~IZXXI@^6(Vlaca5~Q;HMQSF6htoyD0AiMJx(F)1k_IrTk8_A_f`Fzzil0?F2`2y3hloDc z%%i=r;c}7Kl6E>-03e*1(`G{_v#FCANV9a3)6`N+C-)L{xZ7t0To!HI!niT2#!}_W%KP zL!E#yl@Dq;7T6GFCLcyE5hw3REp-gd37-msZt>@I=Gx9kmHxzv5Wh5L!vq*J`R7Ld zxekAl9@uiy5CicN`Nhd%Ae2yWam9WvzWVU_lnpcF4kT)Y6AD_=6(dY8j#e`C;I>>b z_!pKp)?s}0_S4~vwY;l@kAUfnVY7tdx9N;kn(@`sQXDY}(n97T#KT4q$lren$baXB zA-=U#`C&s1DCNyFm0&1JDnCq7mv_m&{53^E;;STw8DH&d-k-^&RA21sPnG}WM`TD3 z@55f3*!?&=lVn?yunU(Gn{0cTB&OqhG6}_KIPFVG`-pg~OmR#AfMW|;5vGfPk{lCo z;Mfdu43WWf=edl|GvT-OpWiwS)SmE;Vi_TmWrz-@v22E7nfTACY)kc@0|3PM!@(`T z0PDZwT1f7_(^LkRGrUGS&z9WqjY1^F@b86MzY#b{_{ zyj12H3k)$}L;?HoQM4FOrGZsguzXVHaHY8ThHEqHsN*2F6FO!7+&NpQITN3@mfq z;U`URGP(A^bmQ#5F#@OsHvl(|rAij3VIN%7Hm88&FxJbAoMuuROS>e7D$;JX%q|dk zsz7`$nuNYcqDeR_#T+Q4vKYWp}0Hg*iz_lkT3&2;)0_48@A;cOQ(f}mMLh=d^9g_KvkUozKla)DOcFi(4=GkkJ@Jh%=qx;YcC#v$iEt6^LpiS% z4pApzJ8)D8c@v}kut5$-VR%5sA_sxQok>qcP4S4ifR7F<9|TF+@Gm7P`2tV*Ap(;W zS;DSCf)~oK`c4+-d=sNtFne2!Z%!dwSD4Gei&Xh&KYWWP8NZXd7EWvhU)_UpE0CCW zNxK&4VJjTKX}F1#G*1su%2;(I_%0`bte#*J8qF%l&N-})Pc=~z%O>-V0I38_J<;;T#}Cq-m3iY@TlW+hPOjKD9{Fv*Gg0f}<(t#mT7 zd$iQ5tVKcV-RiDTvXYd1QijMRC8gf~ijp-a0j;k$D6|AzJ4zlNEt8%`jyZBK$)L1Z z^YRtuxZ!;t#Ik&U@B5h8|MZEe`Aa39KyCEAzstDu1j>m@ll#1J!Z_@Gf0q*QR0fID z%bjTDv17Ql8(N363sIZx!(y0F&TmIvr)*A@Wpkh)v^jUMWqco5{0yg&LiW-HsLE9a&Xm8>v=jGCOPh}dzSa*T8o!GYw(FO)dO z5B|`mRrH%#sqq8IDkdr%;nRZ%MCzekDM%$eA7fQ!>XF8au#2#b=b~QK{=DZpC->*k zd&=jMmE8X&p~?BkMo6;p%kF{QP@SCXzE{`s;QXW5-exU$9*V@K;13M4fx|7<_{Cs_ zYzvK@qcUIkh}IerjFa(>3xM!_(yTds{4JTYOP7O!@Oj|E$W}h#AHGNGJHJ(tEL-myTA4oy>fp;PKTTYsj z7p?goC(4eVop1Jk;H+a~TMKd2P zK7`05wsEhVbEtq+ExV8(3dX7>dJPwu_Zg$s7S)2ULpG3o72btE2CIa3jf4#J zTIdq>@x%92?#grV-gJ1PzQ5_kD*wl1@e9g+N8c;$U8(afOu7JR|Hx2wDrx8S!CxdHCw20|RXkwZ@#;iSxifi=0d zm0N9(Z0fl`+$!sszh2lfn(Q5o8rsBcAb3!xn7DGlh1VIl3NF0yo^!oJGCiFIBB?NZ zzM_wQR(D9_v%2W-=<)NwKE39Ej4H;(eo&oKjRr8F@_Bw~Th}@U{Ld)>8x7udvh&#d z;5|n#r4Wc3t?Up}_?aVDOaB)Y4RhFDhX!KKPnP(e1rg`!r-&mos~Y)Lm-Atnk1La= za&e*7KUCF4x26j!ZXA!pv327D1D<3?e-9D3aYOfHB;&H|%wXwf?m)a77f|H~#^Q|q zB%Garjm90gG0p8?EvkEd;8s`?X7Tz0=ob*xt!>K|qO-jxFR)eo1ptA&ZIv80xHcX4 zs^t6M*RIBRrQCrM@~CLCSUJKLpuwV_jMr)P(%g1stKiR?}-3x08MC%Fi2 z{udzZiKiRsS4>Ml6|z9p$cNGLDLnGbgH8feU4klMAVO9*8{#sWRdSWca_UOZ0PvAH zF9P#Y3X0Q*dAy!I3TEinj1Q=w_WWm{-b-ZkHHTdFO3Ott{AS($kJ0`kPoVvpvWwL5 zMUG^K*~euI7TRg&;D9@ZbPY0&rHZx+bz+{%MEshQJ<1ZiCsSLdwxurigEnI#X!mb* z1~JJco5AaFdU`pzP~2v{f^9zB8y)dD%~lh}!4Mbr9cplevG&f>?_yBJ=z2Iqs+}$N zHVg!;4AztKeDwQZ9--j@jeN&gyRGtZHsF|)Qr1DdEkk$X9ZjSuf@-tS1gMmYdIppA zRw3CjK0~e}r#-{MZ_PED=YNkO3eFTv0Y?s~UB!*cU_wv#fHdGeznxjO6O++b$+Iq_l^Qfs@}ZWWiYP=!L6fe zHQ+}3@f7t&Coeha&+$Hl`%hSZF!{}QIr~CBI318K-$NDf-kH)GGcn~(0IQtYiAeF_ zz~oUL@;&-j6pQnuc^9R$CZ~;7_adGT{yjzi0HYOLJW1cv&-o2pUP8HGuDfx+&lNCT zjGWAiLQ-1m`;KmbgwiZEkn;g}uPMkBMuH9!eLt&3iu zk%**018hc#rDeiY&pDhg#{4hwpBCc-m=a8-n-t6&+1FoyB=#wUADkEQLT}o9ZP*M8 zRU^fW@Kf3o;}C)9ou&n0B?NWWr=cP(KDrKz4A7Rrn=_)Hu~{peko*RmW`q6A1|gxb zZ>>X$-jxQ4hE{z`OrXIpBNL4~?g?^q4cesWVmd`vp+?aUuT6m**&a@VX&V1@Qdd4f zNuq`~W^V|~nWQ{V?~$J{;^A$E7om{TF(=dTwt``M6s%J9EKIz$L8u9R(+kCbw;?cc zMPRU6Vb8Cno^Yx(#4kop`7R0!4nQQ67>0xi^~IbkS%V4hJ8?nIxa%W=0A6c>Np^LQ zq}^Wx=6_%xnP1l5q^)6ws1B!Tj7K1CARO3u#y@=M7Bw0f!fY zRI+Q`#OED;2;}Pd*`o#ATE83kts46ki=%2P*8*MCM6%_sx=76RML1~7a zhagGeK8d#C8>?PM1BTo>6)MBni>07(|05IXirW9EOEmXCoai2o{bKy)R;^Y0me9x! zfW+bUI3tzfY}gL@!DB_gqCnTL;26(mOy^$YWBJ|q<@rw>%ShsRG*0!k_{JDLaHD#C zt%Ok6hR3lax#Og*(vB+fDiFz8MOx&YbTF3UUOIK(IWMNO%YEm(m`>ey&Wq{nyrC4= zl=7*NPq>)QKD&rdm`y%{(UsNEG%MGpi)mJ>5z{R1I8>%tsiqWlscK45m#U_;NJ|2N zINv7AJP_Gm7i=*)h^=j%q83h?oez{kyP;X(xig;Wr&F1QvJfs6$O_UP+X~0<=aD6} z6H*xYIvDxdBcBWIoAi~w98O~SfpPW%C<|s;uJ7`eoP2%IZwA{cI-#HN68G*i!#p^D zob>oRvVL?scGxNkkQNGKlLr~5Jk;-c9L7@q&wocIA^9#Q{(qC?4+Aukd_6RBjx;hL z2bouXn~?l1pak?+?}C$c5h7rn!U^K4b~NYspO zx>nIQbd*;5V8Tji2E9ugnzb1ocE$N~*y>jb-+Sk$#Mvt1Pp`?pqpeW2YT+feOa9^I zZD?^5-myPZs!}Hysr$$WP*xbDAs@_G@ke|B8x;h`CWiK_qRSPqWzbJTkE>56{Jg6N zwNGc3V8Sm5fK4@VpMheD%94k)>d;Z1_6a6@Yb1_Gq6@+s7j37w0(Yim9n&7-!UuG| z5J?6Z-~ou^uesQN+$;BHUEox6K8*2@`>L0-jzNE#g2GrVqrC3a^rIZ`G(ZWl7{Kab zfb}}K1!Jw1I^L~@6&l_f9%9@GPOJRc7~W{C1@_vx^O`tB_Rt{&|LpZlLOcE0Ce=Ee z$X>FAvXh?q|CvWIGMH66eVZ~}4LfjV(ss{oa25A$tAH$o7H;wE#C=;{;@L^|ZRI}u zIceOeU>+OJZ*p-RWH~HY%8lJQ9`;oHgX5fAPEINCoQpG#_F8q6vw}PmDng+d)kq&x z|KD%eDqYfcua0`2N{77nczrXuR;dlP%JcX!@SLbe1%bP;7kqnSxVy`@E!)-bHpqC- zTgZ*ET?^n;`vsN%u-(%K?YaH$@UqgwNP$=%0E{>x%p+ZA)A4j7|@Bb=abTQ-vM+zcbIfPL={!VV&0 z2Yl-$j-Fl(TltBtA{$#JOo#C+FkOyzcoqGUhNZpRb@Fs0{wPr3K#-jfCIlJ3p+w|b z(!f5zIz+WpgAG;3JI5B~(l0pj4? zh!4i#gp6ukDr(It`Kk^MYMB!-6l>!LV;w~9F>;?St$^PPP;iX?)oIo1wKoAZ1E|Fw zFDP{Yr9yXO2PAfm*k7S&6}N+1K(I&q2d+VU+^V|R0W?(Hsq4OIqBe;`iHbY*elyAw z6e{XZC8qxL2&Qm7egON;>BD&`{Kk34(U?Vkqhg%R-^#kOG;&uiUeF&D8QQ%l4qY1y z0weQEakl1)q6itnR|>AIS{Ecpy&HANowS=!f@T#czAC3Xh~R>{ zi1^>T|9ur;XlJWPLTf~wOcICnCSKuOu_FDCc+JCA>5#kI!w4s71O(B(8zVB_KtoXA zszp%&YV&Q}q0W|3^ByW0Cbm6<5~2K&z$BjYFx6LslL{CQ?nUOog^h?W6Yh;1jLxB= zHX_$ZBNq*=%yk7mUWbneyX>4=EQ=)6g%eE-XsRZLZ)Sc!<<-waQB@5IIrbk$cE32 z*|pVb7E#@72!8cuB`K!0<1)VKCIQaE!4x=3Ulj*;CnsJ=5k?% zpsRXW8Xe0CpT;x&;7Mn5Wm8es`+E8+WJ6z<0t&p{iAF&k>K~Oi7(=@W+gdPo;f7LI z!&{V8_gsYGJgN#DtXKX}aKBmUqqmyfw*zQY7) zMs?W}mR7{(qTTwL8tWy*FEj|sO{|5H{*B{%ra8XDj{dO@{ogP);SBOn2(% zK!~m}>hp1P8UjNk}9K}M_EQ|XWHda0HeFAM4Ef*NsE=Hnl zU0z@45yV8c@am;%*n`?j;#gb|3S;>BxO@va@`EG4k^!*nzW^5AK9m0C=$L!9_hfgQ zkC!ioxR8J;DG?*o8Gs^nr!^iV%$3MRkxSG`a=-nrskneGJ@Fc<#Y)&Zyg2&Yuo5!94Q z%Y&WzcN(AY$4=L;PP8=GXc|3UC|x zufiYSy?6FU9b;4-B6O7gJYC8pO%Pn)vQ_rQdo&^d^w>JR8LrDi9aNDc5Y4cULpFyg z*}laeWDWmW&&stl2lDFhWHykYeS2cqV z&vlAt0axA>2f^faibS5S-aFwqW8V3v6I&M?{yj23PodY8A#0+Bq~Na&ib@Cn8-OyJ zxol-9IRqhOM^+5sc8GxZ7Yqqw6rYw5`Ie*U^oH@%DncALza~Z6K)0(+g&2Ygl0ti+ z*#@9lnOhN@6*MOrh>#?hy#6)eI2^F&&W(v~&**GP_q{4T>uE%9E1yU7Y;af^*2@jM zj9JTBd2A5^PVu9zW9teZ3>w-xjA&5y4NG0otUx;G8ay_?Y7Z*!Jje}7 z9C)2#osS2)ohpe#w^Jo?=yqx^rN`;qY%V~&(z|N^7;BGeylPzp#4-sspwjgXfPupa zyRC8(w4fH?U#r8vHHGSXxn%_chFytEy9bH5;~9e>tnWieh02`2P@KvHz-BBiBOE{W{ILFpANx$VPK@OA~>jGY}rKc&k10(CIxR!^Zl-L{}@mIV%FLLYO8 z7)(wEM|FoG+$Bnxg{@*gHal2i4nrK(k39^p08G)tuzGW&s$*=aI1V+j4PbSY7CM6M zAU*!{5zH96f7(ng3cMgh#E*KdxUsll0a%6a`Blo-9|X7n1aLdv@?0Y>4}?0CJ2^#- z=3n-CCP!5<%7ighfpzrL4P53SyfA|QbB#AnCa&ZRna%d&$_Uz=umoc;cUJ6VJB4|? zSvNm8`76#JdEQg4ZOfCvoUQ21ICi2fP8n!x7plth-j$M|+n+1{qCT95+4&_rvcepi;Vs{~RnukbyUb79uuWK~q|`a`R9Qoq~z?WG7EM z(PYDIy(c@{R&L7AhPj^}V30ho13s7Ix;Rf;SKzut<4{2*S8aiA7+;R_l>262TpPz& zL^8G^L9v8y%gkSF_HFtMuC2D^l+8jQCkRvo0u_TmeLsAj1p1;3q&Xk~ut1uR3;Z~n za}eZPvKIP7f#VctL+dkW^Ai5%d2v%X{0N`apGlX8@yvSK=Dmt1Wc2d`{6=zJfp{3x zK^_;$^VJEE2ikg^_QWZY2i^_za)FPFu@?ynq}ohEa9AYQ z>FD4=Y_E}^hBW6npQ2yJvIz$6+^H)YKEs#Y7Z*SHPQ@?k zC=4JjCW!8gXxl30wlg@mvkS*~dhc*xf~&$-8Id`A)T;dmvH-_xlJqGHPK# z2OYNOeRmLUE_t?L+wrxJ^X82ku=bAAj^d&ZG0UjS!)gA)RL}dy51ja%Ggd_@W-O4V zkGi9FqtOL&-+0tculA%I*Nh@@XfK3tQ$q&*?+&ZY-HFihb>rki0Eo5;3hb=yq!$7T zcEIi4*wlRsmUfWWc28T5)&Tx@!kMnnjyc=*A_w~cPXc&6+#Y`vzj6z@h;%6TT#Qk% z{aNPf?P<%+O4!5{lXWQw#PdU_1FH@8eH^*m!7+##xNFW$WC9Q#!SO%k!#1!vU7Jz>d208L|M+i4&)zxjzWI>Z+PZr-FWV(6LF z?FUS>KmArw7Y-PP}&_>2uk0M5S>El1*G&1k`Mq`?FC zBm&Cz(NIzfqOLhFC{W1=%kgZ0s&|XQ4S*Ni;0|_QJla3u5V&FCA;8#QU_5tpV8Wq# zhWgx!aFYV&_(X*J1T!3}M-ywF!d!w-`h5Yc%YQ(&N`bxa&i-9y}rDL(JW3h$3c~uLfG{TQWLdkvaX*^i|*n<~tz6N*#rR{z;oC zwbT+*hb@7zROzrKOcWiq#MEI+3i*vXY>BDEmY6y$r%TLP{n!TdyaQ-c*Z;&O&-3rJ z$>(kSqGO)#BV3JvT2YiR_dzinv zSSko`riHtRI$)R85b6hvQPmeBUSQ?t42t)Gs59aXJ) zO7Xodzf)_)^GW^tWIX>9b%%bVzCVWN8JNHKcyf{QE>jk<jHm2EM<}@6*-y-FRkx zJHD^Rv&atyCv*o#L(Xky1b7NHgPU^?;rP*@-(bu^zN`ntBDvJ&GAL?j+6A}mDIXo| z+PNS&uF98l_X`|OH*k?jRi9!bSJ&+jW0l2%37;QyAYmV_4S@fwgKkxdKSZJ8Qj;Z( z>W#)Z=5x7fU?ni7lS!}=QXIrBWV>(>w~+0^L8ZuH7Y-@~8`*_}O2I~ogSZs33kQ|X z1U*)Y#M>2e(10mX?;#z@@=4x!atCYY!dEse4Od>ZNyl?y=Fh)_B2~?EX{(Dq=i(=xh~=YQ`TA_WG&#}K+IH_ zV`I4!cOBp-geTc`fWMJE5*qp%;VYq`vk@Ng7rsLBh`;vP#qx;1_Sqal0@AwYByhwq z|5tgwx8tE4R{#jAga2x6tEj`&Ovk7i0#MOltK5PlXh_ecb2B>c*qgY|i~nrdU@2rCgc_`vX)AQs@M!{liv$%JqGX<${Ya08Y#)mH}|e z7y#G2j{z|70Se35ZBC2b<}dNt#p$-mSaIF<9U{K;yV4n)i?K58S&S81#UsLV;CccC z9w^~>!8&cNFuEV}ZVI_psDav8P{mf!Uh1a^ zBxQhjIeSj^lvM;=)(z*p$~uEhkaf9l-bvs;AidYKFs&|RSFeJKI6V-w8+!#>%jtx z4SlWcMWD{8jz04HpU}}Tutsu!{n%4`DtB)))#-O8>@rIw>4D< z+vqMOl%$1F5tRP7GS$@oBtDAT(}D}kb*mv&9Gg4|E`NPE5r5>s0ngPJwo=2eM0y?P zJh0=NADD!d_Kn%@z^zzp-r)RSS^0P zTzX8%=g}2#@Rg}>(tf@-y8!VxSqoZ1L)>15WDqaye>{O+Rlbf=FLZmtC%mCP<|dT ze>sE4GBVRmxh&^X+;TqU*lMCJ(dCL*6o{}2oB_o7DLuX=6Xbk~N{bv((T@_SQz}3h zXqBY-cOWuTF{U{f3&M$bV<>k_c=cFWBAoh?Eo2XF+V@XoCdW}4(YMlwzEv6hsOC74 z2c3sgaCT2tp0^xlQ<7YPlEl0~5!^HF;p_tcVJzYc{2L4WT7mz)0{^CA{^P^^9}e?x z4yU$|C>KSLaP=S%ZFxmJT(?_Z)DF9N6OwbXg@^EfPSao=gOwll1#MWh?%zgB{ZaZR zV1ZVI+2y&1iOy~w>sKKW4I>rAIgPrG{gxB|39q5aIL}SclsXN={c4%sfe0ImC(oEL zIw~JCJtigs32Bk5Ri|N?2JpwEAM?k^_)BXZ)h?YsOyk&cRN%2<9X#CchZi02 z*M$_}gg5Xh&NC!G&?(<>uIFl;NW{gw*SGQX(NDFkP@v(iI}U|JFo;;jw3$~~K#YlT zp48dd<4|>uYvZ|s^b$-_9k_)xvO`$o1a;n}Q&hFMp9T{-@Aqm-Ys4B=KA6rx9(LCz z!RCe&9x8aBcK1DMe`Q!=q}S$BClC@@I!SSY(SK5BoQw{-q}-Xtt|5eUf4Ew&^8~eY zof9sMsuQAiET&l)I~2I2mR>c1O~b2al=sfebU1M|gmL>+(?<3LDH>E>bmb<_+9u4X z|7*;5RAj-3VO*P|?AN%E#8!C|{55!sa$}}s%PG+CC z*lm#d6~0Bf7_pJK^<)=jQ;N*b#LA_+p#h5F)KrCW{2B)bYV!!s&#`3-#(+-R=Etcay!PPc@{v7=c$_@Z{uTst`Bfw zV1Lhbd>w$t0c8m=+|z9Uu4Q!fLKGxi1^%61jclnJ@kgS}2$#T;?ZQVK;>M}76abUr;7E@5X#d*)e1YQCa_)FPX)zGryJIanrguo^LgENAZI@GY9H`Yq1pBvKK8HLT7Ynz{#* z5J3$T3lS#tQA9|KCIa+35cntKZzKNaw}Ag6&El^I%p_UP82^Ww!GERhBK~6nV+4Xi zT4b$sFR2gOt{_V7fKs%uC=@w6`e73t$&T*i3>@yRy{AW{RDIZm8Z1*HTB-_N#Dmlj z*`lJdfjBg(Vj4nC7zZ_>JQD$ueL0{0mO|w$v2UPeC0CGah~(j*fTiEn$tZXy(rD4b z95d$9D7>w6%*wNYx2;EGyw&_Nk>EtlFK_BmGYx$8`K1;(#}bmsMg?m{O$&F`R-*#F z-xGxegzq7uC(w6A4wYs%IaE64zoO7KBuwM^plV-~{HWZ{QHhF6a&^jrsUq zdCb#^+AXC|J(5D|hR%e|9pM8E`^~9TgS{ngUn29$*v@+hM5$JTn+1(N2RCe!{R?%? zm5$_(azilr#RtLGghj6VDI!2DMOzjOzQzQsCQe=VlgvhnJ4&x^E8B*cAKq>SMF^oi zyeGTaDt|A4j!nUm_#+(ap#5``2fQ~HY?Ehq25|B9cZi|M-NEd9OaT)ZE`uG!Q%8g* zBxi{n@t)rBmP`w{z{)Kb;5CQL0Uxxi?Za@_3O7r!cZ~l(8J6{r0{^x=Uds+)b~3~U zxB*|eCIaRlfJq?xMgh6a<^P&MP9Tt2rz_wLV8b^cIz$Wzjoi^F{Ro6SI0ZVFTOoBJ z&O6o!{^JGy&kOut7Wn^#^9R@m23lFi1hKtDunq{)9+OD|Vuhy>E$np_(@=0&USQki zq+W#=ZrcvdM{>S08R*j?;~Dz*^I+iM?PT6#H|g>`UIz}C1^ zF_V)Bo7B!-D)TP^z-9=eo^4k{U5_j!(n{vg;g9AdLiN$^+mg zM)gnv(U6lwn9zqav{&@_mF&32@>0*`@-Kjqi;7XKnRG&Z$PA=gwJI;YY%aXs~2Wtd{qpu*dHX*lG87l_i1xe@~(xF808+L%Ck z?Wn-iS{%>C{Ni>Tu=(n_EQjjIdT}cS@2}p0`>S_gclNM0e~}E%<)jZYkUkIb*Kw4e zs3Y4}6@PxXIu7rRu(9Q8rv2l_Vs(XXIe{#q`8TV%4LA!Vs5Mtmfec{fD1lX z7s1iY(;nxl5>W#FCyrWm-pW=v3X5fWp`AnT#)|i8Pj&1R_(NAAi3)cO;Gk-JoS@-+ zb6ZZ2x$v*-iY^CkyaIrG2{j-C4EqlJyVK4;Y5c=IfjhyQauo!Qf+Ca24-k;Gct={U zVY>$2Y)?FZOU3MnmJhHHAUTX*WYqLJ1RyRV%#8JV#^Wku93b=M++V#ED%Ay?O@j$f zCV*KtVrFM=M?)^h7yzycav(cG668RYqNtE2ZCxB` z3(}4~hX7XVQ>aC*b}TCG`~HMbK2flTSlUTkU;dF&p5V8l0_iRxh$u?YZ; ztRj!9Yr%XAIJgFo+XLfMK)0I$l$cji*!f3dEjN}GmO)1jWS%ILZMBdb8!h!A#b{;U#U<;Hc7*grzvZF}@drOq2)C zzz}y}cw%5KMm48Yvzebf`j~`#o z=paeZQ;ngUS`7ewwFN0^6iGEEif25Ey54}%aj#vCq7;DS%Q?J)t;vXujG`~6AzwSa zP3HUeMp2LDEsUZ#BpRb=!p9gz@62g_6zM`6qew=NF{*+I-B7aeC|cHERm7|uMMT6H zMI2db6nz)~0h)}WUu`|DQKY(6jUsLTC!E;S^(8Wm%pD>u<8SL94c4B^hRE8B61B5X zz0049`4;NbG_v+@{TvAUI1tQvRI9*H68XOX587P*naw}5_~)1Wa})l6Kc?WPT6XlX zi2>F`KpnY}K)dic;*p=8h;fgm`5ii8TIf>18u7!V|LWX3b>G!u)>C3c!ww@D`BaAL z6?JL??l;gkrtwR;t%8SBhGJuyEkTCDT@)>4YqwCsi5}*w$>irW`h`L0h!R~{w|F&t zc8jq=gvvpOXvk+it3%F$R?u+_+XA{ELI2TuwK=&FV@P*SlU6u72?khZ6@O`oSt%b> zc!59(&Oa~t;q{uUhR@4h@&kh$l=W2ao?k=Fj9;ejKitIFL4i4mq3h5BriQ9YbeN;I zEHCUtd4@hHOIz{-!%TPvpxo1vyxVh`QS7&DG}wQ(e6MGar~zD(oov{T{wAp0C`%Z( zEfcwVoEmpcoYvL}3cz<6#MhOUV42Xr#iKNw$mWW^Y3YeNeZ$d9Abgv$sU)K_;D4%L zJyLmW@ygH~>OW`PAZKfJb|;rl_+u}1^2y1*&t>T^mCv%w$5#i*b zr>*>8aelz;X!KwjtZ47QL>|7={?jBP)8#d&|8Z})AD%s zDh&th7Ts)H*EP|15?7NugR|qq=gTP5ZqyE8fMHz0uYzIn&0<1F1PVXfzZ>Hd>LJc_ zJRMHLy<|LnjF(5l?e*5={Jb>F82}w55STRJ_dC`%js!Tx~% z5Df`6)x3}(;-pG>!NV%t%MSL>-I59apW6wau?fD_g^`O1MF|#l!cF|b$xBW#CGEk= zQM*N4Drm)q(P1X_@94R)AS#Un)p ztHP=q9!?PU;Qc<@<`<7NgyAWR_YF4yNbMzjAd?res25+tNl~vNUsvHfM-+w?OgcI) z?F5(bxk8>=?dc?9f@Jz5F{@*EmP{8QK6ao}h3kqU4#Hoc?@S_4}6!2XP;4`$g zfHgFYGA#oC(KYxslHbs1F*S1#1E}JHinr#qk4WOmnz9bsn;#ug@oltIc+!q-#Dx1b z{-~LjKw78TS5{kjSY(3CwXlDL2Az(4`U2SN@(J}aKE5HJKoGn_K6Mj`!C2-XU81uA zt|iO|1TuIA_#O$kzKq6K90qX)Uy941kv4A04-KH?ynz&4xLs<|WwuuqI$Pxjm&c_` zdft-blHu%)A9VbnE`8Payvu$Ug6R2oRfk*4p@A|q35nJPJ##mhjb0IDASL*- z6Fz;Xf4UK$ur*CV3P6otL$cwM_IyoK8fxW_Hz8l>6U+q^=1RW(|As!nH)7DI=&_dR zGk2oFJHF$S7bp3Srp-wjsBTi5^3MDxFg%|?mM1&*SX=ILFXH2 zc`jgzfYH&y5P)y-!ruPPzS{Vlq%>&bRv4Xugxdj@_Rv-XB7>y_vOFEKP&wExCU83c z{BO`_=kE;qbTFY2C^oG6zobtNz|zX!j7guKI%GdeAKS8J5&45vf}JPrW>N4caqNUo z7Q(J3igofEZTlFphK}N_mJuk0g1#_4(=pHPaX4YFqh*)gK9eDv#-zc&U*(2_tsA+= zW>8{f!l3IpE8xm>jLO7mK$z9GW0Lc2NwF>nv>W9HU#<^O#2!Kb+Zeqp>z4wZ{|wl# zvck?w4T=c6W>=sjD^PG^5eQ^DM%tSN0rFF;lRI+_D8lzPVze`9zk0L~?#$Ys^5gB> zmW7-2ANHm2%}R%;K1={8qCa#0pXyQL&a_p^iGIC9ZIz29kLpxyTY(^Qhh7MMDjbmE zL134mnc#p-1QZKQh88_0TYFe#&eItnS7(4+&lQ2O&T7Yar|06pShr)m+jBm)(F(K2 z7kZNMFgAPqSWibp+#Z)bYFx8DRILsAomDu7zSQRpqno6EZfwLKBbuelKiq=Z#X7KH z5#d(5rz;$`9OF|2qVCzFx;G1v_ROPE04<2gwgz}Izs)^O{w-9%of-e6Mu8KXf5%4C zM>c%=TWJ&-Lpw*EArEU0<47cR6*Y{*_n4^5gY=Ive;MN!w_8PIPo(Wa)%N*KI)`kM zl07P=`A$iW2EuOwA?@E9jlT!J{gL*g#?9L!1^vv%!v&#K5cl6EA5k;J+F_aFP{41sjufEJY9~b%RT4e=?Xku;enf&;u&pcax?5Q{-LP; z$k*{u@YBI48h%^l1C-d!^+AHdp|lAO#bzH&H0E&azz9Kjm_F_zU2s)kET-~I&t+h% ze%a&uc`n35|LpPoiQ3q!X}`=Kf3+~%fb3BNnrF7T{}qMYC6P`FBs$LWTpDo7see@O zOw1mY$m*T#rGK+WwfCHbw+`8(I@ng$V9~KT!klX_i_fJ=&f7m1K(KWGp zB&vH9{3!$APQ(ImI=~>)xyeNSb2Fff3N1 zco>^DC`%;`)C|gqNc+S8oFU8O*=#d|^z3bp);!by%%i6iBh=-!s+! zuN4ql(Eo+q;fJAQxb~1LfID$GFTtfrv3myC9r2N(_}#K0pxr13FAc?^CH>!6e;WKh z(b}I;^LLU0rGFC@;v!wYJ2x=4yJLKJu1?Y%qtZAcI{?Dwq163hhch+db#trBn9!PT2Pj z#5n`0+6Y@S?7fSJAtSonV>@@s`0t{Re-3-fXUniZQ~sWncc%P3FdC+RL%*!gZGreL z>z9A7jv`D%J`#W1viq9MKc0Eb^1!VM49vfc<{o&5>FaA~O2+znkjjlg)o6Wv4kqUr zSYKtz{M#>kRKMnV=NQjFn*ACY5n*EKzkW^lr<;|347RZ+HN!Ul6;*xsS&JZSu6_h` zk@?**-cGg@p}eMJGxZN>zJ6x_6T(@ZZkQN2FLVw#J32;n^mIT3GRG*a{F`bF7U1xB zru_TdkTd1q`S)09A4@*ZJ%jn7&l$IWGWetIdm{ZW@@q=7y!(8Ppb!3Rv;=|aN7m12 zx_nK+RZf&YoR+D6q-T#xZ=OFVM!^{RWi)@G&g8d_!vu-nnoA&l#!EdsjJ)-J44OP!G#8C6p`r{E*!Wf^>^<@2$OQ{R{M>gyq z#NU-Y%GCn?E3ADK;{AO(n=1Lj%T=QL$X5AHi}(X76Mw^h+iJ|y>1W!1o)8)t_Mbs4 z?ZqeV1X$@8AqeRQ`6I?4(hs^Yj6p$^gkELP57ZFLQ7-O-3=DN5vs36-h|GnGep6Hl zgMLLi{fdNs#h_oY(C^0VQ8zYEzjFdn^xGCO5-Iw{S|7-+eRJ!lHwOwHI;hb%_zd z_k5TKIe$56dlUO0DNvX_s<3$qT<*70fbu28`oxefUdf&WbOqy5XGkZ7zQox%LP;%Xu18LZzXN44EpKhX7?R9(M;CNBC7HF10P zX(%|SrN2*zmL0<0@BnYdcJg%pGevP;rIozlfMtYw%M;?udU?xR@j5#=fW*-_0_8K_ zwS!=C!q{B--} zTAYJh{dyq+vkXB5aXgNYL6lJ?6m2uZ{ot{cTYMGdB0_uMXi9^&_dA#j z>dM;N*3pfpP~ZQ?FH5Dd6g(YjZOgZb+=Y`IeL$Q#72k38-bS~*OnNeY_jl*UAK;|1 z)fwz~4%#_zgWisIhqU3jlVTx5Jm^`EV`C|x!i6cg@s60JIT4V-@bsuY6{}H^( z7XY5nU!dwF)ex$45Z~wBl-Rl^~rH3#41h%VKuk8bq3u#zjASjPWTkx(Xv6Sw-~7LNG}TL)gFJkCmYH z{|mgZO7I6lp!cKVD7*Ahp0CvEx`XqB30>94+woDWRiEP3r^)>EXZ7iyk4VuG{PdXm zRHr`m007#92C+It-xuRu(|^(_z=VI$vz5xSwU8v%fBORhcg{1 zfT_>72@!j@%O$Ki5D<`$lkEuU-D=)B_zRdBsP|HS@bo087cktn=PbhCRgG_a0PsYO zz*Cw*Hmy`{y4<{9PUz@NP5pXFMiBc7D z#X%V%Z!;+I`nN)t|4p1SWhg(9{}4;g{Hm$xBizB8b@_wlY%4aBB*FA4BZGqvJA;dl zd#{Nr!)&5x6?&Ylp;Nug#Td9F15*!cBLnWk^#t!Lgn-okyoliOkSH5+`KRu#_vKtO zWhssg;ATwsZcW>V{SO?8De#ZNp`QHR8in%+(x27lRUtz586Zai>l6$HvCss_Q)k0w zm*dc!X^cRKcuBK(Df}KI9G(ZamuQ(o6-S&7`Owp(Q-IZAN-6?h2!tflX#c{)^`k+n z0?=w$)djws>n0P^uA@m9#<%?pdlm)$%L;HvVzhtOVJ-ABgc!hyFjlm}AtxRp!M-_5 zW@|kcG#R*@9nS2QEvwtr!IE>y-#;+)%{ zjG+@S*TdIXo%NDvad4eQhKtepI0XiWV(M(csp%JM|BdPpX8mHGAFS+%7xsc!Hi}|eAlL9^F>ZzjZbv? z6DH!5GtgrUe}W0MpB6`@Wo@RD#{?MC~G}pov z(4P&viEjo3yb~hApq}ie@k0w~TEYDH(N?6e$p+e0cUpTpl&>%Q*?)6;>wO2+Y-nQj z1}L))^|p<&KiKdVW|vpG8xC}uyS%O;yu(x<_5I^kk^ax63@TRr4<$w>uBp<|m(a)D zzlpunzt{Msae3nBSf6iuu`PCXw<6}c=Tb82OsN5Mj6)`E%6VuT#4IKW3pp^s2+S1h zUqhZ^1baNcJC6NW#y;f-JY|!n2s6|F)pYbq<*~9{RM~eNy2k&FHZ06O!O^2r6Va`n zcBENh7_KRV7rj%7O%t31)_aGai>gx0PJ$(ho#fk+3zywPO?aa!+#I2pe!H&NwI`k%Rjkri~~YUX(t&w3&LyYi04 zI)ihsn&#EAgwsAJ&j@<;ZvSSj3>pVL>?@DxFl3mR;epZ0BEbY$oz_|*^8Nh^U9b!U zUSo6tf8Do2mUs1h!qOO|D!eWayAv4g&nnjodM+nxD+E40y*Y6k1{ff{0S$;`(Jo$Y zAOm&EHV0VS^6{m2;Z)=4n?5Oo9CvlPG7w4?;n_s2JjWZMtER-%a zk6So)z>hW$qm-v|nOQA*qQ^kqGNEFDykS@N_=@re5H9?mh)a3EL@Gl=hv7 zmlHCtqS830E&m{zZ*yWuobkR^=r-bAMTe+EBgX}JCuFmY}ge3&?wGRNu;uHexdv=b_Qj--KQ;Ez_Un^ zIN?>u$OvhwcH2E0rQo_Y_Ub(E@icX(I-WY%Dt?C);pJ)sf>V|mM4;Y-H86v)y1{c8 z7yJWt3H&ZPHI=!B&2ojV3ziu1zQj5pANsBTfZM;_P?GKUU@3go0FV(iK#mBbMFWY! z!(y!5g$aQpi-WXycvXICLnsG|iKK-P3RCnP%u>cVrDCp%+v-&0Atf8*UudZ>U}ZcJ zf4~T~AebxIV`eJWvYV5zmIaK~F1D4xW(NRZ<)S?0Tpb$Ja{n^^??cF{=0!@vm1hrRHq^vxK+&U^n{;kIE`R6)XiG*lfFKe}13^0yg4H0Qa~H8o zx^LzpV4OT~D77~%HL5YL8L6{9c5_^Q9I=J38DJ|XeawMFB&vpEkrGVW7#tM$2Dw4I z{s<8&l=8is!)Gs>zWqHmZD6Bt1sQoYZYF+blV&QW3<-a3D1Z#rn2 z-qphd?`M7iys0UR{Fri>xKCiMWzFKgAHZm{-#ug8f7lM(f4kF)JKDv6^)2H5-}j)o zn^-KEv>;bU{6$EpIC`q%EHn{MR`N4dwtCdJ7O}rSU$Aer6xb&M1ntHTiTPw!+dSqU z5R`fQte6|4#Ev^frPq0-sOt5(dapyo)w8F;DV#sJe`5;041N_k)=&%kry=gxWmf4H zkx9}H0x#I59gbbQw8M}vD^(~{)L6{+aJf|(?(Z2%<6wmln$g~tjlhP2YvU1$%6Lld z-AIDSj0c}Aq|R#0DwKo?UkpW`y?H>^?=*EL3L=niqEyIHHYz0k-C4(|pDk*Iy0PQL zstR409Z-Lq6ftV$kW0Q6m6otlh=2oV9!OxobRt@oSRN!F&_W(Nt1typ^CYmXTPxw_ zpxA)cs5q~EeLf^~W_0-&aVyvsqvBY>yaTv%@>d7|A;_=4kxTjwZ;?yZtpJyd<=k${ zh9Bn=;os0l6nAKnd;O1^{k+|DPBu%BFCYpqA6E>l@Ivszv1utZ7tS_-?Ss}~=#)@%I zZ3?a%;@vM5GH$@XZU>_Cpe&Y#4WV}cCfBD}LtycXuT-o!u(%i|M>1w`HhvL8J(p=! zc*aFanEMxEF@^itP_Y^>x-p!UP}wc!O14Oh>#U1)xEno_{aEB)U)H-6rxATVnn zuJjr_u)y&*&k!2wVF1^g2*kVnr`-O7THlYjO85AFq#?l9RlhI?24Pp~8nDQ!Aw$%7r9fjJ zIJFfADYzz3Kw%oh!%RFtIhZpP$ap%i=h;DI=1iIYPA#PVtiBegkY8?pTxb+S1qQpW zBRR-Yy3A^xrF6D)>+?CT!r?Vpye3C($ttn)NwFVf)k;HXsepUK+V7*;hC<5?;YYg* zvZHY08^%~cX$tf|4C**f0$4u`P1Ed%%d4a#uv4LJ=JW~tixm4gu&Hg3Q0Gndh5@dn zRfk_>u;yt$Ykgn7o zQ;G(~g)gi2o@j*&(Z%i-_G@(XdU@9ke}oNVikP^2JP*|?>1B$xC(x!>EE9D z_r0-C{k#I8BV=vj-)>vRn8&((5i_2C1_Ouh5D1UwlV;)xQ9KGWJk#LXl$i~medOjY z2W$hGy7&7_e-i`YU@{fHH9nH`fJ!z`ETu6Ybe*Ai7@47!AvxxWrBgRpVGqUf&zn1~ z3G6tEU^!pa^!!vpBWNI@6*PFj`Kix7Xa<_wqo4^dQU3P}Bkg0Vb2t+{H(AKztFb$M zo9$Xw=Et<4j*zATFRdbRgzm8Y<*VEIs?xm;jkemGqe>~Vfy#P}o zpi9)8%|Z9hG%Kx?{%|_yyB0*?$Kte$=VlA^(Xkb7KU;j~hEiytlShGD$OaB)isy2; zAEg1&G|hR1AZm7XBjWn&njx+|3j7eGwJ7?=;Qv_XFEX2}_?2H+=@Ntg{|6+F(7>5! zs>kp@z;PiJt3V$Ow#qk<+e#rh{PFT3vcIk3F(yWsi92F}X^N|=^(-n@fyw>M;uxMr zFaFUO5R)^s5gmof@IsfJL=~Yf6SU3LzU(8ky+)eA`P_10Aso^zXFRvNW#)9;%bzk> zHxd8lTxZ}9UV&*Tf3&jzM9hJ9|5PiHLLV!;o5-JW5!wiUAOd7$@JF3r3!X*DJ={V- z!wPyJPiEl|xE#K=8OSXumL&%TDOaq)QFiC4mthHP&d*|fQ4`g4}_-*F*KA24mA znZCl3{_sq_8SQE_eU>GC{tTqkS4%s`Om|z-2S1B+nAzgAW4i@DU(S~f&fC}yg_mR) zgDYXySzfF!%h)ye1hWN695^*)y{xjn=gAmc-2G3hUP&o_;NNeBku3PdMN3N4&FFz9P){6jH``= z?)U@}WMe*kbrLAhmBJ*(e+qw!SPTB2-wOPB=AQWfJ%ax@;+a7_i*t!5_JYzCuE}e= zF zBf;mF?SaqIQY$_a@JYufR0MpY&(~Z0KLB3B=Y0V`u0JRm>a6R)cKX zf?dYYcoDD0(D-ha!P-;I^!qI7neYPe2?VFJX~p$UUc!uEDv@NXUVEEUor;s;gjOOZ!Pi-9dijF*^s3A z?^In>|4o>r6CT;(kWJgL)1cqimqqY*({@P?&>k_<_gK>V+=g^YNNs_c{-PzlijY)kqWGd#ER>5rJ{do1bizl8Fnu(rTVf6kYMsh>UH3cV^}%0#2-%pQj2_Q2S_$tjc*v=bq8a}r;AH* zd-l4n9jYdzU!n`Bix%a^5Kw>V4Hhcju@BpB$XXRGp*X)lzF)oYDPPX`s|?}vMH_FN z_UY|b;q*Q}>B7l90q8V3e_~tK2>uahb;B41e`+lFr@hkz{yAU9g8yF`fPek=7U3U5 z_#e2^fd5Lu-zy6K3nK8Z7=Ie@Zz~7<84CU>2V&6w*u*CAKQJv8{CA-y?RagA@MjSI zeOU(l^IHS{TV`45|4V$*>A!PaEcp9DNig&$2##%+0RD3o{ExgJC13hq2gasgN48bS zrcD8GN_Dyqug3h)k*br7zd>gDY)kr_yO1vOH`PoZYf1lo0n%lBpW0^BpJhqU{}a+> zeAb!ioh<3K-y*#;z|=OF>0e(Qfo~MNBi_KCAmpE!zQ>Y2ven?YH@Yx=ftmiICH=g| zP+pCHGyOhG`mvQp{e#T(*_QMpW_qfbKGu>x%cS3_ttS4K^e6skv|neYce144XQpp3 z)4%Q&!TTl)ztn4xP^Wzd87q?-KaE__4r08?Vw3;h!E!BmCDHX@uXYr=1@B zoqrPi^zYiOoIk3-ZqgA;zI+Og&LI6KgGodGat(KrVr;>t!IIg`wI2Q>`UVt=sSPM@ z-P$FXJg);$x17($7L~mu8`aFt);dF=!ij-R$Lyag3u5-qpk@{(x;pUV_&xLb&x7BU z=d_I9IQM@Bzs^4se&do`#;6|W}zQzL1FzraW%{JDDC z>A~OmC&B;Y^5Ldee;)qo40WtU`G+H*LbgQwjm%H~w*1?%{^!B(%1$lgHx36e&m2Fs z{^$M4x(?x-;j}HPp=+1zwfbwEazi_&6tAORE{c%B)!r4)UQ=$t~ElC={R);nzm}wL=o610L9@y~lBo1JK{)4~5Jk)vU|5P_D zCfQf(7MK5H`X+q|OpES1bNap;*6Ewtr0|c^_rFkB`)Fa~R(}$G7v#4{-yfGhrGNf; z#^?Q5F193pUcz}%u#>RR|EByowD#x0?-J|J`n+asDgT(@t~#iw*z3Gk?FbQQ%*L9}E0{#H$Ja%19dFuQbvKf4QD^ zdhn0Si%I_^xzGEorpVNR89Z9UQCcbpMrRx6Z^uLQ?j4|A>&B&Gs54AWQ>D_Fgv#2-Du>bE^9O z0T6!6W)B16LpD1Qn6%wyKZTz<{M%*fs(8Trheu)GNjQkwXXM!~uVr6P`j+34Zefdg zwy9t9E%`&zC(kzRsGzzF&Gp~%p>W97xi*^}q?z;&{QGBhb=c0tKM6gjZ3SI4)_h>z zg-HIKNgV~1sh{z=N@e>@Y6al-g#D5_2{gASZ&J_uZ1%UCjV`3e2Q}_b1aCum2H&9v zz{hGO!2X{2s}HCIW)z78yRsCsS^zW4a2d@tHZYGZi;U_mbXbQ&2aeFBOC zxUp{mO!*HfsJ_|GzI0%$&JK-_Z3h$m1bJggKy_iAmua0e(kQwUZe>Dpt)*JAx^95B{a;A^$hf7q#m4|vbW@+w_XY*@Qz zV*iwMT(X7aj43!!CLOTZkKpHs&He>`_zyCb^TMR}$mu-DDCDOl`b^2Mxk;HNTS%ao z4fV+QTQz%0(aJ-j?}WoxkXytsObl(181q;V2GddxYOt zD#M)lO0*uBGh2pOHL}W}t5OdY>0UfwDbo4RvUoWQKR5s(;&^lE6{xD$Dpl3t(w@`` zN>lOoNNFK1Sat??)kfjb9Dy|n$( z$l=lf0(X|ceVM@BOW?i$xfHl~n4a$B`Jw9}Tv_;8RrtW%1l#rh2zNpLEps~{q3``j z2)E`;YP?X#A~!9zZA zhHc}_>!_@&`sm>I8X>YMp{oM z4H1rzlmM}dI|#8mC}P9^7n&t{J5w7!T}YfnIfP;;Y!DZOviGP!V>4`Df$N2^wfL5B z_+9n@1n^XOy-{W1BBxgmfsJ|}XiRb@1*BfeOnlLezIg7Mjz5?Iv^ky+qT`mL5LP1i zE1Wt>6@;l-zOzcD<0Zee7skx@x_=I}Vm-PU|JA?Y^tWNX;9_k-S@ZQ~fJF#;J}EVI zBb-$uc4V#96-JkZ<~83(iogFB>7PQhi$H|<3p2UEkgdHB=;V>4MC1+u9*Ll`Q|l&) z9Emc07eQH_y3e^DHR8YHi)m&*fUJFw0#CrJu_LK}AA@|_U+w8IKM^b(8mz=JqMx9l zS;FXQ!I!XOkMtbZn@P*?40fpn5j*uEg`n1IC+5VY5SrMICN_FnEjSNlMb-hzG@BjM z=~OVnv;$$A;E;yD(*geVRQhM7XQR}oo~!3$AmcO9oCQ&B{}!dNl*F_Sj-2*+bv3g6 zvwALOIeXt11h=A3!#Cp%AzP62ndg%Ez3>JxuNM^EU>d9FJ5lBT(q{jZ3scnTM3K)u z=g;qs%>R^PYz33Py_d_Vysdl(f$V*IiL99PDTJ%dzS(ByB$rgbTPTbHH0f=deUHqB z2m#1gxYB!xLNGi2g0$Mwz6O7wY(%jPN6SOSAB>q0S)y$5?TrQg>OL{C>)Uu0rtqUO5s~j0ciBQDbPYHxLwg_YF?dws z)8K#h1DIaxcAh>s0I)eY^u!s6?<>jnXTvu)?o# zk8AKzyAAK!@cKykhrc#6+>1x;QX_4%+J9rA{U6~^))6z~vM=y{L^I#l{SEJ(B9K0b zcN0ETprF$K!vBAS#A&fZ$ZM&!hiI=t=SB?=oWf0$_NU-nsPqVuBg2FTb|pRZNb|Cl z6X0pkAN#wc|6bx4jL?7SAw_=!mCahocgS%YK5L)VMev*aJw9B=ue*(}o3%GVWkvr~ z6Me1vD`a|>^lxi?ME|`Oq5rR$;TiK?@IS@woeN&j_JHVm_dfX<-g`#qzyBcK$3~h* zI9ikb51YkI`hPx5=wA(Ku067~W%}1;{4dbI%2>KU|KNGv;~4LZC#H-TP)1>0h(tc2 z)nPsj4)b&Qr;vY&`KJVbUh|?Xf4Q(>{DL|}7xSHJvsi+W&_>Xt0UQ8N!FL=m>0}03 zY}lxukKoB&6Qd-D9U4eTH9$qUO~@}BHg_PqCGkFs{J zp`Ez!RD>h+=+9W)P)T;|HxjSmArDa#GjOlH)4xYMuzGKUuO1Oj3;<@qo|Tf zDu@;7Rj&7_?_o51-ha|+0P{tkx zc2J>M=B9+xoxznxE}B-5Q^ggL$PcqwCqg9nPPJm4&O+w4SOQ|^R(1YZF4Wmt>ck2L zfqWF4%|a0FLlY2lS>PpBq=ChRrD!1P5cnV4{A3S;!t>;7bWcn@{`S8O$$>-Y6){oV)u$ol%7MS0-5L}yp0{64CJA>n*` z5qtb~IrDej(tjntE7NboFIFchxmj`A%gb@z8cUR!=oBy(mU-y$ zLONy?IfF&zzMQXHFU9en1w2xV&k`v|nhhpAwBHe@b-5Si5&sy^bizhyMP2RWJ(4g- zPe5%576JIRBPwCCo&Zi*k)8&Kv|1)$v4dm11OxnE#3~U}>`{pVfy3R10wibC83YKS zOYmh5I|`u@kcXYB=fN3vyX4^^c9mzgQON~2n?8kOc68c5Ek?A9^BDS^1qoA_f;p0E|S2ph@&e~-aAg28K;#p3cLRH4f@Y@e_=M8#Ro=f1v19oPWpGp-TGnkC*)8a{D1!ag^X zPdM$nH5b9vbE_NP@x1+GMHni!6qDad6^kp_f8Nob)EL^@b^2{-;C3K(?KeL|Te%5w zaeoCt(SuF&D3YmRm*-O?%|8wa{|qABBfP!ulS2&%zvDq{83f2f**x1T50s!YW_-8F zi({fQwpFBeL$y-p>*<0GLa0bLBBCoUv8YJ*qL@2yq1(SYy<8rDmFV_AC;Cg)_R#%( zKmg2_>~VKswd!&ITUp1l8ir-n48w>yo6&RhN(=laoQ`j7_dJ7h!M0`Rvn)8AB9w9W zG5|?#)xz|7?qHv}1sFRc0`4#E`IsszkYh|>!k39-0)4)8J5J0gW00H@wh2&M7`zfr-iixD$^ zx0dgB?>_F!srY^gCfl9}pt-wVOTiXWfxinw*GH;WL}%<2>a2)GySpBS+y3WX6X$Zg zSC*J3j+u;)egF#`1WWfYdQ5Oux+m1YDS+C5;P`raJwRnp98GXtnVtz0q-W9D|7sWz zr#-ZossTcDp#VFC87ks^IUk-PkQazDkg$(A&!!RqDp+%Z}LuR-U`s^6WDEM$s& zyd3uBJbse2J0B61>JOlo>+7}B{=^5p%mA1R?C5PEJprlyh4o;I>Gj8PO#T0H_criV z71!Q>0s#Yp`+%T`q5*@&s@H(pCL)?>(w^XnM5Pu5dqG}AMMO9Uf}$iQK~Ce*)Qh)P zd2VT|t!=%nwO&N!Rstv>Ud5LxLa*XmyN|IItySxXUd> zx`Iow}}V1gyOJ4*26?t zgBxUS;dAkt;7*@?l&f@-*YNNCNQU9#nhg@K@s=YIP_>UGkWV>Y!@G!9AxOeV2T(M; z#Pf=#X@!LqjequTeGMSP0u+C$aWxMrQ}qkE2veF*m7#eQlqb{vr$2cEy_YjFC<{)` znuS8C@&yXhO>jS6MiGejaXn9PQ_7usmg;ik5`x}-ZQhH747hDu9X#q!T1GQ6$o`__7_VUhn~#*d)N8niWO^K%12Vb z|KdM$y^!N%WHd7>z5HPv{gx4EX2hSys!b*W?%9MfetzEsSREA#fO7BVb&hx%EZnoR zyoMI`0_*kJUgK>%MU>5yC?meeoCLhB+I@Hg;MBZnm_o%&k)GF@LCUV zSCsEoiP^DFxxQ4D{9O1;uVvev1H9oVfJ_h4eJDMrnEXB0yZOI@ri}C&K4KqECPVPP z@!h`djf&Uo(j=6li4VTx+6@qU;#WQq>q6SoLH>ESSjKWTD@@cpgF0f6tn045v0!QRaZ zkR&eY?cKattPs97`gipjYW0x!J>sXhY>k^>CMQToqAf5BAP0vYC{`dTM9oM*<$StN z5i&dL4>x~ZeLhfSkY#I;X?xZmIsx*|rQ{C#vZX8!dg)lH&+GtJKk$ps;pu0hQF`w1AjtxqkkY6 z{I@DPrhoSXL4O0jU4EUwAx%8mC;klKEAJS-ZygBu`T~rQT{LH);qPSR{~^I6uffL; zKRu4kbQ$`5-D@Zd-VY~0JIVAJ?eFV8Tb<+Gyd9O8810`uL^_4=4GE-Y3wWjzq*Z5) z*YGzs0%ZuO_YJ6|TlCQ7ZF~)836bSBNc8M96!|~>gQ&OjI5g@n?c>l}EW2clLmi9& z-Mj5Ssp)@fjkD`MyMspFjg(O%Zsv%ARe;^zhRa89h=gcpK1B7!`f;2``@Va-{@i4^rLBw=klzw{}hX&Kw)p!p**^l-|Qmr!+h7FHC?fD*Po^(;;8*>pvF00(}h& zpXqDJNvWq;_@tg<|B!ZS7Cxz`vhb;-@`bJ>8Qk-^4^=||maV(P1&|ER!2$M_t=epl zUQ|C~Q>!R-qKu5CR#unf?^q7Vo5M^cEI;H_nyx&7ML_0ixd}USwJi+I0zJE^DigXM z0GbZ84qW%y1JF{!l$q^M%vx3U@#&9K+Dtjaxg#s-E{P>&4bqL?Iy#2&a2;YzZ zzU9cLO;Ag)E`{LNAh69oQTN#+Iq@6xm@JJG8J(@4C&mYQzyE`|xgAmPsm}WkA@Wn| zz|NY-nt1M))L+h~6g6Q5tu$RLTYmjF?Yfz!XGoLSg*0LrS<A{((y2q8H3aN|OF9Is>_7mP8vwQnT&1#c)e&GJ8;5`$-Z5bJK*xdXtP<;Ld=fy#cVBJFcO+X3y z*AsyL-E5rhc7hio^vN+D0{!ir1Ax%O1Aw2-NqnW_3C0q`V&8Pznb;>c1oDG6H4MkJ znJz=LXVf?J$GXqnr@1AdUg^K=%s(B^&uhr;=I3{h>aeNPsC;L0*WWciA0luakc|t7 zc)3UZ342@sp7>|@w>yOI=`Ritd<%g|@O=p47G*O@NBkXjye# z5B_fa2I)QGFYJF=@O|3x_O!hjh^YKH3?zyX}7g-2OK@ z2KwdC_8;i<_vu7C_8-7)Y=yKL)OI9uL)3-_jGv6|knX1*2oOI6n9TY{-Df>>4&jS9gN^!Dxh4_W#GpbG30b)O9dv|na{*0IgtcHB%dv$%}y`p8#B31_>0px@qX1}|+p z0I>f%prW0pZ_NUkvwM;&V_MvAJ(LSREXx?T@L{Q6*{`x~9cNA6cwV&W^k`#S{9O(W znN?lhbT%{YKC@#Se>XCD#)fZjraQCI*#D|IM~rNmw;{hOxe@#K=EJpk-kBv;9;`Z# zli@k#?#b4lMoXTV)1@-`ervNo=17hNxsadsWl^`hXdVOVFPhF(Hr+jj@v$;BvWVrl zyiLO(Kq>yO=PNjBq+xUXe4^O`&pqY?z_MbT$t-?|e5&=Tja*~NEopi0_zQ3jR=M&P z&;pQU(h2Xu`d0GQ^kDL7-WX;P2r6$2SW`YtMQvF>eq1>5%%0Qc=ETp9r7rtIE7LNq zw2lmO3BnMl2Pn+6ipu1Q%H+$@s&ma*jT_gUg7> zWrv$O=O_OW=5{-ClB+(Nv=f`eBEXRwzmzhIBPx?3_Ecsxxe4Fl$|Tf$E|&b0f6+cx z(aEY<@%iagL8V`&ioY_!+Lu=3SrvmmQWarkhc`$o9#Ev8*UzIHnlE(zSDpXhwO)J4iGUl-tzF;ENj`>-;uYyx+PU6Bx)a;XjCnRsF1@i zAS^Q7l@B$}{d7B0jhI4G_AZ#gKrjL0F&2yANu*m9^{j4{Tr zy{R&}x>6&Lvtf#y1{NPIQw^!S3(if(SNrEA=dH#s?cLu4R{V%_o8qgt#*(iwzFr^E z_&S{PdU0F&bQIaPhI+jC-)rcKs6Mah41Z)(+|S1&>h`T?g6{Xc#_w4R?kOxbK%B?E zeDBusJY%5BELpx8OTJv0T&MjG_eH_mE&#g%ByA0FhDsHbJ?g0<+e_&t(#hv4lfP$3 z4tr1fbN1)NlK40dm@;7)9iiuI%NQu`>i1%sf7+p_2u1w-on86=ymtV*@_n=`yDRJ7 z`tdPl!E5iwQAoWH{aD#V_-ebt8C>C?@m$o8wSB<)@l;FDf3<%={aE`4vifoL1j^ap ze!R$B{KLhR|5wl>juyM^5AaDo%`pEJ8mnI7|LLy>pdsOjm7#0c-q%(_fh2l%B#^Fo zzD@#ZE?Y&i1XBNd5lDAj>I9M_<*ourMW##nPy(s%-w;R>>9?})jOA)$Puu^5&ZSk2 zf4=cdovbH;Y!qM>OFJo8$s%Q2DOkx;vS00TTT&Vje=PhueFt?_41KE=ht_-SNZ4~z zJ?_!a-%of>9rYBGQNIusQA1xdnJe2?x3hC*^t+PKl%Wn9>WE*;0wzJc&`|lVcgqZ< zklKF4hqV22kKTM4KjQi=WU(`E8r=8?pg!%+792Hp??kZNi&B$c5DDD3Wlepa#^Y&T zSyTM!JkAfQL4>WKOhol+6-^boW%^+KE7j%rFOVve#^_j~NOQyH#0{vVi3uEGSu`3V z(tnD((EnnE^Qb^ylB^*a7A6jjHvPbL*5HWJRF@Y&r_hrx(OIw24X}xhibS+hk`B6x z_%C+XF_G>`Rr1)%cHwEOX7F2@Mp8PGib}`4*z1QNrh|O=7yKB&ZvB9nZ zVd_>36PK=XH8w2gCLQ5}j0LTkH!mRbe#{#OVZ-;8sg)m3{(U@rC1=hNTwczJ&$qjH zP5NnN58vnJCjQkm;Om(NoRrmo&Y#c#Oj9}jHJ4cfAadA%oV2hYhT0qaWx0uqT`kOL z12laltCpX2;=~7-F30cYYGFd^YH1y~*YY`r5}@#cZyH(P|NJMo#@kLk*flD4tqzOI z5OU6((0*C>#rm8%RUihEHvCSw)f2C=rjy#mz8bZ!{tFHf98c$u{_dnXlP|mKiZ}=g zT*FJg?lo5ERq{!W7#>545=4`0DNOW%Z5k$%P7kI??xDx=83J!3*NdHKh?&>~rczT(`asjk8CrsWjhzuZ!7oVmR1v%v3B{n%|t> z;z~XP8`$rSRIW+k`X^26;x+y}c(a9T-I*s{ea&^wWvceZypz1fCcR~otJg?XIkhz~ z`1R~Z0H85QgAMTbx8DePJT~4~g!4N`vp;do*%3N5P`>z-L8)f=l|ac^aH!*_A3hwk z(J~4_Ze++LNfLDj5Ki6og&nml^e>_4v^p(FECaeHxDOB|&u3Atxw3v+m&7Hy-NJ2I zU9oH2Q@W|GQR`%jF}%)ZuG@~+L4p|nQHR+(@pQ}QkU?MiMf+M$K}!v1n-p==4{G0~El z`H5lCrv6b>_2m2hrpxVI*8=qcby8ezHS9>v*ak<&o^-I$_2mD-hyJM;qb$@wK1Mmv zufL#8SZ7oftr0)jS&D(1A+sSPssY9I)L7HmxVe`O(K*;r5=P!VGgl$P@T(b;OSx)ii14*7D>l&c4toGY*#}*Poj#U%6H1V{7202=))Y zGV6p`azi*ne7Axb;?I8Vwy@anlj@m6omNdHyTsYKQk9H-;8!HaeL$6;u2Ge}Dx2ng zu+_iK>N-@m)XL=O510WeSeFywe($cJEo+Fs#fJF7KOsnDtYlE4Ypm(Y{MN2z{|!_* ziI?0CV}`){xUFisA-}5R)3~-bj?&hUJ9${yQ~|dyE?h!dZV4Yue%|OdUewT6A)1WJ z7ywID6GOW`#?D8V5DzfcHB4rJr#SYQT*@AkDp+NnHW$Ysq6mn0vH#)iw#Sr#&3z^g z*=ywA@LoG<#N3#850ui)6lHPMn!y<2~l zD_$TjBQwn+RBY{=(gtUCIV&Ztdxo^`+o^T{`q?V={aS9=MO0WrcRk3v?bqCr>YVrn z%Tpy2CMEu(tafgvNr~^nWRH(rQ~qQGdmlaZ=qE+op64~ip3L`e&yff?7#@7~tHX27 zOY#iiV8gIxh-pTX4 z?BZ)O#n0>&7GKFX(d5?V^j9sh8|5*^FkK|Yu9yvag{3hK*#5e=_n=UUA&bf(WpRuV zrc}HgO+UMLiwJRY3xS~8tGeRXCoHNvozy4$2 zbd!!E61^&Y)uY|w3a?YDupdYxf*W6P5RO@HFerE9VNG;{*+N^RBI;tkxREE5} z7;UApU})RWkNmGM2U$Vc(c~NOaR+{es%Pg|p{ns(ej+nf?X~d`Db7X#k7n}|5wyLup*bRGd(Gy@A!>HDQsecEABU*f0y#v~(wz{s zRER=#FAxdEF}06qONsOY9hKZ=8A7U!4Yxyvt{A$RwV|PHNH}pAD|9aI3A;`%IM!R* zf8eTx{WY7e-<~(`E!w>N35MKnSHNRyO7kTT(5ANh{&ZLq^(thS^M`P_?vN>KN{dd; zC7blnY(AKIZ# zN^7sPeq~Mli2R_=I;#`?ry+!}w)O0FcM%m@2ENT^P9ruq>p9tU5E zL7HTUIyO$(^%mPlui;y>@zzuQIn)$pLvs#uYAdYtO|_Wqux$HvUsNS8>=#YW$WJOz zNj1AeN(++FQj$fnWVARLMYF3$J*%#M%#e|M#VJ1-j@48@Gt>7^*V)`i-Tch-KK(Od zm<1x%#ee!E1({r}f0x1)nFN_$BXhwF_BHmW?Kx9O91SXyn^?o{#%bb==uaws!~5Q? zKjL%gt_3c5N{Yy`bVhB%`#RTI5fXFwaWO;Y5aDZH;mBbAR$ALOz`OYixRF%%MDLxd zYi_+mITE+An%bXP-7rw4#-L&obCL1Sf9%ZH(JwwdXnumiw$@iGsS~X;(~V2-h@fN?lFfgqghe8h*lUy2a%}3wW4RP=@B;UgJ-L>?d8}HQq(K zwx;X!__b;IO7J~J=O+e6A5oZPky|-bu!tyCyof7 z&x%jraiSU^@@K~5gImAB>w^=eK`B>EKS{5L>h(2=#PPK?-Q$U4SzqqY;+be8MM(3r z8A3v}RIY;bRT`#u_ZH+GnS-QjYprNUo?kcObz(XS{@&3?u9!aMis@IxCsVVxsD%US z*9E2RP)+h#t6Z+*2LsTNxy|Vh5S^5N6qtGjlw_4ZFev|^`Dal}*Tj)^#nZ2udA0LD zH3CdS{$85CQJ+DXf5M)uf%YcHBOEX&v}HMD>?qXm)NA~IDkBA_gE8u43mDk2gD7aVR!7}a za(Ri~b;Xxm6Q3GCLoJ&=Ieu#Ew}2%-(JT7Mlxt?rnJ{zGEIovHCHf}ccFJ(kK0?#6%lgFuC2_E7Mz`G{VAbmDMh zRIl+rcwp>>|M>0hWue!&kQ5nI%?%{OYW$1$UPG1g*RLLwR}V<3?b`eehRUaq;1Mr_wnbJ)h{&E=*dx(w>4#S3P;opszGBIyRk471u|| ze*IH&`x;$XoE&+S%hOI`=;sgD`PLcQrcd0diJD(D!`Nl-P|Ru*c6>X2bfWnx4LD_dE%T!vLf(PI8;G@RBH=!Y;rD@x1So=&_)?kSjD zeyr+SJL7AHWfpy63KpE{1+qA3hESPYQ?N_Oi0!e$7}GTGOeqbHP@qj`IRpU51|+Y_3%KS-W_i9@PN)+hQ@ zr7p{@O1{v#s4DrtT&t4rv?l9EELItiMLVAMVd=j@f1wa-Y3Bm7fg1o-p!57{I#9dt$E^J#v3i%Y$ZdC`Jo@;VN?2} z;8BicSzcHwN;8=XTS*0qA|TDhg^`%k9yCFDq~G6ZSFCqjA>e&nw4{8$u5t}|z!EGa z3oW)N`&$yxlnb&U{yY+;O704(T_n-EoFJ;i^NW%MzbbO9;!w0#mXT5^1W2J&gS9YZ z2ncD78Tz(ddcu_Es*iDZp4vKmOm!mNz?BwtRk8)xiI) z%zZ*HivbfRsXG33VOfBtw;LXB2^M?q-x-eyF|H7q$RILtpb<%YYPHhUU0MGGSak5< zTe%-t46(P^n%$1Y<<^}{zTvs)-S&l)FE}R(a%k+%tjnXlM(T{o&tYuJ8A{C{^*}8Z zaAR|3-D{4ldtJ3UE*@uqf^@-_NfOsmbwm}0rVOR1ni;xMrAkp@Xv$D(yq-~EmMMdq zz_{Q{8M+T@|9fyJ3X3nTUxfXIt6}r*U$oQapMu7%KmrQ>p=dU*qR{>d_;-R#&E$Ov?`SA8} z^pQObjkLdQUE+<*kU?usEri)lA>n*IW<@M1hMvU_Pm7e~hoo3~7C$7bmE?!ycqN&V ztYiYbO7o{YFV#v{iKP~sXHh`w4ue%PKH5;_H8#?|W^S*8JNhTCGc|-lr~%-52})o^feW9}c^W4NRWzd*ZR(nQa5gL7iRdBRoGfkx? z{sZUW2UeVJgW`DZRdX#@DmX*9nP)yQtp8gYMDV24euaa1h2vu=0`3C?)f52()f54P zG(iZ``wQ>0QumaJp-uz11h;HNjE@dK8mKqu1q04Ty;#Uvt?pA7x0P!USNf{WGpcf5 zP({IjEyV2%jarf5CnA#eO7IgAMSCUqiHM-R68uDFjaO=XpuS)fxEVxo_bwIX#JiLF z45a47XOY^fRN@L!0x2i)uZn!Ojfe7_S@02wQK@NH)2QX9*PXj2?>(~Nb9w4}(bVk7 z8X3)C?VJ9y&g_qe;%oRGzACTz@Bc|Quv73dJaD~&S5WUIrw<{8+?LYvPf?Slqm!t~2pwti* z7_vtQMS2;^GM3cq!l4Q5nc11E1_w7T$;F&e~VBcJWCdqC*6we~#|sf8=js{ZBvd>gP}Td4r$k_PLm5#QliyCnF(_Mdbvr zFOvRy_xkMlndY+0?vzXJM@R&+rN8~bF7wiGnkrl`%d8LmfL;@<53K+nYPRHv+=|8A zn!j!1YN{(8RUy_TOXP{A&MdS@-URbF^&jSPUc+}mUHym+Kd(as#N2$Y@Xf$Jy!ljz zH>(G{Svl~d%8|`i^=eM1dT34n02y-(fIZLc*nh$7js>NiW_Q8Njv3yK1(o%mopE&hoHGW+&pM-je0X4A3o^FWk(5}F4_5*nlC^pjku1z$YD_}lReN6dvvv+B9=e{`h`m@F8n2lXo}xjKv0^l#Yb}D&k1_q%5thtE|Pks;niJpsXLe#A1u}>&m)}vM@)@z#Mfj70~@v zA$VOtUSZ)ryHW{{ks}=}&V|#UMds2?jn4TkRG3Y6zg6P5lQ>HvPlBQL^rFNt z26feBf%KlSz9yi6-1OkcTQrf03)qX>1?K6C{V`{Mc$hy1LL0Shm~(U^_vKk3wp zr0DYKTo=*2#xEKsRu0~U-^!*`6M)}gM3dIz+P_iW*2CKGgZixuukm?62{5L)Hy9II z!C1YupdDki+<$qDEi^5tBXp@6Lzn0*)PS!0A9m;x3uK|ImRm#DzeZCRB1AXe3(6G! z1sd@s`1)=Q_`+z>X(-sDf%-!9vDaD1+G!!y(VE~snNNa6J=oE)G(pR$0d5pa!;Jw) z6IGLYL;%5UT!QE}BwSo{+?Fja`nBqZ8q*@zsvk0(X#uvB_y}=1e#EOp6zI70f@90- z-}tU=yT7Mn)L_;lojXGsyG_OKIRf-=JRHgVqK~;($6jY_8pgu(- z7}X_YxN86gr=a$+)J&e`E5+i812iY`9YBomj8N;|0vXGrsXiBIqOg&4<(j+~$(~b{ zI`PG-)YXx)H5IyLxO@G_bz0x=Th%n}#e9GC|H=jBgpjb6Ysz0_tVPJ6pSqIjNBmk} z#J{Og^Z~1;%kLhQF8Yf9(n%c;lFAnHQdo3Y9+c`pR|8dUre^rEiJIZd=4pm6o2D7Q zW{odHN31X%@y)C;7}F5-`YnLp+w3%2i!79p10W-=#!FZEf1#uJY5ly#kM+OJx_gPAz34(QdC~Z(m3!5OqcoH2vN#0U*nHMWg;h8(==+d6xx0?HIv+xQaJmEmKTU||J3w5Yt1 znMIZqtQP&I;orC+l^Z|U1=~$a zV-q7)3znv-W7uvI?}FvKH7=cR3vVUS)sfYKqjnurjUOx1CV%Rg^27_8%xjm;p%S@l z7(q;{6ln`Wl!<3yuFM@oBV@MbtHRFw$OvO`%G(i!Pzdlt%S|ZEh^UM6gA<%mXj0WP z439v^(+=?%*af1gWLRoyD7M+Kf--ksdtNQnTUJ}Bx3e|S zD4DeMV4~iZ9-OGRwFg9fMe^y20bV-WfAon*7@G;1HSO9o3_7B#}`QkPxfrZ2m~L2}(nF_{IkOyS`|ZU>U&Yx;;zny)Rgx*DDj+_|7H zqa3;!h=t$Uo&8|xprX`;R(`bP1#iJ%$+pymxv^B<-C8*iMBi*GZ@~$Ao_mC!r+yy@&^>sF79PqHz! zMFGzF9Ii1~24cFt@e%~bw5rt%v#bO~#*)KRC`kEp!64%t0TbJ!WG5Lh3=sBt?WTPE9B#Itd0E5^>9HxjSKMrCCxKmWr zB0ELJG-o*-qFm@%ky5NV>J*h#EU~Ul{7-gS8dODT4T^YIOU@rQa!vWG`LrU3FJ@G> zwNxbEVSK8@QP4|ih>(7>jVr~=QmLxVY-&}@`0T1SL#31(XQ-5N;|!HjZk(YKkQvyAz70)QMJ9ocbw{LAyAWyl2w zvx6bRod#Td;YgWI5-&;Y`7gi5zN-iT|%DDP+$y2jO;wVwcJg@U_-8M^+ zESl`I9wt-^lB3t-!uR?2fj}F&Mz7EJzenX3Que}p%vS63GlR8%_)F+;z4g8~?u}lrw)uY6WT0B1y`A9zeTZVtMTicfOJLi9qrg4G)MX6jb%)ey3 ztZ7rJct$xD#|eXqUs(CV(S_HQFC15Ry<5L8M3@8q3`AM1XiT`thsLmM_kV4tzhF%Iof*dbqiHbV_`q zw)l$qhfk?1o_KZqR4$XRj-SK@-}K{Jzgk<9d-ePXw^v^sSDqOYt_Z( z%W7$uuFb}5-+<2Fq0^jK(D3~4c#>ns&_%t94=hFy0%-UH7@E9_PyAlDpa`M&tG<8A zN_0OOOmEUeg5lh$`&zU4f489T)|Z<=3nXwmeNm+}qJYAGb40 z1$Tb(J#ptzQlA3u{P}uZwekjtE#0$a3@K{BaQ?0bU%jp`&=2atDsxH7ykf*qx3T#! ztHUjf|Jo?vrG8HVnnZ7~>!QMHSU^2bgH}M1-6{OF%fzQZ2-DwFxQR3q-J|0@`5hEL zsF_RuM6+qNywbp^5z!PouJoG?x-2Suk&BtMH(COPSw&Ii;=;`&63noEW;fx%Et{mOiD~rRh_e#bQ_EkvYbgJ|!bV zWR`mP%;I3>K3E@d>-P%mF4u>xpdg@!>~uCEwkf$yh-b>b&6w9~Y#^tW{Ca~4Tk=Dd zB}p~vURq$Zj|EY9Ql&*)AP;147Bk7es**Ron=TY)wTv@Vc|^dn+Tm{bUgewVI)?=R z0dv6nOSI(Yv`J}|vN}@faQ?2RKG;(~G`ZLH#o{veJ}@AJkh!_DwTqc(45O`-yHX(n zT8kHCKiR?+Cb{35t$E21Wk}xRw(l&wzpz;MsXm*}OZC}Mm2y$yvk+l(b;CqZpFqR# zBPax*`CCM0iZTr1;8R?QQhGDL+?7*$u>P*+Zv9;;TYp#Gw*HQ-iHEV0*S!UuNsLMr zPBNbY`r^53%HJlJ9?p9kE9ZPHoD6cN|K3_hk$p!s&3ilFkFS;DJ3K_EJ~L%r_Rafk z5UL;XY>E%OhNfWseJ!PEP_xd=)pnw>KF~)tPiB2?|LSJK>ty$)aD3BO>b5E+SXWg6 zApl{m=>e(@ifH@`R=o9@8x}Le;Vm{U`&zwA&&Ju=pTx4Njjv-#bf{9aFT?tW|Egmh zB6|(?g}~tG)P~Hj_)A+To&InL^#}TcM1-afL+tvH+1R8%RCBMn>lk~E-=kfD->z=e zJy9(aqWTo5KHs%c=< zuC89wBMcxu5I|+i15w|RJ`p(D2D(PODiN)}QO73StBFU`MG+kj6_rs7Ep(4YJ8GX+ zIJ2zw^P>}?+44VVC=UiDdOABM^8*c@JnEm|$U`8^X}y8F0f~4pE+ovVd4=X0W2Cx| zXX3T)XTffMt*>8SfMTA(2cYdUGOP`OJyTfCm@*q4g%=t0<`ovPI$N3(4pB$6w@BmD z=Wcug^f`hI6*?vuS<__}G_@Rvry&Ys+6jzqI+NdVg|nh57X1CLe|1C9j>P=Zz_Zv` z%JOV3z>}QWKaq%~SOr7)nC&VsNFsYAp|H*MQxYdDLK=Z-fLm-!!nn$LH=RVAZ7~)Z z?N+$USdDE?3<3o+kF-Tkt z4JT@hS)-Q&yQSFzS)L{`Vo&>rthfD`4kCh zlZV&IS&phpy;K?N}!fdTi~`&|_UPZn_B9sEbZazEqLK4zJAby<;m0j{-G*kG8F^g7wCK$I^@=W;@n?m`R~T?3*D3YOhS8dw_;+e+hULUZ z)z(~R%U~--XDx$ux3{(owt@Uw2HU19&G&{7Nn>QPu&k^#0J%HdWwJIe0XVJGXjBh!?{*o?x4h_3?Rj^*3?|B{yKb?o zvrq;WXi)MYPZ=)UYME9eKCuTRJ|*!_S_boE|Ml;_(dmz(2y0$o{eE*WDSKS1PAKhn zUHK9_n&+&k=(x^SVy9wj1;+4a6KgyCPE=X~E~UGw+sS8CJfst?TMs*TP5BchGbxD9 z@nm`OW$PbbFh7>DNTwKJIV@Vz-X;yb6dr`6AezAsNp+AJE`vJAjAHSj1W;AU8gId+ zBu1t3N=Kz)Pq2FoPY4+ zi1x1hbST=fMh}rS+L^(ne?Io3j)nV9mhki`9q+T05?bpf7k_AIBG`JBLCk1OT z)G$c}vBU}@mW^x4O%-;Wx)$PxZYFXgXGK@Qk%ewg=E}zK!T*e$(P5_#vQe`j#SLnAkFre2GI%*s%N8YhU%%1}#! zYN=#EQ?t}qbTi3%A+}6gd2?E^e!F{+IiYgqnMBJsS&&aVuWv2)QnTdFrt|t-2${gxhul%pq-+tI=#Krdaz?nvfj zoo<{#QCh|EC?>R4Z)FxhR)X*-HF#5{aYG%Dz49mT2gwE_wf{{hg zqlt=AzuZWlo9LY_ZOXhwt6F;^IiwtJmPKK+BuL{-nUHdyih zPpR$6m;HqkHW9ndy%&x6;#u1=t&nJ1QYgb7Er2PyHk}Fz= zND#rc>j*xpk?Xjjwg>10t@rNq7a={PnX%f-J)Kj-Twrk`)}vj=v|zjIIQ_6r8Y z9r%Tz=Q-Ige>bi>7$$Jfo6d z_S`^mq=c}4$PPveSlv~7Hd7JT6K!o$M9 z`1_mMKJX$W)6)?n?XW53`2QssD1Z?*kRt<>p(oHi10RZMj7p5}^4^%K)%95cf0xy6 zNAJ2w42X7O9tpDR?#&|sTbP@lM`b%aU!T*V3LYt?-TvBc3QgWXlE;lJyvD<<_?Yv~ zFthRQhdprSJq){M^}n0mRYAu;C-i*$O0;GBSrQBd(Sc79pQ--S&WUR8;U0%gsoOqj za-uI**26m0etLQ0VABu4XQ|>7Z=X5AYrK_m&{=rDov4Sk+=17g=Z`p(>%}cu`L$}6 znAp_gu;#k$m(QFqDSk}d_IP6E^u#EAP`c{}di-3;F6FSlsdoF(g!TbBW7HeQI}H6a zpHPyGE8+)x-(EosXoE4UdVj%#aB&?!J99DAEMN{&Xw+nrS*-A@qUH(ysdwzc)5zlj z@WeUB50~3kGi8?IcS8Ef439hh(RP(D$v?&}kg?s^+D|sb~_Z}n`LH>b-M1h%@g~DHbT`2rci{GeNJTNRgY&L&bGnPW4X?&(q*?=`4a3)~e z;D`knB=a*)d+XpLnqNfoPqpULbJ10SmF5q3`1S|>=1buB#ee%U`28tD%k@(!77uXe zrg-y@$k^}Js!uS8Z?UV}^DBLFtKDPM<;ozI!^kExT^?76&i+6@c$5_XhugYjsK5nP;4(Lcg#vV`x#?>tY{w^;y5jwX z?{8_BKgb8KaV#a*7EkqV>nmvLil@#>^r)@rM0_rlGEY466ByZ-jaB<-xE)DAvOiLX&>FHK~z%kV8>USJN#l|s!7XT1&jOq;l2zZ90 z1K`aXN~bf)J7b5H6-^#D@=jYM3qmye(<^8)py?~kLu&2nHsPUZ31WCw5Zff^P7;~~ z-DTHBg)##~nfxr_x~Iwk2*aqlHvNyWB6IDHElwiSWq)B zzia~U3Am>W0qruZ6m~DppQLN#c?~}xmnITos;Z`A<$}=9l4G&0Nd#(~<0J^D)jJlB z0L8TUvFy1E9y>TB%pDw7|DU+6A|OtK{9~nCP8A76!M&n2AT(eZq2V>LCOj@e!)hY5 z@wgFMJNS&!;x&=lt6@^DBVn^>+^1h4_>sb3eHwUb!%SBTUnXdy}dnSK3YIM4>9|C&|Xh*oc z!-Wm2J*Sn48w*LOi1{X5*dLxOi!7l>8e{#^I&gAwk#Xx4Y|$5{9F#o(=j z#zANNH(c-OAJ#02v}ys@RpFYGK@F^}Dm8glLE0~%W(FiE3Q3@?Oc5i&4AhdvVP}$N zqGNVUGtq`s>;^_Aa@$^Uu0gadrJR5xm%funm3=3xgZoaQMk3n(TEx}%zuH29?SGwt zq7$He&Dr@j+gNjU#IDIsn%?`uQYaR(`^qD{$Z73?qhS8fb?k2?5+>vJ@9`O;_i)t0 z9TXDw9`rNoA3d!9bXEUJOfN&t8`(W^DVYNIjyUgehTuKE5NDNPB+=S+_r$-D<^IBz zq-x6jL@OcH4fX>Gd)?4akzAJX zm<}x*bjRj=%?a9EnqOd$)xROV#Bbr*}d zc%jC4;_npZ{`2x#IZ$K&4t=I$ZJzx-6^ORY@9ZGjVn0H(t7 zvD6hjTPB=DQ+KYl%L77VG&L7N_uiB`3A!7F1{zXiSNxT^N;|fm4{;$hu z=pa8y1Svg3?D|k1gZDf`zG~HC7mtx1eM9ByWRUf!Fwl` zoaD3j*Sq&07VjwiGT)DN?_Uhw8<2t6a`Ml;e<*lwz$0}t-yiATFAClls4=`>!qvY2 zbgPq}hOGe4l0Cwj8e|1BwAhEp&r+UCkufZyL<)n=eGtz*#5BsXnayva@56>oBLPa7$zOyz1swQ_AlHE}H2YVTC6 zy|ZHN9U%t-)s^pLx8EtOyTG5lgIJayrjD4g>pqF)-iT!;Sgqap>&hR(Ir+@cb?L96 zU?83e-#mzv6VIW4#LoK7HW2J&wCG33TJG%&T=B@;&xBj=Pyu!FZMl6D$Zd|>ai3&~ z#2qxK#vr$;G}yMo-16nMI{H{0hp2v6{<*x7v=UV{I*EDyAyTW^Kk~f;Ahuk82=(TG z{^B1wPw%j9Q$HekSsm&t^Vlw>r?vNa|F?gZ90&>u`VR%DA7~-f`hmG(TR)IBBQWsq zI(Q!mXB^Jop+na-cf>AYpP?T){%Ba|R#i(IKJpr*8KZ(mYnXhKq=OSb_Tw#zpD}=W zcjCrf=iLl^IfQr40Atpep54L{I3MLB`~FD2FWJra;p`{<5X?*cJ;`U@8LIy=_r2wF@MWtP|Di^K zi%+BK1Em=3-XeiS{zn@HLSk!WF@+r>47fS^eq_W!*k( z{ehnTuzq_Nd-QWXTA)Xd^T@mT2UzCGxsJ!iAL+~GpS3%3yVyK(Y1oUkuQK@-%2F5r zlXmor;?Z3I*f|_M`Td~>gsw}zBweBBE_TQ4UVZ?~dKr@9gtvgkwv#kpBxU|9qK*?$ zZ-1WIYO&S z5iNf7)ADG6{2_+G0-W+yUU({2>lj}C3rDk5v~XM@{*nIXxo+VnB1|lbg4<1aEM%HO+d^T@qUY@wl4DVO8&Qz6&X@R-@VrOoTpWk{3&$}f4We3%6_ztSw zNlvv(6iKJE^Hq-Hn{J7M=p#}GXP$KR6*|167l)VBw67u4Y+I*Q^RZ}_ymG@?-qJqU zr|Umqbcm*|&Bf8R`r%jF2#oR*){mRGdKj||2 zvDV*YBNR&Ii*WEIi{x-b$7{URbH29cI%h0T)wXL-)aZv2a zsgqnWc5Kn*p~APg*iw#9LQ6UC*mY51D_0GHC181e>a9jVD~v%)h2a4T2XBI& zq>f5VSEYA~6EUT1;i)J&{{((JCz$?Xi~RXO>I~#Ko=NK1>$7Z z9~(!Ljy7>(D6eB2qm3y^L@PjKWDVIQ5z%I81b5tJTN-6BY36etpT*yN*&pYVdAV() z-0`W_ND|XEh2{C~Hf6_BmndYFT;a@f-dy3b<6pDM7|R=x9jP@a3)O5_vtx7mUP$aL z%XgEieN?95e$EwRe}Mo>fVd}U`W_wk2tu`lih~-l{y0!&;&I!TT`({q-Hcjxy~TC` z%VxzbCayEM*m75?C0On{+a(qioAIB-erPpvmSZpmVQL#e4ioMgWm=?HFtQe1C@8@F0 zK41xoeb6Nq75Do;f1$8}G-HU@qb#c8?A+PJh%v&Ke%b-$s) z38c&U{m#tsCmpLkTx!R^4g)@3IA2)$;W%!vyi*?u=c-Jf^dhVLU#a7g!M}H)niMnf zRDy__8`)$3-C^i?ko9#vm>918{>VMh+V9U;wYRaW;cr+*B!BMUi4#&k>Xun|ZCuaW z4m!1VK+~r}J)C6Fsn^mN?)I%yml}PtySjDi`2O~%eeKlg_kcFgPh8hNh6lCRu_`pz zb@1+q8G8q&de0KZ_1Jw8GUS&O+E@Cfqa~furm4B$XN0vMmjp`D&8w>b-Y|J@@B*mTd3S5+~A*CG}4fX;W2wDALAqv%e@fz#>hHtKvT=)*j`~ ziM0om3dEYt@BTj`+r+{WLfh=>TzU{fa^6D-^)N|>Ghf6K2%+9Cv8eD+66%##^`KY& zivFb;b1m+Jbi``OA@u>3Tw_<%6|R)LP#1PqaWV1MYza!f-6il(BcYOespQc?$;Y{p zNAI_UQ^^k>Ov#_%lPZ{>M$5^Ta;`h>i5#oE@{Td;vA2BxH37ML~vNVIkez`W_OaQ@ai1Z$zd%9_YI7Tt#~+{3oMy4l>= z148^;x}Ry|gMT+F1G0vI!T_hf*d2Nx0ak zByfsW+oVI^c7^cxkaQ={rmo+!|l*Zi_?j$bYE0IbOrY`gPzwENip6V&=D}f7WnJ-vlH!vR6YZ4e%M)WceE71&xBQt$ss3Zy>#wWc@A}cpCQlrO>5KYRT@mR# z!BW$;$gTf-jUOIN;}Zo`zI9-G<$3#Gc@rn#=G1*sGxxfa64O=tq|-QJjGE)!-P6`F z*w2qFY_IgTQTyLwtIumZnpRnzUxWUnsrNLmF`ra4g$a*6k%L@iJMCopQskw5FjDu# zbVTcux7|G|mt zqmPP_PvU%ctAAin|KthO--nypn(mBW-AVc99@-AWG5ZZe^C|%7;Whpm+eY-!88fe$ zG4-1GH3r0DnLBFoPqH3%8#jJ6oy%W;I6ub?Y6s%3s{Ka94hH@;)xv6EI8qIP zeGC7oh6mYvr0uwL1-2JdGfg#nq37l|KcanR5^VfFDFG(FGmYP_X#8BI@#})d&&6r{ zmXOBp5@`G+80@5w-a?i&au; z2`V|;B`}DSP$fOuD|xP`Yso~b1PiWOLY`Y}=RL!JV5CTDta@uey960ixz7@$cy|M} z?73c}k69L4;mh@^8E6jxtv>x?glV~d?crM2NWq4}wFin$>pF=}Fn^AJYfwo+Sjm#0 zlKrBS|L`hjnp+1mKoA$S(p2Rlk_2Bk)+6#)|WyGLD4zYTiSTix63hl+P&6-iR7Df>k& z^{Ox0MuZhzPeocC>S>igJGI7Wr`pLo0irLmqU|gP-%@2RwM(#!o%kTsm>yDt7`z?30gId0?p#E}aQ123`4$5D%kK3SZZOnk!^2hwTXQZR-BdmEH!5a1Z zX2D7vk9|Yyo?z|V4r_AjVDl8)5=nlH(-^?E{IN&3t;sLy{v;oN(t2q3hj7N*Z zf5Vq=6UM=wqSL;$P0myM;F81q_OT1Uj8o3lxCrbJz{AB~XacanKWxYc-k9f*5d->v zGy*f(zq~NB7ZDMjLQ=G#AK`&D+ zgvxZj3mtZc7VUWB+V@&}`=W$3i46FB`v{==4z))HTh|@vjJ97Vq-1pC5DR#N!WY*!xm&7B!megfo+G{@v$ygt+uu^iN^R z;b&DlehR#$T|WJ4T@KMf@~3#GAG|5I^<--S^rOuno_6HZ4*&Ir%`%o{h~Y)lbOU0X z2t43UL*>Prgz>)X|LWLjHtaNRtwZRT77*Hcj$V%@uefb?7Z|M-%trd2A3hqy-QZRB z{d<29uLLE4*)c1{HO4mu9pQle-PIkoKQCY#wSV^bfcFdNb8Ot2!{*29a;%AC z_srkG(Q}EzbBp2vwI~c%%R8smz0t;m7sS+k(uP_)>#NbnfL#A-qXXARA93leXGOa) z7Ju>uS)yJ!0f1g*vrFA4r=Z`@8ivzS?q}%PI%Vy-@caCn=nJjU+*Q%v0T};0?*9_~ z_@(H;R~2698GxAnCpNGX8&H?=6f6Y*i<-3?pmdw42zU+d7lR_I>0Bf3LupA`Kane`8BzaQQR+t0LP z`x(jxVXfsM!cWT}99P)q!motzzeICijXrMpHiW+y{rKhRz%MAEwW}*78|{l$reCIN zJQSaAPX7-n>$5fT3T1(eeF3h4KU$&qGwtnLVmay0HT2FsweExvG_~%TY+ic5y>;&k zxC-%~G1Gx-+s+*IJFyiUMS!@qoQG+#jQl6A*!S2vhMgjRX6#E0q}Kh5u+OH4o15#7 zgHG0+$(Jj$<%{2~?F-J2`1}hA&jE{^Sll@0IPM0&`hiKo)pPnG3tySjo8PDB^x${X zoUZ)7IJ^5$)MqDCpk@^LGaTQ3TRqv6r19@KcXv`IeF?9#@RhJVF&X-qPpotd8d7+Q(QK$nhg55ceE6^HO~`qge%4yEh+wRc|bA z;<&F~2a-pb#p zY2ah0Wj3B%TLAuN@DsTfgc0vLTHk^)wW74`nZz^MU*zj;en7kANJfsB+AuN_#Z9?> zM8B`pvEjB%ogiOTH(ikL-%AKg1&NzcnLNb;PN%v&xV;$U-(qy~2R{h>FsZ?ceN!LC z5Y3#2jt6#-D}X_c&9*&PBz4==At@iZzI6%VdO;c=jt8Ea`Vk9{6Flc+!86A18^A-9 znh>5rz$5+UH$W0p*bzhosk~&&zCm)A*jK<5#gcbDKsuVbOI%6(@4*6zEg>O_ZWl|N z{&W3!hpF-HkS*L+oa1-i3tZ!=Lxt=kXd!~xKX+FS$gUqTK`^mDMD_!*QR`rZ4Nyw) zkD7k5jlyHejs7S9YA3UcidD&poO5*Jt_qxr5(|OI^p2}?UREXo`26E9=Q7e-zb+6mx`Sl*% zp3;qd@_K%^=e(sGTHeU(_FQsh{Tp7lr%GN(jD=$f$VCDE<|{?to*zzBm`H+z@k{^; z2Xv<1Wdw^<4-pIKT_#@Sss*oE51Xot&`lyN{U$$|qLUjL|NQG+`HMO(e`)FN%AeR# z`8F72AuHN6;FQ1JC_o>&a##*wt*d^beG>80#HnKdruI=8Hx-q*3CfI7@FL0J0rEW& z$2C=0o= zKGUoV@wvFz`plh{SW0{@mmoeD35EV!^aWe-Bl_cjai^{eWI;+W1G{D z5npU4ohtiQ`qf5MNT*-b;X7fvV%@vunnFj_3b6X$2D{>&Y**ZqxuReBT%=#UYghK& z+jUXlhg`+)CVrAHF&Ef8w9UooZ~Yfy?SH&gf=pebvVIkAS(kBG>q{}6n$5}4uW)P< zp>7e3s$HjvnKWlxmc}cc&$Nu^Cf_QFAAIYD`8!oBd+h^6ufIqYyWDwVggDpd+5+!z4Y7qLLDI4p{K)yv|r z%+Q*-)TyNnh1$$mkz7?)zc#n5cH3aD;lG$et2K!M>0!LffDwQYRwVchn{BHU=1WZy zCDf#H!qu2u)+gNC{JG?nnM9snJBKi}52mjPx@tGRNDu1@r)PW$=lQ*->)UBv4FCV{h>3?Vkd zrU-69Ah@mOBu;KX z%zSSlEeVGQG(J>Hb{_F8P$YH=hEf2!>QiTsw|=^da1IAs_3Q4 zB33>(R-eCq&8Kbj9MJ;?S;B=^NMyrV!wyS-rhkoHE;D)0(U-UZ$@202oywo;@;`mg z$a(B!3Xy)GcNzWQCpR)~=%HE#qX@qMv)iVL24UVi?VE>!eQE3%Cjhcfa_08&$i0<-kmS zw_2^MTP+!T=_)#HVf<^32i8ZC14O1+PgwHT_P5RqU#jGtPdp{Ge;P zrbBlN%btoBQKON#saao&#nd^lO89fW%^8833#{XpSfbH}5e z+(yQ(!m6qiNMVUZ0u8ZW%oQrt=(4zQo}QB10sf$a;x79}2U*-?rIfrn>wHiZ_VQyB z#q<#L!(7+V?c3yc^=aR1RsiWA4 zJhr)h#6kA89TYKM@Ta;gjib>Iz1Ph&goSo!ost3PXo9xWR7dEU#gChy%>q%b^UVTV zuJg?TWv=th8Xrx*q+*41aKBi%M{aIVZH!!FfJ6d!Blj9wlx^sW=5$hGJ9X|CwcB%N zcO&r!5_4v-Fa65q8<-#2X$_~5hdBCqJdN>mWK-S|Bb&w@p?RU}S$^L~tQQ^f?GAg< z4c|wt!z*-`Uc~%s?DfQDzbI3Zgjx15=Rda0N`B~~4om*#zwM@Ezcb~k6Ns*54V^1f z|F#eeghPy6teUx(awk79C9*cz7U)@lf>0=v&Y5yuHVhx-x~z6wKM!97Gg}u zqoJTY?4-oDh$TPG?wgeysz2C{_1#s6jQZQ!e_uDt&Qh(-j@MX{#hON6NS zf(4Z}5z(Mg?}ZzUFQY-xf&xZCjmf=$Xz^kaMnFg@D zh*e%}1?gCPsXf=UingODYX0Bf+UMNdgaFp|c|LzWC=qFWd(|-FAo!o|o=gdxmBw}BDpjtHPbbL9UzMvRsqVmFY z)%-tSn4UC$_l4>B{EwBlUU{3=Vn9H$GU(QalNQ!eZ}G)4w?Lcrj!~}st;ccrIa>kd zMZ$*oJ|kO{Ua8_*8&G^MD2{cu$6GmDWUbe9H>JQ79-{(8s%5&k`5>NNZzmY!ctB?x zGyTh-Kwx2M7&V&4Uh;+cjQ&B<)-$2c9ju>NR6&jXKA=?vvX~lUM}#XDB2!)2zSO(W zdMw9U`F;$%Lnu~n=;R;S)kxxz>-gc()@w_nlESVou4+9l z-Z~vb-daLz1+PhMl-Qf!5!%ME)1EuqqQYxxeuBP3p8BO9j4tpW_}JmofJ=|ZK=i?2 z;ZxmI;xA&k2Xt1aF9e+zKnVd=1QK3;6I8iGEj3=|9;*ydOF+cZoSWk)E}Fi!G@d#4 zy35j2KiPFjdeSGmFG*K@@^RDHl&bZbKgK3{S?i=v7=_#YfmC0eJ|dQ$P@H|87rCDD zzsUltznC9Wib|yv4VO}cdUQ`&IVQbIDMeKZP!g?T8jkzpMmu$=)UBknDlh6#xjZwZ z4pmk0C|bp;SUh_q!8`NSo?P0kKNiu%z(!u9n(LzJmpNtUV0VJp+GxeQ^S&C*uvZyw zFJ)9)L>nU{Yy-U+IA@pW^q+GoQ=P{q*7IAEJef$teWDc~CXXXgNWxq2_n;2Z^a=jn zi)LnxPn~yc;vfv?H43XCuY6ipZ$?Wd6VA`!#7c{baTS^#Cj&9XJ@5ZeWzZ;0g{z?< zz1JkGuW2tcM}hz+92&&hk^@*Gk=xT60^C452F=!a1?L=_c*NE3AI?Ip;U2=UN_AcZ zxG(j$o#hY>7tjl8fo^yq`7Qety_m!1-U)}_6flQt5P3RpD@53OUBrLs8!m=QvUq;^ z?RVThEpbA$^~f!+V|XDV3!zyuMakkbx!LOf82d}Ayugsgx~A|@zV?ElC%0Y;NaHDO zF7TmK`&DJ)QM^r$KZXV>Z*E5L5AN2WtkxIyhTJ`oeq2WroqjwxlGBeP%n0HVCQUHE zOCl2I9%)xRM!AmKGV1+6=S8vmYN3XVlRjMjSb7)AuKAbRS5ko0`!yW0<1MbjXx-*5 zP-Ju&1){;>bOB?sgT4^CjG_i_mEI^>3BufO3|!^03hfHGTp9c2x*X7<)xQ*2&~sbv zz~Nl;*#&%-`UnMjrM#PI9W#R!uVOvvKmMLJ`ZhD+V|=O(_3qzV%=^rdZ$5QiL1)>s z^UH6%W9C$^`A0M&yMkBlK{BG94bv=svDdtqm-EYSNlclk4KH*0-Evcs*ysVG>EW8} z1jJ(zPQz^klzX+40Zi`!?fp{Mbbz2#;+WH-_T zm6Vv~wTQv8!-72qKeYyG^l=mt)9`xXALi)rx+p-v(+;o5$z&H#4LpSx*_?^0;ZR57 z5%Uxd3B$kbXo?e6sTvr(;Zsz_y@*T~*G(3crc%W(4BUeR15=F?l!P6f^TxBg61Qpp4QmR|m{saa4IdxbGa z1$L5vWDvyfJ$O`m)>t_3spBQzs-hT&V1WlS-U#&v8idw8e7noq_?MoXvEj8nU@UI{ z2#m)8M;55_Q58&QxL#X<;MYtOYxGey68r5r)1LsX@q<6rdm()Eh|o5vy|mkaxz z-kqX%Jzx=nmZ}OeTUE4ERfnhzTOyT2lqr=&g~rpr4LR>VR2jF;g_pJsMjKcYWisf^ z=7*$S&o0Tn!m4j{<+M5VQ*NI+ZL0PcHP=x*{$<~#L!&Eix`XGpH%_yiM~itxc&@3M zf4$~P@@4O~T#dI)nK^UBO;aqF_Af)|#r2I|%Ot(dCz-6BcCfN>+HJRtpjP|fD`XRV;G1umDj%#8rHz&909+o|h>q zrbL~~7ZUTFC5~Y2v+j@vWk9u72GY4vC)#x>WC4ZQwrM-g(e_On?L{n1IJ5`;v!{_S z^$};(&Lv^P!miGi)@BR~lhZk(NhpW8%Ju5-1 zM}jFbIO1p?5;+abAu+^Y$qq2M^_`w`N@el`017VguZ%$D$8qooc_8)|^d#7@~qzP%cNhUjt1s21b(GhqH=*a}a`OipBl%N_; zNuNJM9>+&MREbWObaRlC`z6Xzp$tu%)JU*j={27uuaN~8^NR+oQyb%fLPDP~_sf5t1GZ)EYhJ+3&3ISu~$?Q~tq+X3;*nBb}p=EtCDgxpxVU1w6>Wew#zc-a=n*% z`y2h{1FcO0A$6$(cLp7ZMx7{|tYah$&%q2%M-Blf>~reKwg>6ROwl1cQP+u+i3bWe zKcRPfQBRLfo}AywRx_Q9drC-+-5Z)emkTJ+x4$`>*S(o4-TWS&%^R=IO#Gypo?h@g zB|_3*=ei#ee|FforZ+yhXyGv4e`@b_#z63X>$tUjNe?FP6?@2g^th(iKfP$-(NIm_ zj>9?k(_)kASYO9XL`nB)gJYl;hEtN(gVP_yPkDJl=In=ANUc7FFJFp&@N#t3n|-6J zJ~}^o!h4*U%Dx4^1(LA&ud=z*YyO?+gV{?bSSLz2Y&da5YR=HI#6T33N+4ffShcWn zSUl73Xk+JCD)S`4^JOlm)wH(FigD1G+CKWcU#WA~`0r;O(N$^}gcHzRX8Y3FxkN4P zDgmj_jl}`qh^4ngPk9!Ab#&~iSFI886P}G0zLz`fb;paw`~7eJNL7S-M4*1a``4?; z5Od1lIKsZz@LtIFKRO@7)c@*dmwr0*^QL}Ynr9z@@l^&c0de#_+|?8x_X@cLT#38!(TRguzy5G&SD04J913--Fu7Io z5MU1W=gzmVpLcJOIpw#xFt@`#7-j1(L%y}8lSVhmL}DRcyO~O?IWhtF@4w;#0AFj?sF?eo_ zeXt|8YR~x$?BVcn4fJiX!aYr6Cv~Qn>ZWM)kf4L`juy_DY2^Y#szyiFvA9+A-e!#@ zRvS0_H$UK*p?w02BQ8)7AcP)=2?B*?{u-Th%pAw}fkuiUz)cp`Mw=`en9VN6>i+^~ znA;J&CabgqjBDTBq(HLQ@}Jm7_Cho95nA3)9KP4{H4af>XY@Kg<{!To<(OG9>*u*N zi#}40J|4!#6wrrB!UzL4MZhnH)2-D=sLfO0YeHtR^|Lz_Ns_in#TX;Xc`imX(%y&b znom1>OBX%t(`g^KVA)@fO%z=;YD>p$@(+7~aRr}giyU{_F}Tpa@mb=gglC?)Zysq?b#`+H*+~h%D>cz z`{p*Iwhu#+Z+HReVZFui@FIx_|O|6S~Z-^5mZ4E?_W{U5VK za$cb29(czULW-lNVglqved^CtIc6im5a;zCIH0kdH6 z)pr48SyC#P3`pgBm~z^6hh6+NFgacXLj`#%WkT%K1bbP*;&-XeUJs-*Pj!g z-sJbCPw8Kdj(kkCVl*Rl${9Fv8kGpU!!#zTx5nv{!2{M~I9hkN*5xC>P2odLq->c?iiY8K7 zV9}Fe4@I$Lx&Ft-Sq>d#6!|{HcA=x#F^Z&#Vmzz4%S4!sx((5q@#AIxs9RtXkN0U25}N0EZ?Qot3LnLZGr~ zD$AofPO>*4^rQ13I(3>DUc7KiUeD%Qj=n#KTTb-nL!&$N$iF;(w|mqiRgvu z^v+=NqFIb8BiE3pNC%+rCQGuk*0v7(+6Hm$?#$9}11#B4HIhWD^@05Ydskq;Q2X6z zQz{&7wa?N^NBq`}ws26f{`oyUM?PCd{l!Q1KIKbffijejMwe#~V&jLCkez&dJUtSuAC3%A zh;2>-veN&~EX`(BS}mSbR+?KeyzmdBtP^YeyY9C&!{jt(>#wb&-!nxg*-H*dH-W>y zCde^H1E`b@UWrpg|L|;T@&DnU_b7tFVRmQF*-ve)oN3NId z(I9u^#%SiMGVyA6`T+?xP2E%0z+#~G9tuyj!q{a0!vr0qcywjK@?M-3z+d*)4yCKe zgU8NfOdQ(&({Nk|n_%`Flswff=Ou??vt=nSc{E=<)cY3(Mmz(|QqcFkI>hE8fx~n{ z7b7JMhvZJjVH%o4%Z-=8UpT?!ERb1#{hGgZdA-TM8X7|E>4w;mLhPAB>{))@;Jv!e z=v0G5jtv4kZeZ&Z`FWp}J$vu2wH}sLr;T?`gkHp=P#{A4Vsfyi-F9V(#3W~TS~_#P zEDf;B!CY*mv4n(H8g-J3w$BaWD&fng=eiL=sVHGMavL^^cYb z+%vms!tawkj9)9V#hfWu5;1Ptl!g&EYu%uXA{rU#jmP%_8~)M?J9Qvr)5ELuaRp=@=1wSDZW*6qdZcJ*4vd`47z3pzSR%E zZZRGF!&>CnjkAtp_^eh)oY8l(4_Z02TxiQqLV5bzqQ~}kClBV7qWM&i*HSY`(Bi-# zp_F`f+_9L#hDl>~#kGwqFmBUjdD(Bc*ru1AmY{cp7wa8upYm`0Hc>=&K^OG9mNC^d zWGFQsTgp|yvXgaiWGq;VImDVoE^nuZ9MPRata*ty!a1FnxH-g{m$*5^Hqo7@b@u)eDLKC<)QI#ygs`>v-n`eE?1^AlVPneV2N9VJ#^o#jY>0@qa6uu<|u@W*w z;$hQD$53#u-uQCZ8?&@bBnYz?CHYfl7TtX}+gl%%s>i?osS5)TSWtl4g`Tm3pTq@T2913=xZGeZon6)il z_*&E0%0Hx}x!l9-r52S7M&`>pHFUCM`H}YI=`ynMW{I<-WQsQYx4`)mnhgBcA2Zu2 zGj(e0WHokp&{!)lR4y3^DyCbz#ox1^Xv+wF*UnqID^JU_`OA9zKX{j#EBoSAFqK#) zQ3k{xL_c^Xy6V&Oo8H9DqTiXZrcVmJ<~N!AkTcFi)IKh--waJ063ZkzQy(3jycx!(u@d1UlnWGRa;xm0bfpI3jC75j5W=+G*g=Ww;NTTdAKK{h*FKW-CVYp~MWa zB>=ZIlzoQ#q$5?hroqW}UF7yj^8G{Z`~52Gm_H)=3|cMLRThz8Gbx7JF(E~s^j#cb z=Wm7(vH95t)K{Pnm`tpG*+?Z+!2*M31DT49&v?BqmN}*$TL~U&8vArMB^rGDBS(X! zRz%UdrK4%VX3>YgBLRKoN`1sx689=S`fS@BiPx>s^lc zyp8Qv8eaJotG+fko+)D`v+VaWl?>H-ZU5vOEUnMJQL~fv6y#$<5Zq;)zT~^$`gwG8qwuqP3PCR`OQ|IjeWQb=HFnp9ZUvdrS_GabWhm|!NgX*W{a1x6Shpq432=E zVU%Sit52CU<1A-wS?tO+j-=Ma(t_07Pioi|G3s|I+T1^sPCLFBYmH1N{u-+&;j`-W zFc&7ERP)>>!40F_#FfIbJV_7g4zT{?C%}5f%?UPt`$O)Ke9$EVS-(kevf{x>Jjl+}W?RI#3Jq>Yt{qn2 zSkgho!9>&awAqIXlEZW@<=Cqlf>%&i3ZQ>qy@$tRl=xf=bmyUagX9^68D`@ zE=0?tJ4>otYa)h6LtU)m<;KbJ^yUzI+kOi6zWHoV>=jt+4SU}{wj1_>n!{#m3bf`1 zZE)ma*c>cu;^Ql9KK@z?Y>vyr=2unm%eQF)3=c0%eWQMU`mt#&*(&C2{gRS=ogm*%7Yt(1HE9_Fph$^$cyBcKUy#@8G_%4 zpRzRuBWGM{IV662xJlEwkQCb7Mz55T^9g{dx_Twzl16R< zIF|euXNU@ls`U(>Fofe}bNRih>~0Je%P7lj zDS@cq_|i$>p7+>U#*<~%n`&mgI+^uum053w|MdbliB|@OWV7z`1(i&eS#PSD^;nyv zj$8TV8^xE*nZkQmZr!cs_XsMAv+v!^{*1uBC-+~`d&;hllr6L?>(q8d7v;+QzLbmR z_eZ$`F>GHCU{OD`>my}9;woy_XsRYcVNX~joms+Vzp(>T3t5VUdRH&IEtWX(> ztW+6_RIJI**L6s=ZgyvbLR^ol%Yb8rU4uCqK-Y7xF4e3iL*zEQE-Blte84BS9w9?L zLofI4(^*Oj8cKOBODf6X_>V9%{Zu1~)(BU?yR@FNK*rRv+jX{h(;J0tZPUkn@QZ%v zSl?QA(IFpKEu30*tFsU4d2vB<@I}pUBt4hO>^W}*MfU1#1coZ9LZ-B+z^3XNuJrjL zJ5-RwlCp^c0{hf3>;cW4iHK>~uUHU`>?y?Q7}ee}E9@ANx4L5g}s8M;(xTfNoih9MbSgx=rj>t&-WyT9tmxcs4ea z>ivys*`OvTxWfa>(e@rn*Fqf-RLlNRz!(|}4)-p|_o z2rYvozCa0;N>*ADv4waFmXti(fN_M?GF1h#M1hhTMS)<;2oO*Md)p#Au+e%hu(v%@ zCVQJE**O9(J-Ez&yKdjaj>@5$AoXXsn9*G|iq;hzQe#qElEmY5KyBDqF-1V#$M&8j z0f9NgZ>-`)uSt8iZ04u0s%QM64wio^EWe~_>O9Y zn!$~VaM8#d!Uc&1N5;>e!VkUa?*GYBn}IKJmwnQYa&qjqFv*b4F`58`~@ z4T)+6^{53}b%q-^$lP}Sw2d48C3eb1;SKgu!k%8jLo}#DY6=NSg*dJi@Ird@AzDL^ zifd`zK44n`FEo!Ez0qbZv8`D8jbJ9)YrhPvWl*B5R1*{jGLjtb-~Ha-pv#w7mmiS5 zNru8i%rFqQhKzgXfFvzGIw z4mQ6CU9|i`9S!quhii2hc<59_46p48RX@1&dh{9xxn1}Utrm-_t@qxGC zC)B5hMhY|jRL2IR^KejpC>$;n+ly_T9&_`;>>OX1ons5Lb6jC|z!W6oQx87i>>u&L zog_PGtsrsms4ZFPIbuyIu3fANO`9ClQ_kOc6^wd-UhbWEZ-rZn8=6Y9xh0sw6 z_gV>hsuF4sP=d4e$ZsiFezE!YsqgKITRBhWKx45RXU}r>N~gbsHBZqI7Ijo5&Cw5tS0FQ7K*!t5GRvbWptrRU|s7o}b8U>Adx| zK}$@(W+m%+p_9gJgCfY(yO%kI|Am7=a>Gs)i9f;+`PHa=obIq`4SpFH(_!NXY{rfc z0#1DmHDHNluCCbJur+&=APSgnNTVI&B#?-lqn*#2dF$OS6Lz$a8BedU5bWeC!-!=K z2YveOYGML_UcD{!7Vm%>HRvWo6twxT9&~D~DvUMlF7)pEC(%44Cy)e+YLTg^jw==O zjG(8aao&@adMQcJ+x>X)+ckb+R*eYmyV3bVbvpaNXuj|8$32Bk6|_LLFH^bU;0Ss% zmi`}e1H{KKPiTqF_}@B~GR|Wu0~_+3ttmJ|qdewHfg@NIGUvbLWjaj>y(vkZS`@*p z@qrs;kjN`7gh6V<9CeX>1CO)PdIHuOEZhh)foy;`t1~Igf@!!#yjgHO%s23mS^T&~ zyjgHO7wTzNjZ$KEvygyXhjRjCq1W^>sz&x0b#3Qb&(`lN{?r|RTG<)>FKO)Wg)1HY zhO5yb-U2Z$91R5g?gfAG8EfmRGyTd5hz9=3w}3y+O|($puzO()DQPJU6q|jBtGYYD z43MBD6eJhMwS(-{H+oW;3cISg3$k`pzH0jJr6#^hpyFOy< zFFWo7nAtjy?E$O#k$q0-C-{+tNZbt6iiJpE6KiocHL(_FQxj`(HZ`#pXHyevaW=L3 z$x2Puw{=QMTXZ&A0>{p&I^+epn=%L`NlIH;brB)pTXx)gpTwaywHAOy$Y$xIm6Z$c zDVtffu&Qi^XfDLdNW%{v$Xxvo;pi9Po^X`+v#ZK(pZ>w>egqTY0aZ^eo7r)ZJ$5%} zK?!K=iJ4`$688-!>E`y16YYKm_g-^5HB$fz(|}R!MnBnqCo%`wl9ToA!7EsLF6by) zfk0OP;YlJ>e>f6yTf4-_1lQVrWsIC~hu5OAO7coPx7N|8YVEl68eC}~I)gIL3yP~; zcs3Ce-D`}tw%h61ap^s2tX#bp=GXGQ)X{=$AAn^K_#Tt#@)g;L5$|CFIt@w(n#t4XCpu3_y(%( zM$g>3@@QDn>g3r}u+hKvrvg1Fh%sXog6DE8m{s5BC7-)$6AEPM_(d%J8$w^SbsT5Q z!t5Ee{Y!j<{@ApJdEWKEq8=^&Esx`wnXb#;7FD#rNNOD$73;9zFdy_!9A68%$hA_P5%d%8 zvEsn$x|mIK1qHkBb>r_2gt?x@WywvmGAxbwWNWN@%n`!CVE)tQ>8EHsNfW+U5T-tiiTg8{Qp8l2q*^umW_o3td zi>w9alu=!=E>Z06JML2DleL6W3qTn5SnLb@5BA)$*}2<Nq^sxvrXZ>Bz?F^heGLYj)^v`(>E{_o~TLpXGR!8@76p?ZF8r&vL>E zXQfPfmHwRfYRp^t?)mE34R+><9jnss>$dCr*;&omV_?ceL8ROme8zil9nFhpY74Xd zs6N(o4`k`J$k#pAI=BpXiJ{5MqnU&oh47>vQc8)W4~F1!XX0Uxl1S~o8-=r`Px~YZ z54OB4MQN$?Mpk-D)^;3(qkf-J@8hMCIC!OcspBRpIXZdGXQ;$&BJqB<+(`r#?|JwA znG(RS+@q6lZMSlnI%lM}WOYY>_Wm3+YK!Qnc}rp#+=9k6jeT$f@FWJPd49is8mLFa z)-g-*FFIp$-T2nT(52Az(1)zhd&jZIa%ggnfro?)S2HIgEmjUPC!_jaaez^(>C=A6 z%CP;@=btxfWO7t$UZ0W4)9?xziqyH3BFz<7O&Vm>x}9dTk04ogV_XJO#8n^(8e~a zZNp`)rw>-#@;=m8ojxs=UeobY|ECA(W;4SwyB!hI{{i>LfBc6@`QO&h*Y&fApEkr1 z7AZnkW=*Z7{*`PY^`6iRMg<)b7k}nO_T~K=$TfeKi~Kof$6N4c7;P|rI_V8d7E~*J zRm!VQEHNeU5aRa5(=Vz2D>izIzs+afg2(vPTwfWdGg%;ssO%I7qVsy)Ij?C8YY?w( z-ZCSHo47DK>ZxX~ggGwT)RoXW#YDDWu_SvqEL9VkrW}S%UvA~$$Q@JK|B7FNpE+8n zh840QLvmdTs;|xr?t|(FM|{lYbE?r4XZ|=15vBM+2T)3o*%EGYq*8#yjH;C2O7i2D zaNUf$OMoQsW@vYQvKd@eK^cTr&R?EELr-On5Rp;DehnI$3HZ8)K|@bfg81Y9O4!Sw z;lKTLg~p+aG-Y#`@5bS$Fe@+rTQKj)N6i(gbb_;9b8@h45dKX zGf--+axPW5L2D&Wkgs=BY^LZx3OFQUKn!&x=vVOT04c;Pdxfws&Fi7O?p)reHg>X0Cp0|!^C zw)8_`nqeGT4cGHb9X_1v{yJP;ORSph4TqY7Ozt+f8%Mnxs_&=Xjqcf^-QY8}qJ_)Z z;tI6L_tvPTmkF%N>Aj^mc~k4 zYu#Spu+?V+y8qx0iM(_xNt+FddACQVaKr%6WsiIwQzHjct{P6(E>X* z5lJ9OSpjag-X*=-0&e)#4kdY|lD7-mpcIB+jr>nkKnN9h>OHVVDJ(~Feqag~!_?A@ zp7KLdJV^|bq{RHj+H9>k6W9DPfG>5* z*Md`&0I`)W2+LJvwRFNJ)qytO`y>+RA~634DEwIS^&M{;!zBX3<1`Iq1}@)PQSft( zG5^-9<=7j*MjyZn9e@%n=@2S)5f}t)n>qDXqhJcq1pV8$!R%EoR-kK0!_@)gr!LH17&m>%C`kL!5M7X?`@%<*{6U0zGV6*kvvxmAS? z&}&KZ_}^<|($VwF8yjxstY!JAo9!X{&%D+6=Y5gaayHN1$;{d`((lIPKr>X(zu8%2 zbcX?ZEd#BZegqHH?%fr1c0u-P-cv|_@4;8OC3UdZ@~@;)YC?AnLQrnyw zZcYv)4&99`AGc>qt<;8TH=T+4LnD=8BP92>rQ7$ksP&u@W>)v-9{w%NMNPPvw1syZUe`sp``ip)4Q(o}-2^5Y z(7IUz{(=#>p##oXC6*TwJR|T^jX+>4@ck<^0;$GgauB8 zsV@aecHD31AV9L~Gtw+(bVui?4R|2vSP}Z9r87B@ZAO_Rzxzb00G;qOCiZWWWS(H3 zerEI!7b8SX`@SXs5l&F5c~@|RU&09lX01U)sNv(g_#n?E>?MErG=2PZuxhHQk0AZ` zohRZt%tnvt64CQGU*r@oYS`{St0aVjo)PHffg^Q%u- z#e#n^&H5f?v45Hk*ZwtARieHp^bgV@g?LZY3~PGr(}gv|5TU|ApL?)O_8-^uDn5+; zJBloypf6YC<1cwnB+AYhXB5@dZ!S{8sLmeU+52Pv!QI!`+b8?MRll6A8QZnr~ zqN(5wMd=)nLmD?P2#g&wh?RmZ~z~l!4xi#9U=_)P*>;T+E@U(h{sx zT;LK!swH9a^>sIPauDSpxABq0A~PkEaOwaJ8VURhA91H+WSm~9W|Z()LK9LnO~G6& zaXKP?T8I<_cU%ra3KApi;6;re66k9#fuj%!({EZi4fE;;KJCmt%oCcVd4cl;{SuCh z=N#En+xhO;|C;B{Yfi6UmF0}V4c;{y^lk&@vW*pSJQU1Pt+oGt@5 zMysH?G6Gv6tj0O=cZJ0(c6u2d*&u$1k%Zn><*)(~O+fqmw)#6-6oeAPMApN(0+uKd zvewpOBkOWYK-M~p3EsG*Y>Z1_+l4(CeLod(_WxtK3f|pdN5ga}5E&H|@Cod=@jZ@} ze7jtlRd`BXREIvheM{u5WGP_8Pg6J>qy4fp#`hhAI6qNwGlP2!j?r{PrHdG(c|XLJ z|CU}FrV&jDOS9T@>$gj6Z-%#+faw6XBzO9UA=E{jF&u|8lzOY<1XI9C<@C>6nVGyt z94x!2k$qHih>2LLy)_G)#x^bo^2ApK+e3UNO!$He#^{m6^C;sIoZ5O@*9!SizL4hS-nW| z8(~FKNq!?qG2}#9U3M}vNmz&a$q)k!hAVi7aAPO(!hUWgP5k!eX9Xwydo5>O9QGC3 z0t!~BspOB^)h!*Xyjt#|v&p(FFPqB6=&a5X(3#3KI#a|+5{}ONYmnH55-XMiJfW5g zpq5UZ%oI3)@9@9z$L;PQjq9+j_6gTt#4neiB-kJk1%yM3R=L)7AD_t79A&Vz@id!; zay}EI>m*EU^#^_j3Q+tfEDyP18lUkpq+rGdDB%`CRIqxi{;^MUK6LaDU~tCfIjr*Z;V9tuy%u{zb5#}qd`$rCJ{tg@q-_38tc<4FBGU!V zl|8_ro9)|mRsBWjz*p5@qa46I1B``{ME`~U_d5c(bZ$yj|AoClmR^l~e4HD?>NHjZ zWJn3ng+l>e9?^>Dz03d!JDI0L_BoPSL>riGslqle*O&5WHb0Siy_6eWq`p!qej@cX zO7Rn^pR5!=_%A4hfo@(W=eBpgfZXma`X23w&saAnR)|r=#iC&NX{2gfOyDk|R4I=n zSW%r){7{`z{7{`z{7{`z{DkfjawaIHR|yuEJV}<(2shZ*?>6(r)4^nQi5TxCEHa$m z)^T*KwY<6&Ry@v&R7P0e(vCi6`*vatqAk>GI6p2rp)gGs6sBE2lKwT>R9B2E_F7(~ zT?|S>qQqLih__Lk5S*`7Z)SZG&xcdR39N`5;0sK`xkU08W8zS(9#H-dV>LvBhWvOs`0i(y(# z$$Frw$P*Pl2K5sr;$_ADPmkz=*R25n9yRF<~a5P(^_T^G!oA==S$xjB(^4F=6V^5aWT|0(X_^qTa(c^a?-cP z5l8Upt%gv8rltD292qBz2=LjFj?Y+A9?wi*SOq5zE&4N^T@4$G6}}fL01OFJ0Js_m zjS-~;f>~h$1whX#^^BiT0Z>XHH1gv>Xso-Sv#MaERB1Q1wj?jh0p+#Kl64WZ6l>hI zULKG|b?YIQrmrd}HYb4sW~<8|OTkuIb01vbzxn2NmJ1K9=FH47-z4$H1g1j$H4gBTyWbDh+!hP#pD) zj&QwkXN^+)go>k5PI2tQz5J7P{?b0tU+U1$AyHd?DD)4ywDqcj5`X&d^6(!oD9Mh} zxCQ%RKUg1hef+KPWAgf^*vCO9P+IoS=D8P)t@L{gjYBvOi^*jT_E(LK{!A}*i#-Y zT$fj=`TX)>;Pb0guF~1VRqXIUv6Wuvox0ABb)l%L!gbOHy;F(7=jIbsz*WZD+UfUb z#nYx8Cr=Z5(HJnrLf7<%_y_K|M6rLomZKftYA(}9Fff=Vc__x69m$h{mAA>);+^%R zi$0zyg;dTN6P^E`F}g|^(_3#MQvBfbt>~CA^U8p;1v{`Aq6R{`n{Gj6uGWdGi2t}O z1tA=54OkB>eg%sqXciPl9338@VyIB;M5yR$2QDmixNOc5m5BjF(>0|{W9O?JJKx-K zaUCb)QVj7v{xC{qh{rgHjA0&$r=umfCiD?>1xjdQE*PKg*C+cN39Gz>M9K=X5(a&cDyF@t^wViuhiASSv`#59dv`>%kmQ-+-JL_&ku zdxtp=O8N?)RJRTo=}#oird&O&B@@j8!^e+vNrzs5(h`xG6Q@|9bxU39JyyC10T_yW$!k@CsO>XU@RiS6 zf!BO7+_o3hBhaR@ZG>jEdHMix`D%KMfTTk^|tn@)le57a0_@cyJ^!OY62UxF;kY~ zu~g3if_rSk8pFnnr1#l%Nm&zDj<@aOBw!0!ewRfopBl|vMfAmtw!V6ieTG|>QMx>u zxw2EMr}te96l&B+G|eX~DO&iuuAE)9Nb`N$I>rlOlFTwdI&oE7+qe}P6D%UUIDTwF_Q%}xC@j>U)h3QVv&^5ZMYw=^ zKbuq*4cE6`_U@~rd~2As%3t^u*Q8pw)?ZL&LJJXit{rKm-2<9Vd5@KqAY@SVgkMK9 zgTIn}6;OM$g*F`LHMj7>`lkM~)|%fpGM;wp8-Mke<^OKsbi2^m5*u64F{MZSJ#JMD zT}1paeRD*Q0L9-p}GqU-6gp;Td(!Zlj%LoX94_-7MD*Z-1!PSwwe z{IvBLO>#4XlJ^R8FAwgK{?^rdjVLH+A0b#6R(vDBmm6&Pt>cH5qw8U0mrw^;68g2Qq$DaKkIR|Q_KP%TWW zz6wDytmGaXMuW$yNRMlD4+>qjXR(>Y)V$$(+_Y*=u6+(&VLNp+SkES=e=YSutql1` zlue6^+lyR9DWQozwvuU-m=Nqyu3b#|&c~`DqEso58u*Fa2_qjQ_aamSrTAe@Nhy9% z4V2;s)j+8_`jT@xD3*lVu}p%NxhKR{BH=F^A~1qIw~*ju!vlf3xMFFq*JXKGf{QWz zIV7|)HrK98%I@YWQ{67RE-|Af5bWDE4#H4Nh0}JsveS`kfLH&nBmXAgjQot?5QykX zvKFcdwIsmX{?}A$l~YI&9jej$ZEU6}_EY50ekW}0Y#Mw0KcG zwXnXN_(^vU$2bTo^jKM%2!#eP%qI2H1txuWNCbmQ@$N-3JCN&Eh3uoEqjPlzGV+#gz-}L z5T|_09^zJQ8)}rAthf9)<+}mK=NJX2VXL*h5w;}HO#sEv3l&B<*-|}$bTH|G8Ks;y z1wV8fp!5jCcaZH7i#MQWkGkPY>M@IPLa~q8>KmN+Fzyim$R!>PR;(y{nS1iI8QWv&*J=FU(3S+$YzpA_kuvDXXjf9b{yC@( zR=VEp;UXjRh+axnUg{Ebx=TE2OQyVf%+^pzus4oZF-dIv+jYJuWId@-?UPHJp-a6d8j5u^ zbQLF{drw@8^=WrM@4=h#JrlRw1|*UO?gq8m*SX6e2V$-&89g*eJ!Z=VdiJQPj!Llv z7rb?GmK99Li96g|8yV!Alz@6zm?cHx1q^AmyP>jGdOYyzNhlsw-ozK$+Ek|7DC!+w z1whyjo8y8E%~d$W)c&->T}Y92x68N{6BMRppS#OU?#01f3}a2?3VtTN#NP|prq~~} zoqQ9qS=DksiAwcPt_g-9b3?rbxRkKv8~+k?xlue#PF;_ydzM} z1u*M7F|RhpkN?~sUzXu%;G=4hcf)#>OSARffBYS};xd;B;~ELVuof{@jN~%w0mMV~ zfXr*cV;9<#a+p!dVOyzO55NhFU0*P8BSFgbo)?j^h}nypJNkhn8V{NuR|R@*R3vt6 zM5NM1L%c%z5hBH9>s;covU(EfU0&o}`q6*t=pdgXRu!Rqz}1|C0dA^i7ol1@(ANi9 zoLCS4d`&O6y4D!Aal2i&@GbI^QTkR%2FDj(R^pWoH zrZKk3%h&a6r=C4(N`XGe>e(;!j2R$@bi)o*xlY8o4TP~_nwQXurX+P1`t#kT>N|Jq zFUFaMd@ib_Vc1EQRKJt#{$h?&_p{TL2}G$d09}X5y_*)Ur~ZknNNiT(S$@F2K|N0G zvfG7x0<4qPxLbpj+l>^_sW!ChXM+tc{d{PY-SbD^7EQPgdam-$Sm)jUcc=*lwau-< z)h1OV0+Af5u_cO(wGIj<^_?Kx=+~|RPh(QI@lN5(%Z#akP7WNgqG*X@Z_trrZ}e+&x{=GnN8VNo+!iRTdI5_pJ4W8fVwBn14@|!d#`=CEcc-%@El_yIyF34 z6QvDpbpW$Ele!oAA20Hz7kP*Azl*;QY3dsOo)c_;89zY^2>FwG%bKdrvi7MkYm^9B zMDAZL2MvHqK}M2~7ups75w6TQ59zYJOuLUvqgqNr8rApgx}@y;TqQC`?TQr36}ai< zAY3E~iLNfj>77jO1O_qM#68BYP_SKD;kGM=ZLZQ!OSl@IgiU|MQ3CJ++`6*zx@f2)4OZfL_V?Ek=n|(B zt#jhb6H9N7r6(45*T(uNH}M}$AFEd(nIeyZrH=_df2cL=5z}0|P;CwStM#$JfL&_% z7`N2$33y~E0y2C89vO;&a82Wp;<3geHILZj%@EFsfRyzAl0({T0dLB2NR4^N(ddJK z^K~(+E)MyS#$FE&xit5zi$gBUJzJV9@A2F-W0uAcB`Ub`jBnbr_S~}-xo_9!p0($m zZOT0hnW=G5i~U zsuw@pX;%h@U71kr%7n_*CIk%~n~;lL0t#^nD8wb85SM^LTmlMl2`EGf5DkR{DJX=L zDG9+7i~&IknJ-8o^aUxTz95C#Ov)ejn8s(&1Qh+90$F3*u0azd6Ic^Ob)0LHp0Y_7r32A2 z;X}V)e+HrcOuzB>)C-UHHlnvdxG}yNwd3d0?bEg6R#aMIlRx5G+=CRtjKv-I{Zo&> zggef_|9Y6+H?*n1|KSlkAucvD3}l6?Z)fVmGm`k15f$f|y6e{%2=GkQV84((qI8HY zl5w9Mgnc>J?l9rn{}T%CTK{412(%jTm60T;~`14?jlx^2%XBhyp4puL|E# zR=Xj9c-eSj}=>=xTGkj z-q*STcF_zLc%@Jf&5M=72vC{#5x`YJ3wx%YQQ*ISD3dJwKm$R8 z$ns?d91_jMaH+(rjg0SITMkM18*dlAIOjU~W?CiKENY|a%Q3zjx-i9r4o(O8-(|%n z&oi@iiNVU|Ivo;4>o277%%818{G+U|LhpvasT6Rax7-4K600X^2Zad&{m% z$~w5p_Pfxout7cF->RlV*Z!70wT%Ze4c5fCTdAbK?=fHClogII@O>`f7Fpr6>X7T# zP_IOj-nV3ff_A>bv!EnS>CqUrU(VL%uu~YAa2~5z<1PL(^ec*sYR$v)6G6K50ujsw z5fzzT|#!O6rhac*R?E`hD2iq5I3qNrlNLbf}c%Te*niPw(cjD+-~ z&LJLQsetGFSC%8VvUBei3>kM76VoKxI;y(j6R*h-tewvs7oQCc)i2i~rG4u*CoLHP zS?u^e3sNTkKniF2-);{`LC&xo7hwCZ+Nn%-uN>S4X^09STyeT=7>tsdm=4aiQ*aob zVT2N%|(esf2_9(fb=9HYU|Os{`Z*~UG|vYJe{ zZlH=cs~lK!T=rYmlKnd#b*x!KALQw|)|j)i+36lmNIkCN&*eG({L?P}tl-^{;+sX1NS)yJQv-2xNg*!f_d^|pj);FFRoxi%!dc~Z~Wk2L!aY1zJ z+tI>5MgN;7@XxdR4}Kjz;T4?1)6dfYu+J}C&?d4vfV=$__CK8t=YmOczQ{HBZxF*< zyqa$MAr~CY=n>~%G5^C(o+NLe)tFbn3A?rYOV)3Z%rJS?8Fbzvd#u?<;v%DV?mtx& zJY^jVmFN>kvFT6!FTL@KO;c?YDbDv0*X#$hI#;^?hjmtTQSU{cyw9Rve0}etO+J&3 z08lS}m1**Yer}p92Pk7qb&~iC{A=EqtT9P*ASOk-;lTG)@Ub4ak89UfHug;~R41%WeTQEwg4wD~oS|uKaTfsXJOF^%K^eNWGTKt4 z)}|ijmvG}wFo>?ZK`>m9uq}DbNpf3ZnT~te4kBFnFPa|4wXggX zMB|io9)I)1cjuKbt?qJ}KH@^GJr@yH#Ob@|d$@G9vGrQ`%3M6t*Kvjln}AsJ-P3rL z#Kz3%uV1d&YLAN|Q8nH5nMlom#-^;%SQ9P)Juz_J>{J0KAQw;f&N*~v zVaK`TMNiAALZ3%&av18eM=srDkT@@zfjM@E#4v!$tD z&eF2gh}X_ni)w$-p|VE2Xm^p(AGOF(66Qb2zFpnkyG#D>Ne2HnkVnF@3KtWLwX4PJD&jw0ezHbqMuSL*q!*M7EY-7 zIjd%5>chfWlZmg<@7#lvUm?pjvb@4;r&O0JGb?~z> z$JOq$NpA(8s)+xkh+pet{&kEdgI=I`@ISs5f(a}qODM(6>h_f4^}w0 znJ=8mYfTqccw!I?nkw=fG_y?fU(R~CXpudi{+{pjhOr#r_F06_ghQO*?868jW>=#$ zK1Y1ksbPGejm#Q`#QA?%3O>b)#fJ>0Ia*j=Z%P#LLixMjm z6k<*BR@@Jq>>THeC53pZrKYHehp<4g^j6NPGpBP7HGQVK;u$Zq(LTGixVqw3Nsb4e z>J-A13T^EZPj5sAV}2fTl=d$qCrR#iJP_GSyxC=xnFKzlCd=_pD3FFjK!Xq%01?X; zu<=$Z0V+0a^9xvv&sz}-yUOmRxcvN9fMgNMcSV{gXv000slm*?x$#PcAx&=$)sP*> zu`l=PuWGjI31%LI`IQjSP+MGc?G@fL{jRtyebt&>6V_F&*-cB39_GU%3)&LHE^EDN zjbEMqjX&r=bDL_a)34{3cv(8W#*b%iBnZ=M-u)fWcvi~|9mAlFE1-e(?9!=?ua9W6 z4i{!`Xn-L8C_t;#<@H^?t(^}F{*X43z`a_8=lbP%&A6Jb;;olK0Jc{!a#=tCXj7cV z+(Fr^A%N8g&&_HEo>Z&7jJRdI^;#%lWAYV|PNgbL@zf|`yZ?nFjR?jIDMob&j@T~3 zJg!>Vz@Q8Vj)PBuE9^765fonu{|mpT8fWmgwNS9z6X?+2Q&i^t~m@1A4m-&xnI zfAdPTn)8db9u3e#XR^hteb@MPRqa7%E>F_h#IcvQ#@l^A`nY7DAzFROFJgRpQainP z1--b%yMG+)f$^Eud>?DtT{!PxP|UuLFK{6~IWzxK-dw*XmbskHTobQY^R>Aw$ASZ+`}w0yFWC)wc{9@ zAKiSz%sO#Rhn~aZCvMfWG;w3wn&+PLu6cv$^Eb0#=aCbC|COMi(}IHd?1rr!CBdYn zJ1gV{3c0}wxxotAYgX)fApXAF89#@F{JrU!RH*%7Xx@+@eAS12@BLE9YNb-DZ^Jy0 z)~NTR>(+tZPFOytHE5(A7H#@N>iRYX!yazitl#w(M^Uii8FVnDQLW=kKDBjxlTRC+ ze2VZmsq9vERUA9(}K;1;A#^jbPeUBssTmiP6@Jm5PXv2N1@!I9Kvk;Z_m zeIh5>_d~oE38D5?J71|cYt);ylF!Ec>9+)|+~au{~|+no=Q;u7C8tG$&oL$9RE#fk z?DrR(Q}E;$Dc7GHG2S#R`-Xe7V;XP1z#IGCzs_EJ&1>~G$J2uzgo8PD2I{&9T1J^l zhg&ndpOpOygIzu1wcJZF+J|H3$vZ6iyWcew_De?Rm*0NJ?bDK#8iOMVfqvi$tuAVz z#GtN?Ob;^lpVYi1S&uYGe6Ps-@>_0iyd_x-lKM@ZmN zLz1sYThHDaZ@suU-g;?doVRjkLF1-q>zCa)lmvkQiy2iXDySNSh^Ezjkkr0*wAb`^ zfWR3*-yq=1D}*+Ly2tcS{I-K8ATkAE>e04kYD$Ua1xVXUe@@yO@#BAlz%mm)4&^_l zwu8O7d8%ReCuH_FhUJ?`MQs($(ZO%z%ZgS{jevDVF^X?l7NRmN?zo#Ak&NuvFeO-6KWQV`aw+0~1t@ST9 zkj6waW2YHNb6J2rFa!iWIujs|OWq*wWc6fWTk?whF1yIk-_;lA?uxFvL>5of3#|F^ z^d$_+r~$(I&%u&EcCaRb&9<7|)zS1(*_+BlZTWq9`Cd=X=Ls}=)0COQ-}wkt#B81B zwTvd!MXAkwxn=(RsIPqW!x9-J*?yJ}vo3)7*J=5T*EU$1+G`}`Z3AHc0=>vAvVIBa zJ)rL17sklzQ=;;!fc@sBLiM){iz0V@BYe_(!*y9+b~=|_Pct1ZGSrh;Qg#-v*p)%~ zy#yn4G9)XY{srZGEdETQRye8eLc!UaqU$cUPSN~4IhvkFr~IT2>d-OA4ig+#ZC6V(__zR!C?II@K6mG>wf2#Kb^IY*Vq{Opr{+0d_6XpyC-!wYQdSzqxzMI4S)+e;S|n(yF%v zTdq}48&QB~JKT(`hNGLHW@}6~lytRffxZk!Me^?a2Hn1|2Awa+)S!E4&`-Xr25Cs1 zXbs|7wDnvXlsA52P3@n$G1SjK#aHlP|2y{KS#AJ*rNg2P)mX34>%=z-iQB)Es99Z9 zAd*P`x-I)&DfC8kVX=I#o@R?hD(N$Do4xp*vAW6=16CK!XLV!NUaYC&;$W(HbD98Rs+d>oUuWR?hk_SLgMzzq^B?zli1;SpcbiK72J_!^vA6@ye_^9E z|NV1_9MSi67#8&?EdNPZ}NR$1+zE!`SUj6RSg=-B-lL>dcRpf;AnmR_jW&;C(vo(PH;0 zBugYI&NaJ)yt~M&#eaa&iml$k3eD*~=?0)>w*eT-v{sUb9zc` z01v6gYjL(aMq#ng`@I^*Xs2QSH5mxQhK&L;*RX%g?7v|P^jXh_9o~Dxo=|`0 z8kSQM_9rL=4f_`X-qo@33AQO%ak8^rTA)f_}2U?iC70H#Zm*Uk3Y3@LT>tP#l4Mr1(s?^evM2 z?|uu1l5j)>9q+m;GkWd(9JtGEfCLmF?JDpJQ%XEUM`<}CWITbVoM89z4Y}rsrMu=# z2bR6XpS>qW)@QbqX!>ZlBSCEcCrNAiNFZ$gn6%&w)WQt4cAFNH^FFtRb;Ysjc+|l$ z`MSj!-POT9Y8U$-oI;ppo-f__g4SLw|mxK zLr%iAAC&rNj`!dS_=M|@P(E1&=EF|;DQRVEd5lD^bg!kA+wQ&d`Sss_9}@J={*?8p zlTuCsLs;4V?XYil-_~2-)MKo5>YUed4Qay=r%p^DjY)H=*D{V&*qWlA+T1_UYZ^e- zdzn8v?CFN3RMX~`(Re?R|DtFqk2LA%>QB_Gzd+H;3H`E9do6>ksz4w1TKX6`Id#Ts zc~^D807Fel;4o_U#{f;s4*U0e`W`lD`nK01`7=+u2ZW5snl_f(1|3#vGSKR7A6867OOy!8SjIf^$Sr^XejcA`bLQFxe(UB{zRo~%R z*s8^(X%z##nN&!;*w21Rb9LKWcb#DX1RC!5z8ONWq)X1oSEOvF|J;hy%i=1>JF^kt zZo14y=XTenzEc|@1zpNBkfckUajTFruehz3u3maLEnF#u|V>|DnY!N_)<+DaoWo|35gP_HMlbWDGi}5wNjquD3lKh zqn`&4;@_rJK0sc>d+h&vzOHT(PL94s zII-t>;K&*(d!9K`n?0{V^ELLo%-ougl_clpMtJfT4KEo(ShpC}mi)VT#tFle(Mt?V z={5B^J4AA5S2-Bia^;L1=PhaPC}DN7;|Tp6rk_LjY3u0AZ#?tBQd+|id5NpT>QGK( zUScbzQ={soq?uxrSKYAvRi{eYESj=aqS9yWP5Ef2p!MvlQ;t!|6tavZ6^GJNlh^iP z3i-&HLO%REeQKtV2kpbq6k_We*?*wl!Zv|I>8T^FJA^n1)D1mQ*x1#ksa=dVP~^nK z)e-cd#PWR_gq$L0EZdzf8d$e{-FjQQHBa?UR3+1b>0&i`h`RQzyaU9Nn@_@*A|2S{aw+`n+ z?86Y}9V5C;1hnsfGsB&S0r1L1!<5?_XHH4jc~F=0D8+G7@F%aOO7F!C-1@@=`ZHt& zcE~KI>zr0`z@-O;BR4Dl_bAoLZ{b<9hOpqQ*+Yl{Ry68;>eq3zXLXl67hb8xAEt!} zjsHx@rjMTHCJKw>jd>qqm*Bro9r71|7_N>4>la#b*fo$M4m5kcdxgMq;_&nwP%Tp( zP+i?3k@k}T@Gcu4ZhhqYdHmIodevV7aSo{$8l1f$H1F`JHA2E*BQz@5DioeCH3z!E{alQD`^ zf4fmgnp>NFz~QKY$scxW&YqIujD$k%siwsLOTFK4;+& z5U)i@%)!Em0lLlOqrF)1se-BNE`tG~O;gt&(;+r${#Bi`4>lTD@z3i5|3&*S$3{&b ztzoip+#3`1c;fGOVMBws+@3_D|J}tq-}71?fO2tjcQfZ7WnejT{-T8;f`9Z? zK{c<~&UJE23tv~Cb#=N_EQwwRUP?9MzqL3Z{_1=>tn4lhw^j>9@P~N;f7o+>2++|1 zK)r~>8KfM=Zf&Uvdk1xAT=$MS)^44Q`&aPbe^ynw1Jv^;wLBi&gXujHSEJn2ahkP9 zOY7rr5P}Fr6qwP`wLLk`HC z*3ei#?WTk)zarwbYzBO_@0M9!%P&ZCz9ts9r%2@qMp}mG-bQDi_`D6xlRwTCTnCar z?i`=W5z(6jm2{m~)N4b()=v%X;#;)wdLCIHV)?n8G;N&fdFx(DJMMge7Uof1W6S{zgK}^fu$%3z#Sm?Ei8}fFJq4X2RGajxWK z>OIS#Lz1~q_Cfy#^DU}m97oGq?NPI*dEgvSjrCeOC?`*z`HgP7CX?g= z?UA2fLb~SS6ayv@D>kOW@lwua*}WV$;_?&1&*9^E`eGJij2{MsCyUiD64D#Kfwf}Kqn|DDrnSELlp%@ zB?@hVL1thEB4S0Mr+6(^)BqVoKnNsU#&IyUXsLQmsr6KPYFlbKiefb&3gV4R529E_ zTkAWGZKL)Gf|}pwyY~A|CLt*2@;}e>&+}y7+rF&5_F8MNz4qE`KQ{B^y7#{*Up$io zQ3pPT$KFSr(z`G8*x7Y|{=9tg*}l`X@8_2aj&yVWf0@t@Tt~97ChOeQOaTni+(*Ir38JCg#m+zSsHu?Oy2kon1ObjI4w&_2{4_t zE--)U7W&0n_L3*pW^NKlt>%lbF7(XSLg|8_&;f~~th|cV;*E-JyDAS`XR%9MEr(Le zym#K3l~-&0HSbfqUGOQK7gSEG4``r?r581T7zM-<^QrL|g0OVqeaekRS*w;sXi6_d z8dT3-@?JXICj3-1@)FMpW^Y7M(9M8y#@{e@2AS zv8_6fdV)-OduR^dU3z=KcQ4usSv!ZRfbTvK-$mwaC_&)Y4f$s)!PxH{%O9{`=4Nvi zr(SLJ(nKY?p>j*HjCtC?GclgN@{8#1ozb=XzFATCN1c~^Vcn3?R$9+^YQh$L$aYx& zd2411u0vw!o@dM`V@YA`7Hw;Jug9RgCny!sw}ChT-aSn_i~(xtk4U;f&}qr0(eEDU zw_~3?!GejSaN22W&|wfaTY`OIb<}`<;a%7l)`GPB(jw_)%Sl)_D@WT&fH;%_;LkNLx%FGE3}*|W+DR5j#KEV2cOE9(_#P&@W6joN(Nl)OSgK%m zbVGTO0F5TAkbcJthMG_`RqU;rWoU|WVpcRsJN879A4z}7yyyEbW+#i8ZM^Zqb9MYk zIra-~yrcBfT|Zs*bEtkg@dNz(=5YUsem>*}H{$(w1$mEOmFwdjNyYrY72q$kb8B0N z?_B3^?&Tu1G3!75MwhJrwBZZXZWP|wQM1{ut1Rvq!7^s+-3oh0EOIcSjga*>*bB~3 z;;QYA&33JKewTPW@8UUiX)&s6Jz3O$^Y-34Z0^9&qStwvxA&RkPYz3*fv0mfVy7DY z>EMwCGV|jjPSBi7N`?*C$xg{(1OA%%2lM+N|AN1hpM1}e&$7I&=TsD*RktM^g80qf z&Q$=T!%r1Ku|j5ry71)YPp<}9DTRwHrKA6yrwF$}GR7Hp@8ed!nUtJ!l6t`MNPk$y z8}=3{IJJrfPV4_9TrzL(yq~NYh4DY#v&I3Kz?_zz#ra&@5=ZUd_CnHXw_QV&9hK)>V3%zi#S<{k#ZR4+=jGGTl=T#`THc7VcMVZs zT?W+ZGVPjV)7jKHfD?NrrYcv_->0GUjhfTJ9xLtBD!;c!8FMYxyA*pO*s7&&N*89% zI$wPD;7N{g>}~78jDR+vCG(t>M0{Vny5Ptf^UEp1AJ5%@VPn2V_7dHd=uQg36k8)2 zq&qg?yxZ~EO==f+SE>CY1P1AjENqi{i}kN;@1*;Td2?`{chgB~jf02Yj))uuBilPg zt*$M^)?oAX3r;?9s^(p1OS2-Em`jnmluNim{>IDJhU#8m$cUvnjZXK7j+Du9WOBl0 zhL5)|sD)6E9G&XTj?~w^DG9%$N0Ojmvj|?u)u!<0BM|_gswJhW0`1X9)IlBrCPY;a z5|2d;#HHaXu1$x=(-*PZcoT;t&bcoRbEHoR-!cT4OA?*qsq&(x&QkL5wtB6ic19^{ zC7(bD@zf*^fn+}SdFQzm4O|Kn$5zZ6bk+4W*Cl>Ux`L^R6`5yk`d$g*NS0W}_p7hF z{+7gD*H_@$GxfT}!pu)Bg}xu2I3@bK>u;Dkt)}1P8{%c9p#|50Po*rn88gZ_9x~HN zP13HR1yLTe$**g$^yl(U$!lt^!-@7ZWf)2Z&8hAKS!( zUG|)}F}0fx;r4i+A-l0_BUf>}`cV6g7SrddT#49|49x|Q-}^q0Z#f|s@*sK80#{7X zl4x>$RAb7Et&MSK7`8U*j4{yq2hGs>2Q=#A^K0RU`is$hMyF;YxsrbT$yrnV*3CjZ z@64P+0&57c#?zC-`LX09e)IxgohZxD)a2hJ>NI#Xea}GP4kzQFJs1DG#=my$*{o*M zd=r2$*K&Jy0#Jw)PJ^m7@VEnR)yKgwKRP}8CQGt|m!p!`ws@69OqhK!cQmnBO{_U) zRO;H6X78aXY8J~K*B}jC*&~u;TbdhZcCR+s697=Nk;{KecOUV#rXVhslq&15N?JC?%GOQoD=yHp zS}Gvaq3+oMlhtXwJ7G3&k$&d$WBa!=k3o~}?h&c(H}K&rvIfC@*_;YRDo;*#1x3qw0-=*S$;m>2P*tDE4}c-4C&>Ncxz~ zJcdHoZer#?I{e-N0)qX?0xKdsRVhAg)8Qg5qLIXsjo8ZOd>a#P|LFA2CN*?OWl9hE%k@Lh!cjxW-gI9qU7p{x z)a@?zhF|)6OXh0O;o|Q!y3My;0wS3Afg5q^O?9Hb(O@iUjs?q+?DQ$a1?Y*SiX*A& zqRemX1MN~*N2E}$(3>;{N2!E}EmQi6xsixNCDa{1sD!$+uaa)n=y&h%T5qLAnn0YQ zEG7_5i!^~aMOjQBP8sCgO&^F|tx{A!k!B>4zt&Ia;BF^ zCbMaVJ_gYqMnn!Mq#{4PQ~L6ewK8ZxuKs(&5| zuV#wty6APhXpK+jebA_}ltFxlUH$XhWFxr*8;i8DX8*%-Kj9uAl3}G|`$!%V&e=z5 zZp;!N^yAx47VN_qBKwC9-;~LuNzbAXm9AqB0Hv84A}JU=TI^L?EKqmShYeDe4!3+D z^GJu|=UP|f{D@!VGJ7VDFiGjS)*z->;Rv)Jy{_)G9Va z+}hP5iaaeAX(Ct?A)%~lM`0XzBx5zEu|up7 zM?aDDDAqqV`G?=uz1u62zm9hO(h7V_WnTRsPG57m0t1^<$0ht%3Rv0`)Uw)t7QaXo z===2zgcJ$Y|DJY8=qO3{aJb~ql9=hQGfo$}o&MVGdac`;7g8)a20COCCw!$M<7(?nlYUqB z2dRVVhP>Q2=&Dlh>T7e^veek}2cm&=;qcY4<8W;{wc+c4t-%IJU@_Za++8JoFBzwLk>1I}{% zmcx#>{LHcAX~kd7jy@YAR*bFGW^c;4~6DRl`C^ph} zW5%6i5Hl))m{A4A;0c(K9&S2KJ=~MYWT}&Xv#!qN$kH$2$YB9TPWo3k^5jr^j%=`^ z9Y3BzsTM5wzsipz9el=*&i>2V3gYwtJlOzK%3>c{Fw-&RY$B2xPkzsy|Ic``KUn^6 z@MP|2>Gl7p4NsQ1>3`X&>MVPmVK6rR?>wlSHYIQ`1x0`W#$x>SL9u7 zWwm3=4o1r-{PbsA`u1$udkAcKK6SQ^k!uMYYiv1JIoq)1-@el!TTU|g9a~P+{eOii z-+0h5<=tHm%#^{{7>s6LIz}d~KryBCmkVEM%a;aU4qqDVIeb|y_;dJD-^Gr4FLqRZ z*wG&wCxlx&_rrh6<-{)=8?&7F)=%KXA9ZQZiJe`kHZtB%ssAlbTzfL0H3UQBSS#j0 zY)HVX9T?>;B9j{{IrrS;OQh_>Q2IoZRV>`Gm{E7uVM5Rav2;OnL~6o@B4SEzC?1vS zu|XruLi2w`8{L>EGzHPTi5x%?6}2-5=hYMtM6x`lAd;*Auzq{dJ|w-rlHucBR$`Nz zjQPqap|*cMLt2U`~l?gWF-y>yi_H6kp6pOt>bM6 zZBwskYTy>{%n7aF;m#IKPQ$1?cuRow1NBqp6!YoZIzGTL{UHmMzAVk-SAh3n7Sle~G0BPhI zDs6?$SB9V+ff3ZGb}K8(525rgsU}A3w^-Q=p*jmm0I6C*sUtKF?LTTInT>xyM{!14~>jaDGqX!ffZZdvr1}59zdGc$*5C&t0t2&>J;DV*6TQ8Q-d3;Sna%gv?^#> zY*o;*Ox0r7R8C*!6h&L&b6ltPcuS-x(=P@~-G)d&R2Gi4ZQG*6mW5=%FSJ; z!?PG6X)$XxkYR68NvOWmY)6B)d%wIwJZP)tnIrAxl}5Rm#1LY3&S{Z(`|?`y^5z_G z>*=p!XqfHwVoP~DRo~2XBZ{?t{(&2mB{d>to9CR)bX*0TtgJqG*0!x|lishCpl_%4 zhYXpWk0=+tDZM6eHXotumh-GBiTAfZxXPN9AbBO4x~4kkA5SCwiOx&o+KBUZ6?$dY))?J{6v%_o=I~%|2v=kE=)16|8oz z_1YB7%J*tYincu0%0Z5EsPktiU#iQ>PPuX__xTN|C}bk=B}kOc(y4*ck5K zLnN2{w;F+vU!x;%{`50+gCy^jj5%PN~TU{L*uYdwVDX{J2p)p8PDn;7@ZZCB&s7s|MUW#?WV7&-l|s+(k~xn- z-tX-pYfw;V!Q&|FuKr}VO?H^)0$+YvMDNF@}cM~Q$njC;uTf*Dv_}PxZ zR5x&LBvtScEk_0*2#Q%E8TajHy~@jd|Go>kY48$dte6zTA^x&X_9Fkg1_laeKaR5Z z(6=9Z#vIOfQ_NDXenkvLxa!zUCnoQ-eZ&$|yGSqnzJ%`*w;m`Ru(hFyC9$PW8xv3Z zDyMpzFqpY0 zju93^7fe=y^elD`e;S(Kf|(koK9bPF&;f`ceb#qFz&eYkF$MTA@KF)c=MLy{exCQz z7fug#t#=C$^4ZYoa{>H*nY72@far=88|}L}mhQSW(sxsI?K_9~3)Gyx^ED2EizL60 zJ3+ee<-@6CQlqP5BalVXJ+_*@s}j;Zh^jVbwfNp)rX%lgsXYFwm+qt`naWem=@?6` zH){!bb0mYX%@L@B6Lkhsd|oBk&^wD#sW+8$Uw@;grH1PYE%yb^DL#J5qt<2q!A}WuMJte#S^BU@q9Ha@q)X2yA2VVf@Se3t{Nb<|c-yN5krvgLIEWJc%OYcy>Xc6@?` zUPVgY-{6mIKk(8p2!u-OO*w~|7#w0Rg8~AgOBde#W2_V1e&ps^8>!^^@H#L2Y1bV{VtDU`Y<>T@xB>#X_wi&GSqEZC5xDEl)_zaE zXqEuq?P(Wf3->z!NZBQiG|UJwY=r-WPPSszgm}8g06973DQ(#{4bRkP83NaQ=8Gy& zDmZG(t2FM}^f?r`jrBPRL-*a_R6Yt@O<}m0*&J+x1~gXy({L-uxl|!Nr^nc1(-)ti zw{${BWbGH6&B4~7-bd4=-?2L0j7$k(2}=#6H9k{k0p*++2ILRb;rmZ^hp(w*e+~%+-bO9sb1&0 zOdY1U^mP7medGMqXUyY%*(VM+O2KKcth$(dRU&L@{cvjB;E4oQ=zHDsW_gqnp;>u$ z(x%MXY_gywv}C6e(h*9Otq#e*%%1ULuEJrKNYJGEl%A55$U0895&CT}yr-RPk z()pH9b2H-bk|73nvp^i7QlR(u#BMlDyKUhdpquO~acQ`*Y zB)R$7a+S#Z3_8b9NdZllY5;W@z-Fx?u_UeZD|Tqj&a$rh-MQ3%zoE}hq|HF?WF}=5 z7n4;ptP#nY4f1c@zzoalR;y8?5Up3XSI?UfF}+;p`DFesOI&uY@;fC}{D@B8r9mQj z9^%6kXtMq&1?7tn1H6cwc2Rer$co5Cu#of-Lx<#Lx~rP>ck)?3eQR1DGh==j%p&^c zqob|=2UL-KMFy61kDdH)k!Dsm7#x5q$D`H&4dRZ8p-A(mUH% zF)SP4I(qZ72jHgNCN&7FgB^0x4?4DwxdyOM>`@c5kLO4D^EDT zo3&M$Lz8B06XlUMN&ZgN3=5=@{1~5g^~=s#a&O%H?E$Lw=Wh|!I8n!r*PJS^8g0co zf6cj|;zjSSkA&1po#la>p6sQ>@kz)zu$oktJaKlOH~B6GVEmUv<4LAu<;4_DH##?@ zUUftMtxGKu2mu1TO<&{uvy0UX9x%J%sHAfvB6930z{omQPKJ2L@tHGz(88N_cFzek zFlrvx{IG{QfY1`Z=p8Gl7?K&RaYod^}A*>g(t! zQ7e|QwAXIV|taHYC=x|}-P`xd0>gF9q(RS~Uph+l5u=)KO z_@<%V)Lj@a@#dZG2mo9L({^E{BqM8P(8sQSkIv~|`j4qEF1X;SgqsqFFdPbX)1MK5 z3r8M~=*lrX8ikKpO5>KMx3-wVt#(;IaRZvAUcYu&wlV!_OtjK91}_SFRMY|?pugi1 z+S&P?P$UNRiw_a zS%tpqpaDN+>QSZiHVw_OqRh8SQuq0FeT}+6e~tHClB#km5%775qt;x>1)#3@)rDv$ z*uOG&+6y=ABH!F>h!p3O!cu!rJdD&xcYAc0J1sgGof?&q@!DFEnm5rJ^&{2eEpj<( z{Tv&WQWHU|s_?cUoG-1Nu#vQ@)=u1IitfF7gL8$Pq13f5^_pK{Q`&w9WVfNbM8U44 zoT|=fI%NZ5y625sE~NY_j6qII#o4igkk(Fm3!95oGNm-wm0d-4b!XO^KE8q%(uFnf z%5kx#GT9@HPovzd`QWBEItP%og|RwRY^*#O<>4DRKI*1asUg@3bN13+jpT=w$>-zA zjTKLv&L_jax8_;%hZIF2Hs`JPZ$#E|jP%Bz=1U0)iOfxmn{9|x_N!`K>>PK z`ybRgPIZk_ndOwpLwhXoY9^v>X*fa)MJ`p=XqR59dW3xXE)1B>(5?@JOYQnlxWAvi zN-&dtoLyO>vFk&&F$JTNm_DEDd|kbdey+itw*_$Ed;Y@=J?zi};4bEY#hJ|6-^i<2 zgO%ove=eGRXL5KI@LO+#09y z@AC7npab^LuP!q(;<`*-A;RaXSy-gdbybyJSzY6*^eZf#KT9M1YCru%Km8;>eYKyy z(NDk8uFjgJ@@M$zYyI?#{q*W>ec$0ftHbrYN6%109xcL>`y37G6k1vz&KGIPz9~3p zv1p>=NfCo4Q&4VyuEvV8Demv%FG659fk^>~!4+gfGCL?k#LQKti>;CV79TYAK|D7E zi3jX_0_BVNAA-;?z`IPN2jKiyqz}MbJxrq|yFhk-|GCJ2R=q+-v7Uizmm05hh&S=w zAiF*gF6XLrs$KlH*{=AG`{{f6=@nK%onGpv_x$wDe)>IJDYltvDW$&;#SR`-+b+8@ zc==HE;=5`qu`8we>8t$O#`(2P^lKaBr!V)@NBs1Y{O?u%bG83G&VSaanrhud|9KbB zg2%Hf&W`@~NqiSP)pmU#Ji|}F$4{RpR;KkuK8e-(=@%-QItvZqkY(s+Kh;8AEdwe z`(rML#{9uiI!x_q9nhIq^BsY@kvo*0UwP=TH_Vrg8*EB-mNb0MC*rq1$>ylup`+hJ z-4DKeUqiMKEOjB0`q3_XoDeRx{Xv(r$vJmRN(o-L6Qg~bS(WhpabhPvj{yv`jH~h) z4D@rcwKy=U)SEBG+I*DaUy9 z{Pe|{xL%~bUt*WvlyWg^Q?<6$=(Obf0Xdeg42$_?QE@^*%NtGz=&nTKfT7r5@+j9` zx!y4pcdxF}-9+6@B+$!J%F9dqvu(W+W>yF#C@|%kBt_b`^vQTGGJ~}2cMF+*dKu^d zbYtbzZ^{LF7laU-)?QKjwCC!ouLQkzcKDx;O>Eo`9!6;k;PXI>xBSk88p_ zGh-4*>RMQioda0TDxVljMJ81y_awJfCSR{izE+w1vv))iMW}9l3Fe8@vM@7$?i~Pq z37BrnJUmIi9F$!jUCcn?vyiibSyLjZm1;^uB(>TaQMP?fuh7D8kyfUsQR#w3tOXtp zz2h(Z_o9nam5YRq!}vdPa99{b-n5f_1rp(S`d-NGaqf_BCjQ-*aT59@K)D8}xM2PTbD;GZy{xQib z5m3s;{=Z{PQ~>;d#>Msa(TIf?)Z|hRtKV63jS4Crj{W1b7Ea2w(u9qj`gl$}{T=)i z-VV(_0+^z#?uF*(bH{5Up`ru`!fdpl{CNH!o5B{iWM}Y|r>5@vy%K0uqBY78)7S1h zx#nxN`wj~&(1O3UPwTf!Ug0U0zLMRQ%hZu`j)|&}YL7EW0sGV%cDcK< zGCv|E`T|b!lpIU$iY51XOMYZi#YN}4siMhnU@#d@L?8lYu3-fVGRMYGE@$y$;MyLr1FPIU-x2u?Y={6PGHx&^@_gv^ijL7$erQL?)SP+TSE1BsPb!G zkEO@w!%36kWjjK5j^|zalKjXuTcc&0L-WT2Np^qr8=?6Z^UV16h#*TvCPw{AFR&UrTWRx-{8Rq!PN)? z|CRK{ADn-THUNy4hRQ6DrV0kyfmLQ=X1Vn|8fHYC+(2#-qe>I{t^CZt1GE+s^(Ek~ zro$jcN1r;CynZ|1D$-G%4If(cj2=Rdz2Lq_%Ql4;u9Zf%_ML)gYHT+eghEX5(NwG( z_A)0Wj^!Y@0e+%s0i*)-D-R{fZ zYVjMN5iwNMetK$X!J~ddtO=h=3C(RnQEn5YuLY%M>A~lkV;xXO9-sj#Cs+yb{b?}{$y?lt|uQ1GV#9irgxpC1SX=X@*Mhmy4e@Z@TaCO?&C zZY|kPj5zvO5**5`=bb1#uj~oE38ghmyzRCsi;MwupDzlpiNfCYLy~a_tfJW+u{OKcvfEMf@ zvVpOQHP5PY?-rJ1f>-h6$@mbkRzI;^7KL3Dfp&WV|1*pAQ=%WK!!yhEQ-vKy!&biB zUW>%jPLozxJBx}qEvrdSE6JU!s$e|}0XAy*&%6BRW<3MIO0JR*LMNt)FEMbsxslPl zmF1i!v=XHY9GyIMqJ+-qVf5G#^*>td51r_$xz zdOtf0r^cV~!}_Ie@72%u^>e3w7U^d`Kgg$9x}UC}Df*eLpYQVHbZ*vfidpXH;SID6 zq8LrJ!c?5%Ri=WKS@hRy!#kXDG#}3MmDlA$Zp!pd)Nv!1)XGM^EZa2a%+SKkfF4N? zj-tOlE!`DQ0j|+5m8l+2r)EDbm6J|*>@f7du22q2XXAhtobD^j8r14g`Ud@K{!;PD zTJ+B=RUU*WDO!oOcwCl6@UO+$mDel@O&FGre1UAtzxCEgs@wOzJ6m#oGYiC_g%_v* z#V$>C8^QZXs(=-O35OTCF`De&kqySzUC;E#WHp8wm+6`=oOLsN-OcWudqs9k9zO=Y zj)f;=`ald7wR=uY%%GCLUhgVL+EM#&MJKNIm-x^@?f2YewJ+({VeOxDu33k*Yy7#y zM60xFD%&&%(fUnQm+l%(^;nXME!j`BzRsF)Xns#6x@Hq@BB4dH%Oid#X0Z{G1bi#9 z8=sUfP`*BlqzexBK3rlj{^g7gVZ5Ewi8_SQD+5AdD3Z3=CT=YJau&3N*D8q0WR_N$ zU(OKQ)zU^SgfHe=$;)w-$-!Z$w?JzL4Al^Bbl$U)d8``5l7EaPGmgRB3W8VlFl+|# zNJNQ}Di}UQZp@mN^T@<*)ERI`R6mvc*!tszdOA-(1NiZ0s+~jrq^}{P___5m6w~@$#e>YUqj;EytHnHy4pmFMH(?~`B8th!& zr^1aS(Q@u^$aK`911N8sw{YH;mQ-=7x}Xw2DkezGIv5>Em^n}F^<_zkeeU+-a9Qa7d+5stEt0%L8S943`as$y zv2q?&KCc_AIawEIE6RWkV32zmO`#1A-~iA_(gC1->}&sAfVrr1Bt3pJ`(Ld1)7_ds z_!At_ThUmB0$E%p21N%&F&@d;uU)uR5Y(M?12*7QoS7$DK)7C{$Hy2{dn$0x_G{ztNA^&ZG#^=A!D zMFHtVQ%|T9hb7m=%3hlu=21ODgd$>Ky;Cr>r7~2K+?@Ql5|5L4>zC0UEfDA7Ul4GO z_)|;lth{Uaew}T*gmJ-EafCkWorzn)ggXY@nt^Jo4vH?QW<=WAz(=@yR-55ub0Qmf%s zD%Emc%HlOi@J@`SmfMHaiaor~jz8LevqZkgp@pXaUo5qvna`us;cJJdX1~`X<_5{p zsj=^27@6>1(eTu@?-dU-KW`P&kXRy<@kZ`tWDwdalh;aC7Ivx~AphCpZqocI*m4uW zZ+23K&h`CfNsr&`YbQ$_xnj(37JQ0y#c!fx=L*Ok3nf28cxmKL^C-OuNNNit<=v_H zJ8s*B(!|o?@v(HjC5H?lUfkq&i5E9HJmF&Q@PpdriO9N-N=<&Z*{cBr+q`+Bg8aSP ztipFufZ}i@UtzC;i2Y(o5ypKwB=ZA|V&GIdA4oF_8Esh~OIoRT3cw$k-qcgSGt-j`IXl;c z`8_pps-^Cpn>zCmMn_UM*(Fqes8)VvhcC-doM|Pirx%`YP^ojn57+N(!mV)Pr23ue zvMM9JPMw-M$wi@%W|{utUHI#~yurAO2kyj%l+Q%gC{tf{^C^Pkf* zk(HCRnx6zla2z!~GU~}u_-1L7>xVe*^{U*5<2KD}2s{)+9B-w^T zz@1^1g0CG8u&E&87kA%NpL{~lKlJa1M<8( zz9)jT&`i$Hyq5IN5$2UYi!vFmoSnVt2SN3oUxpHw89E0P~pBtNQ1e(b&XFS5fYUmwtd)o=BR){d!t z(u7gXRh;+mU^P^9eZ}tec||oN0?=yYe#~5KxiG*`GEu`FA`0smi$i>E2YYAx*Sm*6BPm-{adM#-nGlAR)N^K z?`pc{vX|T_w2QP>FmBj>t-x3fh%rs5RMhD7;A;^PEktdODeUBr5W;zhLa^S{V??Tw z*psCMzVvq>@D{JjmS$RJ=uUoY{XqQ8XmU?1`F=xY@ZOddGxBJ83aMA6bYrzu?lJ-L zEk@bO@Z~nvj`MzXst;aPep5lH{w1|gfq4Fnn^aZtyuJ55{k5KnWAR)6eam2YbhA4J z)X~6CN#w`59z}`~Us#I76okdt{KR3>pcsF~c5=ca9I2bti&4h%HXUY{`mHrrDOn&g z09S)geBRzgFV?)nVF>A-u{;G3FIU}(quZBk4lzx~y9&DGl;p~xYbj3SnJ9f1;8w7N z?b8)Y9*@{&NKnB13i5hRu)uoZdVf3TIZtcIX;f{jMW3V9h@LQ0U-b1_(9 z5@Po6IW%=0uuc$7Z3HL@s0LlLWYt8t=YXs(nkWSa{o#cj(6bF2@Mch@k(bp~w#EGX{sNi3H9!l>)-)Sr11|MS|_ zQz0&5qeh6(kldYoi=esQgDfzZhwa{`ygiT6a9Rs zpAYo&K0mGVZ*-IH-l|UijKb#M0;Ie3PiEgIUopRUD6D;XPDT2CQC3BgA}CDP+SNC7 z@m$3-HC`km6j2hN+Bug{?~SaVx$(djFbKyxr_|9$XrY#|8K@f#v1g1ywRyyr)fkY& zVLRXTPqMo#=DU2_rMAmKcc{x>QTrLA_0B^?gP(N{)xW^F&E3faXfE5aR@$MUz)6E8Gf69#xNp}|viFaN8Ah=LtfC`CFf*veDQ@`#c1k}|y9TtF$+#l9 zqayiwMe>b`n!lok1{BwmW(70Qs?<+^2QZJiFn-6{oX>#%yZ zhh%siNzE$J5Kzl~EM34Bk&)=wZd>egWEfKOzMvzS;Mr8Q)RqOK{Sfz|S?>}P^3TK0zI z&MJeYsS>$UDJs>JB|DZmFtaCiY#A^8_c_-}myrFkSY_P+R>`8?c%;f(8o1t){`&{% z7)KK?`7MOU4sS{?$rKBjOrUmVfUTG8`cq}{9S!lSys2Qo z3)eT)zo3~e_{n@EfM5yHi&%LgaC6j8xMXztj6>q+vAyDDnQ0em8eK~gwZSnsra%;n z7h=pr)8~G0Ipp&2+8xY2!JmvemY6z~*fg0J2s;o z5qL_w^%M;#cH%ltA36e2_I-**CFSrC@8UWq%B(LLVwzwguDiUSH1FP-raqS}ggz*LS{<;}_r$N0Kb+ zfJ{#y^fthd-a3BJpVn}3x{?`qQC)g@i)_!OY`*k=v3Rss=Hrg_B=hgi>PLrn&FV)* z)*KfGNzQcQ7?D?r-^@~7(}ho6c8(4Mx#wxYjIW{IGOF~ls~h2UOv66Msc06)ov+5( zi4Ja7f@X0yjEYIn_Wu123xY;ljo~8WJ?dMu3~rqyB;XEUsLLx;R~O5)P^pON^{bej zi|L6Q;Wj7^gTE`*{rx^pc>!1;e6z5rRHb+by) z8Tk78M+k)Ex{UmlVyUM$TT>p}!6ow$IxQ(ilRtC5>Pz?gg;JOOB>`={mbt*aJ4@e> zcK1iR@1X@RQ-G@ksnf5JR`VipR)e@BHpq7aJ4fg8ctW(CuiZ zPR``MSq&8&Il;}nXN&dxzk-Eo>H!M@^fa@kM?7_8oaRZ`s^-jC*PFj1sXF=+1}d;} z@!#p_Gu{16eG)Z2DD2eD>YrCrDCnm}Qhk>E>~;{=C7L4eYr3%L#r}ETMb~d(-c}q` z>NiDPki$L)-I1RINJa9sfFjfck@D9J+;y3S7Hy_q3#kPC4>TC2`z`(((94Fx{X^Uv z^oo@fM={2qEO8#qD9Woji_vOUN!^gp@1+-jnpwTP`mZUh%!L6#MK@g3i)QC#-ZCn0 zVW9lIqj!y&FNn0s6)!tW2hYqcYAULDM#(k5c*N4pRl1*W8-w?k@hO@*C!RV>=R8LU zHXTo0S2QABa9SjFUOaUZv;K9{MoLQ5k}`$}V2{irZl{o}JX;uM6n`sy?zg+MyJv@O zt@aZ$5V8srBY~3FSt4J+hjK|sW8bcP(;D*8J`K|uozh z&G`oi6#N5pWI;T6l9*Q*i4$x(p1Qg;PF$K8k*;IOs|hweQ)MaK&y~E~;dP}5!u=?# z0wA{|um7pMnDfD45zFI$H9Be<#r;LRYC4mf3v_b|H}klWL}X^zFYQvA_vp^1<9TzW zE274I;Cut#eb+r8#vuGHhNgc~M>LWmTDJjmAFE{@rZ~QC;RXm_s;V66 zl#})w8&zSztAWUu$#(|llWd)Hqr|~P2_~y2b#y#+IY(p-2M(r)O=k2$bK9=Ld2;jK z7P(wpFXK$M_JgW0^AxIpT7|S@_7QE_5KR??V`Y1%-Hz{T&XjKB?Km4A@|Yw06>5}4 z!m55nG=#VI5ngA)c$!83(jwbTZ^NYTxAc_=h$eq;ZI3b`KxU1LgYBY`=^k^z|K?_J zzZw2G#45vNGI_Jd%)wh)q#DnWHXRkPHJiPV`PaXX!b*?VXCyM#Wj@1cMm;8syB>1} ztTqR5>_4hIeQ-ZCF82GanQOq_kG_v3OPdZ(g{lJkm^#m@Onoz&y45-_M}bktZDYc! zj{A;vT;Ml1vqW`PA@kXbEpf_B$6qe=Ri(0E7?QForpnS@`rIFnV5V^8D%Vl&TQCYy zs1#p36)?$*?N^eO1O1|XH|iKU38lU-=B)E zu?>nCTg6`~^kuDu6-V=Mbqmd^M`$*fAYchjIon8NO3jwY*GMfGZDq&eR;n6gu4~}L z;&^&OxCJ9$;pk+nPtoY)*gnMb-1UR5!Hy#TDGu&TQ55^ldW>0 z#&DTBR-rTsCm+HR=y!*2fjq2xJVP77{UG)k5rzDt@M@N;u-`PDs@%JjLbF0-%_Iyr zs>kKB90aQ{1I{gAQh6t-)0L;v;s`RsAA@S;tOmo%o(R%2oDaDIA8CsZHCK})GR+I1ubo4O%Ky`avy2#@D5GcpV} z-g^X}R1WoiJb8MQ&?fQZtYSh7n2eyMu7Citpme=go+vBEB~b)xc~nzYiP%AvP?ZQ} zm`1l@yq+9SSB6Vu_h}TOYH73+LarlXip`0tyP;*P1lLMN58=-BM#qE;5!C%r+D}`0 zm1>Hu=OKUkj#VSGOqP)JKjq8*(LGSSetioZbjPpZAUXokrH~@&9vpq)%Wz5k!1V2g zi8nWZITyG}w9|A9;&gMfcRi~)0z&Wnpj8qFJ9xyyib1B8s-US}`4)Ac+#4MgU73Fu zXS3K?Z|5{mceMx(714Aw#OHOg6(jeCkx7T8*~u*kLbvzBw`G)l99k%vp(SGkd@c84 zYzZBDXtRf4tE_O%>DInE(bR03^Fu;X<}^oV3B+A9Tz4o!AT2Ucl`hPG_W(VB*f1lq z6Ec~eOxigA_p_;IM*4mMbaSJ9Kht-49p*&BD(H@wlMXU(y~HZI*op$oLqFw5>x1`m zm11U`6^KjM{kDE8{Y(D;@zmi_#enJ&ty>%MRVa~?JX$Jk7tabICjE$6W>}7qxigW+ zjhQAo|I`{v%kELbG+GzWSXr0C3#q4 z8~tQ#>Mw`DL7JVEd)@!+4~lRT!$~kEN`Eeu7SUgx2q1#A8AT^ECrFKt&2D@=9|7!- zkD?SYgfOO^l&z<$J&qg`_m%2%t&+LZ)oi~d{igkvb6$xdIQnCAKFGb6?)caUHt%s5 zyz8ifrSr))KM5_6tFeKPm8$0QXdTD4FBrkQirN_^eHs$OgbNVD0tJSSd+w2;BZ66I zhSZhgpTyE}#bsMsYROf9m|&;>9oUvZ4FNwTssPkjw3~Q(DANdk|4Cfu1D;4Tgru%Oijkr;;Kw zj(a9&^&pQ{%=_%DyFMSA=#6OHv0M2WLVoB{@8LP~b?!;D{2LeFOk@@J;cY%-?T3F1 zE$GbaXx)rrF!Nm{cZcaJTw$CM&kobwS2(wvjdul!BP-?&nta2}H-_qa(5i;ad6suy zVQ9e_$~te*q+6zQD((rcoPw#L`VSE7nUG7?IdK9>uDYh?hR}k~0N>8rC4Kz{CHf0* zsN~SZnIxKi!?YV@U-^$9Sq;T*RFi9GbiOuJe-AmXZ^%66@^rxvqq{Zkpx$dHW!u*) zwBT;Ph@u-NhZZbwMI3%@Ncw%KK2AAJ(?ISEETnMxh)WX&*Hbd?`B5$wa%eS8kT0=_ z``gc&yZ-;yZL5Q`X{z4BclXmzGk3S~n+!aV-Tv9m0qfO$zaP{D*pD}-G_=sd z<)vyH)dI$ec)DwYIo+jtG_Ym1K@R)*O@{@p`dbChM8i)-?VjTjH+h$>*Kpcx+4ezs z&rnyM7yj1U=0B~G`z@8K(JYp_+j$w>r>bMA2OGJ_*`Q}=;W(HF?QYEQ)Zj;krzSsA z0FF~L*%|QH;psEZ8kW9Et^t{!kpWgL)h2+jDxG$cbncs8>^JccX z-rmRe&!`jUj7%5Ijiw9gBkZ-%HsMYK8V8?R^B;_lN_upt?mckOL87{iMT6PCIRs9X zx;!u@jZMG|3f29REKJpayZ2JMNwRDMRugE}>}&hSH#1jtL+C$^%?_a} z3Slb7$kkk#2Q_k8On4wJ<%@||V%JsS=ea7{_6EBWae=G1qEX+-Q1w{x;C5zG>&eW#WiuBqI^=CL0lH8s57@zo zY>Byg$?fEL+dq^dU3d~RDc1Ln8?^=9lKlh#6HTQgA6PbM2>35rmNNeB5=&o|A5Z>N z-|=jlE^WS)d!4bpFP>Usas@zk!3}oM`l8T@K$tGvH)%-T(3Y?#bxaUd%)32r@>RDn zR!Ejq)ZWezwBUYjF%}vM;$?g0oDf>*jnS)ABVXWxxws*Jzr7pssfq6Rx9yqJC7vD* zY;}TxQryMB=6t`hwJPlgxuq49k4_iNYqO^x0oJFctHRP^tI2HtrgnZQzFyQ% zlh#txkJ%f3RA^xVweVW4jid)oPYrzBcl=!yen9UC8+QU%N6w|s;3(ag_Xb zH{`}AHC64&eh}q@e)j!ihch3`q%q&M+5*K}gOjcz|NKJtb@oTin*Rs_RNRj+_8p}{ zHH&jWU9jU53E$cGy!$CX_+aM@jKoem_9G9EEHM>M#tO?NK4Y2q<{jt?-HFgc*=SJ6 zckjYi#cWypyXHUXn*XZCr!PYD=amV?ce>4}^j$gG)t4)+FI{3bz~pqDw)7vX{$sb7 zGI!i{HX)(wFihpa@9IhK#^1HH;GTCYtWi4*Tl<>9vbDpyR;Q+&?4@+~tgMd>-&()b zHcl{oQE{PR+v|q>dA0C$gr+n`ZuGZ6ZR+ja^s)NPz1Eq9{ug)pTz`FWZL2QP{S2$8 z8eM-zuVfX{^;w{lC;_+^w_@L$w_alI+s}$=r(JVPb!b6FAIAXj?|IxteWs1UhR25% zo-xRTNFzny5BYeuUsbaEOK&bz*hN8 zepBf7w_*4pS!_V0HUdF^d2O!Q+kHLL>RNLmjd2q56D|iYF|RvLmHCi$KsVk7I5LN3 z@X}|0kfZ}xZm=tv3t9_lr5SHBkoe?cIUpD1aO9#q2Tv~AoM>yycEps#ErHcvz^@n+ z#7ajzt8JVSIY2zq2a0%Xj&X3r;|f8oXxlav7i-&obuf-~p^hMoPU|>UJ&9GerSwM5 zAa>1aIa$fA;~=@?)nhOl1VaCqK`2n-RO17^s zo<1P6(UuF&QCpsD1n%}@a)aKr3U)QkyZiC1U_b2y7SP^3&k1%(1EPDHV0Wxn)n2fx zI1}vMek;L#tYov3Ir#5^YYmrzx2e>7#8yV!XJ5c8g#>(%iV*#nl1$h;VsygZb)pmY zs$h`8#aZ{LGE0CB4fO-=MF1{roC{|MeRz7EE4slrJvy{- zCRs(K(e%KT0U!kfJ^??qUmTY>m-yb^*{e*v=tAP(6Eq7e7OjdZx-Z!5Q4H-L-YTBmY!WXS^Jmv-_PI7msoZmoi@-huVtwz zy8BH`&7GoaKg025zfE*MiMsM!%Q*<$PUHT|ucd&(<|8;hmhpSmUwr)&_l4w8W_Lli z8J<~R-&xZo^w^A(>)!vYeDREv;o1n!)v4TGu<;TB88$GjM-EOvcF?2h59s6fXA1Tw ztaIrWy5{kqTcD4iAHlEs$BqO&PZ(bEsP)k+AJ9idpcnmmeC3z*QiJ;E8Fd7?o9k6+ zpy}_|KNlKI`}GeoU3&B7zurIjkv9D^i2f-j{`0Sb{^@W1v(wA%pZ@9(*d%gt-8-Kx zj+~tBF8pNDeU2W@MCuNsGB(Q^!3U>~ef&!mi^CI+Os{(ja|^X#{u=&hf>?~rGGbM2 zsw`;;EgaO(Ua2cErHtqQ0n8~f17*X4osc*M$MXYCqnz}pI+E7b%`C}F9LZ%6+bkXb zE!derOsPkgBV`)aoJ>7V>6rH$IJzQyWJF!PHY$`1TPm$sStDRbSBDUYZJ6bV3iy+hv5o%iWg&?pTk*2tu*@5X)A z=mA*6mbPL#ddizPnYB!&1z5bzCG6RTYsUJ z6Y>2H!+7dGCGt*UImRNskHjNoJR|Ot`bsTNT8SIxE0z9e<<^H!z`oH9BJU|5WC-mJ#F_FuwxRnYhQz-jK(El!@E71Sye*uAtUJEHNhh8VOq1V$d{Stazvg|AA zb>wL1_4?CAug^Rzdi{FG^ji0afe1k2cbqM*{Qm{X4r$0GS%$SQCE1hs-b%7UvKPAc zV7vTkHfl7WWv@AvQrvL%=)Y+=3$zQHVYjsiY&u08xw27k$=4y>*PJ?BChEkX;%NeX6_!0-Dyw-f^3 zwtl>U`I`XDR9o9RL#DnU6JJu6)`*e{SdI{S%8!ihLxM06B;IAi5Zvi*qyE?r=r~Z0 z#DaFBuIa*tmx(Bey@Y%B&5gFnFVOGqKa`k~ff)6*1z%*kbD^kIr`owt=2MV?zQ`r5 zlYuxB2r0e{WHrdiaXE}QA?ObE(isqyWKz4dEL32N9$GbF?Aqw|H3r8!NM^Lsj+*ZM z;M?$J+wNzA15z#gSgzeAM+c&PvsTb?>B3bP;g{qh@D^yR)V#~W}!ohNwCdJX;-FV$?*H69brt4xv zQ=kK9&}eO92vyY1Et)3%EL6Xn(&Nd`qipZj;S&=ZH@BQUq?b<=7t z@u57Pe4-RJ2Bm)Fm1TKPuz@GfTUowYEL#6cXP00XtZF0V{&K*fBAWWG_&1tbBmNDh zY2!|`Wu8V}9n3T>n)C~4Qx@w)D!|Gt4lQgcafJ;}bzR(45KoPqG^bDKgi7FB__lrO zfw8p*Yw}|>aX7;EdF%93jK_?7d;5gyhf40a$@tI6(S9=StO8;7s*nT0>iv{BA?@T8 z!0fkJUi*ZLNLIie)N3X9dKvE!a~AAs{2G7a+l0l&@gp>E(9O5pd|hD3J|U9oIeMy= z{MKsKFJ1W2z5RLE=6(I_?8YFK(F%hrTZY)7ypQ7jhsvZizF_QcyRP(2dQl@p9~$IF zhz6R3-I#-l+#DR6dt>Gk2A=)<*C`Wi3;Y{mMwm(d)QNh7&Tp|-Q{p$X*l%W$+3Opc z)Xwit$!X`|emjQ_uy(3FgMlFcs^bOMza6g>Uot4Hrj-l|HjcCo3OeGT&7j~g>M&{a z<6Zbo8yN=vp~I0O@(Lrv`IOy$Wbo?pU9905f*maEQ6jiXRWj-b9?&d!yggB=OsK*R znw%M>8tn>TEKor_TS1U+#0qAtaJgCsw%j%#zrSJd*Sy&w{J-nUDN7f11pl*nf*(EI zucp?9LN|7SvK%0J%ANLJ&pf0W0?a>AZPExPG4I-DGl`CeMb3ZYxF&D%iLH|?chuPv z|LhMjcZLN6Lrm!o&9dC1oe`!}(QwFARa9Q0%GD(9HL~jdfSv4(A7c0!yR$?5T=?rj zd23*y{rmT)Eq^c|s#I(8ib&m%VgV{g@hi%`e|^oLU604ARZ-qL@bbA+B>7Gx4ULf# zy+G3mp+o^%ou)9YM0flU(n5Fq6l*%%T@&MCO^3TrscPALa9lY~@}}Lm-@%|SF#}ne zbRxB*pWSpW)@2CdcmCLf7IqD%+PW2#OdsZK2Zx~Zp^pQMVr`|ILixEj$fN~( z0R{OTt^15{_MWhj+!cN5W)0xgS6!2}pT^6s!|P9zJEm7f%(R|U6aEh;lP8{@tM`Pd zJ*)Th6;vjMy@Y0MU{J$FJ7nyKgygQKL)6&hdO4EBljb|p)K8-S%4NkG z#BXCjHZ1s^Q@i(^4zZkhYZQoFYxv|u?9HUtElV{r`qGb3lZu(T9Y%r(88uAOJ~ zO4nYwOo9-v0rodY=wMb8P>2n9PPb?V4BPv za#o5~{x(N9Z-ws!pmhquEe`-6CCJo+9Z|X+w#lq+hu!>c=6cxK8p#q#_r`AC&Vk@$ z90;Ukv7|DJC6zm@h;-q3r_tgm$2rmOS}X(G(?2{=i--A9JB5hG-7S z`?o6E!=iuJ5g?+Uhq>|Bx*#J$In9lUj6RR<{)3_kM%RAMUaa@ni}m%kbmZOBAA~?f zn|&%;W_^H~rK^w8Af_O~atD}YB6w|hI`N%4g%)LKCU>mCoohIM)Nn5PkCnY8|05kz zLXQaVe(1rh|IwYiYtUk6Yd=1GpZd|4mn@KbpJ;6f@Rs}FnYkGvpOgb$2OZuE|ICF+ zCPD{TW?d{YXkBI%B;M)NUEdhE#3%(TrwjydDlLR-n5p}Mrs|t4fs#qlx;@}zX>zRj3I1XEiK{E--BvWM=C;X+aTT?hL{Qz^1G`gz9Yd>ztHJ>Afbe!jbmm~LOTl>al(=YN<>WJ=+PY=_eNMCR=8+6h`O zZpxuF2K2{xBWk<3=BgWRzAm6Ph|T#rLS{u%-TZQaf~N;$;^=L5l#K_`)HrrHbh~l| z1}@r{=Zz_STeGWU=&W2Yf~-v!3k4#K=ZBtj8oTvbA;sr_&CEWndLP=1)1`5g+EF7Ypwy58gaSp5RL!MSr8-DTbzSQyb)t21mQn?DdrJMMU$&*x zLqZEK&JlFJcoD634=pTW^ucp#{Kct)MZ{OdGkQ|PoMS=@o1ksnOvmHObeHeSMEq6f z%ya@V@ByQeC4$-bF1#ggglP;wZVXFq_FWFWmw)C2VFOLI*^j}F(N9+}bAXW#3Y|pl z9g4vkHogSp84J($zJ5>E&t&fBbkxiqZ3lX(UsEHH?-U2bR4zuO29X4O?*5VN_7WxXJXCpBijP{Oej z-z6&4kp!!i=q5PL3&WC|yk(`7put}xg52As5*b~abxjwR9S@Rfj%bghwM#%!LxN?? z{YMs+)O3c%e{VeTJ%c2^Cgl1Z-H*{lDG!oo9axTM4K#mrX)~tW`SSyJdez+;N*zL- zwqbZa<~o|$A)d|t466J1+?7T3p}aU)R4a0ni`v}(G~u;Ayb)Rwo*S&o300wMx^PQx z@Z7a~dpuu}KA>1sL9o`I4PT04r8-CyJBS>L4XTb%+;>GQiW{Ew_QDe0f9j`MKTZ1i zvwq&;hxv(ax9ew%eqPeg2K}t#2mNM^?jO_7Z}jtsejet>_c6qw(2ahJ8zIdQi&;XyArhUd3 z&K==O*|pjnTB7NiIk}o6V&+C3b*_(#1lBg7svkd9Tb&T}e@5BWRww=mrFxSrx;NR; zet%W0gp{CO?p@ zNi0#|msmI<&#$4uNaBY%^rMYp1P(2Do7D3L4d~zh6sMoK=rFzss_?Ua9+a1n&06H$ zY*&nJGzd+j@s69~nA1jPg|OTq5L_--N;EyA zC9?K?*2^Y*gGuELN%&m>k-C0E_V;~+zO+y%@;@v121B^!q%4iq(=I?Lv-z#o$2Q<1 zqHlf@PW%w(K+B)XJ6Cki{=7zB#c-WxwSoO+Ijm!pUu>xlSe9SZUtyH5DC%%dur&Ts z7W}gV*r?_3rUL!CGch`bweG7cI5p9O3d)fPpB}jFvVZZNdH)$!qCf8+%wD>|PqgzU zuelVj@sn!enK=lAwqW^X{E-hJRTzwa#X8w)s-NxfE>W|5*sHVeHy&sSUIgWjG?)*QDjK3#!!<@rgC4u%H zc-#IJ;)Wg@jV>Rsz`7ELi#51(tQiV_GIpRH_H~VRZEL$fXocDvD2VP5N3U}#cmARj zXn_H11<|x|o2@r6*m#{dC1`FI55Oe6WRBdcg?g7#6B)-y&XBKXCnxVTv$>uF`B_S4 zJ*&Zzr~UN|0tVT87}A%oTxWr6Jgw!fKQ50=Dk= zF=KS(CRp0{s7Ke2-1zYzmgA1X0dr&Bkbhes_We$Tj+&v5RJF{m!BPb+P#2{O-}z`D zpFh?rgiP(;Z;Cba2l}3$3@ll8sHa5PpcWMyOS|<1+arfy8 zV^CeHyVA_B_gE-~<~c`%7LKMaEaTIMrwZoj{0AN4DZH!%Kaf@Hh)0zs%GC$tk+#+g zdi4%t@=AIUEkyYzU4mmD3ty&9UZkkK4s%bvbQrc{I8~7~l7eTPSPZ6e9G|n)6p`xjq_sJD%f6z5;d{f$-={p4cXw_j<`!jvn|JS+ZBrQ>3Kt4i3+Ig`2 zFvo+Xerw|1U@O-ufHnE)-M^?6lB`oS+YKng@h|%6Q$COXKjz*AKC0^K{|=X6KyVVd zh+HbjsGw+rMNI^1BB9L4L{X_i!9J*nu|?%FBPbLDNg(4enzq#1YFp}KpVHR0S}kI+ zHh@(`t0*cct>UHiOvkp^_CW+C|L=$eWqRBr*hrJjn2rT072Jn2FCsOuq8KAxfTgl&Sp(VcLFREB3dB*wWa-OtBM%*wgN-c4tvu{wWI6bHoNTF!5>UWPdkC+TQIyW z+?c3;-actt0JrS|LCW+rc+|DW2C?|AG5~H{@qqvrUMheqka}68fMFE`)4cJKLI4D@ zlp>INDODcRtezl~Hu<#cr7xdmpj?X_(`>Ce6x00gyYe8-dmQNZ)^maX)#Dmn?$_mB zy%f1Uow9}7R@v9%f~?{%M&*AW#CLC) z+7aer^?ZXab99-d%hkGE!G-Tr z^?Zpg7wQt@Qj0CNERt~Ujei@1Cr+>Va8<;_BOLdJ93uoHz6+j-d~j~IBv49$V!HV9 z<4!B0{7!;BmM!}zt-$J=bHq+5A$G@@15Zeh0aZ^VsdjeAR9o32&P#Ug62TLnPhV=? zk%w9rcd?d`e{gT7^^r}=9j(k9QvE2r!G9lUWG=m?Qo|UmuXQoQ4_VZ!y+5|7vP3^C zs6|K}Ci4u(j$T*1Kp{D<(bx~&{A8kKh_p11>8B`i|q!OE&d=Z#0 z0CQT|SGE3Zj3%9(eX>>aPfkt3WK{{aS=F5PW5`u22vXLwzD(N^1CpZJHEzbQaesU&QEpk;?2Ta zr_YWXea?KIFXAH%eiWa81CTTz>iCEU!-A)5jcRd_^<>bFjw4RB^UX6H9a6sn5HMHw zgv#~X?st_PFYyT`y|fG0`7d#*xk^oomz|fI^pfYj@Q}4jUZQY?|B@GV=Nx?~f~|jE zV6>e>20j=`K6E%RQfek*L)0CrEG)|}s`=xK>IN7owa#byMFBv@|L=qU*Mb~%z)lUe zS5bgVpydS0&OuABC<0T~$^5gQY>CgpNrRpL+#I^~6rS<88g)>g8NknvQ+ApX8T`&{ zfBh3C&isOumQD2IFs4g6_W<9t{-8e=%GOqHSR5k$*3sI2cdwES*bz9MuA_cTt2*5L zc_n}`7-9)VS4GmD*XC=Mk4y9cA2%#MiY=+{hhX$^*^Z-+BQQv-`BxJITu8|r%==(aoWV;y-K`eb3yBv9ubInI_dJr)MrM?1SoMN-Fv4_eNcyh0Xab z9CC;j4xxoZaxGLt00+Mbq1(R0j?6V9)1gFVo0^`wHE>bRa1Sy33N8C833=VhYk%9t z*t7!!Tdl_b;hXKe!d#C_^n!lpX|1O$M%gn>G(D8$=_0c`9zqtkyq?Wxltr81s*4h5 zAUE(?pN8MqV1;gb6!I_36#lYx%OSf4uqe}ux1R{uGS|HZ#1=G-{NB2+X+b}r(wqAp zy230cU5c;i0?YH(2XZAB#B_Io+8h8xaL|0hjkzVr=ufG)@&QL?^wW6a(gLyRRo~2G zPcBH#*ycqW0;gSzQ=+QceQ0|%Tf2|cH$;1#bErYJsk&10VE-+#dnBz8DI+{XGj#zh ztar#bc}LsRYfhCPg%khFwPr1avDa2%DAxMg%}-nT?0jPR?8|a)jeUo$zz>G&lpgo2 z=`(65$oP|WR#fomHO-Do&923AJrXXld!wIQ5uPln2d7JlKm0X|!GgiAHI@zzQSFbU z2jGRzFT>GtSAg3ST0_!jJgV%KerF1@(`8$+7>+vdc~87SGy~>2T!Bd9#ISVwh^_2g zl2>!TzfO)tY-O(m(S?n5jT0%giu^`nh^#m-xh@BwXKgo!MG9kcL2{O&-HcYPp~myz zTM56p4UefWdr#gc77y>^6H4$8_E|nLv?Du#G{1cRqmX7-LP&FzaM6&)?03AWloq@? z1mX;D`3S^W{s|E$?IVr|j>f${4{=r-FcwdGz!2weQ}c%YAjGk>0pgr~Xv8^^g1lwZ zRLp;hG@E`!5o15&S`t9L+WyIqCaLV5tp)gA6>b9WmK~&-sA4`9(wt3kKGJC1yq^wK z!#+L2sOFDDm;!9E3?GRt$DKq^`{hqrfGv&l3b3WmFa8s3Q3E~|wj8BeIWLuuEqDGr zhb@`WeDF>Nb3vF+Meh94!rdQ*Gmp#_&X{1waHiBdh4MZEUp`n-h%Zlgk%q_3xo6Xk z#mxb}NO~q(!Md-tA(pxX+r|@Psq0v1T7Cb9Y(uK_4SZ>F_=4do7E8RN`QiJ7FYF)I zO?K@$^ipG~KL%r7{w1?GX^M*ZPci0p6;amTwIl#}wf>V~%%#fyyx)<6>~wg#iuqI+ zQ$le*#%Scc1^v{pc8t+XY8};*uRaG0Ns}oRdwLmVEwA5goR?1H%&Mh^q`0gsw z_saF521&KF&RB-r`r;m-J_R|B=CxF0%oA1{~ z_XH97i;r4m=wuoiH98mscy9FuqmC+kUO%D5M`0&_cfFz0nTAf2p0LFyMpIaPYT1Wz z!h!XtuW;%mkOI5BK`Ilt-37geneJ;p8^hB0Fum23t$#g)8#uYn6ONxbv>x+*L)5MxM{Y_Wa;00uD07Imay%nz?)bXr6k z9M)v}M^Y{7vN!Z6D#g9cc{aY!MuRdn8Zch>04thB*BgI-O(p@SSP6|%u-OiPl3i6> zLpfCh#$PjA;)4QDE^yv(p7*ZMcAXWTRFQ_g9kTuHz4PUAeM8|#9W}xJ1UQMb-Kui4 z*ev)j7+`B!@=@1&j?HV_laIRI|M#^<7_FsrNS%MwI)BP)`5W^mJ=qBvBMcH}1uXMj z79>m4vX)G-uRVL}^Kof^GXD&56(z{o1SOzsMV z$r?)U;yF39o}qg=E&kuTMA!X+2;9eLQ1D1yVB+(j6=zmH&&*P%u#0iiARtpav5WcQ zkKL4Nb^^CCd~v-iSB8jn5Gx*@U1tyN7i`C}yaht?9}w#N$$L zpL3z95CkIA9}U0v>&rt{EULU6EALuaGj2V z+8D|((Vt*bQl}!`?B!Y#kbAZLldTrRl>HvRBL&&1zRn-H{7p$@*jBeM$={K5U{g~3 z>T03>%UUe(@x^p&p+Bif(rgA4|8wVw{8`#-ucZytkHBlH!(w|$H9!+Q=~H4f^`fotF47Y{eC z>|B`aU?p|%$pHlQiN%BXek>m6yTxPaH8ckMhI58C7}AGOJ>e`4U|&sygioE6f|6VHs;Ayp=GdC*IZY3RpO|bOBQsVdrhJX{-xvb&S_5yPy4t-+F^18hqQ@#L450-ZB#coXjk%qz_ZkhXm^qgPZ;6d>nck#i2*dI~K_#oCy-C}!J*&QQo?p4h! z&fIG__;Z;+dK&W2C*wyV=C4UUl_}PoC11hnFu>(gX-~BH|2>)C5Ojkp75=L+bho{gOqb?>qN6=11E}!BW zh3+iZS{&RrO0N*aJ0QhPC=ZAh>Yy<4-fN0H*YI|Cy^%UO(qUUHeU0;vT~o0?)Y#x> zH{c~v31h5vy2$Q?ovVRRO%-{XtSNA;gu}hmmpVfiW`rI(uVf}96hcxYd6VmgKH3dWdvR)%$YPSj|p-O)O`uh6BM=DWiCf?t;b zUpUD64!^N!`b@k#*W-!ATfeto0vE@_UvUbO^WS5ifqU@3VdNJtss1gwi?UVba;#f@#i>frk}cQVof4ET z*S6Fe{3L&mf)}o^P@}x|+x|+T|IpHLy&M=CIJO@@t|FBYv{D|{se13}jz-mfzsgZH zeb6|`Cch_#Dz{sP!#J)q4G2RE@YD2H?)+<3|&=_Ow-&2Nu#t4v`(8jI+u- z2tTIlh2~MT4R<@8)zpu0KXC$|1Ip&S@p`@byED#$4=YLNHkDeYg)b`@L1K~oHQKPZ zG_*X<5l*I`Zhw1-`JmnsYJAjMJBks76Ic^kJ(#o+q8QB>3fG9vjOW4 zGiKiK4gY^1u9N$Iq07sx0X8QYKS%V60` z)lEE%=_zQD+l1!&8nmJE75XeqtX~*eKBACE`~eHPwJo&tT4kocu1DL5`Wk(2yC1(C zPP>oyFLcW|GmYb`(}Iw(qqBhC>ZW%|{h>Qq*WO9Dbc*{BTpR+=9N^#!`miu_4K_RjVCpeb2?%h|-GJQ(dO)zv{Iz-yt3j)LP+emB8xU9M> z79s(AbyqH?SUz|BXbIp$YPdwMvGA9?7GgW9gVrV@-ny`qFHhC3k+78Ayz6iGcZ{;d zelXlBc!XUMODNIWTKkPu!JVKp&W-L>*FP-tb_DN#Q39H^)9#Ks)7dj}9e8HftG1W< zt)D>fB>Zq09x-yxBpa_nIsfK!P3R%#bAwJezJ&+Jq68!0oz<#_Vj8Q#hG#Y)fu|MP zsr|Y=7@ov!rYu1x^H9^gBK#%0uMAJ+F2Gc4V({ZC27EiTC%pjB59;N#*};^0|6ode z`*rQyI;i|$+=)NTA;!OJNK;2w*WYwJK5cgL3rCe=%1!{Ih(5rR+-Imo`llsRU|H*2 zP|8?ZV7$8VpR4S!*9iKI`vvsFBffD-{ zMHaIIA0nI6s*_tA{@Ee4=6T7L^Ve|VBA#F@?R{hyQa#2!n)*h$-2%Uv(bUpGD!%fS zd6!0#&jk{Vz7L*B{D&&-lUz4Bn68WsW5!JJB^uvQKJVFY`tYexajqzT1ft330gGwj zY0C4~yzXhWDrHG?Yf?&8^kTUhYhRau82>P5Lf2wD99^4jF#RzUh^7OZISQoB6?;6dSom?JLHRcKVR&hNnB! zG*2HAOI=Z-_$qC+mG6X>4S*hETgXP`{!HYR8R32GQig}C8~)I7T=Vd7K-e;? zkOI=->1WX4sjs*W*L{)>W6E==4j;42b=bP_$bwfaD*rlfk!)=h^*Tpi*Zu>wkO}&$n7G6j=M@_e5HR#9h`bcfKk&V=yTq!U3sL zGJk98fa;Kyvqm4*7cAe*dDC1*-#KrZ%M>{0O>>!t(s|P%+jDhs%WWaD9hS#y(qN<~ zg^5)8{GwxUWOGlHtuFoCM*&AyH*D@$(|mMcS!M<;E~lQnfebUKz(OGJ5eV3}WAfjK zWcG=6C}PO80tXCQj$uQry#OQQT!n#gR}o{HJx42to`SXat}x!CFRc`86s|pLpvo_7 z4U>8&e_QDA_J%Rvzfj=wH7z$jy|V#bj!uG@k|9IX<56xU~__XWFuu!6q}3_#t+vx9WWP z9gLznN@V3DM(nmgj-kdZFO2>vpk>pa_(jYB__nRe2!3v|yOUJbHvKIz3WrQ4K$4LE zHQDbCIg0|SINx!W!#l0#nr7wnrH}Mm6*r8zWTM9Le2E0b=Sb4HN)=$gcl=rWd=n=6 zlmx!ruhZ)5XA`~6FH|g<<)(ki9ZUCkFFso1qDZhK!#r3d*m$^9k9~O=5BIIMR@3@e zaz`Zj4Erh@rEQ7>38A@+lLY(m*APlSYen{2gTszQPma30KrFx^(7q$88+Ps=*Gxdk z#T{xZ_a*wF2;y56ma%I}8eadfx)~PJb=3cIe06Z;H^=oZ`kLMLgJ&Vsk#6&$8O`x7`4X=~GTXwM3`D91RQj((!l04agBtcU$ zCvdp95&M};DfaDNpEUZTGF`gsa)d4&xv)Rpw}R*0y1c8)J6vMvDah8J_2Hv!abM^d zBQX^j);^Q1@9T=}a-&3>J7US#W66K8K4h-Wu-r;Jr41^K8Y(7>RV)3}Pzm#gNdSDZ zWc#OhS6wftQDSMSA}J*%+#bq)B^JFL##PBhEKbS%`t3vL7Nld4{%X5ZE_|Cs+E*?J zKBTm1wY&3%C@eO#OZT|#zx?CI^uPZv@k5AFQd)tagtBXuhfuR)G?vN`T2ofP_tbcC z{oYehOQk2%%U2@ry&@xvhBrDy(w)oPL6H8Y;@d=kohP$cXhWe~g?b@(+vOS)1mM#M zqsTZ-Z;2#3!;?)5mpqP#@zcC_cRkxSE_7+zj96;q2^{!ifHW)(@3$pFdL$RY$;p_l zRm|E7o1aMKGohs`f#gW~LV{%@AX%y()KnE2_6+fOIjNc_Nno_6N7AGFAu~9BHjD+u zRteE;pgL^Mo{&@atfJ?rgNTQoeAPle??0#EFC8Ksb}2Tqf;6x|EH19ED360z=!}S9 zthCdJ|H#);#Wg|k81K|Z1dHfQ^YiOoYD05`xM=x{s=&sJepJ~QT77gqZ?mgL`&}=y zM)&AujizCRU9a-q{i}&Q|Jv+Cp7mCK&~?p=P4+M*DFENd;LUnjCm8mA<+A_G&wjv| z{H&fa5&K^-CZZqr9yluA>ShSZe{(VYAa@|WfG&75zj_e*XHMtTN1!!qzq|Oj5(XG* zH@q{*!8V~i8B!mW%FRJFX5~Fzoa$q?H}*9NDTp5xr{hGU*2Gsto>-4Avdw#(v)aaS zr!Vecp`UBhk&e;I=N5zCJ+66olw%))*rkJ5B`Bgo<$x_3%5;yhK`QU%S0(g`SGQO5 zFqEjsyIcptsRf9>xT6)o@ejrGJ%;SVgNEi+BHVNCcnJa1@EFw|Fm6UqyMwA7TKdP;M zZ+ZOhj;L)-d^yteWV{cgutQ=({W+(g5!Pcx{W+&5P9c!9P85u}b4rEVH+hk-in2{o z-H3tFf6~^>^M($4Gn@VU2LCQkaVXI`g;xBSr}}fs6T|Co?r>V-#L${cJI-vO8FTyB z@2#BA@$gF__Vd7MP9Xd%lH8VEB>cy##-gu=)*Qp?pe5qe#1yiZC(f_Gx#MYxu@urt zMc~1)@&?XByq_IUIf!lM?YDM2dXn7ct^A6k# z-RRyXo-^~A`F2?Gj;PCrkj$P#Ddv4Zkvy;plyFPvWjG!2mr&cuuw+I6o#wlIwYd|= zDS+*CUQ1nnId=uHy~6G*!dKdTWq5|&?+RbVU1F!n+-1q9e4#auSU&uQ$aysk!3Efq zNGd6kj)BADMX~*&*6*~(?Q??!RVLP3F-T8y`G)V8*ojL!y^A+QM4yCzGpf=t+=|@ZUh}!f7 z!p(2y1kU2`)Z$b-eL~SqiUU75(WN#OEy;GNmibgsVjE83hGJOyOFK_>4Po880)NEP z?Q-)uT#FOORxhc%d}jQr#Lr3Dd2Zr=#Ghy4Bv+!uxA}aKMDn61Uo#o3Td>aAT?E0;^c+Hf>83>sS6?X%TN) zd2>O!bCvuk$cw^wyeQO!Ct;7)?#Yt%ZO3?Lp7d>yD1fm@TfGT%8XhsYMl*01g}G)( zU);3Be!BKX8WxvyNL&|5eO^uwq|k;i_1!n|9`>FUa1?OR(}WZW?`&5i#f8BPkB^!{BLN#lWtz zI}{>wq>}K)lG0;`(7Qw5$Ity%Z`O28W8msC2pae6YHd(UBdNK4z4I2CkjOc=Rlqn$ zS0ZiAHs=MQGZi1${IA?%)vs;Utst&tJUr2v@y5cFyxYbJmf~eh25aeECLKs#TrR6* z_rs@Ts6FXK^X;OJk<{(3kBcB^m3wc%U)$||H8-ca{|bB>L3rsLCG$?X8RqLmE|G=} z{<)0Mt+yExoLeILwd{Pj6SQHmv@=uiH_#F+*#6lxuyaJh=5j&&uO}|0a|DfZD*_OV z4^p%cNp))cc|f7_Gy}k!qD&{N(bWKHi(fAZm*ACxsH*I9+*MQAJT9ekwOgOZp~?0P z$BsjBQ^UA;WUA?OmpK<1H*9N`m-uYZOFq7%yI;MuMyfxvToB;nOi>&$xw8%$mpVE~ zn%~kXq?WL$g{(3ZGl>pGHS=2#Hb~zoV!OUmh%E%C-$z6eS0)1C0Vh*MVcSev@J zbF}i`p@x*+L!@TQ7`m^udy%|9?tvj;BOb`SRzGw){+&+*1n7>HN%vGxfMr4e*Db%> ztV-&(x@pDI&3e+)j~C{R=C#%Gs?VCt7PPw2aZQaS7rnP9^KYnoZR!e?ZTA>fX5Qol zv!E#{3f=ZN*C=+dpV(R4Lzc5amw)zB*Y{~8tA zdgWeu#o0vtJ{$@2T?<=-fy-RTx|Y{+=t@!-^0-x22rS4E)qwLdJ6JIl$VE!p$I2OQf z)qgv`Rbsf@T*FYQy{AZsL-U5!z>ke=$)4za2g?MFm6DmvMvKj4wPToCdP)u3fRT9E zb1U&`)f#iIB;Y@4EB`E)dtah{EbC_Q_sc?;d-97X*MGRl`x80!GqIxa$wYJJ8Gg$C z4xf7)-4}ecU&nM9vvHNplzH8ZRlXfs`cDW_wDN_}(zirZhi!`vLky=Vqx+)o?Ql^> z_Yq}uD=}t|1DEnW>Qua_iJPWPddzK|*fAF`eZE}&ANv1JB1_xBivba3=LAN>m@7uH zq|9tdpaz+Qbfky(d_p`7&+VsBW8sk$^!^v2-wlr~fDKI-cYhM*=!r+27}N$n^{~ih zB;_I@zH~hnMurr++UH@js+QEOK zd+gBIG(4Bz!%JQORmc4DY^{RT>SaX5O?Mk?rVo@q(i=esaGjxZxis|3O`ntg*1Plf zYO4|hnh|aJ*e4$(!2x@38X8GrTj9(y0(kMgL`G5;iQ11otu+-VYVt~ivk@F!DdvtW za^*X+%-+g(WM{(dRLMD``DSdbuHSPU4l68kyAv$EmEV&+$Hh;QaB&zmG@+&k7^HSC z&wFo-u$o3^zRQOi`d==eY$o3xHQE10(+9Z_v&$kRFHO&Z9K!H`Ln!yIr6q6(N70z!8q3*Y4+!q5DL`zKE*>xmU`cLetVcSS@y?zP z#W_Qla$Qc*xFvD<0-V-Sk`L*9s7a9rk(Fle8<+ml`$)Mv%+{!DR;ckU+L~>0{xf+qD70KOji=)hS6B@?t`JLK(!ua^+q`q|R>T>6 zHtN9&{Xa`STjZ^`6WDZ1vY`bW?~8I45Th5(1~HLJ0y z6HlrlR(YuMzo7Cj|5W84q4Iyul1=%8LrsmeASk~MBiKPV4?%%+9NkOw)7VdjVXNft z#?s#nBB|}Ivj=zdxAin+yPfDhsH4`mg5Fw3OVp4s4YBo))HXe`oe?sfU>o~0L1jbx6FtC_JFL&FXshV;cc-4m>@#tL|7CDUh@j1{*f~p*^nKY?q|lmadj+^Oal;U~Ry9B_<9x=AsDfzO?&WQ2((Rpjxthn8 zyi+kVDm4IA$S*^U4=FS3lFAH%IHc|t%(Za7>W{=pUzWi%FP8dgEAP-<5yW`bZ!rML zcU{Xu={!vRQ68pHdwtif$NtTV^9%d-Cn>CJVxZ#tDGP31E6QS5FO>xV7g`P3}Ka3u_~!qEgdTvGb!n(jviaV|Y;EB~Pb zN-rV7qW9Mpou3~5lfn^@6@DpA>k@}1d^jX=tH#&t|KBi)fSat^%59-#DM|^L;d4`+ zzwYzT=ccB8y))e5Jv8t9^ZT=`hbT!rjo%jSiom?j^6rNAlxzoX1a( zrOrdN@Ul0jl_L!PG~zTx6c57$>k4%)EwwtGYPeRb`rZ;7rBiTm|Omybs z{+i}{!r!NGskQgmz0pKtWC^X1xYX@mUJNySm6lwPUUaPvU9LlU*{!~EV7!|a$fC^8 z)I0##?K50-OxfGn{vvs=Z4k$%InzpVpw4Fv=R8k#!sGI*>FigK2NNHZ=cRK6Q z;}?sOV!Ji32>+0l0oW*?W6Ae(-Vu|pj~nqk{sQMCsyRT~=P?ow{L5Tj(K<;;abYO|qFS zGdUjA^r6u@zXXa^3Etgb-3xrlwcD%uOu?nr5jFz4v!yf|*nS#CJ52aMtP2C22K02g>kzpWs~VUrb%URZZZEVbX0BMoD2{w#c;bDp6t zXOR^}s=RKdp25JBSFrlVE)&|Iz30%mFFb3VJ?Gj(cJ_)&I@|Y9oxSzz>MVzmtqq96 zb!SAjb1&=>zw(3TVUtzPETO>gT~4K0axBwFoJ~v@f954@@hX4ib|bFR$e@NX%TCL6 zTrI#u;{Te)0WlmuZGR)_9QM8Zl%4NR?)caWZ# z9|RaGi}AnD?m=iHhycHJm~9hxGwRXzC~(*p)nepg21p>!kPllB}* zFKy-ro~a++rU7sQRR$(sFP}bR*7qyu{e#Y|nwefep6;rg*{|a{@$>bxgWvEZzH^7e=vsOss03uClXXD{qo$@FwJsWj7&uEW4>nmx%!sOO{wf zdyxm3ERnk}OVpEc%^Rc^ucl_L3qE)q)|l=;0I&ZWuo}#Gcw@7SDl@IN1v8N?37&lZ zfKX@R4=l)>#D?mO5GkfJHjmnidyE(;I+)M@+2;RcC)bFs-v^uU$G}5x{+9pB$J&gP zY^M~hI-cDzN~L%p=brWD&c18ZFNFP0{ONQoPWtMk9E(oQQ37QIIR5asR6-J|RO zU?#)we_uBKBMQd=naNAyo&Q(0wC`2&BA+j)!)S#a_0V*$W6~G3u@~=U&KH@Vb;BjG zNT88_tS`-5p`992F|@D>)qodD6JQ^9n6)7sQB|=|(H}@3!tJQ9!sTVQ6PNgR3X7Hg zg{I#?huXJTg>mH-OLHb8gT$nlcNC5F8`=pHB>3BhCs}VdmqO8qw=v?6t6F7#6v{Hc zq;m(1u;d?`+~)9SsLuS&;eBo-4R@Vr%j8mca8=+4U(6-h7SfI81EpBbmF|1_uG~dU zTUDmd;8+k+Vwqqc06aUU2k$@0%^dd*WG$)YP2@ndqKr~~B0T%Bvv}A6Rs0b>Vyc8^ z{mqO|mL;<#V?mqnpot#bPpo3MHBoJBOV05@o7O0OwDQHpgH``&6wEuNk^}+c>~HaK5mqus%L{>p;us=X zNGd^MlE>#S6%~(CI`Z$yk_=B5 zEY?#1i$vSQY#I8k)&haV->nW#6^{V?@-RyS{-eZ`DLre$v*|3k#ll*Lk$_V4j}(l>%d%W)XPw0}K3+?hjItrQ}PvMz#9YcSFD)A(){lf_^wKF{>2Yhp!4Ru*N^66rR95bzMB#X zOZVfmSc6x5eEIlvo+FDlS{%CdY9U&#)tSlsl=VX^#YBhgl>OAOzu5W}t9*Q3UqET( z4^L-S-}hqObll}Nvu?sRjOo~it^)P8NUE&0pMc6`AMk3X`~K}m@!*}Q%LrYD>vEDV z$8%wQ>aXWMx|HeCU6&)cIC3vQD)qLV>(hD(+DkJ-iD(j#dAEMP4r%e%PiT;>;GmJA zHGXl3zw#Rr_=pAmM^oKzku$GIovBg4nxWnUq=3>jec4i?FY(rgg|xybU$>L8FxCE2 zdAX&#Un3^8=kN9a>yI4qd`^E{zn551o~S21DOYt>h)!zG^v`N?{&|gACmyjDkSofv zEc-T$Z>bvSlr$S<{U zc#J3xg!e+vl_ya>n&EcV%_GDEOqAR>Hx~JWcim`zRMdWN--G$%hfz%~58eev`orwK zSdhw0L8}Bz8s)v83sU{EAXQ;mT~8;KM&CM7qrp}vNcAiz~3zr z8HUz$mHbWd$+T<^^fnA;e$zevsD3kv938)3D~EZ20RC^x~d;n1t_Po(|?KKlPq=euIzlXMQmEMMiod&WTRi?C9X zVp!(i**@O8mx{{pLfay}b0$U;OL#Zj_WhI4ow{(mLs=20{FhXH&Mz8+GSmTWAyk9k z3}Zo)4Xmf*DshR%!T{atGgb6Ym+rb8p-V?D(8qmW;(0e0M-aWI#svF`4iN39eft55 z^6B58Li!hg&#N|DhoAMqiEg$IXMRA!`uF=MjPCPg(h5&G(Iz4Z=5LyY?8NKY20j16abc`%$q?~_Xgmsl3vjt!L{0K9AZC5Yf%MP0T&n=M6(S2-Dg zi_4Cma3l1J=m`JuH`Acp(n=XPJY`$c9TiAa`-`sHUp&d_GLdFmH@_@> zWRLhgD{85Vf(YFZO^>{KO?kT8RrcrBfT&3{`CuG3^iV66lSGWM_9v} zsj#h;8zcpG>Bu#CJ9-Ib97q9DiGeWp5gaN1WN)hN<(#5Oz1b+koq|f;Gw_#zgFA`Y#x)_Yd zTza#VHts#JoyKe&_aU%X9PBLqjdGr`0f98+tIl!qv~3l2!Cz*kslV`N)MbQH;Px67 zHjs_)-aZ`dK)_-ydaj#`RFa;fp> znSW3zq|UhRR-TntMLI@($zuY!%Q#0P>kL-$;Kip~Ci>kl2eM(sr$<6420VZl1+b|< zQ@4W?ZosLQvb=T9y96dl;-8a@HGKx)$U_=$&oLj{LT}|4H8sH*S=$!7(_!kO;2@HE zK>Gx$en7qS(Zt^QpCYMs`a+8LgmSZ4G-EEV#vvsM!i{>;`@4Eq8-_52;ssX$u{GvV zoFTg@d(yqXI#~vch#t2lIJdAF8`b1yGei$HeL$(~xN5@VXSUQ-VD9`nF9OTLEDRxdhu3maR(@}`yAYwV9Dx3T_>`rS62NTxGE547i0 zLB@Qtx#RGN;^+mRvqu#sSBeD$a}0WhkNLUiy`5=f3rA%@*j5$i(-Yq4$VD-JgtPOurhC~q_R&tA3}h3RB7y6ggNM$tV@W!l)CMjdw^O|^69 zVQ0TW&>9dtntE7GB(SJNpFb!RedhD$QOE5UmZvop!mR^s)S!Y`eYIoxX0T(Cw?rQt zV}X!K)2s6}0~15AkMSNj2C@xstX6i3h`c2~d6n~1Y?&Uz9F%Fh|C@}^z2A21)_BKm zEkN@EfCZ2q>Dw?S1Eun{at2$a-sJNgS=3LbFu{Or;4Lz{YiF+_IcjncdGWU4jn;c! zmp|yTNtcaWME}<5#~LnE9ZPuZA?w7?|!^utPeoptsjOX{B(&|=k=MbdK-T$@1~ zHT2JR)>ZhX@r3PDO%e)NXpcRO?(pu#+ z5?`>@-&utnmXR1>j09n+U?kdG)vdj4i4vB~u<>uB%qdh*sbh6iVd%JeuHtwa+qlCo zUx>}DQNa88-7dECIThd7#L-@*fNN>h?NCx&0lSeeaK4#D!uf+puPc~PfhD9cak_V1 zZ!`ZpKEQM36?ChtU=0*(6s&=t^o3UnRq(QZ5uSbYWW<~ZRO6>vCv$NEH+W$He(Pjt@A6D>ay-^)F!PIwW6+IqxU*n{!>uo?@Ysuw=Rb zc$Eg2C8UnyB*1Y@CZgk!Nnqu7D(TQK$iHUOVC6}bn{i)n%m1KHsJcW_UuID|ztsB` zn29sdrk4%XoQ^k=>KHK}ROgj?b1`L+v(X>=-wg;K`i7hY&3tb|QO8i@S9!!@u?Cez z;~O+g{jcBKX+Gx8`o>ns~~w52u4EgU)QKuQ2JqJ_x-%?H{Mtp$wUchivF-n)&47bc<6XbIj?6WYp%7xX4#=|IDSWH&4O`;crRPi z?U1}MAG{CVb#=iAp4?olQoZf#29=WIq>`*3_`r@{8a4m zJ>HS%jZ6+afk1w|a1|(08juv9C&;5ge)oX9$*gSKRPFOElB1h}xt25=1+8bts&r>% zV%;hAn#a5KOh4P#v)`Owu%5+O&m3h4ATZUjkc6-XzFK?OJU(t{PXNh=BL`!$9FHFO z#$oettpA571iJbi0l^}mhHXD26Pegu9kKXKt7v)F#b;Xg1=kt9vd)xJ$C|^{k+(Km z=UO&;XQKf1&d{Y?ms4~(QJ2A7kpJqjj~*plDDkqx{k1u>g!34_eB&-q!Iy7T#F&%? zG9R8T+Eyp(01wBk@oG3rOsCLt9We6O4_<(|chh+L)U-%z9gcL9+8x!fZ`^k)(@NHI zEKkz|`wXopdRT}o7H6WQK$E@ioaT=HmPe9PK&fFzYM8o;+pS~&4&GvEKBv_C=Qsft z=J#xv^o@s7BuITDNu(fgwRR5J2Q}tlP$YR_DWHp_YT)TH=GdLDP8Xj_yS%!BCM`ed z;3jn`Y|`!B)Fl5TgKN-~Qt$FZHfXAAkhagsDKtpldXiJDL5xf7DgeYwKPPqU@FZ+l z?{7{J2#S`Jx7Sk6d5ODgG*P(Ca3C(Q2&pT{4R(CNbxHd5&Y{N6j5<%n@oT9g+DsoC zsUtul%6_4%dSLQ68}&NmahLlQOjHF793wgpb{X8$O5+RUXuKaOI6cri&#=YDH5kx8 zE~m0%R9SA0&ph$q0sZyxf;k>%%_$gAX1J6F{UC>if6GTjgGGU4Q# zw*fyn`KHPgu}+MwUvT`u#27$ocN2p;BIQ7;Jd(PQ8ltpFV0+^c3|+j$`)9Qg{z$UK zEpjG86#sy0f!>s_!a_|)+S7SmLroocVzr+e!50Aj#^pRLKn=7q;E3&afAh-hM$ra zapE`l+r!>&0$WSDHTtlonS<@?_ZwHWL}@DjIe$LUL}+x!#0-r!13n2KG{jeFWCT8Y zOa2I?r%Y@gg?U{x3f;Z#ZWP?k)2Ki6AOan*vfx6H_2i9@=(!WNdUJt(?^<2zxU?9x zZl81Sb0_(9J8y#Fk20e^UjFJi`D-a#3x9v5l{3fwVO@JJ6LEZQ5{`7E`dP<+eI_wT zlenm7{etuQCVJE_n425^9xh>*5ziw!vMD&zSj<(hXL;tiY@cxa_pi{h2HqpnWFAKD zLZ*oisLwaNjSr~LThRCE`ih&Jr5EWT`AlTkOPVws_?Z8lw~=D(KPNKyJxx%0WQE(m z>-=`3$BLqfn%vIm1gz~YBCB}smB4z!XtydIo;1!0t-08`+r{?ZKG2;aprfzvtFH^K zuM0n_uQdjr*at7Wi*kva;LMTd4N-sF?GN4!Ela3g*YAI+-@soN2Y+26GJT(@?}~eW zt{#w04kN%oXL|lV!3UiDrVaVc9tF8dkM3)I{x=AKl9CfC$gHJvYH{Qq#~`7mKWKgt zfUe?Rf3xszqs@3+Tz|mrBG`$fE-;c(!2{^b!k@aJFSjrdzx2j4;Qzf*%N@*D0LGYO zraFmGvO1GC8{+#u)0glIrcaR0hj21dC6&-|&5?0RIFa||dZ6-1MZ=i!RtADmXIg+^ z#2PEa{dDCFbx5-0F@dU7m98_;6Zsc-4~D;f;qe2p4{6Hs97#>EeozaC^XS0r)P$fP zzgcibk(XHJdI5xpCkyytv1Jc;RFANG!*^+1fwt?T{FtwkG;SQWuv-Qu8o!91Bs{>X4@^JAmC77>(GWZO>=a83_GQ zVTEI zYtmJmdDugu=o77$s5h@ZuvaD3PAkqvww1lz*K|I9Q6KH{ZvB?(fWDZ=4;jJ=Z#dC0 z?|91Z7w^IqYVB%)E8Krb%u(dwqHGVBs>_JoY7eC^K3hP$Og6$`!dU#d?&L7W*dej> z7upnOZ`laGfBsK*W`ehlPkA7aarbA6AHW)Km=2l zgNQ*sCVa-n1e)S7f#wJk##l{;32GadaPQf!68$_RCfJG*poQ@B^Q;(W>M}x?;kulp z%kfy-tFU0m>+69nb%A9 zzO&gM4vu}r*-d6L{y*Hhs!d?AVzWla@)?9*MBGILO@wg6&zFb}Xp{8H)v0gzk zeqs-u=J%7hqN|B0*uSvObV>|#!izpmT47k>ODn+lqUK9LgGmYUSH?0#IpF~gmnfOwgycEUjzgb>{een`wQ)6sKAYpaDB|P1a zK3oh<1TLLC0l4f{A;54y+czYOsRS7^?4`uVu5N;a?cC#>Z#)D26EQLMLArP%sbiJr zmL$4xB&;-W>=SDG9&N^>X)SDJZE8x%xK!6j&~%PB`@i`kuwQu6K3kH)5)l%|`Iy&*+#u+%{T24Yjckc{p0&QDI;iTGme2Xr>n zSOalHgt2pv7dgwU^J_Wi-IBq)1mOpkELKjrO}Vhd>q(|y z^OCGCVMt77P?sAQ+M||4q#CJLj{(BEmdrf(H^V})_wa2Vb_;9FV4B)^o=M?C1G@4A16i>UT?yFg&70@wgPZB(u?*4LtTQlwJcpdmt=U-cyB1huty5~roR!*%cTevs7 z6G-w4_A)=^7wi@8@(Z@Z?kmE7wEN2NpSUZg*F}nDfgelLOklOUiKgM6L3*SQIYR5( z@k)<`|KXK+dL%^6&PE64ZaH}tg@W`5JvZ?bNw2h148d8Il29prm-rAWYqSp>BhlK6 z*yJwzEuUaIq#{RQQM*4FK94(8sWB{5O&(T+WA0&PxRwX!R#y6-Q3HIvX*2UP0w6$e zxILPD(gfP1luN(&z1|^+QEe_$h?%Sh_s@uYQeg~%o2U6TPq@pOh*vzx|wWd42W}7(#zgBds zp#1D~vr6Olkp6tVC`h}Z2fu3U_$J>@zK>H&Lca7F6TiVO0d%7XN%@x_HU=Pi6hO z^Ct0ezLBzRQM}!`#jBZOSiCMB;TA9bbc+{TdKdObCyF-ln)6H_aXcyr5pe=?P%dm|&`dcB`KV?d4#yAEd}#YB>f*fI zXxwL)EyBrA9;wtPjj`?`fUE8PNcbmqe=z)0?nWYi<{mh8=pI&vf9@Xq!y0VU5vy^ zTm7P(NC@3}9N%T}zK5c~Ex9P?AfxlJHd`*w%){Dj&MG<&YqRaEJgm*Gh^5^DO}^>y zqgzZ*jwAy zzt|T?F2F}j!=ba#LqVQ*-e`du}QAz23h=du3OfRJp52*1kBq#X7SPZL4=HXz3+&X_Oi^ zT|8zuELVEqUmhA&n>5YOu`=c82Ypg%y&b@n^qG_Yl`qbb{AQ=y+>C+9`0^XAAzG<~pGceIqahVT zixOu9M!T{F6#oE_4+RVW>v?}O;se|a@=Atk>W-9bj2ULm0w&Nm3X#bERgF1(aH#P? zJ*81HgUxb)ATNjJ072eU@r=nUDR!lWMg&=wik3}l<9IBf1-)~3q51*m3_)kTwI0o98QQ~_D~T@rnwx`gf(aTlWq^VuQt#JTp0 zyS<7f?S$YieN9FBMpKiq>)IH_QpMq4<;(NVb4zggjDK8>wBweol6E+kp7>)!4Dnvp z#vWfgCEg0$ULuB|eyGp6$aI1}xH*V|ZCGqg#q+>d28}L4R zVa(ksbY_dpIwoz}<&Cs*@$zypW*xl94&nTt)k|bS>|=t@sus0;YZgU)YZQZLbxJIY z7TX9$u>HmzeLNNhtCG&aWVLydL?2aIS_e9M>>oA^3La-a0lwDMC5ddOsybs z3RA2%&g>PZI#n>fv0>|Rq2`;tK9AWe+VkT3XZmKZ&w5{2=@%-1wxO4K4!uVgK9Ldq z(O(4t?Q&VBrK-d$KS7x08sN`&RO*B!j|pG20k7fY?k$|7)FGaUHh-BrKUzK``9gC} zzHm#sd|{W+f~{(aX#^g$P*Lh@5x?u#CM4@nVDNuJfirKiy&ds9tJY{aaj(8{K%+-cqKP2 zr8mGb;YvkM@P&8^wr1HRNU%!VO69(v~O^ zVN*bA_us+`I2sGkDSncWMhvL&;_6c#1TR@cecnG=ptZ~pTtwO`ptBYd^?ACL32|0_x~wLs>2T1l={)#N z*OTB&Jq?UPcc# z>JLKS!VXC&Vhu%5;Tn4C=zgOiv8}>pzqKqQJ2>aG3BlZ2*8e{Xp%)8vCR3v*S3S)U z2=3x85cKpuU3@aN(lEC^`(?E^z|WR9vX-5ZRk0db6?2FN-gzuCe>Z^QAOtKf8i8#z z&0D(-pa8(R@}5(HT(LjRZ>vpTjNVn4sw1Q zqWoC$Z5%*)_oUslXc~|L6Oh#j%Gg9~K^nX^m<2j>2&T#52;a=TlXZEnk0A$6b^6rH z`=Z2Qah-0XtM>Zj#qlbvMl?ahNdyJj0$(-ZL z|06%M$MC)r#d3REzX>{a>P8+!NCn3l-BR5Z{>~?ucmisuSEHG_odOMr-*)?bkFl=- z@ASZz;hoOkEK=(i7LeQnM&z*AOgbx=Mp#A6{T5Y}KJ_@Yk^0rP815%wtM;H>nz4tK z?n`e7F^++Y+QWY5WiLCxm_;#C(d1L8p!V#_jMDysMdmFKavw26V0RLgK#RJ08Zrru%C){YybB;hf6Go-$N8oE4zY6R0C99qv@lEaNhP5 zCd@FWY9`Du^e|zDp$DNRlCP6gYlMi1Qad7|)T}ysr;mnFe#i&!J6-UcuE-g=Iu8u% zp)3nnX^Nj2$YvvRrDYKS?^A18^)+|=x93*>8AZ(&J&K*2uCNb;z*#TI7gceG zHT7gRC&9VIr?xVWGoRRoKkL_C(`*qIxzTp40{qpgfs>C+hy%9bJC%O-SG51}lYwlO z%m+yNEDA#(KH(68Ct}JTU%G&+DVg$FuV`|!Qyvi{G2q)`$-mSlpQ}x7&n)1yidToq z)4P%j^XpBO{u8zjxr1?OJeXR1@}aji zxi2l5eta6SyB0lyf;PQWlYAw!6$t=o%q%BpY4%SCyy#1HKn>KGr&o#AQE0j!)IFMO_xo z*Ew{TYUH+qRU=NH(W_mb!Ff@?1}1~!CI~5-r-iQ*l`mD(3j7H2>n72No1hU+)f9X; zg@n2uLU$`%M~LIYeluGdK8Tj;gESOHN{H&ynbtlS?r1e3q3+}!R)l3JP7y1^#YzhN zc~j|L(5h(it$^*88%oD^TRarUc3VIc$99{`NXK^1MPPrgF~DG&{1GOEnC6f$A%rxC zgo#0V5(k?QLe7=!I8lNBRP5O{)BKc_uukA4G1Ya=E5mZTa==-fzdr-9N^(}aVNAyz z5I5u#kT=I|i_A@@S3Y^WgWOQuN0j53nU1{KXP-G&pOuEjd@AyWxKuD#M7*~WZrS4B z9LEhw+_grAvlp0wmalsg5X&0J9jK+MPqly4KwPU$h5$8|TBdV8vDB?vIpvHD_q|oX z=go-iVlF0*b8XfO*Jc;BpHSm)n$AQj2dcZ)Skf;izc@d?(s0=AL`poQmoy`GvbR*i zfj)lxi{A&OE6Nt@3t6K;!ib1J{kE>5mxJe9`K9T zG4@D1X7Cm2W4z8my9Z(G6Ep~Hjpt$O^**+$i_LsC{@e*3(O=BPBW!@0&vAsR{YSu? zAM+GQ`m0A-NZ>a4vmH*unB%sA;-SXhO8WtFPi7L@_m$eH(*y&Ibn%Oujol3T<(+Va z!+6WXnzTTG;?SR^geGRLR;fW#f_D3~VT3g4hPy2rT^s$M8@;D{!J9mx%LXpUC)eqD zjV||d`J_^N1-KdH=^>*vRc?|~9>W`3`;Tl%N-8#m1L&u*~t=DRjh`SRp2_=X7> z8nx2vh&d!0aEly1q(ec3&C(v)$Qba~Bpg>-S+6)0iK1;~-Cv1XsDcm!n!l`uVPl^wT2J zx6EE2f;tHRw^-ecVQIq@Y-=@lOpk~MXh08yttQ3e^^Wi5U^4)V?-J)Pmn$eP7DOId z)ym6Sz(Bq3sa_9{j!zB0SG}&QbG^3L-J^(eRus6csY%{z9-7CcFZ>tlNQWB`^u5n% zf*+{e>EhSMAph-msZfnTReD$81q`9?U78e*v>Y6|!*o3@rbn>Gza9og&m9+l|w zc-5eR+3O<7O(F4LUVlPS2zm9L5HzJ|Jd!sJsA`_eVTAq9YlDL-5yi(hdmNznC>X$& z*dazxb`u5driGhmp<>ix6EpK@wK=IaOMG46(}(p9@Bg%q@i;2+8P4NxS=`G!4wyGM zz0I2bQ%|8L`IyL!jdSDXJWiN@0pRXmWvZm}MOeHqFE}&~d<~4BB7^%^;wm3S$0N^a1Udd! z=FRP{0URYQmX20Nl5B?Ay}4oZRwAZ3+%(L$LfkZTw^H)-PoHWUfP-e6=S_zN?;6Da z_b?^d&p>PQ{o9@X;(i=~LAZr}idcLYG&m)+Y+c{O7z`NQK11L+>Of6O!+;`&};Bp5#nyNppwK z%O)V9yLXKn1}m2wDojX9MubHw&g4_C3NWoShIgp2i}|rO;4~wetl8pKCu3XoR3{g0 zL6`Z`GlKH6+Ei@IF7GQ{1?T-`8WT-U+p;SF@sEYL%ugUi_3xL3nzm9Q4E5&4M@G|8 z4(R)fu79(*a*@iX#393<&%m-X=Whwun4?pvSgLatlYG2NKgk%~MW+}eImPmR{v2zr zduDL;rNeVtFL;pX2hUSJLK4cedgp#c?6VT#H+ zPm>@S>CBUo`lq4XEFv7SSwy%B^QM7!CpQ@QRiqupLCKfr;d9Ihtr&1s&E__MSc2ZWlwO0#xvJE8bEJJy*$rG! z$LUGJj5*48Lsi3=>o#lP%IQke86yF{yIe1l?|R>2MFv_N!o0x;*G5;7h^D$rQJ>KA zu8Mu;>?-kB(k*)GujZ37w8jXFMdp1hj#WN6?+Y;n;dv^+)c+X=rdHp7D9CvuXiXH; zuH?&pqx}|3ji=JJLd4Pom+v1{bU||3W^Zh=X7ir0JOMq|JgGtGbwO&{W)vRVy}g~x z08D(v1tiO%?8oAy(XY%%b~<^>dfuaKHZ{czo1{)|6U&3YiPe+l$%IZOus5L-N@6r6 z+7}ij2qE~06;TxLB1S%I7MxZ37BA5YJ-Dc4qIvf;RmUE9F`fwJpFo% zUz~D4MSn$Uq~UBf!;+Orf4tM~zHI;lvBw6&M-u^qHH?!~DR{UkCEg2HGui1Le<;S@ zj7d~-VObHADJ<%%-%PTK^;WyIKlIa#bx#-1%AQrUj_w$WsT{Lv<^kgT!!zh}y7(#_dr+d9~)qdTS=}>mpIDY=A=D@R0-MIdwJlz?YhdkoauDPE?+&E z^A+bB_Yxzn!#6KV^y*~-oP`RvzBo43|AB#$Z!8C(HKaa9n% ztsr{4-3o3$omB2}=S9+?Q%(Y2r6&ctX(kQfnpPUBg2p1nknw|!I+)G*vraAYz7cT? z$0{;1Md^X>efjL7hcC9iIO7QMshR*Cv$^@~qUwj|@)1k8?|qRU>n>3Lu4NjHl#)zt zTN=iE_c4*PQqK7G^*)QQ&-OEZeT7Ksigxf7-1%?MRlzeuP{*?fv1oKGc~PWcOjHFb zEWkZxE1o6l_eE9S3#d_oSD3v@JseA3QKbRUSgVLFKsi!*t!0wVo50S5^Cqx!L86pa zc-(4tcs#pfXw6;L&zcDl_?>$1f<&nYA62ZX(o%Q0AW?%gZi$B1@~L#897^a-kP>_W zkaVFK;X4~|P3IS*}gUGc3#%Z?*8XJ(?+sgV!LS@G<; zDBCH;EpYt*Zkq2(3sc&Ru(nj;uuj#yr3i#_Y*JnSLD$4FRwf!=KQzGy7D)1gt~g~* z{>z)xO%v;Yz(1>D{SP%7wUzAHm9&QzntQ%<@!H+Qma1$`;J@@$WPHh2*HIV7SKrcj zHZ1JR4uN0G`4vlzWsNy9+OVg~&8KrMPN0UYynJT-s>D~T>u>BlH$F9cg}x@H@&1ad zW?rAT81*C{u8LP@BYfdVPjv0fYv#_2pE~QB+R6@z&*^)~byvj)XNU5=d*b-q_p9{1 zr#{EySItdyeSGXtLKxFNLFNHl5%DuEjBvDa`@A{+hSK(WjH(u;J+vM)6g$O^8fPB? zi?eaG^UphV^}$>YWg7qGkEiWlDKEFdH1(-UmVi?Hj`k-Lk~QmLbYkmabQZ0L(W!3* zkwcA1c7+$DCavG)mF^RHz>e|alFU5bntWIKQSWwLzOKs(U6$*zlne6Xg?he0mpQu3 z(&cJhuHeG=soYGeJW+@CCS&(KUCt&imo4}evIW0Vw%{{l3x1WP%5`4X*Xc2e*NM`| zPL@P@x*SekE*b6>$Pko8Z)b2-CP|d*G8g~#5Yk&GUv~bueHru6NE$co(1Sx#?_gKp zTx|khl3WoVVg_q%;G`VCt*Mdb*LybN$8Lx4(`mu5Ti~WzH3ya3B$yaT37DKo3`fME zJlEQSf@aboyY5@vupT)j9#EF|WImnzahoJ(ub7szQ1IB9FcSEG>5-Vv5;Eye$jvS| zS4#*-@x-5~Ove9CPlB&Wyd!jX^1RaIO}!94B05|0DAV5($8pH%UZ3~ z=RMP9H${uuozdz!q7_4rhR25LIAHMPJ^l8lD3|&3cC2^XX>-cs*Bs2U+@iXmLAkkl zPjhvZxZU=-Di9)Z_*_aZ&1!$6pP&0b+`S8YRMpiso*=<+iDy8-a1RhA$SqMW86lEj z&@(V#1TRq#qacD(4KM@9bzl<6I1G+L6~(?qZL7Xjip6~E z)T$)3&ZY>)LCtwf5R;@4a?3aoklUj3tIr9z23hd?263PuX#cHDwYvFy)d2ep# zsNM?wI~?mTU|KzpO>`IA$Tgm(pU`vefZyVbIQkDe##P@$TE%c~V=K}9>@aA!XLUb& ziML%C=a<1hO|ghjl*L~-GyZ2Wc5JBx9%x2xe1BUzZx<=6ZH(REFs>c$hvLiI4IU$0 zQ-?#~@eT$YLZuGF@xknYABionJn_zwDmSr8%O)MYpha#VxnTZP$WQ+2g2G$u9~M_Q zL@LfzlRs(l_agrDKQxM;qT)5lU(-1LN)_*r_^TV2-(AIb@^(P^nT_IgKfJ;uc}7`{ z19lo&GPYp_z+%w%-#AMLOG#K66;xSPKsEhCsdBr>6=-qP2zYKz*AsOpJ2Q%dIQxV( ziSzcsuOwa$kO}jHO2Y$cYQ3)w@AQqofF#X$tNJvUMA52|`#XGq)OE@lj2bG~svj*- zH>k9h^8o>6^=ZSCQvk>7A`ewFB>s!*)8E>?spSar$|Mt_|9|m_4$zGSX*%3JC z-<#p9o9Tfcxw+l}^ugehV(iuk;L%?09^-=uPWo6}i-pjH;uY<`!4vVDi#lAYSc5T{~iEPVd`TGS9(6s__#( zX7Di;546vi#E%>KxQ-7uAJ_0P3J=OJ{vOIl4j=vT5Oty0Nd8di0mbGpd$rhJm5sf* zKD!{g|LQ~7(X1n2Nz$2#NIRn-vILpnNn6QV;+tH|5-S4AtyrDe6)#ZR^^o6PwDO}k zu57&YI%yIoIizOmR;B2jM_q9f9Lo(pRtbz^JN^VLVm^IMaPrg5BbZFhoKYa!?KPpv z-I7L!Ce_=Tg_Kh$gbhVuBl3zK#jO>Df!8B;Ol5&nPeT)W?tbc;{(oGct$K!Fgobpv zYedqh`pm!La`BmSwep7$DwBS(dQ19kYfol3|hs*R@$P>z<&F3YSjTK0va~j_;ZlDg%7i4CEDTy+E zY!{Q70JjkxNR4|S{8Up)weX56M{NM7h{sH3|Qph~8NV{V2M> zO5Gha)R_Gm_$QS1^;^S~NzR%dyLj0RYE_#;SzAQZ6#n9U@LCyVlm!7=D9cyeX@JY- zEU4mv!z}fqr9HKk4^tmk*D_*u3+QJ3E{WH|V|M$KqzK^q!qVUVsdk@z6knvaIZQ^w zoMnKz%0zmzAb#>y?2Jpt$e+_6hQ3o6z!gERyaMRjRAtjpm@YnkwIkv8YM zs5h||f>W3|q-ClvFbQq$9fIlWo%8Oz*V~^)8+H{^g85TEx|#Pdt6s$92JT}JPWq-) z5$g-yE*$gL%7YT3cCZ)thF|8r5=AF_FDvjlbG(;GW}yXCa12S&>#U%ldYDweaw9WY zQlynUoAc>)qNHpuU65>7lmyE(b0@+7s#TB$=_@;91!4T@E|sUF@@#KA9OLq&#etu% z{0lS(43v7{CQa~K{r><$2JjJ4&%`XM>6G4UHrGe9H;h*a_UYr z(Q-hf(_Ek!PrMf6VDjNj)b!gJb5Tb09C|*^lIvNrQ#9p{zd-F>{w4{52MyKvJM(~0 z(330^6#ozUWqL%3j!FbUJ}es(8oV-5_o9Sg+ScPjcO|<6Pm-lEraVc?Ev%5C1@0ca zsRh4dS4L8yd7p=!!maNzz<(zc^TA+Sc)e3MWeCrW zemRQM!@0oePjiS#Uflm+*C&KE$AwbhffW{mu}d7lM7~$8p#v`E<}$QqvK-8T@GQ`bV29{h50YK{@$o zWw!C_O`MFVl@Kw%v0V6H9)?!_CR>^KPa+H~K`Yb(EXuZBkikv0ROc$d)mFd6nMW>q zN!c(quq?p3Ufycoybf!fKkwD&g{CM*DiO(Ds+U{i=chExt6<0vw%#2$kH}!Z`rc3{ zv9E-mj1+ID0!xb6kRb&& z_DUpx>6Vg%*KJ@Q9W;g56)Na|XjkuIYhf2{)k8?jn^fkP;=qPhHU*fQ9!5Y5ZN;Vd zjTKc^IWBaIocCINrG#xvMc6eU^Ir9=2gav$42QiIGP=S2E7)LO&c#gVH7rT`*L(-R zP|1Z_8MkW+BxM8e%iN5I)SscP>Zqc6XywbK#TDrYKx0{qZ0zz84DQq@atA7H6LjU@ zaoX$1L&P&IQF`D3=JMz1|IHBz4pLSylW`c{E2AD8B#6mzyr+`ggKSdEs9lBU)weKt zkv(99PJR(944xYx!wATPMu7bOxdcG2J9j|NH_1ZOp8-ry@6s~?Li<%BPM-e;pzIDe z#L3`9PR$=nMWWLXw^==r0_&Ed5?cQCo964DxdPLE_8__yp9{00H8h zTj6+oP7yte<0>8Qu!Q^Z?~m$LALBZm({MWewL2N->yLObyiKMrVYv+zG8XoGYTaN| zUCCT<6QXNicP+VfC;4;3U%`Km@bM5ItMO2rXxxs&mTKqpqi6OJAzYWRs~afYi@Swa zt`bVL>~ABm9i#ah+&K!^FBKxg7d4I%3 zO~&_&#&_~|Y9c>K2l;u}1#5Df;bb=)Gb+UWQu1T6?bpKpc`>lg-htStW(xoqbgRKg zfRIXtG`=*KB4-AqR(~V(->~{XSoOF4^T>8&>gX^8HTSk%o=ffClNEJgfM7T#cpM2Z zNxu&>*az_wlW_bhXD+bX3~-{*i`yx8dRn`zCCrL)2Ol7?(C(@@TU;)Nh=(f?q)xsx zb>ybK&>wTCV>eQs+QcU+nVb{yzgc|iPG4tbKC)Jlb05@jRnLduJT|)k%eM?)> zniYnwf&yC=bGMZ2O0En?F2NmT$lA%5+s}&~$ouGh^ZP@ts*@uN{Kt~r$(8D0I!?xV z&d;edhhQBMHDkJD-T*6sw7;=(f;L`;*t1>ng&DCTobP#~x_zT5L+Qp3aTp99P#yia z>gav!=!2=O^l_rD3F9RCcmTM^_|>yyDs&C|dcYeX7hcN!9dC8*;j8WJ>C8mQuX34~ z{zbVX51z#Zne^p#OAMKEp)LHaUaSx~fz^k`Lc_2(k@$}%>&ew}8E+(0P?=6tUI4#n$26vxQJHD2=F$smx*KtVJMYn%2#+xlg(9949m?w0e8^2D|8cIsC7@}At+*Jy^y}63<&R$uW^N@ui|C<$TM%QmmM!t;MjlaR)SD=jx|pD*4XSYV_&{iLaHf0SuG~ z1L0Qw&X~lq#XqjUDFl!r|68$mI4Pl%E87P*B+?GSVC3?KV(V~xq8f|{*boeYg@-c! z;tqg;I7{zI&Dj$+c{D{`Ll?PAVmSAqSb6Hjrsx`s(V(k?zt4k)>!tM>N6gO0iGzi~eK23_RwJR+(*4 z`X`0+u=zJS26FD4pW*6zC?2!zvtfRzQfuAY0X%IANx2J^>%w4C>eCAfM11-qf=U#$1t zi;)B3-X1yJJ&)r|TB;Q74wxoZdojC4{~1RP1EB}`IKao-eC+092OhxxHvZns$4h)X zj|Wd5JPTZL{DmF|I!9wUqX>2T_62L8GoJoE(Vz@TF&*^WRM0N-X1aqvpni6M`U&_O z=${1T9ffxsQRmfD&_5NwzYNv75fkHn!NXiewE6?;KzmO4;`^gpe1CN7fCieUfIVbk z``L}sCs(Vy{vA*y>ZnSH5*jw&vHGN^tM8t1PvJFlSnlj+wBR}%BUs7jU9KEf6MbAM6Jb5F#uU+P8ykLXQo+vi@cRn z8k}z-{c{^O6_@FSi05>%uwq^2yYhY_^F6%v5H<(VK#TtiX^mPa_An_j?)uY-1Cg{G zl)))H4Uwb}-`2StTRhF7&82L`c$Wm7vWMJO8aPyc06)_8z#;Bo>47gXyg+?fKu~>1 zjFqhlzFy5-jTazP-YyF(R%bqp07AMJZ#~56DZnh{R(U|!;JkM_f@Y`7;r=othl{qm zdwM%VpS_zqH*VTY{-tpT+d_()BLOUE#024R$Zl2uI<0edblL!?SDXG66`Xn-`)HJ5ZbO&HgVJOawTP;Le-ktys}Sw#k5(`X;RkNfRhOHqU|g`~z-s=x z9DQ!t&-Cfqz)J6(3#U%kwWZ+39lG}V*CX+9@80m&nxn(hlZPiE$=>;+zSi0T;XokJ zWvm+pFtC6B!~W&C+uRsv+kq%h(>nC`D6c^Ixvd)1T+Zf zE85D>fmDDBixTAH$!yOjcnRn8trwOQHcDyc5hgb7WVR4e{}560^l zJ0hd0DWA7E7uaCYdb5J6+euB?tpub|f;?vPXb)No7#P$%q_pv|##06N5SDO0sT0cUY9X1`dHJ*gy&FF4)Y{Y}3LIMG&#JqH8 zQnCEl|8?#KKHrNWbSEs$ft?g}uy1N*k5V2n!*I!fqFqYps76ulSoaM;P;O*mNS|l% zhV03Jr8V@+TAV6I)(kk4 zpbx`idhF2X_Pd5A8S@2a>r@Wx(e&s2d7Yri9qeT+e8;jSP6gM41Qj&&K1C8k(V_Mm zFxI?}1Hgy;dB2v7{W&Ov1^AR(Si>KCa8scLlii@8<%vffPM{Ym9zAL+UZ`eMJk3oH zn?I9MFv8a;z4Y?AbM>AgK%X!_BG>jDu~6_WyA=WD6|k*bTIKlc?AY zJYlcHLnoJ4S%?b<$>CKO7q~VXhcia7@n+K}6lioY-KW~l#fEgB4%~gXkQB`bFlmWw z=w{JE_7KCxY#4Fv?z?krsJ+kCw;FcW^Ju|x_uL`(2&Ejnb0{)ES;8$u@3{l-808~a zCKtKvPO;Vy0YVY`|6%mMI%L73BNypGhfxYwmpo&^5OFQeGZq;(Ys*J+mEx5*fa%Q1cc3O-VY484)*{aFm`?%YG zpJdX???V4U-W52soAy9-R%X{b!n+Jp)HcM=bR|IbNNG_P}&5IrCjbtExM|`S>i8G-Q=CLj{4q&uB*A)~;%#@ZM9CZfPIO1sbU1eSXztB!x(hz8&bft# zxTb=rn=c>%#*3WU;i$+te_un9V>gcwy8>_7)lvRnE8B*#p~-(iizaQlHZ<)oSmK(N z2~m_G1>R$eB7*Njb_^A}?;txIknwGJ7f7a1%Bu{5KvF4`CacCj#@kE+$rTR?GYIE_ zDVWg`&6H$vx=19McwnCkaVE}b>5~^?4u>n@DuzGPh)if|Bp<;#F4 z)S<^Ke02*C!HfKg_PIEd+Z9D95XgqQ0}E2ehDQ7z#<|nj6N1j0DplUDgPVw9^iVs% z29?HmfT}=Ths4*<4iUs*d0BOgg6F%J1fB;4tZqqh@UUCJ0u2r+bMTo5SPDoidoSFu?v2GuhuRud8xtEp3l!hiw&d2T~)stA&s+CjIH_+1TU z9br0?dgYe9@#@v7ThW8_IwtajG|LiB7KJydUSa?3GgxGC1zWm;1<+7j>Hk*j9{Vxa zy_};ey263?83v^+L_wr+#}5Z3V}lx$(wP%dF9UBd5RXq`;|73`v6l0fr>w`Svm#UCd8(picw>+D zf9FuN?mL*D{#70A|8BmpSUUbCWwHrCai3GtyqQpSgA>xB&G~?I(9#2V;Rerc&av1; z1fht{JB2dJ;0u!woO)zJj5sv@VE(R7KwuKTE;EP_nNSyO?TMetac^vTg88$t?Jdl& zH}mllAJ5|v7IPfTCl2U`i+KJLav59E5MVxkB5}IS`SpqD{JJ|7J8OO|in28#VSc?) z2npLw!CHy)>&NfJ{Q9S@Kw3yG^o9XoJ(CArsk)k9W2i`Z_-2`3-}4i~1N#|M#LcfE z);Yia^-4=sXloQy3CpM}o@IV5rTQ20euI0lII0J+Wvi_&l4p!a9zv<)dMb;DM&pq8 zYH_fD33CQMp%P@`B@^Z>{NRN7QhBe-?1wj}sMWwWg$av+06e47E-Y5Ne=;=~OSL|J z#*Fo;MpNcMF@!~-paC?(3T4XtQh8KZTvORlSP-5w$@B%1QDl0OfS=NbH9X}|+%7fP zO@c^ZnzPAtssuzd=VQ>nWkz-?h2LkNk&!YQOt5A3skq4rHpz>YZ|i19Yeohy)AR+c zt+@~tO83H;63W~CEI7wm%c<2joLYVJ2GAk%F;I==uow40(Slg0m5-!24_=@Lua1sL z8&TW8g)TOt-gBXg==zS(#~(THgPMv3_3>DW&X=eVLRKuqD;+~qhkj5vG2tk|H;1Mf zc;gT2m5LR?k&75*5gn&Z(9tn}ehbs4+;Ps&=icQGoOA~war36OH-akOzFQ4aKIRs> zbNZun_s;Jc(w*I2LhcH{M>X_+Mdvmo?!b&x%$i=n%2fYPaR32Rs7$rthzKAvF0L#gU|^{pjN&_0A(x}5l8LF!Co)x(Ty#W%TqfX^ z26EZoN0Cb|bAnv*@y1^~xlCl#naO2lBXaq8;!x<<#)cUU2_|(pd)3xIH^8N)Y@f8u zdsagU`;RA>7kn&wMiT^cJ)p4&W>0G&m{ACc5e%v|HZdYfDsh1PN9ZJ<9vPto{7Z80 z-Fa^#@ezU!YWV$ts)4? zoiEZ`v7S%T+wQ2k*96oX6v2G~b9H9L=AS_qxod@#dmHKDo)qz_SeH!g^!K zC5-_BPOkt?)8-Wrr|!%Q;xtQe8cKO=G8CY7$)G*p7hIlFu@&xc{0xAeLwgTgfMS>a zuKZrz_1*c@_fbcOjt_BNuP7B4>IL-tUHM~h3voUf7?ElJ?9Gbw>|Oa|vAkDY1HWF8b;?vI+Wf-U9j>TwfEVudLTVU%eU7Bz-9o z>hQ9V&>86Kx4jzD*JX>&L|XF5I7Th(H<7cdpRTO<_z1tjmQ&RuPx*XG`G5=3a;nV!-iW}62lQ# za)PkrM3i8$B=&F0u6S-YLB^~msxAzUN~a1fm3Nk;m${b^W;^vnJkh&Fac z12L0Lp_SW&m{FMkyT};h=Eo8!pjE5nC)@39Kzr*2Z7w4(HtE(nOC?dckk)wO|bfe~HSok3(cTQmnHyed^iuHvkZ z11rg-m?|G3h;u%*vJ3oc9+y_y33s^y)f^3rQSILzr#ZjPBsf&vFW0Z~($)PZ{doiC zQ3&$N)%_=os!f!8_LZyqPngF+89J^CBE{=C?{NiOcDeDpXq!Po)f3!(-*r_T zvu;?05xpx0{gek$F4kzdK>O$J=;BaX3R{X+gG(*#$-<%89*xO)7w5mY$r#>!^09V; z+vJ;{fGEKg&!Mztk74lytf$ zb=()N2gbsZbKC=5ihrio#=PHHL&#V}LZM0d2?~cDs~QE+3V>YzxVPK>#xbGj{29lh zwNN*Z6%Trh4`v=3ADne4_3Gf{Lk>;tuX|f7r-e<{zd3OrU2v&(0k@l%${MXJI2udl zx1thQ1(v27&$K*>jwDN<_h#4>P4beKSr$3stptdueUvz4S)j;5E<`QhM3eOt1a`B^ zjrbYu{tj?f4)63_g=aVl*n$FhOJ_F>5m#fLjww7MzAn&;uX12%_iBgP3L7Zlv2HG1 z-r=6s%#&B+UOM3LXLCu9?Z*cvpTyP19~lE*Ri?~faq?qe zy2y`bZdUSx-KPgdeqfsuhM^)QKS;&4{HVZhB|k8fxM@F7C-+5uAO}fX#6`UPU?xfz zos2G}H7!35KJsJb2dh%@L%Q0Q9}JF@A6H)l27OXmscwY8nq!>&xQ*4q=>o*hX~+*Z zm%QDlAwRyDE%F05Zk;}1EXRG~B0os<*PlKY`61Aawn@ikF_M-7(2^g|bOdo#U2~0v*M1F8v`*)G^ zU7>v3f4fU}?q8CPW0RoxUF(p|nTjnGxW_)yqCmV2ct3E_cI&N?<4PyY0!)OkYpu2! z9Z;pLMHb!J%!_k#b5bLg$e9ZJ>8NxTGb#hckSvqD<8}Yi)Fe-D7iYfSeDDzzudlV6 zuU5BKCVD(o9}Q#53(asX?IpiI+HEAl!a`C7P>i^jN5$P_+XnI7z}o# zy0G2cZpL9-G;_CHDet>nkIGopC_;capt16UdhT&c*?jqMZsdR|;%jY6RoNc8!b*E? zEh@Fp7&e86IG>ZOCB|4}r2_dR%A|~%0Z;Z?h}%d}5Cjr+eyLAuTi`$wPW6O;^N!zO zG7w6;mL&&pochlDK!?hO1JmM&{`=37WfiF6!huKrtyAL`EWyPG9f1WXGw&uTXT(8& zURM_6fsK9f!Bk@t%8(6j6!C=zQzIJcJo0d?H2~*r`4rCm+Gcesr==nu%ncku{k6#+ z96lmjEP{~Raxd$^zPHxKc&Xt+m&9F&;=W~Z(GJ69#@O)``>x*w`apNBKpRzebwzhg z+kx?+aECoU?DM8zpLwJu9tCuzo8;~0g2OP7P6zfGG%mbu9>ZtbF^=?oej_ z_(0c>uMQM`3=lgAh`cWQ<5c50tf+_(zKTNlW9*Hql)HCy=gIkKQk9v7IjYec+%N01 zcw2J##2WSiDDMvh`sv=h_Q@M!XK6H)>ih;_=Wd6!5NHT0(Ba2IF47yT)^BZlA&U2^G z;(V+Z5HgE9qy~FyHiOv|E?>not<=F^oXeD^!_oI=$kN4oGb^fLZWMcn?@-#wW$=1L zi;*!V=_pTNl)smxY& z)~Mp#Rj8P|;*A6KaHD;W6{&R$www-F%Adn(BIa1py1Q#-tFa>o{ENDKY2}lM)zEhF zc8iG{C!53YCU)A+=TxqgGr9R-+wHPs=nh>|4;8i$EpzVHRwVP@Ab?JrJVqe3tGb!^ zmz5(4WPkK~_5~Q$$9_?R+ZBH?6O4k<0{tibX5mS9ejT}jedZ%TBwc%{GUf6SSlxN? z?=%WE%EP*u!$z~!glxMB>}u77Qf^wx4h>H--$wgoNaDP4UJrQxco~l1ml%ULaMaZwvbTPhvlA;v1B{lAO^abwC4WdI&fl1Jn`&xs@{`wh-Y~-2C6e25S zGZKhwzY|2}`udDS#vJEJWc%Q~AN^xa16b&PI#H{ST-OAH=WGOnLzW~NCrK#~JOd&K$p3D4vbP%)qRrz&&3C{l#VMTqN-FrS5)Q7E zNWB-5mFvD)U5%m=SmyCW^o70uwgqGGXl6u(}$z|XuXiH}hMj0r@<{9%NLLN$4&C+&%nphf2#lI7C(;)TUmT*`7Esg#mXQu9p|IqKUoHmM*$)l5IG;6)dE%e^KP4Z_RcC{u?hVB0 zSySBUJ};V;1x(@SRMP3vklCTWMpRG9Cb!HKJ1jfEf`Q{8Xuq$#2Raq}s3lk6AaATt*0a5V8L{)`joI8|%9u8SAy%Il~ z;RhUkLRW+d7AC#Pd$MuU)gEkGc`u5WjtV>t;JJDg`1b(3+KW6dl0VyHy4&Z^pimSY z7Gkl7QJ&G_7`j)lGDqsk2lNBAy1xqRm-eQSl>1VsSno4Fy_!0;6%1;Uasp#8_2Sv3 ztP)TJ_ct`7{;=(FiyW>(G&a}B6nwj7C@d4~vVNipjG7i2AQzTXSO65-1c$Vm4MwxxTmef_sM`><&bpU~^ahW@p#je!YINW@ z7tq|!Pc;91h`_vjk~?_CwSlgmUK4PC3V;?)5&m6_IoP#9_ot~wD}XbOX8W4IJTCHQzNH|s7(l><*o0#I{a6;{5wv&=qcjk^I!;%gxPCc|GQP`kwa@hiwXTAsvv2hpHM2$P}!1%)T zQLeOwy3I}<1Sr!!yLwQP@ym@h*7^M5Ogog196tI>axgv?No}roM!Ej~oR#a_Dt7nP zrg^r5;nO`(PEs~#pvIxc6vMA4qChz_h#?V*XJB|@4VjlFD~A7Wlwx=ZMph{&%J9P` zv+p%9yzz%e61m+Hy)bP9MP<@a;PzHFx6{8Gt#bgY5x;+a7Jes3jtj-}I~@`w@cXZq z$@nQOzx;o~^6Bt@Lu`Ojuq1*5NBAKB=K}^gZ4EqaP6Lt;991mO1d8Reh2_&Hk>#?(3R{09wqcd2mvH+WebPx2Rze+^+4$J_pU zg!308L1WJM-6EV{8s&Tkz_K{syd|FP2Qz<+?Kh$ti|t3S44dt1uuhW5_FTUYSv*fw z8$2(^F2VC~r8t44nC}YgbM<}C6`FV&Cly^hISGc>!SJr0@8WQa!{+!A@f@EEh`{kj zPv;~V&H{x^35#;PLYfUV2eC@&7Z`Hnt@!`!tiKG!Tde~!z~~*%bAf^dsoZG=V&IOeba@A`Om5v>&dnEcfeheFHD1DzMNk^6s_5W|5o5UK zKuqKr%L*#xceBek{*Z-|^-J;CiHgotuF<0DLSIfWt;Y2a=Pq^~mS2V{_+>aDei>@Q zVSv`HS9fvD@ZP*hI;oZae0om|d+_@f)*L&KChbO~F`oO)A-1T)a(rM}sD_z4$nVMT zvG5uxnUvoI^JXEjhBBIXJ907hlPGlk< zX~!K8JbFO-ci9i&eq~pM`#D!N0g;9K&ydC#a85uu(*Dv#`X<_Z0kg&%1@lfD%yWaU zqk`}79Kmg6=lH_U4Dk#?yy%5)-iy7NMDXEcOmW)YTbJ&2`N?y-T>&RM-` zusY+x$^!TDx-j5k@0@dt14AmXu?KskL=MIQbVUL{ku~wHx8%pT#QK$I$;Ne`==me- zmif1ws*HBWgNfBE`SoMk|6^e=u1Ex+iS}zN*JCh>;vkB5;9ctvi@OoQSq>RgErvfqnIqS&FtW+&4km_m#%emRf%qZcEw*h_yb2z6VF!X7g8PZ8NS4 z!1=@6i4L+9l*cYc=@(~UsqgQLuQ&4RxT>W5MbYx3xHHZR+x!EYoS)nG|3m3}^ zb6G#olPl-}?nY%9Uwoc`o_q^E`GTIp+_8mcLr+lxnC9)ojKDX@hA-%FUI?>!5PF|; ztiy{v3s^PBI=$gVy-i7zuyN|%gtq@CuI>CO2qw=dq1No&bwB=UoGt^`}oLJGX zR7FyLQLKE*2k+2$*-(lWKt6EQ{~Kdm_aDikMwi5Do8nL0Um4FIprPpYzA&Y=R_;f9 zLW`@ta~IBzhf-v=7LncsiztG~un8i=TZrtVvhWxW-_!6W(`h`QecB~H`Y_Mie)>mv_ z+k6QI2!`LYrxZSo_2hlV7T8?iF0#hv*ex;-XeftYo|QmIE93fi(vPYi`^s5=sLdWd z)Vx{`b=_yog9CIxu>b53WG6yU7Ny@?qxIYJ;VSJlB_F0cAs~i8TC~fZ*v{J@KQ7Fj zc%ip9ezaHeqrJByK04%1><|?seaxo0$$0Ue1RSie??)X2leYx}5KS7_%6|r16Ye+1 z$3zF*j^j&d0H8Mc-BskDb7EJmd=3Hta0Y;dXa8yZ+FS(h3WZ6KZ&?1Hph9}*PVB9f zkH!be1(`7(rDtj7ITAJzE~1NawesHh3Kr#C<>zbV?IfVkIT5E*Ti`e9(yjY5QKhbx ze+2^%svMI$ag0{}XZ11Gs(-9j{w_jLWf3YX(#qddUnO?^CAe@HLAc5t@3nO~cW=2+#=LHkw6+}w${VeL+Qpt1$g_ASuLuamH~VsUeZ z`O?bs5Ecy6Sma#Gr&iuiLO2(S@wam=zqN7=aoTHP4wTVI_WyL}T83%mUxMgyEtPnR zw~ap-|8v(eL@VbB3`B3hNA6lawesx<(u3iR_|Tne`O?atRbiX(VZ*u~N`zPuOWn^ywouI1B9 zf16!I*x+_tipdOFsezo#rJT&i7Qq%vZls*bfHgh9MKOqSPYs5u$?xIeu7Rq3g7jmY z`m+f4mpLXd4NE9I2pPXvOxqvem-}F@@xCPUu8jor;D(c`U)l z?{vujyW&NTxw^p)YLWjlWAcx(#|vdn$Gk(y2j~d}*4)DxEb0n@eD-kuaU zkThO6F({&xp=QC|f0I&;E`X{j&BAzUdIDf`8w^Zpco6+UTS?+dgb_kTkf1af2o-$U z@^Op&j+2jc5gwC|yzG|%Tk-?)ag_=Y$Z;15?mvQ5^m_0M5^-X#_iji-=fr&P9l;_B zLGLXTfC@j9f8H@Djve@j!(y`ipB0b&B8vRFE>R@mRevHXAzW(?O zh`RsI1VnuX%dmwUyx4!*$_GJ|4e>J_@N^phMz0=m4Kft z6{5zEF8CmhZ2I8%alVAv<43LFKi?`pUn?hvE7U2eK=dVyAG=itsPTiFt%*mge=vSL zix5<4jUN=KdT?Ti#AC!NQ5|THABzwjESiOZ!#fuh$)Mq#i2~>3PMqT{!4HlT-kX}} zq5Fvr&O1z z{v)#{_8&)rSpV%;Uv~eYBg?lT$nL-2$nS*l{|N-yU1|Hhk01Xz64?DZ7Zoi4*DmnF zk&O)X7z`?qz$cF(4h|yOMekIUXnhH_$m4uIm^!0fHebGNe0)711`*pJPnJ zNT}bX>bK1W4w<=g8rwSPYVRD|o~F_k5L-=~OIs(v5;hk#t(Vy#3Vwc+{pau*M#+aK z$M;7h-u|;R)_%)AJ}tr8QsupV;RNtx2IPK*7u%B^`81`BRi>2Og$ec|vBZ>rn5c`1 z<_*f4f*)ftjOmDOawz{|Qaq5DKbVt#7(d#|UxE&!@;5pO$=L({=s3~Iv4K~so#5#% zKP)Vzm^8Tb;NTiPIO08QH+nA>8}KlBaDETfT!s>vP%y(j9Eme-YAqCZX>9c1St#yP z%Ezq~HMmK};k?50h&55EZH|LaYR-b6%~_-NGaB+amjQ6FrEwjhSwd6I%bRYe^nVw& z&B#F`4Z4OmR$&M*R$$Dz756{9e#-~-kwZ4UG<>V^DGoo_kd$)Qb%T<&Wul~lpF4^3^75wb?(W{O(N6;%%MnD7)#x{?|t3cyt&nX%}d zcj|W~CFAoYe3Dl&WlXzbvAvmlQZ)XdxOn$Cdn@+vX#DKB_)~Wy9*08Ue={0?U0nRf z(fCvQ?fP@#;@{$N7}-pIBpTl~E`DDL;&Ji;`wOG-Uk!-C|57x5Lp1(CT>SetAwPF3 z7>iWAKX3Lh?mjqQC^G^Zb;@Hc7AL{}EXx;Q5gZV31-OYZ&4&m@uG6u?#{QU2O{mcWuL`df$ZKEYNA z+~g=EH{?VeNpA54fN3%3?t`HgdO%(zJ{*%z$v`#6q!-`8z6s9l;VZ|V7aVG}5(y(= z*!qml(m;H=0+;hJoH-xV<3$QxH&CpL;i_Cd zwrl3s@AvLUDBL8q#ql6J2g@yjP}W0$7g%YWf@xKmOzX4KvL$Cr%Ur5{{>mpLcsS-3 z@fRMBxh4FChhuIjf8pVH#izR9WxiQkO>?P*&Zr5q+=L*loSnfucsOQf^A{eD*>K#{ zb`E*~*9o9Mxw~vB@fxD12y`;hXLYi;x0XB(OX0ZB`F8aTJTNvpNUCZaW(_?LZHK%JxZ34RT-~I?0;DFnr(< z{UB^z-q^=3@9mlN!c4+0!JC9V18?JoiPTH1OrS@}1nfvA?8##$ZL^gL>6l6EC+3Ex z^Kmh={~+Jxf;Gr@ivLzy{I^|Li3CknB0-b? zpnn{>R&kzW1LsLLaGv5om5rPy*}!?sX8tP5bcy`+k3|0BHs@51Td3}THJ`Qk*Z7R| zvtQ_^0VBl^b^kk9jigYCAyRI+;80nyI&<-VcF0rww`i`-e{C=M{~iAk3mnRbol<$@ z{tLW~(e5A5m2!YyN`v|)rGcGUnt4-{UF~5p`d0G`+N`7VKmV3zF&#|uE>lM0;Cj04 z$F1d+VkF#BjhDDIj!~;Gb8TRt_Y#N>0w{(d7hHcb+x#adOqA6R8&))3x)}d9=hdp7-K&Sj{F5i&?8D<<>B%2Peggi+wb9<&8f!o{TGE-(yhV!$|X-cj5mDbG#z1)aqe9&<1yMLz{;_?npD% zzrDY~o!s!hl3tIEkrK9Xbf0a7GBkXiR_A&rdoVo65rA_xkR;z+Bu zVh{T+7#3VO4{9r3mhUZ1FOKg3g$ZFgg)8%k>hfB)Xl!qJ@HG-LExWLU`gXUJQTvjcE;kq~8>gFpXlSTV_~Y?=i@);0ufjd{&Wpp^8uE&^Vilf*8OWsr%%D#p3wN6zu$clhdjnxES{{B;@H>OZ2L{<>w$mig;?dHZj5NV7Za+B*zI z^Nw9uL|pe06)C-D4#cb5qKu_U#v^||STDHD2EF#3g%c<6uV>*gn=sL;Qg;Y=gr^X} zV|EmeohvLnO4oqM0es})XlY08kTDWCy(zXtbN_%@%>E8XqFeS2H4Io+T0#Hg=;7P)80l0i2*G^IR_8N>>~cc!!f&rzwmI(F6A#g z954B#)V4B-5Bg@2LjuPU(O_PS5KiC|X2J|Z4Q*%R;b0AIS(k$~v}Iim*3g!9Iiz@e zNOi`gP>8{np}fw+oJnt74hVQckIm&_vyFJ;8elT5!kMv9k@LjqLe9^313B+L4oQ%5 zOt5Bj-VbMrFhCqbPE-1_4*V#^LrnlnGvuro zZ#1=e!wId`B^~TzV$>*dc@(g(^p$mBVM{ zsE`~n-!R04k*?CVwbF*IwCni}r38mV&~`>T-GWfuU||Hb^wSlpm()_~Zn!ohyGdIC z*?Q))NR)O^;=)LsDFq+DLpbh=&fvHkunJ<-U}@3VhX>q?!XvVhkFSHS@nO!DH^a?m zNa|Ma^1CO#jkV0Y29HML?9KU&$Jt-n4(d3*&WoL|fP~J1WAg5` zF03M^^e72af86#vssGhUs(xK*D5{18ihWom3|a|`nXm+aCcOec;g(8zL06Y#LjC$= znF17Q8i|e_0GQEr#&dTHd95fB@;Y)6$m_c!Ag|e2ury}jp(w;CxYFtwb3OR9V(`` z6%*;+-UpHB8OAS_V^SZw_&vT(4D0M1u zx)>er0EC#_6lSKYpiahl2qN93t65Z@w~dPFY?!wT9g3?;kN*_ zS}^2NO#9FjeQGuMm;N7CbVW3+1`8UC7%Zs6!AlwCI;S1!6cE{fv%R*tO)Ht7`{s1P z)&=96r-%fm;320#6+p)U3ADAh7Z)Cnh3;a{?)}HH#5E$vS|5ZT9#2aYmgB3Hk}w{= zXZ)&(!d?e?CUIg1Dd*tqJS$KQ{_C>-6nFo$gv4?9YbWz`lK=sU&L(9=`sN%_lQlhr zX&fTk8>?=B$|n;zl^CEQdp7PmTXI-im4b?-e2N_^Jl{uUt|&ZudA+BDws~+4_YdUz zPW$GbPs>VDq^lk{Wklf1PL;;man&m(pM=PNdb0N__$YVaeplQgJ_7qXk1nDAjZ@mn zHOLLMq`4DXi5FWu=yf49AzAh(;QqCr;Cd1**;lv7QxJi-8^|Ky`{_ra`OEoCIi~|N z#PwKCOg>LsM1(oBGuKIfvBbhFX{q;quQnq8utX zx}f?A%SV&#FKWBGHViI4XCR)c6&0dFC{k323ZZgw!)sv$=ooLhz0Aj(PKUXV*jJlO z&v5WuijP7N(_<6S+sof%okYcPD*F=mADyQZ2Ebmx-y+CIw18V!!FUARhE0txrzRY& zPu>Z9GDTl{cmBT*sBw@|Emm_`CSkBO>8J)9_4xB@W+md;G1S)CF*WjDm-#;5=$J!z ztM+XhN`A0P1O}*)Qm17PP{|X?0^Pn6-}Xd~PM@Si7-FSFUVz0S%@-O{o52G*O=dV$M=x zIw`n`qCV_DUGH&`)Je+z(<3~W_)jnLw5EJnAp5^uMyJUNBTTVtIfvw|NH^oWMxnhU z=UZi?t5`j#8Hi;z5#AN<%&DqY$mnVQ)0ZrBPDlN%mURITTGyRdiAM?4sRzgf&Yf0&?VIJzWN?#G}5Mg};Owhcx$&OsPw>#NYOywC$JO5+Gr zO5#y%eoU|q6tF^>FdO6E;ADQa_=kzAsrYe!2KQu;S~+9e$T#F=DL;fDQNel!LNt)h zkR#3xfUkv^q__fE*3YvETsj#e=9d& zCuwWglm4wl(v@2ISbRV;7eFngJhZf4ch+euTM)^?hbozA^YtAq|Gd7sJgvL~as?kN zK@q{gG(1Tb#0ka+WBBig5#?&M`uYncfOE}YEy9FqkxQSG+Ap=pY(T2SD!zKfiiUmY}C-?vWtB}nihe=1!K?qV<=`-ka$(+#>L`% zTR`}>tRuB~Q*r5HHh@W{Q_0|UC3Hv65mAX(bPNqrplW51;wBtrkdi$tvdd>SI6>|5 z5zF1&B4n6dR9|D)WQ@6q1PWOs^547}Lrdtt4*dyx+Tc9gVe~_^@TxfyF_6FbR@|~o z`*{^FVw>9XfY}>yO4z07!A;e~sbv<&+R>`-@U8Xm;R*fqJ#EEt{s?ZW@jAz$>2>HL^ThIakz`R_=!ao`|+141%3Rvhm zC2JZi%e{30IRU#xA9xnXG;VUmZOvQ3AoFIJ4WJ`-o*o!ntlTOtJ`pSJflWvgUF4ge zSX#@*rL{(B#zR=sG*bAtTBAl45*Wc;bc_|+XB<}f@kH7NAg_F6X3Uz>qr+0?(bUC(Y*pqR3? zk`B>ZN%lfytHdvVZ6B@dHTf}6on$q6+*XyJr#<+9z;?y5IsV!~o_7A)E41=G2x7cR zYnpLmTqX7#?@~`&ng0yZ$~dB$J|-Lxmk@>^HGr+>^qUk~6xRDq%)C*4Ez!z0<45QrVLPnMb~j#~7(;{V5lk=G z{%Np{gqPR)U=~<*nZLHpGPJLy$K$VUz2rW?Z_*Y8Yw>unDUbQHh>(5#}Gq8Fdg*@ZE|f5VP<+eD7+Mw1de3QI&U@Ngtxd zlZ_G$H%Wy?MWcw`ktN2QMxj}eyTE^qf_p@Y0&vM0u;*vkY_G`A7=*Nu0{avFpDP_N zWS~Gxjao22IFQY zu3JNxh6Mr~BH&^-)@QH0ocqrftyL-)V@)ryzvtQ*nrvazYFS5-r1LP4_-k8v51X?% zK+!$}`B{SB%c}(awaN3}FpKbAQJ6WB3I#=Y@D=GiOl9uEw8AqHwhT{S>{uwA9(JDg z%*1pfA7&1t2o+-_&G*-0D6garFtTMe={=|v(U8iJxebLto4A9>Z=051;RXsj1R}Nz43AZI)kM`t0_WgE>vi2 zI_QMLExR}OQc%9ik`Kj;I~b_Mi~56qC-#cK(0)X(It914JI91Zw5DP*5?cy#XaFms zE6fU}4y9}xO-rJycEBgB!o#0V~N#KHrZE)EY~cdFI+-xZ5U*7(0knx~eDbpIB1f0DLNX3M*LkMe7m?=imUv=T4A zGvsZJiGc(y!IB+=vYhJ;HPAH^M2|yO-MZbu`66%ngh+JcBMmmzz`BTg z@d^X`$Ke9ytrsG&Ky09(Z2hUkoCr9Ge}CO1?ZJlq|2?2=G0{EMMjDxXm_*U0!D?%MValR{3jN%^Re`J$=ki0p9Yu z+cJ>5Ge{KWFRv4oxy|xAr6<3|zW(%@7<}d)4A!=u+*NSUOIs72-}vi#dkXz^nOa#_ z0ARcjms3fjJdd@o)XzN16hTR`IeTL^NC67F5h6)0aDY z_l!GHjCD+Fk*%4)Zx(|QjiGVX+T1YNGayh6{duXZ-@rYb61~P}hp4cr56F*GSA+Mn zz#rSdaY@G8D2~G&>(&Fe6a~f<`}2m@FHw5w7~RE`=FA7H&<=d=AN%`Ut_ z`@5P)nId@R6y412OfgeZ#AB$t`7|O_C-gBN#cwY0S*v@O__nN8B5o-n?AAjT-p6!R zHJEN`E2rYOQS+zzdh=%fYSE~Qk!C)Vqu4Z6&t>Ky1i(Hznk|Zl<|?xTV(e6ucK*74 z-YLdQl2Rd7fg$=|KhLEs)}n&`=Ajk49NWd3ai5b3Y$ zqdoXAddy#UiB|q%3X*3^@_1nUwU>Bu2#G~MSX~7Dn=Tgq9eyP?a)`-;M4*o&5~T{V zdsI`6Z%zHbCG&4?lz*^!0${*CUYDhn{g;5&*W1YmHA>jt+)a2ran;y;c&VpfI1Y7f z%%3skm_|hmGs_r}6IX-5vk}4mZxoebc3_?z5)t1X zf9*i;^$N0q5MMI+ws+a?)zKbG|hX{Y| zNE_F-7l2WsNd#Wkjn+5gn9K;{YU?c?FWFCiJ%Y9|8W_5uQPD zl-S$65TO!pY{O8R$U2$kx6M$`QxcKLI2P+&Y`%vSD*vKJ`L8s8%lvo5<+nK^k6>Ks zvG{K|`7gk=X12NJL`) z=XtL8*Dki<(^$TljI@u$rL}>u=+j~DW(rTEYT&-L5FPRyV{dE}>lDKv+BdvWRF>&Q zo@!jBCG{L$aX2K>W0 z2?Kt9#p@w}20L2Sl?^d-A?#?Jn%=rIP!0RWBwLXv46dMoqriW%)v|$jViLJV7${%D zl&ir)7}+NyvP3IO1AfgBNHIN(fHZICSX?=IONKeXncgd46`Aa>Ez!!~Ll_qq zE*9A0u>v*qkBFqzWRiI+rk_gxL;lGg7xNc5tF^K}Aqj$(Eo~!pK)x}(N@T=3bmD)b{$^OwPFf@bSoW|HXYf4WY4bLJ*#lDNlWeo&YXlDz|r*~8v8;i z#^tg&WXV5lEwt8$5Sw$v+zu!)kKV#19N7Q@~K3_!XNklNu0 z4W+z0R7{%vzFd-IT>UbUnvnk5X!<=W{ZlIasV|VeW8?HaqUj$~>F22Q`JpES$ySjC%O6+So?)6&r zih_a_Mb}4h-Pbw^?v`JL9nbbM=?AXBNoy~=yXOwr_dBAGzHAA99y9%PmxC%_&8$Sm zibp6<%ih(>-{4GhCBH_SFXMO45z2Sy*D-3cCS z>1!Lv-q_5?OMEO9}=1IYyyhm`Fxv=?Q|!z@<2RQIA2vW^*zAk^#yl{oF`JLKhsB}G zT3v0mtdki3fBuo|TPwQ`knAXF@6c9>Lns)pNKu^mB;1B=1!2zVRUuEU-Kmb;jkP86r3D z`{NmwhbmEo@q!bTg;G}Lh%Eh+0a;h~JY*dfrWRQHaaa|SoR@hyWB}~b_j7#+(PGm! zo*#l(i*IbLz16Zdpbrm-q?Pw*1na+Po;0;~%=vNh{Jm#I`Qjlq${lgNWK7MERb*al zfS__3RSo!1Crqnc)`H=76Xy=w&pQK8wFH>X++ zGWHK6b_2=Yw7;Nd` z7V`sRIF?f4m_FiEcC6;fEV6-Gd#_}Me~NFOe8?!1VoL9HE3)TK^qV?5xGrp z0y8)RK~hDbH7cdl+BU!hkY`{LWE@A+*0#2_|I(*eZEJ76O4U{Zl!s3qiU_rW+IpsA zucEi|h?4*JxA!?SlK{5;G@nn-oaf$auf6u#>$TU;ppey6p0IBi9gUxJz1wg&-kkCO zVrze&%5b-fcJh=E(q#-0xsMf!}`n*21?IKSXY z@&(YZ0A0q%Ek^%h*E4;V;9)9Z&U;U)Vrx~w(ndDdKwTvih1rf`2sOx}SsMOdsLby45 z<65)YDv_%kaV98WF>L|=T?=36ZmlLLBm>Ndtxt_pjnR#>6yoZ^$nE;{Z70h3(D#e@ zb>?v}c=YIFN#w%BWHfB1rM~k@5|f{b9x0et814LF^l-ua{?5;<=;r5*e6eUf>$^5M z_i!iqbt6=3C4k-ZVu8v3mhVd}&;!s?W#_-d_1mIdD);)QqFpL?{SPUBejjI|%Kg3b zDV6!Cy4b7|avtmJ(!7bGN)}R@=Rs9`aS4Okx=`CN@whJ3S)wVt{tNiEt)l)$=j~5( z$%#jQ*tC4@tArMKfO*$AOZ|zl*1mv7*mvGsd~Yq+Fur@5yp~=$v%|NtA9cFKD}z@n zMzUc}JJon4It$E&jlQ=ofl?G{0Z4vFD>^ z#eCJEJGWrTST;O*WNJ$vT~5^ebwkS_&fVh33R>{MLzm~IuF~_-dVW(&G3R>Fqz5CT zN4}Q6vs8D=qDK~_@4Wp>?wrC0K$SY#{<0aNjn44hvwl@$`2^p!Tg@IWd5gxO2+B^S zzt*(|AuZ=P6&GcYYxx^EF{?>}`1?;t)$excZhrn>0i8(MB-RnXE)O<<$Z$XhOOMm}XHVnc*p4O$G;)T)w?7Bm)JMM_Pd4qR7c3m|s#~7FTQ*I2BN_c{8zy6eCAkN&|@rj9Mck zI`{k`1D$jK@C-8ST?EVf#fltw^@?YYQxc!z^ ziXGM%Jhq&zAlh1*=Zx)9r@aY_v3<2ZbqDE5%ExACi@37bGop4A8-Vt^1=ujq=>3i` zwyhOELP#<(>>L}e>}j{#hY}ap~%8Iet0+3rVVCZ=^o2&#KjNiGrC! zhZC?9ioHU7)z)3wE7c4b#3Hi*0h%_gQ^bU+2$ZWLdD&G$y4CIm!5R|vBi^hZ@%Q=> z-ASz(2|={81YZ-6ED3%!QciqPIT#R1Lc3!)I zgCNhT^pW=d(j(_v$YzQP!&gw0(%cb|AxHyxTbVMzCggOSO78 z$lm7OAbscYv(cA$ z0jj#v_vnx!Ge5U>-4NLqOw7*>5_li|A(J6@uj$SXPouT=L=BsLKa8?ZV;&F`QsjQDGXD zh?R^gHmzn>QT;vUG@u&0YWnFYTnEj}!~9uB`$nt_#dd~bhn-&)yp%ndJxrzx561Qe zW1WmPuULbY#Q@Hf3pjAyg3(ery(E->`Ld{N`Odm8Y$VnVKO<$3nX z$kzxC1-_Nv7YRfUSNrbV18;LBp@LkQa+?kFcE z{<~G5&)5G()yZ3It!5Ac>K5O%I|Sbj;CtE|oEE-X-UPKzSwx->YC+@;zP6Y_Y3C2Q zD)8MN<-S@G{)yX)K8x_a%Kq^E|M@qu*pDKP-;@Wku($^(?-inxKa_6N-o4Zx=-wQt zF}CQIYKfxtM!!1iu=6?}VnZ41GY6``ETE3c(5X)XT z!-{45oxePlnGz@T;t3u!*ef!i*fP@41Z{#SE0{?tLpBS=9y0N;oF;!pg&+m}!pEY1 zGnXK_U39R!J5m*jH6a285P|-%8xbf%#sQo&Q%;oxbgG;)=~_Z~X;M$og^|ZiHnBIX z$hPIyV@0-}46Y|NCT}xy^dGghb`^k`cU}8vxaK)uBFRmr?4k==#Tle#YtqoGfyDL9 z+<)>#f5e3v*vc;pg@b+sGwILRkIekt-BKQC-=X>2t|3hKMBS5Rd{SrTYstvFL$Uqd zAdiaglGUO``?m2V>9jCLnkdtt6}9*j1skj3B`L`ikk*j$}S9A?1DsuP*vPj$bel(ZgfYDf;FOy`o*nB1#$7{c8EppWFNR zO%udXls_Iq2mzJFtJv<|FarE#PBNu6WM-P7~a(;^7gt>A8d__)xxsgGss}hsr zrhe@I^RTbn)>4z0{KMEYvF*l~x%00q2|IJg&|Qe0x3<3*DMc<3_rbep^gmSLR%%a; z==)yk45#$hCL_hI$w}(VLNNFg`TQ)J0eWvuj^rWBI#`KWb6^RHI!vHx=;qE) z&1T=qMpO9Obrd?5RG58gt6yu`ff4h`@+=t!4JN} zvffJFOW0>=W9EX(>=N_U=7Z_VGh`7ONPK;tK88z*{7iigCvk&lOCM+1O8@UvTd5wa zQt6m*th@JOJ}oupY)!y#y3&)}N;}L4My+hKqZ@V0#5~yY7cG-N%5qi!$j%)Gl=f@u z@UX%s4c}slv`fH&;k%0%rH@=Ik5uuCOJG=L1^2z?B~}yJqIqw7UsiArzrijiGLIp* zHN5umj;nhtiAUErX)Ji}!#_rq^WmHl&LZVnelVxZoR*0<={1>~q$&v8Yt8SI_^BRdU$(ajUirOtJW&IC6U0qdKp@ z^X8d+5;a@)So@f99)`>D#hpWCPMeBM6nyS9<0yReSsaDiJ9g3D_r22$n&!bealyDd8WBAgyLSc>4i*RdLVNPnp zEMt_E@u^914odC%UMAWhlo)bZxP3=tAd^A)Wp%9|l1s-hnAB&?OtX{q*=!#q%5IW1 z4!4K}!b~$)s;31S>aM&Ebgmf>=r6Na_ie@xS~VfZUxze;l9ZkmACV{&tlW-*?b?un zL$~9n@xk_s$oot8D(|l+KSz2e|3xV(Mc`fLTZ`sLzfoGUKx{&1fyAgYM7RP={54qf zu5X3eei+RQUyF^Y0DQ$;6rJ8tM}jW4H0JG4ViE$x(=JGLWJwAqhV%`>fR|R(gPy*i zXFpN4~?T{hI5gX|IV6Wvf`cTk24^RNJWNZzUZefkdOM; zWeWAj*127!9ynoFx&7p47^9HVt98p6SF9qwEtHsoopk%$FVO6gW%3V65-tOF;u918 z@@6=ow*FX9Vlvm(t<{iET?Qd~BFXSmV0QOEs==8>E*_!yVITfrY>y?Mnd4$J8jdDS zC{=Vr9;u|~USjjlB`$fhc(^P7_AaX@>6sGi5t^8lyX%oKI#d1XmcP->Sg2dRAqTEP z+|~4{AJ#2@Q}@i9e{ydg1(M_=VkrriBUZj1AY)YJzCg{kxu>p$Rv}gvgum~!tbGy2 zLzbp@nLjl;Sqi)yPb&6Fj?O%t8p_p}E75Qxv&3Q&LSeD5a4vhtWmb}Sa4+jAR9q&x zwjz1>;~1FbUyA|VZDLEpsN!|F?QEI zG{(2$0>dKY{sTB9dr=^;HVe#IU?W)hbU3!t)lq^&pPrZ~C!6u!$f@I$$+(VG#&ZiT zI~Rl4hal)IA~ls-#Mm+&PC;s0Q<}V+>trrMVzl6D))ALLpJq{Pha4New#fjm8yPg9Up5si$-P&;by2wq6 z`m5PIH)L#iO2g%mX?uT>m-O?l-==95&}GJ}#dL=iDiC`i1G8zL1$^d}oBef1%Ut`e z$)*0hxR0`Euj2#;8?4+BitTdI7#g}Gkh?w&0coC{KEz(B?`?Hd9rnOb8+*cAVbn z*)gOfnRAKBL*lI=CNFpIE@)#}ZK|(XI=O)gnaUS1q<>Y&V17V{pK=g>o$qs!HME^C zr?SU#M{*kc;~1$UbEBtz@^>bTOHr17s&#SC*b zp-$ODU(-O+z}DbbLqmyjC81#a)kV9DeeFNxi*U^wOUryKpYrA8z-@*Pb)UC>)UTzl z-VY-wdY+VOnpQust2!yD-^fi6P>|W z4^m1RM6aP1)R}dg{gaRO%So;>W2}3+ul>eC+Mm|{-|($C8JLY_S5R#;Q0)mmC?jy_t9{#&7^WFUfvjb09rF|*O)i^6|x!m>5 z_}YF$b3-*pmJarNlr>nJ|g0H?VpRs7y254vk@#I%a^?C&FI*$>Bcp zKT)5!^(ADVuWYMZ{*gxMl7c|)(bP$Gv6tW`XVyjkxTP-oQSSVH+^}gr3(O;lZF;>v zmh!L`dpQ(4f_o=+6s2fApKaKt5JfoB5vw>9a5mxtY;G-n@y~G0N4^!?;7{S2w|pzs za}tUj4Z?yF%ko?v6dd{?uB%7^rKU>8`5r4DIun6(dQ}8t-oZd(5ZioQeKgiF3mQ!k zk9RN>`=RYt&4Oky&{+AdYo71! zdGr;qwfNfiiZzgqaK#+)(b%mL+jqh?gRvJgY%`Q78lWkCfX6lqZK9jh^@il$a5kB2 zb#|ij#*(plXEX?qR(r`MD4M$N2A`h5zpn z*6iYcLCYCwu=)a)pxvAN6=(H{pLi0ZHA^s%~5sBQ2`LkmwEEfm(BE%%{zX3v^Po&{W{YgJihRw zV*LmeGyb^*R3BSB`Dk(#iCn2ZPvY0iO!dHvq3e=S$5ij^|HXe=bA94FR;_=juJdoG z^{-pCe!Wra>tl_RQS1L=)%tJcNUPVqqsc!L`HZS@PN?#KNlK=?KO-_`?~i*h>8NU&sPsMpNbM*p7mg`>~eIJ=0hqLNP35o1Ke)_F}i0c@P`WWOrxH9BgCd8TFCE z>ZKd(Og@PqhDVqIm>%HK?z|;`Hq4_B1STb;LqvcK)+F(89T%_>!%SYvFcZmO5?p)B zV4p(Vx4} z7ZiuXSH-UeQiCIHx252wDPn*1rz!GWqewI1Jy{{F0S0H z@Yg5`{-rB3Sn|e$n4gCkjEbrzt-M;c%Uz%loeHbMl7hOdRs~Jvqkq87$1VGGed1>5 z7%g*e>|^S{8jEEDR1@neJ%M9@W<;A%ZHG#eei%D{7Hz8b}ebC zRW#SR^@O?gnb{#h8q-=fy6R#dCBMnb49vlS%1y`i!U-R!wZd{JcSESsY;9zC4*QoS z#>Bsf>*7;9bhgq~To*t7@Irph?)vQ#)_*Qwe~+)@iFNMO;dUKXaDe_6>3p6Jvvs&t zhcD`I6NfCrNya9sK&T4mygk`=l#ESOzT=AIA3a~M$)9?YYx^uQ?i#xx!@!8|iGc$5 zd*78Y4d>0KR;`K8-E1Ncn|R~}YsGBbeYcH7e)_-lKKsdUT5i_R2cjFjEk&HWUU7j+ z-R_!jto?O0rKMqr-z)u$!mFtc~6OO z$+47V^Zy^R&hcNR8?mufEJ%&&sJV9)RruQCT*S)QLclhZOUkZ5QMp}RN8|M;=~ zM67ah4C2kWRqTB+UMDT>#$KU~Zemy9)QR9RG$|iLv2K5CQyAY*tg|k*r%s-dZCIH? zv8400ui_$%zTL{I6MK{|h{0Zhjha1S8hL8UbYRWnfCaTWkUiZ?5P#xb;xwN~@3$GM`vqceKmsa* z?9?UNC2fHAODoY9?gO-8c1g1yDm`^cvuc^kp`^J%XARxknQDb^IyHTA{C<@`qC)USe1E?gBSVz_ z5w|BnOD+7dYf1iyt*Hw&d~4+$t8!mp+#jCF{4rVkhw3(CxYlyQ3g*6R_%brCW6m{! z$}TzKyq#%Zz-?PCXX+^^x78go3g*YQ5z0f(-*?!F$LTlHEU`O%Ed(qVed*^mWStUB zYi>Ck7(>UMo}AcD7dO4UbxExg>x}^0{-2<_y6q3B>9frER{Iq_bNf;r2P?7hu6I}b z2ZtWQG-aIel5=4;aok@~#RUzZ;;4x>-jC+?NQ2nhy%ky2!)>$hH`FX@wE zlyF0tio2dm_j~IyQl256T4&J}Tu81Nu{HJr+D&w0;By;#U#BrsYcNAhL}9(eGlr21 z=duQqAEs#8VB739VA-_y&TrDB_O1j%jVB z+gf8kqrDR|&sr`|)^e5gy=|}(rt`UN>?gQLMV_oQAcUJP+wXPY32#n6a23xrbZ63T{-y5(JlD(Yx| zm%&dLWTCl(>;Aqwf6JIRnQipEEV7XISMxA3+x?J;4&F%JMEjR_dHw$r+y5W-n>Qhi zKJU4&y-6R8;B}!RLTG`9-!7pfat2RqhQ-VDVj;e66o_86qsnwB-I+88C$E9i2Ih>f*C^>`IK1l}MclVuO=^*~{JTOvoLX<9KS6 z-QMHGc?FN9^CE{17z%t6nJFWTi%~J>^0D*v=M_k*S0q+tBytm_pt`D(ryLWiAo>tsJzqkr(*qL60df+i&f6%r$x zx3mNjpI(@U<7p@hE;po3#s~*~%=+t<{ZugX_!^Z!0|N@IZsj5rZ>rY*9IUY6dw*eW zC?2Q^)$E_UNbF;Qf7SHzaf*-{Z%FJ7&xyEl$A}zf|2H)cSdBRln@}4aGw~rvD8g78 zTjjj*SCO2XmuD=qmx>emSY&1E=8DpZdWABj!5QE{Ext-C z_AkJ%9rF1J6d=dBVmeYMu|#E6V|l%{SWmo&n?t?UWI!e!NxQ%K8Lx_8YWseHIje1X zmUUh1&r!(BiPAL8aT>mO_YKEkmJ}#NerwH0=ilVKEo5eH#OnHEx!V7B}%Y#eMWwx2eu33z};)_(bnEJn*X5hW_?N zmdjhpkiJ@P1dQa{imvI^_`ZMOL+^;Gv0Dr8TEgzN`Qz~3;(gf@_ETNhuS}N_``%PReMggy zkI'W&g(uKZmMTtlDE6R&53ue-g$f0%o{!CyEAIwz`t_!ErTfZu+|fR92+#7v&A zeFv9@AcE0D1Cg-Tr3l&fhVa?%eDSiJ-^n^ceD^rX*L-K*CYp~-huIxJ($wy9x%l@? z6nS*RNyy2G;x!cWl#20C;S__+-aWXA5@L6B==iuYbVSE|@_w%eTe)`DvfX!v`gALU z0>d)v{e3qjA29V~foAwy@*7#VKd##XSGXASU^VR}zcKjh4RNzzy<>rnk1KawbWG&u z9>lY_c24dAv2JA`HUr*pJ57;Ink)mVYnI3NWAC~4)HQ&fybRZ`VanHPgu#?eM5TYj5kF&*m>Nv&p zV8r<6E~fFKECUK{RY7}ZyIdIkt?R%EA?m?|lYcWEnI_=pxfI%_rV04GbTx^yFZzN@ zz|OQQv*>r~vGglZ-fKpn7yUXjvglV0aKbdaH#HnfzcYX8QG=o1Lu{V?Pw7{Qaf83({Juyj$XrtkS)1)GLAPr>UyHjp2b)QEY`rP(dW(^B7h;ochP+(q)DR<;DV~<{31!f5xP};dGP%2|G@DVTOm%WcXjfhhoe3uKpZ{5)YzKZCW zJQqG1J)zY3)~g1^Zg#a&0k=S6ld!0ykg=&{fb`0tx>(~YA7b^8fcZJ)7j(MzN&eU2 zfDUi#@Rkm*bAUeg^3x&NxzKrdgR9sl$HB&|CU5M^qtdpEc%U#)b5&u>;CMrc;XgG~ zN?PdIvjTDQgV#Ra%?7xx1;LbQq-p0`uV5oNryk5Q5=cIF_verT>B`3s8(cqW7Zo9S zt>aqAtCl!kCCjAkjr&X}kn`Ah0OxTn@!?&~iVr716zf{nVic}!lM(JV+23wM>?-*2 z?=GVMowJ5->rT;i*bo;Ma=ZUdRwOWvYn|oQFLZCt0Vv8N$B#3aH-+th7NR{*Rrmg@ zRn7m-MLEuY59?Xck9T+#mG-L0;Z0K!{inK~VfMO2?E_3VBUd~hjmF!o6jPs!LkRM0 zbmQD2fT53yK=(SmzeU$I>zDmOH*28{As1t#y8Oh-&QCjCS~#(?Q->n@tom=QwI9nC z@Alt1)k)CiZu4vHhcX1eYpz{G7c3p)41=aZ{nhl(`fJW_K;l;}0Evi!B!6-`IS)h$ zrOt^g6}o1{M|NmnRBHxV`6L||znYyJM$MD>I5iw^JWv>nk2(;n+2LC$+XkUiR|h&@ z&xhSKo_I@l)Qdj}KZ`AD_N1zk>w@zLh5d z5W3ve6XP>>7EX*0+UeS#!Yqzlx!<6TE}fJZGA)Q#7hP?}V6#51zU|G(DdT;Q%@{1O zHv;zeu8M~S7hV-#JXl~~kq!2*FY&;(1R}UR*bSsYAHYLU$p+fhx^T8hwmKG-8ud01 zzq&-+D?nR{Af$DG1tFz2F|iWjY~YrTyx{%&X$7H3SBk~h@v&UR_|hA?ft8c9Nr zDy>SbbteA_t`yQ?ybfbISjKcbDkVS9#}H`p3)E$}jI}?`2D>f~s}*n!9cBLdaPyVZ-zI|PbNmo*h*Oz5-d9 zv%A67PxsGF@NhUOOGQES>M{lQo55KFFE!d$+&na^sUq z-YEW|-hd75-jFpXWS^Q|zkxXR?RaB#p_zYJUodZIp!2WX9#TcWR8iOv zY{C9&PKuZ+8mrid-uVZPOXpn<9odC*-lP0!Dxcz2dVFzpk@zp=e@5lUr&ksEl^&6g%%hVy5pWY^Huwt?x{> z>*BYS)Wv5Ha;EjF)>Nq79gkNbwax!Y@|!%xLKA?2v3_c6q`2PqScAuP-C=SmIVBG9 zoHaG+k#a7>W?)OP9Vw@|_TkpU>G6^`VyhW0=c@d802^v;PCc++=XkjRI!L+hb; zsN26D>QOWBKWz1_{D_mQG$0a#wh&BP0*Nko*Vj3?&cJnWeI6OKDS&6SgG}wWYj8BM zMtHqK23GMoc39s^&8*^Pvw{e#VPvIXcV{?WqPUq>9@WJMeUtj;PN#=us8lEW&BFU< zJYn#{2_xCxu~kEb2@R_nlIo#*mtd>#A)+{U;d(*Rwqjr&W>VP#W9z9>rfbGxxj!7E z+C;EBKws9y1`)FC@5jmXeucaRH}m%^vap+D#|CE)u0-c09k%K4j1HT0=;V;afEmT5 zFq|P!WtpY}tfFunwWHdZ_q%Ln496%%9vLEkv(RC@Fbqz4%Zfb4?2bdp53c|HvGgF= z*ec<{7)c@f4p5iEo}`7((G4YHNKJw6t$~>6gIqPfyKdym_!L+`^8zh1S~*kKB%zKk zXvSs0oEq9(I3a$;=3vbM-%39ZxjQe|xi24|Qm7BSdTZnqXt1%`BSPXq4YM98Dl{a> z9lj&ko}t0MZoKF~t&c1v-JQ#@3EYIRw+5qd?dUGZ(3m9E&xrk6pa9CIfhNIPzl|YOtMN1UMwSpZlKY1PQcs$ehXzIp{w0=} z8`7o6C^I_d+;2nG=wAbZ@yND9=aFqLWzWU6LD`bT%Ev<9>UR=@gtnD1IRyio{o5o= z#ez4D;qK=eP)ufm<7{ms}>%#e`fq4>AOupX=}=4#c19=+0t2JO|E=k7f@F z)ln*esH|6h%^Bq#R(`&pN#9HY%ik8HvN#)~7DGW=NE@BoP#8#9W2ZdqNX(b=YxeS- zSE92rZq4IRGDo`3JPsvur0~q+P%@`MXAL-;F;=?~712$=B*8%mMcw+~R;thP*MLYl zaTc^MQm&E^-zwnZ6PaH_(nwA>=!9M;j~KyA&p642Y4){C4X&WZQh$7GNvvp#Kjz<( zABe6mHR+}N6jXC~@f$)P14Mpo=fP2YjpZj%@SA5ZhkmAwe3g_M6yXcT@^?snWbm(J z!V`zAV13s%U*baffOxW?K3;?{`m}H5XAQu-Yet+PMP|6i4cf?K9xG&eqJI~b1|;@% zIuXato@SV-MMf;G)|xxvM=YY6v5xcjA)24OUt=v@-~?L|dzDkLw6JQYobm*cDS_ry zYdqDeq0RcvbZnd$Csg>?XzRB&qFoS&mq2KXR_C<*M6EL*%p%HhTR0IMR2Qu=iJOg@ zYuZCnhK}SjrZ-dpa5BYl(?E=aP| zxLX^eR7{;q;^wFCD2$F-_zeb=uWcFpAsipVnz~nQLHIbaxNV9erXx|UCubX!cB6NSizHv?;@z;g()|kgzNZM=Cr8%Es zOn)r)e~wV%Vc+0f&3C&Xe%kIPOavb0zyE;6{Hf=eJijgXyFeK<7__S2#7L9>O;eo* zU+6L3okeEdrRNn)4)3+xQS;ksH@*s*bjP=+7u)guq#N>dXL+H>${p{4#62b>2ZQ!< zPf5mu_VGrI@Q>kO0aAXX&NUJ~LV$;;&HjEBGyulWKyliX76j#aK~7|-Vr^RKzj)BR zY=B?~=0AwPC!cmH-BRovOu1tlqz8*d=tI4YK6r*?OUaL8H~ahBdb;sYGe4|b;`7Ht zoAQ|{=I=>rr3Pvg(@R8zYBkGQ6aY`ML)$AfGfce7%oj2wQzlWXdOe=cn)BB!iYyu( znUQ=YXbipq%&|Ia&{?gkfCr+7@|S!w-q=6YsTfk3<>5#m zRnC9^+D=zY2ztN}g}L(}S<_2o>!Cqu{cZ(RWl4NBQj<&K^5lq=SLqj0mQTUX1F~4pZ(IffuNwV;W4GH%R_%BLZiiyMCNDYCD z`ko(V_A%b>d?BJ)gf#MA;g48blrc8lY3vdIY$)aZ(AWpN&e&$=AN7WWBhkL_s~pDm zOjFE)fa_4lS3YiH%>T@xK*A>3aR!%eGhqYcgwh2nrZuaWK=eri4J=miMG}%U(n5(~ zZhgE~#-XR@ep?}Us#}hD$(GA5!p?tz>0jhu@=qkJv`mvm^S`L%aY?U6`%GS=A+O~S zIJUQYYQ|rm9hTz^1xFd7j9dt?@2BOs8J`?#J~GX^&oCi7l~96n)v#CLy%K0?iRoNq z3DZ%4uJOcF-OtSKtz0m_ASyaM(R}YC*}wAKjT4$n!4E~CqJ@$Ts)LlVdWR}KVSP-XbyAA3*+MV z+}Q+8)g9b1F4mY=F}AzSTqi@kAXJDD(c1#ycteBBFG3P9Rs#*jx=xtbpM5KT&0C%& z4h;fJoUy{uf?JIh?vGe|`Wgj-{3FD^-&&3i!7`1E!RNz)Ern(>CVv}gQ+jEzkyYd3 zGX|r+GJfmZ-}JS&Sorski$C;J3;#>wVz&+!{N_5@$O~w^v-~y1SFMfYv<&3pR`We~ z#&9PxTz5h>&-+%sO?WYgrn6(J$SJB;OE|u+2^@wkRi$IC25c~Kp9IwR`Xo(U0 z4Ab~p#eLV*oJ|fMWof;GJ{8mcyav18561I5GnM2ck?&MSe#C7Jedm6{Xwocvmd<7g zl&RS)ybTsUH6Ce0;hUR^HMRv(f6MMw|LO1!2gCd-#QYFu zB}T#gYMuZ2g=K!QJQHeZ!6{IA%rUYk245HC6usQL5UQv&fp z?*?Ln4h3RG?*igAf^M>)>rprthMQ7{v4360=kdlvaC(eh@#*j8$49+evuB=bJM7=m z2mSUNos5I6u`Ox-Pwrah0}jU&ZK|^N(M|M;sVVw4Q-U$|mS7%5NXF^b!!~;Bi&joX zMjTt^*+!T1Ic}2vh?p~b~AHw9`25edo^tNy1j|@wl@fC`DQ@(-4 z=fRP>BSlxD^`AFQd3X4t1jU$-!~KdK8re@C?564 zVf2WZkvv1F2CBlfyx3a zb1KD-IzDG_x-X^1VNw7>DH4diZf+@rR&b#FoSIZwJc$-#GZ8oqh3axpBKd|TSLkCM z$p=-7OCQh!RJ<6EP|Z=_%2)LST+R|RLVY9fBqEnc=sg&Ubh$*q(e(oV8Ry$y77=?v zD03Jp6k_Lpm2{V>V*<uh&8svo`r4l<#H z@q5-#$&20-;wU3h+pZSa#*ui5uu{vcVTAR41`(JUks8!njDM30O0USBZRlGi)NEVK z2f}9t-vJdqmBJfr;alZ3XCTD~Js)5Ed_Dp$5z=5pl{hDvay88CUOE)y7S8D0PT|Wp zii%{@@EqkLQHcv>s;9zP{^Q<+s$p3sf~ZK&aFr%Izlz(r^DD5SxKdQJXG|I6{7RU26yS zF(ciK*qcJkfn5gULv}m2n65I+lergIY@vGDE0ku`8uJPKyJqKNR-4J$aY95a_|eB8 zq6?ctdbU0GMB{gx9lsKY-SN8ye2HDJHNW?juhVa$VA4j0=N%_O8gvh$1iR=f{SDeE%`)*H>}QDg896*!-~6*|2h_F_qLh*KyM@bNL$D zK2imiR0bQQ#{1HlNOlt-X;w{g0w0j_oG5th2f({0kIxguQ#90LFw@Fqj3`AJdRay7 z%HGrv=V9YTvA5ZhO_aTw+U$Oe#(qWgO{_s~{r31sq9@T0oJF>HtuQjhKfP4N!-f!H zQ>TzW#}vwiO2jwB{UI@hQVG^r0C)v!EI`Q7-R4v5=GeYWDr3n{U2E03+~ND=>oWE+ zf&`ZHqiLXc`9}3sHgPy#`e8OXBnN*i0hsurPr75H%-CeFXE00vu7waJd?G%wdzUNq zeeM74>P|h^gNW?-A`OB!zNRv~W~l=fsCQ&yLVGb1E#W;3-i83FSgUzo)(GgFK=L}V zi;A{Bf%p(M;=Q(%DLsJ=7YCD)(Os?th;%sdG;*}f5;7KO5Hb=ePUEBsjKT``WMCF1@s-56;-u?&a z?dTY=Yj9~(1lwKoK&^SeG8Tj_7FW_?u6?}am)1&qVTrPRwqQlWa*W8t_}|e28?&|< z^h4;zv(qpah=09@L<=TzQUylJrL9+BM;UfS9uXP2y8l&UwNDfbP#v@rFbJk{@`_*R zjCkmc>NcPu(*6@I3q*7%Xf4fYVvE+l*N(?nyKCyW`Jv1lLgjP7c9tfF^1f& z^u5<3ZckJvzeI2L>HrJ>6W=`s|H<1kEZbn6rB^3okyap0=({iUuq1fT88kR2Yj)1X zj9nE#tBqgr2^`U%D2z}4L=o(9F0niN^W%-D5JXdSN<4H*Va-m@aPf(``Nl<9^TJ$r zNEQ)Mvo&?Hwv_)yr)(L{D4eOzr*(Mx-fRfG`msCM`bQIqs`^oPP68h%0o3-nLCa@ooPbskSaB=5gL)nH*Wu`#fuU*?Fa8 z1PK#ZB3?4Pkdrxu5JkDa=9y)MEgNb=<@w8gAFSMlujBH7k|!n_x>FBfPFnh@06C}w zl=exSTgxyGJx>IK!*s@Pty43&zTa}WFx=)7Ib{T;p6OIAHrK*9Kl}KVYGn>9|*^=`{Vu#j;IeYP6 z_GZmiO8L>ZvU}TbW|d!-+>&7rZv0xmWB9Wc-S)&J+diIc*Irr(0*T2kUfm!MlZW|N z2C0q2G)BsY3%lU-w3m~@>Djx@&n2($<9jSW0O5nv=`z2Pz~A8Xt7jY!r|s(&PfVk9 zx={N1IXhn$`v;>aH*6L0!O-`>+VH-+e2?z~n@wOd_U`sWvGoV{9NZ-2`RdnO@3~>> z+3mzTw|sNz75uFnZGntxj7g+>}H${ z4c#27>?BBPbVu}PzsSJoQFh$+C%$cyxslHDBJQ-DW%wKV*FfK+qecT%Kh%!y^~tL= z)pV1TSI?7Ubd^|`OVCH&avCiZ5Qc_M4QP%0`scoe}Q(9SfKqQ7F5V4qRQm>P~}?oq)N4bnMmzN zr{{M2SKU`Wom&#?s#_RpZdM910tN3h8|Z53?m7rTKuh=X z3^+T!RmJ+9sbGs2O{u(4Yf87!3ov~kz!q>{fTr{VyoRHmi1AmxcIXu z!9{3lW``4ggSp!YyX@y-3PSWHl$%@QzFF;UMi$MNm1VBHtvT)pNa?3wwmqE*M4I?qPta{`>BAl z?_oF8`-vfJpunD-oWnm^x;7V1yypNw#GgIw!wn!v>vc|?|9#Mm~+2@R7{8DZqsxEP?s5?+^68vJoNx!!3hnNg@8UF zzJ7}^DolDgk@4L=R`oQ$8Xa341ro@`pto@4# z=9T1+R5JKfzYEEN*feRUvz8^tnMYn>Jzn|NKYwM8dBy#@X6F)?R2{dr32srV3_y3< zrg)&cP0>gcpa%XWr~0DbD>NGu4LYgy$nX}{p|FO|STS4-@|iF=qMInY==!oi_tS=} zK;L3{O9zMJ*O!HBURm~fi;vR^_S#(hvh`1~W4y0ziEu%lmX(!M!wYbUbHnjl3d6+L z@mb^?O+Za1n9~?%-j_79AROBUfA|Y(p2kn1!RwP2ufU@oR{i91z5O{>#|z*l?U8c( zKZJ)gs`D6qk;FQ8v` z2IN*Pr!L#2acuy=z^pm!i$2VWU|h|w*lsf~T9#~m3EG+WUGwZAWBXS+zI|Lv35<2I zq{QRV7j?j+AGn$!d>kIVT3@&wsSZ>v8Y6;SW5m=Dw$3#NaZXs8w89 zhW@0>&?mvr_ZLivHTEqGk)E0o*YXa$y>H3b*z~^e_HW-J-hMi~y|1>csK5ggR_cZ+ z#NzIq7|ZXQdyir8T8z|QK|m%D2ae~{mzOjABl490j5~K^wJe|v8r(A*s zNp&VYpz}z9x~0FF8FnN`6%cYDxi)@U{=VA?4Oma=bnbEe_G`E0D9cC5sz&w-UuTR@ zY#jveNLW{VA*<$M1VP z7qpe@D^aIP)4sV`^YS#h@eStXP-!83S<1ZJSW4gRnPvJe7$01%M@*C1z=)oiO4$mts^T}NrBbIF^tmm@2&O?FU09maLP2v1u{!fRFloNQ|N66G zIk;cXm?-G6i>f5hSivvAnwO}c)ZBi=RFJ}Hqv+=6@$)U6tI|;PZ!a@%48|BuuRwx_ zgRvt4_?KZ?M}mnf@>n(#_Jy`6sn;Jg`;_PlVbc5_(z3MeCX&H}!mHMOg%<0R)N;Y6 zHi?s{nFb&@x&dgB0-goX9iSo*|IYw2^zV%R7oaj5L>l|rQM51F-;CUV^Wb41MEt+z zrzq)@bqH}V9GrM9zbLZJa&Ty*!L%wZDT`dxP{lB*CnSkY)r^nwBu^gwCA6C{XazBk zBG=pjMV=Qv9!2VFhF!qWpqrP*bRHaD*bF7EWEk!%xGL6|TXls zfEZNhI5X5P$qUwNzP6Rr88v8#B)=udwnuZD9e zqnZQ=Vbbb%9x7n(t#hPJ(hW<8Ba=;P%c{oy z-M;plq~gI-6>+|WVEW`}6f$Rp+@pzt(Lbh=#My1Ngqpu|EV!xXB1Vu8oUS&3t&f=X&~Nn-Fk&{)M?5g0 z8@Oro5wA2Qw~~<|?PZbvSPJ}Be_U0R)*qYHMbOX|^NUPteyvI;xnrNXe#GiCy!S5G zngMymNk^t$ET97>1ki|PD=JerT2*jfJZ|@QbwuywGyvgYer{# z6!8CUXC$0CK^Sy3+}H#hfh%t^#0uVWp@Aj!oH1I?w-torMFXA3?{h1-idXUn*5yvE3T(D| zJB5SObyCqDRxRJztj=U*b$z3u@iHG#-?(naw z9Yxp{nz=z+DBi$wl&Pf0Wd7E2#prT_GrL!xheL}isM*8SoR#3}?}6U9y8cFkD<+Rp z=N)_*>F64ZD~Yil+{Yr!5SQD!kU`jNGuwfyk*3Gj(u#1*KT?Pr3F6*vGPQxYkUE<@`Q>AcG)5|t%j zs#}F~uv^-J8~fXHFXb7=OuVR)A{3Kc;+&q}+wMjbN@;hb(&#Xz7`G-Gt745UZNvv= zLpC>sO-3EJeT^Sn05ewffivZAVlp-rga?#}(YER}k4Btf?tA-8tzMzWzIPJuAy_g? zt}|~kqWKjMqs2WifOSKN4CJB{nqQY4a=(LXMzzMe>1Fk&@6m;$Sd$Q9aBt%h8@JYC z$<}Q$!)n7(n;BO7jg~Z5@NiB=D1lcol(^Hd3vSCiUd8Wh8J3#$$!uAdn)S(Swp$#~ zTp?vR_Pmx%O)bQcD84ZWzERqPZ*+Vt3EhRfE9JAo{92_J;ZatcWJep)@82`L+@Px98$yY+Qd70tM6Xe1 zlP%kla7?XuF4*}OnG`Fq7f!E0?Tl2w%+4_YoH{W+q(Z98Z@w)VzP}bXV^yrE&mCW- z_?{h0Sox=XkkT?e&C*pW&GWQcxgQPBRV#nF9Up=CyU{H-7!~of4sKfA@}6=ym2fUw%B6~TdTko-6&2Ry(uCz3n*i44A6mrlRI3MBfnJqw;bHx%Iz#vN zDjcr^57!9~;rL|ma2>OAE3ina_eD*PGh~@H-0x3PTKaB?d9+dA^12R@qod<7b?uH@QnuD?H%ChuJnTW24N>exq!Z=}}TBcZYaM zKg?W>c~H`1C@JV+Fc_}`gOja%W5`LYB1cuYtU@>paNV1n?p^{p^{efTu=!In$uYWw=?lC^JAkAN8G@EtBvdG2WWrL1>C`o>!Bw<E*XhgT`(%DgYekt8>z{lOt^TzsfQEI!QqcZ^-t#fQEZPOfrsvi51$ zmTD5M8hreKTWNfpoekxAKq>wCEC4kC8dQAs_^9~2DOp;kW>R?%im&8WPfQFKCYrMA zc7ZU48rwJl%$&$HvST4t3rrEUGX`u}psD=1k8M=^fjX zn(cP~*3D*ouAfJwD%-Nhiy!6&BRk)Oe0|EKt_dZE}1NKkF{|cU-t54+pk8x5{b8)2(28j$7<7aOCM zc4$fy$3u4m#r@S5SpkqGCebY7AYma1y2kT1I7?`c9C>`-OWw-F;ama~PL&SBboitW zLpiX%LZ_$eFhGYQ-INgxK7C(#EBKXSCzfBk$|f@r-~Kw+PUmbvp*NYbTDc>2T5tLu zwQq_^>doXq_Mgm52|doT*5AAhmvn@&ZvCE;d_h9S(0iGuO@Bk|+g`R|EK z1%(|Dnx#YB3<2AqJqAVu4IZqR}zvlJD(^fJ+?wr=p~TtW4lY3<-eOVU!C;yrQBJKjyU^3VK&aA$1s_U)AN3M_}otzLnn;T9}jf@eG2@&243?r7EQW zigjswF%pWzFq@z=^8)_cW^BFQ`hUv?K^E zb|>fKxQ6c}uF50C30zHl+H1Ur+T&p?S<7dppLdznlj^tPP~|Sgur(zOKLmAPZSLd~ z5n>jOj^>aq?7C6#G)r%Wl^mbWgpR}%V~%ANX9>#Mj1rVOe@Q8tT?sh&ddT1)5Fb?{ zjpe-CC5@wvDy^8zvz_NXci| zfOEgspL61HzF%If-ZV?V7@gUp#DH#x0*fnyv1dJ!(7;ID?OaTTT=oNa(9~M9b=iDu zBbvWz-k$4tVlZ`L_QHT=$<7gl8Yt7 zYpf@KrbQtPH#C*$cI~1w=T^&383Wwnty0Nn$-S&I>%lR5URe2B3CmphdX{ATd!bmD ziCb3eG4YyvHA;N#^52>96{=|!(X{lj`%-_In87CYypQCwu7y3cEi06|u$s5LqJg=Q zcy72Ok>%T+(&TeA%kq9;=aCBmHmVLjlZdX*r3-5q;xf{-LBdqU+sGoS=w z3!2b>Cy1I#0B5SR8yAfsr755*FqM0?*x&j_z+oZ%5=Y|zoJ2@Aj zsPnCYaq-2M52>qpZP}i15zKAiY$cWO&G(O6D?%W%z3-^wApZ@fZMmhm@` zK4IVxf8`q!W1X7Y}5C^_!9NCL{(8BxJZWaPz=W&EJ-t8mxRNT=R}^}IT3&B+VwhV86AkO6*_X3j%Z!GPA8EH zle#UwfGPFiR&J1`aTPx!w!+Do#hm{obj6)=8)os2J`cp+!UX&o{+E^LP^Lo#8Zg1F z5eQ6Q>{B!?e>}#?5;yCE5=it#l|Q-l z@aV`pfdq~|zB%#QJ|5ntQg3TEYx9Uol8?sqDk}7sX4l5=c#@iEcEGMVV+n4Y<<;D1 z(8vby;#G+WvjPd?$w;C$f)cgM+ibPO?D95S%`v;Y&6X{HE+yPy`_(SZ0&d?A@I$CY zQIqh1(P(-PM5*^Qw(Wp-*GN^&QU|y%(beW9y4t+Nm|V?A$*2i`HTjp_{E2s^naIXg zb%K4pLvOQKz_((SD4DvwI?V&`J**X#yCi8>9wAx>yY)6U!3-q)S~_;XIsGekZOQ^8 zkgJ0{m`ouqzd$r22IVaU$KREtBN1qaRI@=6qE#sI#oW~8BDW?54F2`!5}MqlYw6NF zuER_05WvPT?odHWr<8t?vpFKj)F&R4BxB>x*w7Y%Mtc(KA$iW?-xEj^6T{i-{wuk` z+%62~OHcQ$`~t6Fc%6Q6E?eaEV}ogUIdfq7tk%cvxW2LVaXYT3wm!a&B65`TlytiB zg^cF^ZskTOzQXp~Hg7;9pPXfeo{^$^w+FaAR;tbJW(B&(&I)WE+pNL^n^%Y;^hdG> z>}a=?FrkIWK_0G2&HZvHM#u*<*(=`c8HqBJeQmf1!$p2<0%pcP`Nd}0$ApA-Oxj;v zmNqkDoh!_s*rL`zVdgfoYM6EbVkmY?$(5V@W4cFM=8==EhO|8Uwzi!@x>;5f=r#bG z{R9J1bDqcio9r+7FLuXj8scV1jIDs#v~jS^#>|izZsSb&LiRkF;V;P%hN1MF9^Lf? zi_@h2cC$!(ooaJMd#&KY#?tn4bI&?))9)~P>@aZqh7iyR&jB!5DcVf%)6ImSBSIT; zzPX`D=jMZ(S!T=mY6@j_4EF1ho;(tYmxkjvHyk9q-On^t^P+F%i_lg$J}sbBC9JVN zm9&|s7HTg_SEz;3w+K3*S*KsEBNoY~`3zLX@|i@zU6HJHXr_E;^vln)43S+B+U3z! z@2{l@-=lYQni8*OrqBcdU#5`hfgV>wV!t>J%U>+`Dm-6V`hyN&9Pu~P8syywb&&&Wt13Orv41D zz`(@LxOT|eP;9Jn!_*Q7aNu2h+XoJj|5K$X|7SSvKj1iz*kUAdlmGL8!_X5#mdwps zZrI@b?{2%<#nf0yjOE@|ro#dIFwG?D#Y6Xf<*laOZr%@9jLD3}p5hE_%1$`WBz+a# z*i5jpIZD5Kf+1xH8B9$V&X^jUl{Z-$t`*7yYI8&K>f@2G;m>Y?&sNf ztQ+OAwr$|{#oSfdbJJzd)hDLxx%y-dl)B9y+dSd}=l-PRXjkWtF)+M}M-W|vP|{oxmU=9W?6Jn$xyE2Fwh%TN==4J+8y zhR6=0unPWn6e~y{cO|+K$1YC-O@y`^${{MKbzp9U=pFfrL{E}9;80Sm&d34MT z|3!zju-cYX0^)WBKP+C9BV{ zuK=#wn=Z)?|+l^d~~|}v(nGMp7ng}S3LN-cB*~)esv`pk-t$H2=LbHYY5yl~@!*@5e!e~H`H1xQqtnlSllAv`Gdd2aCEwL|ScIXdRR=qzeuVS7PM|3$2yUo`I+ax3Ej;|EG(e%d=7TKjhI zVV9ON6#rL+if-foJ`KuT79HSprr)>g$?{sxm}9=E?i7=CxR!wNuK6Y6&-^}Fo&!C} zxLT<73A|S#WsfK<ntnsnBzvu4hI(`p-L5HWTM!uN4Wp$Gy~4k z1qjrt1y8tHGap&{yrIwyFPH-9E%lO0(Tgg@e&|+YqapIqj|<7*^2HiWR09I>QH97q zb2U@pwU+!ds8Al_(LQWb1Uc+VgQF}ZD+&>QloLhEc1gMmr2v~&Wki9ozk!lby zv)Y}hM^!srbF$ly%;t6f*>k2`nq#tHI`i2XT2v{-$l=+R1HX6I549dW!`D{C{LBK< zN?&^_3k$}6F?wVM6V64&_(C37AlcT##62!4m^dxdiFjnf8lScStka}c{P0<>p!-|Y z{&SAge))Y^8tZ-po!LU%N)i(k6ayBfp8^(|E_1Ok=oIH4_)?6#G6gEgKgGks6NZIV z56(2<39~upC%KdSn=~gET~C-k_UZP{tlRLf(IeQ0=ShRQ`njj4-xu8&{OmpRU!n`y z@X~Z4?&LKrdtlrh0WbYNaU8s)2Zr}y?}0&F2m8NX>SBawjyIZJy0Fn49^lTGt7zjp z@MDc)(_eVHD*qZtJZU&opz zc;PA1>?O`iEzyi1ElfCH$FDQt8t_Z$<|A;hnwx5}`3M%Sk2F}!N4&R=>*Qxo{vt(BK zZF*MBoCFe~@6&PX_+M!{5_+^{2FaEi&0C1nY?s>Cy}Qk& zbd(JcGOS>aAW9rW=2@9;&d8K-GfBR_$>l%5eSNb_9q3YG3FrLJ?Sp)Pf;OUZys zDRS>1=fN(ObSa(8&bwBZ8tziJxYVI8b*oEhXFNH7;8KUX)GU|U-%_#bm1-(1B(+3T zCjBc5iRbjMf53pg{x!{rhQY+H7(ux!tDP;;q1Bv*OxEYu{t>CwSeiQAQpsdiLH$QF2q zez>)xaU&|2t0*Y0y$5fJm{=ZS4nD zCAw7+ZsqppwfwS8fxXDkgKt8!RcKS(6)G7)p?0CrqgnshX|X4MVX={;fpfl!EWJgS zNYCQ7lwwTS$|ROl@kdSKr@Ck{QvUvcbtblkhNbEsi?p(XTdj3#t6^26j_W}tQ$P?R zn#Tdw{6l42!Nl3V=H#k`oVfoGCR%V!Vn$9L#5@rClU+gIu%wN=lAM@s+qSJm z3x+Y?TY&IaMKLJZa(HA5?GsSBlx?$4aP_Sdx+_3lnH^;c%5c9ciog*%FLHEcbR|xl z_^z-aWgXv3jw6wR_U;ze*=&n9^a$fcjBedR4OR`J?@NeJRU!3S)o3iPH-Pbgrx@?C zf;SZd?kEjIlk}q04M#)`CY9B`uR5_#FZ}V!`|ERm6dw@3D2S>SYFydTC)NacZ@;WA5V4{E2r4s(EGqx={2Kqw6-k1Got1+guB&bm;a z&qK1mYIUXY7e-WW!Gv=jH;ZmIJN>c>|Gj3Jj}wv4^Vw**nTSI9r6WVlZZ*W&KD~i7 zN4$G6ivp?9L9Ws|i7 zihOLD>dYr=m2X$m9rG^eK?qh^LU65JnXuXQ@xnU0qL6ddCWLyW;~OBRozCUFKY+9y z$SJjPwD8&ZRQOARPrm;?_&tEp^`C^_T}D_Ka}5!3qce7FqtifJJk#M|?k?Q8P;av$ z-^RwS7`V5(%r8VHh7-kX$?c5An>fbkM^VZNLv#Yto5)h1M~@GS2l<$XyD2!A#h^si zl6L1+l&+5MWrVOJ*@2pR@+G$6@xzZwC4an6QZI9UL^`i`DXXjAMEzXAPiuySuh=$V z%BKL6Tz+Z;p(=v))xqGy*YV22QgUgdL_>>R-6F6QP8+P4?9JtQ1^MpR`%-pnM)%a( z+fcDvotUr)CY({+#`%zKk<-#5njw!YTKfb614WBgfxNN24+knvWV9b`u@Fd#GhCb1 z8tv_HVb6kh!Bu6IAbA)BWR7&~UZmCJq2bbH*AnOI3dDVz#64@u-DvobZn%>~_tI)~ zfmFtla3Wg^kkRF0(CBX%piYKItxoH|)UhOm#1iS1Ajj4<08RGVu@$_i^VZk~M`Z!A zWdbTJ7;0srH6N6^)NM$gPNg^FPX2BF`L>&K)5=Mk@CtsVgP@)nsAK8-!|p6nfSSLD zq~ZsWURZQaTuqi4&d(3Wwnf0)QMGKbF1Q7>@5gdwEz6akm$#g!rAyu8)qgR3`ZOV` z7FQ5woH!IolL)Sb{`>$#cnla2Bu67hv@ktY_IF#Do+{Cz@g{$&?C(=pymz_L8OlSm zmvU%Db*OTM7X2s1KFN;uE;qPR@+~0?r`lP%o!uxbZ%QYqbsoOs3oC6;F!`8SDKI2! zk553NoWH(1R6^)4$jTo(cAKwON;&co@6f_ZtV(gsP;ZzIWF2IngW{>m&WNYp@{+aJ z=7NCs-OA%{aIK8LB~LF=x?Jeya&0F*$#I1>iOa+~uK1exr%ryd|IWr>eX~Xz#FD(POkAE{zWCjo^2WdR#4z`l%a1Yr@x+e8w@D5db_`2> zuSR~@KAzOK{M1Q|f7PVFc96Y|mT`Xw?>NjTIp9KWCbsesAqSEJ`s*>r_t<+q?9YA2 z&||=$gBVwscH;TDM7d5c&Z_Eo3jdZ>p~gQkU2YjK-_VOV*^j$#5)CM0YwBZj*tc=| z?wLf_1+n0iQH;;{rGzT&)n0Dhp{L(UT|@btE7K7vh`+gMZCS~i*W|=sYv(`yq3tXG z03myFazwagcedUVJ!UaS7GEgi9d4S;w_Mmk(!Re>`gUOoGe3W-L2k+i- z=?>B{oW-<9N@ox$fcLsYy7)zbLmJ>^erxZZ}2{9=|lV5 z_wR(7uOQ7@ab9_B`XJ~d)T98}sd4VB-Gfq2ap`Z9P95p)KM3AwUIoA>lE(jXfJ^nK znbz!nE?vl5&3{t=1k2=pDfs$*m(B^^zwFZegZHal`Y)ivzW=>TM~DP$i$?g+>@Il_IEjTe;^O5lZW2Tqtu-c_tQPHQk7i2cQ1fRlE>9Q-IEE) z)AVmO=Y=K@=9QkJ8+OD_$cp|cHHarRzIcoH!i~~it8JlVfKL4_ZI03S(BdYq6YvD_ zC$Aepg69AEbcV*|L3V9&)&s`vJkku)O_t4%VMKN}d@mijt*jwi#jC_u`Pzygcs?iVdEbp`F`>&A5UuAlplylgPM9(X(+R zEH6EAQ1tKRGzg5wR2>astZubipuxswi1r5`sni0+dkEu$)XiHF9LU%ys?;(jk2-4* zf|?-7M2u;&&f_r7Tuq1=QSIB8&-+tH`_P@d#SYiwSk|-XP~sPj|5FF3ji9YeQw;)( z*hU|HZRa(_^xc%5)u6Z3aPKie4ZBf;R-30Zy|D01UOq8SIYO2A7`tgB)y;jfgpWoo zTgD|+xk(EIrYnLQ(Pr$)ceG+0oLQc0+x6MTFgcw3kz}b#no9;o2#m0+ys6I;xPs|W z8_$^4X1Mw>%9UR`(mq(jORa~k<65BmK!Hl;{%{$l-G_e0*_Wew6^Nh?(#v_4i8X8& z>>vGV<(c?94|_ldwEC~pmF|3fNmy2+!VOOqagoKTjgrxeG;JGE$c@d%B86^IiiaFr ztgnG@n6ch#+O!h+ z(x?W7387E`Kp>^Uwo!wTRpko^K>}>_-(=})b4ht;zX5s!p6#45bUG)X>kjqaKS7KV z%pWwo!`3)%%5O6@=93*OxNiMjc0Yf95mxzQrA*iP_OnpaC2)kP*F+6o{B~aBh7%yT znMWOqeCjB~8qxQx0ixdJq2?3F89Np)j`<~5kNk-XY|^+i%u(pac1`n9!w}AQwXb&L ztHen;xyMW&`IE+tJu*Hc+Z{pKZ-FaQ{CDzx3GY7$<#(SL4qe-(y_btq1-VyIEdgIY z=pKIs+e!B7#sBD*>{FbKFSu&tPl}f}ZtUKrumSIWT@6_kYIf&T5<&Wmyu>N=*Nff@ zGEi7spy}qp8XhY^i!xVHb2yQi`93n+dmOi#WKIRCoDnfb(+>p(Ik$l0vV>o6Iysdo zmrQiokcP#Jz(V|)#`p8$D;KZtk-bIqz!Kw5jpqp5^h4i~rUm`_1yjUbhpIBYGqswaPv>U;(|Pl}yDeQZg^o z`oEhvTouJryt~MSMroCYShB?{7BWl9N;$dN_Zxc}T|^HFCpgaHj68PSO9-~J;iT_O z3Q>H*<(|V=ki{+)zxUdSpS zG3VeW+D5zDe;HrZrH+lRj;Fw!Lt6iC$yXg_% zapbXCOo~=;Ti4I$`nM$?Fw^$p+}@JiL$m!O=&T=AUb63PRw)8PXKj%+(o@m1>Hp|} zMDNnwqrDTS*Qe-GAonVjQ^e|=;m2h6dt89wi3<-Z!~WxyN#g__@mCqj>& zF{0$G5uxUFVh}ny98R1Bo1amTI0dcXTKs!Q7l7!Ywk2kz_f3lLv~NA2k081_e>QEp z*cg>@3{IAG(24n8f4&F^#85h5!$8MB!1Y}f!0a^F!PR`O18F$=ZOK`~L(L~!1*a5* zOGg*j(!&tJi2Xw_ejECFOe+vbd|5i_6_!`}`(ksQXbwp7 zd;O-aMPnQ^F;cXm^Y<^lZ#-&u^P>|!*Jzn zIE`Dn&FB#;DQb-npM7h$8M(1ziz2%fx4CavT`69%@A9CpMSr_HL3EO6&!H(w+kvWd zbe?oh&ha`Ln^+0|!}vddZ`LEcOg`zKhltte+uhB?Ve_1zn*V2Z{<%t6F%XRq6XJ2eXdMoJltK!}%z2CHzlABOPqm`YiZd={zd)dYVrk(;?MN*;zZRu>@}W zH)_;pD%7sjm`~x}ZEwjZlIjHx8k=E-)eg12Jzv&YZshjcHcdz7D1g|2JeA{SUZ{v# zt&xdeo=f;m>8?O`{N&f`&tY=k_p9Z z0~)v_8)93#Mg8M!`^C0)=bl1vE-?OMta*?WYt}ifO?c*?&%_Fi7IQR6u7tnw9e>>U zCZl8v!gfX?_axldv0J2%t*!AK{wb_laQ^xAlP`~4etz(@rnFbIZ+YzMyz^y0`3!}l zJhnMIdMMxajviFCV8Z3!pAwlIogn-wZ~uwq4OizyF2}+dySmrpP}9?VVl9~18r#x6 z(n~GqAKTI`+RIMKOttYIIB~0PYHM-R^60(`)j}c}ZaDDhtnvlBlfcmM`JE&lSE7A{ z0kQ8w8mnx*k5@MNzLD(|+#Smw@2hNmi(k-QX10TAN3+&5*C`J@>!v$y@+;1@Sw+je zg}3uwD|6!8rtCyMb1%&*!pU2Lsn|v(8y44D=K-&-bnyLLp}H@zI!LZBw@FK_z118TmPy1~p`E}9jF!3bG0+)~8b!kcDo^SQEr{~(AoFrEdpEnhEq>my%0u2dKkqufV0Dx?!Q~zA=bhx|t=AO~=6`a)=m6#S z!8B*!FlUTDFoiQlDYVt_=Eq7WlRC>R4qR#eSBOm34yoX)r3w+K=||q+kFDqQfS$9Z zJX$*xG^KlP+fMU(YEON#Z`NqnXUZ&;73sQdpRN6^<$bBf6S0uzVTN_*!C5L#o-)*+#YpLaYC^xDK z4QuSv0pHHSfc$p_+)oZTUH5BspVk&o-E7*+{7J@^IL4N;7MWru9+o*_lk$qP$y=SL zHZ&C`q;H_cx%r!hP2c`fAVslAiZLsic5>egW&)a#-AE=3Fb!J|_@uctbp7uEabj!3 z)`@p6J1mOd?SR#$<1!tXKt}1peOWue(mx3X9iE!1-Hpu{;jrRU}_ldH-rJvmP^ zIaZ5W+jny+xy|U%nyI*9>#-kP|BL82s(aIv9zd2z&8TXmK^{`GXA@d}g{mqmc_liS zCmiPoY+3EJPBRnQHFh)Y@;$JED!zHvoKK?XQN`N6HZ_T!mQg$rc(-eb8nV9{^0n<7 z(w8ae_U*7$ZranS*>{qGcad$?3>5lK3b6f>LFb$Peox{atFRRBFnqtrsq-9+@eEEINCVs$zI5rXdg|RSW_iu z`#`VS!gcZhQ@TCVjyn}or_*?<2>j1A`QH@n_6kh20~Xm=Vmx9n(ey6 zmUm8P3GDaMBi`hp;+cMk&%*)Li5s#=S9L7cIrZPt8F3Zx>=@c#S-SYTUa3D(usw-w z$s<}yqCPKnZM3Jp4>kXWcc|U$TOvLT(l|pKA$1k zMDd9`1P2?&^SKa9kSIpC3XRz~UUvFjg<4A#C>~9WA z(t!dwy>zlv!&1?w>^fMQyklsMdVHFZN|QC~k-`{P3?A6PIZ_D>)g*3N1?Fo?pPD+I z`{mr9njBKbkp?=je$3YoD@P%Z{93c&+KNOEU8}>1UWuuB&YE&HtZo*PbG1Qi;$EO} z{ZEkNV~FUJ&u?wKmeU0ZnNXXTx=2$c=$$q?ELq!AH(^5Y-VyyLbMLD(C!Nu&OQDaa zU+z$S6&m9u_&Yl>zT8_|L-Wudzv=V~8yL_<){&1YD!fJR{cQie$8+f_8q28X{T1jR z!|dLboz_2ocF9^S#Kd3wh1eKe=Jo?7@3}wVj%^Z!B`6(=-rw76s6Uu!v0i~i`lp^w zTl3xcq5Tv7_%RK?YteY@>MOD$ocqIkU)3jsH-@3kwn={xS#~ARK7+t)&s(1F(3Gr2 z1<4_*anzI^K7Co?UM^8J(;+=vwnhcd5=jj54&r7k0ZM1{OyxwrTL!f={tv%4kUTQV{pCNhOt;64OlJ)g{VB;Iy{b$95t{jHK2~qVXo+lN&esOl3gYSzwud4X|20RU8LIbv`{d+t zy&#yn$w-57zj4w)-yzpbkR)ypOjR8#6dz@IXlAtli`zrvBHA{n2A+rh^nR8+!*P=3 z^n!|~HkJk;-O|ZjFDK@}wFf%gS#kjH!$eNn_S-#vacxkD=reeUs?l zR^HUDan$iShCNOMl82DD>Ua?iTczaWtCO8iE=Z3kYyxJ{d7LP}%tE;k%O{X}b6#U$ znbPhC7RD(JEN^vJ(QaUwX62>_77c5RcR;76j3tndgh3fA(Tpz-=(|u;SZl?Ji`H%y zTqS&86DN@R1mJo$HQX7(wF^9%JEPnL#Q}drP!v7&a)wMto?>Rcar@u)){WWzXc#OKSx^zkC`umJJ5VwJ0A3Aeg-D)FO zd~NkGg+P-$4KMzL_#JC&vR@}G1Q@yy-ShNy0&@fPCPw_53GMd3IRrQ3Dz+At0%+R$BS3-9}SRdNV!TDgUk zhKCjV`+lVo!Mw-{igG>$qO3acQb{$-y+t}$qBivt4KN8-VKeDr+>2a$XM-8-6M+USF z`YVBeGjArc|1BZ)!bgD)L}Dfv109_;_>Ry7APA!J=uTtXl!DlNS-oNSS^U!c&93bl->jr&i`spV`l zRD|PmR9*S9irYU0h%5qdBas@Gs*lfWb+ZSJ^%;|ggS0gh46^M5 zHBJFgDih=TWq$u+sQEscTA3KrZ%Ae7+o5L7CQgda$R2c3Jd!=6JW<`R;H2)=*#)iT zaovUK5Tbkr#cj@vmk!NEI(5b2lSIO@-zsW;G5tNZ17Q&>Sk zh-+|RK8W}H}@_BQ*a5<_9Oj^|dAQWzk;3r9#`p_%su6PCQJv}y$fICgffQn$>W{DcAb6Tb}nhg zW-~3uDPdFwPih96&PJ;Jq|QeApIC+XZy3%+H{Rdh%v|lz;BV-R85*}i=h``j&X!@yT&d;3v+tF&K zfkUR!HnM1CCC{J>be6#P)%SVD{(ZOX-_yRG9$0*u#Hd zc}xAzmlvOMnLA&B-MF(hgi#%iFxReb4a8geu(|X}iZDR)eTE^K0il2aq0sb;!GkjO z$FOt(->J{ur^cmC0o%zgJ&=C6+zGD>5SqSyQIL!2+PGq0bUaAl2$GCQ%xDE*syilcV2bTw(4pCI0J1sfJS4zwoEwK1DL~cvr7c}D>H@ePJcbi>IiFoG7Y9{ zDFm3t7$hvF6EHsJWOJML#r62(!4AVr#uoYtt^DlKL!ClngoO4pWq7#+FV zo7RG%t~O6zj#1tw>ahws+N(*lh=3GAc-G_Gpni>ou*Os++`NP|2put%6F?Pvgy~{p zjw&E9^}xee2{$uIn_@DE#=Q4fSP3_7?iRXv78Gjwo2{Iblj3={(`3yABBvVY7n5ye zyrLh<9n+&q^hS1wyS2cY#LrX{%4K0$75!EM@!^opyis-vv3-4j;rVA^hk5aJVVEe! z*eA+}fBT_ui|#(T$Xj!024YVv>a5yo4JxdPzhsaRB#+9HBgR!Qvm|EuMe{z=-5A|% z)*ZXrE}Hjgd2G=>G>fT?_J`O~9VvpSbc^)jHz(9QnCHaqkMue$^Jy+m(SIZTu%P9m z|8kRhUtK4>H818a0LY*-U{m5)4GwK~^%t#?mf~Eb(Rc`DthXBMgP>ZFHHP_(WQ^uF zjhnl(q0h&v&ea^FGHctfbN$n}Ifn%#9@klKls{e3?=bv7Tqk5?uce^e?Q-_pLCyn% zXPpgbXYYe6vGW;WuM4Zq?pu}kK?c?K>aOL&uFl?GR3yw~4qNkhEY4$dXz}=XeI5Z* z{gy8AZh?QCX0Pd-GxsbIcx@Q#y#Mzbq6?>v)+un*dZhl-|!h=MN2QcBZGA zK)2zi^pmM4U?IIO(Z7YgEc{=WgZ>>Z{c!63;pC91i4k+ElR0y0l4WeI&#O*+Ek2^9 zIv$GmpHmahC+NwGELnOh`DyI}Ntg1E@ykzCx8$f`yyPf2GAAc7WKQYIsXg6NU+-v7 zf-?WecLJs8X)1ckc12q~(yv>Y)w&_-Eu!Q2LzD;eX^1ib$7mogrP%aHR-{L4dQ{;j zWjDrubYN`0S&k#@DLTD)W+b-xMVZ|kVt{M59oe=uov+TqbpG5`PIGY_!?b|H*x^Z|aC)E+ zsakHh4OHGCd3bL%o1WD92Dxc$D z%M%>HUPkX%kY=5(QL$&Fp3&;Z$sNe8ESjEi{wvL=TxC#U%AY>NC^gEw&-_|tn6lpC ze2U=o*pF@!@?1v~+7auxY7aZNVwrX>cgU%HvJQgI*3txx3bk}H|ft*y2AT^ zf>|&i;C%+8Xr23_Q*E4}@a>dK+h=5IeP^)<)YV8CK-!7A9d}&NVZr%tD1{D9LC;m; zDybC)*HzVV1O8OxFsDuApd#+&RKz0RRaN!mp1&etF}jI)R~%-X17F_fDwl z3xV6ECi$eVNtz@{-0WEM?u~*@Yy3BR+~NPsd1^ldwha5IHw=yPt<_!7uCE(M)x0gV ze+^|@AKUz8E$bnjsMq8F0Lm8!_zuSn;IwfS-`BA$#@AX4Mu)Y(1o-1!;h%IN`r7_J z{Kl>ElgBoWYE21vscd2I00*^;>USdZf`HBcZ7RtC`P;Re=KI=aY>BUZ8g6_t3s%dD z)_CtDLfQW&D4aWkaO&I{T;DvboZb!lXK0f%^(Y*FHIOrDiaEGK%6 z9z%Zn=NxA8WBO$ChPsQVaoYZfNt}2+i?B|DRXYwZkH2qAh1%p=?f4QRuM&|XT6;tO zk5dB0OWJj!tE*Jpj(G&GY7Qh_I}88B2qxfxKV1g=d-Wd4;Uwbdyp+6=!tu>IL*BM# zVWlvtIs;W}wv7?RYuh=3*GbrLV#sUW59PLn253yCBeQ(H0(jlG?z?d5i!+v?(1}Xf zna;xZmupvmEA@iFRkP;mx~;H~m{&W>V^>A9qq|pz9y@<{dE>L$6D#BAb9~y3cA_N* zVGiX0SS0>+8gH)N%y@Iubd5KmrjIE#QET%j(L{Rwv^q3vsY@^CQl0F7I_F@>vtoR& z!z$x%s161e?2^*T34qV2HxDsB(d2)m2Qoh=I!rop5l;z|e`(Y|f3rOHSr6xW#$8@C zKh;2nAS2@sU*bT`FXQU<0?xJkB&Je>xED5bKcp%#Zm7t@gdb6`hzy{{{dg0N8+474 z;9T;eUpw0=6ew(Jl&grB<+Ts=3-(_J@3bB#kcH45p_x^TRjG4G2UXDnCm&YMDnL1g z;!x9U6{l&vTmwzN;CZ*`*~%_KP+fX%Ui4}bB4(e3NQtIN{e_EW2J5&o5jBQN=Dseq z@64$ROzs!rQ&)R2tJ^g6WEM@^{1MxG&<}lWwFMc;uQ**;#7k=Uv4?GtsB2g4ekGA1+|J5Q?G&_8$XWK`f1}+ z=!q+d-xIoN|Bp~rOiwh^L50QkLPxwuYCh=LR!4N&m92IK3teK1yu;9eDvTFc&443v zqPL3y)h?;aCMlpJenHV&2F^g zxurUkQGQzU@}8Q>0G;f+sK6P9^-^kDSXYR64JB!Qh&Sh~@l>p5CB`}B%u3HG@MgO2 zr~BX6`rnV$HJN+Rc_mqkz9mTgiqnow&s1Po4hrM!*TzvJH_UJY>uH0$=Z5&Bmjb1# zCZ;WvlKPn%cIuj*YJdxQ5i-??6)19H?Qx6vv9|73WE-c09!bKtESG~7p+$D?7}jT>FZzEt^X6D zEh*)p7)=31wmaf0U)iB^M2z0qPuqHg$%(tnaXQ^g>gl;^F{6x1h(V}AM?TuD!8qXU=q!2^Ct|C4oS{MHd4E-Np|B<-z z{=U@kt$W&kKNrJyk>Po#_+EXj;rp2(4&Rm=axF1>%)R>2jFlk0OEbb=O@6lxL`aO?e|IV?OxcQO2Po~*w7fV5RIS%D)KFK!@JiM}x8K&F` zX$RQ7ZE!p4I%?1cx3A%J8IC`rpu#jb;BO;mAe&~8xdld3R7qDgv`OvINKvoX>={h^ zFEwr`3THosj4V*`4E!dp;yTaM`}HjKk!yv@(#LqK$On^^s$g@W?h1G`xj_Bk2>dP= z2oW^b8hRf$G|TQQ^s1~$_T0r04afUqRCNny@+P#w-8DoZcmrnT4MNm4P1y>hPpRLf z!HV5A?bTKcum2o+o=PO_+%b>3)3@{NioT-ZN)uH+Pn}HgIvZcT>0f6wpQ@iL^m7?M z&PZzRa`f+KU<8A(ga%RX-f8b@3YCA$)X8QOY<#CyeBS~%>22*vUOE|J z9BR_Y7rS~-4EeUvPuBm6M0b4b3n~(4@CtJ2OV|I4wqjOHckjC>=v^@6{Fl~u;-@G!|DW;% z4mHc_;JYqyI$7xlp;;0|)^GGlAyvR0Zk@9(qJYOkc|9B_x3E!UHQmHUuy$0p z%g;x3%a_TWz8uQ6kn8Y{r=a{GIL95CA6=)9&Yi$VWYFvwlA*^717{m}r*$Kpz=5cx z&rIcg%p=v2(*m-J{PXvwe@*nykE41a2JrfOCxI8Edyzeb_D{XPEpCJ;ho22Q!q4LE z@S`n3yTniRPVqDQZJK)Ow}l@hX7q4cTmV{zaxLTvI)z74Wvs;-j_7}VGwza=9qpyt z;q;lE;q(xF)Z@Z5P7PDunFF^&(0*ICMbO3_AV}-mtK8zjK{@Hg0}WOhROZ{&t>S|D zF~Pz%#G!E3(8XQv1J0|L0uB?Ede$f-dl1qi{t7K+`$t(;Y7sr!DmkaJDllxpJz6zl z@$iOKyps#v*f26?o4p?xJ%7#@gSB|PoSPu@um*%x2G-*y%2@E8lj9b=Ta|4W3*MJx zEO;087-90m8~23J6zm%I&7XgGMdNCE(fjOvnKroPKy3gAprjWh#|FUebfx<;E12L7 z<89y3PjWH9-p)|&m*;~4N!RbZa9=6j_42k%cDq{MJ}JSYoQfv}0QDM;b@306 z3m~@*3e)0I1_}ZK)8aD(2Q`OLEwjtC=;&elPN?GiZ@*)!;^SBeu2{3VB3`}bQ#jD4 z-Z%eoD1^1zdqo5c#WL;2ivin-92i(9E@Sz2GeTfO z`m-VZMiK9Dm}p#D;yW8rdwyrz1tae9I5!CH67LtB36UO~I#Hnthl;ZBcPE?C ze@fviyNu{v6OzwC{M=6Y+$KUpK1&b+${4&zuN>dBB04-aUqUb|vikx|5=f~5&wP4R zR(l_dE}_kwe?1DWomY>7(Egq6^8Uo-r5b&?>7CBJ$I8mb{ssGTL7vMnboZmPTH6cc zLCRjzdDAF#fkHI!?f%tAXR)L7W6q%Gn8Ap8(fsMn9VK@XYJsfJ@#nQ{e844r2n(xG=KubGH-LfhWm-^J(zjvm% z)T1=8P=LA4)HwhJSbD%H#I^q~TKD3_G`aR4Yo(THUfH7BlDXd%1Q(CfnBfPmM#vc? z3701=2{X$7Qe(y}Rj><}sB;4meNc!oW536`Ai<3pH$E>U3`{Rzu|Ka@CLTQSup{`k z8!+y10|r#16=XMLfHn;mXRF&{z#4$F=39&yKX}xEqZhakF=%8NEN;-ajli23gGMI^ z<~8K-C&!_TQ9=TH65~bTWk}yOFohTyH@)0p(rTN=2FK>z;X%!A#71UG=8g4ciKa8h z6FshrPs_uh#YPj&H`Qn5X>I);QvPy8d36PFqC&ne2q856RpSb%I`8~Ukx?8$U*a@%Z3StJL^w;Y?}YP5;7zF zFeJ8eC;QIZc$7b>z@fNK!ytYV zQHs>qJc*4vPSkI+g{um|GJ!2z8Qu}uTaT3e>|rNY1V&oc-}g)xSwAv2Q^q-24`}oO z@FKPRJzTB`e-Bq51pRvL;p*oE{pnWZkr{%%VT7yGxqo#CGl-VO17lH&6)vN)j4PquN?uUDwuUHlV{&B<)Lgg{2KZPDIuwxmVc z&meA{UlEU~$LSL%?W+*>=SbGqBu+C?KVC~pu`IH5ZmxT~9BF@_f;Rx2-Z^Q%hk=H) zKRN9EqPs8ciBHEA!S93B8QmZltK#PnC4bE8oAF?M{nNx8fs%-cD3L*;P+!;c*4U;< zBv9(G?e>rDioWZNnz#P5lfEyqC-2ykf0w=o{bL98eH%sotMt9^Cehb8#sBH-XE8_P zs6Q<0Lf>b1%k1NSkG>~ck(u=U(~njEou~iT>3dQS=zD^{?|ZIMkWb%#e0n?j9+#cj z_AgK0>U`*1J^ruJcdrvP|NZs0^nHYZ=IDD_*1tpF0woa>T-(t1=D(@39n-fPKR1CS zfBZyM#X7;M56v$LbBWeDPz+L8i&)jklZn95+R81?E>o`5usun3@v!v&GJRQVGL~J( z>98l~cBeO9eo!FTeE$ZO)Hv$IKhPDNZ_YIB1{LVN(DAZU;l$K4^+*F2XQHz~886CJ z{>W%mvxwb?oc3KmN26fB6lcsJ7@(A9c?5 zc?~IR5@SL*L6{I$0P_F<&*IR+xAvLBxZEm>bbRHo*TNHC3zxn=xhVd=)@MpzyK-NB z%**gF_M5yJ-t=a8@#k#Cem|U~AS=T=3J&&)_+dCtWt-V~@*Sn}pSzP~YHuKKI!AQ+ zs=xP^VoZuC&?20Dm4h_5pQ&cp5BCP={`ju>e5d`;Er~Tw&&dkiq|K|^*VkGE!1@@o z-xmbg(j+e7H2yHlD>ev=*s~%rE{78g9z5k}ldD&lZ`?%M+(Ig-q-#0 zI^hnw9s{as*_Eiqh{WsD8x~PD7;e=oC@4$`!ovs>|4De$pTmng=$p^!8;-Xv!~T0A zcuw{mlciNhnms5S~*ZPsQl$lh{~8 z`CaZHHq=D7de=HPPiTNelVW~A?^IFd+2T= zRf&p8-uGO_iGIdBYlK@Wrq72rvc^12nUk)Nv{T6M_sd*kHsi6|T-a6pCDkP!O_#dg zKi`0S`!ffm_(lz!Yry#p1;}aMa+h(jpYeV_<2*lOx-~|>ce>28{mjNtl-jmksgqsC zOZ|+?{ZdzLTdG&(GM?yXT;pe4=VvSs&IG5~&%D7dcYi;(=jYz2YcltxR@_&9Z1)ad zcBs4JNKV*S7}bWepp%oir%q%j`tFHtD#VL0&NmC6VAyc}q^h|+-y3ENE3=I0Bk?l^X`cvSpZmgdh2 zxXb5HYY0wOs-+qfi$A5!*Bekx)-YIahPr@wDv{pAb^W-wBc&MOvHAY-8Fp}Pd#-sN zXzi&D@LR?dqF6Y&54}I`ZwuLsMbX>+JR|X*pEwd9>epq+#nbRE*lRdNh`sbKEmhCj z$FY~AUV=W8$;uw25IY|9KvgLl&73f-furv-?&|*Y07hs4OPh>sFmstvA~z0 zJmVCaWSm0HoB2#D2=YG=<>je3nx4;9+vYfv!yV2sgZ*>va1No%Xi(#`aHa%$5*v9n z;EG>559g?AShA4^5M;TXYR(WuPkM`{88MddO5q@u=?ts*y6WVBdlpDPVZA<@TN8h_ zeK&r}7f@hUsObTQ0cQFIXdt$=r z%yZmdKvtM$Fk;S-e5y%K>mUwK&gl4M$D@BBe z`pM{c;qg@p0rk|Bs_g(O5kSBDsR1o)$c42 z5QGODJ^~=nAH8ub+tkDl0S45im35_AqvOMIme^lsZ1FyI2|6tim|uEKxLy-#KCqkY zlyolHufubpru4GHL80azJWgXad0lpO>DDRV5#NhOtVN$>pm^dYTC{#HEdpmoMajOW zQv;}ez%F}Vq)UM5wo$=dnn9UwXw@2fa|Dh$G*z2p7%emY<6?GsM)8R=cYsthsL zBs=aGP{{$OUZYa`A77O`n{Z-oouDd#sdX%#zhN9O(9foCS>I8-;>m;f!h3J^dKmaM zEMvuO-id#H(Kxn6WxB4n6C&$P4fQAmW=H!n~^y%R}^?}WYYM8^E9M9jmT_}{Bu`>`FI~}_|5~ZCb4f#;+(vI zy2)|>@2#h@9~JhVf%XE5PaVfV!N}s6Iek-^$gU(TUEqpy2(v}a&qDGawoMT|MLda^ zCP20!BGI4CQk-4YKHB_oLX9s%y-Y0UaH)(xTRCiT&4k6y{z^c^(9GZR92cF?^*^HXTD9qos>Pq;q4U{u;x#Lf8wZE#b~6RtKvi>I~ED&fMq~>3#m}? z4SICkqrOzgIZ{&LU1C#OC^a3@g;ePOjp7cru*CZuKRQ1Cz&sutSe2ZXU6Z_6OSUs~ zKH{g>URllg3XQJf&0>J+ME{Yjca6-G{CqCd7z3u7_+KRpI2L*Y#N7w>pCPHV_V=p) zC!O&EjvLA0zazYR0R(2LiBBgS&>8tGpbwHvlgtsJr!Ha4PoqROeeZ+)-Y}Rn1&y=! z%om1ylp2mVoA)s6=lxng_v`0p{GgzX|Byj6x%Xca_(0`Hc%I;S*QsddE?_OOvd)Un zm^L4?fC_&et6is=^HeRhu=I?RlI(s%HGyHvIN4LR>|zP#6~VPSc~RkJH@O%A@i-&L z(wI$FMW3OYjIW^+jc>u|-DL)g3Hl3Xuq>cl#3T?{>IB~;1v0J|eABj@vYvMKNa)g^ zvL0xa+LZO-OWn-N;PAVlaeAMuYp?n$pgDuxpX2%<;~zLB1Dpdo!P#HnG`a*nH}5v!M0Q)Q6%@$< z>wj0u3Nc%yn~U|nA0nnPbG)u}fk2(!3BM{PrYHc4KTDW1KP-9vnc^gq8iEP6go{KhX4 zv869Y&(JZxCWNcAhb3@NUU_#+cPDFy@u@JpbUmfHAkRhAns@v(rW6&KkC_dR_|YSZ*APJ<>UUFF@F9 zd@Qo-<8EIC^Mf*_6S!XOr<0>w+Ygr(paG?-acP;x*)@U}XJG`4eakTAzVXYD4X0Uo z7|@khT8X|7C!L=zF03Osv(Eg5?Z`S#BjFkHf`>XzoLl)5PcBjw*7b1PMwJ+7$;nY~ zK6_Nw6LOUB7X5QQNA850&Xhn5VDhWdkx5M`HFKr-3XXMxCpouH$>f6;P{_c+qc$o( zX5i7S507qrcyuf0TfAg-%MZ7;y5)!4I^FWaZM|;!$#*6XQooN;E%7kv3UR_0h$~)C zF5)Y&p!PW4agz)opjN14nlRR`UA?C(cwes?=%$F(^ypm{Hr^e#9@U&mZrag&;WuA* zX{1LT&h@NJZ`H&oqLnjXbXTW4H85JQJGIZ6MZ)%S;PWBD*v-52NBI8hSVdr8#}oXk z5L9$X%mB)Cb%w#R3fef>1vviZqL^#QZhcK`FZzhrUqgX*~Sg2lc>z%-we^n!(^X$*{YgbjBK6fSJIOu4|x znXHYYPEi@rp3+~YDMWw&JnuDIo*`Wobo_`sdVIgWMbbYP9ZsK%T4~5K{#nS7mVq1J z(`9+I!6~@jh@XSTWNz|71{B1ZQzB%fZdj_$po{(1ByLy^PU&UBdFOuP=lBMkqZ%kP zj9r3hfGpneaK3IP0eD5}YB%eye!X#2@&Q5LTMepj?`QhiC$?5X+6)$cH0^kPd@MSe z+Z7XAAfs&e(Co4ya^^Vc_ zuNJ5pqQ5qu{yGPr`6>gXEw{2-HggFrT%Q|ibexlWpgf8$ILu*oo-!qKANJ_?8a+$) z{pPo2Bla!lG{drxzTe85?U#GUJkfRH;rore$I`ps`;{mpRGlC`DtMtoT{Qn9pPA?K zeIO~Q^6sB7_#QI@fkEduSZ~cVaBKFgsI~>%4gG+uX9OQW$I8w}}<0i@Yz&bXW z`^zo9=ZNyg%^Vk5ogAIr4oX+C zis3EVP4N3mA+8Y=QXX&9Bn|voxiBTJUO4Cm{s!stnY4CvWMy4fS&fZ=W80?`bN+fD z3hw?pB=PkO1j(=LB2AoQK+7@lX7r!PQP8!Yr?h-VA>Go2AY16Kqs~0RM z60VklaJ6)UtC>=@N{(PA5LL?Ua~*|L6Yxw)lrAci4psn?YT|#Y8TPU)fMN0wa5Z$j zY|OE(IiaST>6X~m+{pPM&HwbSxj&zJ51ae3A0-G72ciDK@-}8dM=I7^ITuj{7S*WY zk3m=Pc8%JD+|@@Ixfgze%J}59^*IMxL^%HWkoB!S58rAjQ8$KceB29p)qua zj8abT@^$`*CD;0ydL$09+Tt8jJmB&l)9WC1mEU)3bWPmuGTtIQhZ7Guned1ORtgW} zz*t0=TA$3__#~c^NrKe~o%`?YcKom6oqX0@F1EX?N<(JD-I>T#d)1+oPX6 z05Yp4-tH|M=cfAV8%0|Xb5OW31**4rM5ZQ3-;ScI34|nCP94e*2PBq|NB+y9CImzl z%^PYDnszr7`m66>QS&TjujT-S)Tteis+(3H`H)NreyfiVp5v>$wNlUN@_(bP?G@GW zb&Dz~$oprbXyxB3CDA&cp2z&CAxZ{8@hC1k8n`qZh(M7dPN)!hizJcI`jq1)@&fX; zw-6e5!OWNL7*0+OykKOX+Z1a2rL~oH8x^Ht>BH*ymS7M$cb(*a+{u6A#z3Du;U0~Y zX?=1vF(|w0lL2jr0#&x=WsW$4Rs`TXxHXj)YX!t&jx%otcnc^jKF_pa;zi&*Q{$Xx z9{H(2VG-rHBfKi$utPki=gAx>gw(_td$l+dgWI!sPyymTQmd1>TMtBX4LHC_t~_uH zBkL90Omvfgdj*O1-27OD?t5_hoK}uNaBE6K;duVN@^wJ}& zwTLIXOXeQ&Bl&6HXx%GBsbA4=){b_SfqrnlDs+rB)h{kNb$wGwD8pB=|g$ifG z0V=(#)CMSl>D(47rwmBb`vK5?g_^b{^yfXseQ3b z^Cc{#KdR=Ge1!e+QK4-YO#GQhq^F&x+5?64C*lLd|DUV%TO$SvE$x zk<8%t#{C_icQl=KqJS@_>0nLKD#b<-TPXi%zEXgUsrlUKWW)Ta1-j!Wf2uSkJ6LyW zneNKA;q?X5L5n-QvlRH%2O^xrvh=T(tGf8e9oRdyPIvs|Pjv_O3RA7r;5c zQ0~xUV~TPnw!&MyZl28}I_zl4{ZR8Pm$FeH)I80lO6*F|CU_yyN&&Z z9bQ}!J^wE=Q_oQI0UBmtCeA0l=;8^N5x5FT?Rrf;cERLO^D=wFKuGkhEr`FzNT(U> zFYp=t<@d=eN(DPXR*(qh1DyZetnHi`Tqm6!u5)@#tL7`3!D*@y;Pk)7gw~sj-uudX zQ|d0miacrmLqn4+%>M(c&;@xC@$Lv8%`)dx7u$0K4YM`%6VgE{w$M#Wo8x*I%t<5H z!cQs&9}m{L=pTU9s4ur)8};p&4jc9Dm<}8D?XYkg_3f~58=dX2a2uWNuy7llub4ES zzLhb@4WWHm8iHSs6LCvt&m_I#SF2Pej`I4!j=EE4yeZdpxU&tSc zBw1i=Z0`};%eCoxMCtq^W#UMU%O8AM%7hiDE<=?;TDkYCgB{d8-cI*~vZsblMR4u5V ze0k*J36YC&EDJSX#$%IH_)f;4Yi7+CG5_OfXBTN+>vwEFW;@Beb2 zNotra1qD#Hl+-gq?$)84k|(qVZyROBpKecFzJ_B>)s_8MpHFO^jF*8z&m!ODyrB~*_M)>D}8_OroyiVhOK zg7Z|z-6X@>VC-b4j~ziheSi0J*8FDerG*;zJ$CoIdFG2_Mg7qvzn{v=pR8i0u#)Nw zJ&R;IlgUazdFyA=v+)h&usM@?aLRJF2-^_$_vgFO9^YYs<&3dvChe=!)tALuyQJBz zv1_lukUZpQz0pD4czH1PQgBAl4N_gUo+NX#?>?0Mou7P-!@9?f)Ta*h?FXm3C3uo< zz_xEN;Cbg(xfT0k01UWfA;bQPRTO7=?q!CJznFTHHpz^m2395JNTnktfm_NyCA-Qw zmsXdqm@-LD7c%Kp$Da*Mu&+LY3HEfn57P|~Ot6pNsP0LdU`H?8)&%QAl&)Hfih)hk z--TF(->r7_J>pyaB3kF4pn{{lv{op(Z3hL%<$3?$DDB`;O}uv%-j}%I<~hsiU4@_0 zNV;gFdO4Z9@4JVC-$fzfEVyT8QMEk&;(xO5k8do^O6_;J<$s@6a#DwnH*e--wbvn0 z?G_mLt=T4w(+=g{8LaY!snyl-_q>N*!cr1Y`d^wq$4%2mxNkaanO)cpXl9Ia0;Y`f z=XoSLTLa34dR0Rkiqr$tuKp^IEwCU3p{9p;N=oZ^12Dl=NKg1N&q9y7qGMYt9g_yq z6#03L3Qi7~630BN!Yp;?AZFL>8|tUg5>x?Uly!A`W!P z@8(eq6)nf8G{Y)xuOV1dpiFJ4zQ84J_q3VmEXn{`r0+sE{lP7pB z^S?S@*^DN9A%MYHU#ITor)fpxAVL~Nd(q8DsUIVQuzY*1-*spZ%>>48G;`%ZGj|f1 z!`n5V9rg?~HiQ??*&x^H2 zuuzjG!Q2hOw8UL(p^IL^Y9y?>bZ0quE} z4USX<9t0=20wR=r7W7({_4tN95%lT0%IA~HYM+>XK;i9U(m{$X+ZGE9wdso+<4Q=^Rvv%G$3s^T zs9F`Xr;07$gf~p+1bThG?j+Ca3lLSwy@$MYbk>3b zaEd$86DTiP-ih~X|Bf?IYWUu@r00B2CUP=-n1<2t)JDM!DY-T7d!4~7o)c`M#$|sA z+ox;dt1IKLSF+>$!(;!X;{%-f5_IFgN}8eD+TbK-cWwG5tq`UBjVpl2T(0uC=s-V7 zMd-&{`0>J6&*#gim)s#Fw{+eQM?WvtxWp6`4hfDgBeBp8BSffM)u{-1 zzj;LkN$G-Z=`?z zYw+LI=S#ys_)EfHjBxRGIn>x&CXY@Cq_e zap2Co(%a*xFV&Il2WM~<O`Pz-c{7`rP{7|=pco-=h zq@(MkQR-~O%_i3#w9!}oq;mXY9{eenik7P|D+-757242_PetHe zy?y zQ4nv(>Me>won7xLoWzy!yIz@Y4CYl2k}^dsJ?Un@OLl}k!fR5yORy(%Kdfg{c4=EQ zmuKy}@gwy~>sSAv9vNQp$rny^=O|Y!fv4cl{US=i@Ye&S;KL^*bs{~TzIQ~RQABf? zv=oYT-S^#sGr9Qq!bO3|delCS9=8)EbDOD_v~3{+R&~?6)X9R8I*cHa4@*{RoBl>J zq3BEW8`CJcJtW?m1?#mTl4Flh?7d!lVb@9y=>C}7n5AdJ?<8H>9dRCEl|&wze(RmH z0TK}A^tG?^o#P-G>r^=;y;JupK_dC0ygQmZnDBCoKyLDo5n@R$ph0}48w)*Z+Ez93 zmK^THX+4dH5JW8jhQ0`${>(dazSD9CM9)&cm{0YglQVe2>_&svI&0IvRgY$b$42@V zuSEb?7Ozb`AjAfBExw}DToZbMA-+N4XiR;7o1rg5f>+q9$Td)3*PjoriGr8ZM+CX;zI(~_#j&+y;;p+0+Z{|T3W zpM`PGD5UKtgqpABX~T7S6C#&Sj_k%nC?_?UC*kA`MYtN z>pvJEw(EQ2@5FYFwKCZ5xpQ{Lc57c1+XYJ|*xIb@U4=F4%Xp|L^M1Yfp^u|+|ea~MT2Zv2Hx>5btMpMGZWgTWETS?*L6@tI{e0jdycgE+nwijS+>!)jiYj>u)5NDe#ei9 zritgg+iPc$-P0h_Zr1`I^te@9o$OC|-VHe?3mq1R{dbd9;_(7{9av{1+3?dN&42te z_ObX44g|DJjLIb|S7zx9C;062+x5vEF_4W}VY5TRMqMl*y{9_@yo?D}t$zB@!HS=H zPM7xUGum&^vTXIRzVd!Vbj@`1b30miTgbMFzYg~EjHh4`kqY~dk|BnTiq#vUn{TfKWOQvlr{a~|tzTdTkraKDAlvX--CYZ@! zixaG#RoJRTaiqV$A`zXya>E{x^JGU%uL!s$wArU^w=4k7XO0kGw*E8%x;L)u_AgFR zL@!#bGI4I#2Me>1*W$!huD12Wt`8Q@#1!oZ=~ zis?jly{j;$$HXGnSB*}LlKto9G{ozTaCcg&{=hYAODsjX8 z;&x7rZX8wdJ)i3C&@=CqUx?~h4x-Jw}2Y`&%l09K-$ z(S1E1{72kJRs9vJ-l`?>kgE4CffeWp>5h=bP_-L`+td!05Tgnl=|Hf=Ad=pu$HdXT zy}*Ug6vdj>8HBNP${LmU)4ctAi<{kz{>l? zO|#7~k}-RGaUTMw4&4DavHmdlng30*iI_>K5iufe{BJV=w-7h20?kq~Yk^-=O?7@v;%9ScZ)N=D%3;scOn64I0B6e8 zy{7b!q3eI4o5Z44a?}h<)ey*W(`!|Wx8SM&$5WGqhZBcY1AU1Q#`wRHt4wmWc741s z3y83FzAf<43-W14Rik!@ev1rMi}v>|48$KCQW$DJf`{b|GYZYb5Nh6^WXoNJDL$@B z#*3^-XJjDhYT8EJiFNQK83-`C8keQsu$6;XxjJKoE;4w&FwercsMp zkq0%u_h-(%yBpX5erx;x^LmlH_ug~QIWuQw&YU@OX4ZK(-RL-5*mmoF-s=muz+c5< zTj1}ouvcAL*lQi;Mo#9mN}lR`+g-`kSIV+JQ|$*CI)g}i!x2{x;r=%>v_EYPfK6VQ*)s^T4EETNiQ|tEU*1KVnu&JunK$m z5msT(m$w1lt-|_SR}%~RWixhMg=s;b+OZv$VKR`4S2@nTcXhb!dYz3X5l(DBF|sYv zILaf~<5}PT32U_nTWqbS+S{(x&e(lDW<`i+ZJtOy=e1K$ppHxTQ6B?2osgJ0fq9n& zQA>7kBh9WDDc6=9xl46J*6j%W87YNHOCy;gw%8R`;Bx`3rIDy$nq8lDOQXqdX+%&b zo+9c}S4LV#X=S8JrO2uht&n_nBi-`RNdKeNLgwywdEn0p#FzEP z>d(#mVN8yG*w#-^o#@t28@|Jt^dO_^a`ku|KkMwI zt!9au1$lI4uj+#_`q%=jc0zVWb*GvIA8UfDev+`7fibS=g|VESe`tjkI`J;$a%&Df zQ?+m3+EpE{jdE?N5BR0|xKEY9yqNfi@M$D^ab9`6k~A9YZoeQLo39N)|9nKaXj`aO z4kJ9)W=T2zHW=Ord`5r96JX-pyo&gFt(FGwe~maUCs%jmg)QYpYpQX z4a+ILao<0)CnK?#=ZxP%EZDU0ACC%ZhCE<#33>k8A~gh-`KJ0}fDO-a^u0;LUmZ0j{nQOD zaAD8;j~NfXvW8b3Yf>Z_Q;nXt{G*pzYX)Y7rkeYj2^b($r-C-3YlGHX4xqyQ_|I8_ zpnG*2s!8X&*o7}K8zisvxrCppBYw$AueP?9)XW>AajQB(FVu9nc6(O!p&EE~sAN*n z6}MdR!|EeSYHrP}s=A~l@unp=_##oZW}X5(V)z(JJqiC%RT!!-;}MnJ`on8D$~;gv zRCu-IL#VzFx8*?!oj?n;5JDOWkKQ7`-J)Nf=ErP@8R9tw52jTC|Lmax7SN5I*8OAt z`2RN*@a_HGQYCeKgHcUl*Ntg_WvzGmg0M1xSS|p%A98_@<~~LI)8D^I4$R5+$j-u85%O8{ zY=r=;Us-isFhjY$@j+GDoK$%Q_8~VZ@gSi#COGE;dY^LveIt5E^gP=I%;&Awa(;4G zJGoc=2X>9aq#*-D)j{rKt2GFG!V2%I&L>02xhFx)viseV%MY{r-IA|g{K>tgP`~(- zdrPr?@hA6|O8w$b?kywqi$A%yxcDbhgk*e_xmL;vI=vZl$vz-pxiyw&(dJZ@xxT7` z>hHgoXyElw-Npy^yGTM1PSY*OkgmepQFhBFrd?+^lP}R4xt+)NsVB$HlP4S-%P7`f zEZR9!OU5Qc>U}mF=iDb6a`9`)f8L8DZ_>w90(EX9GRM379SL+_`3DI5JnC2N&ff{G zDhn>s7&6__I!?zpS6+n3YWk_6(Ez&BZ+|ah6u+4QiN#r1?g%j%nw??@>CK;m{ki`e zZW=O_hVw;ol7qpFG{XI6M*7i3{)~i(h5DJ1Ubg^}?$!^8$=B+0G@Pe_ke0gxs&Ubh zLI;0r*ZlWy=y!A5>UXE_Qop-PSX8$KpTU$ED0hOe`3qvNdduP2^4i6@<*h3#>Q~;D zUlBXGJa%SwxX1ztRKHgqzYJsjdddIhs7T0}{v**J;>}i)Upu($LQxMnYcI)-MAv(- z5gpSc&oDfmhzWWLv(Meq;iP}OJ-Q?kee~bb;+A;b=yAC91x1^md>YCP84@;xwEq(+ z+FJd-Wam6+ClL-Vx~RO*`tm-1EpJUkfR9h;fUn2i6}^_99Y1AIdA!=4uMHDD_-t{3 z6e)4n9ML**tH$ohJM#rv)8;;XseHY+YLLXRUzoMJ3Inmyk-;YJ6ZUBM)H0b{RW4|C zxX=19@kYr2xagg|!;7|)V{UDv!v+#AL!l2)y*K(RX_1bvB%noL63_-17Ke>?50TrI z{UN)OFP&DJk3;A3Hce?WtUcNp*5-zELpu6`Hba_ukHq>BQp;^fuLy=TQuMk8^r3%q zKuhT>1KMaKdZruEH#M05*l{o!M)rR-p6v|gDH_an$FTu4X`ji)@wna^$Bo`TC#M_7 zrT#d&PuT7dhOw>9_Q!Fys!BVK@49h(`6$NmF)2Xpjw5CY8#mMjyFOl^TIJoZR+V;Z0L@tn9Nqs8?Iw=wCSFnHnT=_+eaXH+SgQskhT&f)yI5eyG*Vm@m@W zgj%&WE!1jeSd+2Sa@3m)>rD`9)q#w1Wf*wEDJqub5IscdQ2mcsR)Ezl+pr2n^X*5TI|I^Kvz2(O zA6VxatQ)a;iiIfB$>*sb6Vdjasnm~+s7Qx(+%|^$d?F>kiQkDBhdM%2#sjb91Zi6S zFmsaW=5nWbIW*3&`qkTMD%>B7J8s7V=ys=j66c)t=Ai-NMORGKsayUzXXvB(OspI{ zRd>*-iMZ}cx?|VOdpM|D z^*dCVAFe@*<{lL~!W;DGc+Q3AaE|<7MxN2}yfb|#Qgtk;13&Rwy>=1FHN&Yb2De6i z^P%u=`~lBO3nuD;D9@d5zPM22XI4-Jzn(}(gRkb;*RHbW?@05Y1J}`kM3slC$~yl8 zXRwG(nI{^IJ!qsDdtwfE3~r|{{>FOg?^fd!Ej=Q!Nm}W+w8c}jUQ#-$+Q}**#nrAp zp-Bbcey8-s)9+@859%)(+hK@nB5j8FfV*}aVhc~|s@0^g=3F*okW<5rcuz=-M5At@ z!NKDO?o~=H>b{YyKepUW z)6+>yM{v1piFd(F#B=-9V`A#2vV@pwheSko>xDXMk{VJ9u~jKS#6`so6ALbe%ts}l zl@~bc%VU$Y#5sz-<2Xm*k7RO*XsIb%E)Due=WF;lAo8F_@8#08j4|yoD3nCAWCVLl zWku78{`*5Lg&st3d}1K~$LY|?xP1N5DT{GBU@KkD%n)3I!GQ;6+T&+Ui+}~@aLbofeE6*1 z1j84gEO4Gm*ne=C>K3Y7jPAj&qeFGlHr1RPBuIol)htN0Lh&H5La}0_k&;OR11r=x ztWX!o3gzDTRw#kxKdD)8AzX|R>TEvL`oh_t2D@sU{i#qlHRA&NQ!j2)T%B{>?IvBo zLpE0wk!S75W+d9={l+u<)2ut4{mD~zfoGGh@vKwVrP!bJ&TZ{*yx_CPoc&3y3tMW3 z^=rG13*wug>_Gd57^-%4k#)gzkQFvqY9i6505O^km9;g4(YP*IRM z+pZfU(G4j(ewWrGK>u=F8UcFhnQa85!oBAV0-#9~!AVo=fcM~lT*;3Z`0#Y6Q4Jj z_;j<5i(8VkD4is_$g?4Hlb!eb;T% zwpAja!lLths<81x@6xy0=yfditUJFj*D-p0a7&4^@|bLA?l4<$~26y~E!|}UY zY9^RG&=9rS;p8(=(}CvbHu75dX*!q*cqHYo(XJfM*Hs%F;^g)=I1c`mmNfpykg3WF z0#%aS;IOKEx|CcWCz6_}B7TmJaIm{Ua>K;##`apsYb;KNB5msg@{2r%?$cmvgIfHp zjnp(9R*&QfOZ2By&vAQD&;M~(W4_zfc>Me1>G)u|GbTACDpf~-SnX-_E`?&<+F~Pp z!-Dj{Z4Nx$CiXPmIa&F0o3CVel%QjTxBoRN#job;*qrm%XfFTWtsvZ`KK#()Bh^q* zm_!=7kWbAL@cAi~d^sTt25%c7##59{jnkEAW=aHE9^GVG42eNMBivAQtG8wB-&(_@ zsKMK22-zTwPGdcvJis=Om?Rvqc3cG5mmgU0DxHT7RMylUjUF6L{wAT(^d79AM z$%=43mB37t^~-q`Kk;RdE!*rKA~kv^Qj8D&STDIJSCWNvjtLhRRt9 zHtsrK*dTTSnTFPS^Z$bXKyGYQCb0zSyTMM4VntP+@HZhBQNr0oiKgPHrw~<&F#zpS zft(1K;F4}dq}_^M9B8EUiNt!|`(rtrSenv@*3%HS%+mltgqb4|+L$9G2I z?{P_Q$35y1>oa{=J9tU4rUlXv+Hn!@!U+a`n-e7TG3bD_DIlQhLI3c-P}7lk54`^0 z&BXm?Z|C*@Bdd6@%S{%~nsF07c;E&2T`&iT(a7Uq?x5Sba`cAXpCj=Nt6PMC*h8Ci zX>*R`vcT))lG~ANLyl^L1btOI_)n)A5(3}<%JHc*;914(b#Vv(6NqATr5Js9K_zp) zcg;Fzg5+T`M^q6rWt45wXas8Jf6j_Lqxx_h0))X5(sLIrADbVJMKyvLSBsV6wzae< zKe`%@o3vEK&I00mSQA4Qsfd!i1bufOu`@R#nb05|F{3Dqm?cULKz&~z@ zreoc2+WTM?K=LROQw=F)by3MGT$$2`6hxG)c7%4uq({|k>rkCjGw&#If2eL27byob zts0VnEb^)l(~24#nem6ES++XRNU`p7oJ z>-P8F8tf0R+uyr+oIkt?8w96_jS|!3s~h3xtDCMm+UBe4Lp>VR)O>X=g57XN+9j5| z=HcT}&r1<3+ncm1WibNxl$uV(o(U$0tkd>$=d1Ldcg#z&M+~uqRYzK@p`^GSLcX~} zyx-rVmff&uCj~^3c8>GTq`TtVNHk3F!kp+}X+YXqsmu?|m<{3nc32?mLuO5AN(4Yo zJovK<{CRP@K0I;?kT+Jh>BKlXarDle028hg0tC#lKNPLZ^Lv!+LSNT~@{}$#qH2|D zY8|eui;;qS2(7nhtWe}NP$X9@Y73V(3@?ay$6e-#9n#SUw2)6m#@-r@LS-8sSjwYf zWkU|5i}6Kc^Y$b!BxjZ6FQ*?|16BI^L9vruGz=i61(kG&QLWNqlGfC#aVkM4BLxF3 z)6F990TM5ZxZQNYN9x`vb#I(Eh~!{=)WaZ*XGLaUf%@Q2jwTA}Xpd+vfAeImjAtFE z(O9XsJfjJ{Du`C16dgE7bhy9j9H^It1eP%RnqDoG@YE-W!eA_TmhT8++@K^uxFL9d zAWv$S7GDPb<5|->)9MA*Dj9nn9TpfJ{`_RMN_u&})ln@6c}MTiV1fb--ju<&*3qTo zSr-S**=T1Ae+)VEKFEbss+9DaR#Nr#ro@V?bDCW zrr=m`P2UWFsTRTlbwtao4(NBk+iKty>TT^JNLwJauFw|-G6Bx+?aB^_b(2D&r|0Ml zyLRoLa<>=xx4(0@I@7MV%4+Yd;)Jt3gBw2@p;l~u577c#G}xPg$3=s^InN8<>_WS` zwU|SSkSwfdpmdq*mWOeSa)zq}>eCn`+=jZw&`=PYBBF>+@tCI}-b?p^I|eKiPx^yz z$pw>MSmF3k0^N>230A2p)3n#yU~z^oZ^O+ZXNN1TUE*1N8jq)5*D>(BSTzURG47)z zIb{b00Y8mOq@EKV7b+WtP_Log%a*u=*YL)(Ou8-x^)c(Lvw zOnc7zaomeZFmv8Nkb%-Sc~*vnIGFSY#z;prW-cBUrgtnzxbZ|G;V6K-Is?}Sh2U^j zQE%!Zf$7&3v=2G@gDp1)F@&n~ll%y_(RpY*>ysw<<9?s(Qf^ z^m&nKbv!TCwN<35?dDS26@amUBo&--W$@9iqQ|^_y zubhsVeHb!&RCaiINj@JSG)q(gwU$6|*qNOuWk^Lb;n-fSt0fwebeKpoXufVi+DezM zvZBvg3GRTPu>S5UR&A>AGbU6wSUiZ)eYj%zN`95qmI7Aq-h*qb}V%}Rxu+L?j% zf@vw-Jc0Q=sZQ+lOZxW~H#v0#Pfp2LTBF?WEIZ^gq~Oz4Cu^EPp;7c{=50tnWo^h^ z%0{skpm&yHsGIc1RjrLJIJB78NtlGVwSzxAL7aeNi5(&pd=qX=)q2%nxc0*u>3*dJ z`PXv3o?61SOt2YMm?4<|qc(G9|W4!0i z*X}&}ar1`uR{jo^($B`;YN3cK%{n&6mt$+OIlE9I6S@?}-@=L}z-q z-r5dc;-uzxvjdVB_%|Hw)Eo6a^mJ5?zqNzw3q@v!H$(~!gBrKInP zSTuBMT2ZG>25HNvCv&0DPv$iI$Ie?rS5hB}II_KWD}6Py8CSWsW17muZhf#EDH6~i z^o3xAi1-1OlosT9Ck;o2#B=71M!vAYT7Q=Wkya>mdxs}2k*Zib`26FAGL8{}2ynLa zMd1u~^TsdGw4kS=%=w-97J$Kz#nBLYTr7N{XMZ8e#WouQj+(&HlH%5tHu^h!(bC!I zTh>JK4T`G0#*dJB-dX4VrM3CUfR07KmE1V`-HgiP>(3JQH0Vw+gXfENH?d$Gp)eZg zqW<}Mvljj$i=pHM;v!NX$j1PBbwaa#q+aS(=oc{?QWrps$l8;ca@vyk4jg5qelV_?LZ!pQF@-6dGGJ2AXtMa~-b8OP>+d`mf`zN06p;DhSaj?Z(>5 z)7Va&ft2J8qVn;1Eb*>pHHdz(#KjZG#_B`o9f(bzLAe^}MSmdUZH}Ud8pf%cH9Rva zO)8luw5}6Njgz{o*C;&p<)o#e?aP)Jf7EO{B2>ROW9VlrsVb})Hx7f3(q(6~9Lf9$ zM=}T_H2jJ?9Oi}F%MwvEw(QmK6%I($HQ_trg&tQJYpv3gB-8vW-ZYdJSd20wLR&j} zwMQzWX{6vH;z5^$rZ%O1Ba?}>^A;ExQAW)CpAslZvIbZkFpOOrU~0Cp`TVi*4=Dsr zpv_eNIh=bU>JixXWxxv8&XdQ;URoc7>i?)Ggq7#XwUbW1=~|Mj@VETWyp`EcZ?A3Kyg0M^y5L=TY)Wr9wIcS2T%`=Zk)n4(cT|C2PW8^@VMWoK zp*t?ueV;cY(Ra$fc(Z)bmz>FcljG-mRUb(W`P6V48AuPe@5zsK)3wz(&G!I7&`dBK z(Zw))%TfNw1!H!wH=r$-C*@0{9AI|2+k9y@yZp!N zqMtP{HT1MKNU}PL-61jI&IjEnp*|{tG#e@RgKQ9!vO#z0b=W8WlAA^fo!Y036k5Z+ zNZa!VQfjR>pc!dfdDhN-P6nN2c{gZQ`8Gc5t-5lzTs*vB zxC|^q@da=WhAumC!i`+6Bk`=qXCtQ0d^}|fc=#SjDJRVWF_m*&fjH9_7%5^ZLj-mA z;m#pN#AGrH;I8(%_B6Tm5(A_!HyYNHa?8_w+<(q{ElI@g1dz#kum^H$>Te{sK00a_ za;skra;wWz|GwOUa%QSO(f5&B$t~?~uhJ~FlIk8s~r%q6{6(CK7r1#FtQJ;4qLv}yI4r@EZ-hMTty)7pVXwQwwg4zww{@oTOZKK-uJ&d&aEP>Ku*THov-@cw7(0JWdjjwLh~L4mg|Bn0C*T3WZ_3st7{ylvU*T3Hce|v5}IHN!KEBWot_8v)Sh)t|P<_?uNQDzQJXmO0*E-(+k0wtayN(FC(p9@mD+ z1qEC%A3qC|VN4ePp>oaTf=&GQT->T?1wU8{t=9wov6?qYta^qbNxWIzokUipzGr{U z)-J`Nsmrza`7NJFhf-T4Zs^P_i_g+>DjiVxb0mXWM(0vLyv>t3T6w)vo_haN>7%O3 zEmG7}b${}ibWbD;n&&*{UzVp=zPI{^QhWRk?w!&>Hw{lVD80M8nZfv7bTnIP*gWL0 zBj~2-K90h#E6TXA=VPXW@8e$8k$eKb;(5>ygm4o*V6Oh?A-2D~UqCWcwNcLiQSYJ{ zSf=_%ubz|+rW6&r)PCKmx?B0YD@I>eed9Ghu8I_Otlp>Q_UtiL`N-{sG?L*B>?0En zMgY}wT4wap?B;!Wk?_879;pcjjG!}^eN|Y=wedtR%geP%vW~pu0_*9>hmt;$k zp70Q?{0aZX5wxM{0U@W^0OL#VJh%MO93eTknrkq5h}mqyaT_LeZYvjYuR_#hRZLo%&A`h- zk>L#*EX{4#EU%aMI7d9ZZb7=Wy3-?mLARTvqE-O&i{;l@%}OB z7jMtnS-*%Js^K0{AG_zC8~Ws~$5Lmxf>JQW8+zU^$}&dOt) zbjpg8dDJ9-$tP5o*Y^S)v~o{<8$&?i4KoVv762#(VTwkglk|mis$NL|eX^TO*u&6C=!y`3jSd z0VQGZ+C0|jn}VojTVD08K=G_WHKRa-q~1GWn03s9u#X>$p>`yitX z$uWJ&KJ`}HNpZKf^<7B}tEq-Plf79(4@4ePhd@wEn`oI1%1>vgEJ0#bi^QqrbLS*0C8B|WS z*Rm<9Ulo1Kb4Oj{iMp160a8lsVoUChoe@nK@j>|_z621muh#8D?LHubLiJmCuP`Qb z*yKxD(X^!uTBzaR&P7HkE+QqStb5g3X z61T15`~Xk-LjB#56&($9J%BtEU~(fLmbWeuMSJ`te#@Jq@tdD(OxJRgz!I_pG7&q7 z9qmZX+kpbv@p?qz9h?*2UE4~E5nWaueNpwKjIFi=)C}IX!rH6!rhg7PNAnXW56{*?ek{FTZ}La;AWq{VMH3nKYXPGz>k72Jex@6$z98+X`1992Z$!gZhMhk=|5#7rP|65@z)c4EhId{P29eh9}WIf3J($HK1Q z*67RI@cCDuX|fZ|{tz`ZXez+}8F8FZ)d$-7!<)`;Mxs`7Lo-jZ3rvgP=M$gKSADp2qB#==kkb;$2lD`Xi=Kb*}(I=Wy8k$ycrYn(R0TiXvUa znZpM*9LJ{{I`qmaTq857#+vv(%X#K1=iL|adr2)T3HGHG?@l%BO%3XZ8+VJ)D&{m9 z&UC}*hvQ?|2bt8UpGBXJ;q>Td%whqLUUkmV0DynZ7cQKG)e}TsD$5n&CH7xmBOYc_ z2eb+a5+GlVAaDB<)2zXBT&nTqrP=z5%_goA3=Z0}~P1rNJ!@AVsi1nDZztBF6t zGskHgswS--AJ+|fMxOdA0cC>eS%3QV z6J5o#4zDeQ{=8xL*@R*KU~0<2uGS3p>H7(Gn=qWMV6N56gmJhZ$5W4ez|~?Z;A$CQ zHDRbz4s1h1E+s{UBB$sJF8aqO`*H?|R;BZttX5-8Sxm>8ZuyPF2FoscZa>%ab9Z$JiH`B4?G}Qv1_OfEod(K(gU4>4voVj% z`j=xH2S89J_$JV$eB%y-t~wN35;cav#(fqk6^C-)l=oWgGIC_Sa+Xf?Zc`u^LhY75 zox+we!y_Fv@Zwp&&Ig_=?{QHzq(lXjY}{}D=(Sx$7dCUN=@x7@xnAf@=@727K@_Yg z7;r>vl=?6O!gx&D_BZd?qi-o|oV2a)v8(o~#%k5=lWZ8FXmvI6Z-yDBmYqJLL(4c< zwE72>_@`gu{A7vKJG5LhY1{DwHoRwb{B|!_2aN`G^y<*kf6}%yp7~d^mH5rxuEc(A zNqH7@q?hww%mrWmUXNnq&EVE+SZrH9CFj_d&qG;k`TSw!s}}#_ztX|7`%^loVBaYn zl#=3ou*f<%v%)&KHIoi@RR{4=7cNj66ef->G8ZOpG&69ng^5!}YZoTYQa4(dxY5O$ zUvv4cyml#D96k@Uz8p-+fyfOe_VVZo+;(ic+^GNzoOA*$A$7)1$7(%@T7ijm)b83)>>{;W5$jPvotj+gd z$tdnM!x*7L(88V_x+6fkeg+~=*ljsPe6L@DM)1T4rs5a>iQI{Ioo+#J<6YUmKYvc` z-~ri4lTh6T3@PeHhTn~RRZ2hd?20tkHJ&w+ihSR4b=VuInVZJ!GjXYk!7NssZmOE* z+o`*LWl89NmX9Pj;C60`q|7#TuT&MI z^m*@0?#%pvYs^WQ3MQ*OT_{$6W_L(kaJuc}sXyvW4X$8ImREK+UPW!mGC{^vBWz0E z2z^?q3el#(s^8AsEly{CWcMgrlittShNa+a-s?c~{ahpQnT7fueOG9LZj|tKf017< z_UNkuZ*@7;VNT-4V|s$SNlbM}sIEQ!8SVk=kgjXxp`fXU6+ zGt8dkU2`6@x~9ez^iV@QR966KvU_r)aP8N``EG4p8ENvMG}d)-X>9o7%>SA!&gzij zOOA0b5OrRr4^^f5+u9^h0ua>o#QH`4pp#F*!BW79nmBJ>b(qu<6&KFO>58Or5I6ru zv`^Vam1QoS#2Sajw3#FIrcj8Q%V< zot^FGIt{lctZHq!(D#*hu{S$1q1ftS z!E7q>9{j#m55(M@fXe6MXhxTawCEMmVnGHIenP)SE~|BK7S)Qub>oK(S7k12xFFcg z{{Pc${olX0OaJ$%aOx1?(9_%(iU`^Hy$Om;3w|oWPg$(%(z4j_rT;zpKJx37sXUdw z3l=!8Rkw`3lLWhoM=A8Z+NbY$)|@h%?>l`pA;T+Jgs*YheTh<>A@fVwspw_)m0?G; zw@ZP*Q%UVy^lF~!1v?h0-r3H-WQB8H{)qAOH}~gg=vg%NR_~E6g}O4CZsK{{`Hw06 z*4BYcU2Che!qMkZ|Dw;^R=gY_i}|d&Z_TZRM^-bNoyXz)lKj$GImZys%Z}X&iycDz zgz_k^`!mmyX+wQ^Z`^_EY$FU zq(B2#c^PVjCQW9VT^$d~TBI33pf=f+uqa$n0@56?0=4^(&etiH5n)uHy0M0=Qce{q zSQ@@S_~SSb%)5cNxB%gOlaoJtpqtdip9=@QY0^NrQl#)&wF~!ocJ&v(t&1hG*Xt4S z)CW`dP;fB>Z!+fbKtEVB3aj4Zglo`<+2??%Z{&m>eS@8>A#`A+_ zg=pr$5B52Uaq#EBemwJ);gaa$5~*{miAL?Mds^HCYGW3M&L1710mYzS>YF1?^BYUA zzM*1{QmBMVgxMV0!RiAJN1E@c4l0fFiA02}zIz?=9cPWy>4H%hH4DZ8Mh&k7hKgu? zy>Qp(qh;#LNchj37fP_0>44B%lhLO;K0*&3r`mQn4NF(uwVAwTct`P7Y3!=p#*#^2 zYH1d_Yky>}SY{q?64K>bz1QL{R6mBnB%kq%{~Cy||GT039@GR&O4$kag{G-1%vz1Q z%EpY3G(XFW){i+CqOk$f34uic#l3X|7W0$;?kLW_rUUv!7S*q7D;^9` zmVUw?J{yqF3a|8I_$M5sEjejEi#Cxv%oDtaE{6i3I^gnvq zAO01ppUH3v|62q47m3BQz8sIK=7HO^0CFT7j&;I>CoM}7MXV@-mfSnq|{7kpW= zJhK2$_Z+ZqhUtWr-=Q}`k7hFvU`>N5?2S$!&(7JH{bY1+VG$*z&KB_HwM{54Zbl_w zdBF2BuSb_?Nvd2QV!#!4b*hP=ok>%T#5WJ!^E^nah~-wqhGsLWQE**R^iK6Yk?32E zEuHvVqD7i%Bc5Gd!)39Nxs9Rvmw8kXJFqNvJrxY2g2A()nb2W%`i6?Oh3d50mhLi? zc4U>=$bD%v*xPnuv^3g+bP6pD`1sxLz1bRF2q>@NH-LN*r+GmD ziKdz;6ksR7jEH=rJ@>m2Kk^YoU9eF{uRjIsdDM{6LIAz(toemE^-?xD@tKAO%%>Pv z(Dh^p@=3nXA2T^=IfAz%eOPazYl+!Z8vQ4swiq-);}x);4=Rns_rUxUa5>BR^!h{E z9@3NXy){#*^BVLyT%iR4Dy_50uB;Tf%JQ>XSNbTJb-!NkL2Z+8pzupR)&onBQ0^>2 z`W5ipudjpW7XKBVyM8SP*v$&GqIU4{nlWJ7JQu0@-Ku!-_MiVO2vHRZa7Jv>k?Sx~d{SLj@M8OK)|;v&pJ=!RQ<-C>Y&z zgt33p-(bo0Iu}ZGb*c=D_P`>=ove|2OA)PMzqHQ@SDjA z7#VS+LEBw&be-ieO?CuZ)<-4aIme1Q-G?%HaEha3VoRlSjB1`9O8*?a>BxKCXJ(b9EW zqQlpHDUO||DtSN0uFl1~d9k=Kt;|r-Vqu0)!(5plD;=WtMA!uquHWX6**^wtO1AUu z2)g>#>f|;7;(i33lgt`veRjSp;MYiP3eO^Ow`mRm4&wg=QSpR){Soa>fMWNb5SD{R zgDUbZb!5*HnP!Ei))j2!N6F^J9YR0lkiRN~K6~5Md4p&Y5h-bEn{C%w&gGZMV;=XC zzfE?QcqDo2>E0hQ!ynW!I!9s<0H^V?#q4+bm9l0yc$@aO*PFcM z{GZ9&+2lXkglwz2Sj`uU(9+1-fqEX#TDSEC)fX_Jw`_uwwe}g^31qDmhdd-}MGS%# z=5BZ96XWZpFCg>_bmxvDde{D=!&-kdpNz*0J?MWWME?6RPE;GA`cZg{cx|hC(?2Du z+1JA*Mwsa8>`O;Gaji#AT<<8Od;Irh^qnm!GFr>{fm+5FYZUqNvzhbYX#gPse)qTiJ4i&db#<4PUmTJervs zj-T6su+jcUR+?hrqOCu{A0&diagSB8$SPu+-61ygKI*I0*ARs|LEFdvfai#dpDf)S zb4~;cM=_bQayip_*vF#J2PXJ@yNr6<_<|Ej~W@B`|R_tZ_=t{wtR z3b|u@)Ng$xg0L8?#VuXKv25?h77BBSS|DSh;s9dA0~yV|vB!Fwj=}X;ILP*%+t0U3 zHc!X+(FWsfZ#1K4qf|H(?5O?GsRgoTpMN-G}tZHB(6FEG>t1nj!7L3;~-H! z7ya{&p*<<3`mV$exIvtcuSkJ=P3W$vCm4LQImB8{4-6T}}^`vYZ|cFyG_N8}vT2XFO-_yK0+#NC_-pcfDdSkb7?P^)VOjyyhI|QSXYf zruB>H%SlT$ZkLgRX@%G8`$!(ZuyV*ol?&?lJPXIK0~eF_kb#2Qv0ba>f=m*g49+{hh1NPbbdsi}&v zUqz*^@vMjc#l-abjY+7ZVMGsx3@a8c)Nj{Xc%Tm^)Tt(l)+~f}GeVI!c%W7=1fKgw z?ckPXA6z?Mi;n=K#zTYCB5hPrnHCsDW=gvRIJ$m&|CqiE>2NPd}a^G_gU*C3OMoXrWH;R!*QkevH zZ}CAan#%MNQ_>kB^>|F~3@svkXu@GO(y#Z*eCj zUT4LohtW&&<^8Ryq#dv4TG3~1?ch`1hdOi~h|RU=25%Kx7B<6NfU`B5CnaXN(jcVl z<7nbxNrw4rmr>)~{DjB3bqdc*yRxw6stu4WT+P%;?O3%cKawv4QNjognyq~tsV}*@ zlXS6|p&IRAdk0Tf)4#p$k4U3&jJ2$IT!$TK%TZwc6;M@T5bO4HcL%G!P@R(5h&ua? z5p`A_5Rj$S-#k-qL1PLMD&mi95(3?+4+5)bq(G-UJyMWUEiB2fil2vmX-QL^ufDcL z4W_|epa$Z4^zxM81835ois;+k-ZS1z=qc*`f!C<_p}I!iV`16IB|u9m14WiQcXYi^ ziF_mI((scw=^@+=+7X4?f9$@`?wP4=M^u@lm>a+Ce@&5$c08o{49EK_!%TMQiX_X+ zh0HWL21J^i4q!`@^FEikt{r)OYu4_2=+C@feCb!MY1P91dtOOf_`3fk*?k|w-tzwy zdG93iMc+b|iTHQl)OUeMPbyaPL@P*zKx^U~?o6?2%-mx@gFY&LMGF2CGm}?(TG}pZ zT4{e;I(G?uj%Q^LVp^)b#-=4a)B_ka%Os|yB?wScb`y%#2|ac{Egkn(nrZ35z4sVw zFOG{_K#fUYFD^*}3o;EzlqExTJgewrz?plsfx}`ZEja($xFa}Mb>BTWm;WsdIM463 z$KV8`=so>L5-g$}Y}U*XXI??hLCq-^@!C&1a4JNnPa38cyp0T4R%53UNu&`Uu=))) zzARs1!EuuKi6bpWkmsjwV`%y|rdb;^3f@U+V>3yBZ=el)H4rS#S>JWEBu2I@AdgZu z96JkD@X~yY*%j_&A7WPWH4?itucFUl?H%1D{|ilFGU(Wp7F{2hwkKy{r}$tQYiXuA zt2ugB@7lpb-qJkBV)Lv#ulW#vlGFP0G-f!zGDcQnQ1hcI<+PDMmxQC2=9fiFH*6`3 z4%zVKj(9m4^I@QakQFj?=WuZ-pQ^GXvfoW2qETW_+FvP>Ys2>`y|XM34aycP=_b=w zeGELy4_`t88ZF=wFk*5!{^L(c;MwU1&JVxQia0;~8uvR_+D3!@wx0v(>h9`1RCQLf z9HgMJZ+ne@@(BfR7?$+Hw?>m*_||T)F`<@QPL)H=OreXViUw3@(;JBK7v0_YmF~~E zv2+ml#nE-FIEZjpr`iaQR$ZU9&KJLp7k*c1Q4y+jc|(%E`19`cn*i57E`ilB9M9@5 zsMdi}VOw-z_6=W$a(0d{-t?KDO$mX8FMhUHd$3#X=t-)z!-N`cSDEO@HZpHJO4btEZ+G+*&V#|Lu*}a ztm}djJ9y{kyy{Ar709sC|v#x;fBJd3@&;9Pw!f zi6nNK%WV$vF|qUd?Yqy~METbDwEy)3xBOmVwAE&kd>CQbc9P7oXqvlTyLDQhW>%^C za`%W0l%SEXCTEl6BzeNgNkDg=B)bZfdoQy|5+X@ENxuBLz+n~Z&-n*Re;m|x_w(dQ zucd+L(d~N-QDUCFXKlJc^e!$+f+j18NId|t-7&m!fsJAJ69D{Y!wvAg+5vps`W?ry z?7-baU9v6>)Q@lbMo{Mhi8sys;eE563lXW@rA(^VHipTccgGpu5u@4}b{sK7cl6Ue zGesNO8jC72q*PC#M_gx>4|>JW@UKg-pWQpmk+O+N5NF@_;Upoux?j8=UbL00;m-%d zAMUWGcJQ;WftjjoZ@>YXllOIp-~1`gxA&YZkwmM`4Cq_aez|q`Xkfi336xQllboJ& zMt2RU{Ly(|B^FRSF#8TRLT*zHi6yb9LRQkHuCT0k@)~iA!>&uwH>~Q=gm@fA2fSyV zNfrUmTX+^)@J^>Ow_pR#rK*hTQ@#5q$_D)SI#G%_hDnBEKj1X9lc!jLRn|Lt|5Pim z9o+gr1nhH|Yyuhs@1h$mNm$TLYE;*?KZ7^?fqJZBek!1s=n(ZyL*Won zaEZiE4^Em!iWZN#Ts)#NCfF}+2ddX62V$VO;g2bEX>ieZxsz`;C9##k;nS|RVMC4tXftv2t$()53pAtPOJHKa zHVL$N*78ds)^~;yWYayeL=gDiOYqQ@~Z3NH0jp*KcaKkOQJIx@6g;tqfd;pt`c?q!+m_i%qFik?54w+%-SRXmS=F4gDQ! zlCThlknLI3$0}ZkL&n4$I?!rqW)G&38*(yz{f$qnLUq3YbN{Y|ZMSBmYk!n-mgY#c zIBC%)`s&S#%7o@dKL9qsNI(P4&u0nF`C9H}RP6`!bC9iN(Ff;pfy4*$Tt{mA3pb z&vs8-4A@>(`vqufY0MvgwN4ywC62gCXolSH%V{O>wh0TfBUA zsQ$0~4n|x&a3Q0~5~b8QAyj_^O)&N{D_{_Rn8GTg&@hdlqwJPL%i=%zvZSVUud(0N zeN}$*c*@xK++SFg%ikYVb>=T^UCyijIKtLFmx8e4(;#f=ok_E?zjE+$k8)I+Zo{$v zCwoL1h=JEYRxmEtHkQ{S2)?_cAkYZt@Sg;MVWn=m`WT<0!PJ)adXV&uZS1?10MTnx zu#zePo~}=lPe2C=&Ua~}up2-=HQO+7=rrbkysw{jOfh<+pC_bMXZo7#qnpM8d^6QK zLA0_eyEJ+p|1ar+APNTfcwm+oN;kk4{Bw^6crWPxzX5)3eacX!{T3h%lc5VGpBsToHOUB;&kU( zrF5mqA0cSHwfEWqX)A)~DwKnH>tP>1ZPs=xTXxTh-mE<+l%9lFFsQpE;i@zw+^r+% zZJd*agtx6|L&B5y-jRd@)+>*$3AoXy*4MU?P3=?f&#iJty(ds}8tVO*qh8NZZ_W`6 zZ+66}SC5Q(tw@@c%}m4o4lC=k|FL`QBT_B=QS@cvv-E7&Q^M$Td-Lw=OIg3nfh37v zk=9Hz$Df~_rEHgGn!dpT+*>$XYj0iD#`{uCp|!=W*;Jc6xqG#}YX{W*|S6WU(YxSQabJob)x1YO0TBsV-3@ z_#;KjLU+F01!|8y*~l|lq|b?U+2^cS)jruR=Y$r#e^{t?2JZ=vJdK*lIJVelQ~6b! z{PjV3(I=rhM)STLN4>kQwt{yws!M&=5xT7Wiw)(Awv)f(jdSB&FzL@V$Jf}|y%808 zlp@)LR0>Iw27~nOP5x~Sw=g%p!*C}9O7tl2_-i3>;-_ZHMothi-biW<)is`VaP-8C zg?)ff;zaMDnTxM>Naj7`K1dbgRnCE$&p zY-S(TC!f$_o>kZj+bc>9bgq$_{Kh z_5D3&Gp_+_J>$8EBzEK%JJW7_@22n>vIji5=Q-P0cY^qCTI-PdUgZpFS_M z#g-x7H_285y;}dgLHoK`dj{5z-M+-H&p-!STn1sdGbZFgo@*bIM;&d(pS&lfo4mWc zxBG!@T*xWdjD9N<-W#v=qF*3?w}Sm>jEM1Wy`R-Sb-&GS9~sZ$=xVS3t*T-%R>TsW zrdcIXD0wQ2nZ%{Euwot)@?G|ZbQ=e5UesB{_9{&904chaTe1oS1$9mwB-BEeLqukXg)qZ8yQ1GVWt zp}J{m*I73H+m3U8o0kH=qN~Vp?)j>u{UBhGv24&J$GI&B#&R+?7>lg2NwF=9u>bqk z?hz6+6Vg6VJS#jH@p@G;T0%yL9r!Vx^P8vAu=~@0+v7$Olh~tAr&Xe__vg#q%Gy+a z@AOBeBt2fTW0FU`gHoIk$v@SaVgiA`i+Yt+Z zvuI6dYVjdE;o!{qX>jo5U%xR9w7)$44{6bGb$3aoJ(zM*(QwlYLqqSbpy3zaH#B6X zq9MhN-#_RoeFqykV}+U-nxiXFc-gu zfQnfV??}tsaCA#VQB6Mywk9viC1}K&naQqcQLY9w?dS_lL#lxs z#pTi0r9V(W3a4gfbs>P|+;~AbQD=^PdSJ#m(HlPS&WH~GfXLPVn#XWgbv-9G{DVyd zmGycOlHwB{{BDV0h~e zl$t{$v6<57D*C)z7QHgJEP83z7F0!-UC58V-sfePHs$&bPM@>RL;u58wzh&zx9;_| z*Snrfib;`c`J zKdHW@7Nzn(=pL$y-H~-eit`L(65_L#zUsj!erX)^BpAub`!SLo|A!h~7(Oc#?>`LJ z!kg!cc_x19L1yMtH1ShL=2CU2ij<%eKi%Yg{K>1%z^G7VrJrsJM%gL(2UT~9#A<}- z7DD^_1QI{Ch}>{-#$ z<=$!0$a0WT@w6f1tXO3EChzS{LWV_FKPx(Xc>);$hylq%?k6%S1sExpe!VV$Kfv4% z6$?v>oLu?DIoCBOs2tNbSbTP0D%ETo zRNdLq(KgreP0hBl>QQwot1<~UHr7F3Rz1vL`awQo*Ycv(p}U?E$Gfwjy1(OL?#uhE zt{^n(7wgLxZ89tQObJJPDCl*Vc}7HQK9(P?)>ptz0Zkv!9yCK+M<RjLL_aeH8XQt_GjP=LeCOo1vRYk+ZiFA`uLpa}O^k}#Tzw-5(i+UT+DSs@D z5>fT)?v)7dCM1IQBmQVD^fttr|XM+?( z8QjxwwjR?L0}#|0aRnaDg3^Ur(XU{>8vZ6HEH9o0ja|QXTsYp91KZ~})DB)cN2J8j ze>5dZOWcpJt6L2V$|hkC|6?kU$lddlRt%c9YUq=38UYR+{O!jb#6CM# z*ie*?+_6H5qIBer6<$X3CwHunGnzlSV+jjFY!Got4H$6ltOr$hA!)NF%Vv2Ch$1w; z&0+Dt`%TDczsG#rexOla-l}$P9T|?k-CjwB>F02psGC;Q1&$@{otwI-u3+^ObRj(|?Sfc1=fJ-++!nKTFV&0yjfP6Mwf8 z9aZ{tG*9#c9nEocwD$D`9SJV4wn%b`xTh)(9a*syI@0HR5>KSP5E71#^w!alemNwx zV83+fT9Uj(#53!Mqp*OO0!kYtI7|+~i!%)_Se6eYRr0v6Szx{?Ov;;Eu$|8}8KXdq zZS;)BU+<)6G+M6AoKzhn!)|=}M?@$>Trpw!geM97o(3=>-ki7##G8~8LE-7U&>9Xsd%H_K#3So;B8K6tkKt z@(b>FR7G~7h;&BmyzHY$tt0821*uZ~DmEUtqNO_*kcmnC$TbxR~&VDfJsJRJ!$}=wBBd{=#ILr-*Nng1*$dLE3ih(qb15n6Rz| zxn4)GYcxska+~MxDuRui{W1uC<4E)zoQeGq+T%dE)WQa_nu{IgB>llmS+6u-2O*(L zPgSWz=Ic@1d5_I>vz$ImWWFv7)h{x6n7TtL{!;v(JJw`TiyyW~`;*V=zU}_xI`$_s zs}GLE8f>8&>)&tE*Ee2Mbp;uC|>R~*qq>uKWhxKtHN!^V_RgUPX7Eez#P;C4x5KM$q-e0z)`g(ts^EX*J zze4{z?$G~FH4*LH|E%ghd>!nsGTtYUqUW9bNTwjlh>?ow7)HM$4}IrZ-E*vk&CaH7ni~MehE<^@rOW3V^)y&T8~yo}{yf4Tr!;9&Qfg}N$7F>_OiY%Nx_QFZUB*|_{6F?!f9}t> zfi)Mf+NJsaj3lRdOT3E}CP+VJ*(EM!+CXWqh4k%JH506hwQ7yYMvj;Jl}21 zL?T2fiKpV>v4BN^!9u~t5Ru7Nd&_xY&6%^<+C%#8jekhITkgXQ4E|(CEIWNbhnAiu zUngyw_0Ic0sK)HmZU3LU*EDw$Q5a~+U~1Xlez$Z^K8n7aw%JNGn^ZO0s>0rVfA+_A zM@9J7-RU2z2{r2Uk0oa%^bgZikq=EKFWBm}E1bzyE9>=K#cUh7%A3aH+V2(EPOKYo z%0whSQ}Rkq1dR+^X;Guc{2r=1y_~;?)lg8+T>jlR!{P>ZODQP1l&cRyPtTT)SYG?w zSLL-|T@t!$+-Wu+O;;Q7o`3#ZQO4=51uaa{=4KF%H%fR%;w}r4+dIRfL`s&eA9o+M zNW~;+w2YL158D+lNv<+14CN{_^$0zWcRO-TiktpGdgWa|#L4SC7`9Zjf=_GX zNOYt3?r0>Pgq6YT%&LNW3zeu`wmru$Quj0{1bVA}Ch>^tpI#DAl0+y(4KQ!TgXqn@ z4~fFoR2|9htN7jWJ@WgRir&l^@z%+|>5_kDQ&(-6uWwlAS#D}GN#_SjWACb;KR_#bSh3D@X>C7hKy+~&^ z2$3Obnq6nO)2)zBhTR9sh+|oo3+!Vet?A1K{|gCE5!-rQLA|4^SE`1@M&~;DJLzkq zE+S|T=r>K&^(iL{;sdhy-7*0AJL&6yz6N~qfV~%e*?TjAi@pZD#v9SsfK~kH*J|-M z)nYuW=PU?pXwP;DY{r8-64<`4?vB7V8BmVE94bU$=UYu2%=Tjd>tGC65cLQfExo-@ z*1DR7R-evPLUb0Cs)$~X^+7b}(hNtUmr3;a7 za(c)srSR~CkZ8-V71M-H7tVu9)YS|sfyrKdr43qxH$IaY0@N%3hLlLEbEN($)6 zeh2y=zStG$uk8!y2Xr^k^HV{0vr%*$J8kDbAke=nrD{Em*KET-8=r&}EF|D)>Ek`O zrd@O-ig9pnpFqC3A+b!mLXAiS%#7}W$a!cg==doQ0sS6+lWg}-*eDbQiK^VhX(}(h z@@`~^a%g@18*4@XgkI_wjsGJO)% zndm&yP+6VUV@mjnz#a@!Zm4!Jgs3sNt}$f{a%tJfuixffjll(-8H0Ncu`w_cqREoB zr;zW{9iP;E8TD8TN)&>rA=VFIwBe(*Rq zi0t-({3KtE?*w3f$TPsOFZz>jTfjb_D!^>^nrGPd`Kl-J)n5MAAgjC&$j;>~BtUfv z)jl!E0X6@g6rj+r+-TMQYgeQ7%j`mjA8*6K23fCmAnR_BrIQ$suKLyhyJZT1jU8x! zbqv)uJA&MYq;K(_Wxoo@`@C1$N{U5se}OAzvD0)$rgwj~E5IM`$Y_3WkimRdD$FUO z;;8#Inn&%4sAxo1Jor+(h)A&89?FUz<6alYiYxiOOIcCE2nT%KMpi8KWyK~)QM3I> z;~dF~Ewch-X0CCvLhqny`vh5`Pl7rVollV!sJo)R&Y{{1p+m9MpvfuJ*EyiRtWS3} z2uJP1AY9qa2H}X*K}b<8ADzM=T-%s-vO4O;b}{};wnUq#rm->NLfdMmYy`+8=uL*i)NP{@;cqIusRI=L=C}6>KW;ri#V+`b*gFV* zb1b_(wwq!h&=bLLf_}ITB!l5RTu(5Z=qKJq-}U3)`0J=UvG@U#y2mQ2o8YRUXJ5SW z#hU2q=nKu#-%LHQrXQMSm%C?jaiMVTXym8iCsMR%%w?LGhl+EeO9H=-_g?HnfnxkG z$NB@SI)Z>W&)ox@$$&T)lbk!bN2I#_XgIFYJJfzM8qQqnE2#l=zIlRb62_i&njD*m z{jEYNB0LVY zg_D7o)eAG3s#5QYyS{2&mRUdnw}g^ez~Bac&GMjJ2$gA1Tp+7}h)8aCs#jKDRfrg! zVNiIRDmVh|L|g!w?Nkv&X;T|v`+D;a37BH^g|O`ss_oog#I?~|b!UoP>Ovzn<4yZ; zS8{1V26E~1kjW)5mUiq0OxD?nrV9zuF*wcg= z@i#3)^%KYw;b%6lCNcd+um26&V@NJ@G66a<<^eS%D9Q&#ga_K2hf%e|S%2zPb;7W;t%>&KA0!1}m0 z9a!_4cLmlPUjbG(2UgE^z`8KnE`4uU@~y!&=T6}I{joMyIicFepmYIsNGeb{0n@%q zLS+fuaSZUzi}@^oa`Zi@iwzjOnRdV?G_*HhdwqL=y;cuk>-q+Oy#qM{nBTuUQid!6 zUDht4JL*e@?8Eu5-x)5lGgoGPda}y?J{pV7!}@ z15p}G*0R~J2ampJ)g--b1p>>vP3=w}bW z1%ZBjV5qi%TY>uH34j{UI`a)w=Ea%ncwVP=I=+`W&is_R`E}F6HeHr2BBA5?8&Egg zMpt4-s`VOBN#4Rm#Ed({Z~x=*NmS#zWij+87yO)ZzITToI^O%`#&$_cl1*O(;>;ap z@-CQSUJ%dvZ*1A5Gf>{iR~gLTJCEhvs=eD?-W^cW-atLLpbgaDWa}W1)-3Rp;8C3` zjgBZxAkFsd=Klng4J|OT>=vs1`Y2$l-%xdaY3u^!uXo#@2S?)F8YvhlT3dA#zpv(Z z%ZbY0?KVKW^Q_XnuRhFwUt%XFTMp!QfQonIM_+!F_1jR|Fr(lRdc*k>EMC&nn$XkO zYkQH0+Wwx!Rcc$Fsc(}l3L})0BP=%T)h-raylp2es$!NS7tG%Yi+Yo~&Qe>p%ZW9- z(EZjn0~<24{0*5A<}@;$z6qn+2vtAXcskK;9&tAV+T!=tiQsq3;f7x}0e%mkh!?IL zm!!p{t-SBw+9f=|Kj%|qS+s+3e5f79S^1NlP>{il3<@ge?SuloNkxIQQUFWHvkU&ZE5NEh0kAn42H3vs0Jdpjdw|{Y%(n(uWITg) zcCQps)(fzhg^*$g`vA@!YaBi4FNM(W_Et<^#d(OSwDNb5bvjjuJ@#~)&ZZM$zrK}D zEX$YtqvfnnZOCu=IJNAXOME4*s*r|dCn;)Z>V%P@m+w0qT}N)=Ya45}bqm$q6 zNP>RF-@V_xmmisP_Bs3Pz1P}nueJ8tYp*RU$Vg+|`JNZv7SjMEx2?t>VaE&J6l+P=?%*zK=eO;n(oB7z&(jF&l_*l3 z9j}l3hW$;IU&cS_tF+{7_P(Ki7<{h}-RLs%x8$Jh-_ZTq8MK1$qJKm8b8xTz4F_%i zhVCi)p8gH;{uR{WpnpU6eOSAqe?#|w;s(CZkPnaGo$8;k0#JU`psjK8;}3XGVoJkf zdSLYDHJtRum5?9qL!_o=hwH+bNAVaI4CZ-?iLc3yFm^h=v6&~0tXfx58t`qh6#@PF1> z01mVxGz8IoeP~(~|1tlPZGPhaYw<7n1MZLXFS%dei+>5<|Ha0C-xkBR?WUc*U+9^k*`K#TbAIO8b%vtZ!=SI;(Kn;eaN z6OVtbOYtxD9TWd-WfcDe$>4vZ5BQ%3tONg8&Y2EOz%RY2#k(qgO(wKbEZ*3Xk3zU2 zBVi8czc-42msUkrWU9ER;_w$*ZBFNkOt|+G>WB?f#Zyx#d0}vMTUzpH?mjVs55Rc z=7#4p9oF`dri1vYy%2M$AK=9nV%~hFg@qU`u(gGly*`5|vk(KOmYod$?b#@@#ibZM z^Bujgg5ZUdEd>@rC;g}}9R-uHs zP$(l*A%v+*CUI_(Y(;D-=G{Aw-%<>ru*PRMS&HGa=u%ANG}KK&R*9=M0#(~mEjA_N zhKM7kWGC-vMFUwVTPW;uOneDhzgSb+!o2K}>rrtyY02g2>r1|Ev9D)MJ&Gd{&FJfd zr;h4tzKQSanS_*)=xhlfZcF6gwiEyxvu9=K_X~^rgV84-VkQc5Fcw8rv!Ii}uE?`p z9aKh7aF!N!Q@x@a7Cvma*O0ZylGUf%T0|CLZuc26P=~6o~mHob$c9G(9pEA`q#GBSvP$GuzvlufR)_>Snu3Tu$o<8 z9Pz|)gRA$Qfa{{p(pLcLaH<0J(4^*o8v9mjK$U-N+ppH_707zG0NKI2TI#TQe>`r0 z-7pz|{S4L`5Fr4&L;(~1)><>MIq1sYYz?}{v4UfL^pya1ehYw|O~6_hUyrXiZlKM% z1E9@DY(fQXGNSZxj{fOw%|Z2yIn-I%)>4rt(A}uKf@^I15Kwhgs4`lB%6n%^-L>QK z;|9};+X2(#DRJZLF|b8~byBln?R>qp&N{FMVD+t+&g##Me{0(B06Qu-b7FM;f$79d-4M@t=c_VEL3-$VfRElfcQ*l7xw zY2WzfpgU)4Yh8B52k5eS{}jNoS^(_T+gl!ASN!3)_1WnJty>hdB5+6cS^2o;pt{B! z_1ygUn(}u*_2icV)j2Id^~I!?x@+3<;|7!aHo$ZRmRF+kYXNv8!FrmuY-56mZ3&-= z5O`Fmn+NORzX7awz7Vi3XaTG)0#>u~YssU>4X)w|fa`87D=Hao1Xmy9c`R|V#Xlus-G;Yz*KFe0ntaF-$>R*UM*D@id5GwCKq`TmW z*(_8GC$!XEryM_+tg(RUbNKQ`$Jbq8`Xt4xM>W@3sjY%F;C+DQj|f=jwE)%&;|W%? z<7*(Jc5>p6smg!of94`wPQayo^#r&gfx73`=775VwbuG-yhN|d$NX@KC6FN;XR{r) zdt6H$Hikhgj}Kt|#sIKOU|mhTVmJet2C^|WYu-8p}E&d?g6goLk;P+3q!;F7JJt|eY&+knGd2z=d3XITj5UpF z?+)JRE**6FXmm7VCtaIs?L-Jlalaml4W)UxQ2no zBd>uTVcc+}OUlK#PI2L8Do(L;O-bWj8t;gUsl9negiOulT@mk!@?OTY)nRQtli}B6 zj<5%Bj2p?Id^I_|_LtU1^5;7+lF$BFMlziDn;pqxZf%)Aeg4pK8_R1)Vk}eD1b@On zei)-RP$gscsF6DbS(_WV3>2#)_m8;4$dynO(UCjgp&u}E!|hucxy!d6J#sH68GVnD z`w+xtY~;$Qor6c;Yt-)iZU;y0wk6Gu+QykJj9S$XyHy`KbSrM=(1msT+FZs*L2S+A zICzQs|K8x8ic^!U@E#q!bBWe)r<>0BziaTGbb6D)3;oa<7-#BV6CJ-vYg-$?J!>(3 z$9y2;7qQZs9lwu^XnFkh{LOJ2zlVk+vUTvENBM;^=3{I*JCcsjjb^#pS(XMfwjDn} zhy6)-67?-h;A@R&PydDj{|$)Z&Vzxxp%sh{U6}JX=llU8{&SId$2pHL3p3v-4Ayz} z{mrxPJDlhB4h{}&WwF<)_zvf&3Y6J?Xf{^sf!T}MN~ zseUzLl}c)DhDM7(31&^@=QWVjRqu(UmQBqpk-;-{a7YlKhM|zue#mj#=VO(GoQQNo zSWEan+^4ddO@jS~PIwI{gIiKL|BL(^(W#EjN3FN-M?|x?__KvSui;1AzlO;d`SUD) zp2Uv^J>z+i2-bplut9`_&8_gIV{setK=Tm^t-m$S$7UgHteY`9-63QPAsb_GWia>_ z<}rx*)xR>b8~BMvGdudm8y=Tlsll^C(1%U%PD>bvkc$aa$+P}4-!<+M&T_7)BbFuw ze`R6LI_Eq$K9<d zujJ6^8KWopyXOH9S&8f)=r=xpr$E&(bYFr5`*b2Y>xpO~YU2@nh+Bw|O#}zCh!wcz zBaGW%qWkiEL@3L{ZW{kd&{F*ENugzj$vlx$cxEh|VKqLC^I+PeNp%!aQ%0y#97Tqu z4?~1Q>$R&is_fvh&CasxNRx(p8pSI=Ja{L1aAA5|yhC`|gy{%PTi`z<0Ph?;N${Oy z$Ct(PO#caa;^|nx(r_N4!_Ef#3+9*VrDI)tA5OY8)c|R2kU-dUY3W*l-1^r;h|wAR z$c^y(4S0?zIQ*_tFb#K2$3}pZsUS9md`&mJHuQTX5i&BpnB%sBr2#uTc?~E1T$@=%9DSX^$fz7$M~mZ&&J_5O2NzVFskxC z$i&)oMp)*l1{xyO9ERe}dDS`ZRv;CRqY=ojM7r4sAtq?zKM4C zu^{cfHCM-XA8XU@OAl)I@k#UDH|FYAyU!*ycH`yj#Xi)FtA=A7JA81e(Lo!mTnW{l zOqoMBxN;RzbrP|SBoXcGPbg19D|HehN8H%+AD(YKZz?=N@mhPg9%eqIJ()NND|Xb) zM#Ps-a+WVaL8ga?;1p!;&)84?bn2XL16WI~Ssji)0lBH^GDmNI!k939Enm&ez~ zk=OU9BDR0`5VR3Px`u59A&sI)nrTx}Wt5E2J9sY+)Ivs&79t%^TDt-)pkJ-fP$Fq) zl+w`1^qFS-d*ca+wV3gLuM!ZSG*3Whd5=Lrix;C0s74S4^vz>3JQSQLK;x$HFN7PM zHqINYM)X=c^hG2HZ_9CgRO}0%x4kXjyb5jQ@wE%0-&-Tl&Ze<1VD|N(K*K8So^d0T zwA6oPqkG+liJndQ$;luyN9mxMQffy}sB^OQWjRaZA+e=*W`m`5P6iGe{s0_){pK5u zn~>iTAR!SV_)2~KoRJ)Q6`i5>HJiJx~?1BbF%EavAZf01Q^bh+=Ln__Jm|sruJq=9A`NhXL-< zrnGJF1|5iYvpl|c;~-u{L6v<4^R5Ig?fqx`0KpgkRi;R1l30MSfXaBIFbYuCTH*8d zxw$rit^I&BcAPH6dLfRRF;bv%Jt`cAljxwhsbzcLu6^5sJ0kC(3V8KOmmEbIB#PUJ zt4ic*N*u4x2XS1H)eLbw>mhNV9w83va=>ydx?u4~&;?Po439m*VGNHll7-TJS)(D= zr3#gNUdsCQktf)PXZ3o5*~wf<31EnFgysYP)sKR1*1Y~kBl>y5hXYc`u8NlnvVk!u0@!$qZC-`uPar5y#rQkqrZ}A#PpD8&}ohudv^|` z%8?PL>(65Va*Q5?f`*cK9ha1}i-c`qa4_2M5SVnxjiH9;lLlF+_3u2@=b*CS*8KL{kguT71gOQS55+u!%Af7g;}pG_?~!2F;4}OSfO@xCsg)XfU0Qk- zT530=5?Q0uDJ$i1ja+;Mj&$^o5$=En=(x>?0ufHSW-|u#?OQmYC7v)z$}4lIRYMG& z>OjX>?opy+gx}j^8Jr4V6r-f_%Rzxa&rEmYt87hxxpHc!LSn5Fn0W@q5Xhg1SfbI6 z3gnQ`%V?O}U3ws4Zl+9ehCu1%mWoxv9H0UH6o0=+&ZCh}7trc1V>d06?{|2E>uf%s z@Y@TqzijpeXeSoxf*U=-8mX1kR>Z-=u4A>{aL4O#3gMePh44+BLb$1bBRvJD5WZP& zjRyE8vzK_51^fCBMIk`hm$^Cav`3o#%MM4+TMuCB~HBHhb0?o@QDeYjs2zLb$ljA zrW|Tvd{*fAd>!J?jL&*$SeZt8jm@HDuqkCn2ZA{g9)yk-Mz@F%6G-X=3u7QUyBdkv zm4;Jla|tCH^b7(PVE#;yA8ZRC42{6l1@z@C=M2jox}VCQ9HQb4mB<;0nYEm5PpquW zs*cKVrQSg^zUb$81)pL3THS8jEUcwyA`gjNzFkD{Q^9LAVgYrYL2XMX0ZK*jK;Z5n0$dV;p10$Ef`vs*DjTA>&K zHo%X}Gz~pED(hQxCp!b(iRX&dIY6f`ePr|v>Ko<>SM(;HFo{@(>`2y|B*!;KoW_$S zs@RJCmbBU=;DE9j)YWrnBq? zDu_T%vEWvZr?6IISP}2T<)I!6fIMXYg)R@gj7*;+Kpe!9-HF4pb!VAX^2qy;qUF_d zpgw4~)eR!MVCi~9!cSly7-qjjJZ|T`8!@jXKW1eRImwhyqo?NLch-ynK*AeyGaW$5 zgq{Ri3uTeowyivGAyNgc)_!Lf#h7AjX#qAbp1f~Y-o9=5u!Yu;zpuw*vmweGG8>|X zCb&ZqqHY3=OWUU1Nd{Sid~gKu1~=RMJMR~n;NNScDGF6|ThuwZ0+kw zb^|?-0AQF}$ph31J>jWP)IUpvGSwT3*pACsA`ESp_O>RXxWZst4-QB61`~Ue+NgH< zz%D4;JP$+d%3lvDiEb(aBFQyG{qj-$g8xGUzTiI@H{=MFq;!r$cC=if>@GtZ{nzMk zk3&MKlhkEk*ar_n1rPV#@N*NNZ_T-sUpPPF13Bi+^ocG>|Hg|82PgQ^5Egajo<`xkex#=b1&M*JS-c>IZ%uH ziL+cxOn_`Bvas7(qbEF1PdkCb3o={VE}}fpqfa1k?A?wsc0$qker!ur9GTuhW>mvY zAf_rqL9^#9AbGWT6?&aehgcezG1|MC+lY1fmJQI++EMJ`QXN#P56lk=*tOJoO|7S=3;N$K637=TaN!`^TrENKgc=&&o&S^5H)D>Ew@7?m1` z-h;vzM;hcG?)%KFOeEG@kM~g0W@ZnJI9SU-FEcBtzY^C7yyBq-D^+8@=-G$yueMch z&U-U@P##brWE*OcAD^@LVVJZjdwn4`0-pf>^YD&F>s$O_Y&>%hgj~3LaxxB?AA4Yj z*e^*Zp78y>1*qjR9j6#8aHeFZ)kS2Zt*LS~Tc6Ru45YcV zBE=zJe<}8ygbmqfTe=?017|e*SRSsuR3kYg-1#hba2usrXs<}K{9lMP`)yxHv#R}Q zYVb{O@I8`=QUsjX@Lg0==X~wF?;O+xDVlh3UTMSJxyjz})rfykmqVU{5T(L~qgVwqShirk4f^i6aW9xak~z&=0a>kFd#$#5v56Y`z!;^+|EL7s3$4W`2-xTxSt z1xk(oB%hU5)xh}L=szL2m^UPyiTKhwAYs>`-2qpe_SB;P@XjW)8YC$jc-}8+*}&2b zO^}bUh`{Qu$mH-9g4E1()hc_TJqM*yn|@Z#Cv_n#DGeVHdD7pdrmz7~&F3>k0uoavI`%YrP7ljZ5jXlg$E+#W(L&KKuV z1YC+BNUNmMht4^byRH9o?nX994fyrCx+^X*tUQrVO9 znseSm*sJ5oe9arwXg|g^$a|K>{i|ePl&|pCX)_0ILQhoU0agclWngviyPsxYk?%FG z2!2^m_NBjFR(0f7mL7Vp8aN~sRcq2=k^xONKz-%gVxYp^IIoItL(dWKIO|zwb@llP z8+o=X$vHoBV}5WRiwr)u0l%V;<$~f=n-=-M`yH9Tygg0lFZvdz_cB*F>7yIq{0D^> z_lUuOXUekRvfE>^`u&lB-NA?0(9%I+uv>=@^X~iEQYpV%vC&QGyjvmwgu6U;9zR0F z7{YcMOs+=4%i1m#8nw<7?_4;lTkvWhq*)Q zS|#+(^L2LJr5uyb$uTkRITYfLDkE9Lnw-YZbM-z0UJ9v9la_-;ZhItE6p^EnI)HaN z5yKWgqd)DXi_|?Fyef^4@hLeV&F_$aB^$^vX%)eLs3Xw0U{k`14;zb5-BPR02iQU) z#rfhZ`jJ3hi=!GF#N&Uwj9V?48`ISE)PpWR1xBK^Zwg_9bqV9$H_MMb)1(Tyr@YK)Lo z`*yk4?Z3=@);5_O@uP%Yuz!IY@(44PZ+DV@PlQhe^9Y!FD0mU7oPhHscTE-ZH4#yV zgW#~*#d1Ifd}2#@fAB(wRe!2>q&9jZ^GM$Cr6auIq~|Vy`*AS;uoWD37)H3kYy{@7 z2uV5YaJ}{R4L-;Lv2>^7p0*+BLp+Yw1(f;}$Rr6$%4 z6nW|Dh0^+gl~_g+DVo0(N@JU zXYi)2tLsI)RW*aRK^4GTRVoTJ4vNeZ&K`l~@irMG+BthI3P83O_rO~Rw#SF4wR85? zbNns2!ys-p_)q@cdUx<$a!?|L1f+CpBg>%k^KKm3V1j}{`=!C;0oW@b8)Ed^!&x>E zrGb(&eCP2q>5`9OE@`oh7isgbb3O#KJQF%(#BLtgf3mZzE4l{$k*Ut|OQjuhps71{ zQknEo=36maxaGV@4dK#&!Ewdv9TSz4k(Z1XlM=_132o35jiW-vp`!!@`D}1Cde`VV!#!8+{ZzYC5RSLp!y?rbv#I zp@rkR2$In>$wC}&%HL~|Cu5YLIj>%T=79g;tRSK`TN*Twnd+H|yhKnI9YZ=i2rS7@ z7HT>E2Bx+=4%k0`!ugh%(cfo_R-tNB2)~~V!OTKM%8ElB)VFWg0>IDA)~PsWg*_;v z6+H~;BQ48$H@*|a#zvAmg8or7DNrq>b|-Eu1&Z=I6Gf16=*Kr(=){=l(@N2)TuO;{ z>YQG2o$9(R+NqRTtoF*_NOZ0N*Sh;BE#oRO4-?2}&hcl&uwu=Wu<~o=92xdYZxn3$ zo+46krFwun=RJQO3(?66TZ^i^h>A;VCqNcm+Ql-UlJI*9UPJqIZlIr z$IQ?))-;ZDtUdB>m0GD_SUl-vHWISp3^cOthFA-!!5nmoeBZrA_1}rjw(qysx75BK zY#&_(HnDZ2PPf^sM{S5w75b?Qk5TIY{LON?gAFiYVtr969BV3M7Sd!Yuf!Z-08E&M zbADwF)a=-4^k zHHazFO#g?p{l!wvQe&=-w!cQ(zk%)VZ`yAG#G~7<1sI=Ov_DyhL^n?oK@Cg;dKc)w z>DNfb?;T{O{>a3RrGHGTt2N=IHno}HpH{ag-$0l)Uk3R=Phmd7ZQ#>_0OwM5QvX|E zQ2&((UPubQHt$daH}k>QRX6h$(~KsY`HIt66q`(Ydn&FdO77F_d-Q~x?*Vd+fQ(h; zL0|MlJNz9d?(gVv#i zu4!mk3ilhjrls)?KdxzLb_(|!x~Apw4nMAGMZ7C&gq2=ZPF<)xle@)?+>qJWxyfK} z;iSvbp?<#qM2nNAGXxqOErKC0Yyy57xYFcJ=2~|i@V{m>^%KniUlOtq=8?q>ldmv% zIRa=F=kRTfu&VOS1j(&dzF2~x!z!IZ>A}Ug2k9+trB}hZbh*d zPi2~=do^Lva-B~VW>u4E7C+#mH22$$3BE42{fR7vW+@OvP$`1r!#()Elh@{UP_3age?4%5bFiZb`{5MOdgL`3*h|JXJFpLbgMp1%zR+?L!@)o1>%gAKO2L>&xdc%g zp)#H1!8*}@BWhb?PFhHeIZ0uyF(-i>Xd))m{;@&%|CnaM7@F1+f9het7-hg{Agl%q zb_0?CVgoML;z-C#Q2jG1Q3#?;2)1ajoB*vY4+pfPjB}CUvQT9WnUZz z<`bh8U_^8cLz&j(^@8s4qnkzd%z~E8O{>a5H9)AaG}$437Mon@FV-#LKNg<~Cmk3s zD+xopV~)tmwsDsKly5>SEAcJ7)4MvU z-@!k985Ok^q{N*aalK&H#_6#cuqv3&R3$#(P5 zq~07G$4>x;lYT!|2}UjPDKEmEQ{7{?lk1X|2X}#@fFt&sb( zso}V3PB2OjtZqIE4|&eXD?J&)r}uV;N7R-MI)MfGGu>F0HHsRk63U8;8dM6k6<0Co zZ(3U9G}+&T6+2J}RE{Ty^_HgcI~iXG|H$F1@9UnjCy3?9CiG=>JAt!Agxg>XfohJ5 z$Y?Imh4ON#|J^8@0y;)=kkZe3ss;uI}4p=5oWuaCvH}Gk&7mwk@4~( z+~w(Kw3~;sz3ApqxE7giF5)wEvy=v#Z|R^z;9B78+okwLrn;hBW@-_&?@#r|P}>=( z{fMY_DQf@30{s^Pfz(WiQVBC5C>70gTADp(1V54G;@%U*uXiX|;^QlTQ?N+_7{%?A zn2g%!J(s!GB_54g`>V)JWV)fETx-n@^rP1}7~-@tG&z#OmtYD0b1OOid-_xCvA^wd z%vO`pByNsk|3(fT)I?;jeG|crl{kV9ytxkRAl4SGZ~60;tTMK~=;jG-@dS701vhwt z?_e!?ttf+NU5#`=v+H<))w1`&hs7YQzN!75YfAkw^0;J0Z8aaOa?4Rfeub83R^>21 zyfnjE_BZ6b6#L3o5}gPSGx0qNB&hw8UMsr{L7ANLf#kT1hhjPNvwKQ5)9<(H-#ZLT z0OG}Ougl;o`5vS{6Xm}=0Qs$}?|C0~=4$8CS8e{uohuo54}xOBwkJA2F`nplWN4j7 zv=SM51gWkHAI3$79&{s?v#Z)rwKbFMp!iUg4m!IV2od(Fs1ww4*Bg<16%4)NU1bjG z)FO|H4b3K+Lpt9D3pR&z5@ybca7gE96v*iUAH^Ngsb1(HXn+eOFU19XW6^9_j4t{e ze9`rhtnNq_dZc&i(hXrqp6DQ1CjlmG@Ipp5!8!n6J3B!rwb#VgjP|kDDG*}|QMG7{ zbzA2+>(6QDHwjS83~N%+C@bN+LsD>m0@?`8Ky~U$yVql$(fjTJ!O&a*-i1-E<_g@* zB9EL!-Z?9mKSlf*#h;0osRWQa37UtYtC>iW0rr+FmRfN|mAOm;R+&tJm{zhix@b}+ zv|Wco%k<73{WbXrsl1+OL2=1|hlC+eusnW$$BvoqaOXDe@O2fXgHlgL?{RJo-)v?M zC(TCzH0XiF5G1SLa`JHdwLR6>Ksh!Cqh?|U%HbWMo{AqkP!8`1|5W_ArVt5J@#C5@ zk#`dbf^^O69S|qIOtr2k)FzxipeHnum%w1`@q_i@1m}HA&|iVo5|+kUexFbj)FQ0A zqHr7zkuuZ8pEL@zWdP`9lybx?zVGcWt6(a zeB(he9@rfrdnfEO2zJz+R}ega*cbL1d_I=9m!knZ{DQp^sri8Hwi>?fTc}Rm_cV)w z?iVL}sr!lS72Qu{@ANc21BO$kG*LKkK!GET*XB5^oiJr;Q;JO z&a$6M9euy+gei5-Dv2h=MX0r+oz}Jg3)&~}Im^dT7=SjaNH_qrk~9)(=MLS93I8=N z>){*r2m&(r9E3(SP!#D8KuLejK{)*IQt1n;{)yKc%XVW06Sxc|gBD5oq-|ksCF}G{ zxF55m=x{ndWL6CLr{c%;Yyg!a@f@$9G*S10AL31PpQH<~DV0^n7Gn%4S&cDMfnqhr zkdk4HVLsxSH0@#)DO2#{lJb#|`mA3cJVgDJLIWsTsZB6SAsQjL19=kzR`3N;2msZz0?Wcsm&zH>$i6ncH;pbwV!6jE!Sdq=oj9d+mILw6q!u!FzN6C9kewmGbKNmAPnC22%6wm62m*oJA4p6KvssTq< zW0f!Ff+-`L#L6nM5>|}7I9bMdUmyL*xL}?@7tE*w=H4kFc(hYKM#VMKUi~=cfGI_y zIWt)js#wA1fK@L;+V;ULvVAc7#ra_FxCSJ8bpz|rvgt%6U!zWbZQL+fu)1M7IX+}g zM_)`jVh&(==su8g-%^yv^_zqHzE_d|J$K9rm66BPA=B3Zrt)Wg#gSt?u#KmN;+mcs z^-gNJSii?I25@KA??+sz>L(u=KbLT)$4;Q78pBsQ$aqu(FQg6i2_NX=c8N18;WChe zS~ofpP%Os>a*-Ajw!yDxt`xH#IwGl}3Zuvoc?kG9QlEV=f%>eI(`m@oj{*m< zD}4rV?zXousWrMX=YBC5slCQ|&HE5btR!#`y@(d#&K-JIy@*~`FQUWFd7BAN&U?;z z3<^NPW52@d;sBR&7zgI?lx3;5;|37BaVhHI zQy)VoM^mL#kmX`F0EiB-LE)sQlhKQj`{Qahy{P%vi|4Txsybl4_z3f0!G}T;hHzNFfKN^9T+wL*WX zBy_YS4OcWUgGqaZjDk2BJD6Nnr(PT@NWtkGN1Wy2>=>L0)5K%EX~Hvbf@}IUvaK^T z81nVXG0|pF8*~ zKD&9n_1SrEH`Xm@P1IIm`{ynIi!@tEM@e7kUbzaDXV^L`C(e4KTf1q+%4$U1g1QvA zy~>u3og5;?^6@I;gpO_kbt1}=mrfFuxOXRwB84GUjg_%0MaS0|Xs74bQ}6DK06m>+VSlJ99ke)^J$@DIUCBZ~XxQ?MJ#if0{2q+` zdVFdu5(LQlgGg%gL5O)Vm?SR<6SfU35+fUQ+-QIzYP~Y+;JjI99h^6-jbb{D1XHmv zt^2mPnK?3-u-aJf`!~gUEt-R@&0?LaNEHGAY@ECzO{~*Sy%X1v5Bo_qC<9*w@CZql zpj7w#kxm?vHf|QjLNUU8t8LUq@dcxS;+lUF#fzeiU`_7ur9k~dUQIGS&)G=)=Q+I%sw%a2mftEya9CkXV~4Y`MHrD1 zVWApNtzSVVa~u8Tb|;!0??8}z1-cmSM%#-}cz$#jjBqxD@p4&xWS=NF8{&wiyCTbB zW3u^+8x|1VqJ9QOz2Pr96m-adzmVN<<7JmS9Poetw(dfsqv3p7mG2x{&KHe&L~saV z6LJAv2s}W(-09=M!EU}25&!cb;@|xQ-gtQ*&S{gk?h{u*`_J=A8YhqUIk2x{ zLtO`KcBxCk&jiF@{lr=JAkiL{6+Ex*?Dm@Y5~0OZ4hu7PkPqwNIL53IDilitWphlB z8SatmT3L1Btg#+xa;yeE4|i$zd|%LEXWhHj6VEJb4W`t{V55{Ss@C&a$PGCKI@X{R zppaqi@Gx$HT$CG_aAjfG!|*Z4@G|_(C6Ab!hRMeS$PtcJ8I1TmSuzP(%PK5C zpAIQzwy}Xvr6C8m2#^jc771f@%KU%HJq^*u+D8V@(9S&F-_b+VuYnbsbUn0evkkMqy?)=tf1&2oGk&lA%qV!o3#E|EZ)Z_U2Y+?T-8nX)V&a9QBI2$PZ(t?v7(Q+f}#&tJCq$;X5f>R)m4lqAAv& z7ia(h2UsrFJ<2BXeaP*Kt{)>lR<8@*#NzWK?DcRbZ(~2~$*Xae(?1{PO2)o(_!2i> zK0F~Xd$_~r!?UaT%zwKy97mepc(@nO95-jUMbN`IGrMVo*@y*RgbMv{ra!0hmqwNN-`0mICCrN|-*TuEd#5a`YRs!H- zHy3fS*p+o1^^znPtTPA->onP5ES=DkuA-!3w~LkV3rZxz z6r-!t*(bQe)3G`|5gb-F`YHM{rGN?DWzZZ#>eS_SzR5zj)7SxJABs$W}PCM(a3ao#!by&WR@Q8 z(BL%Ik`X#3bX8(-hqY?}cA$IHpw3X!RD`6s0`FBN3zpeomI5D>5imj8lLJsc1rLKd! zbX{+E<6D?tay#IC31p|BylV6;xNwV>V0Y!<{;dbV~3s>o% z48$(xaHsXRWIGC-`Rg$BZ#lr>rv>{v(2Q1t>~$w-&`&BeEBHB@=|H=j<#%%28)cl@ zz60~{O-ocXVMI;KP+ZZ5<<{=io4)pAIwq2@(mHYj8}Lx zoedDX;WI+Rcgi@iw)5|scS*E>op_j6mf#5o*)C7XI%1a93oU&Q!uop$_- z5znbI#+I>g2d>m}_efd?VB`yE)8L#ncm~c1hjV3=$<(~5%BNx@T6!Aw-wf-CZpOqQ zia5neDz?zzE%fA!$Yi6J+pN?Z9+z$@b7~8!GRk=+aR~jbTCVoI!326N-Jjt6Wg9jV z`iZlAJsVm&I~8WnD%>Jm7$P`^JGK3`AMJDQoD&gWrDOw3ym>uF%p68ktY;L74BbXA^Xvby;*Y@PorIU@ks5$Wq5N`7m{qrs`5kEWw^r#CkOg%k@*lO zqsY@S_40A*I|t#T7``Zg637HAaBYER*>Be4D?y%Hk*NthDGE=ABjM?~4e*@LBAdW7 zX2kb{2aZoaHazb=0~)mZh~1#l?Fh<>i;g`+c9Pms?+6<6LL7p(Gdwod2bMG!waKPF z+MmYR@v#TQ=+BZ4uqX5ORHjmlMjA&}Rq>=s-`#pwFzrl|KV~nr8mXo9eVsQ72Sqod zucPOT3wejCR*DU3PWr_7=w@GA9t1ihN7r1Kpo3f(t&5G~24qf&AQ6QF+6ITDQ5*%q zudRiBb~7C9aBw?BenP+^YryM=8m$*{_B3+$aru?VHv!a+;D;kYgvdIRqu%g&WtL`M ztIUa21&9u?v>IHS2puvDN)Wciy8kyao)%;)Z)9fj##&sRFXg9SXBAxv-7ef|QeVxm z(`4AgYdGng3T)*ml6$QwDj%wbt9&49=0K~!^;q)3&bv&$S*3aeSPWwQ(u8cSN4W(O8C5Y85{>-wXj-IxmKN2| zN^wr8VS!u{CHf}f3e_fNumq}gLEx;NN@2`lq6(INm5{X^5o#X$*DM+_z<4zR1^Z~G z^p%>joG;2wLhwiI+QnAedl3FLw_>dX|Df1spOOD+AF9!#LgyBkQ&!SY!E8k=GTi-v z?l^%3wCu2+Hg+B|V$S2;xFRIjN&9y1+m;us!2#^#T5J^?jhGFK38jVwD-634x%UA& z&3JP*PrI9XT`s=&1`()lt33tjbupGHAKwj1GlfKBf~9;j3)70IJKUoe9_bE8n*<9) zs2Y#iP0eNkHEgCgxPXoEggqL+H#o8b!h)^+nuWSNq3jOUwRVZq5REmlgZRPOORN|q z%LFnQfl-+C+Ly7uiJr@IBmLjdY*uHl?;+AZD2OE)EzNcx-V+GRCX!mJ^TqiiPo z92gYvKKp{;VZjm@GYggsUw;c?D{4D}YzO6YA#4HjmbwUD3CTtd6DUQxFmqk3Ern;T zlZGHrNQtp;B_<$HNQ0awR9%-$6F(e8s|&DGvur174c%V_ibM7lyns|z0(IU{kUW*s z;r^18sE=HBB4dMZrZZ2SGV_Bqh7uoA3cPa)P_#d~=_; z2o!kEu4X9kmtQrZz_YN{a%6piCUdB$`c+6O8h9%8}zzBi5E-Z zE_W!~WoB#A{NzrY0_vmT`CH6@iVO8>@WC5$X-r%AIvnBF64o#)BQgJCu~?{l*< z+_~|-4yViNT^!nfbrme*PrnDWW1+{8o;zk+=&iPej`i$ulg7_spjyT&?2h~hLI_rJ+1NoNxo+&BksKR4 zBERp*56pmhArk8aBEDAo$e_Uh8@U@_$N^a&VZQyJ6S&sV3V|c2K1WG1qgov;PJW7pExwTC` zwydV$VeL%2c}1G7V7iEfA+41wqM0W5q;D13C(~>c(`2Ab3kS71CnVWX98)6}MoqQC zF%kGiIi{^AjT^!ZI=MXGgB@XSW9f|9+;y1Jj4r7g z3NkCVHOOJr`Hg{=*?|^^TupZ1Op0mBA7RLG34fIJTj7sW)2N&pNbpq+X~BRH$KWx4 zy9pixxfQxe7`o=Ur`WpY;JsYQF#PrUPdN5ftyFt&f&XTN22&5H)zn7ZIs2UR6M3T% z!@vUa_369_>TqZ7^B_RMz7O2%8nLDBu&1=44G)c4O?|}qQua?LlpGelXk*=pP_5f> z`wYIvp+Wwv=q6?;V?K%GT}`ZnyKhZIYr)JN);Aks4Xl%8UuL2GmL5?C4CP}UOxSE# zAOLyWthnHAGMf>qFp?H{~UKrLF%#ZKeLFwn$7rys@zIPn<*j z@2zIU<1asNs{ftcjASI}4S3hNZsJoW}T1!PG?r?Zr{?T8S5suQvi7&uUw~ z7UsB|{aN{fO`A$=1i6Z|sKjB+H>6Y|grrF!%8^fEp{1%8 zSGpS(@jXb^!WE|bD zwece#075AUZLVhlKVV)017)0m)fr(||LuYXgUp?Bg?l908hBZEXC^}C!L>#g=qZmG zmDJ`k*1La=F&O*cx(;+;a76C;lE-5#l>Cv&NJvmHM$q8X#Zp!C1}D2996)1iPj-Fk z(0bNuTIs0x-UCfY*J10alnob1a2G6E^ucnjbs>K;`IC+xp}%fSb>&YAe>&o)QcTd+ zhqCPw7QDy}UmUTj8gD;do?aBS-|fP-24la=K($n_`r{gJze__}?RTR^CD0s4*zZ2u zP5WII)~D;vB!d>hL}!zn+1b@Vn-P;L=V8M;MC%eLjM9L%JF;gE4Kj1kJefJr_%NS_ zyYFgmt5F9nc8Q6wg6tW{4jUhY0s&A}iN&SiIZSz-5s5o$&4YVcgxGG;kT;={raT0J zHhzpvOnIZvV0{1Gn^clYb@t}gf;~+n>3gRgB}stA>tbXgB5PqHxte-KWnDY-5GWRAga)yTt@XQ< zItf?Q0(dhO72uXgHu|U7{|1UerkxPA|53j?+WvPQo_-(upBu)6c>7-#(*J?|ul!6j znZ`z6XSAP?A_y9k&MIP|uDy8{e9uNhxcl^WHi<3%Of_}E%b&z*t>k48i(~gt9;^zg ztv{!>!!kU>)0{V*^NZm`fY+kPAw6#d)0uC^hrsws_PZne>~pHGcRXnVwN>Y$bv(cd zYk~vGJfsDg#%?YY7w-P%33fZ{KaFc=+qiauXM*0edu=a%HMg-dIlv-RsiQS)dN023 zX{v>76n1lkZ)H>X5Z>cn4qanb&w1B5Zwk}Rg!u3SzLg4J=dRegjeC90w z98EDNjFxVZ^HBo_y86?oFbi7%3lX*eRIt_L&pam+4522;#=<{7QHJ2+KmtQ>F$2Jq z4>f>fvUwyJ3_YLo913^<5$Xo6MvfRWc>bkHM#MO(70kk)%ZDYmRCpN8*AM zhaXa-G__1qw)IkmI^Md?ryNx*xk%D6kfph{XA|L8*Jj??)8)SXAjgX&HqVh$<(I*W z9X^~pRAxdF;S6FDCe;bK0&s#DPO85oI#uqEvYp~TxMqUN?_}mdKgc(LOuj*XNLiRK z^9!iEv?n$@Up5K`Q6BjYdC_N`IlBbiIjl=QKDy81n0T~@wBt+%o%K$PN@GL=f^nAL z!V11e-?2O({J8g>AyZYwgmSg}bg-!!7TL$Uz^CGW`~&O(Sen^POF-AyOrGPI?OP_OF(mgi?2Kd(+CSZgCfFG8?`f8R zVRd7N#7dp@(Y0#2e zN?2&v&krTx=Pw2czxm2BNVwN~Q4+3~>WmvUm{Dz05*~~4;z_vAn5HBw*)hbW7~pH? z4h+Esn6sbc3!LJaAiKn=1;q!;3;#PHEyEvUq$OooYolWehI%Ef~D6jV2Ly{rw z*~Y}t#+Yc%8HgG<&MW*5rPoSvNr$swR7sPXbh*J^uYmvXC2Cb+ zACPF+0Q5zx&Wm>5T=`~|QDATqi+l^`l;ODHf`xQ&D+?9`j|&z=0-YC$6Dzm?7L{<) z;I0y0ZOI$6u)cFY4l&9~!Th!te|qxgZ2VyU(~b9C`IEw*j{IrIpEmfx`-3jre~TY8 zE8dFzmEzYDN%#u0V*0O)iq3ym;aCDQ{}uiV43b!lcHs>N=s`tptB{MtA>$zP2^`4q z--7TW<&VmqN{#lO`4;^5T@I^nH;wGh@2rVpAdePJ0|ho7K6f8@)e;1YzJAW(HZUpmW3 z70lo)=MIXJ0ryNAKiOG68289H&RH&G6<*n!*}!&1;|#B?H%ZY=LNfV~xs!VL$f&56 zEVb5K#WDzLPSQc3k9CC$1U2@SILjj6*@M9PNgo{pd(cdd0oHu1F<|GlPV4dkK{?vj|plM6fS z+l`Y8BY&576^o_Z%4N6|hHr#x(y~h4!b!TcoH;Phj0PS3{rQhU~d{kJ1v-{_o;;p7OA=8EC}HyK{d)@fWE2q*2h8k_#_x=s$0 zo-C&s7V|ViF3TA7;rz2L{kW-^L;GeN{8z233lBZZjpf|16n)2&WGB#1!?^6CU-w9N zsw*#jGjCVT;S^_C85YQ>i!T;z8ox)da_UpqO*IkcAy2ZhKj1b9-Parqk&w^9hUrQH za=JrZcGgYD8jh}LVqeS=Th}wN_2A9T*l&Q2tKbJvP%3c+H(IQhDk&yzSFCOvhF`q; zrm#VE7g2xZ9aKoW%lG~CB8PP{!v5H`8w;!S{vBWUho1`fzSNWsnhb92@QtBpX^=9s zAK8`~fX`to<29W0D9VJG!org^bGWK*@`b?xDM7w4#LU?TzqDI`?Jw|wl?^en`&>4} zn7C7TSDb;D(=$9l9QTgHtcRsfip)f>(j641L;Kpvqq?gJD~E{n?~SUM5h63E@MYL% zap=j^Zu=;XTmWK~by04r17Mw;wS~^SgOQUb{*8U9{2SiPFJos7>${_jM+qAE%)ai* zx;gffJhfF1^tHG5e8Zp)^Ms5r_2&dx`=U)Aj3$dUf=!5RfIG35sm(4IXBz}JnIiz;cVRr@_ARnSjR1;Or z{-~-E?S=(`tg?wDKks~kDL=Pi`2<~l;0(7J%#h(b$@C^18n4BtcFI4Nty>|j)U7OR zJy{26=XT_ZEk-1f$4sQOmpBBj;<@DiB2Al)Wxg#=G?!cV1&*fyvtvUkW zy4?Z~0{_Xa5al8^iP%ogg!!$tZNdVvB%`sS=yYBuRupxIJMzq65jI`KGv|w6 zi(}5_M9RYO@7XhjSRzm6Mf@RUx9^j(ZI?n?dJH#mQl%emY}hx)XK93J58I5vV9C|C zUa6GkYLEk^Q(7hCioL#r`}75Ub=JMUXW^SdkktOUqK`gzqUfV1u7^H)?tGFl6gBnb zvl-b=mI7H(i!YVSU|pk;579OK=Cn69vL$6acjZFr2gi1sI2$J^0L;1)0ox6gg&+4f2re zhWnEXFtZFnG#{PH5r{j9I)V|%TOEM}S>lfP(sOy6D|rd@R5$jzW}y{0!pUhx+8_a=XV1^jl^jdUClISob zFLCIQWHL4+Z^Mvmb|`LI_rHHAzI0JDL-DRTG8B6z%TNsb1w(O3>5jO~T-Fy1hZ(}6 zr|jN>|5Z1*S;dw+kGdn}xuWqEreWd2%>O0=RU86T&vPrVK@V4K5*r2?UBm&p4DUg6 zaq;w!YI58N#tk!pCKut7;9R7>aY+B#PX8M>?og)(znUV$OQaPxfpRUzmc`-9{-Pn+ zR%+S2fYC<22xUahXt3UWjI?1S560GTyaZEdhIOQ(l~YpfHchDHN}vL{F~B)on>uIH z2W-Ez*WZ3)fD^ekb?x-Vu_;i5G?0go_?YznhLu(Xeuig~mc95Dfg6yfVOMLRV9?gR z7~sNEUZA0~v#b;lw_4m=v;AI}d)p+sxIpE>^EsE2Y?h3evm>ZWfo|Ho@lllY!W zyw(2P_CRX<2T-xkpptGE`T5#Ijgi~YZf^Jupb|_@8MPJ779`|XYOxNRP&o)C9?^;MM)GYLMnT)fCW{I;XZ~1-?fHa%Xh=l^C)fD)VzvH zmW1)=&9jRzeH`3~xe1oVHUpe*xrq#-T^$!>(-Ru=E!*rLqB17cKd1#w76`-n1sznA z6=Z(7=1?QH~e5yf%87Cuv zr=US-tw58}dOU?X-{W~@+Bt>8Is9`-Sa7wh0~L9gX3T@N^TMYgqrHR2Ws(sb7sq zxs;}8;Suw@-gq=KmjX&BlIohuAPS>6xg6tR+U(o~eo+2WN~ zs=h!%V{`c0E*heq;=d2BGAo=${aj{+)2JLsOtNV}q(&p2maBc))qk$t?auN+Qmk?h z_RntE%_FyPe=rUegO91az6qOPlM-qvWja-2ef=*mzB#Ow*D-#ue+qD2&o-MbHRtON zx(yj$k&N>zSA0s61=8oPQ4rjMt$qp7<)un^RA)NNsU#Ex;gj8Pg1>XgWySt6ll>hhl*~<>G}c*G z4Y=^8o&PkvnL25@|75-y?eljC%spYev+Q1d-`?NFv$}Zd-M;Z-edE13KY@99Zt^(a zwfHpIS^hiN@I9-ijvqbl?z<-6gV(+c!H>QT@NL!I)5lMpI%ym}Zii4Dctm&ax|{hM zds$c5G#x9nu1||^PHpK;rL*i2RAhIq8XPlz%O2K_jg;~==(ZA2l0?Y-!C05^qF!&* zK1rvROSX;L8>=;|;rqski`oaXM$Y-S(RzR^q$lf;u#W!kJJHjQ-spWJWE{&1*TL5dN#J=+a9`e$KKF<#i>QX=q9^ z*VXR*D>8tClZ(P&IbGyUXiirM`e9v@;a-Jxhd<#fU7T>1{}=ALK!KCiSXQ{AH!lYD zND7Nbk{uG~)@?Y(kLlKJpbjPc=o_f8J~o@g2#!d&NR-QPZJr~haq5u9KC$zzly6Lw zL6Bgze2b|-4Q{BCh-wnqKY}LoAxC`MS zM9(zh#96kNeG}5|_Mp4BIPax&jdpiO2+a=@5so4S-R(_Djxr#3>0$Ky^T=D0qw7tN z<34at;yCpmah7wM5;&NEa~oLT|C3~3O<(fk6Tu%oiX(!4$0UN%$(ZVwY#n4=$FO<#%O(ebe#Q6^EtAf`X1N|X!)w|3@)sAk|y{8o$=$7{h8b$ z;$CC#A93fL<}4Q*uk6n}gD){yI9Dl4zz#*~6jV-@0ZAB&KPIdBv3F=fFC-?dE)QWB z$-3YNG({3ooCOQUaV6Xg=beypG80df;H2#+dlQGS-gT9GlKNdb+ zvCuNs0dA0_gk=CVFh3KnDAGoPb&&pxp<<|f{RJk@hW?XDb8qRMpeXM?qiLi)<2JBufe$F^p7&c*&SCX~!d z_D%D5#iGb66oAW9xY*@Y0s_@s?G>MB$eKNO>gRLT%9w%!p+6*&@8mhh zbpZ!YnvHp#3w=_e7V@kpJ(p|xaNZ5KQSM74A{8U6lVM1#L{LXIhK-M`6Pk&>UjcwC z19PW1aI!_{Rv2)gry>UmY{f<&PU`jwM0?kMZ!|^};sq?n9rC~rW$u%-QNiEkVLr1` zKHmXPloRQR0+$%c7EW5)9<;OXBA$#>B-!PRa0i=))lIZP&=OAiW+#@_?nX7lxx6+g zGb4m{ONsnRyOu`&q+Lr__-NPC6+Xt=cTFX}it*!`N_-U$XMguV6Dx`)qE^$>AnaTJ zB~>O=mOxP|IrkR4dfMkB0_fgI84k{t;8yZWEBZuwsf zd7x=OT#HgCRJwDvPRCOJ!!<~`!>WcmU-F&UtMpCSu5hiJZx`zheim5@QDjYw>}V_u zj!yN2XEl0q8s=W<4J}~rGVV|5JE#I_2hyJ40r$Gk6S2`L#~ZpPxiEBNYGHV6V`0w6 z&U^oeY=xmou4_Ug|JLBiIp}*jG8d1qtw}m2G#CB%mnWqEP#T|E*J5c1=Kylou{&t8 zt#+}VoQ4^>-rzj80i<^}GCO=JxFb#-zIGeu{R@BtJ>7p%GaXPS^?bS?&nOU?S+YUV zYdyfYvf-qwtPEu7{>?Oo@5{ycF%zM=PRBcI3VuX=O@jo_um*G2CFFJ*g|XL8I%lwe6*be9~|cfq;BwYg9fPdN(z&Q<$fvn$V@3JT-gDtszJgTs~CMKum-d z*Ym=~k4j76p6Dv>&Ov^u~u=j*+7GYlrLO{M&h5dyu zLfB_QT8on`?A$C!h5ZA|n+W@K9O!+Nu)n(}d`vrJP}q-^>>}*lq*4|31R9;zZW{=8 z9;#sn$ZLZTG8?o}#JLMM{~cj(yr!gM!bu~4FCxAkZBP+UG+2*as3M*TBjOk1RzOn}{l5hvzbYo=DdMp_aV!xp3mt!?e6IjY5J3ly&~&bP^#+xBY7LH?tafQWI=P;& zgM*{Y{Pkr70W|Wj0z!iNZfYX0;0tnHD@O-{b$kQB^DCC7e=gTW>7U`s#ZmG{@>+6H ze$MfZ$Mtwks^xh|=$GcsSINb5JwbQ4%DG{_PFdS=NJT-`mys>}USeEY3zpi8WN4AB z*kK{L(Hh#uETQ0Oz^tDSLCs(AOEj1qf^dkS=AsLi2y-!iIa3EFpJUKTb~0sxOPM4D ztZ>lvj3+0O(GWfkQo;*eT@fHkJ23*5lNWs56a1TS2z-K^L;(sU;^eW}WsQg!7Y$#!2U)DgAI6&Te#A=Px&V|L zveI0sxM^rnxaVZB$^A+VF9xQu94d!EElmFyugortHF$yURO_QC^(Ur|P^`wC`d6?yDWL#~6zyy)poSc<-WjAk;>Z5NS0ZfF(3c#A?_R5U6*b0n~ZtET6j((N~wf}#NcG%rjp=R zyHQb32CA#bK`qC^HNT=P{S#CNa{aw7Egpg&Wq%M72K1+Rkrz0W<;N@!wnH?>N`-Ne z5b+!CrehW! zo;)U6`4!)SfK27yaDIBx4=oS*Ilol-E2lU&Im-<+S&UZxP+}y3veYBbES|_`6G#o5%=o8Me2qA{ifW!`?=(94!l(!gPZO&Ac+K)M*Vm8+4pbQ6x;vtA4yl@o< zI$SBlc<3S+-ya^1n^5&e&F0(z?waBNWk~s9*Xb0Cjcy6`;3w*g4-dlx#L_LTNq`dB z(AHUg7+=X-E-UAKTiwRj$z~*xv$3v(M+tF{oOmSJ$!R2{FBceXwiajntra?n9zRjT zWX$+$u=OLZ?*NAtY}t>!%wzSPtF~Y5SvYqCQV?e|4yb7y>}kZ6omZ&<^NTnt5bUN3 z8Q@rFUc+79TpVZnB^k81icCCPgNu$$5#qrV$(0Q}DmNm1;u5eQM|vQQ)+`rIlBbcC zFCa!^Lt!?O)U+sOfApcS{_Sk^rddhve)Let6W>E?$Th~`Ana0{+REC%5+gQL(R9#g zC;f*Cb8vp!>0+k|&=!Um3pBkI2LDl*`C4JH)`JMno^{_rLHkEx0-`@(=kkVbN`(4NWc#UW+xXO14DT=e;?vI_C{#3BdqcZ;$P0m)LyO z=3(}@r7$Ejh>Y3Sv;%!9-q7z^6xt2{@IgXkzh~>f4CbU`N;%L&lN_bPa6ARQwmPSL z|8dMI-$}!qlIB9ATDU_a{ug;)0v}b8^&2380D&8XXcUmBjV6j3WRZx`1cKhi4o2Ki za70-}lt8)>0i}~pL#|Cb?J|m^pM&EvIOC^?4zi7th_VPOpyRMOin!f2&ImfPDtZ6^ zsk+^rkdXMk=l6c^ef)mpE?u|k)YB$7 zxItoe$Y-Es)dRE)VQ$!M|9~9;NVSTW><6tJwafpXvuH^wX2UkZ6VXBJI?FPamv_VM z#jU&dEGLNUMz$0qXr~d_adAYO7psM{GKXBjv6_wk3C*#Ov z+T_NnFHa~-71@Z?_DB6^`&ZJIYUMo*d(l;iPfsXoCnajTS~Y>at*kd-C2eKUGDnP- zPo<#3#m`dh7#uJCIy~HW(LOG}wLQvIBze_x@W zO48$dz9Xwe=R|2Jnq$xk!M9zgdNgnwXQ9>`uMZ#GDUId?!yXN!cD?{UZ!&^Vql?rD~rYC$wod>|rEDqh2UK|>;>mWS(-o>?7*OQ&r4?%Vi z-|9$DvGou8*YCunr`W31(u1$4F3h~`ccqz@81m6S!ed~!0?;thR&5c7{J1d}Vt?>e z@WV$TgZAh6BlGKBxH0QCnZaGg!t*e$7l$t1S)BK+54#DUQLB!a+*N}{ZtHJm&Q5pE zF0<}!^T19MX=Xj)Ij!6^U$ya^cGw-h_ylfacIUlQb`=fDOdyaB1~F+daaw^Ya1?~e zT&z)M{t6GMo^&?$uiQss-g1IMKT$`pMopobNmbpV~9=M?6B@wLJ?F z|47}w#^nd25JgpF7^u65Tvfzf5sd!Dc%~2MDO~NY*g2}=SW!cWH2_(D{6geO4FEuD z05>nfd$6|?LW8AB))9RP=^GpD0AhTkG5>mWS^P?YZzgNM1`oMZo4ryIjU0G$GDDGz zc(!j!YDf5F+jN5@RC4Kz3&4Ib0t}i#_&+P1f3o!=W{-j%j|PTgVK1YBFjM}iJD4NLfwn(aqB;&A1jBp9Q zgz8N`RoU-_frInrwZ)L%sutP$m3c?qZwut05^w{2nbuB>jBIC9?KbJ`5*9#vvH`4{;1c{o-b^K_B>1aqUz*X z^rf_b_%+8<+_LS7sCLxRNc1%N3&S_JW<}TrwN;(!6&^4S6*0bO*L33L_;nSQS971_ zFnHZ-><)$HyX(+vzTB?c`LVEk58n+7S0sJpv@P?q=u^;_f|^4Tf4>FiV`=)($`C98 zouoc?Eh7!G!xV}WK*EcbU>lRQ4!%_MDv5V5mzg&N0IHnQMK zdv&Q?m2=T!xm>hax1h5gYdjBHEJD=l`XaHnlXydY52S5zW;ON=L+A|Ak#Z^lEO8YB zJkGmBQf}u>5ttx^OQm4hk4jFmk-=sI)zreUy5R`&7x?1H?GJ+MSuMonS0dULLduRtX?9j!Ueg= zuRUj~8g~Rp=vhKUt`JBx1YBie4jd?N-CK>2cyBRqkimgWw$J$!$;EIoOiYMJ1~%80ha8(rSyjqqwrT=b z2a!Anqnj5AsFjTg3eoqBj+3ssD(lU75u$g~=z737Z-$k?|F@m2G+ zr`UgAqj;1&jPx4lEts2IXqNHH}okg4{%L`2tx7Lg&%P?eJWE%vVS4$9c+D2>JPGaPcP zKW+uA;Op`?#>!h2HLU&rOdu?gturySBr3g zKOo%m^PvNhRx-MeJT1t9s4d2`{ruBg1!L9x5uYsK6}1sXU^`X>9%DrkpMDMv0;L|& zbVB3_Ww#ooXk_i?70*%^o^5%rBf^k3;UJ#zwd74m$IZQ2{FBQ+1^iQj7{L%m@b~VnzT|6`V;% zQn8scvWQcWP9RnBt}}sKBlw~XK|FD^*h}!ZzOH-(Sl?#vnPx~>Q?d-rAkHMokfc?T z97DpIl43|$b4H1p;@cB00oCB$MOT$yD3y^;_MN}e!U=mXUGNvhP@d@TNN|0~E#)^m zCcnEe@z?TOf^mRIo`q}GLRTd&p!=)n2h4r)8#wC)Ty$3S_7@*uiP`o`I2V&dGjTk@E z>4IUL*sf?9ey`k!XcO6$ zLgF^o!ty*73(bTCh1k@JQ0QOdHena*DD}9P7mT0O0raNHMV(6kf%*kkpnvhDXRfNf zHdfid(k&is5HpNV7p&Ayy;C@xeYp!_g>ZX&2DZ~gmRtzTFF#My(|cf);0o$mVsL$=N2pC=`5 ztA^I3;vi=?k7}OAuDl0JZ6}9;4|e0~L;{am4ZcjWFW9G?_&;B69Pdd(03f*tNJr&G zRnNHoh&B+n)tU~`f7WJNJNoVt|J#u}euAU=EeBUz=}<~tG|TFC1nuuALtVH64;(8= zI}kEqti;o7j&`#P_y-BP8Yz?sDpR{bjm|;^coH?LNUv2Me)Hlt4jt5oOufL_44hj?Vj z1s{^U<0vl&ajTY13E0nCHZ|r)XaFCxbb4}p(^4?jBaKPjGXy?hNo3+onlfFnb%VXN z4`OixX2043p)&|6e+>3VVfp7S89_Nb7y1vTdArCX*$eg`qKCZgpjp)K^!nvMXj z=Yc+VXjF@-^6&Ye%C~i!>!NG$C3D$bimTG@WK!x`8u(pA&&qy3iAW`Pb(xMo=``@W zOvj&e+3z>KgbD!rqgK~(XYdU6-HWVm3x(1AD_y7__KR;MEY||u!{4oXPmJa}>>2T4 zQ{-b?@G%Hu=DlysUoTj*HsF;R?lzJqkQ=X!>CmTqQxX_;qBW*VAL!p)W0w{dUJ)<@%M9ToGuPupMi!_&t1${4)1v`=j`GaZ62f%Oi zD*BHdIlBKSIuVnjoBxY)H1qP~$`Ha2G*dd1)6D7cCHogedbB$Gx|cD@y$XMdtx?z( zIK2*s-Od|C1XqXz5ByJ}ub+}&U2GYn3b4Nsr|zD~ z&n?-3%8@|H)X~;H14|@#fh%w>1ISm)G=XA{dVAn*3K~m_$UZ_+y52s*^CGg3@Drcx zBNW;@M2}^XA^nftb3wXC@QeKb|14BxhN&|Dx(GoRht9`)FMphd zKjOxa9gs*Y*avIfxt7<}-|qjQnmNgCNcvCuV1+t2grA~2j+eoc^QW-@POTqL!}67$ zKV=Hdlp{!4~l*DS&05rhy9p4B`L(LrfWm3waOrF=siY56gmCZnQ2ok2; z-TuWXw~qNUQP!SxmNG80SpXFgu4qRE<6e2Ul)%w(5RtmosR?+j;-j?%L(Cz&<`m_5 zAUIIX3Dy)EJ@-B~su#&I$0tnv0Y*elz_To8!l))KG1x1!{ro8Bt!fk{MVCJB9 zENQ4ttdh!df-{d?+m35d!hd4mvBmvTf z%z_gFdPX@-NmCiDFK5$DEs$)0znGRgJ4MT#y`dwTeXx7yG{RwG0SlUb$BG-sg9w5a zi(gb8(&r?|!v%!)de^bgYJ)A1zjCUmdYn8cs{V>UP~S-i3n{jkJ+T(?Cv2fWzEvz| zcOPzz>4lZ0E#xZ};OglSkM*I)S|3v-kCRg%QGWc+kR3$gC|4iU+U-ujN<2_Scm+y=_dE7VVQaGe5ZI@Vfh0pth5}mhJ1e9{7W2 zx$CN765hwK6Oxl~LBAL0y)grs3Dr^+vj^TDeLx`A>yunNF9OI@5R^659XQx(UJhy* z^L z>#;^7K+uED1cy^8gNsl{ad;F~Vm?b5ZYB2`VtINY%=j5$$;+(qy)p{}`&wOA<>}QU zkpJ}*kkhEV0cOpJkf&EF=l^#-D>UWKenizq^YL3CzlH@PaVveK6sl*XL$!$7$k~Gs zI(N=)cixsV=F^H7X2t89nOw$@inn9$r_6A1Rp#s!~+KA4a!GRID;RZ+3Mg8e zN@Jzdn&(ukfY2G}lyAc+*Y8KHfQtx%I_7V&Rs4>du!@hDe%1;OW+Tn%Xs2wIe1kz( zu4}}hEz`8cctKsegg;oxNR~K;OV?1rH~}sp{T;hN;Uy)hi-~Ug?p{i}l}fD*$l{#Ls}Z=5MSz@Yxo-DZ z?_;@7VI(|Y_OpnX`C){TXSNXwIlOt2)~xrjDtq5kl)`!;hYguXLrLR?ZMiMPu41pf zVho3kJk}!wmf1lh{f9MXFf8`(CbF>;aVQWncwjHh4+TCW zm<|#5zfQMQ63^dNAlb>66B<>m8M@yXGX(JTOfit4TI&NqVFpsWbr`Mz6Zy9~Ze@?B?!=d&wj=t*fzH=VP?z99WL z=IFM0&6uN3ztR9J;Z$wNc_GwxN^i+2B4*C}2#-eBr7PcqS>~#><|1VF1K$;e%BdAS zA&bFqPH+RlbR91}H7Dh(bK!xVg$K42SqOE;E9@FoGWM8~v9a)2lv6O6uO<*+36OQE zTtD+zI~@5s<@b=U-(1m%eASJsCtnXdd5nC~QRH+^b%>%RZ2$-4FlrM5?6y9_n$%p6 z^^}sWxh@edk9Ex;2-j~^OP)}VLB-Zb_E~7DnBIhO7+%u`t-$ww2-ajuS1BaxD;v(B z)?dNCMUO_I6$sd5B&6^ln>z(8<+A?pn0)%Bni&YA(6z0&M^24#u|XdU6NHlqH@qtK z)b_Cd^dAZne9faOKq$7rkYl!1!qSX3*8R3h;KIsyWE@0SRwYZbAf*p0@&{JYR!X{e ziWyi%DM<2NWG}?95XgV_RyL0a6jideyK{%hGE3UM0fp!?wpzhgaCOKfobvoA1OsXG zI&**fnnRoF*3n6&<*RZG_%NJu(^%>hweAunUGT2`1whW5Uo?%Jc5))Se8^NIRM z(FjmXzHF(0w~Fj)TBX=rweA)&PMY!`;ZtNiBJNDV-7JjIdbz>OcHmV5|F4S#=&G9) z&@2zRhdPoi+mx5ueh3F)ZUX!1k5g%1a#L($hi@(r{@OwZ7af{r^F?S_pOsEGcD zU70uyb&XPkfH4bo(SVvnb9ylm1|7IWAuhci5EuHqDa3)8RHoMZId2E@*N)W;hTvTR zPaP!y1{?l3aj9Oz=R*pzQMWY*q{gWM_(`=}n#Fr*+bYdAty!7Ys9YLwlM1Rz2d*m^ z&>F#HC_yTypz)K8;7)?d&4IWQKSr>UZ_u*>6oV#`M@I*0y{l9qbl`a%kD~)eet4`7 zyi8Zl=15C65+j9fOoIrQ&9^sQm=s+Ev6E%J8BV^4$lHw{RQiX|8l2S_te)GE(cjp=$KxZ}bCHDW6@^o*yZa@ntPU_YvhglvVE(Zh1}1owwVT$BW+4BhUr}7s&Cu`y`-Mdb zN`6QIYMPw_XTonjrI-3&H?g32sRzl|;z?n@P;S{n@T7E#Qaa*6aH`L;z)LSRo%1T` z44v~`z~NTS3Ve?55!{Fyyc~@Gb69Q;i_F1iUFH<<4_4J64$_zk!$yTX?wzYkcku%W z@VSd$%|yl8ga%5g_>IPAj8q}uku_9SRC}TykhEPTrWDTK=fXEs` zSqbk-B6V9>qi~egKn_nctrDke@5ihw``h2b3Hdets8}k|kE`#YI$%82^v3**5}$z` zq{_b-hNbMpXJBXn2y0w^m^ok^E-CRJ;xP`SqQ5FKBC`LDWN#{#FlL}Q@_A!)zzvZz z3+2uAem|79{)`(0{D-eL=2u-x)j>tU7dIOVlKb*zlrjI&9=y51s66`=7AfM>jYja| zOw@%{eHj1{oysQkJTN5D1lS}NS{lJ?I4t^r8lj~Rs|RwXwMc%6@D=7H_Qq>v6u9-B zT=DOI0*(UQgYYZ7+PCA9bk}-g;#?W%p`v9u3wDai_Pvc;y5Of~Cfp zb{Eq~Q*}B;Rmx<3WGr7sRH*#}I9w*pSio)hxNGCZvd7UBpAT)`hLV8K*UbUNdvXjC zL-ygw`cm|FU5E_GCCb~K(Qso#v;REzJ%NbCBm;5VCiqF#3E`Q?w>Pa7P=Z#5;6a-A ziJzZ<7?sq(4gf~w*LaGxI_nzMU4j4&+U^ddvVlef0SjgaTG!rgZ~76kjYmN73J&^A9y1s_(_%wGgbh_6Dd5W#RC{S`7L~uOV&B zNVhM0IKjLb0?niFqo`wP>S%DkDh0U70M}mHm!K-j(pg6MqnD;9^z_Axn!xY1b6SMo zY-7PWiqx3YOzbA}hojj>up4e2n)|XGinD#Al2%n5@xLeH5x>@xyE7mk_UMlk|C-Ww zC4cs1<2VLB?2?y~p>;TL_UloCGn&wXGlVx?;5-zE%vAfzhhk{MX7zOVn-B-r+6`;0 zuxgge!6Hcf$~28L#4qR8M_RNq@*p`yv3@cquL+c$KD&98asGD{ldi!yv=Mj1jNsQe zD=vnq&M{0?T6m9qXWV-ROIA(ymMLaiMfm?s63aeHTha-1GK58^n*44CO&fGlF08Wjp|CFB|`VI{=DZBo6JD z2Rli{^(aG+ND>u|z5GcPkS9todSyLzG;6X}NA{L;n^8qC{kjoVbmNPd4F0gaQ7x2z zZGA1&Gf@jE`CR?$m`s^g169QN!I2B=L3_hgM;o0k&^p>k@?J!jb&QkT+5TI(&8R#d zOSy^#AR?#Z0mHKr1?4T}Cd{WQ?iOY)$59_;nP1RR^czAxm?pkY(hEIQAV_Ie%!+ zdP5Nf?oyH5ybp~9cDcM(;C^USY~ypzhi>epJMghtbM#X4wC{jFxb&0h_F1Z+y+A|z z@Ef%$eYfFvVuzuG|9{E^^y}k;8j}jBHa$K({tQd zMM*O51ili$_sCVpf$x-h@b#^ZTL9Kt%)c%LD*yjv9&JAiJU;)7ek_rHj9R5LkaXntT^S(xT>40`UYl|*plGdTrue;8o z+KH)A;k4Un2{gfJf3g~ZfB#0nzi%7iKR&1Rao|_RsDfYJdqS=47cGHb#o-`fks8Pf zW1$+|VTaP?LKLa_0nYbSt}@{+TZK{U z{mD4|%Lp=d!W~!AtR9cbp@!)@YK`Dobgi~nVphlFW?XIS*8GPC8#<&%K42Rf2TEXW@7%zDIVsplA&-c?h`W# zrlS2BaGX7%CbdvaR5lJh9D3Q)k08JphM%sI#drrt z-FheB=nsF1m$FZR0iJ*$HS^Z(BHa4vDMV1lH6=t4d{lxUEXxRj3Xq@W&gSvs(8Ip} zG6jVew4OHuJW7=9bH#s9v#c}DkH0}r%Evi98Lo@cY{mGpYfVC5M&P64^yTljNnfh2 zJhm_P`**aYA4-HEaGZe;_MU|agqrd9j87%F*n}sU^hb=~0z87F=~lo&wh=&0{#H+P zDTFYrfo)(IDYikRi)_4^uGj`tbvVbq@=((p(zONfYq)XTZzbA~QRN`r+TcoJ6!{ah zbDuSShEmm`l>L2#bu| z=Cov=jpiMi>45|LV>hA)Dd{L@Px<^n-NmhuBE>1hxgsZ@1Zfbk=n35#KR*tc?cn0Z zukOHH7gjuiRV*2}D9PI^kpC+aNaB{ZTT|`#E4XHMhPi$SBnJ+caS3t?20}*wzf#I6 z=TD@ZcG`Ufze~%08)Rm(}dATZz_zk@cqaao=jN z%;eeqlI$C&FaW29F*v&I)!k9deq-1%e64vZ7V&!TCpb+{))kyBm{3 z!!gKe^p7u(qty(Z&?xrBzj$OsLwgPFWCQb%n?6DSC5Z3}Z5IOs_6}d;{Nr2CVf@5< zdSO$s9JHIBb6EE#<4)!f_X=DBJXfTzN)@P|D`mG4pO46VjI1<(VC8h3!MAbyWe$v+ zn5ZQ9(e2YGwL}n9MfQLuYQgw9vH5CXQBp3fWiomx>9Ce5e>m0`lwE_98}y2A-VW9MNW851%i|iw+pqZa%O89%=>9<|bGoP%?WPWQDjm{@KG`*)`Tlc}A-MEP`bfsmT+xSOGzjpN zI5TWdqzgg^c1)S_{DqGY*o;ZC5Hmy46y7yN5Pv+o!UVQ=whrrs- zu*G>EJTh7G%4O(9LLu-!d1Rq%ja3FxU*lo__tXoTpY0cEg@#iuUk8`ip10J%s#fY! zLA+O~e3(h#%po!QvTo4#H**zz`Pd|Vmlifc-y`Fir*8w4*>Ds(Ag?}~_e-Y95IkeggF|phZG7{SetFXKfAt!>k>?g>y*ODW9g3MD?FK*tdMMpP!493 zz~f>(qEs$!38ZBfnAWI4GyzD2D%0dG!LBlqB)tA~DBNjtV?6fgEzR?o|M2xjC59>eHSyB-vt$w$3^VWxJMytLHg!NR9A?r)@FFHNYZd)Is zn#Etsv#+2mJ$ZYKiU)3E!=gjoc^?=RbMfrX`JmYPLLY(QKJ5c{;3x4GMChy?7V6Wj z5XnZmC1Vd;mb?Am%vB7i^#aA7ysr&-aNG6W#{BHt=);xJS-lNkFFoU=PPK2mm2Z-N z#V9IvZ<aIxCn&<8;2?Kmbf zRa;Tq~JqZv}5S~=%o7euE29cdP9GLN1I zU0CyZdQtmN%MVSR;7!6h+M8TQ`y5uiFOA6r{z>;eE>Ka6IiE%9Y8;8t9euzC1~E^V zaljMqJ!atSr090g9$iaAKZ~pvbjG%rJBxJ2=T{h&AD{s4CK%0hCkhWX8v2o4sq;}KGA3#O<)s|Wos$O3a7gm= zBMgW0eeYu)tR69`@>p52qHkL3u(xL;HkEPiLbw^;$V!XAGMwGHt@rVU9d%?fx=Y&m zGzR@T#Co*CAEOmYk^^92{|-sS><7NWs28mBB4aiVp?jIkg>Df{?x1HY3AE~mo8aq6CkFEM}XcUJxMv)jL|BL_}8z<-(o!iBZvNJW;uV{##Gp5u@Upak$Aj z5?{}DpY{oso?CPCf-LI|GhVy67tSQCn>G=$x1PyV>*O?`V>v=GDV-8FCvVU+)ua$i znJvU0j}Pil1RY6Et3AcJgY&r(KQoZH&bWUrIC)s`pT_;~;*BS~I2UC-*m^_d2uEvw z7t(-Th#MpT!`)r@gWD|LW>HEKbtp%4>d>alYv|CD7ZY^oWzwSTaPwHZ3$1O#aGpuK zZxhUIOpc^y=!5hOti_%+WKBn0ogV7^lG49dP~IWX^)X$!gaqPHR&mX(1Xz!ae={mB z#j`u-Z%CBwKJX8oKHxd+Ym@ZB##K2$YKZY#x3edfAD%Xm;~-AMRl}gKnDUEYUZv*Y zLFhcvaXR%oK@OzWKiSEdac$mISCH;aa&dhE2l`yIUs9p0!y%uG-S%P#g_bcL>E)c3 zEi#tW+8#PDLB?iE5QvgVr8ScuX_<*_A4vezF>H^uub%^kC6G?5XuD{KvYr~Vr^6`| z`@>u=u6WvN6HwglYG9g%2`$}GWz)y6GNSY_N6I3_InS!I?SYqxqYJa%p*_S>%OT41}1 zyL+?|G!YsgR42(#yWAmpp|uf=V5eV1sw)-e$S;<3uxmKLt~h85XPng^z~pUZ_!V~h z0vkAi0f57Mcq0lL%S$q2^6x*~MkQnLAI3V?U|o+Go8bqj2WYgW19Lc4h9dwUQ~4M_ zMuy`5|9A`w&_q77|3zlUQi0NFs^f_hhFEZ@Ov(E(Z@*vJp50k&xn(LdHTHi@BWZMz1=;hS^A8&3Y{EtqYi4e9iuJWA zzqn#$pWqufR&lQgw*28o|p+c7F`Nju>G&o^n2q$1VaM8khMf6l zWhUeN4`g-O8h!SExZHh6zWjytV#M{c^x|iqC&*nmqyM>$4|%@9#_~~_*3Q7&tuWO2 zu+PMC_NW;S?bO{uT{T^>JD$fuR$Cytu(BQd!gVXz>ub{>(`y&P7mw(?b)0*y;J67B zyaY92fUKr~;#*s4 zFL(`(l8yp6KF{Ja1XkYTIbC{=)G6@9*x8q>t_qadfYLs(eq+pf#9AifD_MjH4|v!$ zJ4rk{(UaZm|2U)aZ!jz)L`m?60VrP|6UlJPM`93#EGKq}@W(_$+Wu`?B7z)h+2c+{ z2NU?$5nPp2`PnIi5Su^g41`p~?<%ih$k!c1_dDOQXj*)cS0-PLts~EmkA8%pkvH{Tk1>53xQ@lcHC< zNCEJWbS0xTU_|~r*az*Xzc`2Dx__dpial5(dQY$5vO;#qervem4L$$^;w%H4QZ-a2 zRVCSWval}}Ccw7f-c)M2c$^=R1sT%ghzQFa?Gw>LVPPSAVE5w*%dAOk4O1L;jID|? z)%)Wdi2G5YP*oDNxV#qd8x4Yeeim8}r);QzK^b^njTICK%N)c{*$XvkXGdhxzNR;a z4a`HKOwd<&8_yZ5h6g?-tTeJ4mU*!h6!6R}-uu;kb|8O7ye9SoHGO)ss)>(M6A&f% zM3N(XO2{!{#7Hud3PtypzpJw9s$~8;Z<-n0=xx`xI?D446DT244>o-FWL1Y~&g;Mp zSl@4_C=yqu8~LU&hbFebB-ynSh$MXyB4|EKdWZ!dfE$? zVM>Oclo^#dARGO5Y_c%$MhefJ*iH5DUs{1;x02u{Xxe+)`+Gm9r!KVum4z1LD^OT* zu{ZC4S&aOWe{|yOc0CJatYEWBfVYg+1vBwY@4%_>a$BIw$)|HTNVOjv!+}8D{{*8x zE`MkQmuh@HGPHSw0@DK2-bc(X>z|fOV zi!rpAoay%8dFB^j=3|0Rso#YQ8tDS!rv|qGe*fV~M&)=w;y-+wQMm`CPw<~jf&GJ( zzy?f{++8tE%o4PhwTZJ45EAgm5kh@H*d4?W{q@x_r7Pm-VU^G2)`a@Rr%Md5oSmH! z*K|#L5&l4KO)#+R2i7+2MR1fsCn~^j%KQLEfbyrCB+*;F8j`60jg68hL2H;o>BNYF zK>j`Pdc?<@Zhv!wsz*6<8HkicTc4e&GW#FPxEG(^h^>ElVe>rOfS&zNZb;8Pt?JS9 zm3xmvPd$W-neoSj@0zC0l7`gzzNTsFgj0Ta6iLtaKGh^a`kzXIbaRA+qXjXD^}inW z%2D-6qkj{%t0!j1(uUC3oDm`Nq{q<(NvJcNQgAo8c=h7=_~pz))kln*`LRcgky!%<&)ct8*y5w; znpC2JLF!c|4lr)0IG^az2pZO3(mWdU`j!9iaAUzFjDr5d*qrxWpO7RuG85JIOtsQjjcPJSkHD7t*CFf5Sg-+BS-ugbLtt?#KA=G&*GiY4SIo-giuWwuBHp%tz>X4UbO<8l%{*Ww zRFXb1QhvDK{r`EA?;g^Pd<^up`O>FThdEBi|v7D z_7;y~U+7Ms*#ZC=BSC3#t93Fa>e!2#nvFR^su&b=VvYz{(s3+4^!dtb6T(q@qTlZF z8ZO1f%ul8Hw!KG(XvWn85!(;xK1g0`h>Fg%48j>-b*EC&n~k9Er7WHW6FLr9?chRw z<%^o9)qfi*imqu9D%QVCR5*@a%?2lQL*Ka*2nm}(Hi>J1PU9IoUYE0lOwW1duTq0; zV*=4ZYf8mNN?1Td3JWu*qw1U1`VaRtDz5;I;2*o(s0@=?p~!=qPsa`7)ljIF_hjU? z!u;{-L^`SA17I@O4Z#FE#m->RKw6vZ=f*b;-;_bk6Rd%8bA38=uw&v)397m`aGr;k zv|#OP4;|r%dFPWb&8^3n3usRUv@!CZ$lRV~F*aUVqI5AIpPg%SJ_l#G!Lv&~I* z?~w^q3rAGu8%$_{E5~h+cqS2Io?f{rAs*w)&T)i0S$L-@C&WnK#Ab#BwH?6T^HS5B z)g}&X0X~msRLMD}YX1h#fum|or}Y5C%9gQ0oqrKykAVk{@DK&rlE>|)N{r-O7m`T6 zg{Mrug{$l!>ac&`4Hbt|R!@TwHt8S@t+&r}z=d z&T}WkI>VCaOor|ZADfb#tAwZPOAg}W`Zo`MeX#Ax+T$*gJ?Dob@%=By%G1Bk7kT=# zU{8-2TAuX$zhCq1`wy2GmG5Da>_0qG4dt5Yp+CAS;Oy_e1D0YsyJdP%?8g_H6a%5p z=oZ0uwGqt4(8?e%iZI5)LC^tUY00zX?WM!{kjFwCb2;BzOIgrb^bG#io{NH#jtVD| z35VFd8|w{5TGrZt8aosG(y?S;JWj0*caKFdZ-;MYX1kBTjPmGhx# z9f;@lFatQ$1&KXgX5cWw;VwWp+%07chtm<^T`0TG`0+!6-x^_Yza50IIIud`$7I5W zEn$LpHC9{iHQ3v<+pingpVSAuv>{1dPMaI*iZLBRD8JSRcAVZeW!dCXI%R~=he~M#ubkuw8QT5wy4! z(-HJ!JK+LOWTqK(_%ozKn)%D@;} zM%m?ADv({CQd4pIIV`)3I!fCw?!3K5MO(af=j<)EYGRo!*CF0G*@yFcDzZ?=5S(RG zew67T3XF%>AtGVF6JJbZ(vcWZu)ploxTuzrYe!Uw_$ z*mcTJ!CU;)t_>c$4|n$^*oV9Aykof-?LUrfxZo;TY(yleKpImG!d!(3%oQf);lI2M zMn}#4N=GO}D}zIjEe1#Hj^HlGz9ntIU(<#u{^Fw=rL~N!m<6@Y*#qy`Gwqpt9=BB{ zlC#yfRKuO#=+FrJ{b!%%+0W4-YW!XOPwA2OHfX(X!^i7UZU@SX_)nxi%75~BQNupb zpQWH~#DCJKF{lrm(>&BnN)pV|}s^SnD%dPTv%?%#bOff^?L)KP;&|hAvJr+7em+U);txuRZm8zoESrjmdZ|50h z72lkR=NzQ||5)eKGf&%zL^f@B(4Oo+Fkb6_3buZo(z<3(dixK{k8%@GY-snTpwZgf zk(7mAPb6hIj&m04D}Pezt&yp;;BR$K^Y}A@?Syd>d#LrB^zTIWC!v3>8toxyaO{=nFxFQ-QR1PpWiGL( z#|cB#x2WwGvzteT?>5XZmC+VaM%z}SqC;j@{4Of!q|>+qbc{4fd}hIYqDyq$nn);x*Q(ijd>A zExtg~MB~@}NFj_VMsPoBDZfaPATfX3JUT;>%m`zW_=iQ=$Kq*dpv4xp?04&kM{TQN z%;T>nPX5rAgtJ_7inHx(BKMtTdpqDStmDaNP&O8d&7QabkK<+9W5ZR)R`&h>kqVEB zPMUixX-+yrNV6fe5$8eIvzjN3U?O-wFj0Qd9n;49U>~6Wc$`>1J9+8^qmpbKrSCp2 zpMgW|jNlW3vhfqfO*Mj7>hibDpnMp?OY!WV-4r{!`ZJ4XJm^Hoyt#Thn_p{piwas&&Ua%XfdysRI}&c#7pW= z}yS?>0S%)dGs)RXrftY~c7>syEQ)z*FM3M%W2AWbe~xoq^onIxlp z9fcl|=n_yGFNXU%$cyMA_1xKcuEMk9BD_c7FM}6C>3_AWGViESQ6tU^<($BYkrglC zSwm{(9DqG;9{9wpsY6oEqn=i@{o8vPGJGBmLBLe>o1xCo7Jl+=C}54kScW1dqd-SC zGE3g-X-Qk0yQaNBBoVKn&Kuj;(=8P3@E(?D5zs@w`a z8D*++@Q*GXtimJqRNZluW%e4uS$q!l!}+-TySynaNILwdXh5 z(%Uf28gHr4+G~ASWW9lno=Ip5fuH{dxWKbbsKY58e}##_m*oK{RFNsa#T`pLg|YUa6EHRf~L|ox(0; zn60=pSqYHw$OX+!d=Cz2#D=uzw4i>PA2d_|-wF}KDk_7jg|3&_LOkyxrzL7J?Taz- z35T=5=&&SsTl{FN0Vze*jN6r97N;Q^l=CIcz{nJm8(W~?EN=IH%@QZ4J-_U!V-fLPAR&P2SgWO{T+1zGt#IaPTCd3DSv|?PA04HbA~f&53=K! z=oYd?S)W6$15^zE#Y_E(IrXSR{eYqf)j+t@3@}_njDdf;_h<>uV#BwxIAVs@ShR#l4$gc zDBw?OE13UCmKI+PCaz?xO|+2MzWwcNk(CWUDp|R>DV@`;Of{ODu;6eF-st#;xolJe?=#g`tG+Q z8{i6jPYwrdG(+0nQE{aXtW%^M-5!(rsXM`4r%P*wBfqs7ivM@v{A=gkF*5z+{$pj@c4szE zk=Xo{_I~gkU`pGd>IgqkkcEGbTjnjAq1fj?*7W4#m6Mu>%718-QMnVu_8-EjGn;v{ zLIz>)J+WB_*TQ5i&U;(SfcovCCV}Goqk9YBigC|*A2u<+{M(5w>D?sX#FoMQ<)cl) zY)@%HQx3qi5B}B!$fviU9@z6Qf(q~&%CacLwNzC5Qt|eLSBw>_YmI9Qu9%MS5CR^v zwFLa+Q8pP<+VC}2j?A2oxsQnkwEr-YVqYhv7ICUmOs{2iI*QSqxr{d`@0>I6u{&@$ z#R#6M%B$I#>r^$rE-e3%^D-ltieE8d^PZXv8*Lm`Pzbkm&>l_yxmGMH0t4y8I0yDlX11r>#XoAq`ak;lt;1$v|@(Z^P@$$ zg)yxX5gE&|RSE-jU{h=Vkv2Y_qO};mx1o{5nSw)U$19nPtc~%kgKMjvaQ&W~Bgcz1 zNI7TsepoRpNm8tM#4LXEzv< zObJ*fXpJsQUGaS*L&k|GG|!jzzAnudg7Ztynw9{wOteN_fFxw_Ad~92g9rHq;tle% z6zDD=tkUVzFmzmJMvxj_#y{{6RK;jMHsSe2VqN=@1;_RK_Ubf~e7og4cD;d1zIzLL zCGZD7r1cI_7pO0pG-tJ7rWppkxB; z$pBecOnCLrb_>;x3d)|3ydp7`bvM2RQ?H2yzEX_9!x7=(PN%0y=ilFVZ0BYCOK+a4 z<(G)JJNN-)k6op!`y|}s`)D<;zz>|$Y$g zC-)pYLHsCc*Kh|_`tf6Q4?qQfsrYbTPl#`qZ`JR?^`wurL-a%RY7{O% z{NqK_RvAIDRl*rn@LAULFUiV9I3@jZ*yn$`Q`!3**pzcjX<*p<-+oO6ix4Y>Y=c{B z5n+$~v%QsmcJq#X9c zK7y@y(s_x5600>udFTNMckBV2d`F6w=8~FbpxU8mgD>DzvP(9p0h0hZfH{MpW0lx{ z!tm^ceZ^khUF z!F!`yrtV-DRP`Vs_DTlwkJ`j}s(sfP+#1>4v>FMBSZy~#+Alk_fV4C^(P0=-5$ShI z$v3P@yE*Zz!n4lH|4<96gr0@3@p<;Op09B!IfahKelUU@t*XbLU@v+1BRq>4xNA;w zi6la8pE0m$Gxn?Y&3E64PYV2mrNhU;74E+{ONSn~M+q|hU&VPi$^AdkqeB0@RE!J1 zms_=h=H;OvQ^{Apu5k|I`f2o2fOtHE;EQ{XYY=o!nF)5u_$w5}F?zN`3p!`M?yPva ziS{*d_?gzzp#b}b@egkRy*kh{9d|N&H7Xb2y{vB!^QObfN%7r{-^5DrPHQQZFu!~J ziQ~t|4o+>JR*qt^M{I-!!1?QiP?Qz7HK{1qeL+PjKHDS+7CeswvRa@eb3boHlpb%_ z0{Ad(q{++dm((H5ekn0R&aCZ`4N7x~f^qaP#9w{1u(2&bXSAfwd#v9Df^()%Hh=lSKDIb4q;GA^S5a&6E8X-+A@pwthgeP6c-&u$r**suToZN?1<8 z?dyIkyY7uM&xYFQIr$%VBR|Gd+v;c^90BLs`}t=d|9nG12&X)omCcePUKp5U-++?# z2mJ9p{&|~!-ol^a@KdZ@w^zC3WjB3*7R43BdJIz}cTI61bjl z30yzy0$k~U%MSGd`sVXbIsQO?csrASrt{BK{+Yx-x8e`<<7ixf&wj{en~Q51Gu)OE zn`KOJTZ%vFW!b#ThTV!&RgC3pTz?`f;B0R&y-CBt+C;7vmozldAiScND^-TmCtT@r zRYjGD=>((l(_}0bR;jA&NB2n#D}~tck0e;?T$<36oe{pF^uw@yJ$@qhdhi=gY#hlB z(Shx#kPH;G^VS}zbW_dx7&NR)+>sx9Wi7<}#|P-W^&= z$QT(Cn2mmsy4j$rJM=&j-`DI;c8Ahne5Snf6WG!E-X1n}Q(dKi$8u&}EF-p=C;Nwu z;LN(ZMD#V@8z+!icVBm*FQhM}&5pYnnO~bf+#0ifZxelr_vIimSv%d~J`UYkxZxgC zZnz_0$|Rr?=O&v*<$fSn41qtg!gQE>l>W$7+1Op|Lm+PW3J- z$KXdvaS-vURD+ErGhiWL&oqg0oimov{v`{6RUDRM0iJ?u?URKbOc2@)z_7LFO`chV zvzm6AI4uLb#Lr@ks76LlICVr8{1#_~=#{7w}7T^jPOkNk{I;fg*} zqVdsWz6Fb>3JS0X16$&7Oa4Z);7IxE4Kaz?}}5nBzIL z_uRgAP;odpy*OO3A&@@=ni}?_QQ7MVIt37I0S##Y$DV|UVW-s4Z9NcK!KZ)`h+~#eE zw}>y{doBV{6EFw*U8j0D%>$6Y`9=6YI~}Dtuj9MgYXPclo(ogRV=+IQeWZrSc|s}T z;I6nLMyQU~y#Q5oGH^=@5LC8C=D{oKJ%V@wLD`1$g+$bIHsOdN)b9=)X?<4@f^-mM ziGk$2h}7OmxhTMIOwB$@;qr0~;0}&20-qioCG=`Fy6yRL@m;n{%O`oV4e9U~A?#{+bTH@5}8 zaRLMyClN;$)sMHqcy1murV4tj7hJjID#&?>&~_=ugt&jHiu`2Ue}j~PZjmcI4{`-p zzl>7x(4+Ot5Fj+c}j}9R3tex$OYQ80f=8(1Lc0|vZeFiJH$UON_f!&}dT<43<3R#}bYp21yoq^)r+K|f$gUW)(o(&YeA zu^(#BCYH#kXx`CKqlZBkU-wr>7dsVt!b9pfE^-$f;l9lBw8PfB7yeFW!ij|tadZsw zpE&}Nl=grVcp8IxS!{KsHXdPhYsU@|Vbp#^vcOA}2JUMT;(Ue(p7>6iqbBB9$K~ra;DRxlFiz2Okf;6fchz`M^Wr%)R z-4(X_a{hUle_p^JJ@3Q(XfHUcSnX9U4n4L60|d0TC;UQUCJrAx+MFMC@nNQvK7(U9 zH@f`nIZ`m3Fb&BDCX204q2CwEJfvHu%tP*Y5A%?!hcFLm13+bb0%zO%`DY*he8WFq z@y{Oo!T7KX7dk|qL#gw064-SDCDeC|~H!_HLF>J5TK++Z@qh{biDe+f8hU4hytC$saI zQ*zGxRKAsZ@kkvF%jYVx)hn`!F39FX769i1M9j&% zzeZ-Q0Jj@D4OEDqB%Ct+pXf0po!zp>Pmykmr=rnQ<%zrPUy4?tz!1w*>Oj_z_NU zLAwPIvX9S0y?J9`8_6djyam;{G|~^(=>)orN@Y6vpe)M_eB-}qEdWO=V_fO9@9n|+ zFk9ste4HNrClH&6p3MpP;Y_z4epJ3+|Gm?bycbE2&Csv12}veeOTZeQ?#|^O0N3U2 z62QIgQxLl5#?5t++My=)2Xkx;6+k=m*~0!IfcHMWqx`P!pix7Wph`+F%y5w_lllp@ zm^gblGs$~{8S=QYDq&gx$^KQDfVVXb!{18%fjOy3zV`lA|AJH{`Km*1m@vQH!j|(k z&CJIA2HuC$+_Y|t*SsD31m0~m(ZaR%A*nGs5>sM(Qzvp=%3gZUir~rL)evL#(Dw`B zZ~kuJul$B%@%PQU4e>Xp{qgblIBNOt#9t_l_|x*h4E*g@7Kb9N&RzFLacB|MRB_(cvWXsRyT^JTCb2WhvWjJl5 z8;TLvlZ(S{3`OOvHsZ~rb0mV^K&`)YC>L;JLa^0-=2}FDp$e*GRW~b>`e~N)1B^>N z7#X9LGJiQ-Df4%F7LF&DI4t;w9zs!fC~}b94pr^N1=D3<#Kzskh$rvuvhf~ki)z-v z#KiX5N%k!-$1%aL1NrZ6BqlO}34W~XpV7&Q=-_(+8QxVKe}{=v91qg=(Dg<4{RoH% z(h?K~7a-gHa2%qJDf~#YIB!GQuV@}up@;%2!3;2lV7PvJDZx@D)Pd<23RtiqW|;Qo zHdY~M%Y}FfpIDW5C{QHnI zewTk!EzrR;hATE)N5uHM2J}Jc642ygo~SohPSb;A%6+c>Iv6hQ30F) zOL%!zrmz%=vE=B<9vDF-a00!KACVH~34K&Z)gmz-7fGXaYY}!^#TR)y%5J9Jz6GT{ zR<%RPk52EKWIy_nLK%MpTeE^deya__e_fGJgcaBiwobrY1z$;T+?bluQ;y!5mTL6& z?@KYKYzvDj63Ab*o;+~|4I=Pq%2c$6Gg9r(M?x*hN8npi;{_)TLVmFn!;=Pa$Hf?) zG{{?E3AZ$J%77}|(%2~jzHnQ@TObX$V|hE45S71KjqcpEmL_Uy6^t+J1Lzb?4qs9s+FxfgY}nX>T@rV?|dw$QxHiqX>21e#455n z6>sd{u9A4&S0EiMgQ^Hh5pEU{7!@r5wJ25D2@jeROej+XC>1j4tQ{>tTe&C%MaK%zLqHbDZHuIz*mFtDZH6Zyp>|3Duw{u4Z{CfMCvS<1(@o9 zAxn7!kWqklfE&{x-VNg2Sl$)jX0qZFbceXYl&B8kC*O==ag23f+R0$rQpf-~4a)1< zFF8v;ejzrJYoGIll7ZZ4Avv3pspoIa&QDry-<O)hZxY_#f_6Tq)pHWBCGtuox86 z3`D_}Nu~(4Ofq@!po-XIAZGgX0&vg_{7Iiqrka62>C?yZ4u8_8m+}sO(qHyVtzDM! zDlsYzLpD)JA8N?ETzts5z;xE#g{`Es?k;R4oppC%E9tDe3tLH-it!)~S=;Sr{&0kD zjVI6?lop3jh|u}B!E6{l3(NrM<++mCO(4h`kPJBIS0KhDPv^0+pI!YF^ z0SG4*1_fQD5gtZr74FTg##KBVyoNJEUnZRKHxTd0`{^_hIjKc}B9y({aLIpb5h`Ry ziqHUiVlS8rpI`Z#1X+(SP&4WF-cR-LAyfU1+MP z=)bQ^!dY{d{CxV)Zk+y~G*18QnEc;|aY@U637CiW*eqOO==u2wX6M)gF;Y8F81jzi zR*dRJ2)ljM`v1zilWI@I9L3t{vA%R$2f1B^wcz-9&UY~I-|PuhO-74YcJ=n+ zG{TRbdO|W_bGd3e9uemg-3VK5&?1Hb7?lHQ*8!|*{AR*Znry;kDs|!w1-Q88;Ltlg z)gE;VR+u3h>`I}3wM;C$eIUj2YT!H0+v3ZjJ#{ljCQoRptJD)3k9r}UY$Te8J^|qI z9DZ*`I7{VnRD+LCUo#NnD?i6RqK~;}{bSj)ZUi4-FT=eHUmci)`N|Esla8@z5F$NvZaX100C@k!DF!WiCARWYG{zl^gJ#8v!8swFXizGU(dg)9MrW z_baQt(`jW8H<$@_+SX?QUe zFF>ijyI^sH|3GMW-J3%7;=C_Zz(+MesGY!g9I;=Zd1tW=zLv9(qt4tUt1DKd!pby7 z3KKi`4_n}f&1laiV5aeFhwa?fNARw@t#@eT%p!2Ya#w~g9*_8sI>vw0G5%vUX?eLO|mDBZNYtwMcTelZH{0*I$-u7hK=%ODP6_URU&3f_@2U@v?9wLhX|ZSD|>4-Mefj>|v0QVk%&3`Sye~ z_}sdMlA@BLJ}lQ!dyU1%X3ieOk+^eq8}#40^R^)GNjT-2E?Dxj_StERK|>@rv5?{w z{IngxQdr2wU`l-`gXwpBNz}!t+pU&sC^|G0{CLF$U8*g7&-g6sV^T;ohok!hQ%z?S)h- zyV)kl#y5@xoSI%=0?vDe*ppx~DIV@W8p|c4R?2e8cXkn&e>@h`z5}ZdA#jZUc^-BM zX0PAvwYOlI2BtJwJ^B#d(&)*8oMzhtcc_s|6m@p=@` z;~@QeobSWcaE)s$Bus@C;YQqr_u~t!`oOCq$<3M`iH_ z)&`GCnaA4gv35D+GQNa^aQKso2MA2eNBAoAYl4sPGAs&dO2mAGoc4o$0M>yLVJU9w zP4WcmaysU*1duDkJx050K7+%s#~H=4c2y#66cFf9khqF3=qyB-)K>ehLb9%^#w5y| zx*9a-f#Es|ZWL-DdSPVMT%0hnYF?J5y@p2RTkKq@if%s`6v}D%22e!*o(Hi2oyZQd zeiKAVS0Ow5AXjo1x&)|2V-qJ`agtiY20I=ZEFPn7kBR-A60ek{|8JUs5n6h zM!_0uP(ZLjL5Y}}V9*(uk%+XVfJ)U`s@Mid5QR!031!@ljh9-yoR(VJ($?caYn6(} zauZOzfLGL3soK*$PEU<@L~XwB&$ITPnQ*c8_dVy2?~m7u%-(CS>$9HQde*a^b)y^C zAlVNHg{dEz(AvxN#Dq`7<`|CSr^ANfpFj1EE(1}?mg-0D3#VHJ{ja^1?Kz!QQV#Iu zJHi6q5ZPKBo2+|j*VttIrB7sEdRl$^xEoH3u4^^wiMMQ&eynSidZKIR=XLF@3K-V9 z+q?8k1zW05u%49yQSbw`%y;p}AH zk!5(g966w+dh>5>^b@>Gjx1*C{ZTZ5YYPg*c(NBOJ7={fqngy)o-Srs`d=HuH8zya z7h2~HD7v$>(W*o-8yEF^xgI-E!fMbZksU{*m9eVK^9+^>9A03+SZf3l>Y-0>m(A-;@V&3f6lJpMR^z4tEsF(kOs z2c{U?TWvqRe{Vn458BVFl7Q{a>A5%Cn=lu)_tJAYwpWK`J;&6p%`!D@3TsiGx2eS1 zAz*5CVrtW*c9-7$s+gMg&b=FV7|pmHS_vlGsvy3?oUg$$!nvsaGaPN+tz8gF1-bv@ z9wwRl(X;y=v)S^=A(A+x>s6MgMU&Q8oK1JR1mO!5Y`XtQRW%M%C&joP-AS7pC2cjT zEXNmb%FQ+E(SEn#!<%5QVw+oxg}rBSD8n_!DnPeHIKsaX8Q zzaf)9Kqck6!`Rfs=DKCZTWEMP)I!7c`Z4fE^+dzxgbn|+T>PVd*OpbRrMfNKvP$`f zcWGHkU0PNf@zi+`=4(acHWwN_j@evSVh?8}>q^S-zAJ$+Pqb?Lp5sj`fiO{jYYP0^ z-_)oM8b^MkOfX|*5xN%y8gm31^BjSG-8LM;-v4ZnTR%l*ox!@UiU7C$p{d$YQ<@@ey0idoLH=v8&PQ1g#6Em6 zw(g@dYFqwX676I;WOX8forhgtw7?hd)`-6tR8QfRH0G~hw+Ic;Ei29|!L1J_)2jY$l9XnKVU4y_A7w>3aDl|}@1Y>Rmod~sX8NUFuuj48{0*?v zin`|2f>O6gTZA9_YO21sYKGph6GWY!hjKMJG+&hPaCN!cJKQ@v+o-1m6`Q?mw! zR;>X>?vFLm%2I13(9~0AxAL6RcfQMLXYwbKHKprlh^Wpt4G9mGs}xt^EU_+4iiIVKjaH zZBHm`C|?jSeJ^cKkN#)-M=L7kQJ+I`o%9J%ynu;Sk4xwHABdx3^&78NE_ zDSgN?11vcovnY|lL<>BX)ynZU-c7Z--3IKIS|~={Y6%Hl+w1MRrPo=W=BsD3+^wUO z;wNx^w@Qsa{EgY)YP#Z^-yu5iaDpm2gIYYNrd;uH(f7sBy zrrivktAQ9`zt13goddMH7*3mBzLMRoZNkD`HgY0z>@=)lNiWDSA({w3InJEFG;)7KUztR<(Om7QhO$Pkp$@w;u^8{^NZX%~ zC+VwD;g~MbMa*j`M*nt4&YnN#X|8R0YbBiCt@l-tBJ&Y%h$lP?un)2&WPH~=3xLrk z^>L>@r;2{}dwJ`=yJsKKzh6F`UY2+bg&L_Yj%-)0BGjz1=k`J4UZC%}TURvGxBX+Co+S#jhDS^4(y<9y1Z*)%4mC0e9`PBfyNhc2OkgC+MaVGLNwW+ z?XDX~0@36=6qHeF+nvT2N?@k?BnP*9w~;5@DjS5;An~3zy4V5DDEJNx-d? zD_}x8WK&=yQTl_YMG|fk=Cf8vSLCgb`acT_e)YO8b1qtHsb0IH3qed|cgR4L^9u|5 z2|P54utOp6!wzTZ!L6I12MqUeR=&_07@tQE*FQsNl3#N4AQ0r{)zQO0Y3g&4gO-&b zvJiWpE31n_a;SM7av1G(0gWSvpZ_c%hkK12PJJaH2eHn@O8O`L+>;vIngxS`1jwWJ z4Ph1^^=nTvq!VbnAl>GgV(p`e;)G|JUdDdw@Q>EnZs|Y-Y;QbW;1?U_e2I{&Hu-LX z;Dbvp098m58H6Udvm*~&a^%q3mdCqYdUleh49@hfEZ0-~{(aUm>`M9k%~eJ4l~xi+ zQk_LYWoOs~qjgY85iC~m%gJNcQX#x>XW^L6x}N3aT+1hNZnPY?Mv+<~XQeX!7~}T~ z2boy8uVOigWYsr-s=9-Mo$IOS4&HM(a@!s?b^ex`UOK_RsGLciv{=qVP*Vsmfl|E< zhs~(nCg72bxC2Nz;LYuy@RFL{Gdl}!O>RrRTgQTA(Z&K&a8Y?0`tYC7pDp^cfj>@v zM&p31Wvw*Vt`|a~MQfKm>Sc{IPrtV>BaQY|)@JqRFR=X;=+9C;q*iUQU#E(N3LIM3 z4kf!yx(tr&PDyCh=1AoJ*-hE$YbTf_X2UzJlADeDkkY;ByTs@h*3@}pX6k0HB|kPD zW>qkmHJVILAonO4=QZ{yj#Yg`IQ|bZqfN2WhKOHyh63@2{cttI7@d9@^mdatruxs> ztPkv>uJgcaZ}!aQ)eh-c-$&Y<-Eg&f6Xj}vB@uc83TVE(i8H_f;RJUdsB7_5;oSY; z84J}tu;b7748eYJ`@jIv0@PZodR_JTh_>7sVH^h6JrV5|s`6(IHbhfS(Q7a@V4Qe* zP-PhJbpXq4Ar|^cM`XzeEvvEjlTh1PxXK$d!<#ZQa{ssn$B7ng)MR4<%&k4jNcew# z?cwz6R$G4vF+gAGIzk%*b8h{yQ^~pYhjeg+<3kpFQIK}n&e1Bs;`jP81eWUE{f}<_ zu~IW8cBJ1_(RWW_X*^K%A-(j?!I<^Oxdm?hA=rwisL_A6{s{9*la*dD$bKI(9o5z! zqeu{2snLheSbx}%XjE{}`a^&)_^g@q5_}{8iMPn79tPv&?X5->fNeFoqp5Jol;?X{ zu1*%)gBLot z^1^P!1wd&SVl~%l7j&DAy6Eflf*o6Vm7jAwUgcp$Ar=M8SAZ%oh07?-EZanwcHA~m z1LhvLP2Er)2Kf~KY5k!==>`dYfFYudb*_y&K_LI~_42ge;yMs&4n1B*bLiI61u#x? zxcqhj2K%CE4y>O(er`|Qfq@X5C6-*59ZAshq_xhL#iCE>6L)imvRP_C)QNevrnv-l z$)8+`OIpeb>IkZkPR$rOtSD3w;TMuTc`fEHIoWFoykd*j>Mh z|EQ>qLHx&u)}DNp#do~thxmQSonp9hd2Bq4FK$l{qt->cH}0OAXdJX?_k@mL{vpy< zq713h>0tqD#uZ36x^ESH6MwJ@cWQ>9rnUUS7jv%HhsHoY*2-!Df~b0NZ?FB2A@qos$j9#ovDT+(aAM^>r5 zRMACLX5JCo{RfVfMjuouOQ_JvvayD7L`m6z*WwrrMKX-Jjw1C`F88T-GY43G>M_Wm zIXJ(afFEo(%SI)R8BfLKoV@>YBdS}`kY?eW6nYb*f=&1P%AWxKYXYcc{V2B)+exH^ zE#~gA87H)bH_?82K03<3-Y7o*p+l;kG}zfuJpl`CZ~>JDIx^4qu&3sAgu^3@4_khI zM3mTn%!YT?%MKy)%K$dG+4-$;vWEBW~F^Pij!< zFQ^Y4wvNg~P!|NX<|-W9r9#;4Bvm-3k|owCZ(NN(Fu%5WKMH!+&+1_(Voq`T9W6?T z-x<>2ZX??BO88ioUaO3$(hI|3{mDKakT;@@nwFruy}xD+Y>Bk~JNeR15h)#`F*yIK zA6xM=nV0j*z43!I+}8Z^AKs!4QvM2+Z&2=3@7Hd28Z7Bpr4*Flr0?YVI+uEkW;cM}Y3m}&feue{kIPBQ7%v;*r#8Rb$X)3$G zu=$b4nPxpVKR>6IT$6jxPg{N~JKT^OXJ_UC^aB|;wKmOco?piOFh~jGr1G=refRZO zagj!PEA8MvxpOs;j9J6`RvnM_uw!v#oA3{Pl0gS4sJ15Rtf2#9j%pD@yV!Ry8|MW2}lIh2zk)N#1JfJaj zsUjH6(;Cb^su@i+dkuz~(&NPf0>I}W15gl(jp~l(#5te}DDUD!K|MHVW;+ugm^OB^ z%-8>oov&09P%9yGS$g&U-7nbx#cz_HI2B{%!C4h!vgi~RYt)WZU25<51>TeGa&(c@ zTMO{nvo+rq5EF6HE=L({bx+5iNls>RsG5NkU9C(l)#-M_9K66(hd*_zIk!krn4u;% zH!E5HcvNxyW1qyIP2ZHOEa;d?O7w~4e3!r~S2{ZptvlhI(y~<@Co*TiD-}4a^>ur< z?r}_2oxwpe;kuFV2G@C~u^1U~cazzaTC@<7&$rVr?yHbaB%jk|)|~|vap$_0XUXhS zfZxq^S30HJ#*)0&ISqaA0}WZ89ya8qkL9mM43ey`x{L$;#2O5Sp%t9dQ-TiQRuj*; zw;4##Wd)K%(uS4@{2Ah@qpGeyrC>sGK;N^I3;LE!NY3nA)>3_m^{DRzZ(3hAt6%ls ze^gyMIhLGXJU-djmmPlF`b>CJCMUd$I6b;C;awI@c)b!;uSZ%WcC&U~U?iBtlfHQ$ zzZkAT*7r2~`uw>LAjQDX9Vhi+k_C;#78(;}{W0HKHmAy{9Vm5>2q#b@SM_*1;G-N% zKBDEe8*eb>*>PV~KOq_a%Pyw8fhiB-JKD@YZ*v#8Tc(PN(*%V(;817xw~6v@m@bLx z9cocsZg4(gw+cnfvEUvzM?_WDKs_R_x!sbnUN7CB+_H#dp{Dd?Eesuw#4Ffp>0mV# zLZstU)Z5FO_JJVJrMe)pDaSYQ2OKQPIxz*wfx zkj%2^F;Vqw3`hN9e$&6CW^I={t`Tw($SNBiV%A$gA>Po1J*ttG>id@pz5A(gD-Pcf z6C#*Fd*(Q#s+#mqBFbm5Ke&&K?29Q^cJy6FJ%h@0JSPBAENP>{_BWLn2HtyTCMS8j z#;5vv(bU9GA~$m;C=@{x$>V(#xzXDJ0tUe;P{t{_R&#r#n)zjjvE9M@oACrR|i0bCU7({yC|G*AtIqSM6q| zM7aDW%+f-_vwNWYU}QZvUT2PBJ8ON1Ka(yR7IR!1VUnMPgIMc3B8%TssliXhQ+*^7=cl8FOz`N>GM9{$!nDN2*f9^aWy6$7-+Ya{L z@mVhVK8@fH7*9Th|Nn^+O@Zt#S_>1_~>|2Ej~|4o1X%AfX}(J8mNDWNl{ zZmFzJKl{1H5UzuA`<$Z4L2QkXNBEom_?>@Ze_c_rlGfe&=;QM2`e+;6q-H6*7KIL~ zKJUbg(8l4?Nfl$*5G)g20_Q=dPBoYFs%bE=drJq|tJ9*iIMU~q>c?Ba4(Y~rVnX)i z(GQzfsjyHB8_Bm0{cdhn{rU$$PkDK$E;snnWe&eBW6Oj3DZsUqqB0nX4XKw2g7Sbg zs)dN=FQ-2`N)M{IJTKSqmnGe~2UMt}ypFnE@Z1dRygRJYSj&bo)h5c&Dk1p<;bBER zYCMLifzqnhB+=`MgCAw%Xkp3J8trjEe?gNYsr}Kj*NL%bNq8+$))XyHe$c_*YLcH zVT+&G-RNykF&a+DE?gwm_`cN8l;TcED5S%n)vhPb1b`hOmGtL!--1Yg92v3nxYgKjv76LZ7aWc3V&H z5>y2$AzGrz-BQMr&-+IV$-{c@HbeeYQOoT^B<*MVyFZmDfI~=h1s8agOZ<**W>Td? zL>B*dGz6UpRO_IGVQ)GT$F&CR!6&DPLUps0V5 zD&7+@5gNiP|)-Y&8%npN^y9>;Q=nG|FLAH`be?UU$1`X^(-^`!gdmU3{ z_r_4{L8~ahJa`!Nqzd3#nfiDNAtJ(dCtcWV4P$}msT`g=yIdq>%3mh{a3~`5bd@{w z)IAkaLtv1uaxtGMt&5lM5?`qLD3UtTFyB=c^$x~*dY$tHP8IFuN(29g-JG>yy5%d5 z27RLwc^-Bcho87g;KoVF_!p8_zl_Qnl8)kzsAF}QZI{ugBhYE)D9vB+5-KR)Kqx@J zmjJ(PoX)$9@-GnSQB)g2Ym9o2nX&8RC%PZb?TZ6dp%=l;dT zZcSmu0HbB6dzPIZs~YAn-K6SMMSWky=JJCA-5gfNf!@G{FzGIPvq{JA68X14+7ZV7 zn{712w=VIk9&i|-;pMb8p_dtF@D$Ud<3^5PGD9_>W$HL!5q^a*>HRFM$iJ8hoyw*> z@EWOXCoR~Y%66(c)!4@=Xj|{kDrlyVg@j}4DB-=-A8B={{Z25M*`4F{Sa3ov6dDC? zG^K##Wgt>Kd83p9&i~C95LnGS-64ZF@{PiKe*$fXsfpz1MDje0cMs}QqV0`H>yn5n zaq`k;Pym293_ht=yG|F3%SBFNz1wP@>0MKKn^&nnHTuJTW}kV}^`}99=0$(s9Q;!o z^8|Z<-3+4oZ$$-Isx+*1khi17Zn>9LDY&wLs{*ge8D(q$CB{!HERLPZVguZJ{KcnYRL`BO!= zKz8w}b&W+2lHbO&mJiBMV!zkfGM}T~XR^O2K^bY43q-8*kwn$sA}tmIu;tTk3%}U< zaufG25SEN$ESS&W|H9&0iQEE<{E)dkt{rbUb=D*N>g}N9SH5A3|C!=G8k4l|W(v`_ z-Sg-hpjfL{03=XI``W^LEcvIH!Ztjv6PITS6|LXoj?(0WRNWN?3ZoFAlho{l2c4$Uh_(- zXr4C`jy_>NF!ecA^p%@olI;Zw#oq{w@fdWq;+3|| z#vA&Q_Nr~gb6{I!$)LjohGqd8_BK&rh!e!jO>k1LjNSU6ym;p-b-=Cf)Zy&Ruf9L3kcZzpqZ%m<*2t1Tw&7`|1~-f`^lG<-j}^I;BNI|HmT~HW=nE1 z61~EMqWXo3tmjoPI3t{BC&R!A8>SYdMP`j~CrLCsalT|t&;e<|Plb(VyGY%x@Xc<+ ziZ<1TG*-EOo|84n70ea2eMx$PD1-4n^~_MX*#`f3X#>Ha!qy}@lnqswc#6Xh*ON}+7QqdXv~?l%n4`e8KcZ+JeYbrC>;ea&E*e2E$qZW9Yun2~SF zvm==8Q1o;@$g*d)JT56PTi#=7PveD#m(pKxXK6Jd`TPbw!Cx{>Uf@LL(j{U=^PmfwR{|Q>RZ&PFnq5vT^k; zo>xax3$fO52L=*Q9rYq(y>p9++!}b4%PRom|2DoQh+e#L5KM+Ufyu;6b4t$7Z!U5eb?E~l~Gfz<|L`h?A>J@<+9eya#;uIm7Y}wMU44W zz2Zo=nDUqu1KyM8{JD6W+28t40o8(z1%?IV9w37z4Mc!{EJWp3FHqGoe6)%th-r-BMPjlP8(Gi(pGRim@@y>ue^qH4ayZ72M^c+OjRlYAisnv~X&i~~ zYkAkmR1flhmOyY&-0S1N@f&AWa%M>e{mf&~?cd+q$~nEWEgN1DsEk&>*+v~yiw?@* zb9?D04k-4S?&@1GXfZAubl}hm92&}%#s_Xm)>Dn1_~Sw%Hq?hgK?Bvm@M(=KIrShZ zFoovnk9OX8g|r~2{jkm3z04%Au7(-ZQhiH<#?@zn7w=x~4`F111$BI~t~=m%@-|SB z0=){8mD66FuE>Q%drDqSi@+;|TlztI%KMlBS+w>XzSg-Kfem7yQ7^g6!0dLOfaURz zLr!<8e;8?gnQiYGS@|G=L=yPMAYL|PxWviP329X#javO!;TewV*RT-Gd0wGk-vnlk_$tuQkx-0`dOaDnj zNEKc981wkj+io74l@`pKfam6|znXFLCS+mWu3hQoO|QA-ssqLbrqIY=gLW&{03IW> zst`Pu<-sA8sb6~p2%PklV2R+i{FN_Qxz2+&&`LKk^hui-`uDF8GV~eeP1@Aq_oq7n zHUOSY9ReRA5BHdP86%T#$5PXZu%GUj!$BHnz~MlR8I|6Gvv1!>FYcNot+p%LSe0f$ zDrQ{LcZ52!m*_pa5>553i4NWnAG{V_oehCqXGD+LhU(r8K+mOWvk z7FTNI52)0?>^#+ECAwCFwcHHa*`BIl05mt2d?!8_lM+4M?qK&1V8@QwfJ$I@8kG{W zGLDN>gib1$8@msVP?y?%gh<5dqKlYc+3NL+Ruy5L!GD#w0KR2m%?hJ@}En9ffodGktUKr4ME3)Rai8;t;4@Md##192nJ)>Sadc+y%AZw*MK4(51=ZVec36^~YDXHXpYUQH)({_tnN4<86%pjxw4 z1+|MOs|a#U3cNxFm;!Gh15AORRUQQQjI>@W2I6@EJOn8M^aBW=r+C$)3P!axr2eX3 zahPMoxm}>3f-TiQ{&oljmGdiCJ8T}S_7w#!LRO%mf~smvIJ-KmJ{mswW;sESEM z$ezsDNfx(qxFaG2ZRh#1yNl?%!E)kx5T|NyfahJvP|JNY@wsg0L;_d{Cl-3 zC15w$$kuo8&~7HvwbsS;h+kI0Lgh{jx;vweVxdGX?u%Ui3uS_5Sq4<54*DYtkQLVT zNqlQp9(*$CR+M_2lgUi~Yun|U8EK8#XH1uTLsIYjmaIzaB^}uI<6EXkItOk__mH7^ zUK#Q!(ssQv17)>mt}=?hnn;}so1KR9j8-O!1u`Mk*Y``lGt4P~-DOuZmbr~&O!Xvw!HAjpcHRgy&+gH>GgDInQ43}8K6P4JmPHMnu39ozH z8-zHTGe)Z749iM%O0sJFlkJ_E9a$nV^czAsh`TCT+|jbb2$h{%eH5tIB@LT@bCAl_?*;?J&-gj&6nCQb^U5|!ErhC{CiP}xmxMEo!PNBpi0(&6XK&~P@oCgU^bCaFs@{t?dqPsjUX$-eJF zax-g_liouq>-?rV*qab;0+b=ZfS5PwJyfzCe#>%o)FsD~qvbsvOD=e?IF`DqTl#D{ zgYT=)>0$a(_0*LIYk?ACyZ`*p*cIQdKacCrX8l>uAJ#8x^nAbm+@n8t@h8>-DRkn4 z@v-7lJRZ4T5oQwJkg?v?Xppn%-m7?gEWT9!{fVkSH4$nQ)(?8xTHny(J{yjL7eEb9SFch>-FS)C70xdp z93tm8o)W?(Urhh;RsGfluI4$Hi<+hQQ}`q85T?Guw3wankWb`(zNQ~|WxqZa@;|T7 z`d7SOo%OF6WPTNxX8Dz$#bkSDy=}jk{p=S*w|L9c_SnWeh#@NNb52EHA*K##(L+M)UL}E z)waBTG?Jm;*i*4JRS=dKt+dpiF4uxq1_ugOJr`+PPj?b>&Hoh-I4w;a=PlUb6Gm@G zN3`k%l@d^p#F z3b^N_Y6KjC5-KWeeqvQG%sEGJ_pL~P-oSn*?>gY3rRGNr;pB%AZcm==n6f^Gv>+{C zg=4S`S%f+92klsCDA|6U;|V)_@xkeM^3BBHPou$>L~Pxs_&q%r@0NjiZ2M1JQ^b>h z^}pFGV3XDmjEsRG)r`blWAb5p_(HJ`yYjXJe(EILxZ50KP)fiU63Oz!d~0`_VRfGuE407*|A(LkJ#6+7{Bn zC?WA~FO5xptj)Co$rg9)$(h(tw*wQKp2}PB_aRF`)3-zlJXMvx?==)OP3Cogy}qf} z7!3&JjbEG|^ZHgqH}fhPGWG%h-$=--tBd^ym&sB#T8H9AuhGq8ij^sIAic5s*L5U4 z3#qZmSJS%)1WuCSU;1@>5yXZ=76z_1*~-IRaTg`Fe1;bTx&V^vGwVcleEo?2>Vhi?R7FNv!LP7*M^MU% z(TCjK*{PzH+lLkSukYlV)0#@Q$AUYxu@}22fo88d_Ix1Jghro}W@0KPaA@4hlQe1XMjhF5#ZIp2N@(U-#x}ZdmL9oeO$N z+X!$u(_^e?72(fqVXPmZr|(SDwDw7eQ~2HKr&)yNqj&+#7~v_IV=>r}p)w19RHX<@ zNryUqg#rm+Ul#fg$$#w9Zhy6g=Pv+ql%6k)e+ZT17_0?q`N7@#sLhH`8d{cMY=D0Sd=v~bDQp3WbFz0DL z%z38YfqcM!82tNBdJcacDg0~sUL}u1c$6^MV!wA)hxM|BK7CcE4Hw%?cnGPLVt%02FDoRZXfWYw9WdDi8T%(;=~z(FIM# zwa$MaB30o)^0$zmXUcbPI*lnm@9Ub@nJUj3gYwRo0Y#|gw1Os>Eqzz#$9HXC^1t;K z@K=+$mON^_60gXnW2t@k)8PuxJ(*)is7x#s-?vmDp*dMS|6oiJD~dE zYpq==+^-^JuV00b{dSF$eJaSV5};NwThcu-SzHByhpV-?2`lz`?nk*v63-FUDW$LG8EZ|vjT<%x7^Wr$ zXJkN>3uF8kjKJ5qrnrBe``PZ69dWZAKY7OASRfZ`nz1RD!Ps4#p)x`fWf(6As{I~nzq184cVlxl);@_QdyCEE*~Q*M(owH}PdZd{hkhOk9Kv8d%0