From 42bc651330fbea148eb3a9898428cd8c525153bb Mon Sep 17 00:00:00 2001 From: Kimi Date: Mon, 31 Aug 2026 12:36:48 +0800 Subject: [PATCH 1/9] feat: client weather sync, doWeatherCycle gamerule, and protocol fixes Weather sync (new): - handlers/play/weather.py: Game Event payloads (begin/end raining, rain/thunder strength) with per-version packet IDs - broadcast weather changes to all clients from the server tick - send current weather state to players on join - server.set_weather() as the unified entry point (TimeManager + broadcast + plugin hook) Fixes: - /weather duration argument was computed but discarded; it now applies via TimeManager and broadcasts immediately - doWeatherCycle gamerule now freezes weather countdown when false - _tick_entity_sync hardcoded remove_entities packet ID 0x42 (1.21.1 only); now uses version-mapped _send_entity_remove Tests: 76 passed (14 new in tests/test_weather_sync.py). --- README.md | 8 +- commands/vanilla/weather.py | 4 +- handlers/play/__init__.py | 12 +++ handlers/play/join.py | 4 + handlers/play/weather.py | 98 +++++++++++++++++++++ network/managers/time.py | 16 +++- network/server.py | 29 +++++- tests/test_weather_sync.py | 170 ++++++++++++++++++++++++++++++++++++ 8 files changed, 332 insertions(+), 9 deletions(-) create mode 100644 handlers/play/weather.py create mode 100644 tests/test_weather_sync.py diff --git a/README.md b/README.md index 4b060a1..c031ff3 100755 --- a/README.md +++ b/README.md @@ -22,7 +22,8 @@ PyMC 是一个用 Python 实现的 Minecraft Java 版 1.21.1 服务端原型, - [x] 玩家 JSON 存档:位置、生命值、饱食度、经验、游戏模式和个人出生点。 - [x] 基础聊天、方块挖掘/放置、掉落物、经验球和简单生物实体。 - [x] C++ 原生轻量生物 AI `native/mob_ai`,支持随机游走、看向玩家、敌对追击、近战冷却等行为。 -- [x] 基础 `gamerule`:昼夜流动、自然刷怪、自然回血、死亡后自动重生回出生点。 +- [x] 基础 `gamerule`:昼夜流动、天气循环 (doWeatherCycle)、自然刷怪、自然回血、死亡后自动重生回出生点。 +- [x] **天气客户端同步**:通过 Game Event 数据包同步下雨/雷暴的开始、结束与强度;入服时同步当前天气,`/weather` 持续时间参数生效并立即广播。 - [x] 控制台和游戏内基础命令。 - [x] Web 管理台、权限组、OP、封禁和白名单。 - [x] 单元测试覆盖原生地形、原生 AI、种子解析和安全出生点。 @@ -49,7 +50,7 @@ PyMC 是一个用 Python 实现的 Minecraft Java 版 1.21.1 服务端原型, - [ ] 结构生成:村庄、废弃矿井、地牢、沉船、沙漠神殿、林地府邸、远古城市等。 - [ ] 完整洞穴系统:大型洞穴、繁茂洞穴、溶洞、地下水体、岩浆湖、深暗之域等。 - [ ] Nether、End 和多维度传送。 -- [ ] 完整光照、天气效果、昼夜同步和客户端可见的区块更新细节。 +- [ ] 完整光照、打雷闪电实体效果和客户端可见的区块更新细节。 - [ ] 更完整的物品栏交互:拖拽、Shift-点击、合并、物品耐久、附魔、药水效果。 - [ ] 更完整的生物系统:寻路、繁殖、掉落、远程攻击、村民、Boss、刷怪规则和 mob cap。 - [ ] 正版登录验证、加密链路和更完整的权限模型。 @@ -83,7 +84,8 @@ PyMC 是一个用 Python 实现的 Minecraft Java 版 1.21.1 服务端原型, - Mod/插件:仅支持 PYMC 原生 Python API - Watchdog:UDP 心跳与自动重启框架(尚缺端到端验证) - 网络优化:批处理、移动限频和区块排序组件(尚未全面接入) -- 基础 `gamerule`:控制昼夜流动、自然刷怪、自然回血和死亡自动重生 +- 基础 `gamerule`:控制昼夜流动、天气循环、自然刷怪、自然回血和死亡自动重生 +- 天气客户端同步:Game Event 广播下雨/雷暴状态与强度,入服时同步当前天气 - 控制台和游戏内基础命令 - Web 管理台、权限组、OP、封禁和白名单 diff --git a/commands/vanilla/weather.py b/commands/vanilla/weather.py index 2cf1c43..7bfac83 100755 --- a/commands/vanilla/weather.py +++ b/commands/vanilla/weather.py @@ -21,7 +21,6 @@ async def _execute(ctx: CommandContext) -> int: await ctx.reply(f"[PyMC] {e}") return FAILURE - ctx.server.weather = weather duration = 6000 if len(args) >= 2: try: @@ -29,6 +28,9 @@ async def _execute(ctx: CommandContext) -> int: except ValueError: pass + # 走统一入口: 更新 TimeManager 持续时间并立即广播到客户端 + await ctx.server.set_weather(weather, duration) + await ctx.reply(f"[PyMC] 天气已设置为 {weather}") return SUCCESS diff --git a/handlers/play/__init__.py b/handlers/play/__init__.py index 71abcd1..3588bfa 100755 --- a/handlers/play/__init__.py +++ b/handlers/play/__init__.py @@ -154,6 +154,18 @@ SPAWN_CANOPY_BLOCKS, ) +from handlers.play.weather import ( + build_game_event_payload, + send_weather_state, + broadcast_weather_change, + rain_strength, + thunder_strength, + GAME_EVENT_END_RAINING, + GAME_EVENT_BEGIN_RAINING, + GAME_EVENT_RAIN_LEVEL, + GAME_EVENT_THUNDER_LEVEL, +) + logger = logging.getLogger("PyMC.游戏") diff --git a/handlers/play/join.py b/handlers/play/join.py index 4db10c8..caeb5f1 100755 --- a/handlers/play/join.py +++ b/handlers/play/join.py @@ -204,6 +204,10 @@ def _generate_chunks(coords): await _send_set_experience(conn) await _send_time_update(conn, server) + # 同步当前天气状态 (晴天时为空操作) + from handlers.play.weather import send_weather_state + await send_weather_state(conn, server) + from world.inventory import send_inventory_sync await send_inventory_sync(conn) diff --git a/handlers/play/weather.py b/handlers/play/weather.py new file mode 100644 index 0000000..4b3b9c3 --- /dev/null +++ b/handlers/play/weather.py @@ -0,0 +1,98 @@ +# ============================================================ +# PyMC - 天气客户端同步 +# 通过 Game Event 数据包向客户端同步天气变化 +# ============================================================ + +""" +天气状态同步。 + +Minecraft 客户端通过 Game Event 数据包感知天气: + - reason 1: End Raining (停止下雨) + - reason 2: Begin Raining (开始下雨) + - reason 7: Change Rain Strength (雨强度 0.0-1.0) + - reason 8: Change Thunder Strength (雷暴强度 0.0-1.0) + +入服时发送当前天气状态,天气变化时向全体在线玩家广播。 +""" + +import logging + +from protocol.data_types import write_ubyte, write_float +from protocol.packet_map import get_clientbound_packet +from network.connection import Connection + +logger = logging.getLogger("PyMC.天气") + +GAME_EVENT_END_RAINING = 1 +GAME_EVENT_BEGIN_RAINING = 2 +GAME_EVENT_RAIN_LEVEL = 7 +GAME_EVENT_THUNDER_LEVEL = 8 + +_RAINING_STATES = ("rain", "thunder") + + +def build_game_event_payload(event: int, value: float) -> bytes: + """构建 Game Event 数据包负载 (Unsigned Byte reason + Float value)。""" + payload = bytearray() + payload.extend(write_ubyte(event)) + payload.extend(write_float(value)) + return bytes(payload) + + +def rain_strength(weather: str) -> float: + """雨强度: 下雨或雷暴时为 1.0。""" + return 1.0 if weather in _RAINING_STATES else 0.0 + + +def thunder_strength(weather: str) -> float: + """雷暴强度: 仅雷暴时为 1.0。""" + return 1.0 if weather == "thunder" else 0.0 + + +async def _send_game_event(conn: Connection, event: int, value: float): + """按客户端协议版本发送 Game Event 数据包。""" + if conn.version_handler is not None: + await conn.version_handler.send_game_event(conn, event, value) + return + pid = get_clientbound_packet(conn.protocol_version, "game_event") + if pid is not None: + await conn.send_packet(pid, build_game_event_payload(event, value)) + + +async def send_weather_state(conn: Connection, server): + """ + 入服时向玩家同步当前天气。 + + 晴天无需发送任何数据包 (客户端默认晴天)。 + """ + weather = server.weather + if weather not in _RAINING_STATES: + return + await _send_game_event(conn, GAME_EVENT_BEGIN_RAINING, 0.0) + await _send_game_event(conn, GAME_EVENT_RAIN_LEVEL, rain_strength(weather)) + await _send_game_event(conn, GAME_EVENT_THUNDER_LEVEL, thunder_strength(weather)) + + +async def broadcast_weather_change(server, old_weather: str, new_weather: str): + """ + 向全体在线玩家广播天气变化。 + + - 晴 -> 雨/雷暴: Begin Raining + 强度 + - 雨/雷暴 -> 晴: End Raining + 强度归零 + - 雨 <-> 雷暴: 仅更新强度 (保持下雨状态) + """ + if old_weather == new_weather: + return + + was_raining = old_weather in _RAINING_STATES + is_raining = new_weather in _RAINING_STATES + + for conn in server.get_online_players(): + if is_raining and not was_raining: + await _send_game_event(conn, GAME_EVENT_BEGIN_RAINING, 0.0) + elif was_raining and not is_raining: + await _send_game_event(conn, GAME_EVENT_END_RAINING, 0.0) + await _send_game_event(conn, GAME_EVENT_RAIN_LEVEL, rain_strength(new_weather)) + await _send_game_event(conn, GAME_EVENT_THUNDER_LEVEL, thunder_strength(new_weather)) + + logger.info(f"天气已变更: {old_weather} -> {new_weather}") diff --git a/network/managers/time.py b/network/managers/time.py index d9142d3..8bf09fc 100755 --- a/network/managers/time.py +++ b/network/managers/time.py @@ -37,6 +37,7 @@ class TimeManager: def __init__(self, initial_time: int = 1000, do_daylight_cycle: bool = True): self._time: int = initial_time % MAX_TIME self._do_daylight_cycle = do_daylight_cycle + self._do_weather_cycle: bool = True self._weather: str = "clear" self._weather_duration: int = 0 # ticks remaining self._thunder_duration: int = 0 @@ -71,6 +72,15 @@ def do_daylight_cycle(self) -> bool: def do_daylight_cycle(self, value: bool): self._do_daylight_cycle = value + @property + def do_weather_cycle(self) -> bool: + """是否启用天气循环 (gamerule doWeatherCycle)。""" + return self._do_weather_cycle + + @do_weather_cycle.setter + def do_weather_cycle(self, value: bool): + self._do_weather_cycle = value + def tick(self): """ 每游戏 tick 调用。 @@ -79,7 +89,9 @@ def tick(self): if self._do_daylight_cycle: self._time = (self._time + 1) % MAX_TIME - # 天气持续计时 + # 天气持续计时 (doWeatherCycle=false 时天气保持不变) + if not self._do_weather_cycle: + return if self._weather_duration > 0: self._weather_duration -= 1 if self._weather_duration == 0: @@ -145,6 +157,7 @@ def serialize(self) -> dict: "weather": self._weather, "weather_duration": self._weather_duration, "do_daylight_cycle": self._do_daylight_cycle, + "do_weather_cycle": self._do_weather_cycle, } @classmethod @@ -156,4 +169,5 @@ def deserialize(cls, data: dict) -> 'TimeManager': ) mgr._weather = data.get("weather", "clear") mgr._weather_duration = data.get("weather_duration", 0) + mgr._do_weather_cycle = data.get("do_weather_cycle", True) return mgr diff --git a/network/server.py b/network/server.py index 8890097..e5310ad 100755 --- a/network/server.py +++ b/network/server.py @@ -201,6 +201,24 @@ def broadcast_system_message(self, text: str, exclude: Connection = None): if conn != exclude and conn.version_handler is not None: asyncio.ensure_future(conn.version_handler.send_system_chat(conn, text)) + async def set_weather(self, weather: str, duration: int = 0): + """ + 设置天气并立即同步到所有客户端。 + + Args: + weather: "clear" | "rain" | "thunder" + duration: 持续 tick 数 (0 = 无限, 直到天气循环或手动变更) + """ + old_weather = self.weather + self._time_manager.set_weather(weather, duration) + self.weather = self._time_manager.weather + if self.weather == old_weather: + return + from handlers.play.weather import broadcast_weather_change + await broadcast_weather_change(self, old_weather, self.weather) + from plugins.bridge import hook_weather_change + hook_weather_change(self, old_weather, self.weather) + def save_player_state(self, conn: Connection): """保存单个玩家存档。""" if not conn.username: @@ -778,14 +796,17 @@ async def _game_loop(self): # 使用 TimeManager 推进时间 self._time_manager.do_daylight_cycle = self.gamerules.get("doDaylightCycle", True) + self._time_manager.do_weather_cycle = self.gamerules.get("doWeatherCycle", True) old_weather = self.weather old_time = self.world_time self._time_manager.tick() self.world_time = self._time_manager.time self.weather = self._time_manager.weather - # Plugin hooks: weather/time change + # Plugin hooks + client sync: weather/time change if self.weather != old_weather: + from handlers.play.weather import broadcast_weather_change + await broadcast_weather_change(self, old_weather, self.weather) from plugins.bridge import hook_weather_change hook_weather_change(self, old_weather, self.weather) if self.world_time != old_time and tick_count % 200 == 0: @@ -1019,10 +1040,10 @@ async def _tick_entity_sync(self): """向客户端同步基础实体位置与移除。""" from handlers.play import ( _send_entity_teleport, + _send_entity_remove, _send_experience_orb_spawn, _send_generic_entity_spawn, _entity_within_tracking_range, - build_remove_entities, broadcast_entity_remove, ) @@ -1044,13 +1065,13 @@ async def _tick_entity_sync(self): ] if stale_ids: conn.tracked_entities.difference_update(stale_ids) - await conn.send_packet(0x42, build_remove_entities(stale_ids)) + await _send_entity_remove(conn, stale_ids) for entity in live_entities.values(): if not _entity_within_tracking_range(entity, conn, self.view_distance): if entity.entity_id in conn.tracked_entities: conn.tracked_entities.discard(entity.entity_id) - await conn.send_packet(0x42, build_remove_entities([entity.entity_id])) + await _send_entity_remove(conn, [entity.entity_id]) continue if entity.entity_id not in conn.tracked_entities: if entity.kind == "orb": diff --git a/tests/test_weather_sync.py b/tests/test_weather_sync.py new file mode 100644 index 0000000..a2b6623 --- /dev/null +++ b/tests/test_weather_sync.py @@ -0,0 +1,170 @@ +import struct +import unittest +from types import SimpleNamespace + +from handlers.play.weather import ( + GAME_EVENT_BEGIN_RAINING, + GAME_EVENT_END_RAINING, + GAME_EVENT_RAIN_LEVEL, + GAME_EVENT_THUNDER_LEVEL, + build_game_event_payload, + broadcast_weather_change, + rain_strength, + send_weather_state, + thunder_strength, +) +from network.managers.time import TimeManager +from network.server import MinecraftServer + + +class FakeConnection: + """记录收到的 Game Event (event, value) 序列。""" + + def __init__(self, protocol_version=767): + self.protocol_version = protocol_version + self.version_handler = None + self.events = [] + + async def send_packet(self, packet_id, payload=b""): + event = payload[0] + (value,) = struct.unpack(">f", payload[1:5]) + self.events.append((packet_id, event, value)) + + +def make_server(weather, conns): + return SimpleNamespace(weather=weather, get_online_players=lambda: conns) + + +class GameEventPayloadTests(unittest.TestCase): + def test_payload_layout(self): + payload = build_game_event_payload(GAME_EVENT_BEGIN_RAINING, 1.0) + self.assertEqual(payload[0], GAME_EVENT_BEGIN_RAINING) + (value,) = struct.unpack(">f", payload[1:5]) + self.assertAlmostEqual(value, 1.0) + self.assertEqual(len(payload), 5) + + def test_strength_helpers(self): + self.assertEqual(rain_strength("clear"), 0.0) + self.assertEqual(rain_strength("rain"), 1.0) + self.assertEqual(rain_strength("thunder"), 1.0) + self.assertEqual(thunder_strength("rain"), 0.0) + self.assertEqual(thunder_strength("thunder"), 1.0) + + +class WeatherBroadcastTests(unittest.IsolatedAsyncioTestCase): + async def test_clear_to_rain_begins_raining(self): + conn = FakeConnection() + server = make_server("rain", [conn]) + await broadcast_weather_change(server, "clear", "rain") + events = [e for _, e, _ in conn.events] + self.assertIn(GAME_EVENT_BEGIN_RAINING, events) + self.assertNotIn(GAME_EVENT_END_RAINING, events) + levels = dict((e, v) for _, e, v in conn.events) + self.assertEqual(levels[GAME_EVENT_RAIN_LEVEL], 1.0) + self.assertEqual(levels[GAME_EVENT_THUNDER_LEVEL], 0.0) + + async def test_rain_to_clear_ends_raining(self): + conn = FakeConnection() + server = make_server("clear", [conn]) + await broadcast_weather_change(server, "rain", "clear") + events = [e for _, e, _ in conn.events] + self.assertIn(GAME_EVENT_END_RAINING, events) + self.assertNotIn(GAME_EVENT_BEGIN_RAINING, events) + levels = dict((e, v) for _, e, v in conn.events) + self.assertEqual(levels[GAME_EVENT_RAIN_LEVEL], 0.0) + + async def test_rain_to_thunder_keeps_rain_state(self): + conn = FakeConnection() + server = make_server("thunder", [conn]) + await broadcast_weather_change(server, "rain", "thunder") + events = [e for _, e, _ in conn.events] + self.assertNotIn(GAME_EVENT_BEGIN_RAINING, events) + self.assertNotIn(GAME_EVENT_END_RAINING, events) + levels = dict((e, v) for _, e, v in conn.events) + self.assertEqual(levels[GAME_EVENT_THUNDER_LEVEL], 1.0) + + async def test_no_change_sends_nothing(self): + conn = FakeConnection() + server = make_server("rain", [conn]) + await broadcast_weather_change(server, "rain", "rain") + self.assertEqual(conn.events, []) + + async def test_uses_version_mapped_packet_id(self): + conn = FakeConnection(protocol_version=47) # 1.8.9: game_event = 0x1B + server = make_server("rain", [conn]) + await broadcast_weather_change(server, "clear", "rain") + self.assertTrue(all(pid == 0x1B for pid, _, _ in conn.events)) + + +class JoinWeatherStateTests(unittest.IsolatedAsyncioTestCase): + async def test_clear_weather_sends_nothing_on_join(self): + conn = FakeConnection() + await send_weather_state(conn, make_server("clear", [conn])) + self.assertEqual(conn.events, []) + + async def test_thunder_join_sends_state(self): + conn = FakeConnection() + await send_weather_state(conn, make_server("thunder", [conn])) + events = [e for _, e, _ in conn.events] + self.assertIn(GAME_EVENT_BEGIN_RAINING, events) + levels = dict((e, v) for _, e, v in conn.events) + self.assertEqual(levels[GAME_EVENT_RAIN_LEVEL], 1.0) + self.assertEqual(levels[GAME_EVENT_THUNDER_LEVEL], 1.0) + + +class WeatherCycleGameruleTests(unittest.TestCase): + def test_weather_duration_counts_down_by_default(self): + mgr = TimeManager() + mgr.set_weather("rain", duration=2) + mgr.tick() + self.assertEqual(mgr.weather, "rain") + mgr.tick() + self.assertEqual(mgr.weather, "clear") + + def test_do_weather_cycle_false_freezes_weather(self): + mgr = TimeManager() + mgr.do_weather_cycle = False + mgr.set_weather("rain", duration=1) + for _ in range(10): + mgr.tick() + self.assertEqual(mgr.weather, "rain") + + def test_serialize_roundtrip_keeps_weather_cycle_flag(self): + mgr = TimeManager() + mgr.do_weather_cycle = False + mgr.set_weather("thunder", duration=100) + restored = TimeManager.deserialize(mgr.serialize()) + self.assertFalse(restored.do_weather_cycle) + self.assertEqual(restored.weather, "thunder") + + +class SetWeatherTests(unittest.IsolatedAsyncioTestCase): + async def test_set_weather_updates_duration_and_broadcasts(self): + conn = FakeConnection() + server = SimpleNamespace( + weather="clear", + _time_manager=TimeManager(), + plugin_manager=None, + get_online_players=lambda: [conn], + ) + await MinecraftServer.set_weather(server, "rain", duration=1234) + + self.assertEqual(server.weather, "rain") + self.assertEqual(server._time_manager._weather_duration, 1234) + events = [e for _, e, _ in conn.events] + self.assertIn(GAME_EVENT_BEGIN_RAINING, events) + + async def test_set_weather_noop_when_unchanged(self): + conn = FakeConnection() + server = SimpleNamespace( + weather="clear", + _time_manager=TimeManager(), + plugin_manager=None, + get_online_players=lambda: [conn], + ) + await MinecraftServer.set_weather(server, "clear", duration=100) + self.assertEqual(conn.events, []) + + +if __name__ == "__main__": + unittest.main() From 835af3fdd3ba890b879d44ba1d31f403fba58cda Mon Sep 17 00:00:00 2001 From: Kimi Date: Mon, 31 Aug 2026 12:49:56 +0800 Subject: [PATCH 2/9] feat: player entity visibility and movement relay Players can now see each other in-game: - handlers/play/players.py: Spawn Entity (type 128) + Set Entity Data (skin parts 0x7F) on join, bidirectional for existing players - movement packets relay position via Entity Teleport + Rotate Head to in-range observers, rate-limited through the network optimizer (network-movement-rate-hz) -- first real wiring of movement limiting - leave path cleans tracked_players alongside existing remove broadcast Fix: ENTITY_TYPE_IDS used wrong registry values (item 71->58, cow 30->22, pig 100->77, sheep 111->87, zombie 150->124), verified against PrismarineJS/minecraft-data pc/1.20.5 (registry shared by 1.21/1.21.1). Mob/item spawns previously rendered as wrong entities client-side. Limitation: player spawn only on the native 1.21.1 path; older clients need per-version Spawn Player packets (skipped, documented). Tests: 87 passed (11 new in tests/test_player_visibility.py). --- handlers/play/__init__.py | 11 ++ handlers/play/entities.py | 14 +-- handlers/play/join.py | 4 + handlers/play/movement.py | 6 ++ handlers/play/players.py | 176 ++++++++++++++++++++++++++++++++ network/connection.py | 1 + network/server.py | 1 + tests/test_player_visibility.py | 159 +++++++++++++++++++++++++++++ 8 files changed, 366 insertions(+), 6 deletions(-) create mode 100644 handlers/play/players.py create mode 100644 tests/test_player_visibility.py diff --git a/handlers/play/__init__.py b/handlers/play/__init__.py index 3588bfa..d1c34b0 100755 --- a/handlers/play/__init__.py +++ b/handlers/play/__init__.py @@ -166,6 +166,17 @@ GAME_EVENT_THUNDER_LEVEL, ) +from handlers.play.players import ( + build_spawn_player_payload, + build_player_metadata_payload, + build_rotate_head_payload, + send_player_spawn, + sync_player_visibility, + relay_player_movement, + remove_player_entity, + PLAYER_ENTITY_TYPE, +) + logger = logging.getLogger("PyMC.游戏") diff --git a/handlers/play/entities.py b/handlers/play/entities.py index 5d0065e..0699bbe 100755 --- a/handlers/play/entities.py +++ b/handlers/play/entities.py @@ -28,13 +28,15 @@ logger = logging.getLogger("PyMC.实体") -# --- 实体类型 ID 映射 --- +# --- 实体类型 ID 映射 (1.21.1 注册表) --- +# 来源: PrismarineJS/minecraft-data pc/1.20.5 entities.json +# (dataPaths 将 1.21/1.21.1 映射到该注册表) ENTITY_TYPE_IDS = { - "item": 71, - "cow": 30, - "pig": 100, - "sheep": 111, - "zombie": 150, + "item": 58, + "cow": 22, + "pig": 77, + "sheep": 87, + "zombie": 124, } diff --git a/handlers/play/join.py b/handlers/play/join.py index caeb5f1..b7450d9 100755 --- a/handlers/play/join.py +++ b/handlers/play/join.py @@ -601,3 +601,7 @@ async def _broadcast_player_join(conn: Connection, server): pid = get_clientbound_packet(conn.protocol_version, "player_info") if pid is not None: await conn.send_packet(pid, other_info) + + # 双向生成玩家实体 (必须在 Player Info 之后, 客户端需要列表项渲染皮肤) + from handlers.play.players import sync_player_visibility + await sync_player_visibility(server, conn) diff --git a/handlers/play/movement.py b/handlers/play/movement.py index 46e05f6..3d623c6 100755 --- a/handlers/play/movement.py +++ b/handlers/play/movement.py @@ -86,6 +86,8 @@ async def _handle_player_position(conn: Connection, payload: bytes, server): conn.on_ground = on_ground from handlers.play.chunks import _schedule_chunk_stream_update _schedule_chunk_stream_update(conn, server) + from handlers.play.players import relay_player_movement + await relay_player_movement(server, conn) async def _handle_player_position_rotation(conn: Connection, payload: bytes, @@ -111,6 +113,8 @@ async def _handle_player_position_rotation(conn: Connection, payload: bytes, conn.on_ground = on_ground from handlers.play.chunks import _schedule_chunk_stream_update _schedule_chunk_stream_update(conn, server) + from handlers.play.players import relay_player_movement + await relay_player_movement(server, conn) async def _handle_player_rotation(conn: Connection, payload: bytes, server): @@ -127,6 +131,8 @@ async def _handle_player_rotation(conn: Connection, payload: bytes, server): conn.yaw = yaw conn.pitch = pitch conn.on_ground = on_ground + from handlers.play.players import relay_player_movement + await relay_player_movement(server, conn) async def _handle_player_on_ground(conn: Connection, payload: bytes, server): diff --git a/handlers/play/players.py b/handlers/play/players.py new file mode 100644 index 0000000..9c21913 --- /dev/null +++ b/handlers/play/players.py @@ -0,0 +1,176 @@ +# ============================================================ +# PyMC - 玩家实体可见性 +# 玩家实体的生成、移动转发和头部旋转同步 +# ============================================================ + +""" +玩家互相可见性同步。 + +包括: + - send_player_spawn: 向观察者生成玩家实体 (Spawn Entity + Set Entity Data) + - sync_player_visibility: 入服时双向生成所有在线玩家 + - relay_player_movement: 将玩家移动/视角转发给视距内的其他玩家 + (Entity Teleport + Rotate Head, 经网络优化器限频) + +协议说明 (1.21.1, 协议 767): + - Spawn Entity (0x01): 玩家实体类型 ID = 128 + (来源: PrismarineJS/minecraft-data pc/1.20.5 entities.json, + dataPaths 将 1.21/1.21.1 映射到该注册表) + - Set Entity Data (0x57): 玩家皮肤层 metadata (index 17, byte) + - Rotate Head (0x47): 头部朝向 + - Entity Teleport (0x70): 位置与身体朝向 (ID 走 packet_map) + +限制: 仅原生 1.21.1 路径 (version_handler 为 None 的客户端)。 +旧版本客户端的玩家实体生成需要各版本独立的 Spawn Player 包, +当前跳过,不影响其它功能。 +""" + +import logging + +from protocol.data_types import ( + write_varint, write_double, write_short, + write_uuid, write_angle, write_ubyte, +) +from protocol.packet_map import get_clientbound_packet +from network.connection import Connection + +logger = logging.getLogger("PyMC.玩家") + +# --- 1.21.1 (协议 767) 客户端包 ID --- +SPAWN_ENTITY_PID = 0x01 +SET_ENTITY_DATA_PID = 0x57 +ROTATE_HEAD_PID = 0x47 + +# minecraft:player 实体类型 ID (1.21.1 注册表) +PLAYER_ENTITY_TYPE = 128 + +# 玩家 metadata: 皮肤层 (index 17, Byte, 0x7F = 全部显示) +SKIN_PARTS_INDEX = 17 +SKIN_PARTS_ALL = 0x7F + + +def _supports_player_spawn(conn: Connection) -> bool: + """仅原生 1.21.1 路径支持玩家实体生成。""" + return conn.version_handler is None + + +def build_spawn_player_payload(player: Connection) -> bytes: + """构建 Spawn Entity (玩家) 数据包负载。""" + payload = bytearray() + payload.extend(write_varint(player.entity_id)) + payload.extend(write_uuid(player.uuid)) + payload.extend(write_varint(PLAYER_ENTITY_TYPE)) + payload.extend(write_double(player.x)) + payload.extend(write_double(player.y)) + payload.extend(write_double(player.z)) + payload.extend(write_angle(player.pitch)) + payload.extend(write_angle(player.yaw)) + payload.extend(write_angle(player.yaw)) # head yaw + payload.extend(write_varint(0)) # data + payload.extend(write_short(0)) # velocity X + payload.extend(write_short(0)) # velocity Y + payload.extend(write_short(0)) # velocity Z + return bytes(payload) + + +def build_player_metadata_payload(player: Connection) -> bytes: + """构建 Set Entity Data 负载: 显示全部皮肤层 (披风/帽子/袖子等)。""" + payload = bytearray() + payload.extend(write_varint(player.entity_id)) + payload.extend(write_ubyte(SKIN_PARTS_INDEX)) + payload.extend(write_varint(0)) # metadata type 0 = Byte + payload.extend(write_ubyte(SKIN_PARTS_ALL)) + payload.extend(write_ubyte(0xFF)) # terminator + return bytes(payload) + + +def build_rotate_head_payload(player: Connection) -> bytes: + """构建 Rotate Head 数据包负载。""" + payload = bytearray() + payload.extend(write_varint(player.entity_id)) + payload.extend(write_angle(player.yaw)) + return bytes(payload) + + +async def send_player_spawn(observer: Connection, player: Connection): + """ + 向观察者生成一个玩家实体。 + + 必须在 Player Info Update 之后发送 (客户端需要列表项渲染皮肤)。 + """ + if not _supports_player_spawn(observer): + return + if player.entity_id in observer.tracked_players: + return + await observer.send_packet(SPAWN_ENTITY_PID, build_spawn_player_payload(player)) + await observer.send_packet(SET_ENTITY_DATA_PID, build_player_metadata_payload(player)) + observer.tracked_players.add(player.entity_id) + + +async def sync_player_visibility(server, new_conn: Connection): + """ + 入服时双向同步玩家实体: + - 向新玩家生成所有已有玩家 + - 向所有已有玩家生成新玩家 + """ + for other in server.get_online_players(): + if other == new_conn: + continue + await send_player_spawn(new_conn, other) + await send_player_spawn(other, new_conn) + + +def _player_within_tracking_range(player: Connection, observer: Connection, + view_distance: int) -> bool: + max_distance = (view_distance * 16) ** 2 + dx = player.x - observer.x + dz = player.z - observer.z + return dx * dx + dz * dz <= max_distance + + +async def relay_player_movement(server, moved: Connection): + """ + 将玩家的位置和视角转发给视距内的其他玩家。 + + 经网络优化器限频 (network-movement-rate-hz, 默认 20Hz)。 + 位置使用 Entity Teleport (简单可靠), 头部朝向使用 Rotate Head。 + """ + if not moved.username: + return + + optimizer = getattr(server, "network_optimizer", None) + if optimizer is not None and not optimizer.should_send_movement(moved): + return + + rotate_payload = build_rotate_head_payload(moved) + + for observer in server.get_online_players(): + if observer == moved or not observer.alive: + continue + if not _supports_player_spawn(observer): + continue + if moved.entity_id not in observer.tracked_players: + continue + if not _player_within_tracking_range(moved, observer, server.view_distance): + continue + + teleport_pid = get_clientbound_packet( + observer.protocol_version, "entity_teleport") + + # Entity Teleport: 位置 + 身体朝向 + payload = bytearray() + payload.extend(write_varint(moved.entity_id)) + payload.extend(write_double(moved.x)) + payload.extend(write_double(moved.y)) + payload.extend(write_double(moved.z)) + payload.extend(write_angle(moved.yaw)) + payload.extend(write_angle(moved.pitch)) + payload.extend(b"\x01" if moved.on_ground else b"\x00") + if teleport_pid is not None: + await observer.send_packet(teleport_pid, bytes(payload)) + await observer.send_packet(ROTATE_HEAD_PID, rotate_payload) + + +async def remove_player_entity(observer: Connection, entity_id: int): + """从观察者处移除玩家实体并清理跟踪状态。""" + observer.tracked_players.discard(entity_id) diff --git a/network/connection.py b/network/connection.py index 26a34ef..0063a0c 100755 --- a/network/connection.py +++ b/network/connection.py @@ -75,6 +75,7 @@ def __init__(self, reader: asyncio.StreamReader, writer: asyncio.StreamWriter, self.personal_spawn: tuple[int, int, int] | None = None self.loaded_chunks: set[tuple[int, int]] = set() self.tracked_entities: set[int] = set() + self.tracked_players: set[int] = set() # 已生成玩家实体的 entity_id self.chunk_center: tuple[int, int] = (0, 0) self.chunk_stream_task: asyncio.Task | None = None diff --git a/network/server.py b/network/server.py index e5310ad..a87bec5 100755 --- a/network/server.py +++ b/network/server.py @@ -772,6 +772,7 @@ async def _handle_player_leave(self, conn: Connection): for other_conn in self.get_online_players(): if other_conn == conn: continue + other_conn.tracked_players.discard(conn.entity_id) player_remove_pid = get_clientbound_packet(other_conn.protocol_version, "player_remove") if player_remove_pid is not None: await other_conn.send_packet(player_remove_pid, remove_info) diff --git a/tests/test_player_visibility.py b/tests/test_player_visibility.py new file mode 100644 index 0000000..03f4596 --- /dev/null +++ b/tests/test_player_visibility.py @@ -0,0 +1,159 @@ +import struct +import unittest +import uuid +from types import SimpleNamespace + +from handlers.play.entities import ENTITY_TYPE_IDS +from handlers.play.players import ( + PLAYER_ENTITY_TYPE, + ROTATE_HEAD_PID, + SET_ENTITY_DATA_PID, + SPAWN_ENTITY_PID, + build_player_metadata_payload, + build_rotate_head_payload, + build_spawn_player_payload, + relay_player_movement, + send_player_spawn, + sync_player_visibility, +) +from protocol.data_types import read_varint + + +class FakeConn: + def __init__(self, username, entity_id, x=0.0, z=0.0, version_handler=None): + self.username = username + self.entity_id = entity_id + self.uuid = uuid.uuid4() + self.x = x + self.y = 64.0 + self.z = z + self.yaw = 90.0 + self.pitch = 0.0 + self.on_ground = True + self.alive = True + self.version_handler = version_handler + self.protocol_version = 767 + self.tracked_players = set() + self.sent = [] # (packet_id, payload) + + async def send_packet(self, packet_id, payload=b""): + self.sent.append((packet_id, payload)) + + +def make_server(conns, view_distance=10, optimizer=None): + return SimpleNamespace( + view_distance=view_distance, + network_optimizer=optimizer, + get_online_players=lambda: list(conns), + ) + + +class EntityTypeIdTests(unittest.TestCase): + """1.21.1 注册表 ID (minecraft-data pc/1.20.5, 1.21/1.21.1 共用)。""" + + def test_verified_ids(self): + self.assertEqual(ENTITY_TYPE_IDS["item"], 58) + self.assertEqual(ENTITY_TYPE_IDS["cow"], 22) + self.assertEqual(ENTITY_TYPE_IDS["pig"], 77) + self.assertEqual(ENTITY_TYPE_IDS["sheep"], 87) + self.assertEqual(ENTITY_TYPE_IDS["zombie"], 124) + self.assertEqual(PLAYER_ENTITY_TYPE, 128) + + +class SpawnPayloadTests(unittest.TestCase): + def test_spawn_payload_layout(self): + player = FakeConn("Alex", 42, x=1.5, z=-2.5) + payload = build_spawn_player_payload(player) + eid, offset = read_varint(payload, 0) + self.assertEqual(eid, 42) + # UUID (16 bytes) 之后是类型 VarInt + type_id, _ = read_varint(payload, offset + 16) + self.assertEqual(type_id, PLAYER_ENTITY_TYPE) + + def test_metadata_payload_shows_all_skin_parts(self): + player = FakeConn("Alex", 42) + payload = build_player_metadata_payload(player) + eid, offset = read_varint(payload, 0) + self.assertEqual(eid, 42) + self.assertEqual(payload[offset], 17) # skin parts index + type_id, offset2 = read_varint(payload, offset + 1) + self.assertEqual(type_id, 0) # Byte + self.assertEqual(payload[offset2], 0x7F) # all layers + self.assertEqual(payload[offset2 + 1], 0xFF) + + def test_rotate_head_payload(self): + player = FakeConn("Alex", 42) + player.yaw = 180.0 + payload = build_rotate_head_payload(player) + eid, offset = read_varint(payload, 0) + self.assertEqual(eid, 42) + self.assertEqual(payload[offset], 128) # 180° -> 180/360*256 = 128 + + +class SpawnSyncTests(unittest.IsolatedAsyncioTestCase): + async def test_spawn_sends_spawn_and_metadata(self): + observer = FakeConn("Steve", 1) + player = FakeConn("Alex", 2) + await send_player_spawn(observer, player) + pids = [pid for pid, _ in observer.sent] + self.assertEqual(pids, [SPAWN_ENTITY_PID, SET_ENTITY_DATA_PID]) + self.assertIn(2, observer.tracked_players) + + async def test_spawn_is_idempotent(self): + observer = FakeConn("Steve", 1) + player = FakeConn("Alex", 2) + await send_player_spawn(observer, player) + await send_player_spawn(observer, player) + self.assertEqual(len(observer.sent), 2) + + async def test_spawn_skipped_for_versioned_clients(self): + observer = FakeConn("Steve", 1, version_handler=object()) + player = FakeConn("Alex", 2) + await send_player_spawn(observer, player) + self.assertEqual(observer.sent, []) + + async def test_visibility_sync_is_bidirectional(self): + a = FakeConn("Steve", 1) + b = FakeConn("Alex", 2) + server = make_server([a, b]) + await sync_player_visibility(server, b) + self.assertIn(2, a.tracked_players) + self.assertIn(1, b.tracked_players) + + +class MovementRelayTests(unittest.IsolatedAsyncioTestCase): + async def test_relay_sends_teleport_and_head_rotation(self): + a = FakeConn("Steve", 1) + b = FakeConn("Alex", 2) + a.tracked_players.add(2) + server = make_server([a, b]) + await relay_player_movement(server, b) + pids = [pid for pid, _ in a.sent] + self.assertIn(0x70, pids) # entity_teleport (767) + self.assertIn(ROTATE_HEAD_PID, pids) + + async def test_relay_skips_untracked_or_far_observers(self): + near = FakeConn("Near", 1) + far = FakeConn("Far", 3, x=10000.0) + untracked = FakeConn("Untracked", 4) + near.tracked_players.add(2) + far.tracked_players.add(2) + moved = FakeConn("Alex", 2) + server = make_server([near, far, untracked, moved], view_distance=10) + await relay_player_movement(server, moved) + self.assertTrue(near.sent) + self.assertEqual(far.sent, []) + self.assertEqual(untracked.sent, []) + + async def test_relay_rate_limited_by_optimizer(self): + a = FakeConn("Steve", 1) + b = FakeConn("Alex", 2) + a.tracked_players.add(2) + optimizer = SimpleNamespace(should_send_movement=lambda conn: False) + server = make_server([a, b], optimizer=optimizer) + await relay_player_movement(server, b) + self.assertEqual(a.sent, []) + + +if __name__ == "__main__": + unittest.main() From 4b309095997d94415cbe7a0b49b0ed794d583ccc Mon Sep 17 00:00:00 2001 From: Kimi Date: Mon, 31 Aug 2026 12:52:10 +0800 Subject: [PATCH 3/9] feat: wire packet batching into entity sync broadcast path - MinecraftServer.queue_or_send(): route high-frequency packets through the network optimizer's batch queue (single TCP write per tick), falling back to direct send when batching is disabled - _tick_entity_sync teleports now use queue_or_send; extracted build_entity_teleport_payload() for reuse - movement rate limiting was wired in 835af3f via relay_player_movement Tests: 90 passed (3 new in tests/test_network_optimizer_wiring.py). --- handlers/play/entities.py | 11 +++-- network/server.py | 20 ++++++++- tests/test_network_optimizer_wiring.py | 56 ++++++++++++++++++++++++++ 3 files changed, 82 insertions(+), 5 deletions(-) create mode 100644 tests/test_network_optimizer_wiring.py diff --git a/handlers/play/entities.py b/handlers/play/entities.py index 0699bbe..1c227ab 100755 --- a/handlers/play/entities.py +++ b/handlers/play/entities.py @@ -82,8 +82,8 @@ async def _send_generic_entity_spawn(conn: Connection, entity): await conn.send_packet(0x01, bytes(payload)) -async def _send_entity_teleport(conn: Connection, entity): - from protocol.packet_map import get_clientbound_packet +def build_entity_teleport_payload(entity) -> bytes: + """构建 Entity Teleport 数据包负载。""" payload = bytearray() payload.extend(write_varint(entity.entity_id)) payload.extend(write_double(entity.x)) @@ -92,9 +92,14 @@ async def _send_entity_teleport(conn: Connection, entity): payload.extend(write_angle(entity.yaw)) payload.extend(write_angle(entity.pitch)) payload.extend(write_boolean(entity.on_ground)) + return bytes(payload) + + +async def _send_entity_teleport(conn: Connection, entity): + from protocol.packet_map import get_clientbound_packet pid = get_clientbound_packet(conn.protocol_version, "entity_teleport") if pid is not None: - await conn.send_packet(pid, bytes(payload)) + await conn.send_packet(pid, build_entity_teleport_payload(entity)) def build_remove_entities(entity_ids: list[int]) -> bytes: diff --git a/network/server.py b/network/server.py index a87bec5..0552902 100755 --- a/network/server.py +++ b/network/server.py @@ -201,6 +201,16 @@ def broadcast_system_message(self, text: str, exclude: Connection = None): if conn != exclude and conn.version_handler is not None: asyncio.ensure_future(conn.version_handler.send_system_chat(conn, text)) + async def queue_or_send(self, conn: Connection, packet_id: int, payload: bytes): + """ + 优先经网络优化器批量发送 (合并为单次 TCP write), + 优化器未启用时直接发送。用于高频广播路径 (如实体位置同步)。 + """ + optimizer = self.network_optimizer + if optimizer is not None and optimizer.queue_packet(conn, packet_id, payload): + return + await conn.send_packet(packet_id, payload) + async def set_weather(self, weather: str, duration: int = 0): """ 设置天气并立即同步到所有客户端。 @@ -1040,7 +1050,6 @@ async def _tick_entity_interactions(self): async def _tick_entity_sync(self): """向客户端同步基础实体位置与移除。""" from handlers.play import ( - _send_entity_teleport, _send_entity_remove, _send_experience_orb_spawn, _send_generic_entity_spawn, @@ -1081,4 +1090,11 @@ async def _tick_entity_sync(self): await _send_generic_entity_spawn(conn, entity) conn.tracked_entities.add(entity.entity_id) continue - await _send_entity_teleport(conn, entity) + # 高频传送包走批量发送, 合并为单次 TCP write + from handlers.play.entities import build_entity_teleport_payload + from protocol.packet_map import get_clientbound_packet + teleport_pid = get_clientbound_packet( + conn.protocol_version, "entity_teleport") + if teleport_pid is not None: + await self.queue_or_send( + conn, teleport_pid, build_entity_teleport_payload(entity)) diff --git a/tests/test_network_optimizer_wiring.py b/tests/test_network_optimizer_wiring.py new file mode 100644 index 0000000..cc3e7dd --- /dev/null +++ b/tests/test_network_optimizer_wiring.py @@ -0,0 +1,56 @@ +import unittest +from types import SimpleNamespace + +from network.server import MinecraftServer + + +class FakeConn: + def __init__(self): + self.username = "Steve" + self.address = "127.0.0.1:25565" + self.compression_threshold = -1 + self.alive = True + self.sent = [] + + async def send_packet(self, packet_id, payload=b""): + self.sent.append((packet_id, payload)) + + +class FakeOptimizer: + def __init__(self, accept=True): + self.accept = accept + self.queued = [] + + def queue_packet(self, conn, packet_id, payload): + if not self.accept: + return False + self.queued.append((conn, packet_id, payload)) + return True + + +class QueueOrSendTests(unittest.IsolatedAsyncioTestCase): + async def test_queues_when_optimizer_running(self): + conn = FakeConn() + optimizer = FakeOptimizer() + server = SimpleNamespace(network_optimizer=optimizer) + await MinecraftServer.queue_or_send(server, conn, 0x70, b"abc") + self.assertEqual(len(optimizer.queued), 1) + self.assertEqual(optimizer.queued[0][1], 0x70) + self.assertEqual(conn.sent, []) + + async def test_direct_send_when_optimizer_absent(self): + conn = FakeConn() + server = SimpleNamespace(network_optimizer=None) + await MinecraftServer.queue_or_send(server, conn, 0x70, b"abc") + self.assertEqual(conn.sent, [(0x70, b"abc")]) + + async def test_direct_send_when_queue_rejects(self): + conn = FakeConn() + optimizer = FakeOptimizer(accept=False) + server = SimpleNamespace(network_optimizer=optimizer) + await MinecraftServer.queue_or_send(server, conn, 0x70, b"abc") + self.assertEqual(conn.sent, [(0x70, b"abc")]) + + +if __name__ == "__main__": + unittest.main() From dac2faf718879941e83ab99fa23648f206bad41e Mon Sep 17 00:00:00 2001 From: Kimi Date: Mon, 31 Aug 2026 12:55:50 +0800 Subject: [PATCH 4/9] feat: combat system - attack mobs, death drops, XP, ranged mobs - handlers/play/combat.py: Interact (0x14) attack handling with per-player attack cooldown, weapon damage table (swords/axes/trident), damage_mob() with death drops + XP orb spawning - MOB_PROFILES gains drops/xp for all mobs; skeleton marked ranged (damage reason distinguishes arrows from melee) - wire interact packet dispatch (was a TODO stub) Note: simple pathfinding (1-block step-up when chasing) already existed in MobEntity._apply_physics; full A* pathfinding remains future work. Tests: 98 passed (8 new in tests/test_combat.py). --- handlers/play/__init__.py | 10 ++- handlers/play/combat.py | 140 ++++++++++++++++++++++++++++++++++++++ network/server.py | 11 +-- tests/test_combat.py | 117 +++++++++++++++++++++++++++++++ world/entities.py | 15 ++++ 5 files changed, 287 insertions(+), 6 deletions(-) create mode 100644 handlers/play/combat.py create mode 100644 tests/test_combat.py diff --git a/handlers/play/__init__.py b/handlers/play/__init__.py index d1c34b0..705c626 100755 --- a/handlers/play/__init__.py +++ b/handlers/play/__init__.py @@ -139,6 +139,12 @@ ENTITY_TYPE_IDS, ) +from handlers.play.combat import ( + _handle_interact, + damage_mob, + get_attack_damage, +) + from handlers.play.spawn import ( _resolve_spawn_location, _is_safe_player_location, @@ -277,8 +283,8 @@ async def handle_play(conn: Connection, packet_id: int, payload: bytes, _handle_close_container(conn, payload) elif _is_serverbound_packet(conn, packet_id, "interact", 0x14): - # Interact (Entity) - pass # TODO: entity interaction + # Interact (Entity): 攻击动作由战斗系统处理 + await _handle_interact(conn, payload, server) elif _is_serverbound_packet(conn, packet_id, "set_creative_mode_slot", 0x22): # Set Creative Mode Slot diff --git a/handlers/play/combat.py b/handlers/play/combat.py new file mode 100644 index 0000000..c28f13e --- /dev/null +++ b/handlers/play/combat.py @@ -0,0 +1,140 @@ +# ============================================================ +# PyMC - 战斗系统 +# 玩家攻击生物、生物死亡掉落与经验 +# ============================================================ + +""" +战斗处理。 + +包括: + - _handle_interact: 处理 Interact (serverbound 0x14) 攻击动作 + - damage_mob: 对生物造成伤害, 死亡时生成掉落物和经验球 + - WEAPON_DAMAGE: 手持武器伤害表 + +Interact 包格式 (1.21.1): + Entity ID (VarInt), Type (VarInt: 0=interact, 1=attack, 2=interact_at), + [type=2: target XYZ float x3], [type!=1: hand VarInt], sneaking (bool) +""" + +import logging +import math +import random +import time + +from protocol.data_types import read_varint +from network.connection import Connection + +logger = logging.getLogger("PyMC.战斗") + +INTERACT_TYPE_INTERACT = 0 +INTERACT_TYPE_ATTACK = 1 +INTERACT_TYPE_INTERACT_AT = 2 + +# 攻击判定距离 (平方), 比原版 3 格略宽松 +ATTACK_RANGE_SQUARED = 16.0 +# 攻击冷却 (秒), 防止客户端高频攻击包刷伤害 +ATTACK_COOLDOWN_SECONDS = 0.4 + +# 手持武器伤害 (空手 = 1.0) +WEAPON_DAMAGE = { + "minecraft:wooden_sword": 4.0, "minecraft:golden_sword": 4.0, + "minecraft:stone_sword": 5.0, "minecraft:iron_sword": 6.0, + "minecraft:diamond_sword": 7.0, "minecraft:netherite_sword": 8.0, + "minecraft:wooden_axe": 7.0, "minecraft:golden_axe": 7.0, + "minecraft:stone_axe": 9.0, "minecraft:iron_axe": 9.0, + "minecraft:diamond_axe": 9.0, "minecraft:netherite_axe": 10.0, + "minecraft:trident": 9.0, "minecraft:mace": 6.0, +} + +_rng = random.Random() + + +def parse_interact(payload: bytes) -> tuple[int, int] | None: + """解析 Interact 包, 返回 (entity_id, action_type)。""" + try: + entity_id, offset = read_varint(payload, 0) + action_type, _ = read_varint(payload, offset) + return entity_id, action_type + except (IndexError, ValueError): + return None + + +def get_attack_damage(conn: Connection) -> float: + """根据手持物品计算攻击伤害。""" + inventory = getattr(conn, "inventory_obj", None) + if inventory is not None: + held = inventory.get_held_item_from_slot(conn.selected_hotbar_slot) + if held is not None and not held.is_empty: + return WEAPON_DAMAGE.get(held.item_id, 1.0) + return 1.0 + + +async def _handle_interact(conn: Connection, payload: bytes, server): + """处理 Interact 包中的攻击动作。""" + parsed = parse_interact(payload) + if parsed is None: + return + entity_id, action_type = parsed + if action_type != INTERACT_TYPE_ATTACK: + return + + # 攻击冷却 + now = time.monotonic() + last_attack = getattr(conn, "_last_attack_time", 0.0) + if now - last_attack < ATTACK_COOLDOWN_SECONDS: + return + conn._last_attack_time = now + + entity = server.entity_manager.get_entity(entity_id) + if entity is None or entity.kind != "mob": + return + if entity.distance_squared_to(conn.x, conn.y, conn.z) > ATTACK_RANGE_SQUARED: + return + + damage = get_attack_damage(conn) + killed = damage_mob(server, entity, damage, source=conn) + if killed: + from handlers.play.chat import send_system_message + mob_name = entity.metadata.get("mob_type", "生物") + await send_system_message(conn, f"[PyMC] 你击杀了 {mob_name}") + + +def damage_mob(server, entity, amount: float, source=None) -> bool: + """ + 对生物造成伤害。死亡时生成掉落物和经验球并移除实体。 + + Returns: + True 如果生物被击杀。 + """ + if entity.kind != "mob": + return False + entity.health -= float(amount) + entity.metadata["health"] = entity.health + if entity.health > 0: + return False + + profile = getattr(entity, "profile", {}) + + # 掉落物 + for drop in profile.get("drops", []): + item_name, min_count, max_count = drop + count = _rng.randint(min_count, max_count) + if count <= 0: + continue + item = server.entity_manager.create_item( + entity.x, entity.y + 0.3, entity.z, item_name, count) + item.pickup_delay = 10 # 0.5s 拾取延迟, 避免死亡瞬间被吸走 + + # 经验球 + xp_range = profile.get("xp", (0, 0)) + xp = _rng.randint(xp_range[0], xp_range[1]) if xp_range else 0 + if xp > 0: + server.entity_manager.create_experience_orb( + entity.x, entity.y + 0.3, entity.z, xp) + + server.entity_manager.remove_entity(entity.entity_id) + logger.info( + f"生物 {entity.metadata.get('mob_type', '?')} (id={entity.entity_id}) " + f"被击杀, 掉落已生成" + ) + return True diff --git a/network/server.py b/network/server.py index 0552902..53f64f4 100755 --- a/network/server.py +++ b/network/server.py @@ -1035,16 +1035,19 @@ async def _tick_entity_interactions(self): if entity.kind == "mob" and entity.metadata.get("category") == "hostile": if getattr(entity, "attack_cooldown", 0) > 0: continue + profile = getattr(entity, "profile", {}) + is_ranged = bool(profile.get("ranged", False)) for player in players: if player.gamemode in {"creative", "spectator"}: continue - attack_range = float(getattr(entity, "profile", {}).get("attack_range", 1.7)) + attack_range = float(profile.get("attack_range", 1.7)) if entity.distance_squared_to(player.x, player.y, player.z) > attack_range * attack_range: continue - entity.attack_cooldown = int(getattr(entity, "profile", {}).get("attack_interval", 20)) - damage = float(getattr(entity, "profile", {}).get("attack_damage", 2.0)) + entity.attack_cooldown = int(profile.get("attack_interval", 20)) + damage = float(profile.get("attack_damage", 2.0)) mob_name = entity.metadata.get("mob_type", "生物") - await _damage_player(player, damage, mob_name, self) + reason = f"{mob_name}的箭" if is_ranged else mob_name + await _damage_player(player, damage, reason, self) break async def _tick_entity_sync(self): diff --git a/tests/test_combat.py b/tests/test_combat.py new file mode 100644 index 0000000..c9b0082 --- /dev/null +++ b/tests/test_combat.py @@ -0,0 +1,117 @@ +import unittest +from types import SimpleNamespace + +from handlers.play.combat import ( + INTERACT_TYPE_ATTACK, + damage_mob, + get_attack_damage, + parse_interact, + WEAPON_DAMAGE, +) +from protocol.data_types import write_varint +from world.entities import MOB_PROFILES, MobEntity + + +def build_interact_packet(entity_id: int, action_type: int) -> bytes: + payload = bytearray() + payload.extend(write_varint(entity_id)) + payload.extend(write_varint(action_type)) + payload.extend(b"\x00") # sneaking = false + return bytes(payload) + + +class FakeEntityManager: + def __init__(self): + self.entities = {} + self.removed = [] + self.created_items = [] + self.created_orbs = [] + self._next_id = 1000 + + def add(self, entity): + self.entities[entity.entity_id] = entity + + def get_entity(self, entity_id): + return self.entities.get(entity_id) + + def remove_entity(self, entity_id): + self.removed.append(entity_id) + return self.entities.pop(entity_id, None) + + def create_item(self, x, y, z, item_name, count): + self.created_items.append((item_name, count)) + return SimpleNamespace(pickup_delay=0) + + def create_experience_orb(self, x, y, z, count): + self.created_orbs.append(count) + + +class ParseInteractTests(unittest.TestCase): + def test_parse_attack(self): + payload = build_interact_packet(42, INTERACT_TYPE_ATTACK) + self.assertEqual(parse_interact(payload), (42, INTERACT_TYPE_ATTACK)) + + def test_parse_garbage_returns_none(self): + self.assertIsNone(parse_interact(b"")) + self.assertIsNone(parse_interact(b"\xff")) + + +class WeaponDamageTests(unittest.TestCase): + def test_fist_damage(self): + conn = SimpleNamespace(inventory_obj=None, selected_hotbar_slot=0) + self.assertEqual(get_attack_damage(conn), 1.0) + + def test_sword_damage(self): + held = SimpleNamespace(item_id="minecraft:diamond_sword", is_empty=False) + inventory = SimpleNamespace(get_held_item_from_slot=lambda slot: held) + conn = SimpleNamespace(inventory_obj=inventory, selected_hotbar_slot=0) + self.assertEqual( + get_attack_damage(conn), WEAPON_DAMAGE["minecraft:diamond_sword"]) + + +class DamageMobTests(unittest.TestCase): + def make_mob(self, mob_type="zombie"): + return MobEntity(entity_id=7, x=0.0, y=64.0, z=0.0, mob_type=mob_type) + + def test_non_lethal_hit(self): + manager = FakeEntityManager() + mob = self.make_mob() + manager.add(mob) + server = SimpleNamespace(entity_manager=manager) + killed = damage_mob(server, mob, 5.0) + self.assertFalse(killed) + self.assertEqual(mob.health, MOB_PROFILES["zombie"]["health"] - 5.0) + self.assertEqual(manager.removed, []) + + def test_kill_spawns_drops_and_xp(self): + manager = FakeEntityManager() + mob = self.make_mob("cow") + manager.add(mob) + server = SimpleNamespace(entity_manager=manager) + killed = damage_mob(server, mob, 999.0) + self.assertTrue(killed) + self.assertEqual(manager.removed, [7]) + item_names = [name for name, _ in manager.created_items] + self.assertIn("minecraft:beef", item_names) + self.assertTrue(all(c >= 1 for _, c in manager.created_items)) + self.assertEqual(len(manager.created_orbs), 1) + self.assertTrue(1 <= manager.created_orbs[0] <= 3) + + def test_zero_roll_drops_may_be_empty(self): + manager = FakeEntityManager() + mob = self.make_mob("zombie") # rotten_flesh 0-2 + manager.add(mob) + server = SimpleNamespace(entity_manager=manager) + damage_mob(server, mob, 999.0) + for name, count in manager.created_items: + self.assertEqual(name, "minecraft:rotten_flesh") + self.assertGreaterEqual(count, 1) + + def test_mob_profiles_have_drops_and_xp(self): + for mob_type, profile in MOB_PROFILES.items(): + self.assertIn("drops", profile, mob_type) + self.assertIn("xp", profile, mob_type) + + +if __name__ == "__main__": + unittest.main() diff --git a/world/entities.py b/world/entities.py index 9e9d450..a474059 100755 --- a/world/entities.py +++ b/world/entities.py @@ -17,6 +17,8 @@ "wander_interval": 120, "look_range": 8.0, "height": 0.9, + "drops": [("minecraft:porkchop", 1, 3)], + "xp": (1, 3), }, "cow": { "category": "passive", @@ -25,6 +27,8 @@ "wander_interval": 120, "look_range": 8.0, "height": 1.4, + "drops": [("minecraft:beef", 1, 3), ("minecraft:leather", 0, 2)], + "xp": (1, 3), }, "sheep": { "category": "passive", @@ -33,6 +37,8 @@ "wander_interval": 120, "look_range": 8.0, "height": 1.3, + "drops": [("minecraft:mutton", 1, 2), ("minecraft:white_wool", 1, 1)], + "xp": (1, 3), }, "zombie": { "category": "hostile", @@ -43,6 +49,8 @@ "attack_range": 1.7, "attack_interval": 20, "height": 1.95, + "drops": [("minecraft:rotten_flesh", 0, 2)], + "xp": (5, 5), }, "skeleton": { "category": "hostile", @@ -53,6 +61,9 @@ "attack_range": 15.0, "attack_interval": 30, "height": 1.99, + "ranged": True, + "drops": [("minecraft:bone", 0, 2), ("minecraft:arrow", 0, 2)], + "xp": (5, 5), }, "creeper": { "category": "hostile", @@ -63,6 +74,8 @@ "attack_range": 2.4, "attack_interval": 35, "height": 1.7, + "drops": [("minecraft:gunpowder", 0, 2)], + "xp": (5, 5), }, "spider": { "category": "hostile", @@ -73,6 +86,8 @@ "attack_range": 1.9, "attack_interval": 20, "height": 0.9, + "drops": [("minecraft:string", 0, 2), ("minecraft:spider_eye", 0, 1)], + "xp": (5, 5), }, } From 0b8691c85ec099a930b726b7e7e7232a92385c0c Mon Sep 17 00:00:00 2001 From: Kimi Date: Mon, 31 Aug 2026 12:58:55 +0800 Subject: [PATCH 5/9] feat: item durability and basic enchantment effects - world/item_properties.py: max durability table (tools/weapons/armor, Java values), damage_item() with unbreaking enchant support, damage_held_item() with break handling (clear slot + inventory sync) - sharpness enchant adds attack damage (0.5*level + 0.5) - durability consumed on block break and mob attacks in survival/adventure mode - fix /enchant: used dict-style access on ItemStack (__slots__) and a nonexistent get_item_in_slot(); now stores in ItemStack.nbt and syncs Tests: 106 passed (7 new in tests/test_item_properties.py). --- commands/vanilla/enchant.py | 11 +-- handlers/play/blocks.py | 5 ++ handlers/play/combat.py | 12 +++- tests/test_combat.py | 3 +- tests/test_item_properties.py | 68 ++++++++++++++++++ world/item_properties.py | 131 ++++++++++++++++++++++++++++++++++ 6 files changed, 222 insertions(+), 8 deletions(-) create mode 100644 tests/test_item_properties.py create mode 100644 world/item_properties.py diff --git a/commands/vanilla/enchant.py b/commands/vanilla/enchant.py index 5eaef3a..6e42ef8 100755 --- a/commands/vanilla/enchant.py +++ b/commands/vanilla/enchant.py @@ -58,11 +58,12 @@ async def _execute(ctx: CommandContext) -> int: # Apply enchantment (record on inventory item if available) if hasattr(target, 'inventory_obj') and target.inventory_obj is not None: slot = target.selected_hotbar_slot - item = target.inventory_obj.get_item_in_slot(slot) - if item is not None: - if "enchantments" not in item: - item["enchantments"] = {} - item["enchantments"][enchant_name] = level + item = target.inventory_obj.get_slot(slot) + if item is not None and not item.is_empty: + from world.item_properties import add_enchantment + add_enchantment(item, enchant_name, level) + from world.inventory import send_inventory_sync + await send_inventory_sync(target) await ctx.reply(f"[PyMC] 已附魔 {target.username} 手持物品: {enchant_name} {level}") return SUCCESS else: diff --git a/handlers/play/blocks.py b/handlers/play/blocks.py index 0c8a708..8e99f4d 100755 --- a/handlers/play/blocks.py +++ b/handlers/play/blocks.py @@ -307,6 +307,11 @@ async def _handle_block_dig(conn: Connection, payload: bytes, server): return await _broadcast_block_change(server, x, y, z, AIR) + # 生存/冒险模式下消耗工具耐久 + if conn.gamemode in ("survival", "adventure"): + from world.item_properties import damage_held_item + await damage_held_item(conn, server) + # Notify redstone engine of block change if server.redstone_engine: server.redstone_engine.on_block_change(x, y, z, current, AIR) diff --git a/handlers/play/combat.py b/handlers/play/combat.py index c28f13e..6d65d0f 100644 --- a/handlers/play/combat.py +++ b/handlers/play/combat.py @@ -60,12 +60,14 @@ def parse_interact(payload: bytes) -> tuple[int, int] | None: def get_attack_damage(conn: Connection) -> float: - """根据手持物品计算攻击伤害。""" + """根据手持物品计算攻击伤害 (含锋利附魔加成)。""" + from world.item_properties import sharpness_damage_bonus inventory = getattr(conn, "inventory_obj", None) if inventory is not None: held = inventory.get_held_item_from_slot(conn.selected_hotbar_slot) if held is not None and not held.is_empty: - return WEAPON_DAMAGE.get(held.item_id, 1.0) + base = WEAPON_DAMAGE.get(held.item_id, 1.0) + return base + sharpness_damage_bonus(held) return 1.0 @@ -93,6 +95,12 @@ async def _handle_interact(conn: Connection, payload: bytes, server): damage = get_attack_damage(conn) killed = damage_mob(server, entity, damage, source=conn) + + # 生存/冒险模式下消耗武器耐久 + if conn.gamemode in ("survival", "adventure"): + from world.item_properties import damage_held_item + await damage_held_item(conn, server) + if killed: from handlers.play.chat import send_system_message mob_name = entity.metadata.get("mob_type", "生物") diff --git a/tests/test_combat.py b/tests/test_combat.py index c9b0082..7df2140 100644 --- a/tests/test_combat.py +++ b/tests/test_combat.py @@ -62,7 +62,8 @@ def test_fist_damage(self): self.assertEqual(get_attack_damage(conn), 1.0) def test_sword_damage(self): - held = SimpleNamespace(item_id="minecraft:diamond_sword", is_empty=False) + held = SimpleNamespace( + item_id="minecraft:diamond_sword", is_empty=False, nbt={}) inventory = SimpleNamespace(get_held_item_from_slot=lambda slot: held) conn = SimpleNamespace(inventory_obj=inventory, selected_hotbar_slot=0) self.assertEqual( diff --git a/tests/test_item_properties.py b/tests/test_item_properties.py new file mode 100644 index 0000000..ec85db3 --- /dev/null +++ b/tests/test_item_properties.py @@ -0,0 +1,68 @@ +import unittest +from types import SimpleNamespace + +from world.inventory import ItemStack +from world.item_properties import ( + MAX_DURABILITY, + add_enchantment, + damage_item, + get_enchantment_level, + get_max_durability, + sharpness_damage_bonus, +) + + +class DurabilityTableTests(unittest.TestCase): + def test_tier_values(self): + self.assertEqual(get_max_durability("minecraft:wooden_pickaxe"), 59) + self.assertEqual(get_max_durability("minecraft:stone_sword"), 131) + self.assertEqual(get_max_durability("minecraft:iron_axe"), 250) + self.assertEqual(get_max_durability("minecraft:diamond_shovel"), 1561) + self.assertEqual(get_max_durability("minecraft:netherite_sword"), 2031) + + def test_non_tool_has_no_durability(self): + self.assertEqual(get_max_durability("minecraft:stone"), 0) + self.assertEqual(get_max_durability("minecraft:apple"), 0) + + +class EnchantmentStorageTests(unittest.TestCase): + def test_add_and_read(self): + item = ItemStack("minecraft:iron_sword", 1) + add_enchantment(item, "sharpness", 3) + self.assertEqual(get_enchantment_level(item, "sharpness"), 3) + self.assertEqual(get_enchantment_level(item, "unbreaking"), 0) + + def test_level_clamped(self): + item = ItemStack("minecraft:iron_sword", 1) + add_enchantment(item, "sharpness", 999) + self.assertEqual(get_enchantment_level(item, "sharpness"), 255) + + def test_sharpness_bonus(self): + item = ItemStack("minecraft:iron_sword", 1) + self.assertEqual(sharpness_damage_bonus(item), 0.0) + add_enchantment(item, "sharpness", 2) + self.assertEqual(sharpness_damage_bonus(item), 1.5) + + +class DamageItemTests(unittest.TestCase): + def test_durability_consumed_until_break(self): + item = ItemStack("minecraft:wooden_sword", 1) + for _ in range(58): + self.assertFalse(damage_item(item)) + self.assertTrue(damage_item(item)) # 第 59 次损毁 + + def test_non_tool_never_breaks(self): + item = ItemStack("minecraft:stone", 64) + self.assertFalse(damage_item(item, 100)) + + def test_unbreaking_extends_life(self): + # unbreaking 3: 每次仅 1/4 概率消耗, 59 次攻击几乎不可能耗尽 59 点耐久 + item = ItemStack("minecraft:wooden_sword", 1) + add_enchantment(item, "unbreaking", 3) + broke = any(damage_item(item) for _ in range(59)) + self.assertFalse(broke) + self.assertLess(item.damage, 59) + + +if __name__ == "__main__": + unittest.main() diff --git a/world/item_properties.py b/world/item_properties.py new file mode 100644 index 0000000..07e0dee --- /dev/null +++ b/world/item_properties.py @@ -0,0 +1,131 @@ +# ============================================================ +# PyMC - 物品属性: 耐久与附魔 +# ============================================================ + +""" +工具/武器/装备的耐久度与附魔效果。 + +- MAX_DURABILITY: 各类可损耗物品的最大耐久 +- damage_held_item: 消耗手持物品耐久, 耐久耗尽时损毁 +- 附魔存储在 ItemStack.nbt["enchantments"] = {name: level} +- 已接入效果: + - sharpness (锋利): 攻击伤害 +0.5*level + 0.5 + - unbreaking (耐久): 1/(level+1) 概率才消耗耐久 +""" + +import logging +import random + +logger = logging.getLogger("PyMC.物品") + +_rng = random.Random() + +# --- 工具/武器最大耐久 (Java 版数值) --- +_TIER_DURABILITY = { + "wooden": 59, "golden": 32, "stone": 131, + "iron": 250, "diamond": 1561, "netherite": 2031, +} +_TOOL_KINDS = ("sword", "pickaxe", "axe", "shovel", "hoe") + +MAX_DURABILITY: dict[str, int] = { + f"minecraft:{tier}_{kind}": durability + for tier, durability in _TIER_DURABILITY.items() + for kind in _TOOL_KINDS +} +MAX_DURABILITY.update({ + "minecraft:bow": 384, "minecraft:crossbow": 465, + "minecraft:trident": 250, "minecraft:mace": 500, + "minecraft:shears": 238, "minecraft:shield": 336, + "minecraft:flint_and_steel": 64, "minecraft:fishing_rod": 64, + "minecraft:elytra": 432, + # 盔甲 (头盔/胸甲/护腿/靴子) + "minecraft:leather_helmet": 55, "minecraft:leather_chestplate": 80, + "minecraft:leather_leggings": 75, "minecraft:leather_boots": 65, + "minecraft:golden_helmet": 77, "minecraft:golden_chestplate": 112, + "minecraft:golden_leggings": 105, "minecraft:golden_boots": 91, + "minecraft:chainmail_helmet": 165, "minecraft:chainmail_chestplate": 240, + "minecraft:chainmail_leggings": 225, "minecraft:chainmail_boots": 195, + "minecraft:iron_helmet": 165, "minecraft:iron_chestplate": 240, + "minecraft:iron_leggings": 225, "minecraft:iron_boots": 195, + "minecraft:diamond_helmet": 363, "minecraft:diamond_chestplate": 528, + "minecraft:diamond_leggings": 495, "minecraft:diamond_boots": 429, + "minecraft:netherite_helmet": 407, "minecraft:netherite_chestplate": 592, + "minecraft:netherite_leggings": 555, "minecraft:netherite_boots": 481, + "minecraft:turtle_helmet": 275, +}) + + +def get_max_durability(item_id: str) -> int: + """物品最大耐久, 不可损耗物品返回 0。""" + return MAX_DURABILITY.get(item_id, 0) + + +def get_enchantment_level(item, name: str) -> int: + """读取物品附魔等级, 无该附魔返回 0。""" + if item is None: + return 0 + enchantments = item.nbt.get("enchantments", {}) + return int(enchantments.get(name, 0)) + + +def add_enchantment(item, name: str, level: int): + """给物品添加附魔 (存储在 NBT 中)。""" + if "enchantments" not in item.nbt: + item.nbt["enchantments"] = {} + item.nbt["enchantments"][name] = max(1, min(255, int(level))) + + +def sharpness_damage_bonus(item) -> float: + """锋利附魔的攻击伤害加成 (Java 1.9+: 0.5*level + 0.5)。""" + level = get_enchantment_level(item, "sharpness") + return 0.5 * level + 0.5 if level > 0 else 0.0 + + +def damage_item(item, amount: int = 1) -> bool: + """ + 消耗物品耐久 (应用耐久附魔)。 + + Returns: + True 如果物品损毁。 + """ + max_durability = get_max_durability(item.item_id) + if max_durability <= 0: + return False + + unbreaking = get_enchantment_level(item, "unbreaking") + for _ in range(max(1, amount)): + if unbreaking > 0 and _rng.random() > 1.0 / (unbreaking + 1): + continue # 耐久附魔: 本次不消耗 + item.damage += 1 + + if item.damage >= max_durability: + return True + return False + + +async def damage_held_item(conn, server, amount: int = 1) -> bool: + """ + 消耗玩家手持物品的耐久。损毁时清空槽位并同步物品栏。 + + Returns: + True 如果物品损毁。 + """ + inventory = getattr(conn, "inventory_obj", None) + if inventory is None: + return False + slot = conn.selected_hotbar_slot + item = inventory.get_slot(slot) + if item is None or item.is_empty: + return False + + if not damage_item(item, amount): + return False + + # 物品损毁 + inventory.set_slot(slot, None) + logger.info(f"{conn.username} 的 {item.item_id} 已损毁") + from handlers.play.chat import send_system_message + await send_system_message(conn, f"[PyMC] 你的 {item.item_id} 已损毁") + from world.inventory import send_inventory_sync + await send_inventory_sync(conn) + return True From c7e132d481f43034ca293e472c8e125559f60ff0 Mon Sep 17 00:00:00 2001 From: Kimi Date: Mon, 31 Aug 2026 13:00:45 +0800 Subject: [PATCH 6/9] fix: complete core fluid rules - falling columns and infinite sources - falling water/lava (level 8-15) no longer dries itself up mid-column: a falling block directly above now counts as a valid feeder - falling fluid spreads horizontally at level 1 when it lands (previously level>=8 never passed the spread check, so waterfalls pooled nothing at the bottom) - infinite water sources: flow into a position with >=2 adjacent water sources and a solid/source block below now forms a source block Tests: 112 passed (6 new in tests/test_fluid_rules.py). --- tests/test_fluid_rules.py | 123 ++++++++++++++++++++++++++++++++++++++ world/fluids.py | 40 +++++++++++-- 2 files changed, 158 insertions(+), 5 deletions(-) create mode 100644 tests/test_fluid_rules.py diff --git a/tests/test_fluid_rules.py b/tests/test_fluid_rules.py new file mode 100644 index 0000000..93c990e --- /dev/null +++ b/tests/test_fluid_rules.py @@ -0,0 +1,123 @@ +import unittest +from types import SimpleNamespace +from unittest.mock import patch + +from world.blocks import AIR, WATER, LAVA, STONE +from world.fluids import ( + FluidSystem, + _get_fluid_level, + _get_water_state, + _is_solid, +) + + +class GridWorld: + """基于字典的简易方块世界。""" + + def __init__(self): + self.blocks = {} + self._fluid_updates = [] + + def get_block_at(self, x, y, z): + return self.blocks.get((x, y, z), AIR) + + def set_block(self, x, y, z, state): + self.blocks[(x, y, z)] = state + return {(x // 16, z // 16)} + + +def make_fluid_system(world): + server = SimpleNamespace( + get_block_at=world.get_block_at, + _fluid_updates=world._fluid_updates, + ) + fs = FluidSystem(server) + return fs + + +def run_flow(fs, world, x, y, z, fluid_type="water", ticks=1): + """放置流体并推进指定 tick 数。""" + fs.on_fluid_place(x, y, z, fluid_type) + with patch("world.editing.set_world_block", + lambda server, bx, by, bz, state: world.set_block(bx, by, bz, state)): + for _ in range(ticks): + fs.tick() + + +class FallingWaterTests(unittest.TestCase): + def test_falling_water_does_not_dry_up(self): + """下落水柱的中间段不应被误判为无源而干涸。""" + world = GridWorld() + world.set_block(0, 64, 0, WATER) # 源头 + world.set_block(0, 63, 0, _get_water_state(0, falling=True)) + world.set_block(0, 62, 0, _get_water_state(0, falling=True)) + world.set_block(0, 61, 0, STONE) # 地面 + fs = make_fluid_system(world) + + # 直接处理中间下落段: 上方是下落水 (level 8), 不应干涸 + with patch("world.editing.set_world_block", + lambda s, bx, by, bz, st: world.set_block(bx, by, bz, st)): + fs._process_flow(0, 63, 0, world.get_block_at(0, 63, 0), "water", []) + self.assertNotEqual(world.get_block_at(0, 63, 0), AIR) + + def test_falling_water_spreads_on_landing(self): + """下落到地面的水应能向四周扩散 (此前 level=8 永远不扩散)。""" + world = GridWorld() + world.set_block(0, 64, 0, WATER) + world.set_block(0, 63, 0, _get_water_state(0, falling=True)) + world.set_block(0, 62, 0, STONE) # 落点地面 + fs = make_fluid_system(world) + + with patch("world.editing.set_world_block", + lambda s, bx, by, bz, st: world.set_block(bx, by, bz, st)): + fs._process_flow(0, 63, 0, world.get_block_at(0, 63, 0), "water", []) + + # 下落水下方是固体, 应向水平方向扩散 level 1 + spread = any( + world.get_block_at(dx, 63, dz) != AIR + for dx, dz in [(1, 0), (-1, 0), (0, 1), (0, -1)] + ) + self.assertTrue(spread) + + +class InfiniteSourceTests(unittest.TestCase): + def test_two_sources_plus_solid_below_form_source(self): + world = GridWorld() + world.set_block(0, 63, 0, STONE) # 下方固体 + world.set_block(-1, 64, 0, WATER) # 西侧水源 + world.set_block(1, 64, 0, WATER) # 东侧水源 + fs = make_fluid_system(world) + self.assertTrue(fs._can_form_infinite_source(0, 64, 0)) + + def test_single_source_does_not_form(self): + world = GridWorld() + world.set_block(0, 63, 0, STONE) + world.set_block(-1, 64, 0, WATER) + fs = make_fluid_system(world) + self.assertFalse(fs._can_form_infinite_source(0, 64, 0)) + + def test_no_solid_below_does_not_form(self): + world = GridWorld() + world.set_block(-1, 64, 0, WATER) + world.set_block(1, 64, 0, WATER) + fs = make_fluid_system(world) + self.assertFalse(fs._can_form_infinite_source(0, 64, 0)) + + def test_flow_creates_source_block(self): + """两个水源之间的空位流入水时应直接变成水源。""" + world = GridWorld() + world.set_block(0, 63, 0, STONE) + world.set_block(-1, 64, 0, WATER) + world.set_block(1, 64, 0, WATER) + fs = make_fluid_system(world) + + with patch("world.editing.set_world_block", + lambda s, bx, by, bz, st: world.set_block(bx, by, bz, st)): + fs._process_flow(-1, 64, 0, WATER, "water", []) + + self.assertEqual(world.get_block_at(0, 64, 0), WATER) + self.assertEqual(_get_fluid_level(world.get_block_at(0, 64, 0)), 0) + + +if __name__ == "__main__": + unittest.main() diff --git a/world/fluids.py b/world/fluids.py index fa34b3c..317660b 100755 --- a/world/fluids.py +++ b/world/fluids.py @@ -292,6 +292,7 @@ def _process_flow(self, x: int, y: int, z: int, current_state: int, level = _get_fluid_level(current_state) is_source = (level == 0) + is_falling = level >= 8 # 下落中的流体 (level 8-15) speed = WATER_FLOW_SPEED if fluid_type == "water" else (LAVA_FLOW_SPEED_NETHER if self.dimension == "the_nether" else LAVA_FLOW_SPEED) max_dist = WATER_MAX_DISTANCE if fluid_type == "water" else (LAVA_MAX_DISTANCE_NETHER if self.dimension == "the_nether" else LAVA_MAX_DISTANCE) @@ -333,8 +334,9 @@ def _process_flow(self, x: int, y: int, z: int, current_state: int, pass # 2. Horizontal flow (only if can't flow down OR is source) - if level < max_dist or is_source: - new_level = 1 if is_source else level + 1 + # 下落中的流体落地后按等级 1 向四周扩散 + if is_source or is_falling or level < max_dist: + new_level = 1 if (is_source or is_falling) else level + 1 for dx, dz in [(1, 0), (-1, 0), (0, 1), (0, -1)]: nx, nz = x + dx, z + dz @@ -375,7 +377,11 @@ def _process_flow(self, x: int, y: int, z: int, current_state: int, if n_type == fluid_type and n_level <= new_level: continue # Already have equal or better flow - if fluid_type == "water": + # 无限水源: 水平相邻 >=2 个水源且下方为固体/水源时, + # 流入的水直接成为水源 (仅水, 岩浆不适用) + if fluid_type == "water" and self._can_form_infinite_source(nx, y, nz): + new_state = WATER + elif fluid_type == "water": new_state = _get_water_state(new_level) else: new_state = _get_lava_state(new_level) @@ -396,12 +402,13 @@ def _process_flow(self, x: int, y: int, z: int, current_state: int, if neighbor is not None: if fluid_type == "water" and _is_water(neighbor): n_level = _get_fluid_level(neighbor) - if n_level < level: + # 正上方的下落水柱也是合法供给方 + if n_level < level or (dy == 1 and n_level >= 8): has_source_neighbor = True break elif fluid_type == "lava" and _is_lava(neighbor): n_level = _get_fluid_level(neighbor) - if n_level < level: + if n_level < level or (dy == 1 and n_level >= 8): has_source_neighbor = True break @@ -419,6 +426,29 @@ def _process_flow(self, x: int, y: int, z: int, current_state: int, n_speed = WATER_FLOW_SPEED if n_type == "water" else (LAVA_FLOW_SPEED_NETHER if self.dimension == "the_nether" else LAVA_FLOW_SPEED) remaining.append((nx, y, nz, self.tick_count + n_speed, n_type)) + def _can_form_infinite_source(self, x: int, y: int, z: int) -> bool: + """ + 判断流入 (x, y, z) 的水是否应形成无限水源。 + + 原版规则: 下方是固体方块或水源, 且水平相邻有 >= 2 个水源。 + """ + below = self.server.get_block_at(x, y - 1, z) + if below is None: + return False + below_is_base = _is_solid(below) or ( + _is_water(below) and _get_fluid_level(below) == 0 + ) + if not below_is_base: + return False + + source_count = 0 + for dx, dz in [(1, 0), (-1, 0), (0, 1), (0, -1)]: + neighbor = self.server.get_block_at(x + dx, y, z + dz) + if neighbor is not None and _is_water(neighbor): + if _get_fluid_level(neighbor) == 0: + source_count += 1 + return source_count >= 2 + def _notify_fluid_update(self, x: int, y: int, z: int, new_state: int): """Record a fluid update for broadcasting.""" self.server._fluid_updates = getattr(self.server, '_fluid_updates', []) From 56ad91f16d102700578167e7eaf2c295767b7fe2 Mon Sep 17 00:00:00 2001 From: Kimi Date: Mon, 31 Aug 2026 13:04:31 +0800 Subject: [PATCH 7/9] feat: align ore generation with vanilla 1.21.1 batch parameters Rewrote OreVeinGenerator configs to match vanilla worldgen batches: - coal: 30x triangle(136..320) + 20x triangle(0..192, peak 96), size 17 - iron: triangle(-24..56) + triangle(80..384) + uniform(-64..72) batches - copper/gold/redstone/lapis: vanilla counts, ranges, vein sizes - redstone lower batch uses a proper trapezoid height provider - diamond: small/medium/buried batches + 1-per-9-chunks large vein (was a single 2-attempt batch -- far too rare) - implement discard_chance_on_air_exposure (0.5/0.7/1.0 by batch): veins touching air are discarded, buried batches never exposed - emerald kept rare pending biome gating (vanilla: mountains only) Note: parameters now match vanilla configs, but same-seed identical terrain still requires the full vanilla noise router -- out of scope. Tests: 117 passed (5 new in tests/test_ore_distribution.py). --- tests/test_ore_distribution.py | 78 +++++++++++++++++++++ world/vanilla_terrain.py | 120 ++++++++++++++++++++++++--------- 2 files changed, 165 insertions(+), 33 deletions(-) create mode 100644 tests/test_ore_distribution.py diff --git a/tests/test_ore_distribution.py b/tests/test_ore_distribution.py new file mode 100644 index 0000000..7863b03 --- /dev/null +++ b/tests/test_ore_distribution.py @@ -0,0 +1,78 @@ +import random +import unittest + +from world.blocks import STONE, AIR, DIAMOND_ORE, LAPIS_ORE +from world.vanilla_terrain import ( + MIN_Y, + WORLD_HEIGHT, + OreVeinGenerator, +) + + +class TrapezoidSamplerTests(unittest.TestCase): + def test_within_bounds(self): + rng = random.Random(42) + for _ in range(5000): + y = OreVeinGenerator._sample_trapezoid(rng, -64, -32) + self.assertGreaterEqual(y, -64) + self.assertLessEqual(y, -32) + + def test_concentrated_in_middle(self): + """梯形分布中间 1/3 的采样密度应高于边缘。""" + rng = random.Random(42) + samples = [OreVeinGenerator._sample_trapezoid(rng, 0, 90) + for _ in range(20000)] + middle = sum(1 for s in samples if 30 <= s <= 60) + edge = sum(1 for s in samples if s < 15 or s > 75) + self.assertGreater(middle, edge) + + +class OrePlacementTests(unittest.TestCase): + def make_blocks(self, fill=STONE): + return [[[fill] * 16 for _ in range(16)] for _ in range(WORLD_HEIGHT)] + + def count_block(self, blocks, block_id): + return sum( + 1 + for y in range(WORLD_HEIGHT) + for z in range(16) + for x in range(16) + if blocks[y][z][x] == block_id + ) + + def test_deterministic_per_seed_and_chunk(self): + gen = OreVeinGenerator(999) + a = self.make_blocks() + b = self.make_blocks() + gen.place(a, 3, 7) + gen.place(b, 3, 7) + self.assertEqual(a, b) + + def test_buried_lapis_never_exposed_to_air(self): + """buried 批次 (air_discard=1.0) 贴着空气的矿脉必须全部丢弃。""" + # 世界大部分为空气, 仅 y=0 一层石头: 任何矿石都贴着空气 + blocks = [[[AIR] * 16 for _ in range(16)] for _ in range(WORLD_HEIGHT)] + yi = 0 - MIN_Y + for z in range(16): + for x in range(16): + blocks[yi][z][x] = STONE + gen = OreVeinGenerator(12345) + gen.place(blocks, 0, 0) + # buried lapis (air_discard=1.0) 不允许出现; + # 其它无丢弃概率的矿种可能出现, 这里只验证 lapis + self.assertEqual(self.count_block(blocks, LAPIS_ORE), 0) + + def test_diamond_respects_height_range(self): + blocks = self.make_blocks() + OreVeinGenerator(777).place(blocks, 1, 1) + for y in range(WORLD_HEIGHT): + wy = y + MIN_Y + for z in range(16): + for x in range(16): + if blocks[y][z][x] == DIAMOND_ORE: + self.assertGreaterEqual(wy, -64 - 1) # 允许 vein 扩散 1 格 + self.assertLessEqual(wy, 16 + 1) + + +if __name__ == "__main__": + unittest.main() diff --git a/world/vanilla_terrain.py b/world/vanilla_terrain.py index 7d07851..56f018b 100755 --- a/world/vanilla_terrain.py +++ b/world/vanilla_terrain.py @@ -2193,60 +2193,99 @@ def carve(self, blocks: list, base_x: int, base_z: int, class OreVeinGenerator: """ - Vanilla-style ore vein generator with triangular distribution. - - Ore distributions match vanilla Minecraft 1.21.1: - - Coal: y=0 to y=320, peak at y=96 (main) + y=-64 to y=0, peak at y=-64 (underground) - - Iron: y=-64 to y=320, peak at y=16 (common) + y=80 to y=384, peak at y=232 (high) - - Gold: y=-64 to y=32, peak at y=-16 - - Diamond: y=-64 to y=16, peak at y=-64 - - Lapis: y=-64 to y=64, peak at y=0 - - Redstone: y=-64 to y=16 - - Copper: y=-16 to y=112, peak at y=48 - - Emerald: y=-16 to y=320, peak at y=256 (mountains only) + Vanilla-style ore vein generator. + + Ore batch parameters aligned with vanilla 1.21.1 worldgen configs + (ore_coal_upper/lower, ore_iron_middle/upper/small, ore_copper, + ore_gold, ore_redstone(+_lower), ore_lapis(+_buried), + ore_diamond_small/medium/large/buried): + - Coal: 30x triangle(136..320) + 20x triangle(0..192, peak 96) + - Iron: 10x triangle(-24..56, peak 16) + 10x triangle(80..384, peak 232) + + 10x uniform(-64..72) + - Copper: 16x triangle(-16..112, peak 48) + - Gold: 4x triangle(-64..32, peak -16) + - Redstone: 4x uniform(-64..15) + 8x trapezoid(-64..-32) + - Lapis: 2x triangle(-32..32, peak 0) + 4x uniform(-64..64, buried) + - Diamond: 7x triangle(-64..16) + 4x triangle(-64..16, medium) + + 2x uniform(-64..-4, buried) + 1/9 chunks large vein + - Emerald: mountain-gated in vanilla; biome gating not yet wired, + kept rare to avoid flooding non-mountain biomes + + Air exposure: veins whose seed block touches air are discarded with + the batch's probability (vanilla discard_chance_on_air_exposure). + + Known deviations from vanilla: + - emerald batch not biome-gated (kept rare instead) + - badlands extra gold / dripstone extra copper not implemented + - vein shape is a spherical random walk, not vanilla's ore blob """ def __init__(self, seed: int): self._seed = seed + @staticmethod + def _sample_trapezoid(rng, y_min: int, y_max: int) -> int: + """Vanilla trapezoid height provider: ramp up, flat middle, ramp down.""" + span = y_max - y_min + plateau = span // 3 + a = rng.random() * span + b = rng.random() * span + lo, hi = min(a, b), max(a, b) + if hi - lo >= plateau: + return int(y_min + (lo + hi) / 2) + mid = (lo + hi) / 2 + return int(y_min + max(lo, min(hi, mid))) + def place(self, blocks: list, base_x: int, base_z: int): - """Place ore veins in a chunk using vanilla triangular distribution.""" + """Place ore veins in a chunk using vanilla batch parameters.""" rng = _random.Random( self._seed ^ (base_x * 6364136223846793005 + base_z * 1442695040888963407) ) - # Ore configurations matching vanilla 1.21.1 - # (ore_id, deepslate_ore_id, attempts, vein_size, y_min, y_max, peak_y, distribution) + # (ore_id, deepslate_ore_id, attempts, vein_size, y_min, y_max, + # distribution, air_discard_chance) ore_configs = [ - # Coal - two distributions (main + underground) - (COAL_ORE, DEEPSLATE_COAL_ORE, 20, 10, 0, 320, 96, 'triangular'), - (COAL_ORE, DEEPSLATE_COAL_ORE, 10, 10, -64, 0, -64, 'triangular'), - # Iron - two distributions (common + high) - (IRON_ORE, DEEPSLATE_IRON_ORE, 20, 8, -64, 320, 16, 'triangular'), - (IRON_ORE, DEEPSLATE_IRON_ORE, 10, 4, 80, 384, 232, 'triangular'), + # Coal (size 17, air discard 0.5) + (COAL_ORE, DEEPSLATE_COAL_ORE, 30, 17, 136, 320, 'triangle', 0.5), + (COAL_ORE, DEEPSLATE_COAL_ORE, 20, 17, 0, 192, 'triangle', 0.5), + # Iron (air discard 0) + (IRON_ORE, DEEPSLATE_IRON_ORE, 10, 9, -24, 56, 'triangle', 0.0), + (IRON_ORE, DEEPSLATE_IRON_ORE, 10, 9, 80, 384, 'triangle', 0.0), + (IRON_ORE, DEEPSLATE_IRON_ORE, 10, 4, -64, 72, 'uniform', 0.0), # Copper - (COPPER_ORE, DEEPSLATE_COPPER_ORE, 16, 9, -16, 112, 48, 'triangular'), + (COPPER_ORE, DEEPSLATE_COPPER_ORE, 16, 10, -16, 112, 'triangle', 0.0), # Gold - (GOLD_ORE, DEEPSLATE_GOLD_ORE, 4, 7, -64, 32, -16, 'triangular'), + (GOLD_ORE, DEEPSLATE_GOLD_ORE, 4, 9, -64, 32, 'triangle', 0.0), # Redstone - (REDSTONE_ORE, DEEPSLATE_REDSTONE_ORE, 8, 6, -64, 16, -32, 'triangular'), - # Lapis - (LAPIS_ORE, DEEPSLATE_LAPIS_ORE, 2, 5, -64, 64, 0, 'triangular'), + (REDSTONE_ORE, DEEPSLATE_REDSTONE_ORE, 4, 8, -64, 15, 'uniform', 0.0), + (REDSTONE_ORE, DEEPSLATE_REDSTONE_ORE, 8, 8, -64, -32, 'trapezoid', 0.0), + # Lapis (buried batch never touches air) + (LAPIS_ORE, DEEPSLATE_LAPIS_ORE, 2, 7, -32, 32, 'triangle', 0.0), + (LAPIS_ORE, DEEPSLATE_LAPIS_ORE, 4, 7, -64, 64, 'uniform', 1.0), # Diamond - (DIAMOND_ORE, DEEPSLATE_DIAMOND_ORE, 2, 4, -64, 16, -64, 'triangular'), - # Emerald (mountains only - rare) - (EMERALD_ORE, DEEPSLATE_EMERALD_ORE, 1, 2, -16, 320, 256, 'triangular'), + (DIAMOND_ORE, DEEPSLATE_DIAMOND_ORE, 7, 4, -64, 16, 'triangle', 0.5), + (DIAMOND_ORE, DEEPSLATE_DIAMOND_ORE, 4, 8, -64, 16, 'triangle', 0.7), + (DIAMOND_ORE, DEEPSLATE_DIAMOND_ORE, 2, 8, -64, -4, 'uniform', 1.0), + # Emerald: vanilla gates to mountain biomes; kept rare until + # biome gating is wired into ore placement + (EMERALD_ORE, DEEPSLATE_EMERALD_ORE, 1, 3, -16, 320, 'triangle', 0.0), ] - for ore_id, deep_ore_id, attempts, vein_size, y_min, y_max, peak_y, dist in ore_configs: + # Diamond large vein: 1 attempt per 9 chunks (air discard 0.7) + if rng.randint(1, 9) == 1: + ore_configs.append( + (DIAMOND_ORE, DEEPSLATE_DIAMOND_ORE, 1, 12, -64, 16, 'triangle', 0.7)) + + for ore_id, deep_ore_id, attempts, vein_size, y_min, y_max, dist, air_discard in ore_configs: for _ in range(attempts): lx = rng.randint(0, 15) lz = rng.randint(0, 15) - if dist == 'triangular': - # Vanilla's triangular distribution: - # P(y) = triangular(y_min, y_max, peak_y) - wy = int(rng.triangular(y_min, y_max, peak_y)) + if dist == 'triangle': + # Vanilla triangle provider peaks at the midpoint + wy = int(rng.triangular(y_min, y_max, (y_min + y_max) / 2)) + elif dist == 'trapezoid': + wy = self._sample_trapezoid(rng, y_min, y_max) else: wy = rng.randint(y_min, y_max) @@ -2262,6 +2301,21 @@ def place(self, blocks: list, base_x: int, base_z: int): else: continue + # discard_chance_on_air_exposure: 矿脉贴着空气时按概率丢弃 + if air_discard > 0.0 and rng.random() < air_discard: + exposed = False + for dx, dy, dz in ((1, 0, 0), (-1, 0, 0), (0, 1, 0), + (0, -1, 0), (0, 0, 1), (0, 0, -1)): + nx2, ny2, nz2 = lx + dx, yi + dy, lz + dz + if not (0 <= nx2 < 16 and 0 <= nz2 < 16 + and 0 <= ny2 < WORLD_HEIGHT): + continue # 跨区块邻居未知, 不视为暴露 + if blocks[ny2][nz2][nx2] == AIR: + exposed = True + break + if exposed: + continue + # Place vein (spherical scatter, matching vanilla's ore vein shape) blocks[yi][lz][lx] = ore_block for _ in range(vein_size - 1): From 849ce5087fd21834cd5504fa356ec209453d03eb Mon Sep 17 00:00:00 2001 From: Kimi Date: Mon, 31 Aug 2026 13:07:57 +0800 Subject: [PATCH 8/9] feat: lightning strikes during thunderstorms + watchdog e2e tests + repo hygiene Lightning (new): - LightningBoltEntity (type 64, verified) spawns near a random player every ~5s during thunderstorms, despawns after 4 ticks - strike damages players and mobs within 3 blocks (5.0 damage) Watchdog: - tests/test_watchdog_e2e.py: real UDP roundtrip tests (PYMC_PING -> PYMC_HEALTH, PYMC_HB -> partner state update) -- the previously missing end-to-end coverage for the heartbeat protocol Repo hygiene: - untrack native build artifacts (.exe/.so/Linux ELF); they caused the macOS CI ELF mix-up fixed in 3fcab6f. Files stay on disk locally and are now gitignored; CI builds them via CMake. Vendored Java bridge jars remain tracked (runtime dependencies, not build outputs) Tests: 123 passed (6 new). --- .gitignore | 10 +++++ handlers/play/entities.py | 1 + native/libpymc_native.so | Bin 81376 -> 0 bytes native/mob_ai | Bin 21648 -> 0 bytes native/mob_ai.exe | Bin 147854 -> 0 bytes native/pymc_native_server | Bin 86544 -> 0 bytes native/terrain_gen | Bin 147952 -> 0 bytes native/terrain_gen.exe | Bin 307316 -> 0 bytes network/server.py | 43 ++++++++++++++++++- tests/test_lightning.py | 83 +++++++++++++++++++++++++++++++++++++ tests/test_watchdog_e2e.py | 67 ++++++++++++++++++++++++++++++ world/entities.py | 22 ++++++++++ 12 files changed, 225 insertions(+), 1 deletion(-) delete mode 100755 native/libpymc_native.so delete mode 100755 native/mob_ai delete mode 100755 native/mob_ai.exe delete mode 100755 native/pymc_native_server delete mode 100755 native/terrain_gen delete mode 100755 native/terrain_gen.exe create mode 100644 tests/test_lightning.py create mode 100644 tests/test_watchdog_e2e.py diff --git a/.gitignore b/.gitignore index 400b862..9b76e83 100755 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,13 @@ __pycache__/ /world/playerdata/ /pumpkin-ref/ + +# 本地编译产物 (由 build.bat/build.sh/CMake 生成) +native/terrain_gen +native/terrain_gen.exe +native/mob_ai +native/mob_ai.exe +native/pymc_native_server +native/pymc_native_server.exe +native/libpymc_native.so +native/pymc_native.dll diff --git a/handlers/play/entities.py b/handlers/play/entities.py index 1c227ab..273d017 100755 --- a/handlers/play/entities.py +++ b/handlers/play/entities.py @@ -37,6 +37,7 @@ "pig": 77, "sheep": 87, "zombie": 124, + "lightning_bolt": 64, } diff --git a/native/libpymc_native.so b/native/libpymc_native.so deleted file mode 100755 index 1877f4dae798353e8d8fdedda92722eabd48003a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 81376 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 diff --git a/native/mob_ai.exe b/native/mob_ai.exe deleted file mode 100755 index 119346c5548acca0048a3653a5aae65a2f1bdb70..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 147854 zcmeFa3w)Ht)jvMZUb35P!frwW;gYc60zn95bAbdwvt$>ZmCc1D-0EesNp>Nco7oKn z>jey`+n5@y+8ecK#ae5tZ|mElwHiPLuZ?Ic-YVYOjcAKl5v^^0-!t<(yPG9a-+o?y z|M&g>+)tio=A1cm=FFVAo|$=4`LzM2WsK?YjEpe02QK}}`TO**tq2}B?ZI*E{^Vz- z?~y#uOt0VA60~-9b!_PJwON~d?d=^QYop)V)!lAwX}3D7>#S`Z&HnjmX(={^b&ZR$ z=BvlE@TX^7#BP^Zi-ECYY!)+VH1k<8i00$bK%Pvv79OcwB8U9Ilic*v6F|RCxJiuV zoTov)8bE60XeBQEf{E%-pn?%}yBJ%N0`DMW5n|qnv=!EX7#m`&fqTY&HTW3I8zbo0 z?Lfx!NuZe@^7n**J5q=j2}F5EKH`5?Bt5^`7eW$j7X{SdA)bo~i2ceT{roOLn3o28 z1D z#Qn;NUzfkN1B4BPAHqZY0tCc<<%}&`K;@6$5z6NgJj8D!p15B*(b>y5<^huJ7@l9? zY3HcutDNYH>>RGO!nqHHGXt)b3Muw0=joPkMAbAnM-Xm>yKD@)l0}^ES|d5g1l8Hb zG3XW*aJmzePYYg@pVl$xN`-upNeH)sZZh1?G3d%fy60peyc~2B;C^EaI=j6HA?!K| zY5*Pn*sfFQh~}%`|92&@-#o3H1p@QU)3$RV>`x3okb@SX!j83$HICJe`qgXK)XBZ? zt@F!$x|vj^X({a%DW5Yb{pdC@+2Og8^VQTLx+ z_V?w!{Ctr2xmfQ>$-Mn~5Wv4<(7gRuh;TsPc_m|1LtH!FH*fzIPeb2YPyCs@V=$EJ zvJXB;)yV$D$WWwcDr25Ly$5mn($?VZ34<`p314JwE+OZ@yWT^8;Ox8hB#C{(wd09$^UaTo z{2{GL;217><#NWHeb5cWUx4TjP6a@DwY zoVa3(r*EkiG!IkWj^%68UVlm>F2 z3C9zj*?k$9T#HzdAO;}RGpcUGuY5K#@&KyfNaQtQc#vvKf0`Y|9C;e!{qT>0=qlozaj`}x|W~VtlWUDc!UuJ9Qb4;a5cMOHy=SbZ#ctzQ9b4FVFO2&?xEe^Ri zA_dG79P1q6^1Og~{a%MTz1(QFP;3igBcV>D%sZC>L|AW?n;behe3R`i68gcc%g(*> zfh~(}MNs}@m}+^#+imwz$ZsBa=k2L&E7maO(D?M&re^d@%XWKJ&=6er#`b1H3CV5Evc{TqYlmiu| zt8baballc`D}sHWY(FlChahmST+*|KGOQwPJWZg1qzC#CLCqVNmFLMF#t<{)-gf+A5|b5Tk6b*>lhlcIORO`~%%lbo@t|`Wo;anomvVR*pf_5$)zc zIiFoe+s^PK=+MM?gLDvYf^Q>AtpQa(W9CJO8!%t^Jp5lXIuMnV8ZfWb`-myXHp*%X z0>kHpaQj|G6RiiZ`c>jFpYvElfv*P4`(BO)2Fz<-28(sZ$i=9YY7vv($8(V{6fUVS zdw3G09GQ7{A9ZLWGry;}-{7t~UsC$Z-3y@+F>N_B5Z`}|452r@hC=&mFn=mH%HgaY z0x@R1rFN=u{T-imp$E=71HF&jrwQ-vJvkC8+wnxm8a~)NEXn;-_sMe(%Kf2zCuzJI z887!9HOgflc7KGfwjBZ!)AKGI4t`2A8}x&C#qoFcmrLQjp77wgy-W77?qf%Hj}GtC zr);9}Gn9m$6!WA5`V-w^mNx7I^8x$d=pMZHQ*FqEd6q$$R}HVkEGI5KH9z_ybW^>h zno!aKKBo14stJwn{ZtB733=6iTkg-nxRsC z0PG;Rj%q@G&bP?Ff)uCxc>YV}@KZEnTE|8Apl53EppV)phwE+YXcm~8#!slG~g)ZD=;9&)*88~WMPPCp4xH3{LP7I!e|D0 zz+k#8_YP)9=R=-8OtJQNjhFjsjD596w=@LMeAPFg3rFu>3AA~RvJbis%i)(I1vG&U zAAtVN+y4Xtu>5@xPXE+j$$Q_@$`Yu0tOpPRc`7h5>RX%Y*i%51{i#ru{>PlU-e#4< zp6u+AtVLHNh`3=6NE3f&f6ZsTZ~i@G?5`Q@ee;p-j9z^QqCkpAYsB0FD;bT9-q|Ym z)!RxPd&&`!&;Ffe=b)_3aZw84l}2~?B{^JY8OeHj2eqc|UyWql2p^j0^U!X1UnGP% z8R^S@Vt6{K3hfS2`_^J6o7MvoPoFb8J5mKIlrwNn;3DS$#6&H=eXUj(Y@*<0xxdv` z-dFOUT}bvsC|&ON8)P>+h)}IHMW)X7^%e^NJSKNZP$$b3|aPAww0ydiXuzPb$Oj zL@vU3=hy=nh&O?Y_>ff+0qL51G2h1eLEE>|=hfDme(E z%MJ~v@@j>C+u3Krx~@CT2_4W}Wcy?Y$8$W4@<8c74j>CnZZZ>`Yk zX07Z`Ek+qfX7Q}(cvjveWMrz6m){L9M&ZQf6OKLubd~1*4QQb)B$a≪WDq7c+9% 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�Hs1VMAVbG-GVzm<|W*A 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 diff --git a/native/pymc_native_server b/native/pymc_native_server deleted file mode 100755 index 77433b72fed700e1ec358a5bbfc984073f7cebb5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 86544 zcmeFaePC48wKqHi0}L8CLyb0VQ6r9;C~5{#GY#krnSpa;f>A!i3I+^Bs1Q<^fhY=r zWH6`4(Nv|i_tsYL?T7u8-c~?bVJ3kDP$8fQLKVcXa|i;0l88v2-*2BYlLL}o``r6J z?>`P?&e>mUuf6u#Yp=cb+ItpEv(&019rSUAa$~EjT0iXFCYE_Vart7;6al2Jtcl|fTqJR2n_O3}2!XU4W8Z+L}qsEaWF81_ngh_6uw=5g=i+%i?7 z%)0#fKmYy6!RNBCymr>idu|wd?W}26&ze~otG>Fr@P?~z7<$dTIoAvk-F}q?&urHc zgd7gW@w09Emf7ap*}uc6_#0K&A6jqRnZ?B3aPD$C|Yr_PO*l{w0k zaV2Hbrq7*z@6378>2t@G6wjJdIepyJduB~H)6Smqy|K|D1!ZN?8FS|>D4R9C^4{o- zvgvc@&Y4>}y4+Fry)k2>HplCr5)Rnse{g#lwWfJ~cJI-gHeH8fq-%*y#wXU&{eHg)d3vDwor zqh@u0iRw&b?wN|zS+nMp&vy`msb%+|X_aN=Q={cGOw4X52iBEyt}B}`#5V+uo;vOR zvT_u-@4Cu43&JdRZ*_H9)%3aZ=2W7x=>28$3rsW$Ppf3^+^P4MRZdU09|gZRX7t!7 zGEJKvojP+C2vjVo))2uo7qU*aDV|?X;naFzk^m*t#N9EMYIrC;spI+sdcmKTdIh7TTc{660 z%>fTMX2&XLPpxvyo<4i_ocYro716n|N_63L2iOSghGt@}BvX-#XHT73i3D)*Tt`I} z*eqIM(V=1{d+-4i1K?OCrq%lhK_Eon<+DW{^QK2pVCK9zI1%qdukra$4;DI*5*(qF`L4O{n$y#U_-$$SQug<2hWN~2*^q0l zE6lw5hGt%`>v|n>&GnQIJ@Bt5{#?*u`0mPlyP%o&f#&FP^hI1x$2pF39a$nZox2yx z^oFj}Po(qBX{Gb+`;bv-Ia_-9{pUK6ZzGdq3)$(7~!p%phngwJ*S z)C%9f?Rk{%>v%357U_K)FIeH%p1%(&STDzVD;&*#9IB+tvDFIyK;-Y~*n==XPNY>^ zX$-Ia(T|~Co#QxQ#XTv)ZpWuq_^%?2EKu&)rr5V<_9gAkwG_{^o}boV9Yuuda6D(} z^Xd4cwa&^Nz?q;+FHeV8NM<~By|j+Ue5-Bo5+kfn(iVR~Iug%~w)k(^;#+O;_IYBL zE&d8y{(ZLiJX?H$h5wi4GmnXXALKRP%tCHkJUTk_@z~<6t`TWDws?!gB0kp^FV=S! zq&!mM zEq;bAzP~NL$`(()OMj|u@pk>J#ujhaN9%3z=cR$**uPwgA7Jr#7-eHXk^4jILc(*M+-xlw&#b0TQ|N8Z73Vcn0uPN{~1-_=h z*A)1g0$)?$YYKc#fv+j>H3hz=!2g5-a_vF4to3^Ju)`t8lhGcXt#a*pcT)yr=k=SB z)Opz}_?9jX;EmxKOgHv*;&WLe!!+#}ts=aJVVZP|qzL~P!!+d>D@6Er4AX>TJR`#Y z!7xoXMuQ0d8^bi&7&RjNIKx~%8&x9wLxyRhF{X&{Qif@oF-k@F0fuRkF#;kymtmS> zi~X-b7!DD>oneXLBc~8?*)0sy^kVE2;SmheCX!h;y5NyTUo;cqic)16Tx!rx$+rWK<~gwJ7^ zCKY3f2=`!^COxB6gijnon5GpYAi_r(rb)#p5a9z1)0AT5itv7hX+kkPBD|YnnobOd z2ybVYCKKbx7i|A#hI1L-C&G;k({y6AitrkSX-YJbB7Dn74o5`;!e{-++Dk`He%`5j z0YO&x>JeayxSTIO?~JJL>WOL*bR($WHeS4Y_}*)Xc+cberfczzqCQ}Uq9Sh`s59KcnNt9q1Qq4POEs+Iujcy{zRS7Dc&k~P zDESjc++>S54tk*~2Xn8%yKxB;8-U2ue*hx&pbL>B{bcp9UJWG1%IfF(t*|J`T9KS6 z_Q?L0Xg^uQOQOoD|JW?CRt634GFV=`Mo@SmlM)Yl1Nx7ww_N>UzG(~Ha=bIzOMg}% zR%8aAWB|ons51lOM&xf>1N8pe#=a6gH?~$tsx$wT2 zCGO?Bx}i-&#G{OuV1if+x;XSVMe1IGUxTcLytzPNZ6T6mwKz{-Bl3Qz&n41{;bU0- z0v6HGC?FlHV3|S&3w+1rMD_-hbm%>i#g`PZvKB?U8uH5g3NX8y^y@39KIo}`&#L|# zgs(Qqn#(JzhvfWb%DWF_wM8#Pj<$cu+O;OW`J%w#wpx%-Ce^+XL6RqcO8X-TL~k?D zGpJ`_p$(zApA%<9ZI`uq0a+beia%NLpS1AUZl-%Ih*zwo4AK9N*ogX}fCxccWCM7K zC{V;k&U1rQIrsx#d||;`DoVEN-zB%)L8^R$vcAyReD^MIjq0M zYQRq@^1dk2_A+XFg9Bi$S=-O~Ucq}%hk*m5o>Ln{f z3>hk}kuI)7t06AG;+u4_W4x@sAG{+tAviubZmhiIU`G#^LlxpvR$s`4{Hg79N{{|Z z0tphmp8cJ}(GsW71hE~F#2*8lpMy$q$|*S!FEB$Cun4u9A&OIk_A%5F-v?QZqE5W( z=~p%0fmh>Pz^rJ9_zy?X%D8|`(Y2?8q!C#ZEek`>1RUQa)s>4r+$yUHQ~rva;$5!o zkdTuIDQb)K@Egz<5a*QY{?4~}Qi_j-iXdytSv7L*Le6Ga4`h0YujfGc5`W}}<`L3f zVw){2g0(G9NC&CzoBavFY#A~2p?*ah>IGCm0&A)`fw|iPd#+U16PikT63In@kSbtn z3D)3GaNd$0#f;~W%b&I?WiLe3KMLxm-t8GlcymfnO-cN?R5u0vPaf^nPIeWfL4(ES;^i4u*Db1O6`t-PRqImsGP4&K6?Id886+c|Utfrxh5_udD~nR6mUTH^Z6zj8PfZJ0Nrp3pBqeG%;i zvJ|6``VXYa+SBB>h;k$jOBMxk$wZ)n;rlxFO&>VK6AvM0c;a0$AW(4 z?IP9#4Z)0MpX<}+n02iAt_}7o!rl#3!@f-bM2@VG4g=*xDPbm_4&V_X>Z5K%#H zDL>B0inJ(@R`y!*zQaM(F9mf$By!c-X{d#K^Yj%=i@qsqVz95_el+8!BcAhHGLoq3 z3`r}+Xh4q=wpo9ztg(7W6{fFD(7+oHE z$q{kto%=HQaV*w-A5$x*#cL}dUtcl@&kH1$Z@d1tPss|FY-s@sqyi#LPCgM)kLyo; zf-F{owwzpSdX(%8bD^%F9gV1bA%Wj=KPW{>)tBGe}M>~XZ!}wuKpZQznmBuHzQWiOH{7C zK(c{enn2Q&f|jfVM{8-}%%T`Evbsf|dQ6aw^s;a^jzXf6)7PN;GaUZY{{-IS2v*(e z+oK;~3rr1Lzh<_0CkFaaMZ62n|24KMktdJw-}mA@F@2Z1>#pFW;N;-l!LrHFq69~+ z;kpW>nf*&taof?(PD*CZnIXTJgBA}!Mgjd3BpN%=WE-{jAx_p3><^_Jqi%1eSB9qa zS|Od&U2*<9r*%a;o0RH@x!S z2&mMa>MK2b5?FCPZb5A6%|^BT8j0u5Z_^TQf+@7+JNW&=Ho+ibSn8990>`l!M93)3 zZwzVix0t8f{7)AmKLwAn1O(~fkRDzs$RQdSQjdfFEyAxue*&zqmVV8M(w8A%NT4vP z=_f6_Lrf8IE~+qaIN3vTmP)JQdj)DjRFsCKRS6;koCNj>f&Fq~uP-Yh?JTNx2Jb>0 z!Mj5$bg37fBhaf}5U^9HT>81F8q*A;AuJi)77S`P5UT)^g4%o+--nv-n9TO-d3={v z&d*|CAtfFH{TQf3K&fr^l=$0YYtUUnPq`n9dyDMG5KskeoGC4vhqt4Wr`PA`EG;f* zo)FbH$In3%oHZ|9?>O0sf?{Aa#|I(OQ6Xg~rR8xq-fLdEf$5O{9)zGG$Ju^W5Dk>_ zBT*U8keJOkpptl0AjetG;7 zGgh}^FJtV0cn5;|rH_KY2BNJ!rDa@SX81}>fA7!C&?M~J9#Stba*)T&eJ9?af{`S_ z`&#nvd0+{(C>I;IS+6DCld;2z_k*Zq{iJ3@99phDs&4k%R z?FG`?R6Io4wns8U11nE;uZk(}OM~J#1}#Pdn}xAKT9x=u#Y&8UnCE5Z$FhH8^c*ys zqD@veR)kd71<9)IbnFvZU5wam#lF^4OD(pbEG!-_P?}7?1neRf<{Mmd5)9lrM zg?A7%o89vFGdd7c90Z$H|6pW1vnShQ7Z~4%{O5cCAf=*9?nH!zjEpizgOX>IK;g<> zR!CGlFdc$*0s2oml*|e@p#p~9LkRq_0CtzX`Y2>%U>F16WuRv9Fo#sf z-UPRw(dReG&|kXxd?}BN2qxT0-V#hGI1uy;5THtc+JX?@A2Q!%zW)I4MwX~TbR95& z(F*es`A7c?5Huda3N1YcLynM5>Jx$=)$JL^4|cbyOlO^ zHy(v50G&SZHY6&Z|IHM>*#|;Qfi^^8yN)w7MEVTC(F+X971)L_Xr@q$tE&4|(`0=m4>UX+f3{x+=U~F(7ecXtSqIt6Ba)=TgJ1xSqD-HIEQ;D}iGKmd zcRbkK8-QyFUr8*&WMB#jHO@Iff8|5=s)&lHA5)XogbW4&+<=VS0`d-FYc?eUr7F}^ zv#W&YQ$1X?ZUcuQo?QYUG9Fxuf-zS!Az|8(A2i?DHoeMxCxvxa7aJHKVTt5RVxqC8 zF%wl^(x8b+QP&$g(M~LFjf>b}c;0{~<40J}(bn@;>p9kX{>3V{#(J(5^jdE`VT&i6 zp;rFk)-#Bwba4%ak;C_qqHeoeR`<)b?;R-}hY6Px;_&!KVAk^&>~J_f>6#RUKAIT* z&Kqoguibq3JEG@fd#M5$xg71=xzB>zWIX}v&m#ZzzvBajGpzPghi;Zr9X(}dv%Kw8 zG#db}w*a`s(lg|6q{|;&d^XBDVpolqYlrWC9j`EoMYCjW_)Un{??;#G(|~Vt zuQ0;S$tZhTd1C<*)9r;K??J9K{P8r*W0NdL)*wE$Z_4ThIe&+oD1n9f)w!3*&dsvF zHHz8p4);-M07l9BoVzABbBk`o0XgE_*OgR}TVXM>_wl*He|B$9tXQM0}AO|hOK^(u6U zXqUNkrG2Ok9Q7bzuXvBLfNyW0mf9kR$gdlS?wZfXM-p>9=nmqP6H%{~X|{vT1s?lc zR@)Wz6I~{bFdMtc95CH2_%6+MF)t>hY;XNo%(KPrU~`CV7wo}hbeg|7D)zQrk*SYu zbqhsKUqbZMo(h199SvCjVPuij0}=HDeH!azbVR$V?dKRp#gBv4uR&}V@0shvKCA-l zy8w8!VB5n`m?_O~HdZz5Ef{`K#Oh8`eL&yrq-j}EKQ;RXtSGCWT0mI~|>&*^^St@Ow;JA?2U`+F~xCA>r zYHK9_h(L{6EbxL&QIU$*D^4s#e#$8JY7J18SDVE;7h{nUkwzVXIv!EMWf63+NB`m- z8Y=M?5uC?P2Mne53n1+T9KlWzwHY>ATd8~ZpH_<9rZ_j4P5KKe74$fT&b5`PJ*_4s z|3HcJpdyGfQCr#P_&2w1}=U$MLzBIkcBtDEK8&(O&A=vwrh{-mgEEWmsi$#0K1(N_!I zSnnariy{j~>mj|8xt#Nm>u5w3eKtwpaMnJnK{;qXAP!%`zT?I(v8J}is7Z_msr1%JQ zw6wB!u)YWR*tm|tiyhHLAY26WF(x3Q0_FcgBt&_a*Z8%-NR*$6SJo3mMaHDA_zTT= zumVPMeQ%?m8SYKxApa<;lWRx0v0^0dTqH~JF{sJ7)2yF0)%THWi``D+21H>2Y}}7r zoF}2F=_lW|k8s!z$+)XP8gmm!QNIwfN|&2toU0n5;`Jkr~U=1mlMPCFf}#zfjIlzDaDr%YWyQ94*bMG zia*a7XIqIn9oFJ^OPnVab+Q{Ftj^cFZLDUShnvGFl6VMoIpvIfTTvfE@1Bvj22cU^ zQ#moA(|26&K~!LLe$A9y*wx|Q>DW%)cnb-@r;h$25Hdnyey9&Yeg*q;k$kMX+x21u z4H~9Qez#KE-UFehJO)BP0VtFs+Lz>KUzF@#ettRsn}GDM6xb=ZJ-M9ROO22ZPqwLM#rj8@U#d1{4=q z-VV*h`Opy}>i0rC=MV1F!i6mXX5~~4R&EO35lJlenES739pPp%DEkZkq>g|oQ&C?J zs;}x75v-Uruxb&Td=U;i?rg?S0I0Nbyu(r$*3ktg*zD@#Sj_{5ihq4X8nI6w1_+`0 z`|?OYa6jgDSxt!?f`-zVjlS(?&{|1Ev#?|Wu`#!|e=O&}5v=*bxn?D6R_En@>v-)4 z$=c=-`a1xv77vCAzy3HIh|UbxeH4wsL!tsnH0@Wi4B|st@nG2PUPREb1~w#zuTyUn zZ9^@!9oRVfgb>u?Lb+D2;rdA}4(Rkx0+tx#RFX3jjyZk-zRrc7Yr9K?0X?WDPpe?+ zX%#$iS_Q>{wqKcWy7Z@@$PfJq+b1C^XVjm}HQFKFyPF-1=!jNiJOae5c}D-vn_#j+ zJ%k4Y2e*BG$d;tA2zhEFTVIIn#|oA{vlTVK$f57qCCa-p<^Lm7eqyHl!xniBADoYx1;QrL53D1W2xqj)m* z4H)iqtK-w-+TSWmBU@Q8q)iDRe*g=BkTyfsE{|4z+ zJ>5G1o^I=Cv#scx-|9aACW?Q|K%Qeb&iwSK@ z6TJ?Y)Fop%P$NOAJm~wUNgUWvM;Edu2SyT;ytzTJYf!si4r?<*WWk`iF_@nWCbB{2 zr1O#!=-~^{!x8_k*ntrAx`E+DsK2X3Z4X}3QQ|*3_XnZGR9EnllP1F!CtQ~Y{Tt>L zhv=zsI0S*870y2#%HJ}Q3eq0ZC%ksC)iiJ`m7fNpZYUJng z2rH5UgdE9lyd@Fs<OQ@#8HX)X zkmU)iwJKAH>A>3(V!1*Y{XqZKYiT+5k%jlCAvLe<*9}2+E5;bOg%-xe%w-}vIx%!u zB>#jy3sG$wy7Zsm9n=KuQh3S1di0w#pid+*%UdO5X^5#Wf>oh#apQ8qkI`$YB@xV) zQ^M+cJ-(e$aGuO~AGL8cD-@HNcoT}rIB%68d&oOO_*$(7mHD|@z6w#ujIBWfOuEJe z1Tb?}gN3MS>)SwdxTqG$*r1ERjW1W$;K&FoLo+J@hKMM|YIGd3Xr(~c-5l_MRfWUf zIB%ZZ5^$3l>8I46vv!s6imeeygHrI_)07IZN3B8TDc4m@SxOwEz)j3rejPq;Y1e*T_>|;5GuL) zFAxk%E8nA83ml4-OG`+72L>R0`KRRD>muq^uvA2^Ayo%;a6NOAk{Ah0;4G|Yc%hri zOhB<*d)xI%_8J2Ea0Ch61Gr`dgnpxdPMg4eZd%ZMl<|%2gg?xyKuU@l`YWKkSw-)z zDn8UdYb8uN>!!O0WC9-VSn;_Lf2Y}P1tNYE+NEzpyVjLEAptI9( z^uAvL!P3I%=8%4HD;wKY8vYul-U+@fQ9Iz5gS}v9?FqM3n?eJ9oyQwp(Q~w$f@X3C)MOe*(dfd{Zc0c?YT|{GL_D#Y1>_VemK&?S`41y}RqUu=lVkct@ z;LaQVm0{AOIst<#@RFZJrh}=dFL;!48#%}ZqpHJdR74%L)#|;KtI695r^Xo5GjM+&Wj4_Pl z!0oCJYbaCV${K7J@sFa{V*1l>0D}tu+C5%K_zJQoeIpMT6IC&6G&EeJ|yBN!@qw|G}op=ajmL-$MiAJ zWuEw+SR1$va^xYqw}0Ks0xopO@C>;nY@r=Co1w)Z3)ANhc8i>oJ*?@11`B>6(9n}i zvEajg@sNYM>IMi&>xe_HSw}0p%6Fj-9c4hG@ILW`tUXV#FwQuDeWS=L^t&_pxAq{c zZi{mq>QFCcA{R6PckC808SqKQE&@N)uJ?e&()?0XngzI6!+{0&7gf1q$J!1OZjtPX z>C)QLLD0fbB9mV(KQ5PVkCdk(+O2MR^<|e1s(bHeM_4`fBL6f+6pFC{_RfCuSe)Kus8U+}85vNRVc&3zDUEYJQC zcGNoeLpWISql+ZvI2f`3{d}|XVumKZMx{In>M7Fm+XTTt6}+buU$O)b5Jzr5u74Br zfgp}lcQ=HsMW7|dZ3tL$z_-0{;w4i2X2jTHNHALX&+wS{PyuJO@v<329AoxBS3(xl;(2gYL^%i=7wDLT$Mn0_Hp2keB zZE{BZ$71i@)n)w1%rC(^1U)hskc$$Om(f8HwXa;8f^v9& zM}6>QsQw2yCnIvS{U$Tt#D$n$17_j}JAWy-jA7#zJN7Q@P)l{~n<&m9_YC>~_Vb0$rjPaT;_ZVV$aInzVB4dE&e#_U2?Rv9JLd zLOmCv9&5G`%R*FxoigFk0CE}fZEq?s9WjZp*zn^;tglbw4>@tQ z_kM?CY$Oru?b~DV$9Sl=FrpmReV>DMo21At2z@Zfr?Gcy+nna0k#_}a9`xooqUQ#s zwIOeRkxj5L-o`Y=_XMToA+HpyM_Rg*t@Zssm-mow83A4c@;L1B{@pX>z1fB72}0!m z-;(zs=uDPKyAQOJYYVCCnBoaCziU1H-?b;nGE`Db{{E-!fqfy{%-#k6e`)@TLdOHs zOLd|(V!DVmz#>L@eVY6jN9BmZW2~%IR#Vx%srnVO;hhrbY2e!8~z=>6(8uYa7viMv7ypg(ThCVj^s!XUbm)crGec9BP zgg$cwMbFe{(z?tzrfJZ(TEaPODW0Om)QY;(zn-zdJ5&F1F)gikX<<;%(!Gkp)pW-R zSIe3ysfxtDBwY)|3;Lf5ewtq@q{>bBYsTMhC)Gwe$awmMq{y6I!uAqGAs&I6Im}Jx}~ST=bccMDt98V z7teQl-tWQ#mb805z#pP#y-pvbg)ISb+nq^`(t`@9{UT;NWUMqS+L1?7vcEBUIWkjM zNRy74L7PBEY+>k^euZ>{eNQ0~?1WF#1naxF2v!PTS>~dFZ=b(qLHJnuEn3U|rTl2mt+43`EPN@-Ut^3V0eHY-{WxbI=2l+*mbE|+A!d>!S>ZcI#&HuR`8 zJ*>b|j-c3XfUl&Yj&ujLusf)Z^yr`BP^8$Ly9)$J@92=ewnmq~srXV|`ahKYjS=5w zD*v+YHPL8@rCoA+3<+Bm)EF_cL7YHEN5C|M3Yf@xJ@>TE-EKOm7 z9zOO52ux7aQeEpNjthtR(y+ zvSNqOKUiA%?{`PDDNnV&C?wVW8z3MqcGw@x!k$CXo!~cGAU(}NuT$n3Ntm*(#h`=3 zcUFo2Ln(ec+kU3f2UhNspDHPDQndMQ`Nj0|4Al2+rDe>G?!XrHtFo^HwnPM)u<}4p z;o!7bc|3g>K(Q43sjR^&u}O+Qgj&Qo|70cjrt&4wxoffj{*ZU-7P#`M*f3Dklkj5X z?);aRpf}5!m``E@fwLzg3>rd3_lfnEFyg#dbYFVC6)KtsDq)G#R&L6RuEABlqoll9 zEUoO^qLjmJ?q;-TTZUiEra@hW=~J|B-67FB40_T|%fVzM)y)z-w1prHMvugAxQ|6OON=Pzog!2+clsh-`Zm{NkadljmjV zs056PX1HTUsAxu3?A=gNl_&NV-1D%gL^BE%Es&#VZlxWz&PZY)d}@KI`kLZArW6&y z1}PBV6#b^G1#?h@*<}A~oH~cSfpW4c3Bw4~W8Gz;Udr8kTmN+pVVV81r9{|D&+M4f zdnE;i!?732FPfNfs%sdQ29Rj4Wsr=+rQkL62HkNqIj8N~uJKeLye(FW#4$M_Mp_oa z#)Z>+jEA$Ie^cyrQf8~5%qBq@3I?&6dS zlTWzX)Ig|-Pz#CIpw?*aX;Uv15iy%$rDx4Qm>=OrWt$(Njui6bjF1dX4VHQJ%L5W8 z8cmzfw?&6SyJ3Z=tq(ppbA7)9Dv+QEG*>7 z*BhZAn^-oC52+ihHsyTD&h_1Nn=U|Z;g{WDUmqO!f6$&u2dwryU~5k$-hJESAEnzQ z$p^%O9&PjQkZwH?sGl)Nza9FZg|{1UN5LM>M$nC8JdeHRF{439BCVf;?fhAgs=CvB!e-fh;Cv!38v|PH`jL zPsTb|{OXibQ3L&X%0vxZ5NrZZ02$q329qYu3qjDwC z(8gl0;)ayO!rYKr1u3;5k_coA?Znb!Lh1}Oaf%0fa!?g97*IPt&@eH61|kH(Crp%T z7`yVtc`f0=OczE8ZXM<7VN_I?6xN5>u!sf=smnV$k%e>E;R0E63NF2k;uCX$8pZ>= zHCPuE=QxcIIQBE^DV(MduAg<~%#HaYr4N(hBN2!sh6#bpTCu$isRgfN{gD?)h!Zrw zx9AcBkdW}a=B8F+G)(%9XuHRU{ndqNUa_^NIv#ycAm8S*%@+38E_}4}6doBwV=>l_ zM{ictBM_k44VWtmxKWUBp+j@9xe$9jqTS^wQDLT`BUPb-C3_S;5H1j5CyK^4Q2!Go z;xxw|@o$Y@!8>?p*g=!9&nvLfTmEWVchC;Tp+)FHmzUdkqp=Bj9_v+i8b6_YI$lY(Xjm+5R>XWD13vr%e*Q{bs9fHR-qRtDPwr_BK>;QVCo4VQrgo>Q8yb~kWpXo z7fR^$#++4L>vnYx^%wY)v|H9VYA)5XHnK{_o^_t=A1PLrBdZndF&dc^?H9trRf%~d*cPXPolI(PrU1rR3OI|VDa zxzH<>{q0iSaGs2yoIeF(pnsuzuq_32R)jW=?5>^MAP*=lqXalS#lDfEE-1vi%qs9K zwVpHh6dwKjv4zw7*P``hn8X!R1C{Fjfb2nSq_y6o<|);YG)2YGzqQez`IxNO2ij=R zd<^s{%-EO0o|xNQ?8TtHFB_KB(Szz;-kKBrrH7*&)`{z%oko*wqg?J#5yF9GpF z<)~{L>pTF1s_KQOYKKsZP4&IV_zT2n*AN=kJ2nsmx~eX@C>v~E&o^k6=vWIsu{|r* z@pqMw4;v@NQ zOI~_L^6fY@*Opw%-@g#uSE0@uWK2dTl)1#d9rDgSrn%k@JN&+7vp4HbTkXZ>$ff9V zBO8E-B^=h?izIq|1Q@)I3a0pXOVssU^rf>QuFMgMqa?=I3>pfQ2nDMvZeNYeg1WFHy~x^NF0!zBELK>PdEA3TTNe7cSYgHg2HTav zJLk}EuzO2&w}Pe=8)0$TLQono@`zCc-B>9f?Aw5dbwC_Smb+U_pe>5k5G@C)MFZDztR99+1+~CpSp_5 zPS|>6?DDU#wrMtL2`2{TR}pi@l^`bNX#phj48BY;R*2?7S5ptjYat`}!J)WDp>A-K z=7?1HI7ffnx}Zb~AAyvTmhMIKZ6*9iWNB10HdtX#h1G*NVX~!Ga{Lb{jk!C=>NPbf z4RCqjP3D2gWBX#9e;ej?#74-lOG8zF=IGpDeE%~ly_vB*c933mkf;k*9*?1E>_eB! zynqX;P919CF=R|zA`4XnZ09EsE%b%9|MYD#cyXc>|0BLnGiDqAj+pe6E2d-P3v{KP zORQHzfbg?ew8^*vue2ELe%^d8!_(M-ue6ccO zlv5o&FbEpuH5KNkH_W8wi6zk3+(l8pz$v=Sb{H7|Hz?g0Ner#QH5WbT-Sy<} z(I_z_fZYgC7e1A#1O#SWOBAghDDGrC-EbSO43nJ7S zq3ps^`ms=Ux!70QKT#6H-k^m6dgfxG$-~kH;|DBX$78QsN^Qiy)4G7siOS%8POY^Z zHWi#H6pe)DYHMdahs1;u%Z9?g&O@6jE1)7vMW=lp{Kf{qkyd1nlci}#6?!jL5u-7H za30JLU3;{ewFT=3BM6Xb`7Byzog~09OXC|NE#Od62Z!VC&#OTIz5Y2Oii7p@^7O1T z`qRF@Bb;H*zP}@Gzw`i@rB8gxA12B=;3D(i`@?J&InVHiq2$$9Fy){4!+6X(TEB`v z%rxW`bQHtE=FcTuLOzaNn=uVkw7>nWL<9iaf+zKCt zmxHMjE+w`9%G75rZn~%5IsYH_?5$Rf zW!`5|*ajeywnv{*vT?ETqv>Q4}PqaJsLu`xA0h@~b^8cUOe^Gbs zuk(1oi-J});7P1!|G#bjSZUR9^);Q|nQCL|K+dop(V=yFqB(FP9p)5UFH)${?ys|Q z{b@;U@0xn9P)Y9spRYQu=K$ES9@6q8_8-S%G2*=wJ_y`thIrQRqh!@R>D>D(lGvUB=q@RyS^CC2J{)H&1BVn)~ zLXXLR!<~`5-yo8>cLsW7PJ!qSTqe+Bc~Jg0&XN)J-ml;+IZ7;iyWBAKPB21RxopCG zXk7W5)3y>I?|{f_;0sR$EPz?ugw4_w+;66x2cr-T`)B&!S?3MRdjZ7k|0!hM#}<1L zNlS^wym=T4ewR49vJ4ujvCae1t=q%L_A>E2uU~D?dr;o^av*pxPwW^~Izf zs5#XWx5){X0TisU!*2&`PGFT2<(deJ=(m!D4jCDOZi?F>Twd&s4-C~$@?NOl%l-Gn z)kntj0rMTJVRcmb+>ylftB?>$T-G2Svvb-)UF$2Tw|SVAYm**Sk_)1ED-bofLYf0O z*!n+$V}wxJH@I*u9RAkh77d&<=6)aiH*wEgP~*X#Vt2^d>D)r0T2$!o-L)!y3mSS#;J_d1NFu!kD|_*HuU0cPUV{_|m!yK)JZW;Z*= zFWJvY11=1OSZ9uv`@%u|Bp!gOwyh-b zLpQoyuKln>QF|yFZf=IFosxK*r&i_s&q@+Y-MM_*vLq!AvZ_m&A!YPDCjTlzSCvC7 ziwzIt!M#w}@m?y5;>H~TXsH9m74?T57XymA&4iLJj;nH6_B=Vi18XuxeVmzP?Fo@N zzX_QcR^LW`BzD}4b*B6)!PwZe25)E1`v|RmBJ@BHZB;q4%4G;vRUvTIrE*cQK&tx< zR0LUl8GFgkkHvAl^Gy39^)!DmlIxkQErbX3B8TS2VMbV_@Aw3sr@QER`j%J`%x9k3 zWL9GQt+g8hJdr9XJJeQ8;!93&$+=*KdH|W5QztG?9T@1`QTx7>zXL4L_h{b(wI`$n zKa$Ho5=)||Xw8S~92RF;bjfn=kewYO!l`4;KeQlRhl4(4m}Oy1*a+zp<_7+5IBWhp z0wuVhB60OL5xozZHI0oyZJ;;dIw$08>bpxEpLrbk(4FD}>_@>9hTbrzHljK2usQE1 z!fb)0Y{0B_!Zn=8OAnXfTh&t?7pL@r&J9F=Ly#Yf= zs{2pCg3HULj_9Oe&gebC8r)V<$J=pG2c7ZG`|reBWV{UC#TWqDK9|d*-eEE| zpABM_OA=zS>x9eVkx(IyaB!Ixs&}`I$0TdYbJPe6m;$)Ca3EB;bzWsi-GW<-ETEC{ zJ#zVj1lo%IPgLWIICt|QfOZ553+4?E)E5v+bf}`u4Jg_OIDAj|M6k!*0IN=fcu8i# z(Lnx0QAZTmjDgf=Vb{%wo)Z5TQk*~X5P=L&^I^OiLLVGH(Ix_fUb`@7Z3p3F)8F)B z&;w5+C$>Alv7jzU3Xa9;D=h#GZfu^MXkdPtI5zSNj5+I7X~5_lgTD%prU#{3f&5gY ze6L*o1*q3gPJM{R9+AtB$<9-dGa$g*(yF0V#(6-rq5*nIT_M;~bd?mp4UuM7U5ZF{ zlksQf%j{2}_uhc5Q*|L3mPB)Zwj4dSLs$wxZW5QH0CZ-x?9nv6kJP}cFun-@n;lLg zg(t2qp;QZi3VGx;oU{yiVNU~#nM8rjO~zY%7lc z&lT1)X+2x<)ccBy5YvDsd8f35ypxg~>e?^8%*i@(WJuzttN{A7&bs9v9nHW-DO{TdXK@cR@GX#wFSz&dS_hb;&b`WChPxktP@U4YIT`s0;Pq6k25AH_?rQ}+) z0fgY@!V;h>wgT}|%3VODO?1k``6|V)LvBP&@*wXd=AGim1-0-pgX9^`eF!P8gBJ)5 zRL8C3*>~4LLEyto}g&bB@(N2;?##`Uh?2yXYPy&3XJ`2a}VGo9yt~F z{Jf6`=J&&0g2T87xzcuf(K`A|q+7$igOK`nZw-nOwFW-fw2=A-Z@m>MF!ehfcYpjA5+XnmHDVK9}VW?8S}Bi zd?d|BtNGYxK91l)fh4Pc^*#f7QRY19eGYFFF-bi6;Sj~93sd>kj6gAQUmJ1? zZbW*uj41@qss=2+EdsgZ?`oFJOWTJLfmjw_i@Ly| z)3DW@80_T7d$9S4pQJKOFm-rgSDqRqt#eMQR6(U--VkMIY~Al zX_zziO>FpVg@RveIP+7h0ni~SDO@U#o6bAK^$$6Q^;-Zt3=Z@Hk1Sk%oE5?(=zk5~ zU?{H^yQp1Zz-J+Opt|rAwfLlQKSWwapQ$y6Y8qX6$t-U!1sh-T9Jy#f#}O%hfmtMk zc(khqSWto%z&y(RL%de^kb8MZeEhHmZqO7mbD)!z%C%+zEGJF+=hk*W3WqF-iAf^j zonktf3ZZFnt7h`Atfu+O!&zmg`^hfZ$+3QR*}4A->IdwbDy1C$iCp)AB_rk2 z&?8U}g{IjtvVK^u@f#2$%}?nDbM9ne5C})Bf&E|EVx*ew!|onOHd}$_4P=7Z)=6yZ z-!1x#BYl2mH7)9$0ifV#ajgDH(NMr8Qy~vWl>YO+CM^i|e|Jb5Jxy6ldYvI_*Zstl zwX5*N{U|sTw8rs_(?S2yPkhIrQN2p*0wyM5zdHAE<~}U4;G(9JKcZ5H(>#Z;s1~=A z>UVPctCsr+*!N(xS)Xwm7862#VO+vriuWo870ayhI|)S!{EzeN($&`F6u zcs*#1g)hBI6`*Wu!FLf9h|~Kz@gz<_i97VoC3gZdJ-Gnt0$ZXdaB^52A8Ho>^~nMj zx6sUR3Bya)vn`_4_^}3?F&BE5>6MGKCpXhY^)~uj$_m&5>b|Ka%2KznTSdb<$Ts}m3$V5Ojlo7@xr#v!_YtmREn!}z14*zD;(Ycw6>8Y6 z-;82dLSBVCqe`5o6sBty7RyjnSCp9zg8k! zG?(5}VzK+|V^&{_g#s?(&@V2~_|m9#2|4XESr)qcgJ;l>m&Z-Y~+#ut4nw1dyS%Br*8y691uj zmqpZLwh_^=j%#B5I1rS1d1jLvPF8adV5fFbZ*)FHPK6>>ZUGQQE5UN)BP=W78qkZS znDUl1Anf64I?1nXHtgGRW_VT#$(SXGtm|?7EtQ=~C4W8cyqt#65>Zf2ED_M8S&hhD zU;>k7H6aj4vpR3N)t`L?RP?_+?>u<+3&kI6Ah$jmsJH3*deMR={U74FSC1kyY;ag9 z;#bTPLpPB3^^1|nwG0SD_HVGtJZF_j^0@{b#!sI!_s4IH;0A}1{7*3gGe<*Lai~~3 z;y4`u!I0SzPcSJ14CWB7qNS0$6y% zPV~yoxA-e@;7a%%a0*D%L->r=pa!gO!05O-s6`({@<4`RLtI=4IRxRh7t=9q2j#z| zJq6Mm;(r+qnk>{#BBr(Hu1KJa@R)>cN{WO{I5o_^1g}U82-w) zVqoDu2lF%!Z)vz(R!<>M>>r9YKu(OHe+AB?L$aOLHper^0=0kn+582aQKC?pFQOxO6P#WS5{;hWLb_i7avUoFP>pmM2<~s3TkavF; zh+uBZ$h&J1^Ht;>%(VZyyt|#i&F%VsBJa3={v~-wlh~K#-6zo6zN)n@;emv=Az{&(glGv4IPm0UR(a!?u<VX2RMak=Yo02 z*}_?LCvx|c^I?YXbj~j~h2xuO4FoD(J0MPq3uM&;@v73YI2PEAfPJ&kO|iAvlxL=J zgqY+Vm1%JXNmv~C5}OC0nT_lLtg+D8Db+qk*354-MfNr&0U@4$RPi65d*|rHgO{To zT*LF|QITnDTMDiD2ZWP_H5M_ba?w4k?qWe%>_72N8%stn1PELUg}D+QdA-HYTG37% zJ1VoSqdFMr22)$>ix^J1_U3F&?xh_rb$EDG(t80)?3ZRz+t2g~%Yav6xKs#6{2|`E z7|`}+&fjOdemT1Yi1m^iWastN73S(5wU#f$ct-r+|T8WrGhM`O0P+McvghwCxxzCp472Ul8sBS70`P{SJ=P@cKp8jogJVgxBpG@>62##5_NQ zh-TTh0S~NKb>3Xo4ihA0o%sD@te4_`7|7CiVkQS7teG*2}c zrpbPir-a4}l*4?SgqL`>{s$C>&Qiz(pcmpw`Mw+_k%ime%wsuMidhQ+7t95Jx*P@O zs#2%1*OGtmO%m&~VrEO9$CL zPTCU(TljfNWE%Hs^C&MkyyK`esRao3T8iu~qjHH-MOeD_V-(0?0O|YiYhe@D&p)q1 zy0$}FreZK;{Fzu9xO5`NqO!C3HeC>zQvZoOyF8%g_KtQYm zWhQ^dmV1$d9NWnV3Jp7^o4s001cIHAnwfw5b0e= zn$${co9AB$5ZCI`!?!`aFl{HHub)2>sKd@+77a_2b|UTYN2uf4SAlkl^)v#?-6?6A zhYbLb_0q$ik}52JRGN(T0(W9buDHj;*Zalyoq5C+7)@GFI6IL7e2)-AFVRgS*Tf|5YOGxGA@fjvwhOTPjaw8@7zxW-xv zXumr2;ySb#G(Y?vbAD$08_T4}6LH7idUi_QhwL8FIS-d3lT|M7Lu0&I1azWHhQsJB z0FrLRRVUmeTetziYu7K>Ev`~B>1ww9@OFVUsr)`s+z#4eoZP*CL4QKPwFr6Z2}QIE z_=ibqwku6v6RYJg600#S?%|RY>E$sF1E{neRI)OM~AK zjS5NQ-$3Zf6D-vN(lj>r2FBx3M2Qq=M|Bg9l4js2X4-HxEKPhH5qDm=fPjI`=NZUD zjw;gN*97FSG`=YVc_#`rz9t}VBjgi=+Cgx8@s@q8Li*r1rl+bL;2i}gpe^l0{rodg zAKZnyH2#nYpNI>*gTyqiCgCnhS4#4xCA^5NVG20q!R8liSA1O#fjW7X40b zXAk(O;9y85_h#mnJxvXnm`x(aeWrh(@cW|guzJRQfx?aWB3x+%iT_paTY{bNpWU|< zu;~~$Nht2W`^pyv)*hqqhxzsU;8ofupnyIG&*I4l+RjVsS0Rkw`Nd3jPOV;A@!P}r zom1Ya3CT+SPK;b3;+{-az|G{z#=fn!N1Qf&A8H0><=YZtR#dd74tGXJfhVv~?E#MJ zF7e_|U1H+H-l9EYo*(-ScEiAGhYFF(pxvC9XS$kI<# z8QiW0a5tQc-}6C^(=AaAuwYfeGQex3akE0LGj(T)7KDL5 z2*(io_-P{zfvFR{75LF%Z6rM^b_!Dad&7LtmWLZWq`IE~+oGymsqRnW1_R%iF;=fr5@Zo67#j)YS%owc!B+ogHt{DOStS_y0`MG zlJ67^iG5h~fGf7Y2p0&w#bm-Un4geciW;o8&P5beXG`%ZXl0R{BgOB)3n3X?h>7u4 zRPBW*66twxRx{Icjk~(ihf47wBE3+G=bPyT2I(fsm%!N+B;tXG+7msZ=i|F4mTgek zqXU|X3ZhrAIy`SQpHh4pVO6`NII93Lq`Jcpj!mS^>!i(Aq4{U#N5-#b{5pf~vtPPz z)b#Jd!oYrakXWqEz_35ZRK$9Hkk1*)bKy;S=oZTb8WLg~<`YbP*X*8uBgH*}hcPjF zuHTC6NZwZ=jem!tA6BNk0}%ZNmR{oyLGtgYkS4s2$jy-a21>{|W_BCI>rR9Ckbw9V zplu>FY)Y{5E@)U#Oq_o@#H;=#h`DEhIOza` zjxWQX=_%C}5Zdr(@y1_!uNXcAv-~Seg+fcVs=h+#oSt6mE@NaKeG!b{UfzzO>B=K?*5nJ&00scP6-)^O7K19&#qMmH%UD^M@ zAI=vwV^OoHRT^;jKAzWA)cLqD3-bwl^1}X;Qi2om z_fVHRVmOhdftd+l60mQ+j$Ip-AOqDpzX<5JV)6|f% z|FHmQr%!W=YfT%arDOnkbyvPdY+2!cVi&I^#cDAq{bUu5GxPDAf(VK0I)Dx61kZh87-3eN2SzSo17VJwwx5d<`CHoFB>6>e zkR6RVQ18?8ULfiWrSHi8B^w`L{J1cWab10s1wPDIM?3aNRgvqG8(i`F;p z2CXIntYztNF;W%$pmmQ z!#k>!>VDQ2?Zj_;-;G`O6QH(O6`tRG2?v5$_e!2yFnL`2inMHnAc+U6E0)R2{(~U^ z|6VRuFW0_}Ie2i>DLwxI%q%el^P6?wS7s)-(Ymzjmjz?AvZp^Q4ibXt<7) zNeA#Xpwi7uV{))i@{Ey{mXW!DB~Yv=WXk_(?_0pzDz5ymUXBw7S)oZuLn(q7Fx|vR zwh2yvMt;bT#CEi{6AXl0%aUx1$dZs`=g~B{&7;ZY<+ij?O8=NPyxJ~xDTUC&VnPVe zrqnGI(gj+V1sVedLjz4AMgQNKhjeukL+IlxX4C(w4w|t&?&hk{{uJ)opCH0!h>Gm~ z3`ibH9!GONS9m_(W(5U!3pB;Ff`LAa=AM-VC3aNdAFF6c`2lZqiYYw*9@gM24qM34 z{zH(%k?;MPx;Ecsi8e$>#6PJEYj>AB#IHQ=EE*0m@DFD_$5jabE163DmT*#;kjHy01`=b+ zM+Slo8Bj3!)&SSmBh}a`hTRcT*JwwhR)f%7w3IK*3LZDG_P66dHNqeqDym4dke<2V zpzt!`AIjf&KHOAjJ?zj7W|J_I*^a!4xj5rcfqzippOJtMapt*zkhH;a_8FvHFv@S@ ze8lGqH`64rYY=2izn(7K`tMv#<`ixf3dQsbibo0sm01EqwVf0I+?EuR>G}l}3hB{x zFWAqG6)nS(4sJoiLhdV9bU=ptDKx?xgf#}!E2dFcqT{X3ja3*Lb+LhHHZqM`MH&T% z9E!v>>pv0K-pmxLHmy(>L7}j3cSVnTGtQ?N2g}XB>YI-v8wxkiFi$Hgu^8p!a7 z|H`Wx&woXJ4RQRtK^h~O=B*;lv*Fy8T@Mru$a1lA)Osjp1(myf1?&Y=?*9@`lFN$- zy{d!$n=7DaV-Skvk<+m#aQ@z+F=9lErc5tq{*){eDF)~sAtjnX_(&ctuI%8s)-Qa3 z?PSKXN#(W`J@m|TPCd5g4uX&#dcM~qD$B;3%{YkiV`Qt5Wj(T_ayFy!FMk{%tcv3w zOX2ii>mY$_q1l;`h2}XzYJN8Gxkc!gJy^@C9N5^S6mGtXmbIusgk_h)p%?X7JEF>n z?m|~9eiOgLWba8t^Y5R7T9Vl6NhTD6C19pIB{)Q2kZ*sQhKEO~kYVT&d;;)5-^F-Q z+kr6o$scPg0voL>&{cREO%0?g@HV zyfe5cLX7m~A_^Ae0=O83Tjz2Fwh;q!g{^Swsf2(iHsTpC<|QxC?po3OOy;Bm?{?v3 zR958i2NBQa9T&W}rjr^foIn0520gjnRd~U~nyU$4JA3?Ew57lUvvP%t?*kWI6iQ8M zVjIt6EctpEOKBVb6FevG-ymHxNoM}9@bm)BJWh#_XFtnRfupgqnLH=U-4u_;<6LKt z8~+m*ND}ZS0mFcpk9?h92Ki=L`n58C z8eQti4%QxUz;@vmRwErYI?`h3mY>7U(RN;(#RHp*RkFe@zd`$ruK=F+PmFAByos-z z4Y6GMFP~79gP61$NReiJ?ljQdw}V?)(r(*oC{5d+yD)cI1)V8*roVy~9&qB(n^@>x z{ywETB}t;itobeKHwS^*|44fAeFDviQEbKUD7ObeiTigb*%>xu#+ZZeZ#iG|KF0U2 zjPLD}_&%D+_YLqxC!hHOc+d9|HS)Os<17!j4X-?hwRpTBhaBP8x4nR+nD_alpXS3D zYHgR+umUX~r{a_Ek1FqfizfY8wqHrbMj}GadlC}p!7FKV=;=-vSpd%JVi4Pw(9v66 zm|9d|miM5NIXuMW~lcP<2JGylbIOs3yN59e=`)7Pptjd(CQ8)gX1sa+#1 zIq#3C@SlD&##q7lE_o(zcPRIJO!q$(Q@)4xnH-%d^ zqJCJ(Sc^yMnz4)ZGq#TWHfE1B>z{q(M_#g;eOL{cj-yh5(JUw9u5mlolz#vkG0n!p z@=k7d@G23i$i9(sWPlO$p)||c{<#q>vD5Zq+BJq#w?0YxV6SX6yoQ~?coJ}xZT#)` zQ}&gA?2mn&;CxXQ)DrLh6~?kid5SXuv384+(7}-au)?i$vqSx z9q*t(6oDwV3~sF7?%7D^P%yb>SVcOC3!6Tg*Ea6h2y$!Y;a>_j zcR+v09=i+gi%fU#=r%h?DtDY&i7m=qcrCPpUaEKRN)+MY&`8bpx3`aP|Lra_IgQkN zrXP9bCGFDOKA_ps-1iZ{i}Z(a_y3P48OxaH0_>@zq)34o=683+#9C7Zu@qv)H{{yl{d{?!3ZfcykDQlRql&QR;|C$WxC?S-?J zU<>Ft?lqXLJXU}H!SU^@*r3e)0nMX2p&w56Vh?{Co4wjYr?vUAy>2p(Z7`$bi}Bq& zg}-jHqaM4=ewvsoUN&*j4sCkZq~0grHJOhkLVDHYg$8VA6C1KWfm&m)m~`Sbg?i`) zwAGP=cq)kzXC$@n8t2-Yx(lY4t$Ztjolq?*kX4Dws=?`m;n`ZW499!^%#mQ zKLG+8TWnyf00%Fv*m57ot)(NCf$M=ywyXy3F}CHDD7&_A;bS^Iq1-Y6%#j$%gq>5L zVY|KmDvl+?>Gg<9ZTBWSQp}DqrV7^M>x-I7GI{6T?+wevmp_gj91r%y~i`uAI=f#%4cuON>t^?nOeksl%j?e|`d(x=TY{6Qq3>;Lup6?2jQ zKlS~J{ZvV^UE=+UU*Z15?^m==hgzNvGEzad#q>b_BM6_oPDGZ~fJ~f_*1;gEo?7m1C!9HIi7zx|EVv$~ZxGxm4 z2jli|Bw_FOhJt=klq)@#H&xr4y@_Cd;3|7-!W&C~gMCdf(PM9|Z?cEIy@5scbK>l! zdZfvuua5Ngdc%HuXJ1!WAO^biefFlRdG?k-Jc=R&bP-^ZnZDK=3H`dR11< zE?(=dNX&lTIq~zf;uZ2?^j&Ddu+N(a*iVo^!yio%%}MHmRMGUlSb!MD6aGbu{DEuw z0``zM)*Xo16A(Luu~v;kK*i@P{Q+Mh5?i!LZBk?2aCblrqB&y;E#4pK^7e%isyB+Z z^D7rb*Y*0;Fw-Pu{(Mp#0AH_vKCx8diAY}v2$CVkWT@;S!9_&^MI|C_Rw#8S6!FQd z`ofWzKM)J}RaAM=B5%4_NEnFq2NdP|SQMk*moY8-K7NPs%g4-lF@AHg5K*Wmlb7PR z4XZ2Vh~wR1V)18Z-c|Se_4h1Zxo7`7#VZR(1axuurikB*11aemTl|v;pZ(46HavGJ zzjst~II{Toop1fBsnfH#j9ve=_(rx=dZ$RID6Y-Pq#eI}{5QN3`;&1JH~7tD zvJStq@iXD~(oOt#2r%)D%pc+8uN<@n#bmUYc`0dn%0uicN;1fxK2Cq1A~qOJW;}7% zUqp|kyGhqa#UD2AF}e&zhI~V(>HFrFO~ZN1EX|hRiZb5>;P=TF<;-Jc)rCs4GpjZa4+B>;6A{CHOZtIa&}IF-43+BYilxj6QB(*b&mj! z0geF?mboNIfcfcV)1^r;?Ao>O1 z#A7HIpz^b1asn_4I2)S@Y=_Vf0SE9j#0BX2CF%zl1xx@A0&WBB_!aUYJm4_k*i+z( zel_rG^iRM+z$l>YIn)nOc?J2QpN+hVdYyrCy@qxKwEZ!eT#0xW-~{4r6UYa6x*#rg z8P>NbhP5`s>C>m=4;rS}2oF-F0^`%!oP_;nr&p9BL7!iXI+1H=wbfc@FDWcolRuy= zo^$c1%ZeBqN?(JYy&k#(C@-jwvJ$_2$PZnMU6emvhV`CCR=O$QxPO77oX*RLXD5iG ze2-$By&lk91|e5jZF`Jv>+Ibox7EJOTxBiZX{oU~w&vAXD>hB3v33|6r&%j1t&U1- zah26xWu1)_Ro48<0;K{x#_+4@OeXIJBwo9WsK!oHrPaRGj1-%|%Vn&YW-SJ$Ql_mh zprh}UPh!A%9BI#@w73TGqrKNJ0k;a87{rfkjIY1w7oZQ5frUYV5(N{P2f@jHMrk&V5I;8H3R za@uW5mkH9@npero z&g!^&nsqi1mDc>F1%4S+%0U)Inj#hYPH7sfww;t_tEtv%-(C{xZ+JaVHx-q0{`-thN?PsHXr$eT)?FlyzxMCg71ze2|*9KgN4%Y+R z1|4n#a5rdhq_0K5m1DfW9Cp*}f>B~}tv)5sv&XdCyvwpPZ_^Z0XWle)>&gOC*jQp) zT|y$Ee$#=p`)aVdj zP>KJ#0^a}4kUQuGC?P9H4YhBL)ox74My0sJ#JL-`4YD>jfgkI$=x0I)S)WboV2#yd zI@gd@vuX>B_hyZ#FEF~ZMxdK3c4WVj%8I&^jWPcY#@*`CDl)TuuY=}TPcpe2G*lnd zxf->tp?*Z^h7dmh9;DmmZ-WP;xti%9*`|5$NoHeP-j5KbI_{=^wu}1NPO>FiEvVzB zylxm1h$z+B>sZmrzNApdk@RT;_-z9}AMwLQ?LP?IOTfKI2xhNf`?U6|&g$BrGgq~! z0P#D7v^QLxOsbR?7xl3*;s+f2$SP|WW=olENVf~KrLb2X$au0SU6J zCb|gc0`4B*iW!FI*#_JwaBmQf<*Bnr?v(vTo-N3;da@-%o>cxJ@JhfBye$ha-Bmb_M{1_YpR<@jay2LtSFx_U%s&>rw+QF0j+6`67dcy!VLqr z88|tn67B$S13J3Hz-`dcy$;-39i0N^2@Ty$@S6!-6u5H`mKWtS5BM8^4+|vWT)-U# zZkxb40NW^iESWrw#v@kOl-)Rny1H2f8`5>9zPAl&R>qUb2Z;~Jz37-r3(%MH8ww~N z^52gmo>G(&Z4j&wil!`=4>!G>xa=E@;-=Aqn;2Ht-k&k2=9a*a>(5JIys@ zC!p?|@_Mbs)f$@s+IswGUUC#^e@1m;`dOF7j>`T@o=XP6(_3gEIhFl1e0WJNb0x7$#9n z2hujXo_tI;mNFe!it<;X{F99~ER+Z3On~3a&nA;}W}Df``Dx3_#x0~qJ7eUh0wFKt z3C{~X=q=q?<}R><=i}h{>CYsS7$Ft&>zGhd@~xJg=3S=UZ~>Sew?pZ6Zb&9Og?#oH zn^HbJ^OM;az}lc0e)6MP+W-SkJNVI@nC8-R$j@MUiZbq^`GB@Rp((RSwW`2$FMJKX zu&Yo7=EEwOFDC}XLQYzzFqRmXat&mLW2MxuVx%jlIX2S#0%2}H>a2F;O*RIO$~Rd+ z@b3VvAM^H?1?^Vo5ciRV*NQaN1;)E2f6{?sq_KY?nfzDO*L)pr(mKrMKuibPXbg3e zPv2x6Fc|O8AwWC$tp$t0OOi<})hOmR+#rE=j3Pa`3FzrqH<$|BXs*DGPVXl5n_+{= zmzOouRDYcSn+3>sH|2XOwlAH49>WiBQ|=$mL-%R_ zvY3OQoSSIqhP_*b(Syp=i1=-Y2U~X07}WvXb+;vx0m4A0JE{GpjcZ8RxTXTQ17OJ} zJfs7Z*CC`^PCoUEC@^b}Y-53#*LjSXbY-yv)ddRa>=E#zGqTrGe`GRdvVr270tTsk zh;rd~2WUNC!CE)M=FjrHcN>?ad|mY4trqlO*bL;UGh#?%$M1FUczjVZ`5ofn0uP;y zpz&b?gtiU&oP}_zAEDjQM64VR#1~`jX8>h3PXUi*G)ATSegl<*+ph6!<)E=(3_SdI zCX??_9_fCh^M6xg!PcxA4O>cWG6G)tC@+1;)qFDs8P+BZS;psjKG%+#w$MChvT?3t zcGQNovu4PMWMRGn{H#%Jw^aPVmxE?6${!#-_>9c+gn9ri&*Br*6c`g(%TmY2;(W|E zUq{{OOX*xsmyw>ryV+!JvO0{TX z2C$a+8TjQ~rs?^@B)cBV|k9&*INOj{nZNk>6LYqV^h zh_dXWzP*#yV78Kfy2-M{>R4?pUZVAEYmjap9HPgO?oSBwIxH1qx_17HY16ur*1Go@F3Y8;1RtG^Dfe#*_br3_Bw%14j4@L zX4gsPXV}5>IC$1x1Rn-rGff(GV{j4hJK<2}|3It=`htFrYyWBalaCGuEQ=DsY9B%bToj#=tSvwm%2E7v{2Xhn2y?%~co{7K)Z^BM&Tt)` z&%8r%|DeAxfqdGL&+AY;b1RGqt4}sL3Vn*2zLLwh+ff`B%C^6Z>#X?{@YDGVRAgxR z)Qgv0qkP!_{l(3&;rGUeK>F>xOYbjI-paGwS)_b%ishCf<(4UyuNNsFOlkQ+kuo&( zZj|xOX_mLpGkR$G6ZG8SB(f9G+JIX(XH9W(bHcsU<&cB@hS8~hW`Y| zfBF%FWwTAW*B=0AJ>z*|^$UyT*;&fI zX_i0CQr@vzuu}ix3<@JJa|tJ$vcvLK(><)2@~6z0t(0*zm(QKX0n?opWyHdfc|SIt z^AfM(CxJmf!;fq}1fkS5FULQ=3ymMSsVA?K5;!S=lM*;7fs+#WUnhZ!d5K3BaY*AE zU02fJhD+XGt-D_qP{n*X$D6DVT1si}u0MCGoUxjxJelI(vsMtP-(H=Kp?@*9S;O`hmFb5rRyLds(gt zac>jxf6>JY_W$i*ShSzMAPejqQ!C&K0lNh37jUb9UlZ^)0q+&?pn%T^_=m81gsTsg@9cG_6xXGz^@5-n}GKUcu>G+1bjuncLmHlTjVd`xdJW_uvWko z0&;51P3gcUT>M{R;bT@;FR~Zc1UiG>u-#c+Qd;7e?_7Ak2&U=uA>w0J-b(86q=yDP zd3^j`9%B~-ShCAX|7qZjidC@*`ylnW8F+&-M=92od$pjq3;J%{(=~)2@fj5OdP3s* zHGYI26ZmBet0>b@0m3^j;RuOeEbs$Dey<7o2H>;Rce$Vs&EzgOVj(BU@<{OdaWjRJ4h@&BQ~zpJBv zQs9s2@Z$o{6jf8-zY6>ZI(pjMLUK5+!_(dt!oR1(HwgSu9lk^0-`3m38t7kxOJ z_#e^H4-5ROI{bd%NgqCW4sXEkh<5zFpdS_Va=iLDIzI6q*5Q{5{Gbj$06g(ODEP~M z_ai~C=YIwU>}>qE2)v&EAAu+SFADyCQT|IY&=bD)T#k_VUBG9v4?}|9bt9*j{r5q1 zG~)9e!AJThQ!&01{(!*C{`eVz9~F37kEQDi0zV<}RUEB6FYu-3aYTi{gEfN) zHPAIr;B7j5JMdJVs|BC4IJrX4ytCDJkD&JmKTnV=UlRBM9e%ICOTSRk{}^}!ytoRT z{XfX?A5ZyllKzi^k0R{6#Q%lS&r+mcDDk<PweJ+$?mHHKOE$E+9N^N?*zVM3BOl4P^O}Rh`*zaBen_rxdN};!VxzM zyq7iT4D7`h2mum;e()z8L2Ki5eMRD1`280-P`)Sdw%a)3QGtI};2qmJg4WsSIvdY< zshk~RoI*Ee*HVEW5)9rEczO?m=tr73g7!4hb+5n=U(fH^^H~Jn7kHPO<7uxhU1#9g zB;!-V?*}+gmJ0mv2uIKwHeE4+w+VWw&$kQw=zdN|Yxs2S`55PKujcoXp0;07zR_-u zzm@}~U?#^82|kj(LgI%xAw4UhYnQ-J?BVwT4wMH4-ldc0O9HQ~<%E9_^dA6kz^p;< zAJaNBm2=>7PRRDh5%&QA&az&AM|J=3IX&S^Yf$3}indm89k zBJi&3`29N^DAx=8SSLrYeO(AXBk;p3IG*jrMDR=uOjNJ2I*wn?fl@8-t}Prv&*PI5ucE6-;3t;y`(h51 ze&7vw=}69V1zOoD=pCZLX@4MHH=oY)jkfdqdpJ;D68H{LQQAjD*UvG~Q#m~&>{hv) z17*q?96zj+!zBXm`YI=+eJFHY00))$IKIK}|IC516!=q(Xm`=z4+{Kx;LiqrlAMWN z&}hMvf{)&Azb5dWD>?ONMWRoi$@A6gNu9vkgq;-TScwXJRM&rR6nMMNZtNF$m#}+6 zy_7NFZJ1}taaPvh4}xAVACsMzb6_2(d|xDR5MG3}pqB8E+n^W+RS|hT;kAS!y!O+I zVn=yqi*a9)yq1GrIZIJypa#k)r!4?pG3C zGS$Ec@FXAoxNwW$qX>msCDI%cc!#hjmk9jyBA)N4uve!G{Dp+qt-4RPeVi;&`YHyM7INrstvouNU}P=nvWIbzTnqC4@&g2U|FUFA6@(1>RN9 z5kC_64FW$P`pYtbzfItycXEW>pYtrk7m(4)xLy$S`f>Kpz*9fc+glR`P||b#_*DTs zvja;wd-fg_f>#ngBS(G{7W6~6@O!zR>ed|e$8z9jp3n1*Ud8#`D)MpzPwisAlq2pI z_#H$q!dmcj4tzefJL)@j8>fa_!mbkF;p$JiDuE~Y=>7J7;A#BQj~AO5{&dBq8%MSQ zpRJt#CkOs+;HkbNmApvo9aRLM&q1H}FT7rMVUP}snw&@YNwrcG7w|UCJXex50?+in znq$rq5g~ye6Y`h%orH&c>^k}bz-P<%FyTQz(ajnELhz?uA=&6ZnFD_b;lW3_oiq5j z;M0?Xegp8?^k+ZesXV%Q(A$E)-fywZpVZ}8&hvn0<=My!BIR>6;YHcB;PW}~U(SJl zS@53_^_?!5O)cU1>gP4*2>jp>C-e#WCV?Nlk|Q1!`1Jzs(D`-WBD|o{f_=c-wFnV@ zEC>Ggz?1y-`eV32$gP1hkmYm`J`4Zq9C)SG7fU!xB8sYdJA-P%+pTEM!BN?1G_ew2 zG^(gqG&@Vxy2fQym5r*}tU8_L@nCn@8&Yxfjz1KLxr38w7Iv#R1SpJ?iriTu`I$Lt zDA3?{yZc*O6ASpUJqnhkMJ<964$Q*ASU7#k?M4%|UZ}d8TN4$k>JKDvC={5s zq7J@9R<}~!dRbd_eM!YdDd{&l z%PSijRZzLB+ZvWNgDBN7lXtq8wW-V6 z9BRwbHgu(QbDxy-{|`y06q{QveFrJ?`u(aeWn+TDAa#(kl+|fl7Y(4Bs|#wqKC%-h zW>=mF`c}L9IZ-Is-ILJSK~{*y1yzk|CAx2_-!@hNa~Zx$ti@dfTw~>mN*!5UV`ZzR z%Qrg9K)0-NsoLnST;a}$p?q3BEz7IjSt2h)WK}~;b$yn&Qp920y{xruS+iS{zq6b; zx+_txW)!x0QdE7*vSm$;4R!TxnkcGV+cM;&!8sj3X5r!ly1KH-Qw#BE$yrsFEzcfF zysDQq*DP<)X1fsBDt9F!w2TPb;;vyeLjjsRYGypuu(oAcYn!`9ZK&3kfr^lUaXK5R ziMgr8I4Ig(y+RI?+IVM$FvXoT=BZ3M+)%ef!d>cL3r+aQiPrr+iPoodE~E6hOD7dR zYw^lDyW(mz7KwVhF}k=tmCgmK{PkqqElt4Lx{w{92-B)oFv+ozAEQZ?>UMXYNDTkv zd~!4=h8q7N+^dSFaPgbwX~zAm5P+!om#v^?(Ux1kjZ%P4{@{uev zRcU!QN)U}C$PI%Fj2S{G7{_6@R34O~yt1;Y>ThIRfwMp(q5eQdVx-knmbrM$hm_eb zXAb6xIcE%uX-g+r2w&AngD0BWjKg(P z6TPZ0gtQ&WFL?G8mcAxS?xy144?TdRoz zaHy;5@9XV_%~3UX@I-?+2v$R?V%Vu{a-&1ksB9L>n_1h@OUqa)IeX)_BN*$g{qtC0)HVZ8wfM7J8YE z*34^bL@BcNHfJgIHZFgN5yNW?CcXLNv0*?Wyea=3U)#> z3Ky3P5Kd<{Y1P1$B3RG8Kx6mTUtw5vtuHfRXC}BsnaGYAKp?aDq+SKXq*wY zT98j|ZQ6^?hQ4G2Y_%E=V5-|mo{&En!!jRpD%0z?n)cVFcUI6) z84O4JFnZy;3Y1=-8WvElucU>b9|11%g#zAiUsP-NwSxM)W>x9zbWK+#)JCjoYQ}e6 z{iL6eUHdMic|kO?2Hs^T&>skqtH5|oYPb~J57Tz~QB`z3tvH-)LZERG6I@@in|fJ$ zUFK4|(H}mPjbw^O12z9_1buA4ox>W+t|p4EF<}+KxXM1bp>64uc=#xz@!SLhy}CFZ zU9kX6`nm-CL=5NRF%n-_SKBJ98r^d6JK=+g|F!GgrB3~Nw|MN(>&d;gt!XTs#GMxj zOH8vMFI(q6p*7Y#q|rD}iInq{5F=zcn;tW()j%_u592-2qaN-(CI0)pC*JX82NF&Y zTMrPngPBVG9Qs6^k$2;qT``+e8cNAEl*RLKI$PoTVljZNLNEz0poN#*{%I&B;n4p~ z2}`ppdcR&-FXXEs8Fu$XBA3ml7do2+s)1N698s}ui%+#g!mhf;hN^0{6mP;^m>xfL zC7|WtoRLna=u2yYvA_v?QPxpKT4f%oH+&1%#PA>rk2lxooIj0;bzYR3O{P3W%@C)h zEM@+roO5QnllrWA!2)>V=uOvMik9~bS@vur)&gp@)B>g|Ce~qZI1Z@3Vp*N%Cm z<++wSGMA>Y>LFLD3HG!u6hpy9s_I+2*6DPXYCpBp;G^*mpIO2Z5r4kxqdw$wyXmXbhiR{P=se7WZeFh{*iJW*~l* zeYmGz%PW^KoeMM8gW^5jC?D)l3oo8EV}7JUXMH`c>h|`^ss`0rQikObio{A4`?6C; z(NNw{AXC441HHc9Nun36m)W#hkHhQj>~tq+p^(qys0KNlYTZ$eJPnv122E zP@>iZX2C*mD0g?Fhk9xxh9wKV^s=d2Is6Q?XE=`G45r$hP*7R;YZ)R*&E)jDej)2- zqKm2ictmVUQF{BraC@>d(FrWaN^iQkH61av&jPWic)6^2FwA@ha9BI_^_*DxATUUlu zYc4B^1-eR9wR`PaH5!P;Bc#%ab!tD`sUjHbOSX_1nM5ptPjtn_#DvdBvh6ux!p8Ou zsb!IFd^0Y)lF`~PI#(#zNne%2h8cLj!E|RTE2n17QK&L16ggIWr%T2RRWBK#2%5Dr ztqDwb4Y&y!o5B{F!+|xJhEPYzFfS#g3)3p6mzP|Qh;;IuS-BgNOht5Es)?Me!s&UA z*kOfrJo+qJLomZfQW-4B0o0rqEdhxjTfA1SqRaxS2mS)98?DyIwvDUVVWtKyor%1Ff~vwTt&VvqOJtH0^` zEKs2U5pP3puWt$Vak;Vg!&BP^w%GsS@nE^VCfbI_KT_BWiYU0IOpdQkXNq7lN`{LS7etfIfB?54aN=<HW_DdDBtU{x0 z`tHZf6@4v`7QVSrWz*Ter+n4U22{^Yiifp-{?rH0DpT``>}$%-a?~mufHCHK-`u^u z8Jb$+WaURk_rZk;N6OR{rOr}3Q1klN(epIl>auWTjZPj;rpsAdhNk~`3>m}&4lI?x zQ-Zlo$x1Y7PVLFMoX?$j>f_unD|k5PS5hB~%wXOX#UqA9=0L-gLAOzqt#rr-al!?p z$+OlciD1bq(#1C#W*L^V`t}#nDp!o=4$Mu91(*%jSOG+I#vvgZVYr&=R&=C~B!==y zq7rsknvF^Ea$YWX5@zd*F!i*knjyKAr=(Y5zJSP=4cW-XYDTNnS$xyUV|hm1QzNLZ zH?#R3x68~6hBGHW9-1m7AAvu5x2`Uo+-)GW549jBr>WVEGmmX(gVjhqg@%=+XV7i5 zO_tg>%g|Mx+H3%$izSl;Ut!R%q$uk0@EY25+7gJvHFV)17fehX3Vro7C6rW$`l!Z^ zrat`JsO}b>LBPxh1<%>J+0cOoN>whiE%|66E1ntWEM?t8?zCVtY>|&%>&ob1a}JkE zGkQ9)(2IvRsaY@^M)29$zHlfQUY!yX>5kgn8wvA{M-S+!+2qy%eWOk4RI<~FPAST) zAIY2xqJh9_`G}lcH5h^}Hql6xgc=N1HJ;h|l#=+mUTm!f#OT6cj||}}wt*73S|#*g z4zAZar6h&w>TKelU@D;O>K$z1BwqG}|vON{lJ& ze0pDivF4j6I7b;q3B0{Q9~eXulrsuXYY`=|mCz8~^b*e6D^qgl%DiQ-4Qun4 z@6Sp&RY$L{|6Pcu^r>o&iUb1Ecj~m4U3-J@z4&R<%kxwuq;DH*FWs$jK$rgU-*9RP z@ycSxCFLfOPa>er|M5TZ7zsZ}RgB~H`HumuwO{f)HVN%KS?XV({td)f@e^hvb$-s! zUwIOJdF8!??}4mPlU|;?c*loKpNGoJzDYUCb4`XtdfBkDf5?2L{(ci_NPe>X!{Xe< z;Usax`TrcG{$+XziCmjro@a4Hq^IwwYA=~i!r8j?^8M7=;ssv2HZj67okV{M=?N#x zFW(og5b5>wy5cBvMg9)SP(YdfOdVdP*Fv3&u@vnhe}^!1p91#Z@RQ|{_K*6fEIUgm i{^v;>{hNP+!nznYE?OL1P*8OeTwcBjh+W1nL32y;k81OB=M|`_OL?X5@pd`QV_qk_sCs}a2 z``O=ry~;e#dCqg5^PJ~A=k=a*b5CjL+Hp?jc!zq%JHFv?0(W0)5lR%jt7x3U9F7u4 zq2mnvp6l>9P60Iw|4LNsSm;)g)6k{(NM^bRRQy;tMe(H}b>c(FbSHbvv#gjjbhxcB z(`6I&@CT1aen;SeACtr3NW;u@l3&bzP?WzVtDgE&4O`E@wPrmIuw#zL>+PebOx zhmikDKDG253q6SAgznJO9>X#0u`O`41XPHXZ@UoTPSonalOB$y2{3g=T zo`311s=@IsmEXzguTa@54K1y#a#99;?YbKlIL0+PV$>xwelo&LF7Z$Oyr%f!uP^o$ z^w&n7Yq((J{?pF8c=@v1F1z&N<%?%7U$$aR!_0=l%Vu77>8#Z&XU%r7m@}0;t6b|5 zvS@^RmOOt4;mMx+knxvJ5cxLflTJXNj|@*luRn>LVaPa<{KY4sPlo&x@%NrY{?|{! zf9*-+p9BgD27Ru9L{W>Lm1EokY$zPDVe8 zKHoVBo&D#D?94vFgMVY6drrdNc@p_3)(PcYbP{^*N$kA)B>AR5KX0s(3|Cd%e#goc zRjcb4t*Wo8a#RJ&=T$9UvTDig%U0JfSyeu7?(&r@mXt5LZTS)_?!+;Uxc61qN;gSi|Xo@tXNzM8FyGhE<*-O7A-EAgGftb zi%<$F`D<1z``(%*Rdw~Nf;Y^sx~yt`{i6CMjJb62lBJ8*EU!nomM^Ja5}aR9Ra#nh z?b@}akUGD<2<5zE*$ObP9hJ-Me5kc}-J(@Xs%loQs9CdW)shu8cb1ZA@$#~@N~Qm9 zxh`L|Wc89&YnPP%57QUqqwK4e)Gc3B0~vQH+mzpQ10rbQMYkbpx~l%p zx+PW1RxDk~vX0?mjjdjG0!GMLRCOC%U`18UqWYTJQD#ww4a}w`s%~#+sH$7CYW2z$ ziKJ!5Z)T_Em*TX0omwspEvK3-U_)THjZ*E((xN6a=Rg3PdTCpVUMYQ&c zb^k+K(T8f_FmQu!-2oX=u2oCKOD%o=yR|3QU%YH}-OANVr2MoLe00Q4aJQm#d6uud z9gaTI3|4<{RlTEbTeH-$x_&Wu zmeSW9OP4NRv%1!C$C5klSh*IBunMyXG#@mc`c*Y|)H#qJ#ME4P zA!jO=F?h!ac6$v}VW@!g8jF72+__bk%*uCM7Ybf8w`%sR*+n)wYmSA7!(h2|Rzbn& z;N_0F;jsUjU{%4aOJ=ELiWO4qxKXKQj}kIEYPJ=G7MB#-s7)=n)TUmF?rZ;=ImuySY$bFAK`a7&R215 z;9r#bDY81lv0Bk?mvD~bUKPG`&u@|6>5djKx(YXrp*QZdNu%lMaNQXC{V|Kba}50< zMeiR&|Ba&OeQC7(rxd+x4EUD0D>=pQJ0Y7G5|qUWDEI^R>`mj1P4=$fK; zjG=!`(fh{GFI03l7gl)E_WXvT>tpC;irzSeUZd#UW9VxXeQ*rDMbUk^qx1cdqF0Zh z|5DM@e#Fw};2+yEpR~V_em4H4>D9`A#?sU6V=TQTgCA4dk*7oX8#>LAK9`Z58Fa3* z(@$3hT}u-IyEEvS^Zr-{{VN&#i46MJGw6L8^ywM&{tWtz40^4yC(C<&20gtobSh|! zOFu5PVMIE*(2>WTL6`k86_b}ir;XB&CxcE|>BpBrPx~C>@-ygar%RF)X3$Sd3jr+2 zpkn|UdGrkW#1Sg?kuvCKWYEJI^tA6Vx;lfNx!$hLpr4r`r!IreeVg>tkU`H)69F4D z=xQrcVp}rkU(Vof%b@3F(AzWUU(KL*WYE)lqm1s%pij-<@5-QmErZ^jK|d#h9?PJ6 zGU&Y-^m8-li46LA8T7skx;KN~pFy9NK{qq#7i7=}Gw8kydMbl{VFuly`g!^$*TjE) z{%V20THvo1_^So}YJtC6;I9_=s|7||K#zRn(p$5iJLq)i&9VA%!wEgI)wN}WX?V^q zL=8`S7Qfm#CBPW2Wqh)K7|*mGhPl*8CM5g>!(0R=V-o%y!(4hLyCnQ;hPebuc1ZZ2 z80OL=*(TwiG0Y`LvQff6VwlspWSxZnj$tk_lGPHvmtig~l4TP9KEqs6BugZ`ieWA# zlKB$;4#QkRBs~(ojbSc5lWqxrn_(^`k`4)fi(xMLl7mAaOuL?8E-8}z6269EE+vu) z317i5mx9Tdgl99%B}KAJ!ZR4=QX<(Q;qw^g5+d0q;j;V&`FB}1}K!lyCJ zr9!e=!s8g`5;IvQ;bR{o%q4TOM8by{<`N>AFX8h#?ZA#ee&A_-ph*FY`6~poea3(~Y;yzZJHDkTGno0y^+pz4b0{o!;8y zZ3L%2J*6Al_2%LFUz?XO`j-$j8=}mgh=?r%+d=pt^?4M8r+E~EQcndhHCy>AWEcm{ z9SFBkwbp>wrAMFg_EWg=h}RU@WQ7sw){Q3bAc*GTPrw0P3eEip6Z4q)6Ho|XKJzRQ z{IV*h_13B1MX=zoN~E`5Y3~1Qc-YKE#>V#M7`J~N+Kt!V~mOSQ>6b%gU(7-*r5R@-R1Ldo1=lRIrxZ8}oA zT3e~)A_f)YCKUzv6f7j1zR6oAu*qAkU>zXTYy{v#?OPNMw9Q7lZ8Vj^EC*AN5X>%i z+7_B`qtcawO38fL%?BvYQz*2U^L*G2QG9I913S}|E zHo4kHTWqv9gE?W7`)m}iKGKp46-vn^Hd(jPI)&0U9>`$P^A#*1MA12%5;h2ZleY~} zirS$fIu+~|2J}w~4hnsf*M&?dAWuObAu=jcuv+MwybXXNxJ5;@DcAvsB6I=pVR5<@ z4m4(?rj2^kz9N}@3J02RqhT9u&tUGb$(=Tuuu&JM3rY>Q!XY_Np)6@H^dRgbglPu_ zHhIzGOUd1Yh%Z!77y2e|HK16aPDL~**dh!tfr2riqeZKDQ^Ayq_dpq`OF-yWVyoGx zP}-%%Cb!vWw~Y>FFsE#Cdfy)+e4H!c0V>lbpp;x^lN)TbL!oR~I>bp)!$7ENwSsko zuuZ#yokB;`Rq+W0`&GOPLdl;;2wUd^ir^9zp(_{`h9+;Lf^9-a(^c`^3ibk`2z>y2 zSe$-^12t{bt+t#&EmJ6&!#26vMq6w&mciU>lM^~S zl&b^a1GH12RKLq6ciU*cje69cJehq82byoAVH<7BU~ad`9X8slP-<38kiT1shd-r-I!=-{egIir{_~VFIF% zF7@7lWp^taXr7Ih*l0rrbE8devC%FY9n4@(*<^VkW>u1p3ls~jRw&hwb&Ex=Q)HGr zB_+WS30dM@gly3Q;r|M98N~QD1v`Yk$=eMm7U)$G2?hIw0j5A^;$4Jn(E{QA3YMw( z20*CU4!{R!pF*j9zfCr6)U96QfI(L%nagZ)*hU*|G?u~KYm*Z;no=k=Z$XCCyaP~* z+C>5)x)tmd1~gp-aaKZXm?se4uV5h|-B-anp>OiG0E*yt715z!moUH*3YtPk)5RK- zg4}>8Z@zlV$g&qI9B7G+%A(Y=YG(#>m(9^_qy09T=a$NlZquW1NcP!inT@t(Ft;n5 zT6!Rl=F$}m6T+T#fKu#6715$#yD*>`E0_>Enz4#cDd<8b%phOE5<>WH7*GUr?M;R{ z1segOeg^;_puIMlK2u98y43qVpl%y2w9y8IlDW|)x7cWxjhY$EgEl#3qaO7>m}csv zvh*%Om?}f+MU51 zQ#jQwfoQ@qLfEH4!4{#T8LRj%1!F4SR4^s5=L3#oB03Ec^eD#KyMJ-e~&=MP!jUOvrM+S4J&Cz9}eKwk>-Z4|MN8vzyHd>}o z79v4q0s9G2*(pFNwF?p%;a1Q?2y^NRhJ}t+tl}FLY*X>w3ib+pleZsG1P`i+l!7j3 z!;JD3EFoko287-%0DM@SHiZLix6zo5I@Eh~GP@KG)NP}MHd>d#++dR%ZM4%y)0c#3 z0&c;HXAwg44h6e}zRBAQC`Ij45&a4d3IpZ=kSiWV$fhe0E~{X*if>V{UFe&;q((2Lbs2P1&eNogx4=tWYvn+ho}^w9>WN)Ia-4-^A!%X&_=6mv?GJL(XrGO` zxhacBirR)8sdBr5orEY-LcxBaqv@)67vzvXj}Uw%3YG~S8%%&AxIslUD%d6rFoJ@; zLPyh8@q-HTloiXIr?dp>u~FSdTNFy>Hk;gTqcIyzWiUI`IToaI*=W9v)+v;d8*Fl; zLZxv*9$_INYPbwgie0TDxbsbh24O%mR+fxv4UknM>AIO4GOlX z_$~!wfG9`;fDcfYI=#iBx)lyI&qhmZv>}7J(I&UpXqSze8O(z=Ic1|Bk7z+Psujw% z(??}dSX03iAqwk3O2T|X@aY0!T?K1Ze4BzDLdTp|#rG=Mr{W#Rlk(hz9B%-{+J!2j zM8PsZ+NTzf570V~U_{$(G@(#3_u1rr8+D!QkOvI9LdjfalfyRJXrtX3%rTqXYomh- zrR5rsAz=$4nrMeW?9V6|Q}L#PDWPLvgbcBO2M7iD6f7i!sj3yM6FR21D!yI8P8FX} zuwUpHh5-2js+#X#98N3XW1!6eduD(070}KY4=V?}@|u;*wW5maJS%Irf*u9)0r~c; z`e`I}Y`0$PILz;2tE?%eHT@Ap?J*jRNeTT6yNFR_v{M>!XrdZ-v%+(f0Z;Td(78uH-8(OEOdB1E&(o&HvaX#h^B3Ns_44b@`sH;#8ef?IxODl-oa;v}6f2)6?ziLbR{oCKP z-gT+#3G86urJDJReZ#{~&>G0-#)MJstsHqDw)H){*&D#mNZwd6I?Q5hu{Oo(e;jCi zShNVBL|YM|w?5+SB`jL*&9Bc9U3BAP^KWl);$>XUuV2Zs^a~h=0>%gPqU-stSC8iW z=G`oZ>6?J!M{}EBBFO$3NP6_|cx8F%e|~?sR9ji*#*agf^tkm%%mci4skW$RskUqv z@C4uh|}C0hJ7WMO_q%AhqpLly8s@mKwT2J}w8$+wEz_}Z_u zU}q@mJ%AE9LI#F5fgjSNJAj%uAxUXL?E2_rj~+STl!~^Z^k^O4oIapZIO;FZjlqm! zwCSxHv<8cw(u;c54C>MP*(rVckZwHc?SyF9lQpl$KNxQ&@Q#44xdP5a$BH2$6n(_o zZu5nV{mRPBt2m$qQU!;R%O(U$jn9Me_r~)bbL-nI z{kH3)S)S5@_vn2YuYm(z4{D_L8N3VCwH5tTg2`zumv+`-Z!P)DwCRhzB?EV9=L8V7 zqZAAd$L4(en6n`KQ|)f>plT|;B_ZQuyw65m&$*mZ&=-PBI}2?@n}q*M+`{Z3r4T`n z`Q}@!qo;(A@6k`uTTdM>bNM4%oqA-OtF-7tt*M4B1TD&~7j4s;e}EUz48g=n{b>aF zX!`WHZuIK$)OfvUP;0v29WXV=#P@ZrG@&~a+P!DteVqP;l>jM<61sL>j~?$IuNxt6 zgEDiS`E5}N6e(g5@AsW?eFsg95`k>MO^Sc^CyyFz*|Slh79sM2gMm^;^vp}@h&R#&L# z{WS+EGEcfcvkL~L|MI1D8yHV;|6Nj=e9HGPW02Aw;C)3>d8gANiy7&2g)kn_V(^q#yCdyGo|^K|d5~o3H!A(DR{HvND(`;P*!+?0&fxm3+^qGZ;oUn8ZiM4a73^PvZz$vG=*Ihz z?-!rk`1NkfK?==$g?Y@iAL97S)kkqyV<&ne=^(_#|001EBLd%k-V*IGr%~W82&96Y zucNPjCxuFku5cyaJq{`wdWUF=9$?^Ey*u41k{{vlMDlyIg0UqTSMWUr4_k0l>SUve zyjQ`^fOfxLa3E;xS*RQP^vHXIW##Bp3wENTehEy&x%cdJI{swyN_|9&r|*_=;yi+) zRDCYajI0GCkCROp?pO7W0k07SV5fiddGgOWM8J-AP>+9nwR8o}?fRaf`pFPbssy-( z`{CN?$I|IP)xLJDv3MKOI@VmcK#vsf>jkPC@7GV%TZ?bnh4Ew=%x5l!zT2~Z4nF6t zNINQhavdVm`k?LM+)Jo++OHvKfzG2Z#-{`BbbHdB+w|#M>V3i1iC*1!O&p&`fXZKk z$(v(q-oB+EhEaWFJikRccTxnw>80$)x1pfMsmXI+<*A`)_OB2|CZB<3=75G1Mo+VM zz9sn!ghn;D5{IaE1l?I$wK4Hy^$J;fVJ0JrL%$J)#EwecwvqA`4b^{_Cx0OS&!Uwa z2)w}+YMrIGUahyzbq9@S=S}|zXQx6%{o1|1gr=d^x#+)o^y$Y!Mf+A=8jO7I((XIN z2xA|H6!UhLs&#zG*{>UOT|7`|&3v{jZA;gq9yx|IZ%LYu&C8I0LgD>->pbLr2SibR zFj}7rFZo0_cIlC$NWsZX$k<_Koh*xVy>_Gh@VQ5{{=Fpo(45&vdvCKeZX3}UgNgY& zMj?NUYH+31Zg#_GfOdT}Fb(y0A&P?IT%(Euzrr|uf!3Uhj1KuVcPVGzrzTH9Q0bvH z7mbdaA#p0*o9M@Jy6F_8o#aUFW+*Mikz5JRHuK6?@N2iZ`O^(!0t=heKR7hvSvrN^Jw^mxxCj*tc0^>}QGbB`YXFgIwFxQv~8!B9~9?XIAa zZ#)w!dSUesz!ot23icl9^B?(C2W44?i~X0V9-a6N9V*1*lk|c?-HDpoK?Rr*@cio!zj3 zXTW@)kO$GvAJQrY5k6{#D^kE;hW#;E0^0%XF0b4C?v-2;xu?!WVl-Uv?nN-;w2fCFFHB`H&r4;k`EWDlz!2oiJ{_zDv5}M$Gg4+TTF*30lv(`3x7JvL1*1px(th z*0BiLLrow-3yU-p5yfYMYxVhzoJ4+1jjTvFMa?SC0#W->JQ5!->5&-{ZPzw(x=qTT z6lL8~hCUvNzf0sCjDb6${g?)r^C~sHhin(5**0WDzvi7<^G^X$B&~T05ZR|j_j7La zy5UG_+*e|e{<9*na|R}H-c_>$lhvo!L#sbzU4t&Q_7)k}h;^TfOeI*N_%{3}zUH0v zKZOc2LzW63Ya4h-EOK<5Uwa^q%>3FzvC^iv)?5NJMN-*X(R@MN*(~k;dMd8YX{!E2nK3zl|Nq=Z~W&Gq%gI;*t3( z&C>t3mUY+8hDn+Zpclk)&o7Gs%s&S5InRg;J86%>NX(ZU0!MoMVu~lN6r}}w{W93m zpiMu48lp8f4kAaPb)6v4P)89lbYB!1M(JK5-_W@3S%6P`1wY!np5%j&=ocS?Q0nlA z_Sjxy56joQkEw_2CzN6;Ege6LYV1N`%PLWa7ePexu+~%o5s~4nZp=U(Ptd!x(w<}h z#6Yxa*dO`KscmS2B!rGzp+*{>W`4?2xV|2FDl;CwMZ7byssnbo`;6{yKwe}hOKbiV zHYJZ33o1mxhAoj%7qR%)MaS=4?z69aq&A{j!1|#Vi zr!ZA&99D=J*&?a&Yb+ZskWluTCg>_geH96isn(nTVqist^$%J)`q@15k#A#B4HE32 z-S=lqez|O-DVj_K;7wpck7%{OdtU@ijFsF4jDEzzH;+d_Sv2IoS8JNU{8>Elcoy%w zEGLS0|G9{wGjd){$3;_ix;6f%EOk_{EU}ZufE${b8ZVMT^%Uc;&E z5z{<}fNh#5=soD;658CJ0lFs{SZj90Y&bf&0KwCE!b%_ zxMU&dVtKssgRSLDl$2&ws(|7O4O3eL70 zFJqD$|M;Asaok_-*B;wmY78#mDfe2`wg1T50Zl)q8<%2^j|qW4GCV=s@E_Qf3m8LB zg2AD0{+o&og)eWrxZ-ph~EL+IHVg1{m6&WxmkLA|LN<8 ze!+oc!~2ZdV!Rv~s#&)+I@ft^^ipgcEymRZY?wA6159cU>)1xFwHd3&4ll^{!)3N=OnYwd3_rN%jCG~Ak(|cl>;jS_9u`yw`vrPW}G2y{6 zVFyf-$?qN$_KXSVj|rD#hOtW>L>M-&(KhfSHkotIwt#UgV59=Zu)b{XIn4v#gi)t` zch_Q6s`1+NUS}+-JGI9)O{4`{CZ2^2<1C`l`NNTcaV=SAtsiF9tb2U@uvFJZZp`{4 zJMsf9-=HmVX`&umNs+6(j%&7O<)cdKz11PZB)M$Ogn7*ewC4TK@jAsLV&q`txTbC7 znP6aOpLw#+JH@L#c4kXCQyvQ8wn`bDD7-yuoMU96ezkrfNSM7$)Hbw0;1fB}5{uwn z-@$$?_EBEig-lTW9V8p^bbfj(nC`?zT1so0aw?ND&c?X1PN}Nv-MMsC-eA~VKQ4D%vXnG8@cnVU7S$S!TL$ulZ+ou`VvGzer`m8d&qDP9GKds#=%@y9EzK5B#!V=YTI$WqYkC^QO3~h5Pc($kCGe z8@WCG!v2;AEE5+EuIY!q5N&XCgF22|MOl+=N9cR|>|6VmTPJ_6?+3l!`c=)}A{5cNI>v5q5q{nMYFaE#*p zk@qz4FjMAp&G-i%X3owY<_Pg6Yg$6BUYHeI4?EjyMl6QX?5?!6sp; zaR@IJfL$0*B6=&vzC2X!MPQ5Xcl+Z9^ZdrPxS0nrZod)J9>cH~P>vC3dDQ!3Xx!4| z{UHG3+<}${y$@KlpD3CK?0;{Oex^tl23j_Ge`?VlRJ4mqTAuR$0|EiSe-!wL_aT8z z-d_MB$&Uc^C{7j#`C)-@A1Ls1P)0XN+gIq{=y~x@^NjboL*9I#{&amhUv-#QZMS+4bV=->igs9CNQrbI=P+{pR!#{*Mn4)$#tXYr z=deF|9R?d~glW0fd9C)?Q&+KOlmB)Un~kbpz=r98A<_2br>M3K3LT5**3|H%|mwKUxxnLXBPIvz0-m+vnBuD3tk8By2{Ou8< z<52wM!$5I;5K{^3ZX{m^JkGRV)GaqJ!+eSzaY$@}P8K^lks;Tr`F>-tAm)$sr_ep2 zqs+sbvQX>9FNchYX9kL5tCFE;)_C2S8kjM%o{MZ5pF9UjoIsowxeA6Y*jsXVdsh8v zt#CW{6X-A;2#>2jBcT0ZqI+qnF%i90&$!43STFRWh}vUWZhuRbJNW_v7(X>_!wOh{|sz9nohZ&r+4vI zgVR<2=61}BLB4S9<~M-(pF*R>n(?4T^*r$eM)_g?lLmjEz8xvR>;BirOPN+yYY4l} zPew4$&9JgE@H``w>!5`X%!>vv_&8I^ODX8TsE*`vC?V6z(&$>}Uo^FRWD6~qo?2Q{ z%H(T@F^OKW6+d_3hi?{sui$SK{AWf!!=DI#GWI9^3pi_+S+-2C^>byvB&Yrk>mKKF zKumdkFoPp#yvMtn2o^F(ee;O`RtvOdFGTsCzk>)Kpq&;*G@(!pTWv1>l-ip%dC*4l zxJiNs3}p%>GxwSlx!OisY_vCnnO8X#bDxbm*vsId=AFn;irNi?s>T#d5W;pT1zku_ z8+rsbdGi%4Ap~Eof(=5))EZC(cc_R?1-pd-#{v}`6#6Ew3tCZ7o`OC=l($eR%d(d! z9H?%ibvD|S!OXjze83#DQPV~}n0)i0WM1&(12o@8!#3KU!Q5e!I~7XHl|eLNH6cvf z04Nq{Q4!o>BtwTVG=Qap$EkP+gp$uqNcUAx7dkF(0gB){715wzi!h)?1EM4e z097a#);4@tR$k@g1C;AEg_hW8V+J#?aVm~B8|}8y!3^e#m0&&1u!Cn0O>o!_vqn#PdyvC`RyKS`JMm;aib zlqNDoQ(Ps304b^)h||rI}oiA>KvEK1Lv#fP!TzzCpnjp>Ohb07|L5R0QvvQc$lj;KqxB4rC@x zS0HSlU?Cyut6IT2q2nM9pa^aUf+EBK_^>#=3J037(Ugtm^G%InE>t*}OKh~(MmsZ@ zd7+aJnB{Gch4$OjJT4>fPz~Oj$g) z^NLY|3mjH_3G8GY4uvQq*iz(P4bhKhX6w(CX!?F)59B9f$J(DaBP^%S6X5QuG z1GLUY+if(F!ORPtin-rLU0)iZ>I#(xg}lYH2w^)1Qiw+p!iKzNDn%_+5hV(yubVaq zBThdH9ZgrocPSWC@uq?)q2nMrln}ulAYxnv3jtYXUgT882-|3*jdm-P%)HI1n0sw> z&_?smv>3?Do1BWd#71jvv?GI=*Etn)myPx*l%}diE`)W2Fj1z}=y1wDjp#R`Unj#jMV8x?F*@qG6vbt!aQ+yX=~^KjFW4~xueoP2=#Y_!Zq zTQZn=ms2sf+i1*29k~_*CG#GqVs_hTp^erlREj#NR81-9f>0JcU%?VWHeG>md<7d+ ze20QvLdRt-KoQ)hBKj2^6b2Xpxr=uZvgrzhcPUs6$YL}As$w+SXs3;u3MDfybSmbQ zje6{>mtlpHnYTI>bFGcG*=QnznKwEWbH75VeG76SY$rr1x&WovF%{9PV4pCc86&Z{ z6d{|jK)Akwx{9w;uuW8%<>}JI)?qb}5u4?1mnMy@W7rzd-oE zf)0payidVGLhzLViUq1wM6H4i!T=K}*d=r{V-?@0psC_{Ay(=V5T(wy)vQw}?ZTU! zs;G@N+G(Tx8O*%Ssh9_CG>@kS@IYEvp_E*0lWT3XO`&X9yk;sz)qzmeG6ky%VVf2O z+l7v%tKwq{CRBV%K^KJ6h8{o>oKFG-6)LC;1BM#~8-;^;;dI9*bIK1D< z2WX#-I;M_CBi{M znAU~VVu3s$;spxk6T%{41#5+l7Ompj6zov(y$bdT9lJ_^BG`f4DafT@9wA$_f@OeE zvKl}Yu3e!lMu$!Aw9$l(y1r(Y*{yJ-g z?L_RL79WRz`^s@zWDCN;^Ng6j%*?|gQg8i|9-Z71Y%TS)em|>qw%+P8j`7HX6R!x3 zJZ!0lqW(PHc-4G1!K9@go@{BIJm$28{c1PkM8JvB^!ZP`|1X#009kW!BIyfm9%hZh zDG0Y-%xg_+b|$@eoyLn7VuK4%RK6*_KZ2s*vL-B~E-c`#Kyuu#$+|6h0G4XgBRgEl zFTX!>zHE!Fvz!kY8-BV3wn}dQ7oKM0Ian+F*htvuoshs=&2^>ghj5J9v937&K~^;D ztayKxvsZ72Q8%`Z!^zF_i#K6PRzIbfTd;SZJ@c#B>0>hA60LIAPt#lP#>wwFJLcnTJWkW(HeNlWeySOUcKDPl z6o=%}KHccMWkg=V>k=G!-y6MlD3Ur|+la$Xj;MbK$L-`hvb?Q=GZnk$OC;_qI`C?_ z(3vX6QD294KVN{hhP;K%JMaD;-YXYIZ*&Ht<>xq!7vk?`IX}&)^7Ti>EOU+B@ef_j zw++1Bto$QRaa@TbxEHP;7OR}Uewb#_?(2ux^#{c^!`eE{{}hcA)PDK->hYz<_(&X| zmff@FH+Zl9c_3Ol#P19b`{isd&a9;TPfPeI6vSb?%!45VxIXwNf3(u;Jd*H3F&r5* zK8c&>_?@2`J*Cc1QKVE$x%X4X`JGz=xZV)*euTp)N8a{pddgq)ISyCv2%LA9_fs5W zGqxXjOVbAf(W|~uTJ*|2-|`pzX-!ts-Zer0`r}f@l53)u=IJ$uaWvrfDBjZxW>D=YbjuUwItP$`2`*iu@t6KxcX~_uk zSU=1Rwfkm4TJr1o5s%mIyB%=@ueIr|m+P(9;XoYDVSb_);J)ZiO?M6kaVWC@w_swE zg7N-b+>V(7VyFO@P;UmWmeFeMqJJ@#K3{rM(D=+c^?Gop+@s?CF`O%H8P9GJrwngE z3tR4O(G8q09SY(AR)KXx$9a?|MGIaQWke}np~3A{&~YU$d3q3_AaO|7X2f;ppc(5QQH)=?HC--r@MZ^8%{in|>K=-#|4-@Rd6{(Q1eW_Nr*P$2e2sx2}mx5xr z6m*O?apF6s2ytI7-oVFkHaO?WZ=nx}o2OHw=mTD=&zJK{wF-%T7}4o4E-OX&R)xi8 zZZTYo$^HS;8z#{PpuEu(aSPMR?2YqAo$<0vOzB(8%@KtTz za2gC2y}bGgyJ{ita=qY)67~g>teZ;-URmTfdbCPdBU#cf=*5 zjkGl`FwZFq(Zng#R`Jwt@;F8Keixzue@aV(J~Ia_O9QwE#h(~|;1lI=gjuPzvkwKe zi*N}DhvQ4N1>#se!f~in>*+lOX!&!fw#xWYzjl)qgR3}kkS_X!e6NZm5e{)B+GB?y zQr9lR^?ry9XbZ&kBw^p7fY$S>h*N-_W;oL0475(^)@yLhtn#x`CktEA8?4!d_^wjtmSD|iq@)lN7@yVV zkCr)uHHX07I=Kxsc?>dfq0QF|_&gauftY9T?^7!IDv&o3!`Q7P^ruHDZp6aRua^|4go8S`|RrhZxJ z^ZLA+*fp(_8)2m_&<0lq!+@e$azwMUDOK~mF=DIpKu8yK>a#fela`yk8G+Wx-AD=* zVCIX36Xt!$Djl8Hmq@40ZOcp>K>!I8@Dix-8q|3k!52i%1yq66DFyRq7-m{1Q^wVn zjQ-ZF7HZrH6`sZ5&ZS?C2b4StjQ+1Sp)Y6n+PJzoGI5tb76Z9_j&n zKk$!%?}zMdBjdb*9>w<>{%!R~`g8m|;okHXhGo$=`64ix_xg=JQnmibJ778rn^Y^N zzT{29)C5g2^Lj-RMn24m41+15m}1H8!sIY|BKvY8#}KuOMnP@&@~0#zALH5xJBHVj1~AAWAKBhaz-Y=bzcJVvfy}w2&4{5jdAJP`S3u{jMHf~iR`LpN> zpGQx1bnS)gR1rk)r7idqdq5yQ)I!gTr-11tR0X;;-#bgSn?695yel0Vy2r{FlNaLL zskP2vAzw>=Zs(7J>`ES^{!$-egyio>g%c#kla&_Hst;t;pZuoSwvqK?8T)sm((SX- z)q>dOznSWo`V;^9y^9Bbd-joW>Ax%SIgSHHJ_>Vk7HYj3-RZh&=^c`7VW*%x?msjw*{6z@}n5kdSCWGUBg_KlW zz#x!m4uwoTr_`d%`8p_8x%KAP_2}HIbuG9BpBy+P7@fQw3mTyK0)cr2W&`6R?_7A-&&Rd37vNDrOo&U6`DEN3=EYy2P#V?nGAy-^z3hjm)b|mf zj%Eo7B$<){Y!skH&9#d#CBdQq*-(_rOd zK$HNHGF-7E#AkPKYZ&Q1V-Y@Fdo}Zb#s`O)Wah(jtumxo-8(?)iJb!9DBlJhD^v6m z7JWes5^mz<;~muf16*~1*>EM9p|_9{cv3247t z6f~1KoeGNtV0>so0dmV3zq}?0($ov69FS>;ud|TiT=tBh%)z{$LlGyn;Vdt5&GPcx zI6{Ym>vzZ*p@3HLT&QS3yEg%cW+Gf1f$;1kg)x(S+q>xw4fAjtr4G{$cls=8#UPSZ znDFTgZc#k$itTQA1@b`ov9{;f`s*iX) zF4686kH>B!8XpuG<@6}Zf5+)p`=Q%^!|Bn;l+)8m+^n}x8u3BBV<#=)Mz(9|^;Ic6phZ?VTXw5gm z-P2zniF|~;!Rzp^3b!-1XieuMuJvYjdkZE z=S0R|MzWSAoijy^y?)(%{U)5WGfNUyXz(}3Y{_Y_v)XdCSj;6U7C&7g6 zhsahB4YQ>U!Fg`{SbA-!1qVgo(gLcPuAoig=OcLa8eBp^e~f9kuMgq5d6b0waJ}4L zi59_bYYXOHQeH>$bcnOsdE^*w!D=WRGt5gKlIafS9Z36(m6=?O_Pv8?$3A4b7@x*y z1XGZgsVxR{sOBA(9^i$X@A9Wol<5VAB+y_#t6$O_~i7T_}?NwV;}Kfv+z8eHT16cd$vlx6Cv=uc6` zKjYu$u$eTj3b+BRhf1m7AZmSZ1Xs>SJ~(pB8lJNEqAP+pNaqJft=etwLr6n)#M;OryqI6+cyds@xgtTGq#wns50NiH!q%lh?e6!W3})!!Nk6az z=FDYJ$gv&yT->{MB6v}WRf;}oo&yP2aID4Wou1@*f0h19EB(|hS7xN|TelABu{N4i zN_}`{o+(9yIYFiPAyOc(zIC^d7aJD2zYvPA7jr1gaIieB%y|}FQX21-?x`XtA+*VH zNXO-$t@)}B8&PU#Rh8WUF#{1bZ`Cf&u0?p=FOW(0LSPU+Dq&^^QzB|&PKsXWu-7RgsdO^*2{r)R}h?!Rme9^bZ)3`vAEx(hLUUL*qG*L8HNUL%@ZZ?jQ_{W{9Sl z@<$gAml{XrVVgl_M0yQI{)Ka%17k4q@dP2}>&v#tOa*ELtPC+?lmwk3|q5YnMZ(M_L*Lni6H`}aiHV{qiH;N)%Um%bq$f$f{he(IW_E}ZDT z!_YGnz17V5NX7xCL*?FXiF4;%R>-vIL?oNy>lA(FSqjOWBMb|->5&0^_wFOhJ7l$< z3KqRpKdJe3&2XY`XLSs`EdArc;uP-VA@A@}mOlnX(La?CO#R?;d{XCis+2?+ofXun z7)nk@yI1`v+=s8E_15M_g2&TM3sXt?l$-Y3cvK&r{;JmUvn+?BD6U0+1gO`1qPPCB z4Jo?eUTmDWDmDne3t}yH{rOo~?>%DqT}};^L&LemQj!Bqn2R8;k+AN;@VmBv4#91{ z5f4KT*|SF+49jKNBlKaUUcjY%FMJF=kURS{3Pd4izKYHR#X?oWFF49WFn1+q?O!Xd zM&I4by5|aLL5f~1b+#X=dra|6xgp~~x&J9DdzU;77$?!3>(2AV7QW~^( zwA701IhGda7JPd2s@af?O7s9!?xie@#FaD(M{U_C>@k0w6wjOUsnt=rb9&}j1)2J) zLM#FB5udmsdj!dQ;Wo$($B^yEm_SB8b6e{dj^+L@9P69#Mmkmy&~hx#7dh7Z%CSz9{@R`UT9H*h|7(u* z?-a{=el|+;O{!wU9fEUWAo|O=!4P7^Iw!K(c)eUtIt(`xW*! zaH)DMVa2m>ecEy|Yb&Ahm~t|FR}F5WTn(Huf>dH2!Wk5Kc9>uNQ2dTFD%egK+)O2o z1J8EPS!Csg>0b${Inyt(>}=)ko?65(J4fgSkA&LrNG&X#7P~HX5SW+j(C)ns+hfUc zIGH_1U}Umz)ci0u@W+h!fOawFYwqkCON$EnIfSmIH)EoPCcE2-Hd?+LXl0DUAs2$u z9I`K`@gn>X*2s6Ck)L$Jn3KpnZ^lvoO_+>qU%=_-E`Akq{SF_F4x@3t!u>K7$I~`mm!6kNXeUCn-?>)&ptfL-+Y|zwFe`N9)GyM?z6L5Q z4>-pYN-H$q8-Ud@<7CPeyTQ$q=Jcg2CFe>7QBd{0y#G)Mc1tQG;3<4q1#^Y+sn?9~^u#uvWN;M;TxW4WIupQ zlon7RACu1H_iQ>cfOS!C)W%w%&bb!aFhk72+|wo@83S-)_sp$~ffnf3P^BLEI2Gr= zh|BJlGAL_X4FI2egz^cd{5valTF)%eLMmWk9|fajEKH4*@3`7sKX_Q$GD?L50Bp;L z*_8KKO_?`wq+!d7auPQvvC{~hWKayF3!gO6i>ljBu}35m^KsKM%pw*+TJkGu=sHzV z)>S~!sX_F6i0{)j-fp$)oZS`$JwdKTnRbWOH(EpRL@$yBsKP=_0NhjiXG#gJii1xs z+&XY2=`ANo#3d#^0s)q3xx%s#tNMjl6}qSX1ftMXc#%t(;9E4idBE!3kw4ahGw-*! zc<%{`Sa9qYOLq!(=`pCD*^NZ7Cd@=0b{h2G>yah0;4L56klSZmLnC&FxzWl6pS(np z+yXF;BnN9wzNM^!{DSAjuTmX{lplWOLBq)%2QF>nR;z__yCTOW>B2dQ*|byG>Uk?^ zze$s+`*Wx`zG>zRqR0HFd!^bY)5yY9k-OVUD9&2NZ$b90yO9fAq}g(dw6!)cUnOPS zp$h7r_PEu3P4!>Ia&WgG%n_)#Lg?uF^OF4BnYA9~`Zx?mSvQNwk#+L(+Q!SQ4XKiUzL^8bf~LNb_DTxGR42 zl*2t&*Pmr1qIV9*Q|H9Zv!j>dV<1=KOH}%9y=K7Z^BZsK%MRSWbm>yW>+$2>>D%xP zp5Gu3hj9?!lD!BYi1$z5h7XDuW@OM;40>bamEqE6e!k^uzZTqqrH23Tj;rgZ;Nxxq zEK=e_=fpogyEK}0Io@Di?JpX{;jMV&vm@H3`_b;Af3vT<3_>DD&($_81p%%lJ4k?B z*X10NLeJPAj6TiN;TZg9pgWqubtgL?>8~m{+1`qfv^DPH!AR)MDxNW)c~9JC&iol- zRI59(Iyo>S8Qpad5T9VZQTl;!&PK^{p+LlbqHX*=VhUoB&o0yM?}4(V_~K2@ou}hZ zA*5|XP3w>hTJoqlvc^te1$XYai?U zFel?%VmJ0Y0ks`PTg2A*1SkC2H)`6H{tNapnd2C8a3}si25dMZ7L0E2$f55UyYc-T zcE0ACck%f{M2qurPB2-NyEwZZP}@)lPab%X;{nW^uKDeSQ_?5INe0VrkR9 zmj@n`oMAZM^8>$5$FJ*voa~1n2eerusoQYm%y`aU?l)dsF!KHGFx(4$quKUnaV?CS zkk!ZZYoQ;cZ(WOyvSMnTXnQM9HoS{ch5@%)HplwfwzrJZ&!Vq{E{E~&0A2iZbjAD( zgLtx!ls}7m=fnJ%Dpqih6O&YkMCXlhk1C+AXU}5x;jcYFn`vF>w*axv3t{|N1k&Za zYjw&}wH5uK;2*jg^hans9`iv-8_wQpvE@v;Kx9~5Kjv;?<&7UmLvhdf24ayhoUUTp z&#V-=PguF;oF=gHMWooZHV5T`6Zh>7a1- zH?0UvvyhHg>cE}-q6ow6tq@Ae>@94)^AX+LxldV%V0wrs-XPq!@_jM#vdqY>cWmIh zFz*`xofRd^c>Ly@#gg}^a`Da`cx1jP<@$=n!{t}H@_0clZH~&pbWW&tk2&zRSSsiB zX`?F&N}yW8=t9FXgAcQk;H1_+RLaz&7-qB$HC(P~a#Ts26a(J-mXm_Im4nlqu!yeO zp3G$v8fhHXxfAO^veicZw7__Y2SbO{hwf|ny~h%KpUZq7GYGx)N%y%@j_eJ{njeC9 zVWr!}B_gdVMz6HDqTO6Po8<1HF6*VDKVJv=t^2nkJUG36QWTW`|$^dtVYE~ zQYn*NF4i;R%&%ji4l~P)t1`zU*;Xj%p6bKp1)5dcID~eNLU0Jf)TI)ee(s!cmXdTQ zc)A<~L_A-@@PM2<_mCK#FROTrjZk;8ZW zNQE30GKc=iwyO|5btekA{`g%;tZjs=ut7)x&}iJ8+`WRj(Q$TJ)s4)h&1c^jvA#96 zMzzs)+C~%O;fX}#%TZ5MZ=rcV5`#r%o6Jjcfo9ofL2KleH$lvk0#EjtR|-xj5E#>E? z&rF}+8>8O=G_BG4{Uaz}px>DEGpXRH^1VJfy=8}->~ub=;DMfuV%z5XVocs=$$7IF zswI|QW8m;T-^inuw(!%W_^4^U*QG_eFu?$As}}jcf??i;4agKK?NixS+z-{!rK3fM zKgGW}GgzmKv#;ds3ls<6%j9kINmSVV9l1zVD_#+?7 zhGPPkNmQ!soQNTnb=;ZXyWsXL#51Gma`18wu6;;G*fGD6TmH=L29+*OMvI%}*cF&A zFT(ajYk4TLJW&wCw=8v2rQ+win46^9xjCKNvyxjnDNa&Y*`>4_dFqVWRjGtW$@wgE z+8K!6I4p(Q9LMU^U&N^LL_iDitQXUK#K8>5y7z3xUMfD_+~f2Y9SdkTzEbpwwuz^Z zqm`4K0b`GWySON}^X2$ESw^Mzu0XWJSsMM`uoJVmkasd0>Q~OA_2bCbo%8+_rvseC zr@q5Z3Y*hS-bP56z9;$*juI>;AM|cQ5XxcbzJErFtP@8o-)3K+*rjiaT;hgby!jJ*RhrpzlB>%n+~jr!O6|lm>Y@| zE@I>bFEV}7`Wt06+w|y^jjiL0{{!2y+Wku)tN7o6-g9v=t)t!lIw+CUO6~srK%x!! z!u|wp;}1~Dn{R@T+?t^~V#YT_Ij?TSr8ddnZq7J}r4(H6O3_!ayBB{B4*uY ze+q+uRB$WlXIqJykPn>!p+{Hy-f%Wl{ zR8EE;f7P*PC6_NsZ{jPu%zsS!@BgLgSDiTh6@O{^WB3T}3GzSo zWvl%ErT$GwkMr9Z!)PBWEPxNPyWvQI)<@*)ryNr8b@NBPjflh_)?}}1Y?7WYgibhy zApb&VFCbbV=Joi+1W_8O55LxTiGe)qrE3Gh=!{>iSWAnJ;~pOd34HmwG`ePdeE&HC z=l(s%u$xt?1^?`i4~+|;`PZ>o-9I0Edeq7gmw+uqhX$RH%CE>1K7j!ae^`}$dkmQQ z^aK15{G$@kTOU+fx^r&8(2lMiw1Ywf0cJyADMPNgwr;w*x%rXfa#lEKz<-((Mm9Vygxx;Bb({ zy!gAQK@!{+0XRM>fz&`Am8?W+7{B=Y1f~P*A>Ju`HRyah$cv5zZw2E!Cb3h;1;}6l zuElMig0$$4^!UD9U`PgDAl6?*4HoPP#t)v(J}mo*bSH;es=x(8{LgJ?YoGFvUT`Sn zd|r?5#@^_5=73LE@6iihfy2$fAN+bJS7LFkGX62H5Hcb5Eih_4VyTU@6EEw=QT(wo z#9+LMypr98? zr#+a9JfRH5h{&2D1um-D6mXR(tt( z<_dNN-i9_ z_!m%@Npvna9{$E#;+p8>Gf=j#;WGkS(|wlXQ_mTAVY9GFnga6A{xiyH#%>pPuk=>q zPb?wFhrJ$T1LP4e)^J2*eJOvYO}Y@Y40I>qsYlQy;;&h7w$*C&K>ij@aORW2!~=Q(PD%EJqEqr|J$RMeT|W3V+-2PpDtH?}t_#P_ufoU( zp@Gwf&LJEB{2u8k(s|RFe}eBIqEfglj4$G^IR%HTg2qnveC!orSoFCel%fRQF=vtZ z0b5E4lPn$eRD2o64AuW(cT5@+ycV5Kel+Yf+j}?*ICucBa$M4N+;bMZA8t6GZfEMP z*&8M~9m9{xcc{y7%o1K_`fujf;-J7ry}PVX+6 zW#MnKhVgSXY1vh5O=~fc-Nnk4SMB?!{LGBry0KbLqCOy_s(rZz<$pl##6Z!X#)NZoSU9a4DfpA5I!0&u zOtAI;(RMEIQB~Le&u9jN63<{s80qF``i1>BY>}aZ~aK- zoU`{{`?c2EYp=cbS_|Z<#+V)=B206g2N%{ryFCVF03$*N4@0-7UBa~Sg&R7N)|p+D zG->5{cM-+UAqn87evOZB(Fmp4#ax*mkxLn2|LA!K2P6Tp0vMMp9tHFtr7gKdAjiq= zcuM*E_a=PNP0Xxj5LAmcVv)(XP-*+lZ?~MTFL`{4#(V1GgowV=xTA*@1Xm1P8KxV! zp;70 z*{p;BM;$ozF?npzb9!K~1iGJ;l2_O>je|4vkc~!d6Th7jMKshT1iER$=GG%&ERAg5 zpmj=CN7*EcoC&~(;!sZh^LS&%?wZQDS8UW6;<1WPOtZZM#lwh84gqON%KttO89flO zJlsUB?(Z$pB_DZAGCYu!B0ayf7~?uHJngjBn>=do92)k^K>&gAwUG&#WZ_EfPOu5E*ZEKi zjhA8wwb2CMv^-QK{-~l8%r6(cod)(QnR|Vzrst~u*ZM|PWYyC{J+B!>gwghA+*u5{}UlX6-NlYaMQD;)T(J4@%SdXs) zLE8aUD`Q!6y$_}QM2^L|*=N+ar7wAdo)Ew0e9PSAGwVIVUn%_&9Ff~;YL^h>EOiLT zZS)4DqAE$!csSvm%X~|WeJlp1OQKb8I5#ZP<`TC1RXYqIrVHBMZP1Q3x-Mucx_6rA zp`!;od%zKm#*4Kn9Q9eH-97+oM2BOWGU^fkp+Hw~OyeHrLHbFez(l~;X#A~+LD|gx zJBV^oBvDh4v)2W@490Q=?*)sodEz!>xPq6BqAnw4OpCQGZO}ynrj_Y1S5G?_X^f;# z)Rs_3G7M8_^u~d-FO92grOn+_#Pt-ivgzjX=>((O>!B2fqUIXjPK`7oYBnht_~vSB znidjS@Zkmv*NGOuMr-W94ix2|p@k1<4hsz6{SyHphbrMf-4McSqPI8IiD#}dH}GWo z&xu$lSn5~OBV2l$UN7u5J9>}e6W?IYN;i=*zE?=8o479tET|~)Q80)Dr15&y;Ay22 zrM^X|FE{9FbVfDWz0hh~dZG-bS9+H})*m?yLYiXWsL=$Cz8}6yO};Lupef(SklXx+ z{9o&VD%&($-4P#M-7IviV;g+KVvDX|G-|0vBpFz?I6Flp=W_w?K8w2K@H%E1+!hgt zLP}`^#|g(dvo@eTb>|s=i-!>B-(B()6?SeV)N7m5TudtYzEJJlwv^vvomsOuFmmVR za zKZH8MiY3NZ&)9W6i0sT7u20vNjEk=_5+FL*z)mC|tx|f%#;30?F=$@6wMr35@1jhs zZ!FPV^?-ixo6c|BuOn9E!nC$WPK@|EO`eQ$XT~Z6O#?b~HkOkZvzvQ~jUzux5yuuu+gqrmd73o_Wje4F zweLoL!Ks37p$?31EF92H%*x>$zIRlXLOJ^}wO$iLgK=_av>)61%-0Bam zk=AdBEx2s!ITUZ-mCqiZD2qQhV`-c#!*FOxqbZOX6^za^ZA^tB$#{ucA3fw7Oq z;+l$iKmqH{*raAwEpO_{>V!GRLdppsiH>t)H6>H3-Ix`Es@)k@;V;pNZxU@nu^l0& zbw<%(Ur*C(uSX}B^4|b{J&ZlcA0Z?E(9!;IyxA@@y{I#lkY0) zY?EhW@=0EdzLmm0`5l~s`EwsP!w0g2%>1JNb|P=Ye-goERk%8Nr-78Cb^<$b_M+IX z+^f0mcWf}A63QOi@h#PnydQ1YJSbd5f6UcKy9*%NgLA5xCg+}|R~|m^7tjGohc;oG za%}LZTxj8#Z!K}Qpi=c@JA2ZFHP@ogjjU*e&z^K3_SQ_vr-K2jO~2axhY8dIB#1|}?}^6IdrA4I5s9LQEf2?^idy0tvF1a@h7x%-L|Y6cHNv7F z@eR+eNx>ei3wB9Iyj33&nh>?>y;B}D3tR9A*dZl~HU!LX!6O4G!6N$s>mW7)<2VXG zX4O^4OH%BzkV3cZXf^~lG`^7j5jt}6YTT8~j-3!_8W=y&=TDZ-o=+}D=K)%)0|1J>l}o|n zd{nWN%FR11R)$h<7Nricl$u3tvNwQkyP6gz8-bUhmZ^aKSZW!Oq823Df5*NVXd0@p z(6>BJ8F0U2fC{I{VT~mRr}+z1V88Z0+L0qKhsh8`Kp&Lf2nUws)c7ob4h=UwsR^{x zi%4QnT)ikHyz_h&DeE96_!Bx#3OhBs;#GEJmL>m!sb1pyZOO->|9M=O$XS5-d5*bR z0L_XIB>pZ;Q9v-^P2*|tEy)j1?sW_hu;l5aEjZ{qTv^mynpqWcoZSanow7MuW=^+` z4ZgTP$Z}$4(vu+)=pY~z0W2r^2OTf5dLJm7l7-LAzq3Tl9}b62>f)Pin;MvWme<<2 z8252aN7u%?wXSRoKMDf*u>+HTV$I@$CZ0jhAqmExyn*pV9BQmKnbpF9Fz~QpX+}!p zRCg$1Qe%EN{(f>Cx$XL6jtgt``tPpfNWh|tH6VIdlhH0|$>aGhkPpyFfVCx;U|LG^ z4ia1Bw-BBf|6m|dzS|n}1pitFjj|+tq4B_qZL~4jO_2qr3yvQr>9Z;HgX`bSRT z#C;tMn*0QD!ZfZVZ+;ayYs%2ONPmasV60XEl$29Qz0|ZH9KDo^;CUC;#hsb3b{6j2$>D=-cG5^?(1D)ndz*IN);rELNlX$b93$h8zv z4S6-KC3C`wOG~O}d~_X6z51Ej#JG|$DY9W8tnKRd_10e|ou~|SyK|6@XNFq`wk&JR zo3T?w)AT#2IyW%}QIs)aXhxFtB=!uG0-LdKmqxdgRkwx#D;9v-*4&vjWGVD+{W0Dj zCNr%vK*pGQsah0rQTVy;#eEW!bXH!dV{!OoVK`A!GFW6;YDUV4lYtI5uyWpEv5($~ z2G+^5q!A)_rG?0~ZhId>p5iJyM4z zalt?`UF%-F)=H)+pcWP*KhUf`0LuS2%d69JmMAi|yTF;Xi3*+w1H8JbY%#WR2_dy3h5{DH5@)Ce6Gfo zMF`thje9BRGTOOi8->KC$D%KocO5T@$BqzhS^(PT^d8%fRX6jA+%w*i|`ehqiz&XhyjWDhLg@*%iOxu$RCB0gakcMtN6>@srQ#1D&G&tl;x1Y=cA zU^&s6!vnjRcjxNEg`p?a1Xv$)&H5OQopd|9#n%yZ-B^2`TeYHTaq2L1l}_)0nsL+*@dh!DfTU-%cJ!LDe)nH9|ALOjp3%6P#PV zWLCF^{Gqf9a>1}Gyk9N*q?>mm+Aw#yY+dGcS0F~P1=#V#bSmJfY5{Uxvuw&R8fkkN-4>L6%eF=07PB)0Y9;4H&+lvo&8XOy~Kj1zdC>0t8icUws~;V8L+v2J_j$r=J3gbQ1*{Hi9XFg*88ZW%!siw5p-_+{r4>Daf>@HQkWp@`d0Y1AMV9{hEo%7k9&SEXQ zOAa!q5Gpt{)#aIUDCx_q^Ph$6S-!q*m#@a7X6&?{ttXRbM$&k;-sxcX$E+?0wo#*V z&k85@GOv=npXJx^3&xClE4uvHLe0Ff(|~o)8g9qC=ov!|^*E*^&&*%hi680Ae9Jx^ z-A;e9!!YrUADbjt; zi4Ep6kn*?eqW3fR_upP*kmnCL3NiFKM#4Gex#T;xAr;Q7AsXQ)QloAez>nz=)!^o; z#AgM+v@N8wr`k3b+>-wC8~;nb|K;i<=|R!I?Hhyj4kVnsi9ad*5Xr%uois@!zo3Xe zG`XE-?Q4#9(zL8Ox&=5{b2Ob-&CxV|0YdvE)@lUT(P#VRBmYZN`pY$pi`sa2x{ari zC+RWx>HRAMs4SlS9j4#p1UoyyRunwYC#D<2cc3!7v02)j$@n2y@GVBJVp&bu1~>2m z?B#ZYH#Mz>Ew!AdY}mwh>~}9xl+RwOR$|GigsLq~&m~Wg&>P!b?6jQbkNme%t)3}I zpz2w^tvw|nkR2`RZ^e;fyAQ$c#`@i*0b&+R*+n$c|Qg-ImdLf#`LdX zF8#8@q@97lPe^|mXD7C3sBHpM`BjQ0+byjHTVOcZqi`d_^}a`;pA1pW5_=$uyQahJ zSlpgH7S{$f4zJkt?sxzuOZl@eyx0ojXW_*`WSi^LZl@Fb@IAWT5m>ABelyQm>kJ!g z)|nW^v)7p?8TbSqRoIMi&rdqrOn5^qKM7ISk0zw$z%AVjHlV^i~QeV`b|b? z#uH{SYJam>4DQPRN?gZG_XV!{nhK5Z3;o3Y4%2UPh;92(PK%hRvR%h#J7G0`ZMUVr z{L25bU;0a-o#vwZ>=zpPCL^D0;Sa!y+L5{~H#ZZ0fnWajd`{lOOGdarKN9}7J9%No zq+#-_EQ6&s1CahH~AtOU7!P^hWbNz7gEXvrjM4wLH6JMrG-%`Fdn?@?lCEJ)b` z>FnI323BEA*{yu>PR{CI(o?&KC6KR4mwnLvR-5fSh|k*FjP}}HkTM`rMv+sLTs;)7 zi@%TWLrl~#4C=%jf+7T&5mfXk${-^E&t!bZotH95ayvQ}GsbS9o!nZ}Bk_-DkQ9q! zGmTcmQc%+k*t@n)Qw#ENt2O&Y=a06um%&;U(*)Qznf7mE+QsxUQnP3KI zv#q_KJ68H*+_CBcO2bD8L|HZqoS}B_VYKjiFAYy01b?E@0{vvy4|uuXlCv_oYs$Dd zHs{RU)>y%wGi!31v*7C>7~27kb2;11oCNFMaSys-Z1p&qt)v2b5=;eL4&w|M#j_l` zVRV6kLbo+g&YP(Yjq5~MknIN72FGI`-eLH z6#^Kmgx58BT(MLN$JETD@j=XaHXa{2O_r9MGiSMnmyrSn3YXj^u7TFvoVBW`Z|cgK zud!Je{pYs~PK1i4ZL$v|?(iRm-K7Vr0#Wz$KAd#|jQ8Q!oEuh42B4py7E@jdPS&;F zuCRyM^bi_xwm>=!Aao?&Mq5UW(Fc*mjRuYJSW{Y8rr~KA^)-_4v?k};oaQkG3_4w| zu8Yemc=TOoEiVl_NX?Hbk2gJwfx7%FP@KaZHN z&*@9JbuE1n{4QWCiv0s-iP`oKjZ1Jxko%=iwtslZqWmOvM)nUoXfmonT7ry6$Bq4i zaYMM2cHp*}+17m*u*RUhv43b|8Z|h>Hp1~TXpj8^aWDEA>tO%DL5H<}PzjV)R3gm( z7z>C!39B`$hVIW`0U;X>i}$i$2?;y)wt#qP4-1I@@+&bG5YNzWp}uZT31`=f9@3~k zVZG2+U?D2#jI%viK&+DmguReouEdW3GMK{<{TN$Y@S@OAt8W3(B?|C<@az8AUrhdx ziirry^)mV|Z!*L}+d{n-UHP_;F1Pv*BYvp|Lj=rMPXx^<)UeH+VSQSHr%%^az3JSr z(8|EMB{X;$`Rj$F4Ko$blcm4inK_T;g{uKhT({5N8PX23f09K-awf~R*15aQ3dGvg zS{;fH(0-y{zDVq&#Q;$CBf#J@{HOI>fB(t$*BlEC=+C@0Z zxs8@y*&g9f7)5Uf2h|^O7@eowGZsr8$kO(x9pTtVJDtR3T5A)*1CofriSZ|CiM|`a zb1Bw`x@@Y>i_Y0##&g8i%`Z0@W|O0AvoP8?&S2F9QO^%v!LTwgo-<3)a+!f(jw#U) zoU>8y^}(^`y*{{EjMD+q93YYLVe>#)d$Q=n*0R}9TLgjQO5#$c!a>TY+qs z8HI#mLs?W{j5x`maR@y!gUxCyNY?Y=nsGqmkWS; zbv_T;_OwAA(14^3V=r7(m<;C+!;B09Rh%?kFCWe$dn~-R0~xsDc}T1Vw17B z+*96oWS#AXkvHC>-wWS0^2TP0Puw6n*e+39F{&nPNXZ)@JMu;~#2}GF^2S0+B6Utv zrMvVTHAdq1mrTzAzVOH0Tjbbvt4|GPhour=hJc71$j@ydQ=G4(k5M~$DEdgeK^Qdj zb^B28RXrHGVAi~kC5XoiL0F74?JorNZv+{#XhI0w!zbuqy3hpKWQlmc=)toe8fGdy zI8>n(e9kN2ct-5Tw8NnOgV-VL&HLvF05ot(st4!rAR167{dJ(|2tTo)j)yGtzv%yr z|F@|b{qg^E^Z%Ctk;eT`-(r4l{+|V3nE#*P{|JNs3;sV<2)EuxY#wDr56)MA8vp06 z8C0r0F(_I@R^MY6H!?2P5L&1r9FnIpi`M*Uj5PgS`w)J*JfZqe( zP0)8Cc>SR%hMz)dgUrjZc7l)Rk(%M-_xAX$yPXFKGE)r)PhoMrpIk7D2mgHNe=WcG z_VVR4B#pnuC*%KweJ^+cC}|Y_Pq6QaSv7oq_AQ@JpMiaEf8KWEf55);#Jhcid8;#U zRj1+J5*rLcR~i%#?ajNtnJ}14;249*2A{34A@{q&ie(@{fB}} z^kDG$6Zy96bPy}fH`QIB;8vY9H~(*7o;EJ*0ywEyw?)kj z{I1)4up2Ufaf@f7Zn@$TRJ*V{Z2sVnO}2*M6(US_ zVQ-mtq%s$Rn@YPNxGDVXL2#XX(uy*(iw7%Vr3lXK9PS2uUF*%$NsU5TrH1P8!511) z0bdlcmDk0WhK&!1jP~-`DEF(yIC8~2c_>)pvy%M%_>#STylVFkI|&$-Gy$Wq;?e$L zkl8J}RBq60Ps-(6L{V%EzUlQ5LY#+Gjo28+A)zFqvP(IIuY3HcrgWFzKLy7;w zJv5Zd;{NiHrwNu$N%B%Le|??I=mXR)P5yJ@K0=50{fGPy^+5mH=${`SZ6C7IlDew* zY<#pjJS0MPa zeqwqTZTfF_4V9!xcWDUVev~~Bz-FHS>N5mT4lEJCB#ZqlH)$(y&>yNWeShJ3)0EK% zs%GiF#KrKUm?che-ji96{zvrC4Lzu~;BC|fVHB!&8N$%ijMM&(n}#U9Bp>g&qwsHV z!J(`M^XO-QkS2@Iv?S57(6BF0x!D~OxzgO){C=*WWi9R0IP;8JqAb9dsK zK(?4Z(&gU{@)%v4Z3<_JTo{tB4NUxuy0&v|Q!sm8X-1--a&}OBK=S`lv-~dv4+X=q zZNhJxuMPb=1(F*{h8}5=d`se`@hiP%u^x4ZrC+PWOpf5I^s6Arrq`2?5!A%mH>H-q zf7` z;~?^;&u84${W%Oc*KMsX?CW8C=c0M;+w8QTJg9e#(U%+LAY2UO{Wb=b3mY-_56<)f z4d!Q9Hr@h=iGgvg+xkT1mjOWcgWg4C!Z&GY`onnpp)mcSMjsM?EiI-<;?X($cygK! z+u&>Uk-XlZ*Tka_>G`U3lJ41f-?K^bDBzu&PLhvlFKUw%49u&x&x(WOjkM1SUE`J7 z=h@0XRL`bTx!v~iZPI;u4y2RhH{9DQ2{!R)o1Qo5*_4uG=&iL$T0Ffc(@D}jct&4A zgg8AvlunXr+WVa?m8Ya%q?2@_?#;AGI!*LsR$}YYIf{3QO{!G33(`q)0_=^oNn@3* zCY>bD#GY(QY5WvrD@!LSB8YdGO`5LfgVRZhapLu1ZKK)Iv#!Vavoo02*KN{6de%KJ zo1_>Z-ZGoisb}54vq_2z;5}fIdi4DJbdrKFct5vEJM=s&oup6%-ZYyOQqraAB*ilD z&a+9S%63*dNlu)-F*d1M*}joZk{4)C#=-QfUfB*$C+TjeH^?T*6@n*QR@-je34V&jtbH?$vwFCf%*)<>@3Dtb32zq`7*2FrB2BCEndOsY}ndrIX~f+iS5& zo}Pb{PLdC9@B20>M@i?WljKy`JJTi=D%;8Fq&5uMypcAkT-i#~NfLj&Lv50)Z29S= z%@DgM<6ycxN!hmQSzW#)&)Zbv=>MsaT{d1 z)NMUQ@g~0L3_gN5qBzsaEpbo0ps?}l&KIQ$7`#7MGK!tSXL~%K&cP8`Vv9@hywUHF zZaOXGBGT1)5kd|ao(50Zzpm{4XnZ4q2e6J?;xq?oIzB1v5sFj0#0@NQZeUBrAr-mx z-~Qxtom25q@kWqtP^A$$j3Dnk$5FO7=Sbr%*Pd$YWGLQoS|V2h2|4{H=QxAM=26xy zj8?td_@iiiGe_$1Ycj!^UHl%j6)To0S;qA6v6^n3hFsxp))&2OCY)+hSG4TiXaI(~ zsJISG_)vsX#zHKJqh;H?FVl=V@#jcjQ-n(lA-xnPUxiI&20a@8pts$9oU6zB@A~9X z{N-q_caWPH{qW;VbyJs-xKWI`8L4n)O@k{E2FfkBx|8k0^{& ztic+Kn^e5DpbiO)ReCiS0mg8RmCj34rcG`_LYhVfoY079x9=uc?y$Uy=Pj)c1<1_g zjzy{-TwkbrM8(F)&RZqsgDHBcjuOo>a-`aZ=Ne8L&*gM+kxey8xqh=>qCJ`3b6;sf zcsw>ygo`{o+WNh6&ml`jPn5#`7Lr(AES~pv3&B8d|ER0neZ)FR+t(SyAmqs>C ziljL{FIu&^@pM+ykr;}zR5x{`7SH`yQJXjm-K4VKupM01sd}mDiAd{trPvTPek;=2 zRH;6fy^=!OAFJ+>YWEMa zx;ND1`@H=d$DQ?0=wB_OR;qu{lkK0G)2#kYANqgLzi|@&Qc^`ZF1=2nlb01bgU`rw zJ5FJ()U}iUay#IsTpp_CkG7J0&Nv ztqzap?MWa1ECn^>m(db)$_Ft7OL%bwQQ~F@mTQg}O8JFVu)WRme$1+4Xi3DAf8kPf zQ2smc#S#h*TcLb}B^hVdrloju@s`oFC>LdmbqTvr=x})!Iuu#C^Yh>X(q^y*A0D58 z52LU@HTYoa6ha`+a{6g8-n;5BM$35k@-m2Q@bVM!|GSo1X?zO3LyRo4&f5j7%!u1q zPH7*QM)q_WIWx~~ZbGO4>!u-a@=);cr_H#+jhL9_8gn_-Fk@b+G57q-5DdKLP*;t) zZ_FvE_Jx&fWVoF0Gq^@HaiJ`8N*BouWS($Aw>gBWQF+VXBo0=n3dd2QcYv4^ptwKQ z51!>}5w<2|Es^0&8&z4(^Y49}W3v1`P}F-v5$%Uhv41W?5=8(*@E0iJOa1HN>7KdaXcObVTi-N_Bbi8%!re z(ky5OGZ0);aDQXrp6|m2rKlgr>4Y5n z{D~3{>sNdAWT9`D(VmIOBzk<>RMk*0tW%YQf`4qIHRa?ZezJ(_kA@=mK^gC}cBUx< z!Lc{RFHbh|!PzPKU`cVb>V3%v=Rp=PNV zUG;v`6Zo6zM-R~g+6X=L7j85B&hG!+j*~Ouf)oOh7VyqV_ZIaY*t@fLd++wY%_zq-GCUe5@QnEZqp$^6)2^E>)% z-eI5GKv<3G4Q8k(dK&J_c$N|nVOBA#2#xEMVuY-i&WbL70pCNx22;R(BVB6C7lNvt zgCDdbA$@0@0| zf^05=bGYLw+*{O-B_q37+>39txc8{!-aYZ}sY49@)qfoRi7Yj4W)!mq>w^5>KW@bu zR!KQOgq?r~d@}iJNZ`>7prF~TY!#qo8U353w{(Sf16h+ZV4S|3AT-}6 z-oKg6uMPg7aPCY^bMO$$G7RKWi-Q~<6lb;Fx*irQ6ME9SPEc`q3KcmX9FJ?131X<= zZ$og|64NOY2U2H<3a5Mlshir;_;A%@7XMdS^){WIDA$Aqmx(F<8SXAEwa?OyS}5E# zLne}0=Eaq+BOsa+Vu|n*d7;_-ooEhjOdP-92-_CqN7Fx&>02RxFJ-W+EgnWm|O;+%9V(jE>;ISO(GKk&@_4OYfR)WW&#PJVC|zC69x2P4N!LhbUwy33ZgeL zcs*i@79TP7)!v`&sjceM4$*LKiv$$4MFtNo@ouo$hALa|jrj(`WzUk4EKhnDlA653 z2)&DXhh#Wj@21|3y}iB3-Z#bjD#iP%#rt@I;Kcjbh3T82)CG(X5WPQz%#vRt@;Si8 zO9wj8tC12q+_I&~c}|u*u;>2EHMYNS-s>gn6VznfcsDWpS#glGCbZ*JBSAQW4{)oz zD}JQ?B=xgrf6uD}b~G^@ehhkdMC0r>V;|)~-*P^%!8=&V@k`JaEY7pyQ7R6MoVeLN z52{)Ne&6{x1u;hmgL8TxVaq?_A0S};!RqxAbv)m!8JoO6Qjw*zxdj8q{w$|pAd*B{ zswM=aTeaD_;nEZf^{ZrKLnqX)mTgWmLBa_={YoKfx!Q_tf_}Lw3M|qLL*|IEZsNW| z_BfF^t7d%B+^^+)4b;CBhH}}Curs)pm#N!xoU)Oy=Cu5EvgsXT`#LMm{)lg1^}Yn$ zXkxBj?Z8!Ri^i`Bfg}6pct532ZsK&bB-fz-PNM%#TvLqx1>RwHi*85E?6brxV{h(o z%XZFam)Do}@a!|`OW_xz%fBs0; zK_yb|uz~F1pV8vHrOP5fjl|yOK2;fG&Io8yvqL8O)5&Ese{_3aV8X6_hzYxQkS46d zyIj9j6H5vkj}|(Eq@cB=S;Xz!63!Rw4j@k>fPHg-+Nxq6Q;@@DfJY5fW3noXf} z<`)g@b>2NBN`4$?wQ{YOOPAnQz1&!l)j|2sHYXZ`bfTeCjyqM{AG4~Ln|dOxLrWwO zeMy=sT9#6HB(EeR@XandBhCPiQ;Jr{tyn1><)BRbRr5aeYY;*Y>AdJpAbR^s2;7_Ru_Ly z%p@M;~)SkMFUzg7j37i+wSTUo#dF&S;fafFeCDBA~sG=TLuLA;A!G|&RQb%8fr5QvXbgcfFPoMxx^gQ%Sx2FUuK;%GV{DbM%|Ml<%4P>MmZUuaU%b^Al+A z*MMpWGrRt1d@1!us@kcaVQV(34|&nq- z#h92*iY{*4XmbP?uuNL#NK*MVn{=!5v6nl@mgB`aIR%_qM?=BWA65~g@bNAuMa0f} zR_v{Ro0o)ztxtp7{a+;f8)6!@R9rEYfLWq8wvb%iZJk|X%UA-%5 zx|)A8WmWN?{+a3Q4WvcU-;AZln$WHEO?mzS-&f}5w-=OdG%|wH!))#Y%AtEf`5sVG!*q`=wC6Al zp;sR}Ojnzri=q5)8!0Okyq;A&g%js$QtSwIS;PsJlbkg|aZb>sYw$VZ{(Ytg6*S`Ikdq$nntRH2dRaYPK^zTdU5Z+$uM6-X4_Zo zji7zna>2Vdd1F(pI-XXUZJEk`;+DN zb(xt>L-~pi<@f*ECzQ#1LHWC&7~N;OL49g?pSKn@lp56cV1G~+FTBFNKwZ?YK|Yk9 z`A~kiZz!wbE&aPy3>2#M8RPFQh7u6wO>Y8|knZTtSM=gn@-{C*{*c7!2Zbsy&ney# zO-hRQb(%b=-?{oHUY@<43R(CkoTJ_>-o`FuVG7IlV&O{}0ZQaA1pzcre|jK|9Nu3v zIw^cDGQ8rX5{+}EcPy<+RhU&(rq9;_FIDNDq~)CjV8t!~{mVrfV|8N4d~Nr>hPF$H zV^}6M-)M=fQs{Y!7^aV&QYhAY;ui)H(}Q^L%jD7F;LR4<%|30DMqZt3hnafMFk32K zEx!i+u=g*hr-})nqkG;Ky9c6QrDr(yc%7s3Znten0<6cnSeJLAR#y?^zH^@>( zQ`5-u6xkRjbSE%%jn$)kNG|7v9g-BaOL{r(%WmGUObMTa6SlY==IOjx^twoMoI5krCWwG;v1YL8pm2UM;SCRXZ zwS9D=T7ORDkG_GrOAKF1_k8t>e!+Pv*rH7N{4reCZr1ROT$t1Nd!wiBy(i<$sM9utg1Qh$<$Uw{q`sGWEA$=u zC`Kw8E2&85WGDo<_LLr%T^wbJ2z7RZ>R_T4GbAN4vwGPTNF10>sp6ZcSh{)F`^q}O zz7{2e5k#(h!4d?Td#D1lRN=^*-klb@4?!M+U4i)pV7#7J`a!4=gnorD*mvQ(MS%D8 zFZ|x~rWaWy|c+0Obh`a^-=w-V7* zogCq#@j>>O=4`2z%+QEEPmy066@7-zq7J4r^+j-;#{L_?zs=|^tVSd8$O0@z>yPL02!W17Wk-V|>u zOB0o1zM(;#CW@ZUe3Hj0Mc;so1sINay=AG4rDPxRS21WPj(DTiJ2D@O&bVKdP7EGl zDsSMlB(*03!dRO1iU1Y^nNxz$h$G3)Gup*cqRXMtghps_xp#zJe@q!pm7sP%TA!&9 zppr8M;pM;TSMgv_nu@}V&R_P8biW&Aot)0p(rEKC(>)W2KqH#=M zc}w}9Y-2dgLc4<$odX`EmiQUj9dyDtKkan>f#KlA%+nYSbi)0^)bwqai^>z@0Jt#)b(l-huC zufLgiUYZSk(Ew&vf?b94cTIQ-+D zEV%i5!9CZ&-4~9|0G{Tl0RWk%M&mwiE?leXvb!Dv6!8xy<~Yq!utKeEGozq2z^4GW z71BwK#F3`Oz6nrz3I7?yuk2J9qut5 zPW9Cncwa*6Bp6RIXc?&5i<;pp+6&qx2Ab9^1de0iFK#O`l2?B z%1o-i;tw^c+To-o^+5ki2H|&fsTS6gbe;|Vmkbdp(pl z0dFzo)SV{qJk9#18Q4B@T%tT#_Lb+FM87v@m_+2%oW=t+F6G`y{+Ck!OR0C1|E1Xf zQtTD_Ul7hssX}i6U(&tVxsn=@Iaa;DyDxc?Wc1^Gxn`DnbBq4msXu?#pGWiuS!_}A z>&l9LU4n`!rmR04|78%T=Z2V)=2{?q z*Qbnm*?+zI?rs*!#bM`>1L_jj4h@8F%pD4h>xYASO{dnyznc>Yyj>UnNgj{VtNSNz z;q${6=(0vLa3$+=vh{)_`6~p@XpuR5+V1_F*WUTF{V%<5Yhx2fxqRlW4AX|KrpugL zq+^)Q>5}S>?ESMI=h(t42~DTig74(;yRffGka9 zap&i~U-io~m1pu2_lalEov`HyUa}%%O8Y)}4NCa6!mnyK(B&R?fU8x1g*!jx@+Zrm zARd3XwnW4Rb6u#*ou6_bBt1T2Mx_0n!y~v0!p9&^1?!v#apfa-g$pZIbD|Mx-$?2b zxfP1rZ zm}tVP)Z~WoMrx_pHveE#8RKwM$#nBbunq5w!*H0|cHJTIg*s8(?tPQ@_`;U9>xaS_ z)VwUtpvIiR8rpj&IV-k#hmbcs{lkDHAp?=MN_8RlOpSLO+BU3(mss1eEq&MhBi2^c z{zh(X#cEEF+F#4nCL%hyvo8J-X55!jpfL;I)}y&PGcj~H8vQA5`wAyo@m8dLkwQ9i z&l`_QM1ER0^yEbDR~6NnK_IH{3ORo#4D3-oZhVV;@e^xB;iie#tl+a1J6(eR1}NB5 z5Z`75>{7R)ooKXMaCuu-)p=!v${H(H$Gf+8Z-1Bg%2jPw5_?Mbm53QqMZ9PeML3S* ze}Ww^bD#;qB&aYT%&c?_jc?@u?+Q-W-YKR|vs46D#@?wEx)Af43NEFAgtEf;OJ)f; zgIYlg*B5B|`L|I{sffl*2NOd`cxxzqQMhKI!BG?-#5ITtUI-V~`nX^|5Odk!!cKz= zLRF9*#11Ssb)X{CKnT2|GxL#{&q5ftVmI{=ueu?)QFsRqvawpvBV&Y2p_U0G@h#Go zYgG5q01GeE3Vcmr9Mmb$V}1*P60lkocT#%c;Hcff?S!dC#p?c61^Wy`4Ej{oSVXOCM6ZwB8`7kSL`&OvA>1`uFg0z=_~DAbr9vc%SXV#&WNyS zS(IT-ob)u!$#Kh85@c##Z0AsCraVzc;_qWE;Ko51IKKq}p31lyi7kK)nm{4 zzBWzhehBW?Oxs&;E19k?pcR-VwmQ|&5c^m*soJWV{SAgNmEL*NO<0~wSx$_%yk-nJ~hC0Sb;S3C1(>9TyQX3$6jW>tBd|>rS(Y(-6G|xbR%`42I z@RmrNpyL~1ganF*Qi%5czNkOWlo71GVwpd<3cnr^&4TV=v~fbp4HX+hzG2h=aFi(P zCN{eGEHOM3DxQGo&1 z>~e_>cGXkK?H}rFSW^!F%l)E|%@F-6!){hMDhM}){Z?QYH)x5;s1Yk`=k>@6d3F5Eu{WjL1g>aT7JT(F!>9lg=55q1qkW1!|2!9wU7iY+W>% zkVOh~Q}0$hiGzy$sbw7KAIza0E_b(Jn_^TjFg&8MGQlL|h)oxRKpl0Yhga@e@m;l9 z{OMJ~3p9JII!KO&VfWr;IymfW>L4Gx`B?OO_$82wZoSR^p7SgHHoWG2r%A%ACxV`a z{gN5>B}3=K`ap0bWP4zt)9~qh^1gD2*$L4MjnzqssjU2eFi9G=`W8q56;-k1XNdtu zoEbpf&Mg=0Vi5m`sGLF1&-ygmojcaO zL^+h~B$CL0W8RrFzPJ6lYl1^4)h-zk83dEz=8|bZ z)k|e+z9X&QN25KYB(fm2rbHe~EhIYRcnNDv86TiDG#192GA<~kGCJ-HQHUqrbw(oh zE6g)o91%0k-KjhyL`I=1In;I@d@G6}i}6EA4C#&V`jmi45<+IhYH#VG(m)L<@nuT0 zY$z`b9y>au%dSX#ZPS3d`1ZQ^8{yV5d332%(N4r|aYRwudQNFgyriTq{!BlfQ4K5h zqS)ebr@wtUESQTO?Z_PwC{^@+YGUNE5+C4|2*yLHBocqNhIOujNJ}g^PlKCntnWMP zDn6pj&>Ad$EX(#_zfTj8wU$$&F_2ib(5|=!`42@mngRHnBJm6#lNed<-4W{Rt6@+% z)g~z%`+yjR9|YM<#6H;1X>J(66MB%soG>tkgrP%RnSPb@s_o9rBGc0o(a||&+v_Se ziT|>$;Q=NZND^X5O^h$2bwYPm%4JCJYG^pVysm2bl{N7l6|0c}w@0d0UwJ%ZG5fT{ zpi1=)I4I=JMxhf3W`N!_5OD1&2&_0&Yp-D3nTKR?U`0)0LUnk?uImvloLSpwR1NHv z_U0+tRiMrM-Arhi#GqNN0nP`U=7IEJw221Tf(b93BXAZ}%sN~QZy|tX!OEYrRwl-{ z67rpyuac?tgqqgV@><8_1~!EQ&xhl?YXV)h16PD&yNOZKMuyS00srFBRN2Yjzz)+8 zcTQ{Wti-g3VsCD8nqdw(AV~8~{BlooP!wyl-=ChS8Ev#4W+XMSyYQB3r`bEmjN-FkZ?2@YT#8h+7HKaO9ISfX=`ptRkzdf8&;{h_4{`wc69E7;hecm)G=-NV9`P-0piTd$6#yZb)sOJZvy(XB@7FI%uJ5Ku8|LnOe{ zGAHH*BFtM|d{Go>AGECrtcbL~#vUMA@q9Ef=qe&hIL+rULvm{xV4wChxsVzRnh?e> z8sF_BavVW|EmvYtBvSFdO1-Xe(nNcS#)J9-&l7@X#g$)C(5IpZpHEIi5A2KW>}zyp z?3^wXXgOMciC?%dP_@fx{w{P_7e@emM>HmBry|L~F~XhE3L4pt^uaP%v6PL@v8=(> z%uP!nt7;axe(IyfpY^69Qo(R&_K-*rQM7(jiCMpa%o?uxP%o`9CzM%WY47QYLC5-Z z#ArZ7Srn8W5KTFTi))f5dQFD6Q$CUynHSL(Xesjmt2O&4Gaav*d03`-(A+Q=jjNMa zvPziwBruqQkL88I*KlC7{b{S4+{V^0R@=IN*pSS13}bl44oft@qiikclB>8*%|F+A z1KC6q`E$?}TatN}SyNDs!Wwu^jTT+mGe&D$1GTMZ<%J336%Mq816v7h7+79Aa19Ix zI{GrTq$s(7XQFwTw$%g_|BmoptU=+{AwRE4jCm*=>w%g!G1;=udz0Tttewlp1?SR; zNY$#QpP$Z*s$q;OOGeaZm;%VcN~?Sd(<19iG%#fLYKF}I@iPEbfT@kY`n zSQCTInRSA#vpSFbCJq~Q{zP>uxY%ss6_zAh8S~5pnwitoCNDBLSlTYeRikB&U60Nx zy)X9cHVa&h7C3E%_^9DYqBra7mz$$0&s(=gZax~52k49Vl#|HU(wymu1$7|4{_kVe zXF;|I6dHa1&3a8DPelW47gNffrRa4)XLMwIl#Wb0tu1yhz}*gzF}NONb!JJ3h$j9} zayLCgHC3?qE2y6DQ3?s9f;AHUv_2M`eTWS$lr$RBb9xZFkf4xI}# zf19>>9}OUfz(}8lwa`(UO=6+3GKF5ho2umIUClFP0rfLLxwz327&rd3>+4=5n@Jzm?N+em zSj2{p4OmZsDzd}0L?xiZhTwxhfGmO+pmODXC6&u9Qz$rr4~CQ8FcM*fr2HDP(iqxT zkKZE^HSsb@Ig2;*713buO(oN5pBd5n{Smc}ro4@nnIU){*+Z`D?O$agIOv$pWVTo z_7L5CE2pvSW%&EB*~DBlTb2+gIuOD*aaxDQGExC*Z1YN9+O2b;T<-OvqFBe{O$K%( zPJkERV||3B)&Q)otFU2TD!sQ~+zlQeLoFFfzS~S0I}MydSM$kYQX4vFUbqd*-=Z@? zc3EDK-oUOGJA5vVq1393R=g8IPPezKXng2Wag&CjENkqT*|jgFmWK7JfI-1Hrv84@ z+eihzGV3p7w+6y)eU=%t=r~XL^8S25~GX->|Hl@$I@tsDOGMI}alFN)Dg{5AV7r?qv z9U6(D-6%blNn)$3=#B=Siv|=Lhn$io%+?sl|GWjr0mOSHYbBGI(f*EAvIKSrd2}&S zGc@|@pOV+7Fihjv)<_q!JQ`>>oogRVMp4~bkl(BnD$VAQj!7NFj-djXP@Pq#bcbO& zro)Eg__`weM>gO&jq`&i9SyzF5521ivHGDGs8kI`78g~b6_VFk2whz;JrTXay=)g& zTjH*lVGF3M>J5F-K3ar^YzqV6Ry?hdA(2k>>j3hXl_(?em17cv(CBEFf?ic!#jT%- z3PA0ePywBVn^^$aNtm=2#ExsmW5`{k?Sz0)junzC1-G(wq z(U!QH(r_xoeZUobBMw+}bWewkLmG-UmrNH$;s9`KOurK`f*DsZpjngJgpu%GINW34tN>hs6g zcc9e2rY>r(yUBn*Wa%+@0%sbE?y=d6zF@N><3Ok)GV;O|Lf&B)at?z3`kJZ>OQKH8 zlM)wZEY=F#e=|duY)^xEraQ!KHJ~Rl=%M@?^K7Pq3z%~Mc1-8h%(IbCXyf49N~Tjh z`EMg3m9~3p2!dfmhTHh!E#VC?1^@+a9c@;`9`i90Gqj~WD+uNRBIo<-qAp=iT9udx|G)^+Sr32l5>Nt!%Yxg z4vIfj#cL>XAzh+-4@?P9lDrF8`pX zE|Gh11-4axD5>U?P)C+q(jaQ!)mo8*ERbY`T8qPdF8(f;n^-M!#}kL0chJ6+SZ=g- zu`FA5P$Ct;1`_TF$GLkPx?CQmCw6MVyX7I%Tx*7<6@Y4bD5SI@A==>ak~pi)rP|Fr zst#5__#3=I*OOVp>iKJh6UhX(83Q#w!9$dL75U)Ftbvo1e3Ln`=G~rintW4~V5JJX zZ%G;DfC6|^u^oqY?pDK`qhQ|+!GUlRjzVj&?@SE3Z!Y2zL$bCmzNCiRc8uA5e5i}} zgyXvqP?)Vh7&|wrLtMdkNi_a+#f!C=aJPush~3^%n`2JIV@s-IALKS|G_l-gv@I*(@!cr`2x#egPGfKk@76$cKA&(-l z4+(1dK3id=9S)*7WQ0XP=1EK6ix=P3&=8ria}u`oPRsuzpR5!_*HjKWj&>YK8>-tp6ly!}(+;U2MTZX2vLH*e@ByNxZkV5O})Rx%tOXsZgP| zYLj#G_eHXF!}1#1TCrN#X<5!gIUfd*y0%sznXZ~Eg`s?e+4Tw?nmZ$z1LuqF=yRG? zQ%&o@+C&4Ij@LFd_DF5>V$7=!$8+a0oy3+}nCr&+LQN0bNKXLqXwu( z4jU3)wW)d>1`9M=oUUYIh%SSG8a4$L~9t#iPwO>fu)iCk2A5Ub`ZXPb2@xIC-%ETd>F>C znDF(q?)(uyyg@6>vF~4XZie_Fe5ZMTP!niwo!n$hi2b(ebYK9Y+pxzr(<_ z1>&_i;VPVYB#?$h^5OW95;2a&$%RIXGM&$+++69^uI@sbav?(LFRFEnRVlq$IsXc! zN(;f5aIj*yVX^nOGpr^ggdAp0#9G><4#AxisfDiI%7r zEho^~WF;+`D{M&K16S~IK(pVXu!Ephb!;i7^XR*bgV7jf(O^uD(|r3^A$Hs=Mp`G} zJn%Y&atU2FMXOppXycYG)Q3lU$g5>ZER7IU`@3^fm#6J9Qp!qq@cni%6cAPoc7iU>IfOc8MM3-Yz1gadq7}KZclYm_f%8&u1M$g8$%1k#yqD{&391sVX;y)G4My}iejc+AR9 z8dP;oAf{Om^g$&}3vX0X3KP`2R0F09sF1EySq0_3RGD)B%L5PDFAtX#^1xvnb&vJa z9+_*??k_3kL6zT_uDs1AJ#3ewbbnB|n1<6;G61X7FZocqq#Ph+2H>$04Z6Hv+-77v zic~5CuNsN0!GZ}-0a&bUKP9#?fmjtmg6cqOVUUDaulK~+7OjT25;y^$fqxoy{e8nUt?df>3SFUCkxGRhF_Y+E+-oOegL)(jtH!Ce0XK-Bi-8 zZ1GiyDf;NIO{2#CSQ+dhgj_m@Buu;_i66B|R4xS|>wz}m!EczHkCjZPzW~wL&@KrA zDnDDVsY@men?VgELjEFnX#`E7JB>yORU2Y~5nZ^zqRs-)tHxwgZIW+kQk_ z$#f%`1gPG$2;lgnz)bOmFAEhKON!Y?;H@K0@ZQjfODUtHek0^{un(rJ5xuRbgy9pp z9=6;Qd9P?B`6c)j?C(G1e_gfC#vs*Aoct}O#C0Nz-1eR6a2}i-Ep`*R2W5xzcqgx4 zI6$JFtfj5+dzadRT~}%(Lw?xdLLOxtkrflr59(nkOBtfi|)ZyF#VW0kmmX zjYFiB3RFhuWxGFbBo)Un5U155~Y|xc-c)(PAk8z6cL1>R!RkTRj zP7~T=^dD3T^O-$Edu&qZf;ZHd5x*mg!WZ;vud|Qv9*Swv@G4osgi<|o)&s5;Yv1-J z7am1qDZ!W`~o4^sQ0hZ;1JCNx!*3@hL>0bZbXA11pYTR!V$Q{Y*5tT zFc#FR-(D~>7D&Ldw-gEJ)H;blf;2UeVIQKUJ)McLh%6-Nn_5NAK}tOyEGxrP;nYm zHi0fTrBGSkx;Q7uilu$zSAA4Ac&k#>X$4t<7FvvKH1ma4O0UD}^vXlQI6WAQCS*!y z3Y8=MP?;dwk0Z^puu-I*L%pcaPJ1jSbXYa+3@9}dK7`{i={NM5A|CAqBUuMQ8h06>t`j^7Xcwez-jB`=$nPSxd`j=Ep-+>XZ2~zP3J* z9~=Dj`LW^6mLD4={sew}PVt^dtW9wxL*^rG!Bp`aFrerb{~`Z&J$zPv++yR&yeH0U z#5NtFAARUvJQuZIYF`x^F`OF2c@3poMl6<_X2UdRSPpr7R$cUzIEb*c_Y(V1uvLua z6Y%vj^50kb@!!30m9=gw?54qx==v~q&* z?j>Q0j#yah;k$;5GGbdP3Co(KRP0J%#;(3t#)(J)2GVR5msBBymQt1&?td=okFe>e zd`!R5y@0-w_f$w&`**P!;Y*kQP_R}HDdvlPw3Q?FWWFtJKJzu_I0hghR=pyFfv8g? zLzwt{I;1kZ7yW0t{PYAx#AC+kRAY@w-Ur`y6Q}mYdT_M7a4vArTkW`# z`+BPt8OLVO-pqU+oIbwSuA-{z3huFlMirTQLL&;yFY*mO0f^D0HaQKb?@a9=55rlk z+Fep??GJrg?aI)SwCr zW5p@SSX)HbA16wgxSB?kLSrZDg5*WG;u4=AL%n#YPt8U^Qc*2GE`NRc%|BG_5E@tz~4)zd>!4IV{SgQ)idoL9V zd8>WoEzcmY6gVlFshelhuFL%f7Jbuy$UpD9HmTr3zL@);AG@FZT=?3(4}68(KM%hC z{z97eAH&z0Ea;yJUyDCCzP>t{4*bvYb&?Rr$5(^97GJAB1z(T;Qh$6ErgElb@U>c4 zkbkk-C48;)+19Xcr})?TdPw7Ixxv@+&w{UQKE75Pd|m8Ve9hwx1OBwqWjicLXI=F^ zzPcHF4e=?3uX#Khe0@SJOD(@s+c8vyM;6!dHX4pABEH8PXqLg{hb7tP1{W@paxLJLg3= z`pjzBy(zBsfF9EL3aZ0j-4wp|*Sox%;;(Ouzg9BelK02zS2~uRgDlEU<3n1<0*kGo z26K|@qil5sWplDnb_c}_$`10IR`jA6jL2=*1@@sJK+-43`=5)yO0wA#Uq2^*9iw*r z$ME&_^E1#t6TTLIZvHw$ReXMYO{rFA;n@Pzm^*O1aVva zI-5(%_sg)>Ql1T-Ug#$m9p^vf|Mz(|si1)`7=ttm(kIBTpPj!lLP)C-qVuYDgaAI2 zfE0r-l&7G6YQay~JKj2x!v8UR9hn9FGvVv!=dY{Ir30TIUsL>5N5Lt1z~HXM*D0TZ zuZKH6z8d5-#zWxiG^T)!qQTb&wM+O~I>|l^JJo+EI71IIG+GSZ335|FP?j(7DEW_sd9JFW_4`Rk+g-4|1 z-*t|CDEK2O=KjS0cE9yJ4Q9V}qrueFev7#VgA0xP`gs&8>l$cY8f8CCp@QOpBbm>m zPPsk{zL56Q)F~MrYqtHG*-uxe9OhT@KTxOWPQmNqw?>_!&Avh6UEq-{T#YtGILN9! zDXmRO>ruXgZyUx#TSewtS@^M{fdHBLuV;XT$pRKC`kv3ihRsazvVh;h54DqD3$^XjpejRusHR8? zDvLoEIgn)vfmyaAwj<=+yq&Y_>5rKMV784(-WZqqOJ&{?3MRj8UK{Q=hvw|ck6q%- zdR2Kex(NGriz<_5ktA15?qDTzW{u7Dvs9Zb?p&mM%8*Y~f}wA4(rv&}E_ z!*7I05Gv7*$yQrlq-v+r5~e^6XU94V_s2%}OuF@I&&;_Sk21=he#bf}*irsbPq)?tIwI}8T=vH6z|x`dzTRQDI{CVB{UBE; zo816@GAN|WBKSh-!`+B7GFDHVnaG{ao%fD#Y{%rQaKiVl8^9^aTAY#;>xu$*k|O4= z$T~h(tTWe&xHg9YiSwqWwl;N^vV5_-t`2sgC-NcYPT2F}e zadTQoJfqLt0&RW|+z(?g7_Mq}T6CRGNH6pPQL$&>W4k`iSS-u;EDQbEjzP}NH)25t z{ma?|`d1{%R2PW8MAzSH+%GC z=T`e>G)&0@@sFXjN>e6^(>hz`3VCzqd&qphAHUT4zAX8&{6eO`=R%@$k048mQzTbm zEmspiB%HXWFPu1gzuH7SuiR2dT(&=vH_Wx^+QiiTVttOe4(i;_nh<}NIjYjpMO_8H zY}y8&nczw`lTsJ&-c#&jib3Q+t+w}ZM+*JSg!1Hd-wI+QxY`?Y_1LTh|ER!<_>Reb8TyJIQC(nu_`>{ zL(N=cIbu9oyq51`^%v&3w(4D{Wdbi)mExbb<(oW4<4@MK(y`=W%wcUj)ca&cS-j6D zbN@j%ABd2I0 z959n0M?AnmQ9&VOatFaoNQTTn0+B;m#T`O2A<g zup7K>MjW=!rstuxkNL)e)!7^O;o2gc@)N!hD+%*5KGQd{#Xsw4YXaQO0($Ggeo(Hs zRvBB2^w~Jhqg#LLs{mPi5i_7UayLQkV!ewCC%p6kF?~tE=7Sj5MUT^=5_Qm#*#3w+ znZAJ{jnLm-O(^h8OD|oIus8^1weGe$Cl1SRb>}zl#;rt%gvGtIeImbgFOFKuT8Gx5 zwC*@K$!});XM=M5f|g`y{8HnXU}+nc-BbEwIEl}yH+NZD z`!^oTta}rS&LglCI0A?7AZ6W_EF70Wdn$0;PQC`2eBJ8I%CzdO*rs)~ACv`@5B4V= zB}PoJYBpvy?#;B0*{E-^qH8r{OMb>teN#UA&}M9?eg!aWciOsz*bSos%j4n*kS3h9hlL5&t()jI zZR0f{kNW0KAcgOXZRVJ^IdOSodT=_*16Cf;H)! zQ`7R>uoB!&2an+xlAS$R*|Za9n!Rp4f2bvLBRG~favMGc;ru=v{(%+tnRPE)8@EIl zcN3nvwN~`RblDZL?nMi3FJkL%bFjYLLZ`LjBBDA2T|{&Sa!>oJaM1sa%2s}xavpY* zwVDkCHX#rLA6^^|W18!y>6o2wb>s0 zPJ9PqkAn(Gl3Tm<5Fs#{FS*Bhl@50!DI*+@a>F zjt=HBx{Y6H@>@T~4#1rUuub2Qn}r4Dd9DA+!FH9M`>bteTHB)XMq+>9$JWUAEl1w5 zjQkH8DWnSrjl?oRjBobTt+O_MhEofVbY_AK(A2$z>x3W*-(;;N$iaX5bOCMg;ahsB zVzIT|;~>T1i6VHriuuxj}ptz;rh32#Pmj1ylKN0vwPJ4?{qHeuEG zS75=7F|BisuW%DKKx{+|SA_dX^j?r#h#Y^WLnZK>=QNq}oimQQ>B<;9>(}7xCaeOi zB&5RNTA_VZa0iJ&mWoYJ`Zt9 z+I@I&Cz7}}U_V)vcwGAB(+Wrnp@1eD_HDC3{;m%VHx~}7UD|vR)bf4 ztGA}}k$r)PnCX6zAwt*Tz6zF$cm7J>d_T@Qu(aX4xc=@tC@3!ggs}*@a8D(eb5bm7 z-}MzPFYpzGwRhTc*geO06B&9qT*lUx37tykwTyvg>4qiuFH6RMYOgly*YuE*yO8?d zoYwtE_CP{hPXH^W5=kz}hi2hvpjum#N10oDFvmkJ&N5~PwRbd!S7S)wxqFYWqM*Lz zyarojdbA%%q94WCgS^|prG1T`WLm~-t{-n{ofFe~4GzwQAw$`~@u`Oxz9W0CL2iKb zOe&@9A2FGO3CPc2RLEp?==L~y+@(e5Gqk=>TQJ`uD+G7Vp=UIKAK&J+zC|Vpj$z7; za}9ls&Q?W>v$hQ$W$Bcg5$IS-i}jLuq|IS`{18Uhw-vpSMQ4VwOWd|vGPdb&{XMA} zShlyOBS53&dm%KwE-=S1E0E+bu?6fKuMmvyF zc?_!WjH+*NMisronG^DiDjf5GqZ}@I8)9cXgyW&uVN`S`9y^wb4426FQTJY&IBo>X zrnB10N6pP@{W9ywp5`xZJ|FGr#t~MiMpJ$f?U?B*nXHcw|62dYd!Q%v&F%Qx>L&P+ z9eG7xH^085)crd2j<-InWxaHf8W#URJ%>$1{|6!E7Sq>9MUP1`LYq^%Fouuszf|iu z+e-FHe(Rx})~`3PehrohTJF@y$#GLW%O@mnGraLEo%~RiAxBR7k zfjZnzoww7Wopfj&ohpbPmY*t!Ej_sYuI`hpjGu0L$cxWiK^ju5D}FkU#)22W={k6S zug94!;5cXr_eQeWo*1cny0z=4R(bB%~Vv;o9EaYTFN|c;5}2oBDymG`-e7i z6s3^Tfa@5`HZsQHG@Fd~^i3~9&sfocN4TFt2qMK!Zyzm~_ z9bpR0>YScQ;vEO8?=5DuuqvP~7$Zuc#_4n1_P{39RM>x(F<&p~Z$XEKUW-)-snN(Z zw_ndOm@1DR5Y&Eo!H;J7F9z{j7A?c*H52M>0^`Yk&V>kaxK=j z84;EZ-WGRBuF2Xqj5RMv&fL7BF370w*2FD&8D08Y|41JXC@>77hE2eB#XzN6 zoP6UW?i1#x(P6=U4+NCXT#m%`1ULvvM<&#xqq+damPDK{^c|fMHLdEHue;Nqk$A(kFZegbveILm} z7$$F`5Jh@%00K_F8rbI=;{M3?*Z#5hlH$l6rnO$GVW&_*EfAiR8ilD zC}qYLedE7~0lt#qRS#a}jp?GDWw)xtI#gd5MR$sQt}tHjSRFdW(1m#~9BK`V)QwrNZI+k(P5?rmfay>^MaB+1WKn5~OiY-u z24IPhQtd`YQH5U_JLsn!%+vDgY9CJQqHcsVi{UWQ?m4*H! z>&UJgz2!ADmDh5xbsh9D{yG||Uv>j(7-NYnt~54G``xni_gsyW;2t!A* ztO;zm<(U2=3b!Ckhy8Y2j_l8JP6?-TH*Puh&@v6)-GFylty@}mG#)Ejya{iyX&QAGPy0hP8HXO_fUoMgecWs zXUs^GkFE0e!AF%8>6c9gzkNm_rt@-e&}G>>=Qba_9E`r;x^Ifdpx?zTL3d8;H<~VI zy+*%g{lp$H&D1h6R==hxoWfboD=;hcrM4wJ_Lg3%w#6^r(#xvyw!K;+)s>Lbg1X@c zBhdW}#CoQ#CT|HJ&Gdc?gP;+iHmLbPjV!|8|LIW;2vcpXf=`Y#VF!Fy{N1Q6pTf9= zN1?l(Zmo_G=rQa>WxJlofpf=4#eus0^~(xm+;s?`)uw1ufczGuAO%NM*~B^X`MQ6~ zcnsHa$8fI{SV&rqGEG_z0%*zLa;9(EM=znux+ytnxeve(zntJz7hXv%*NrZQvBjmK z9D|O5t8Ly-kv=1hokLimvU&)s(AZ3$2vz0+oNH({nFcK`;(GNN@2$uVq`Sz{VF9($ z>7{fAzN;VXT_T-;!!yapK}Lt@q;0gMYC8Uz4*dFtD8mB5aV|1zIi%f#m0J`m#tBvA zfj<#Bp>WYCLMYl-5yje;Np@p(p5}n-)i3G!$~gU+yiqy0$^!;UKe8nh4D&6K;onfM zM`Pz29hkuEri>r-O)FTIH@h!_Az% z2O4MNh)?~p2Wa8|bq7J>Ql)QR!a!)5?gtU_jz=tQ)ogyzK$DKnn>39cWMe3JVEoSX z-BxUOKY}nqT7B~lgc=WkFr9}A!igZ9;BKRbbCnJB(a?Pk9?p?%E*fB0ty-)V&se0u4mi9K%wafD0C-*NYSusKfZMR zVFj_7t5s^`9eCy5Au#t)Jb%otc>*bW6Nr@52WGTk?Yk}vLQ1jSX8>sy9l)E_*mJb? zy*x608#jS_1C05t0}^v^y@EU689oRH*SR-fAYgF{y?`Qi0Rc$`l??V;udA3SIQec^ zX_hu1lE1yyTmbG_+UBwfn$Ife54?h|*2)Tkpd@CsCTt)|^h>6_K8b_T@k~LU3+;S0S63ibMG43--UrK34+ruD&gnSN|#v8|(C<3eq z<9AGcj<9h>;}()1e6|>HX->wL8aF;SB;gQRHx9M(kIQELMO?@lj|*92ap^>_AiVSY z!ut;J2C5QvQIJpBxL;MqPsN zZ9E)D;Xm;3018*}a5crhlftc=iDNye2aI73VrFnNX{`d+ck~jW2-oKb(f9NJvgjYX zmMzs5S-noAK<8fpj2bqI|>5ul{VcAGsjb4&VM5sXI z7e*s8=vp9h5QQB0+Rq$zK9U8;>d-)+O{7_z1K&VtX+AB_Y44bYujt}dAxmp>0eVcU z(}dwxb3KAtZOHzM)d=Oanp-Tbcb6h)X~hRpEGTH6&*1iUHaN#by1w~qv~x@AHLLm1 z*+xbXoj%_DCKLh`Z@(6EhsBxSj-fX+nWZ(q0pC|v1`U`mF|R}$*65erL&(~0Y*>fH zP?ITVQysOng5l1JE>cQ)tre@K!Ii`et~q$7apRmWHZ*R<6g*~@`M@}@4QF3d?&qw{ zX=8ck14&9_Uh8?0%4BI{h4s8he4wi{S~s~qV7I{CxcYa$&&&AAF%XeK93AowVdOu z3qpczG$GRV0B8R-U|F2Mjp}9DmBa-mY_zlLcmw^9f8txv9lJ{%09>NNs@U57IjKUP|jBPj&JrA?n)f!AN)$P3n zv+JIl9oLVcBZjbhHfG=(iO{{9urdB(oMSv1rwsj`j`D>6J2fGRuOHb4a}01cSGb~w zD$Qx%b#>OftZV3QuWK+ZZDR94O-80)%@`Lwx5-yN%dJpk^ijZRU3OSD+2M#^OW* zmY&%q<_6bUeWE$EOrU9-)9!BMb`kMBA2%LQCn$`(^(e(jcY=3wTZ?yswERQX3(NwE zmvyeS6HXduH5E-7jzxGt?|}=0TV&7V?PzdI0rg5>!KYdW|Rv9Si>XJY5I z&Y{@uGnm9~KG>i1Z8YiI8&|uAF-G0k;L=e5SL3ZA-#O{PD72=j%`Ci|!j~a@5I5IO znndkvKA!k38@RfNO{D%b3!0UUPa8X9Mv^48rsd((pVK@w`HxW8jj z%{r((MEqEfgYlXW#K5`%9{AuP5Df@iFV>-~V;X z`XlZq5D)eu9&KQV|3HZ63dE}&BFC77A_gGGuR!Go7;Y=Jn|i+C4lW#_=7RPT=q#J#o0@wg32KL|1DAOf+P`vFNP z$21<{JnkY@>>T(kA;k{88rHYL|nHD#6IC}4`+y%5#o1g zCVriXS9sf%D8U1Qz;JH~T%5oVBJkB=UV_|{BygONR=Xw&0+>M+t*kqmm7ta? z`F25If7QvAAVeMPMp9zYP%nYC>}%7&>(PI>#t8z=CrKbg36=^11}}k*fvf}{5R10| zkF#jhNfJPn1=qou#}R0uFJI1q9Yo+dL11&`$+0K|fwf3VEb^708rl>D77~FdL14j2 z5(rTTR|*0?F`bJ>4FcgH>3ZTD&LYh(C-5CURR^{M6FM3YSdaeJWf25A5bI>xK?oMz zEeQD9!D#H^1_1{VIPf(uLFP#k2q8tuf`G3MV$NU$qDf4b2?Be{c?tLkj`ir%&~k#h zG5;EH?M4z}jZcdn<%oA-$*yahK-?@4|D1{lk@Ka3fX`&;L0<#bv=D*qhlKq9asp=x z0zNgp4Sfy>WD$Yu1cA-hom}OHD8X7JB^LQQK;3Lq0wgv(vM8F~lbRgEr$bX1_;BG;{XTFu9 zzCqwDB5>eKA^#^yAOwq&1p(Mjq8}(geS<&}Rq`@HU{BdEF2PPDB^JTP5(LuEW(2fE z-~vJ5#*-ufEgh_;YXkvbM`JjL5r~B6di4v&qCDq|5yY_}h}_wLthnB&XD8*Wjp*+z z&US*)j5qiBeH|;S2__gQ4YRb%n3b?js!Wz0LX>d z7M!-6wU&f{?CPMxqRNjF-^B8Sbr^y{zu~_r20vmzf-6lBdK>$0*pMs?kzj3NfHM~O zgVZ6$Z{E6cZATIk1D_zzMg4>5Qiz*t#OGX)7aI-SM>D;-uT;|FML&yu}Q^5O0h$T{7-fq=SFK=MZ%G19MO@BJ%uG6y#~4?J3nxjA{+O`hteRMw zu6?tf*8rt11#htK=m4?51)QT?e1y>(r6-@#8R)Zi174D&@Jb$3TxVR#ST*ovUMTf> zq!0*QN3P)S9un^!@_V;iyt`9SB44KK6z>*`cQ^aJdj#)jvO9rR1yy6qfP>~XT{l1p zv#}R&VB-=N8{;-oD#0|QrB6jK&!%($(uz#gHJ|{G0T?E5HIBq|<&ro34`e9Z6qxw! z8N7Z?#F}d2A=Y_zIWSqg)%8CpLgkXU@D1`GAE%``2KP@LAI2S<{AZo4uf$2k?-&1OV2evdDL58y3zoLHFbNW$bSWXt3D z(t>DtPAs&{_(tE9K~dU%A5fYywZM}#$^tLBw6#sn;vb)}Nl@hPF(KozlQ>rg9pZjRpQnj_M^7MQM=HEb`#XCR$m_+S!tny+E) z_my=2;wA9n>6`xc8Lsv@3yIthAjH5SQ+3c5mS@_Y1_#FApBZ<=uF7 zt{*d#tUNDgQyWEI!jKoKzq~E-IPJ%4jxJ}A`cY~;s(zSy)Sz8kS*Q7x>zPX61l`x& z5Lb^I_6cVq~|4p&Iq_D2sA>S-0tSu|D)jDd*Di=))UkEn!H*o({RDi}@)@==$N1$8xLc22mw zu)3_4MQ0(K-z$5Cy`~WP^K!CsNmZq&o{0;ps>&~8)mKthUT!O^thLuTlnIKg4yB~5 zrWSxgrPf}AtSS>0C>3Ru_M)1?632wv(y|hV-?PJB0X`Kv>T2wM&_(uzc1NM33{-td zfy@Csm5##lN_%as-y3^PRc&D0nzCZ>-Iw;-!i5V_ZXbY4M1HC*V=2@bF!qCF@_;!UW+Q!`s+FRMi5 z1yq}a2Qb77^k)VE7Zz6g<*e}fy0Q}1z!v$lv$n3Lq!1M<*4t{!mfA<-0||El`o;jkgX*a(B6&2F)Kpa%D(lM24P~_k zLcXZ5ysTKH^T~pb;oj=ARa6z%l@~(!`IW;LFA?gY+`foQ{R!|Po)6K9??Pu__fufm?@?&UKLdI;;NeR;_=|M-G)q5 zR+ZJ-$0LTVysV-BwmnU2dH|%a(4lRxYZ#&R%1k6xp(Ay{nIwzHt^qvzZiU#S#^K%#L-8-`tbv8)xtmKUF@8k@xAAk@27%`mz6-%c(xANE3-4Rwyd8 z8tGJ@!;vN$KU%Iv>#afNJ&UdNJ~gh$S@`tjmAV{k}=tsVoWur z8Pkm!i3y3u#Kgp;#N@=3#MH#J#Pr0Bq=Y16QX(iPC#58%CZ#2%CuJljBpZ_xlarE@ zlT(sYlhcyZlQU8hQj95yDM=~GDJdzbDQPL`DH*8=sm9dA)TGqp)RffJ)U?#})Qq%* zG-Fy~T2fkaT1r}KT3T9qT1I+8x-mU5Jt;joJtaLgJuN*wJtG5I%mDcepcY;RQfJ@| z<9h*0PI5p#)hGFMyez)QEAo^Oc`nE-2h>7-ox@&lqi)%nH$B5IepC>94 zl}XB__~#2v0))c|L$LFwt|({87VJ?GGAIV+0_Z3ex+2{BhA^C=oFSeA(~nc=-+26^ zv_q6sX^u%t4-Wb$hJJQ{?FgMzw|Qx94FxM!XG94`Qp8_ z*BY{VN8fT?=F~$%Z~adcyIc4%Ca%x^*SY@T2@B`U`80Fde{P&NXU@OH`v`$IqU*u0 z{Uq29f^@&b}IfJ0*>Rc%FHrL-@iu48IeZBB4UA3im zd~rkOi<#F?ihBQ%>Q6CEqMx^}(e&XvM%5qx?n{DMr*{|y3vv7lFTd$xB;t2u?#y2hGdJS}0e>{}bJSY%!Ht=ZBKG@_bY-5+1ytZE&4jRKx0P?rtbDEa zxj%fCTgZP`CTlic{WQbLEAs0gKKkVf4u(gx7-&X})y(s6ICSE^7OuT*ui+25wOwHM0 zm)?cW`*JX3m9^K?gYdR#y`Bgdr4f0(o&kdtsbpw&H;Q_&{cW^o-rWUg>BRAz`ypd zy`IDHx4}0c-7fga@LljN@Q=cu2S4JGUe93QsfRxr{xYV@AY2K4e%{*_Imyc zzqA{8kzd!ly`CocqyOFOSqZ-d{?qWc!S8}^!2+oU3{qBp)a&Vn@51`2c^EWA97R0% zYx`k=5e6XA;Ex{f@wC8Snc(qs!(Wx;@r=R%$(7>q)RRBK*240-%W56@`nLZ1eQb1gWrNhW~M0#7Yv;l*gzi`XV&Gtjn20H;ksPa!=9ZI-7!p4sqMJ>&6oz;Ee9dEp<0 zu{ja-KKCP!CjxRs4q)aqOJ^#Y`WVgG1Nuj_Yx>6!oUEXp@?Ot*JPP|8I=-Te67jpH zK&Bw8iY{h~E^ewmdT~U9l6lsp7blHkXefOSerqj|efZL$_{u!|I&jJ`=`C^utH$sC zAXpP%D*>Z%A~}jj>(cJ>gQes7X?j=D>zNN<$<@Uy*IIOO%ffPWhQ{!!C|z8(E@rYW z!Wx~Wi<`oNS(~?Pr!@Gv@JmKoR2Oq``1>P%34o0xh(#CEsGY5&G9=>{hfL?--Ieri zav&`SXmJ8lh!!V{Xhet3z55&o0GClZIO2IRU>1}mmjH|oa*KRU0kv{~n(#gyv>t;` z<#K8#>*AJ&W$6sd!gF+^8`WH0f_A2EGyoun%%GInDB7DAT|%R}EPQ#GQ>&dB6&S%1 zt^IuvCao=CeT0=PDz|nA6`blT26avOUqN+#xh`e}<>mIU$vT5Ge6nuz zay3hru&kd&m)_Vv?BALwT|$;_G+rVS&)4MW0$l{jn#;q1ei_kh>^D`nwtrZHmQe&Jyc9WJx>e>b z=(A^_kI3cW_aR^jPxg9-5e#@&XfF>eOAeJKi^`ItYuAMBP@{C|pcPakGuWoo<2M#M zG-fsGmhw4`WCGP804o=JxUE%+P zBrc?X;d%5IB;XKU!HX$Wule43%^_YC=sGlEQzAmKLScDHMxSvM=M;4VC*@^@b}I4J zO!5leHL6$W8Z=?$+92_pLVPsg=Ro?FPV|M8p5;ZRZw$WzWr;#c;)RqbZ5}Thf6k3A zMl$LTi_!ngCLFA8a|7#^$tkPbDZ2S#7Xf96s+}6GT@>;KbvI0g4Cwdfz1HiA6?B}$ z_vNH>mW5~Yw%MRrjFO`C-o`mKI_wTAy*~_6L^4?od}Fuudg_pWo^N0KGE+S;nPg2T zm+GNCEGU0m@laD{?Wv3Mx4qYsglBTp#@+?21u#r8Fvs*CVDARS`w=kZ&0fz`5pNaz z7_^m%*WrjCk`uEoW|`Kii)##wBX~OF95wHvV@&btxdKkK2=&oE{k2dVi zsE}o2a=a2KT);Q`i(bzouxB_v$Z=@Bo}*i>341}STdTQJ*QJ>ae=H`|Xa&?BV-Y_Y~ct!ajr&(H%$1Jh_e|aTQQO@S} z7_Z||6k&wN^LOa<@M*Aqn9RY<@~;>FK59NGD*%EzD5_+_<-l+LxgO68@WZ2lkCimBDB|rvm}uTkeY}(Ow|{@DZRPsg+tHe%%b1Db1rRP1$SgPf zdR%04C4&!!ksi;Z2!~&TOd@ZhpF@Y=7@n&u(Eh={n?reW5VsuZRw7*q@iB>~yB*CB zWwHjADMvS7>w(b%tIFSm$c<)m*e@V`7dCzjgsu-i1|bPmAHIGimvrLuP*EYOWE$y| z0{kLiE8Ku_%4P7w-q=U;yYC!K9pid`z-hXdzoiSq<<1KZ|* zC%{SlL&N~cJ;qBT5hh1@e-(5R0DA-B@H;^#k8D%W5w@vS+NNkY0mi8%`l{m~z(MUT z4!nIDIDewLn!#~~wlRfWHlOtZA^PsDXp)&O@t@W8LNBMLC=RE8H+77;kH=YP5)8A96uPW~!k{zrcCVt$7 zK5AEvPZlkJtpe;YVE;jw*AeC~0i}SKWAGVchJJz0?3?#Y zzNV7BvWnX5@#B%K=&+tJ-7d`(U5_S5=h9^94&iqcy>x?Cn~j9j&US&;f2Vsq!y!LE z!!N6@D>CezU^^4CfyM&O$lL8`RLl#Qw-|zY=6MfgKZv{^(uCa_x{gr;kQe;wfv?F1 zSxk`lm>gQX_RSQsZy3HjUHjExb5-5StEcHYu7(-4^6D%C%^1@Mdy0W_7x0g2_js;H zRrJkk-`MZ_zT`Y?Z|GVO_B@?yGx1*NGms%V%V8_XF(D1xOa1#R*h*Ra88)$57co70 zuHP_?_08?T_c`#*^p0zMa>@D%CYQN<%sM~p#?aZ$iY`EQ$gWcU;_2pd<^9Z< z8#q@JAEVtEuV`!F?}@@J6zsucns}gK`pp2jd;#-Wmt#UA{4JR`pDyy{P3T+bw`+AF z^TzBx6Yx5K(^S*z`S>j0+=#&e%Il=@i|DV|*fdvnXmZ#KX9e|7tR0ihwiY*;qM@Z|Hntf0L3 z>u)CG*;JRXCCp)YXQO=C$LSa=wV6@)%?3^@^7a(M;dGB<7E<{u8A0FU(G1wEc}LR} zhG_%T6P|VF!e6TXS))9o;gF~-b%jQGNIqSjxa(h{ zmxXWDs^6>1{aW=&RkP3aT1=|60US>)aBvI|1_AIQvRY!sdU&VbiZ}eBY z0EtjH;BBP3K2rHxq`DHjhhb{dAmy*&Dr)m^_}K4bmFHCT zn;4~6RlkT)4)#;`#4306AM`=2(jK9{6stTNG3bR@O+H+#|Ff&AEf+wpxQl1=^m(V7^LhQsBRvl+^bW!0isjC9i-f& zS3lD$oAd-(7jrB6Y2T-mNw_l7HL zL|r&FwMfvap=>{g6fw#Jh#RB0wdyA^$`fJgo*1PkO#L86c{W_#8ms&iu5LoM)gjAc zmF4}^rdZ|ce(Ec+%9j2rzA`)*p}rfVd>5g<9izMzss2T;+!v+Zr&l~t>H~V^ooMx5 zz4E{S^=`d#Xn@+TS2he(Ju%8h1Jxrj%D-Ze5tJa|aaG+tl(^S3RCx@QIaFzgRNok? z?2c4-4pm-`Qa1x0tG+Z;xpff5L7HLx)pM1z(2}!Ni?R&$q*3nGr~~NLb?I{zr2!Rn zu5ut;{rd>zqX7#ZJXcw#Q|~%gc~P(4cdl~m3<}>d6!g~(RUa6ktQdyiy>S%VH5|di z!()+T`3Q=(asN;+0+s-XE>LK2G^K8o{5U)mO*C zj7D(J0JU?R^6)?eI|r)k#woYz5bV&YFOE|_q2Migb@e#qRXu|H^y*XNl*g!oH^-=t zk5iV#BKT;m`q4P$00o-|sk?x85Q2LKsXKx93;p797ngSL-GbZo}_;}MR_P$eLsbs!>QEpFKbU(7yezg z^3;Unz1d3prRwY1$`_ZauVyR%n5ce`t!$h`;eC_T-fZQu%hVm&%FfJ3wE*3jts)sP zM9c=Jn^g^4$3=Y@DaYLDbC`l8(*qee?M`#xGzU&|;4}wLbKo=wPIKTi2mUW|;LsF~ ze6{c;srduBC04M6L*@%VA&d`atHtvn;mdUOBHjF44yhJ?LQuSpH@(AR9`P;yoG#K! zd?o?61i>3#4@@tg&c~DvIr*Fz^gJ=>d8&BEv^;kP?qO=2x&J=TF`X%%w+-NY!I`nl z(Nq^X3>cZ~7VqVEIQjnDUQZQ8SWQMQ9L!+mMvDlTRbdX32F%e^Ejb$gkfXU6a+tPa z4$H3soJgj)^gMskj;8M((+RfZQiac-`u;mQRvYr=&44!GN8g@k{;~x>lLmkK za4Wj_OPP-3S_j7nlw};r3Y}U8JM^IS=7SV`HL;cH^mr-xs~zA<_|VelFd9k?s$Odjo!0 zBf!dMfPXx(o=jPbM}pE(*@!PxKErWIef7|9BQJrZM^7?cH`3zK&-v2nMY@GpXIh3I z(IeeN^zeD1Pd6ec9i@@!3<&qd&r3wQ=THI9Wip+{`C0%61g8lQHp}n`SZm;9Z4+YsqkNj+2Ra|UKZ$f#;={&V{E88gx+IcM6Nm-Vlh2QcbP{iFcJ>6r=p6fkG8}VY zOpZ^CPZ(#+7$br**6}{!3s=4lk}ocM8uW^$|8a^2k(9c_Q1QX0q+oWuM}`vb3*YOgk4o8;13Bn z`=|#PTiXkNvw*L*@`&$?_@4;4X(= z7wdmS{0_|Rk)!;PYZ366{v1GST*&=hzztMzI9jJd?o$DuKY+t&tqHk!q@(h-$8z`^ z9IR9dc*8Ibr*#YD?htTgB!~A1{96RP=X?&Q^#kOhL5J}7%;eAXjh>tZa4K()v^RM& z#VO(c5&+@t6nGlW3;8NZu3Ahr3$1L$|<@g%}o_ql>5O8Vl&5?KnT++QpzHoL1^k@z`7=}na}Nl(96yNaRoo2!IZDS6Ua{diR4kkZhO`E&;JVI7 z1m?J9JqRAr%@FvX5^v98@rNmL+#>V2fWc!FInKxy@mB#JNmk=xEGX@{3$nk}w5(_0vmV8>;aYI6&b&;{7+=@2PrXM zNQyE==<-e#blK(zL`@RW>jk_E)XC8rLvm{ceEuK~pmkW}_6zu-a1MBsgOv!hODb2x z4;&!WkTMEzvi$1b69`27G!eh&aSmYXoDp0g;2l45I9or7;0*#ke?5n@^{xm$FW`n{ z96zmLAa@1?kIC&a{>;|)BRE08JA^>NbYreUz#HD;&uslGf`1cm)6*O-%k{p5Q^x_v z_9VdnLBbzkV1=z+M{pF3L&{IrBOK1wi6b~&z`Mz)gG=L{vQWUQ>E2|x7X-Xj;<=T> z+4>K>`%=J7Rt{(DWdI)my-0KoLpYqRSp$5ofHy4Xh}m8R1e*jr;Uf-bYi$vHR=~Ri zAJ|%Iz&{o6`A_lqQmzIKAbE~cg2!WL15Wu-(s_Q^x+5gb7Vzr(I3BiV0KrNDpFfz# zxAWJ^y#j8?;&8U!2=D$a;63d;BHPD+AnofSy48Q-@o7B?xsd{{+{59tUWMF^0={}I zhmYi79!B83@i4@EFmKcJS9qBj6g$ zPRMxy0aor4@jGZh1t<5fyd>cBI~Z7D`y3E-15QiAgWXSn%W;_hyBM^ahqdSp#Q2)V z7v#)}FqP^z{_{)HY!oOGGuYQ~J2ja@y*&unI7W@%*QLcb57x3VE ze-ZFd<$6uT53Vn)Z9s2*wo)zhvp}yL>jTdaWIh!BGtuuEfX5ItJ}yK2SWr;9c)4Is zFjo)wNbpn6hs_Z1HwaGg#XMQEfQNx-D7pp!iT_=y}-_;_S)9|E%M0>r#CFwqx^548VskXEnA`AL~(av$++eZc?J2mBGhL$%W_0&Wof zX`LV(jj?&C{0|2_RQ|^UPWa~wyM2Vfv!svs!_i&_A%2XobA)-V?CB%^p+4a1Fy3Ce z#r(6Z_mO}P(xUS*NKSJ9BEVTb#kganc%2J4$y=}N;;m0n z-Ud7rfA$d`$fukSM+;|e2oQ#fUkW(MVS~_zi6Z`^fK&cWOF2chE*0-S67jo&;tx4f z)O%2SyaMo0^;_Qu{As{RFUfiS@ghGT15Wug3AzRWABOrRy&9|!M*&XlH`so=jLCyY z?B~^p_ytQiQ1W>j!%yP^)Uls?6L6NFpnfX+Yz|)?)J{!+hvNUNKH%kjz;6OP#?Q`| zS^6X3R9^X=Wruk2Ss!>NpA$MicK}X!g6)A#0v>FKAL;{7`0&v9&jtKplt9j(OZlAI zNBnCkKFMbgpC9Za{zkw-vblqYwC~b3@}v>I0q+c&Pl$2b{`PE#z7DUtN8~S7sH}IE?XCip^HIpo|@1<=}@& z*%sO>aR#t-3pxHrQg$v5<=7KVE z@ny9&h4BfZZ2aU_YcWptDmI%7XPIYCn`N~5#mSgOXBpaOPR~ulvA)G+l@2p-R2SAb zIF3-n(-=)0|4J!sjvBk99Y8%q%EW})LY77xIcr-`R#jmKL2s_JXI(iv+Y+Can1ll4 zB_%DWE5i}ci|u7K?C4Y*Ka-eFQMJ{wBg={@USbB1$4>-4J`RgyO!tq(QyUWnXS1uS zYKpmwXGhmo*Hl$A4&)^XG0YekB?K#qi+>Jp zRY?g+S11n6vT+_Q2rgWnG4VS45?g6uZK=(en2utl`JV@DTU2IWY%K!VScDVrATxz! zj#_Jx*<6NfLreV9)aDci$^NfIlFCllt|bos;+%l1IQ=_2J~1^JazlPfypj2-@rle& zi%(*HdVDhTGvZUoPfLhTWxg>!jroc3>C8`x&tQIXypfu-I9GJ~Gw?makw~Iha^86$D{t*V^g8zXZ?CC z=%s2MbtNV7MG8)|w=YBsLql^^*ow+=W;`n0R$OIUSYEXNXWAE|LDkv{>*|%FDpFK9 zZ;_Nhs2H{qv|C#tPETB7!};npOO%qD!V0^sxUQmN36l6d;kd;z9Lw())n=PAGb2wtm=2swO444FR9IYWE=C(m5T{Dw zq{rYB9?hf*{WOs=DZ8|;^17L#UeQfJ@tDooMso%0Df*_C!ZZ!<{fy~X6jsu)=LPl} zoFh4%PNmLaJ);dPu5D(ED6S=ECLs*bGZ>Ra&rocyti^fi)F)8XYHDbV1r&?P*_}!9=R5*V3i(%Yl(@XC*~)(+e&a`J1zw{uFS{T z4~Yqk805r(#z2RPijJ63GA3Co(Ely67qi@R_RREI3VqdKqW{6{vIawB+nC614DhRJ z#uFcb^h(@8VXI3`=HhiCaTn|iQL9EHYj)-Kg@rhJ^;gzzUqw!asY@mq?!=&WghE5y zY6~0`-zOqL43(|SmKR0g?yaoI+Jb z3cIla=jfN0Ro7OP6|=~qnEo^8gIDYMM8ZL_l`=b42T4pd<&mDDAX^5yy> zL}`o}f!8oFn}$^~jNwJFcTBl?*2&qnL@WqNQE)9rRh=UM1Pd)xTS*VyjhmC{9Ou9y zdkv=G+Cx>J>JiY1$?UG6ay#7=QC?UJb&3Gls7$B&n`b~xhuWKYY39zgCBB7%P{SWoG{!&~C>)v+ zG>o}mT2X~R!uUj^VzbVGlEToOs*rlh*|UD*Grc*=Q z&o$eEDT@|`==>@d2WVmxptu|}*nahm`5B=(Ltf~>hW(=4ftH$>juk`X+4BX$;aeWZKhL0pB$u=1?G?;m3v+L9;g(Pb1%a}`B zgj?VWE5)!cNB~c|`(Ph7gigSvjWoB;u4l9td#fdh%rboX@YhPz+til*jAA02;S_5! zwAM_=94}hrwYWZ{(qUT+3#f(b|k&(oe8u9=5@sS*pcokA&0_KE^7vm-rH1W!! zx*A-Rhar2QBpB0pZT^<6gEv6BMzfFl4n5E{`&D;nCWY==jK=I41qJ4rymx_dQ&dsy zty$LKm?>0aXZ?qtqQTT6KB5IhT|nPJsO$Lc`4ZS5IsRYNsKw_gb45i+!)Q^lKx z*#kSqt>ysj%^rBz@~ET|U90EPgCGJjcz7piAS zvCXnM%FK(*Dd^q{7s3uW-hlG2{ZkW8|A8gfAIaBZ=p5XfNU>6n9J*)nvgbE#ZUU=! ziqwC)n7<3zoPK`9X-iP5s}}pJ1|73?HqEWc`F`}VG}}L$e=M3)xws5TsQS)P{ zxpmDk$}nN2ynq19cVR_Y5wKM`C>wy#WI#OBu!4_X6&2_X{Z?`O@*tMqu>DSA8;MfD zw;OnULlA1YK2U<=gVI-v^wJ+CBMM)x`;_1;1ZXXjq<@!4FMTZE32<`VlLT53_zrt+ zW%|`3z4Rr0xoaXg|Fe*uR!+(Ea-XvF3q*$dAr8@&>9Nd=xvTM)NXqnb-?Q}PK4%`A zn6mK4R(56Om>9B^~Kk<2~(Bmd|pZvh+=YVU&L=ip;-2tK2N$GQHd< zEq%F9TGE&4W%*l0`pE*J+;=T~xlfzYV@aBqzD$27V3bA5A9IF4AIk*;T(JDyj<^2l z4F(?F>&t=(EOI@U^zREwZ#s`hl)fylNbb$Qg#R@teS=6Z{lYsacRpwG1zBhn{`%)% zu6va}wn+rI;PU@Nr1uuHOVAU3J=Tl*JA?lN!fWuO6f(WseE%AA?vqU44`hgvq%YT1?-J?P;+?;fbS3NzBqkQg z^l~3byV!_C_m7a1Y?SGx{6Bzq{`5QaJVA%JWyZo%`~JxE(my9C|8hTuOQbgtaz7{2 zN&kYN^m3i7LBsPQ^{+%>kOAReg7kz-mS65Kt5$h>lP<6Y1*cCC^b>;c%Jf){7~o`a z{C&aVfOzeKegxLtlOsIE_{nlh{YSZzc}LLeR>pCxyMrB@+-b~#k~+H{^iBPc=8 Hqw;?M?Ag$L diff --git a/native/terrain_gen.exe b/native/terrain_gen.exe deleted file mode 100755 index bb11a44729277a4bf97bc91d9fa81cb0849a03f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 307316 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ℜ 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

pLAr;`{!lJqZ$=B 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 diff --git a/network/server.py b/network/server.py index 53f64f4..265475f 100755 --- a/network/server.py +++ b/network/server.py @@ -871,6 +871,10 @@ async def _game_loop(self): if tick_count % 2 == 0: await self._tick_redstone() + # 雷暴落雷 (每 5 秒一次判定) + if tick_count % 100 == 0: + await self._tick_lightning() + # Fluid system tick if self.fluid_system is not None: await self._tick_fluids(tick_count) @@ -892,6 +896,43 @@ async def _game_loop(self): sleep_time = max(0, tick_interval - elapsed) await asyncio.sleep(sleep_time) + async def _tick_lightning(self): + """雷暴天气时在随机玩家附近落雷, 伤害落点附近的生物和玩家。""" + if self.weather != "thunder": + return + players = self.get_online_players() + if not players: + return + + import random + target_player = random.choice(players) + lx = target_player.x + random.uniform(-24, 24) + lz = target_player.z + random.uniform(-24, 24) + ly = target_player.y + + bolt = self.entity_manager.create_lightning(lx, ly, lz) + from handlers.play import broadcast_entity_spawn + await broadcast_entity_spawn(self, bolt) + logger.info( + f"闪电击中 ({lx:.1f}, {ly:.1f}, {lz:.1f}) " + f"附近玩家 {target_player.username}" + ) + + # 伤害落点 3 格内的玩家 + from handlers.play import _damage_player + for player in players: + if player.gamemode in {"creative", "spectator"}: + continue + if bolt.distance_squared_to(player.x, player.y, player.z) <= 9.0: + await _damage_player(player, 5.0, "闪电", self) + + # 伤害落点 3 格内的生物 + from handlers.play.combat import damage_mob + for entity in self.entity_manager.list_entities(): + if entity.kind == "mob" and entity.entity_id != bolt.entity_id: + if bolt.distance_squared_to(entity.x, entity.y, entity.z) <= 9.0: + damage_mob(self, entity, 5.0) + async def _tick_redstone(self): """Process a redstone tick and broadcast visual changes to players.""" if self.redstone_engine is None: @@ -1068,7 +1109,7 @@ async def _tick_entity_sync(self): live_entities = { entity.entity_id: entity for entity in entities - if entity.kind in {"orb", "item", "mob"} + if entity.kind in {"orb", "item", "mob", "lightning_bolt"} } for conn in self.get_online_players(): diff --git a/tests/test_lightning.py b/tests/test_lightning.py new file mode 100644 index 0000000..f98857c --- /dev/null +++ b/tests/test_lightning.py @@ -0,0 +1,83 @@ +import unittest +from types import SimpleNamespace + +from network.server import MinecraftServer +from world.entities import LightningBoltEntity, MobEntity + + +class LightningEntityTests(unittest.TestCase): + def test_expires_after_lifetime(self): + bolt = LightningBoltEntity(entity_id=1, x=0.0, y=64.0, z=0.0) + server = SimpleNamespace() + for _ in range(4): + bolt.tick(server) + self.assertFalse(bolt.alive) + + def test_kind_maps_to_verified_type_id(self): + from handlers.play.entities import ENTITY_TYPE_IDS + bolt = LightningBoltEntity(entity_id=1, x=0.0, y=64.0, z=0.0) + self.assertEqual(ENTITY_TYPE_IDS[bolt.kind], 64) + + +class FakeEntityManager: + def __init__(self): + self.entities = {} + self._next = 100 + + def create_lightning(self, x, y, z): + self._next += 1 + bolt = LightningBoltEntity(self._next, x, y, z) + self.entities[bolt.entity_id] = bolt + return bolt + + def list_entities(self): + return list(self.entities.values()) + + +class FakePlayer: + def __init__(self, x=0.0, y=64.0, z=0.0, gamemode="survival"): + self.x, self.y, self.z = x, y, z + self.gamemode = gamemode + self.username = "Steve" + self.health = 20.0 + self.damage_cooldown_ticks = 0 + self.last_damage_reason = "" + self.alive = True + + +class LightningStrikeTests(unittest.IsolatedAsyncioTestCase): + async def test_no_strike_when_not_thunder(self): + server = SimpleNamespace( + weather="rain", + entity_manager=FakeEntityManager(), + get_online_players=lambda: [FakePlayer()], + ) + await MinecraftServer._tick_lightning(server) + self.assertEqual(server.entity_manager.entities, {}) + + async def test_strike_spawns_bolt_and_damages_nearby(self): + from unittest.mock import patch, AsyncMock + player = FakePlayer() + manager = FakeEntityManager() + server = SimpleNamespace( + weather="thunder", + entity_manager=manager, + get_online_players=lambda: [player], + ) + with patch("handlers.play.broadcast_entity_spawn", new=AsyncMock()), \ + patch("handlers.play._damage_player", new=AsyncMock()) as dmg, \ + patch("handlers.play._send_update_health", new=AsyncMock()): + await MinecraftServer._tick_lightning(server) + + bolts = [e for e in manager.entities.values() + if isinstance(e, LightningBoltEntity)] + self.assertEqual(len(bolts), 1) + + # 落点在玩家 24 格范围内 + bolt = bolts[0] + self.assertLessEqual(abs(bolt.x - player.x), 24.0) + self.assertLessEqual(abs(bolt.z - player.z), 24.0) + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/test_watchdog_e2e.py b/tests/test_watchdog_e2e.py new file mode 100644 index 0000000..45d02fa --- /dev/null +++ b/tests/test_watchdog_e2e.py @@ -0,0 +1,67 @@ +import asyncio +import json +import socket +import unittest +from types import SimpleNamespace + +from watchdog.process_manager import WatchdogManager + + +def make_watchdog(): + """真实 UDP 健康服务器, 端口由 OS 分配。""" + server = SimpleNamespace( + config={"watchdog-health-port": 0, "watchdog-max-missed-heartbeats": 5}, + get_online_players=lambda: [], + ) + return WatchdogManager(server) + + +class WatchdogEndToEndTests(unittest.IsolatedAsyncioTestCase): + async def test_ping_pong_over_real_udp(self): + """端到端: 真实 UDP socket 发送 PYMC_PING, 收到 PYMC_HEALTH。""" + wd = make_watchdog() + await wd._start_health_server() + self.assertIsNotNone(wd._health_server) + port = wd._health_server.get_extra_info("sockname")[1] + self.assertGreater(port, 0) + + try: + sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + sock.settimeout(3) + sock.sendto(b"PYMC_PING", ("127.0.0.1", port)) + data, _ = await asyncio.to_thread(sock.recvfrom, 4096) + sock.close() + + text = data.decode("utf-8") + self.assertTrue(text.startswith("PYMC_HEALTH|")) + payload = json.loads(text.split("|", 1)[1]) + self.assertIn("pid", payload) + self.assertIn("tps", payload) + self.assertIn("uptime_seconds", payload) + finally: + wd._health_server.close() + + async def test_heartbeat_updates_partner_state(self): + """端到端: 收到 PYMC_HB 心跳后更新伙伴进程状态。""" + wd = make_watchdog() + await wd._start_health_server() + port = wd._health_server.get_extra_info("sockname")[1] + + try: + sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + sock.sendto(b"PYMC_HB|4242|19.5|3|512.0|1700000000", + ("127.0.0.1", port)) + sock.close() + # handle_heartbeat 通过 ensure_future 调度, 让事件循环执行 + await asyncio.sleep(0.2) + + self.assertEqual(wd.partner_pid, 4242) + self.assertAlmostEqual(wd._partner_tps, 19.5) + self.assertEqual(wd._partner_players, 3) + self.assertGreater(wd._partner_last_seen, 0) + finally: + wd._health_server.close() + + +if __name__ == "__main__": + unittest.main() diff --git a/world/entities.py b/world/entities.py index a474059..0a00302 100755 --- a/world/entities.py +++ b/world/entities.py @@ -419,6 +419,23 @@ def _apply_physics(self, server): self.on_ground = False +@dataclass +class LightningBoltEntity(Entity): + """闪电实体: 雷暴天气时生成, 数 tick 后自动消失。""" + + lifetime_ticks: int = 4 + + def __init__(self, entity_id: int, x: float, y: float, z: float): + super().__init__(entity_id=entity_id, kind="lightning_bolt", x=x, y=y, z=z) + self.lifetime_ticks = 4 + + def tick(self, server): + super().tick(server) + self.lifetime_ticks -= 1 + if self.lifetime_ticks <= 0: + self.alive = False + + @dataclass class ExperienceOrbEntity(Entity): count: int = 1 @@ -484,6 +501,11 @@ def create_experience_orb(self, x: float, y: float, z: float, count: int = 1) -> self.add_entity(entity) return entity + def create_lightning(self, x: float, y: float, z: float) -> LightningBoltEntity: + entity = LightningBoltEntity(self.server.get_next_entity_id(), x, y, z) + self.add_entity(entity) + return entity + def add_entity(self, entity: Entity): self.entities[entity.entity_id] = entity self.spawned_at[entity.entity_id] = time.time() From 648338c00a1cf75f752c182df6cbdecd80ae28c4 Mon Sep 17 00:00:00 2001 From: Kimi Date: Mon, 31 Aug 2026 13:18:56 +0800 Subject: [PATCH 9/9] docs: update README to reflect completed features (visibility, combat, durability, lightning) --- README.md | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index c031ff3..2053451 100755 --- a/README.md +++ b/README.md @@ -24,6 +24,10 @@ PyMC 是一个用 Python 实现的 Minecraft Java 版 1.21.1 服务端原型, - [x] C++ 原生轻量生物 AI `native/mob_ai`,支持随机游走、看向玩家、敌对追击、近战冷却等行为。 - [x] 基础 `gamerule`:昼夜流动、天气循环 (doWeatherCycle)、自然刷怪、自然回血、死亡后自动重生回出生点。 - [x] **天气客户端同步**:通过 Game Event 数据包同步下雨/雷暴的开始、结束与强度;入服时同步当前天气,`/weather` 持续时间参数生效并立即广播。 +- [x] **玩家互相可见**:Spawn Entity / Set Entity Data / Entity Teleport / Rotate Head 转发,玩家皮肤层元数据同步,移动更新按 `network-movement-rate-hz` 限频(原生 1.21.1 路径)。 +- [x] **战斗系统**:攻击生物(武器伤害表)、生物死亡掉落与经验球、骷髅等远程生物标记。 +- [x] **物品耐久与基础附魔**:工具/武器耐久消耗、耐久 (Unbreaking) 减免、锋利 (Sharpness) 增伤。 +- [x] **雷暴闪电**:雷暴期间在随机玩家附近落雷,对附近实体造成伤害。 - [x] 控制台和游戏内基础命令。 - [x] Web 管理台、权限组、OP、封禁和白名单。 - [x] 单元测试覆盖原生地形、原生 AI、种子解析和安全出生点。 @@ -39,8 +43,8 @@ PyMC 是一个用 Python 实现的 Minecraft Java 版 1.21.1 服务端原型, - [ ] **流体系统**:已有基础水/岩浆传播与交互,但尚未达到完整原版规则。 - [ ] **多版本协议兼容**:已有 47-770 的版本映射和处理器框架;只有核心路径经过有限验证,不能宣称所有版本完整兼容。 - [ ] **命令覆盖**:`CommandManager`、权限、别名和大量命令已注册,但部分命令或子命令仍只返回“暂未实现”。 -- [ ] **Watchdog**:已有 UDP 心跳、监控和重启框架,但缺少双进程端到端测试。 -- [ ] **网络优化**:已有批处理、限频和区块排序组件,但普通发送/移动路径尚未全面接入。 +- [ ] **Watchdog**:已有 UDP 心跳、监控、重启框架和真实 UDP 端到端测试,但尚未在长期运行环境中验证。 +- [ ] **网络优化**:批处理已接入实体同步广播路径、移动更新已限频,但普通发送路径尚未全面接入。 - [x] **CI/CD**:GitHub Actions 工作流,Linux/macOS/Windows 三平台构建、CMake 原生组件编译、pytest 测试和 Nuitka 打包。 ### 正在推进 / 待实现 @@ -50,9 +54,9 @@ PyMC 是一个用 Python 实现的 Minecraft Java 版 1.21.1 服务端原型, - [ ] 结构生成:村庄、废弃矿井、地牢、沉船、沙漠神殿、林地府邸、远古城市等。 - [ ] 完整洞穴系统:大型洞穴、繁茂洞穴、溶洞、地下水体、岩浆湖、深暗之域等。 - [ ] Nether、End 和多维度传送。 -- [ ] 完整光照、打雷闪电实体效果和客户端可见的区块更新细节。 -- [ ] 更完整的物品栏交互:拖拽、Shift-点击、合并、物品耐久、附魔、药水效果。 -- [ ] 更完整的生物系统:寻路、繁殖、掉落、远程攻击、村民、Boss、刷怪规则和 mob cap。 +- [ ] 完整光照和客户端可见的区块更新细节。 +- [ ] 更完整的物品栏交互:创造模式物品栏、铁砧/附魔台完整界面、药水效果。 +- [ ] 更完整的生物系统:完整 A* 寻路、繁殖、村民、Boss、刷怪规则和 mob cap。 - [ ] 正版登录验证、加密链路和更完整的权限模型。 - [ ] 更完整的选择器、NBT 参数和 datapack/function 支持。 @@ -79,13 +83,16 @@ PyMC 是一个用 Python 实现的 Minecraft Java 版 1.21.1 服务端原型, - Linear V2 `.linear` 区域文件读写,并支持从 Anvil `.mca` 自动转换 - 玩家位置、生命值、饱食度、经验、游戏模式等 JSON 存档 - 基础聊天、方块挖掘/放置、掉落物、经验球和简单生物实体 +- 玩家互相可见:实体生成/元数据/移动转发(原生 1.21.1 路径) +- 战斗系统:攻击生物、武器伤害表、生物死亡掉落与经验、远程生物标记 +- 物品耐久与基础附魔效果:耐久消耗、Unbreaking 减免、Sharpness 增伤 - 原版 Goal 思路的轻量生物 AI:随机游走、看向玩家、敌对追击、近战冷却 - 命令框架:大量命令注册、权限检查和别名;部分子命令仍未完成 - Mod/插件:仅支持 PYMC 原生 Python API -- Watchdog:UDP 心跳与自动重启框架(尚缺端到端验证) -- 网络优化:批处理、移动限频和区块排序组件(尚未全面接入) +- Watchdog:UDP 心跳与自动重启框架(含真实 UDP 端到端测试) +- 网络优化:实体同步广播走批处理、移动更新限频、区块排序 - 基础 `gamerule`:控制昼夜流动、天气循环、自然刷怪、自然回血和死亡自动重生 -- 天气客户端同步:Game Event 广播下雨/雷暴状态与强度,入服时同步当前天气 +- 天气客户端同步:Game Event 广播下雨/雷暴状态与强度,入服时同步当前天气;雷暴期间落雷并伤害附近实体 - 控制台和游戏内基础命令 - Web 管理台、权限组、OP、封禁和白名单