From c1b532c12480c69fb77686267bd7f47cce562bab Mon Sep 17 00:00:00 2001 From: Kyle Paulsen Date: Tue, 13 Apr 2021 00:19:42 -0700 Subject: [PATCH] Add player ping icon. Also setting up for other icons. --- WebMap/MapDataServer.cs | 8 ++- WebMap/WebMap.cs | 68 +++++++++++++++++++----- WebMap/WebMap.csproj | 3 ++ WebMap/package.json | 3 +- WebMap/web-src/index.js | 27 +++++++++- WebMap/web-src/map.js | 83 +++++++++++++++++++++++------ WebMap/web-src/players.js | 102 ++++++++++++------------------------ WebMap/web-src/websocket.js | 14 ++++- WebMap/web/mapIcons.png | Bin 0 -> 40977 bytes WebMap/web/playerIcon.png | Bin 3609 -> 0 bytes WebMap/web/style.css | 60 ++++++++++++++++++--- 11 files changed, 261 insertions(+), 107 deletions(-) create mode 100644 WebMap/web/mapIcons.png delete mode 100644 WebMap/web/playerIcon.png diff --git a/WebMap/MapDataServer.cs b/WebMap/MapDataServer.cs index 75ca5d3..7b42d80 100644 --- a/WebMap/MapDataServer.cs +++ b/WebMap/MapDataServer.cs @@ -33,7 +33,7 @@ public class MapDataServer { private HttpServer httpServer; private string publicRoot; private Dictionary fileCache; - private Timer broadcastTimer; + private System.Threading.Timer broadcastTimer; private WebSocketServiceHost webSocketHandler; public byte[] mapImageData; @@ -54,7 +54,7 @@ public MapDataServer() { webSocketHandler = httpServer.WebSocketServices["/"]; - broadcastTimer = new Timer((e) => { + broadcastTimer = new System.Threading.Timer((e) => { var dataString = ""; players.ForEach(player => { var zdoData = ZDOMan.instance.GetZDO(player.m_characterID); @@ -172,5 +172,9 @@ public void ListenAsync() { Debug.Log("!!! HTTP Server Failed To Start !!!"); } } + + public void BroadcastPing(long id, string name, Vector3 position) { + webSocketHandler.Sessions.Broadcast($"ping\n{id}\n{name}\n{position.x},{position.z}"); + } } } diff --git a/WebMap/WebMap.cs b/WebMap/WebMap.cs index 8062c3e..b2252f9 100644 --- a/WebMap/WebMap.cs +++ b/WebMap/WebMap.cs @@ -6,6 +6,7 @@ using BepInEx; using UnityEngine; using HarmonyLib; +using static ZRoutedRpc; namespace WebMap { //This attribute is required, and lists metadata for your plugin. @@ -91,18 +92,23 @@ public void UpdateFogTexture() { mapDataServer.players.ForEach(player => { if (player.m_publicRefPos) { - var zdoData = ZDOMan.instance.GetZDO(player.m_characterID); - var pos = zdoData.GetPosition(); - var pixelX = Mathf.RoundToInt(pos.x / PIXEL_SIZE + halfTextureSize); - var pixelY = Mathf.RoundToInt(pos.z / PIXEL_SIZE + halfTextureSize); - for (var y = pixelY - pixelExploreRadius; y <= pixelY + pixelExploreRadius; y++) { - for (var x = pixelX - pixelExploreRadius; x <= pixelX + pixelExploreRadius; x++) { - if (y >= 0 && x >= 0 && y < TEXTURE_SIZE && x < TEXTURE_SIZE) { - var xDiff = pixelX - x; - var yDiff = pixelY - y; - var currentExploreRadiusSquared = xDiff * xDiff + yDiff * yDiff; - if (currentExploreRadiusSquared < pixelExploreRadiusSquared) { - mapDataServer.fogTexture.SetPixel(x, y, Color.white); + ZDO zdoData = null; + try { + zdoData = ZDOMan.instance.GetZDO(player.m_characterID); + } catch {} + if (zdoData != null) { + var pos = zdoData.GetPosition(); + var pixelX = Mathf.RoundToInt(pos.x / PIXEL_SIZE + halfTextureSize); + var pixelY = Mathf.RoundToInt(pos.z / PIXEL_SIZE + halfTextureSize); + for (var y = pixelY - pixelExploreRadius; y <= pixelY + pixelExploreRadius; y++) { + for (var x = pixelX - pixelExploreRadius; x <= pixelX + pixelExploreRadius; x++) { + if (y >= 0 && x >= 0 && y < TEXTURE_SIZE && x < TEXTURE_SIZE) { + var xDiff = pixelX - x; + var yDiff = pixelY - y; + var currentExploreRadiusSquared = xDiff * xDiff + yDiff * yDiff; + if (currentExploreRadiusSquared < pixelExploreRadiusSquared) { + mapDataServer.fogTexture.SetPixel(x, y, Color.white); + } } } } @@ -293,5 +299,43 @@ static void Postfix(List ___m_peers) { mapDataServer.players = ___m_peers; } } + + private static readonly int sayMethodHash = "Say".GetStableHashCode(); + private static readonly int chatMessageMethodHash = "ChatMessage".GetStableHashCode(); + + [HarmonyPatch(typeof (ZRoutedRpc), "HandleRoutedRPC")] + private class ZRoutedRpcPatch { + static void Prefix(RoutedRPCData data) { + if (data?.m_methodHash == sayMethodHash) { + try { + ZPackage package = new ZPackage(data.m_parameters.GetArray()); + int messageType = package.ReadInt(); + string userName = package.ReadString(); + string message = package.ReadString(); + message = (message == null ? "" : message).Trim(); + + Debug.Log("SAY!!! " + messageType + " | " + userName + " | " + message); + } catch (Exception e) { + Debug.Log("Failed processing RoutedRPCData" + e); + } + } else if (data?.m_methodHash == chatMessageMethodHash) { + try { + ZPackage package = new ZPackage(data.m_parameters.GetArray()); + Vector3 pos = package.ReadVector3(); + int messageType = package.ReadInt(); + string userName = package.ReadString(); + // string message = package.ReadString(); + // message = (message == null ? "" : message).Trim(); + + if (messageType == 3) { + mapDataServer.BroadcastPing(data.m_senderPeerID, userName, pos); + } + // Debug.Log("CHAT!!! " + pos + " | " + messageType + " | " + userName + " | " + message); + } catch (Exception e) { + Debug.Log("Failed processing RoutedRPCData" + e); + } + } + } + } } } diff --git a/WebMap/WebMap.csproj b/WebMap/WebMap.csproj index fac19ab..07874f1 100644 --- a/WebMap/WebMap.csproj +++ b/WebMap/WebMap.csproj @@ -32,6 +32,9 @@ ..\libs\assembly_valheim.dll + + ..\libs\assembly_utils.dll + ..\libs\BepInEx.dll diff --git a/WebMap/package.json b/WebMap/package.json index 9aa6c8b..458687f 100644 --- a/WebMap/package.json +++ b/WebMap/package.json @@ -3,7 +3,8 @@ "version": "1.0.0", "description": "A Valheim map viewer for the browser", "scripts": { - "build": "webpack ./web-src/index.js -o ./web --mode production" + "build": "webpack ./web-src/index.js -o ./web --mode development", + "build-prod": "webpack ./web-src/index.js -o ./web --mode production" }, "author": "Kyle Paulsen ", "license": "ISC", diff --git a/WebMap/web-src/index.js b/WebMap/web-src/index.js index b5b88a3..99937c1 100644 --- a/WebMap/web-src/index.js +++ b/WebMap/web-src/index.js @@ -19,7 +19,7 @@ const fetchFog = () => new Promise((res) => { const setup = async () => { websocket.init(); - players.init({ canvas: map.canvas }); + players.init(); await Promise.all([ fetchMap(), @@ -30,6 +30,31 @@ const setup = async () => { mapImage, fogImage }); + + const pings = {}; + websocket.addActionListener('ping', (ping) => { + let mapIcon = pings[ping.playerId]; + if (!mapIcon) { + mapIcon = { ...ping }; + mapIcon.type = 'ping'; + mapIcon.text = ping.name; + map.addIcon(mapIcon, false); + pings[ping.playerId] = mapIcon; + } + mapIcon.x = ping.x; + mapIcon.y = ping.y; + map.updateIcons(); + + clearTimeout(mapIcon.timeoutId); + mapIcon.timeoutId = setTimeout(() => { + delete pings[ping.playerId]; + map.removeIcon(mapIcon); + }, 8000); + }); + + window.addEventListener('resize', () => { + map.update(); + }); }; setup(); diff --git a/WebMap/web-src/map.js b/WebMap/web-src/map.js index 52d1fd8..c767d2e 100644 --- a/WebMap/web-src/map.js +++ b/WebMap/web-src/map.js @@ -1,7 +1,5 @@ import ui from './ui'; import constants from "./constants"; -import playerManager from "./players"; -import websocket from "./websocket"; import onPointers from "./onPointers"; const { canvas } = ui; @@ -12,6 +10,10 @@ const exploreRadius = constants.EXPLORE_RADIUS; const pixelSize = constants.PIXEL_SIZE; const coordOffset = constants.COORD_OFFSET; +// preload map icons. +const mapIconImage = document.createElement('img'); +mapIconImage.src = 'mapIcons.png'; + canvas.width = width; canvas.height = height; const ctx = canvas.getContext('2d'); @@ -30,24 +32,72 @@ fogCanvasCtx.fillStyle = '#ffffff'; let currentZoom = 100; -const updateFog = () => { - const radius = exploreRadius / pixelSize; - playerManager.players.forEach(player => { - const x = player.x / pixelSize + coordOffset; - const y = height - (player.y / pixelSize + coordOffset); - fogCanvasCtx.beginPath(); - fogCanvasCtx.arc(x, y, radius, 0, 2 * Math.PI, false); - fogCanvasCtx.fill(); +const mapIcons = []; + +const createIconEl = (iconObj) => { + const iconEl = document.createElement('div'); + iconEl.id = iconObj.id; + iconEl.className = `mapIcon ${iconObj.type}`; + const iconTextEl = document.createElement('div'); + iconTextEl.textContent = iconObj.text; + iconEl.appendChild(iconTextEl); + return iconEl; +}; + +const updateIcons = () => { + const canvasOffsetScale = canvas.offsetWidth / width; + + mapIcons.forEach(iconObj => { + let iconElement = document.getElementById(iconObj.id); + if (!iconElement) { + iconElement = createIconEl(iconObj); + document.body.appendChild(iconElement); + } + const adjustX = (iconElement.offsetWidth / 2); + const adjustY = (iconElement.offsetHeight / 2); + const imgX = iconObj.x / pixelSize + coordOffset; + const imgY = height - (iconObj.y / pixelSize + coordOffset); + + iconElement.style.left = (imgX * canvasOffsetScale + canvas.offsetLeft) - adjustX + 'px'; + iconElement.style.top = (imgY * canvasOffsetScale + canvas.offsetTop) - adjustY + 'px'; }); }; +const addIcon = (iconObj, update = true) => { + if (!iconObj.id) { + iconObj.id = `id_${Date.now()}_${Math.random()}`; + } + mapIcons.push(iconObj); + if (update) { + updateIcons(); + } +}; + +const removeIcon = (iconObj) => { + mapIcons.splice(mapIcons.indexOf(iconObj), 1); + const iconElement = document.getElementById(iconObj.id); + if (iconElement) { + iconElement.remove(); + } +}; + +const explore = (mapX, mapY) => { + const radius = exploreRadius / pixelSize; + const x = mapX / pixelSize + coordOffset; + const y = height - (mapY / pixelSize + coordOffset); + fogCanvasCtx.beginPath(); + fogCanvasCtx.arc(x, y, radius, 0, 2 * Math.PI, false); + fogCanvasCtx.fill(); +}; + const redrawMap = () => { ctx.clearRect(0, 0, width, height); ctx.globalCompositeOperation = 'source-over'; ctx.drawImage(mapImage, 0, 0); ctx.globalCompositeOperation = 'multiply'; - updateFog(); ctx.drawImage(fogCanvas, 0, 0); + + updateIcons(); }; const setZoom = function(zoomP) { @@ -66,8 +116,6 @@ const init = (options) => { redrawMap(); - websocket.addActionListener('players', redrawMap); - const zoomChange = (e, mult = 1) => { const oldZoom = currentZoom; @@ -84,7 +132,7 @@ const init = (options) => { canvas.style.left = zoomRatio * (canvas.offsetLeft - e.clientX) + e.clientX + 'px'; canvas.style.top = zoomRatio * (canvas.offsetTop - e.clientY) + e.clientY + 'px'; - playerManager.redrawPlayers(); + updateIcons(); }; window.addEventListener('wheel', zoomChange); @@ -107,7 +155,7 @@ const init = (options) => { const e = pointers[0].event; canvas.style.left = canvasPreDragPos.x + (e.clientX - pointers[0].downEvent.clientX) + 'px'; canvas.style.top = canvasPreDragPos.y + (e.clientY - pointers[0].downEvent.clientY) + 'px'; - playerManager.redrawPlayers(); + updateIcons(); } else if (pointers.length === 2) { const x1 = pointers[0].event.clientX; const y1 = pointers[0].event.clientY; @@ -137,6 +185,11 @@ const init = (options) => { export default { init, + addIcon, + removeIcon, + explore, + update: redrawMap, + updateIcons, canvas }; diff --git a/WebMap/web-src/players.js b/WebMap/web-src/players.js index d71754b..b4ebdde 100644 --- a/WebMap/web-src/players.js +++ b/WebMap/web-src/players.js @@ -1,79 +1,43 @@ -import constants from "./constants"; -import ui from "./ui"; import websocket from "./websocket"; +import map from "./map"; -const width = constants.CANVAS_WIDTH; -const height = constants.CANVAS_HEIGHT; -const pixelSize = constants.PIXEL_SIZE; -const coordOffset = constants.COORD_OFFSET; +const playerMapIcons = {}; -// [{id: "2577382164", name: "playerName", x: -429.2752, y: -397.5973}]; -let playerData = []; -let canvas; -let removePlayersTimeout; - -const createPlayerIcon = (player) => { - const playerIcon = ui.player.cloneNode(true); - playerIcon.style.display = 'flex'; - playerIcon.id = player.id; - playerIcon.dataset.id = undefined; - playerIcon.querySelector('.playerName').textContent = player.name; - return playerIcon; -}; - -const removePlayers = () => { - document.querySelectorAll('.playerIcon').forEach(icon => { - if (icon.id !== 'playerTemplate') { - icon.remove(); - } - }); - playerData = []; -}; - -const updatePlayers = () => { - const canvasOffsetScale = canvas.offsetWidth / width; - const idMap = {}; - playerData.forEach(player => { - if (Number.isNaN(player.x)) { - // dont draw hidden players. - return; - } - idMap[player.id] = true; - let playerIcon = document.getElementById(player.id); - if (!playerIcon) { - playerIcon = createPlayerIcon(player); - document.body.appendChild(playerIcon); - } - const adjustX = (playerIcon.offsetWidth / 2); - const adjustY = (playerIcon.offsetHeight / 2); - const imgX = player.x / pixelSize + coordOffset; - const imgY = height - (player.y / pixelSize + coordOffset); - - playerIcon.style.left = (imgX * canvasOffsetScale + canvas.offsetLeft) - adjustX + 'px'; - playerIcon.style.top = (imgY * canvasOffsetScale + canvas.offsetTop) - adjustY + 'px'; - }); - document.querySelectorAll('.playerIcon').forEach(icon => { - if (!idMap[icon.id] && icon.id !== 'playerTemplate') { - // clean up hidden or disconnected players. - icon.remove(); - } +const init = () => { + websocket.addActionListener('players', (players) => { + players.forEach((player) => { + let playerMapIcon = playerMapIcons[player.id]; + if (!playerMapIcon) { + playerMapIcon = { ...player, type: 'player', text: player.name }; + map.addIcon(playerMapIcon); + playerMapIcons[player.id] = playerMapIcon; + } + playerMapIcon.lastUpdate = Date.now(); + playerMapIcon.x = player.x; + playerMapIcon.y = player.y; + map.explore(player.x, player.y); + }); }); - clearTimeout(removePlayersTimeout); - removePlayersTimeout = setTimeout(removePlayers, 5000); -}; -const init = (options) => { - canvas = options.canvas; - websocket.addActionListener('players', (players) => { - playerData = players; - updatePlayers(); + setInterval(() => { + // clean up disconnected players. + const now = Date.now(); + Object.keys(playerMapIcons).forEach((key) => { + const playerMapIcon = playerMapIcons[key]; + if (now - playerMapIcon.lastUpdate > 5000) { + map.removeIcon(playerMapIcon); + delete playerMapIcons[key]; + } + }); + }, 2000); + + map.addIcon({ + type: 'start', + x: 0, + y: 0 }); }; export default { - init, - get players() { - return playerData; - }, - redrawPlayers: updatePlayers + init }; diff --git a/WebMap/web-src/websocket.js b/WebMap/web-src/websocket.js index 8e9b32a..6de1437 100644 --- a/WebMap/web-src/websocket.js +++ b/WebMap/web-src/websocket.js @@ -1,4 +1,4 @@ -const actionListeners = {}; +const actionListeners = { players: [], ping: [] }; const addActionListener = (type, func) => { const listeners = actionListeners[type] || []; @@ -32,6 +32,18 @@ const actions = { actionListeners.players.forEach(func => { func(playerData); }); + }, + ping: (lines) => { + const xy = lines[2].split(','); + const ping = { + playerId: lines[0], + name: lines[1], + x: parseFloat(xy[0]), + y: parseFloat(xy[1]) + }; + actionListeners.ping.forEach(func => { + func(ping); + }); } }; diff --git a/WebMap/web/mapIcons.png b/WebMap/web/mapIcons.png new file mode 100644 index 0000000000000000000000000000000000000000..babbcdf453e0a559831ea82f5eeca86307ec60a6 GIT binary patch literal 40977 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Œ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 Xxdbx8&EuzCCIntuC|x8$!z$!|uSoRE literal 0 HcmV?d00001 diff --git a/WebMap/web/playerIcon.png b/WebMap/web/playerIcon.png deleted file mode 100644 index 2398ba20763733273f2123569980bbf4f31433a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3609 zcmV+!4(9QRP)EX>4Tx04R}tkv&MmKp2MKrWLDH6zm}4kfAzR5EXHhDi*;)X)CnqU~=gnG-*gu zTpR`0f`dPcRR>vuLz)rW)K4sGxbDzF$2%>bq^ok@1i`*yYA1?r{qlr_(bA4rW+RV2Jy_M zrE}gV4zrS^5T6r|8+1Y9N3P2*zi}=)Ebz>*kx9)Hhl#~v2g@DIN`^{2O&n2Fjq-)8 z%L?Z$&T6H`TKD8H4CS?zG}md3AdV#@kc0>sHIz|-g(&SBDJD{M9`o=IJN_iOWO9|k z$gzMbR7j2={11Nj)+|g-x=EoJ(Dh>5AEQ9`F3_yo_V=-EH%|cnGjOG~{nZ9A`$>Ae ztwoN2{%zpmx~<83z~v4w^rTCMpV2qvfWcd!cg^iv>l~*KK!$p?d;=UD z0%JwWUiWx+u(NOf*0lQf1OKRUd31CCxBvhE24YJ`L;wH)0002_L%V+f000SaNLh0L z01m?d01m?e$8V@)000aqNklNB|KiNJZK(P!QBQ zz=)+3Xu+W>Vy&ep{i9UTj$@^fG9n{2L#r^8DwLvvj;2Th5wY?{BF{h`B#{s{?`(GO zz5QdqHOpoRyU8vx)o@Krf&#kRjg_W!QyCnh@X$ zPzjutaZ-rl5+X$mOktkS1|$LffNbDaU;vOY8gs@ySdvF!w)eqcvY;ppX!==HcQLNk zw`r?sL@x)v1P%g+fhwR8XqD}9Q%ismNCyT1BY_b>_B~h!E+Z;+5*ABW4?EGxr?vGN zn#(Vtl>nau`+-v6E1*dvCaho#<6KF??K@-)e}&lLYluy`1*7r$qNp$yvw0!*q>E^2 z$8g7rM7aQ`NP+8SC4e314U7TC0k>@@Vd#A9QK3#0g`&*DW^Y7K+=t65QrZYKi@s2A zHUbz$!w&`S0!D5ke&}p$ww_FSH&*Le)R?2VH8GJ_gb;1v)CYzzDbh4ic-c#d%KjNP zdpH)ihS-F33#}RBjdmSb<~_&$Roo#zw+X`3crEc~2r> z3Def?F##0eMzZLD*gG+si2#hp66NDgTW%H!P{jPj0WsMaW1_;e_x&LoqZx<>Vnyn1 z8VN89N34k$OhgFcQM?hQHQerdPbsO$9I6vNVnK`3WB0x9QhdfY8Vq@3`6i&X6tyK% z1gJpOWUUF}6PU#_tOpvzL)53 zUORa3U`u&!doDO^+_yI7+ zVzJz!s;X67&<4MIH6fx2h^a!0ABZXAc1+f8A%4dwcs&oEUjd_TgXpe<$@KJeB{w(M z{N$5Q#>K_OrGNC%N2#(!%n~>`LfsNJAQxDZmzP)8*x0D*x~>-%7G3~mi_H&||H}ZT z0WT$E*ngfBw@$hq(pd4l-cu+kDN!d)np6w?8~81d6Ke1j56qu7ZQ4Qq$v1A?ctWJY z7%*<}Xy*mM8&j~HYbH$#8u|5q)58gK=gxHi9|DicRu0-^CICy9FJE5iKWR-(jT^|5 z$S;sCi2-g0ehvIq)3p9YMMdSJX`O!0y2LcO081&V{SDfzy)f8EVh$X3KeiB_T^7X0Y4sX@!M_Wx$DR_y;bz9xuu< zWeHIUcVagAW`IqrpMkL>i6rFYUY?bw7iKXi@7}CY7I`!(SuXaj9_wC!)uz2y} zyTn(B?_wJy0tvIQCJn-P^?QCglN$xor%$)^>(_4}Fi=wWQG&Mt0;jJuJTeZ`x?X}l%I2<88d+)vX zX2^O{=_t#YyYdliA~K&WT)413kZ3JjxX=MS5BU44Nx)2CGjQ%Ash$0S#-@_jr(9h@R=QjiY03H-G9^*5v2?Kx^f%09uc4+}Df`+GtH%qAM-BLru z3;WM1VwyT3-zT*F|MABkUxmDP*laevs;Vm3Iog5ufnQ48;w{o98oCU_;a#9OKR>@y ztUqknFy)08UKl1OCR;>5O3Y1vAmx!jm7(Oski>W0x^)4sx3#sgYuB!z=15FTGzgPo z{kK3@1ZW2i0dH>Jy!p^)pMBOTyj-zjg(WvP_lLj~@gk$e_3ZN~QN2EQ#FiG^3cLWXNfVZblpB~VL?b)-(3A_V*QcO~Nml5C}Uea$Q3?4kV2G|Mw zPD1*0?+B$hS`Q?hIdf)+q9}dd3kv?5(}Kg({WNOnWB(W`D4VPaFmvocA|7~ak2I%Vq8HbLEd`jhH!t*oHm8w%$LqzE3{?~*dD^sTS4lx;W~P$V(5$3>dg%JL?sO?UvLK?|FDxw7 zo__l2YM>lACF%1DpY(aRiaFW9D?s(JW5+rvM6Ikc_&nh6UyK;%T`reCdi3baz<+_i z14~4YCHb1c?leevbMBeZ(b1Vxr%t^p$)Lo?!r|j^^2~K7YA^bv-FR!Zk=t^@&i%!U z7dP+Rxw9N76YiG)=On%F4%G~H@-Bf#fCD>r?C6v^(tk8Nw2bi9_rl8kC!Tns1y8@> z2f&|!`FL9Q5(#5x++bkcgb5R_I2?|Sx4-+L9&$>YbX{Mwp~r~V)z#^9=FDjkj=vB5 z1z3!yd8;>J?k}=QAatO2@7~U*mOQ5E4=(N=^4>Ay7rK7ri*6ymY11Y(D=Vu(%4F{g z=O32*WR}DLL6ycrDUFX7@9*xXh)#TwnD8_%%zFS9%!VnsUEWq(Tg$d>+qC@reCPiC z`7(bTsoPqjV zz2bDU*-UeDvtCwKrX4wQ#Jz9dzIH*ZUW%mW1?e;Ly;81Uv$wD(1c(Dh0rM1?;vlVG zTm+9FOrXwHjLS(!+iZ(Zk3h8`TOl6bMHzL1yc+KQ0E2i^y@AvjSmVNt{ApAM`6%pV zL@UKOnx!Y88c*M#Lw?r@r)y*zToQBLc0FgOy9BU{N$CS5jK*vYH^&G0S*ssoHKkx^ zu0^Ys%G7y5{E85wo{o0fCW36SH+7TyQ9^)Zz!r(FkU$Hai_Nl@mP?}8z7*xwOh*rK zt9-gcnYTM@vHGN!l+*~d$92xq8a3g1m5+9B7BP2)f_OM|fcMOgbCAFGju3oEd%5iS zTKV+$4eLFTtnPsKlvh1)r380dZ!FP0MbL?k16{8}(=U5IH3hU*^!AOkmVQ9{X+geT z5O>qV)_GGmk#863R{<6G;W)6K*pXQn?dMRbLQ~q%Ippc}*Q?Rg3#cmKRywP8{VNE7pD@j=4( zOkkUj{r1{(6~C@ipA4=q0V*V#J0}VI+}`Q=+PH-zmuZ5<;b; z{Z*smbg8!=*p~pRJl9A^XJ|WNIyMsy^JS4?^2@ucK03o|qOP}Ry_p)b4