From b75ecce5de54ee652008091bf17b3ed9a5b5aa24 Mon Sep 17 00:00:00 2001 From: MeowOS Dev Date: Sun, 30 Aug 2026 13:42:41 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AD=97=E9=87=8D=E7=BB=93=E6=9E=84+family?= =?UTF-8?q?=E2=86=92=E5=AD=97=E9=87=8D=E5=AD=90=E8=8F=9C=E5=8D=95(agent-11?= =?UTF-8?q?1:=20fonts///,=20gen=5Ffont.py=20--weight,=20?= =?UTF-8?q?=E4=B8=A4=E7=BA=A7=E6=89=AB=E6=8F=8F,=20s=5Ffont=5Fdropdown?= =?UTF-8?q?=E5=AD=90=E8=8F=9C=E5=8D=95)=20+=20=E5=85=A8=E5=B1=8F=E5=B7=A6?= =?UTF-8?q?=E6=BB=91=E6=BB=91=E6=9D=A1=E4=BF=AE=E5=A4=8D(agent-112)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- APPS.md | 2 +- MEOW_APP_SDK.md | 4 +- README.md | 2 +- SYSTEM_SETTINGS.md | 6 +- TF_CARD_LAYOUT.md | 4 +- docs/MEOWOS_SPEC_REF.md | 35 +- font/gen/gen_font.py | 20 +- font/meow_font.h | 5 +- patch_v2/hello_app/hello | Bin 193244 -> 194044 bytes patch_v2/meow_launcherd/meow_font.h | 5 +- patch_v2/meow_launcherd/meow_launcherd | Bin 383804 -> 387484 bytes patch_v2/meow_launcherd/meow_launcherd.c | 365 +++++++++++++++----- patch_v2/meow_launcherd/meow_settings.c | 2 +- patch_v2/meow_launcherd/test_font_weight.py | 155 +++++++++ patch_v2/sdk/meow_ui_gfx.c | 33 +- patch_v2/sdk/meow_ui_input.c | 57 ++- 16 files changed, 531 insertions(+), 164 deletions(-) create mode 100644 patch_v2/meow_launcherd/test_font_weight.py diff --git a/APPS.md b/APPS.md index 2bede4d..a2c0eda 100644 --- a/APPS.md +++ b/APPS.md @@ -69,7 +69,7 @@ | `package` | — | 反域名权威标识(如 `os.meow.hello`),launcher 取之为 app_id;**目录名=package**。缺省回退目录名 `de->d_name`;两者存在且不同 → WARN | | `version` / `author` | — | 保留字段,v2 不解析 | | `fullscreen` | — | app 级全屏:`1`=进入全屏(状态栏**收合至提示线** + **保留左缘返回/顶部提示线/下滑通知中心**,见 MEOWOS_SPEC_REF §5.1);activity 级用它 `route..fullscreen`。**app.json `fullscreen` 字段此前未解析/已定未做 → 本次实现**(launcher 启动/切 activity 据声明预设 SDK 全屏,env `MEOW_FULLSCREEN`)[源:用户 2026-08-30] | -| `fonts` | — | 字库档位声明:`"full"` / `"gbk"` / `"common"`(app 需大字库时可声明 `"full"`,默认小字库 `common`≈4k;launcher 据此为该 app 加载大字库 `gbk`≈20k)。**注意**:与 `"fonts":[""]`(应用自带字库句柄数组)**同名二义**,见 MEOWOS_SPEC_REF §7 A-14 [源:用户 2026-08-30] | +| `fonts` | — | 字库档位声明:`"full"` / `"gbk"` / `"common"`(app 需大字库时可声明 `"full"`,默认小字库 `common`≈4k;launcher 据此为该 app 加载大字库 `gbk`≈20k,从已扫描的 `MeowOS/fonts///` 里按同 family(其次同 weight)选大字库,M2.6)。**注意**:与 `"fonts":[""]`(应用自带字库句柄数组)**同名二义**,见 MEOWOS_SPEC_REF §7 A-14 [源:用户 2026-08-30] | - 目录扫描深度 1 级:只枚举 `MeowAPPs/` 下的直接子目录 - 应用计数上限 **8**(超出忽略;单屏 8 行) diff --git a/MEOW_APP_SDK.md b/MEOW_APP_SDK.md index 11a7f50..1cd3ecc 100644 --- a/MEOW_APP_SDK.md +++ b/MEOW_APP_SDK.md @@ -323,11 +323,11 @@ patch_v2/meow_launcherd/meow_font.a # 复用(静态链接) ``` 上例 ``=`os.meow.hello`(= `apps//` 目录名 = `package` 字段值);exec 即 `<挂载点>/MeowAPPs//`。 -> **app 字体来源(M2.x 已落地)**:app 若**自带字库**(`load_handle`,见 §5.7.3,**未实现**)则用它;否则 SDK `meow_ui_gfx.c load_font()` **优先读 launcher 注入的环境变量** `MEOW_FONT_PNG`/`MEOW_FONT_IDX`(=系统 `font.file` 当前生效字体,绝对路径)/`MEOW_FONT_APP`(family),无 env 则回退卡默认 `MeowOS/fonts/default/font.png` → 固件。因此**app 未自带字库时跟随系统 `font.file`**,不再硬编码 `MeowAPPs/fonts`。 +> **app 字体来源(M2.x 已落地)**:app 若**自带字库**(`load_handle`,见 §5.7.3,**未实现**)则用它;否则 SDK `meow_ui_gfx.c load_font()` **优先读 launcher 注入的环境变量** `MEOW_FONT_PNG`/`MEOW_FONT_IDX`(=系统 `font.file` 当前生效字体,绝对路径)/`MEOW_FONT_APP`(family),无 env 则回退卡默认 `MeowOS/fonts/default/regular/font.png`(M2.6 字重结构)→ 固件。因此**app 未自带字库时跟随系统 `font.file`**,不再硬编码 `MeowAPPs/fonts`。 > > **app 多字体(M2.5x,`display.multi_font`)**:launcher 注入 `MEOW_MULTI_FONT=0/1` 与 6 类 `MEOW_FONT_CLS_<类>_PNG/IDX`(命中则覆盖全局;类值为空=跟随全局不注入)。SDK `meow_ui_gfx` 的 `meow_gfx_load_multifont()` 读 env → 调 `meow_font_config_multifont()`(同 png 去重、≤4 套上限、缺类回退全局)构建**逐字符分类路由**:`meow_font_drawtext/width_text/line_height` 按 `meow_font_class_of(cp)`(`MEOW_FCLS_CJK/_CJK_SYM/_NUM/_LATIN/_LATIN_SYM/_OTHER`)用对应字库取字形与度量;`meow_font_has_glyph(cp)` 可预判缺字。`display.multi_font=0`/无 env → 单字体(现状,零额外开销)。底层接口见 meow_font.h:`meow_font_load_slot`/`meow_font_unload_slot`/`meow_font_enable_multifont`/`meow_font_set_class_slot`/`meow_font_config_multifont`;`MEOW_MAX_SLOTS=5`。 > -> **app 字体档位(M2.5x,`app.json "fonts"` 声明 + `font.load_full`)**:launcher 按 `app.json "fonts":"common|gbk|full"` 与系统「加载大字库」开关(`font.load_full`,默认 0;开=强制 ≥gbk 档)算出**生效档**,注入 `MEOW_FONT_TIER=<0|1|2>`(0=**common**≈4k 常用 1=**gbk**≈20k+ 大 2=**full** 全/可选),并把 `MEOW_FONT_PNG/IDX` 指向该档字库绝对路径——`meow_font_effective_paths_tiered()` 在卡内 `MeowOS/fonts//` 按 `font.json` 的 `charset`(`common|gbk|full`)选库(gbk 请求接受 gbk/full;full 请求优先 full 再降级 gbk;无匹配回退全局 `font.file`)。SDK `meow_ui_gfx.c load_font()` 载入后,应用可经 `meow_font_tier()` 查询当前档、`meow_font_set_tier()` 切档(触发 `meow_font_reload_tier()` **真重载**:大字库切换先 unload 旧再 load 新,释放旧 atlas,防 GBK/Full 大库双驻留)。**判缺字**:`meow_font_has_glyph(cp)` 预判当前字库是否含该码位(common 小库下缺字→app 回退/提示,避免静默豆腐)。底层接口见 meow_font.h `meow_font_reload_tier`;`font/gen/gen_font.py --charset common|gbk|full` 按档生成 `font.png/font.idx/font.json`(`font.json` 写 `charset`+`glyph_count`)。 +> **app 字体档位(M2.5x,`app.json "fonts"` 声明 + `font.load_full`)**:launcher 按 `app.json "fonts":"common|gbk|full"` 与系统「加载大字库」开关(`font.load_full`,默认 0;开=强制 ≥gbk 档)算出**生效档**,注入 `MEOW_FONT_TIER=<0|1|2>`(0=**common**≈4k 常用 1=**gbk**≈20k+ 大 2=**full** 全/可选),并把 `MEOW_FONT_PNG/IDX` 指向该档字库绝对路径——`meow_font_effective_paths_tiered()` 在卡内 `MeowOS/fonts///` 按 `font.json` 的 `charset`(`common|gbk|full`)选库(gbk 请求接受 gbk/full;full 请求优先 full 再降级 gbk;**M2.6 优先同 family(其次同 weight)**;无匹配回退全局 `font.file`)。SDK `meow_ui_gfx.c load_font()` 载入后,应用可经 `meow_font_tier()` 查询当前档、`meow_font_set_tier()` 切档(触发 `meow_font_reload_tier()` **真重载**:大字库切换先 unload 旧再 load 新,释放旧 atlas,防 GBK/Full 大库双驻留)。**判缺字**:`meow_font_has_glyph(cp)` 预判当前字库是否含该码位(common 小库下缺字→app 回退/提示,避免静默豆腐)。底层接口见 meow_font.h `meow_font_reload_tier`;`font/gen/gen_font.py --charset common|gbk|full [--weight ]` 按档生成 `font.png/font.idx/font.json`(`font.json` 写 `weight`+`charset`+`glyph_count`)。 --- diff --git a/README.md b/README.md index c87c751..1b87617 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ ## 当前架构与组件(2026-08-30 快照) - **SDK 统一日志 + 通知(M2.52/53 已落地)**:`meow_log()` 按 app 分目录、每次启动新文件 `MeowOS/logs/apps//logs/_.log`,单文件 2MB 轮转、每 App 总量 50MB 删最旧;通知 API `meow_notify_*`(4 类型×每类型 4、媒体单例);**#5 SDK↔IPC 桥**(`meow_notify_ipc.c/.h`:app→launcher 中央存储,send/cancel 接入、回填 launcher `nid`,无 socket 降级不崩)。通知中心 UI / D-Bus 桥 / TF 转储为后续任务。 -- **TF 卡多字体库**:`MeowOS/fonts//`(`font.png`+`font.idx`+`font.json` 三件套),默认 `MeowOS/fonts/default`;`font.file` 设置键选默认套;SDK `load_font` **优先读 env `MEOW_FONT_PNG/IDX`**(launcher 每次 `launch_app` 注入),app 未自带字库时**跟随系统 `font.file`**;≤16 套卡内(防爆);§5.7 字体管理 + 应用字库(多句柄,**草案未实现**)。已部署 4 套(思源宋体 / MiSans / GoogleSans / Meslo,位深 4)。 +- **TF 卡多字体库(M2.6 字重结构)**:`MeowOS/fonts///`(`font.png`+`font.idx`+`font.json` 三件套),默认 `MeowOS/fonts/default/regular`;`font.file` 设置键选默认套(family→字重两级子菜单);SDK `load_font` **优先读 env `MEOW_FONT_PNG/IDX`**(launcher 每次 `launch_app` 注入),app 未自带字库时**跟随系统 `font.file`**;≤16 套卡内(防爆);§5.7 字体管理 + 应用字库(多句柄,**草案未实现**)。已部署 6 套(思源宋体 / MiSans / GoogleSans / Meslo / 思源黑体 / Ubuntu Mono,`/regular`,位深 4)。 - **包名/目录安卓化**:`app.json` `package`(反域名**权威 app_id**,==目录名,缺省回退目录名)→ 示例 `os.meow.hello`;目录 `MeowAPPs/os.meow.hello`;数据 `MeowData//{data,cache}`。 - **meow_svcd 服务管理器**(`patch_v2/meow_svcd/`,mipsel 静态 ~99KB,进固件不入卡):类 systemd/systemctl,由 supervisor(bootmenu/launcher)`fork/exec` 托管;读 TF `MeowOS/services.d/.conf`(目录式 `key=value`,未知键忽略/前向兼容);服务=svcd **独立子进程**(崩溃隔离:服务挂不影响 svcd/supervisor);事件触发 `boot`/`card-mount`/`wifi-up`(1s 轮询);`-f` 前台便于 supervisor `waitpid`;状态机 DISABLED/STOPPED/RUNNING/STOPPING/FAILED + CLI。**接入 supervisor 启动链未做**。 - **mDNS 方案A(已拍板)**:完整 **`mdnsd`**(994KB,mipsel 静态)放 TF `MeowOS/opt/mdnsd/mdnsd`,由 meow_svcd 托管(需 root/setcap `cap_net_bind_service,cap_net_raw` 绑 UDP5353+组播 224.0.0.251);SAResponder(885KB)因"单服务注册型"无法按名访问设备(`ingenic.local`)被排除。⚠️ 手机热点组播常在客户端间丢失 → mDNS 有风险,主机 DNS 兜底。**`MeowOpt` 已废弃并入 `MeowOS/opt`**(二进制归 MeowOS/opt,拔卡降级不崩)。 diff --git a/SYSTEM_SETTINGS.md b/SYSTEM_SETTINGS.md index 82df6dd..246199e 100644 --- a/SYSTEM_SETTINGS.md +++ b/SYSTEM_SETTINGS.md @@ -34,7 +34,7 @@ | | `input.hotkey_window_ms` | int | 2500 | 组合/序列窗口 | | | `input.touch_arm_delay_ms` | int | 700 | 触摸布防延迟(防幽灵) | | | `input.swipe_invert` | bool | false | 设置页滑动方向(0=手指上滑→往下翻;1=反向) | -| **字体/主题** | `font.file` | path | `MeowOS/fonts/default/font.png` | 字体图集 | +| **字体/主题** | `font.file` | path | `MeowOS/fonts/default/regular/font.png` | 字体图集(M2.6 指 `//font.png`,默认 `default/regular`;设置页「字体文件」行为 family→字重两级子菜单) | | | `display.multi_font` | int 0/1 | 0 | **多字体**:1=按字符类别逐字符路由;0=单字体(只走 `font.file`,零额外内存/性能) | | | `font.class_cjk` | path | *(空=跟全局)* | 多字体:CJK 表意+扩展 所用字体(family 相对路径) | | | `font.class_cjk_sym` | path | *(空=跟全局)* | 多字体:全角/中文标点 所用字体 | @@ -60,7 +60,7 @@ | | `network.bluetooth_enabled` | bool | false | 蓝牙开关(写 `hciconfig hci0 up/down`;默认关=少耗电) | | **系统** | `system.hostname` | string | `meowos` | 主机名(RFC1035 首标签;bootmenu 的 S89meow_svcd 开机读它 `sethostname`,缺省 `meowos`;供自研 mDNS 应答器 `meow_mdns` 公布 `.local`)[源:M2.54] | -> **字体尺寸标记(M2.5x,随「加载大字库」一起落地)**:字体/主题选择器**每个字体选项标注字库大小标记**,如 `default(common≈4k)` / `gbk≈20k` / `full`,直观标注码位/体积量级,让用户知道所选字库大小。对应 `MeowOS/fonts//font.json` 的 `charset`(`common|gbk|full`)+ `glyph_count`;档位枚举 `MEOW_FONT_TIER_COMMON`(默认/≈4k)/`GBK`(大/≈20k)/`FULL`(全/可选);`gen_font.py --charset common|gbk|full` 按档生成。定案见 MEOWOS_SPEC_REF §5.2「字体档位/大字库」与 §5.7.8 [源:用户 2026-08-30]。 +> **字体尺寸标记(M2.5x,随「加载大字库」一起落地)**:字体/主题选择器**每个字体选项标注库大小标记**,如 `MiSans Regular(common≈4k)` / `gbk≈20k` / `full`,直观标注码位/体积量级,让用户知道所选字库大小(M2.6 含字重:` ()`)。对应 `MeowOS/fonts///font.json` 的 `charset`(`common|gbk|full`)+ `glyph_count`;档位枚举 `MEOW_FONT_TIER_COMMON`(默认/≈4k)/`GBK`(大/≈20k)/`FULL`(全/可选);`gen_font.py --charset common|gbk|full [--weight ]` 按档生成。定案见 MEOWOS_SPEC_REF §5.2「字体档位/大字库」与 §5.7.8 [源:用户 2026-08-30]。 > 新增设置项时:在清单加一行 + 存储 schema + API 常量/枚举 + 实体 UI 控件 + web 面板控件(四端同步)。 @@ -116,7 +116,7 @@ int meow_settings_import(const char *path); /* 从 .conf 读入覆盖,校 - 开关(bool):`display.theme` 深浅、`notify.center_enabled`… - 滑条(int):亮度(**clamp ≥25**)、音量、息屏时长时间 - 选择器(enum):息屏模式、开机默认、主题、日志级别——选择器用子菜单/对话框,选项中文标签来自 `enum_label` - - 路径(str):字体、背景——文件浏览器选择(可先用内置几个预设,自定义文件选择后期) + - 路径(str):字体、背景——文件浏览器选择(可先用内置几个预设,自定义文件选择后期);**字体(M2.6 字重结构)用 family→字重两级子菜单**:点「字体文件」/多字体类别行 → 一级列扫描到的 family(多字体行首项「跟随全局」)→ 二级列该 family 的可用字重(regular/bold/italic…),点字重即选中(写 `font.file`/`font.class_*`= `//font.png` 卡根相对路径) - **所有控件只调 `meow_settings_set_*` / `get_*`**,绝不直接改文件;改完 `settings_save()`,UI 按 listener 重绘。保证与 web/CLI 一致。 - 权限/安全:本机信任,设置页不做鉴权。 diff --git a/TF_CARD_LAYOUT.md b/TF_CARD_LAYOUT.md index 006dd0c..824ce91 100644 --- a/TF_CARD_LAYOUT.md +++ b/TF_CARD_LAYOUT.md @@ -21,7 +21,7 @@ ├── backups/ │ └── settings/ │ └── setting.bak # 设置导出默认路径(SYSTEM_SETTINGS 一致) - ├── fonts// # 多字体库(每套一个子目录;font.file 选默认套) + ├── fonts/// # 多字体库(每 / 一套三件套;font.file 选默认套=default/regular) ├── logs/ # 统一日志:系统 meow_.log + 应用 apps//logs/_.log ├── services.d/ # 服务配置(meow_svcd 的 .conf;TF 源——与板载 /usr/data/meow/services.d 双源,同名板载优先)`[meow_svcd.md]` ├── opt/ # 外围可选工具(curl/socat/tmux/jq/rsync/nano/htop/ncdu/file/xxd…) @@ -52,7 +52,7 @@ - **移工具**:从 rootfs 移除 `MeowOS/opt/` 对应二进制;MeowOS 启动时若卡在则 PATH 前插 `/usr/data/mnt/sd_0/MeowOS/opt/bin:$PATH`(卡不在跳过)。用 `meowtool` 包装提供绝对路径引用。 - **框架零卡依赖审查**:确认 launcher/bootmenu 没有任何"卡必须在"的硬依赖(settings 在 /data、字体/应用/日志对卡可缺省/回退)。 -- **字库**:多字体库 `MeowOS/fonts//`(每套 `font.png/font.idx/font.json`,`font.file` 选默认套,缺省 `MeowOS/fonts/default/font.png`;无卡回退点阵,已有。[源:审计 2026-08-30])。 +- **字库**:多字体库 `MeowOS/fonts///`(每套 `font.png/font.idx/font.json`;`font.file` 选默认套 = `//font.png`,缺省 `MeowOS/fonts/default/regular/font.png`;无卡回退点阵,已有。[源:审计 2026-08-30])。 - **日志**:卡 `MeowOS/logs/`(系统日志 `meow_.log` + 应用日志 `apps//logs/_.log`;无卡内存环,已有。[源:审计 2026-08-30])。 - **设置**:板载 `/data/meow/settings.conf`(小文件跨卡保留),导出默认 `MeowOS/backups/settings/setting.bak`。 diff --git a/docs/MEOWOS_SPEC_REF.md b/docs/MEOWOS_SPEC_REF.md index 215e292..1fabc8f 100644 --- a/docs/MEOWOS_SPEC_REF.md +++ b/docs/MEOWOS_SPEC_REF.md @@ -26,7 +26,7 @@ └── MeowOS/ # MeowOS 专属(一切非必要文件) ├── backups/settings/setting.bak # 设置导出默认路径 ├── services.d/ # 服务配置(meow_svcd 的 .conf;TF 源,与板载 /usr/data/meow/services.d 双源,同名板载优先)`[meow_svcd.md]` - ├── fonts// # 多字体库(每套一个子目录,见 §5.2) + ├── fonts/// # 多字体库(每 / 一套三件套;见 §5.2) │ ├── font.png # 预渲染灰度 PNG(bit depth 4|8,gen/gen_font.py 产物) │ ├── font.idx # 索引(MFNI v2,gen/gen_font.py 产物) │ └── font.json # 元数据 + sha256 完整性校验(schema 见 §5.2) @@ -152,18 +152,18 @@ - **日/夜/自动**:SDK `meow_theme` 内置 `meow_theme_light/dark`;模式键 `display.theme_mode`(SYSTEM_SETTINGS 记为 `manual`/`auto`——**与 SDK 枚举 light/dark/auto 冲突**,见 §A);AUTO 判时段 `[SYSTEM_SETTINGS §1][MEOW_APP_SDK §8]` - 背景图系统:`display.bg_mode`(color/image)/`display.bg_dark_color`/`display.bg_light_color`/`display.bg_image`/`display.bg_image_dark`/`bg_image_light`/`display.bg_overlay_alpha`(0-255 默认 ~120);图片目录 **`MeowData/backgrounds/`**(480×720 约束);叠加层颜色随主题(深=黑叠/白=白叠)`[MAIN_MD3_PLAN §6][DEV_NOTES #12/#13]` - 主界面背景:深色用 background(可选色)、浅色用 surface(白) `[DEV_NOTES #13]` -- **TF 卡多字体库(M2.5x)**: - - 目录 **`<卡根>/MeowOS/fonts//`**(每套一个子目录),内含三件套:`font.png`(预渲染灰度 PNG,bit depth 4|8)+ `font.idx`(MFNI v2 索引),二者均由 `font/gen/gen_font.py` 生成;`font.json` 为元数据+完整性校验。**缺任一件 → 该套不进列表 + 日志**。 - - **font.json schema(定版)**:`family`(同目录名,信息用)/`name`(下拉显示名,缺则回退目录名)/`glyph_count`(信息用)/`charset`(`common|gbk|full`,字库档位,信息用+驱动按需加载,见「字体档位/大字库」)/`size_list`(信息用)/`bit_depth`(4|8,信息用)/`sha256_png`(font.png 的 sha256 低 64hex)/`sha256_idx`(font.idx 的 sha256)/`source`(可选)/`license`(可选)。校验失败**仅 WARN 不硬失败**(该套仍可选);缺 font.json 或解析不出 `name` → 跳过。 - - **加载优先级**:`font.file`(设置键,默认 `MeowOS/fonts/default/font.png`)指向的字体**存在且能 load → 用它**;否则回退卡默认 `MeowOS/fonts/default/font.png` → 固件 `/usr/share/meowos/font/font.png`。相对路径按卡根 `/usr/data/mnt/sd_0/` 解析。全失败 → 字库不可用,`ui_draw` 回退 5x7 点阵(系统不死)。 - - **默认字库目录**:默认字体统一放 **`<卡根>/MeowOS/fonts/default/`**(`font.png`+`font.idx`,可选 `font.json`),不再用 `MeowAPPs/fonts/font.png`;设备旧 `MeowAPPs/fonts/` **保留**(勿删,避免破坏老约定/已有文件),仅新引用一律指向 `MeowOS/fonts/default`。 +- **TF 卡多字体库(M2.5x)+ 字重结构(M2.6)**: + - 目录 **`<卡根>/MeowOS/fonts///`**(每 `/` 一套,如 `misans/regular`),内含三件套:`font.png`(预渲染灰度 PNG,bit depth 4|8)+ `font.idx`(MFNI v2 索引),二者均由 `font/gen/gen_font.py` 生成;`font.json` 为元数据+完整性校验。**缺任一件 → 该套不进列表 + 日志**。 + - **font.json schema(定版)**:`family`(同目录名,信息用)/`name`(下拉显示名,缺则回退目录名)/`weight`(`regular|bold|italic|…`,字重 slug,缺省 `regular`;对应 `//` 目录第二级)/`glyph_count`(信息用)/`charset`(`common|gbk|full`,字库档位,信息用+驱动按需加载,见「字体档位/大字库」)/`size_list`(信息用)/`bit_depth`(4|8,信息用)/`sha256_png`(font.png 的 sha256 低 64hex)/`sha256_idx`(font.idx 的 sha256)/`source`(可选)/`license`(可选)。校验失败**仅 WARN 不硬失败**(该套仍可选);缺 font.json 或解析不出 `name` → 跳过。 + - **加载优先级**:`font.file`(设置键,默认 `MeowOS/fonts/default/regular/font.png`)指向的字体**存在且能 load → 用它**;否则回退卡默认 `MeowOS/fonts/default/regular/font.png` → 固件 `/usr/share/meowos/font/font.png`。相对路径按卡根 `/usr/data/mnt/sd_0/` 解析。全失败 → 字库不可用,`ui_draw` 回退 5x7 点阵(系统不死)。 + - **默认字库目录**:默认字体统一放 **`<卡根>/MeowOS/fonts/default/regular/`**(`font.png`+`font.idx`,可选 `font.json`),不再用 `MeowAPPs/fonts/font.png`;设备旧 `MeowAPPs/fonts/` 及旧 `MeowOS/fonts//`(无 weight 级)**保留**(勿删,避免破坏老约定/已有文件),仅新引用一律指向 `MeowOS/fonts/default/regular`。 - **`font.file` 变更即 unload+reload 生效**(设置页回调);拔卡 → 回退固件内置。 - - **preset 动态化**:启动/进设置页扫描一次 `MeowOS/fonts/*/`,重建「字体文件」下拉(默认字体 + ≤16 套卡内字体;上限防爆)。扫描仅此二时机,勿放热路径。 - - **MeowPanel 预留**:`meow_font_import_zip()`/`meow_font_export_zip()` 为 TODO 声明(不实现),供 MeowPanel 后续接入(`.zip` 导入校验→解压到 `MeowOS/fonts//`、导出打包)。 + - **preset 动态化(两级扫描)**:启动/进设置页扫描一次 `MeowOS/fonts///`,重建「字体文件」下拉(默认字体 + ≤16 套卡内 /;上限防爆)。扫描仅此二时机,勿放热路径。**存量卡片迁移**:旧版扫 `MeowOS/fonts//`(图片直接在该层);迁移到 `/regular/` 后,旧 `/` 下不再有三件套 → 新扫默认按两级找,故若未重做成 `//` 则扫不到(需先用 mv 迁成 `//` 再重扫)。 + - **MeowPanel 预留**:`meow_font_import_zip()`/`meow_font_export_zip()` 为 TODO 声明(不实现),供 MeowPanel 后续接入(`.zip` 导入校验→解压到 `MeowOS/fonts///`、导出打包)。 - **多字体(M2.5x,`display.multi_font`)**:按字符类别(CJK/CJK_SYM/NUM/LATIN/LATIN_SYM/OTHER)逐字符路由,每类可各选一套字库(`font.class_*`,默认空=跟随全局 `font.file`);同 family 去重、同时装载不同字体 ≤4 套(超出 WARN「过多不同字体会增内存」并截断);开关关 = 单字体(现状)。详见 §5.7.7「多字体」。 - **字体档位 / 大字库(M2.5x,本次实现)**:抽象出**字库大小档位**,让系统/应用/设置页都知道选的是多大字库 `[源:用户 2026-08-30]`。 - 档位枚举:`MEOW_FONT_TIER_COMMON`(**默认 / ≈4k** 码位)/ `MEOW_FONT_TIER_GBK`(**大 / ≈20k+**)/ `MEOW_FONT_TIER_FULL`(**全 / 可选**,码位/体积最大)。 - - `font/gen/gen_font.py` `--charset common|gbk|full` 按档生成 `font.png/font.idx/font.json`(**已实现**,现行仅 `--extra` 思路升级为**档位选择**);每个 `MeowOS/fonts//font.json` 标 `charset` + `glyph_count`(覆盖声明/信息用,launcher/settings 据此标注与按需装载)。 + - `font/gen/gen_font.py` `--charset common|gbk|full [--weight ]` 按档生成 `font.png/font.idx/font.json`(**已实现**,现行仅 `--extra` 思路升级为**档位选择**;M2.6 加 `--weight` 写 `font.json.weight`,缺省 `regular`);每个 `MeowOS/fonts///font.json` 标 `weight`+`charset` + `glyph_count`(覆盖声明/信息用,launcher/settings 据此标注与按需装载)。 - **默认用小字库(`common`≈4k)**;仅当 app 声明需大字库(`app.json "fonts":"full"` 或档位)才为该 app 加载大字库(`gbk`≈20k+),见 §5.7.8。 - **系统设置「加载大字库」开关**(`font.load_full`,强制全系统用大字库),见 SYSTEM_SETTINGS §1;**每个字体选项标注字库大小标记**(如 `default(common≈4k)` / `gbk≈20k` / `full`),让用户知道所选字库量级。 - 判缺字:SDK `meow_font_has_glyph(cp)` 预判当前字库是否含该码位(缺字 → app 回退/提示)。 @@ -205,19 +205,20 @@ > **app 未自带字库 → 跟随系统 `font.file`(M2.x 已落地)**:launcher 每次 `launch_app` 前把「当前生效字体」注入为环境变量 `MEOW_FONT_PNG`/`MEOW_FONT_IDX`(绝对路径,可选 `MEOW_FONT_APP=`);SDK `meow_ui_gfx.c load_font()` **优先读 env**,无 env 则回退卡默认 `MeowOS/fonts/default` → 固件。§5.7.3 的 `load_handle`(app 自带字库)**未实现**,故当前 app 只能跟随系统字体;一旦实现自带字库,其加载优先级应高于 env。 - **5.7.1 字体管理器(launcher 侧)= 可用字库唯一权威来源** - - 唯一维护并扫描 `MeowOS/fonts//`(+默认),产出「字体列表」(family slug / 显示名 / glyph_count / size_list / bit_depth)。**SDK 不自行发现字库**,一律经本接口取 launcher 扫描结果。 - - 扫描与校验规则沿用 §5.2:三件套 `font.png/font.idx/font.json` **缺任一件 → 该套跳过 + 日志**;`font.json` 解析 `name`(缺回退目录名)/`glyph_count`/`size_list`/`bit_depth`;`sha256_png/sha256_idx` 仅 **WARN** 不硬失败(该套仍可选)。 + - 唯一维护并扫描 `MeowOS/fonts///`(+默认),产出「字体列表」(family slug / weight slug / 显示名 / glyph_count / size_list / bit_depth)。**SDK 不自行发现字库**,一律经本接口取 launcher 扫描结果。 + - 扫描与校验规则沿用 §5.2:三件套 `font.png/font.idx/font.json` **缺任一件 → 该套跳过 + 日志**;`font.json` 解析 `name`(缺回退目录名)/`weight`(缺省 `regular`)/`glyph_count`/`size_list`/`bit_depth`;`sha256_png/sha256_idx` 仅 **WARN** 不硬失败(该套仍可选)。 - 列表上限沿用 `FONT_PRESETS_MAX = 17`(1 默认 + ≤16 卡内套装,防爆);顺序 = 默认(0) + 扫描顺序。扫描时机不变(启动 / 进设置页),**勿放热路径** `[源:agent-79 实现]`。 - 权威列表数据模型(SDK 侧快照,枚举时填充): ```c typedef struct meow_font_info { - char family[64]; /* family slug = MeowOS/fonts// 目录名 */ + char family[64]; /* family slug = MeowOS/fonts// 第一级目录名 */ char name[64]; /* font.json "name",缺则回退 family */ + char weight[32]; /* font.json "weight"(regular|bold|italic|…),缺省 "regular" */ int glyph_count; /* font.json "glyph_count",信息用 */ int size_list[16]; /* font.json "size_list"(原生面字号,0 结束) */ int size_count; /* 有效字号数 */ int bit_depth; /* 4 | 8 */ - char path_png[320]; /* 系统库:相对卡根 MeowOS/fonts//font.png */ + char path_png[320]; /* 系统库:相对卡根 MeowOS/fonts///font.png */ } meow_font_info; ``` - **5.7.2 应用可读 TF 卡字体列表(统一规范接口,app 面向)** `[源:agent-79 实现][源:meow_font.h]` @@ -230,7 +231,7 @@ ``` - 语义:`id` = 列表序号(§5.7.1 快照);`0` = **跟随系统默认**(用户 `font.file` 所选,app 会话不覆盖);`>0` = **app 会话内固定用该套**(覆盖 `font.file` 至 app 结束)。成功 0,越界/加载失败返回负值。 - **列表快照是临时的**:launcher 仅启动/进设置页重扫,期间拔卡或改卡内字库不刷新;app 应**每次会话重新枚举**、按 `family` 持久化,勿缓存数值 id。 - - 覆盖范围:系统库 `MeowOS/fonts//` 与默认(含固件 `/usr/share/meowos/font` 回退)都反映在列表里;app 侧「选用已有字库」**只用本接口,不直接拼路径**。 + - 覆盖范围:系统库 `MeowOS/fonts///` 与默认(含固件 `/usr/share/meowos/font` 回退)都反映在列表里;app 侧「选用已有字库」**只用本接口,不直接拼路径**。 - **5.7.3 应用自带字库(按 handle 加载)** `[源:meow_font.h]` - 目录:`MeowAPPs//fonts//{font.png,font.idx,font.json}`;`` = `app.json.package`(反域名 app_id,见 §5.5),`` = 应用自设名字(如 `lyrics`/`reader`)。 - `app.json` 声明(**可选**):`"fonts": ["lyrics","reader"]`。作用 = MeowPanel 打包校验 / launcher 装包校验 / SDK 提供取证;**不声明也可运行时按 handle 加载**。 @@ -287,15 +288,15 @@ - 说明:句柄状态为 app 进程内**全局**;同一屏需混排时,推荐每段绘制前显式 `meow_ui_use_font`,或全部走 `*_h` 显式传 handle,避免依赖上次绘制遗留的句柄状态。 - **5.7.6 MeowPanel 上传 / 导出(.zip,预留)** `[源:meow_font.h]` - 复用已声明的 `meow_font_import_zip(zip_path)` / `meow_font_export_zip(family,out_zip)`(§5.2 已列为 TODO,未实现)。 - - **系统字库导入**:`.zip` 内含 `font.png+font.idx+font.json` 三件套;校验三件套就绪 + `font.json` 可解析;sha256 沿用 `font.json` 约定(建议与运行时同口径 = **WARN**,仅缺件/不可解析硬失败);`family` 取自 `font.json.family` 或 zip 名;解压到 `MeowOS/fonts//`;**覆盖冲突需先确认**;导入后应触发 launcher 重扫(刷新 §5.7.1 列表)。 + - **系统字库导入**:`.zip` 内含 `font.png+font.idx+font.json` 三件套;校验三件套就绪 + `font.json` 可解析;sha256 沿用 `font.json` 约定(建议与运行时同口径 = **WARN**,仅缺件/不可解析硬失败);`family`/`weight` 取自 `font.json.family`/`font.json.weight`(缺省 `regular`)或 zip 名;解压到 `MeowOS/fonts///`;**覆盖冲突需先确认**;导入后应触发 launcher 重扫(刷新 §5.7.1 列表)。 - **应用字库导入**:目标 `MeowAPPs//fonts//`,与 `app.json "fonts"` 声明对齐,校验同上。 - - **导出**:系统库把 `MeowOS/fonts//` 三件套打包;应用库把 `MeowAPPs//fonts//` 打包。 + - **导出**:系统库把 `MeowOS/fonts///` 三件套打包;应用库把 `MeowAPPs//fonts//` 打包。 - 约定:`.zip` 布局与校验沿用 `font.json` schema(§5.2);导入/导出后的一致性(列表刷新、应用声明同步)归 MeowPanel + launcher 协作,本小节仅列接口语义。 - **5.7.7 多字体(按字符类别逐字符路由,`display.multi_font`,M2.5x 新增)** `[源:meow_font.h][源:MEOWOS_SPEC_REF §5.2/§5.5]` - **背景**:一款字体难兼顾中文(大图集、字形全)与拉丁/数字(干净、省内存)。多字体让**不同字符类别各用一套字库**,按 codepoint 逐字符路由取字形。 - **设置键**(launcher 读,SDK 经 env 读同一映射): - `display.multi_font`(int **0/1,默认 0=单字体**):1=按字符类别逐字符路由;0=只走 `font.file`(现状,零额外内存/性能开销)。 - - 6 个类别字体(SET_STR,值 = 字体 family 相对路径,**默认空 = 跟随全局 `font.file`**):`font.class_cjk`(CJK 表意+扩展)、`font.class_cjk_sym`(全角/中文标点)、`font.class_num`(0-9)、`font.class_latin`(A-Za-z)、`font.class_latin_sym`(半角标点)、`font.class_other`(其他)。 + - 6 个类别字体(SET_STR,值 = 字体 `/` 相对路径(如 `misans/bold`,M2.6);**默认空 = 跟随全局 `font.file`**):`font.class_cjk`(CJK 表意+扩展)、`font.class_cjk_sym`(全角/中文标点)、`font.class_num`(0-9)、`font.class_latin`(A-Za-z)、`font.class_latin_sym`(半角标点)、`font.class_other`(其他)。 - **字符分类器**(`meow_font_class_of(cp)`,按 codepoint):`MEOW_FCLS_CJK`/`_CJK_SYM`/`_NUM`/`_LATIN`/`_LATIN_SYM`/`_OTHER`。规则(ASCII 优先 + Unicode 区间):0x30-39→NUM、0x41-5A/61-7A→LATIN、<0x80(其余)→LATIN_SYM;0x3000-303F/0xFF00-FFEF/0x2014/0x2018-201D/0x2026/0x00B7→CJK_SYM;CJK 表意+扩展+兼容表意区(0x3400-4DBF/4E00-9FFF/20000-2FA1F…)→CJK;其余(假名/韩文/其他文字/扩展区)→OTHER。 - **逐字符路由**:`meow_font_drawtext`/`_outline`/`width_text`/`line_height`/`ascent`/`has_size` 在 multi_font 开启时**逐字符分类 → 用类别对应槽的字库取字形与度量**(宽度/行高按该字体);缺某类字体/槽未载 → **回退全局**(slot0);该字符其字体无字形 → **豆腐缺字**(可经 `meow_font_has_glyph(cp)` 预判)。开关关 → 一律 slot0,与单字体一致。 - **SDK 接口**:`meow_font_load_slot(slot,png,idx)`/`meow_font_unload_slot(slot)`/`meow_font_enable_multifont(on)`/`meow_font_set_class_slot(cls,slot)`/`meow_font_config_multifont(on,global_png,global_idx,cfg[],&distinct,&truncated)`;`MEOW_MAX_SLOTS=5`(slot0=全局 + ≤4 类别)。`meow_font_config_multifont` 统一做**同 png 去重**(含与全局相同 → follow slot0)与**≤4 套上限**(超出 → 置 `*truncated=1`,调用方 WARN「过多不同字体会增内存」,已装载者保留、新类别回退全局)。 diff --git a/font/gen/gen_font.py b/font/gen/gen_font.py index b3dd6cf..ac92d24 100644 --- a/font/gen/gen_font.py +++ b/font/gen/gen_font.py @@ -281,8 +281,8 @@ def write_idx(path, bit_depth, faces, glyph_tabs): # -------------------------------------------------------------------------- # font.json(元数据 + 完整性校验;schema 见 docs/MEOWOS_SPEC_REF.md §5.2) # -------------------------------------------------------------------------- -def write_font_json(out_dir, name, family, tier, glyph_count, sizes, bitdepth, - png_path, idx_path): +def write_font_json(out_dir, name, family, weight, tier, glyph_count, sizes, bitdepth, + png_path, idx_path, source="", license_=""): def sha256(path): h = hashlib.sha256() with open(path, "rb") as f: @@ -292,6 +292,7 @@ def write_font_json(out_dir, name, family, tier, glyph_count, sizes, bitdepth, meta = { "family": family or name, # 同目录名(信息用;扫描端以目录名为 family) "name": name, # 下拉显示名(缺则回退目录名) + "weight": weight or "regular", # 字重 slug(regular|bold|italic|…;默认 regular) "glyph_count": glyph_count, # 信息用 "charset": tier, # common|gbk|full(档位;驱动按需加载) "size_list": sizes, # 原生面字号 @@ -299,6 +300,8 @@ def write_font_json(out_dir, name, family, tier, glyph_count, sizes, bitdepth, "sha256_png": sha256(png_path), # font.png 校验(扫描端仅 WARN) "sha256_idx": sha256(idx_path), # font.idx 校验(扫描端仅 WARN) } + if source: meta["source"] = source # 可选:来源(如 "MiSans Regular (Xiaomi)") + if license_: meta["license"] = license_ # 可选:许可(如 "SIL Open Font License 1.1") jpath = os.path.join(out_dir, "font.json") with open(jpath, "w", encoding="utf-8") as f: json.dump(meta, f, ensure_ascii=False, indent=2) @@ -315,10 +318,14 @@ def main(): ap.add_argument("--out", required=True) ap.add_argument("--name", default="font") ap.add_argument("--family", default="", help="font.json family(缺省 = --name;信息用)") + ap.add_argument("--weight", default="regular", + help="字重 slug(regular|bold|italic|…,缺省 regular;写进 font.json weight)") ap.add_argument("--charset", default="common", choices=CHARSET_TIERS, help="字体档位:common≈4k / gbk≈20k+ / full(可选,默认不推)") ap.add_argument("--bitdepth", type=int, default=4, choices=(4, 8)) ap.add_argument("--extra", default="") + ap.add_argument("--source", default="", help="可选:font.json source 来源说明") + ap.add_argument("--license", default="", help="可选:font.json license 许可") args = ap.parse_args() os.makedirs(args.out, exist_ok=True) @@ -393,15 +400,16 @@ def main(): idx_path = os.path.join(args.out, f"{args.name}.idx") idx_size = write_idx(idx_path, args.bitdepth, face_meta, [p[3] for p in all_planes]) - # ---- font.json(写入 charset + glyph_count + sha256,供扫描端标注档位/大小标记) ---- - jpath = write_font_json(args.out, args.name, args.family, tier, charset_glyph_count(cps), - sizes, args.bitdepth, png_path, idx_path) + # ---- font.json(写入 weight + charset + glyph_count + sha256,供扫描端标注档位/大小标记) ---- + jpath = write_font_json(args.out, args.name, args.family, args.weight, tier, charset_glyph_count(cps), + sizes, args.bitdepth, png_path, idx_path, + args.source, args.license) png_size = os.path.getsize(png_path) total = png_size + idx_size print(f"\nfont.png {png_size} B") print(f"font.idx {idx_size} B") - print(f"font.json {os.path.getsize(jpath)} B (charset={tier}, glyph_count={len(cps)})") + print(f"font.json {os.path.getsize(jpath)} B (charset={tier}, weight={args.weight or 'regular'}, glyph_count={len(cps)})") print(f"合计 {total} B = {total/1024:.1f} KiB = {total/1048576:.2f} MiB (预算 2MiB)") diff --git a/font/meow_font.h b/font/meow_font.h index 11139ce..eb6b8ff 100644 --- a/font/meow_font.h +++ b/font/meow_font.h @@ -109,8 +109,9 @@ int meow_font_config_multifont(int on, /* ---- MeowPanel 预留:TF 卡字体库 .zip 导入/导出(TODO,未实现)---- * 当前仅声明占位,供 MeowPanel 后续接入;不实现、不接 zip 库。 * 调用方约定(待实现):导入=校验 .zip 内含 font.png+font.idx+font.json 三件套, - * 校验通过后解压到 TF 卡 MeowOS/fonts//(family 取自 font.json 的 family 或 zip 名, - * 冲突时覆盖需先确认);导出=把 MeowOS/fonts// 三件套打包为 。 + * 校验通过后解压到 TF 卡 MeowOS/fonts///(family/weight 取自 font.json 的 + * family/weight 或 zip 名,缺省 weight=regular;冲突时覆盖需先确认);导出=把 + * MeowOS/fonts/// 三件套打包为 。 * 目录布局与 font.json schema 见 docs/MEOWOS_SPEC_REF.md §1.2/§5.2。 * 返回码:MEOW_OK=0 成功,负值错误码(沿用本模块失败负值约定)。 */ int meow_font_import_zip(const char *zip_path); /* TODO:MeowPanel */ diff --git a/patch_v2/hello_app/hello b/patch_v2/hello_app/hello index d770cf4084d14a630049c98fb393f3579bcf5c52..4ed53877e30e080cb2e6e412642b6ec0b25a6668 100755 GIT binary patch delta 46280 zcmce@jcW;RBJ5(mI0gSQ6Usl?OOx;(;7+oe{7~}Ylu|s&KT6E=IZp`h@?43n-u51E=@IC9OJWE20tGk#*J1I%f69V>30|f;P&4nwi}lP zbmZUB6L9T+NX#E?LQrQW;kg&9?vz+GVC^}{kClShymJy;xNVW;wwQtY9A4~Vyca8U zda=W}atC;^b=P~bEr2p$HDF$*7i+!Ai!ofKxX$2t-?kooyGvEOYf=4iFLnvA0`L%E z-ZXDku?hI+ufFczeD(9S<@8*%L95fz=*14WwP(T^c*1$Kt76G$v>TN#;hN~tL7v{Z zzXubk{?%Gnl*J#b*BMRi$>m4~W_h zFLpnW5x6`VI&=Q&XDZu;`V(=rp{xM}PvLT--7-AS2HyPZf44DcHlof^^i_yDtIy8{ z0lfoafC{K$rUwBT_m}iK77(ZMvw+FCYEgF3Xb%Po@SKU~izqwrmlwN$s{vO#F8|Bh z#$>(4(?Uj=Si?vYn}=&5t|B~N(ys<8!?jk&&&K`i5!;5iF7v7bnCcO52yy~v?YK85 z;=vcsfDwTH$(&^XrUK>xZtu(4JirdXTEK~^oHYW@1KbU`5AZ0UwLfPU0S^xV9Y4m3 z(mBfnJT;KBnScd@IIH$!Rjd^^>wxgTk+WTZIe-TN&j6kRG-Yyj32^&OoLRavb^uTY zJPeotIB_s%g@Dm6&ME+{LqHGke!yLT1BP;T9B^F@XJ&uK&JN=&8t~xFoQ?3WVyti^ zMg)ZA7S3t_O}U(H0h9sT02hws>?~jhprr>o%;PK>@F-v&V8l3#2(Tlcv(EUW0W1JC1uzyeg|pNu++^Tp1mHZtLcnE!6@U$Z%K#ez*8*+_YyxZp zYy&(9co?u_DrXk}kC$R(*I^x)4#@x>2h0V$09XV#aRz4#0q?&P^Z+e0Ijd^LO#yBW z5~2(oQUyS>1tS2A2Fxu7r+~X>gF!&kU7XzyI1g|&;8DOW%t8nCGnDg)dFXbFU> z0A;`nfEj?6xnK-%-dtYAX5wZy5Y>Rzd!ReO9Kh{>1%L+t56=f!4P2k8qVB+ z)lWjwfTd4y)&W>ig&R{SL=G4M*aVmicmOa5@DyMnV9nDIIp9&iT0rYM7%3oI4+#N= zJOf4mGXPl_Bm!s!9PlPY4Y;fg0|M*-tOab?3tIxLTJ{!ahj7ylcouNxKIkkQx(Ad2 z2fPEx05-kLSt;OIz-qvm`ymm)FOl{TPe^nm++SKpBwrWGvw@Mh2Jzm;t!@7#IU={0ce; zOm0Vez@vai0dr5n5dj_sjEIB{0j2`xehr2qG5_b`W+D)+fU^M)16ET-z}0}(Zy;*G z3#TzcK=XHC2rw7W6ov9LkQ87hU?yPn_fQ#N1>ihD_7esMXaU>~IPW(YBcSPb&it#Q zVV!?M=YVa1F2I9;1%R2CAR@p#jwlImq9n0azz{FQSAYiq&j41N5&85&2fh+Z06Yko z1L*cc!~|&WF0pFB2EcWICVz?T0?YucI*6NjxM>G$1iT1%0nicyo45`E9NUm#RK@1u zX7+K65bzXWD`4^oj1X`p;2FTxfF>B?K)e2JJ3Fb{A9;BLT~fQ4Tn#sq8xYy><6 z*aleCj+heA4cGxV6R~Kt4RpS#l2|5gY7jsc0$v2XAFv1kWG&!Az(znb0?U1X0|46r z3jr?yR#U)f2VuZuz%xHdY$D*i4n)R)y8x>Jtq5|P01FZ59tE@@cx7=IP}P4Bsp2L9 zQEU$2GQc8w{sVz3U@qWlz-quIz%zeJ>;PcuUx<(aGdiIv8H5270NWYDP{34ba(^$j9WbH?ViZ8x;>9`umjRlbs2_sZ2JiqP#{$4hfHR$J0*mO0*b<1tfU5xq zL?Vm?Yy#X37!ifw2yh+XDZqVzmjLsk5!J=Rb^ucWF9GHPcElj26~B&(j%zjWo}}TW*acjz;`}X961ztP|Da>ICo z_$W76wB?(;;mX)qJVk|$SfuUrK!s5^CfG@};G@GQ$cwu=Gt)S*zOn%*bphXs_Vh=% z5x{l8tf@8q5v~w8Q#B?fA@FC#g`FI;REs&I?R>RZIXc*X;!;d9AX#ZZf~d?7_hU4k z!@v}Zk48uF?c&_%I9?$F$0S*guD~`^?=%6m3cO%aHJBTOD+tJ=_Tt$I-ageRFh435 zk4X$$`xv~1-iD;shN9fZ#hx)SlB-U9IVQ}%s1CCSSjhQ)jRPwlWE19*u#JuDmAp#V zLvBFCh-Y~NF-tW{QDe0z9vjy)L}0TBjG;l|&5hCmv3_jQq~s?gc9u#f1|%3FJcZJT zHCIGK;<^Z&44ffCg8tr^Y{04Z;b8|d@biQ%FC6L|n3vQi?^#S}>LVwhOHI{O2Y9tD zil~p(z_p5%dBHcep~O%OmFz~zLEwzu33mv%cHroq{s^7|u0x#63+{Qzg91s`-v>f> zgAZYw5G<_Y%u@0OkvPsdGU9nSXlf4wHv~weD$u}x%hhZw11`b?N5-%gxK!XuMfUVy z@9lV6EnXf+rt!hJ@Lstuz=sia4Benk?3lV??GZdbc3AF34N&;m>1wo;A+J5{3L!+tjv#+TrHwGKa#hK_wW$XDo*DodM9r~Za@SU2Ky3~ z0cQA2(Qkb4qzk|kH}pp(g($IX#{xwN{1L7KxK!YbdNk%`z~us`@&Uyge3N?IC~Fn# z$A|a2_&;hKMh#4#@!_G>uU=7~6>Vvg)gb;F9~WkM4ZfQ&_#;T$t&G=1dO>0$`v(?0 zea;Yr_oFCc_Z0?-QQCzK*exC{h~XV#YeAHM?i*M;(C^jL=mM%85a$cxypO+&Y>Mbt z7%oz8HT5alkEx8x*m9`;k-EvleybIDx~D&arNFg`;#-45EeEhjs(3I1Sc{Sx@yM-F zee&MZb*MW~YS%{XfY0z4#$n(tijQs$mNE~D)3@5gW`2N>L?=mOveHKGLlH9}Ce->b z-DZF$=@g)-MvR+~#4m|O__tPUosc9&9}`C=B=X&Y-xhb18)1a!jLO7A6L2IG`csDp z+;-pwXef2Il>&E06yFx!%Y;BfH3EI6(=b<~)Czo~I6o=4S1X?O;VDmVPc`-d7eXP4 zuuTc}ZpTxhIB{F7l=+pod|M396TK#e^LgU>iLw3zPQo2n(dH^ww+!3E3bABjoOhdq zoCA^Z-3MGUR&6)gw5TpJd7lF2pg1`(E};#Jbs;g36JW`Gmami=kcPpdjNM?gH}W|o z^PGTGkyjQXT$4;;jXqdxfuld-n6{g8H!*oqBpmy_lj6M3n7x>bX18daWa^dRi`)>^ z^`KA9XxG^&KAIFIMfiyyCq;%9AzHw2)jt{kTCt0qEqYCk?>YNAWQPdvAxYYd)`%&S zqeA@=9qdzEY0F&$N)Cy~Cx=I#MTy={^`kW1+E8i^6niFzh01{lOZ0}s5p7$m#rKn= zA`?Qp8mjh84Xx04PN;~vJq$s?^|#0NEDh_bq*5otsz9Y`ao6oh{E&F^_9X9i8w4oM z-5xI5Z#VOq;``gwlfP#D8&M4v*e>9QD87eA4Ew8a3o3kBTDVS!I}z_!cu#Cb*&9FbSpNtIlV>9lt}Ly z6dhLWByWnjXJO*igCud%?ig$9lvqAdteg_go5a>BNj)?Bd8urog4)?x)XD{}P@J0* z5BC~6HHpJ2rpEH)qIha>*rl7UsGC@*#TM9{B_5p`$?q4NP_0(HGd0$Gbq+!}@p68! zw+ULv6a0=SZ_{uj+JxM))T;%S~nsmn=|>}j9v8iQmfmEn(YwB?@XfkPE_``rp$Dpm4W z;Zsq!9r!#CycPE&fKMHZtewO}Qc+Kz*?5l57o&>Yim6J*ZEKXt2sFC2YG59L$}*x0d@eP{ABk!$aF>8XZimD|d-`r_>R@(^ zm{T0)a{%RAV#K4xk-leeYmGI*|3O0z6S4p^@ub>38hVb?in2zOC6h0$%EZ$lJQbk_ z`lD|1D2HG*U9}Wb{vj7Q7gh40NcKWGiCUD+*2*ICp5?2gm0k@dJX5(F*$X@J>`+VH+x}wSjr9!d2`ZM_D_{RCXgT;>q8Rlq%K4A1Tfs|E#l%4@<&) zDBE$|E`BI+`WE1}5%KF5*g<&JJUrz(OxoHBbN66DrLh|2`%qp%L}7r&bRcoGqHKWE zq-{g+Oj_Ir+&bWBc!t5!{c+%T0bi@(6ZC#W%QRn~ODM~U7kj3KO^HBKq$1v=`6+Z~ z=!ZxTK-pT9=>}q@XqoW2!0!g$s*zR=kGvBlV2%Sn0t-7>=`e}xf~XWq$H-|qBPgJO zGy>NOTn_H(k6P~n?n0V)pwwwOh1n+b>R}JGebm2 zsmUjUaxod=kJ1>QLfobf5;4;weHP-j^hS|2J*;XiZrg4&u}138VjZKrCPT?6e} zF%AM>1N;DLGf|6-AUbvm_}#$I)cEVt5tT6{b>u7vfy#;k+>$2I?&=t$Q8;_B_;R{4 zW(02MWnbMV3AzaQwb{Zx!yZ$E+vuSt&FAE5I|-^nd8FAxMac|%)d8wK%*2)fjZs-W z)pv@T4>zd-M_JdXE&-nme1_JhYhew6*_2*`CuLDqY8~*@HT}^jUBI;sHz9FL7|GRT zI3&(O6eiq!bq7Rf9`FN3UzyE>s{t+#IF%VZ6K)-FHNdH2*Kw5c+6^383jI;NebJ+! zi))ZaQPF=4UVo_7w2EhmAaDnDoH`PuxC+La7%~=yB}GJ1;;bnDiVvcSnZUK>i_3S~ zeJPK2Y61*j@R?Df{Z3O=Eik6rudqtPcLSFJ96BY+U4EIeZ3V#ZCOrOV2$XoU6kh3& zaFm3r0PcROgg?Sv0PYNMs$h%fYyj|V>J@k3 zX()Lpt3{d4usYAF%}n680N;Rn3?#vDMOHj6Ls`ZhVt84M?-tx97n|4xv7~>vs4g@6 zomqaV)4JkPrzKjfD$BCx7TIJA+t3oi+$|F0nMLI`xWg5)7n3rVO}bg`_L=y(Y)H?x zb<7{hRQZs^zAxE>;c%r=^nEQvI z?)ZbupPq?txinRdV1Z7ItIqVE7E5FPI{)kp#G=a58C9Z!%u>15xOaKnTXFyHR;?j1 zcgV{jw~6;=_2*;7U$f$!{;JUM_TwdVTJ2Kl<&@fLW7Xgo(FJwv7Ncg{`6hAK>?r*E z$n2<_HZ?Nv+D%@+Nh4jW>pyoA-SQ;cE*HJr20X_ADMAAqi>Hr9D2!!rQAVmAJ$%(cv z$D>bCb(eRa5v4cR=3=m#cCFG&r^q6_uj=0vILmil>?{Z~v3r~(AsUTmy?Ev#CjfeuF`1uy%>468O?8e87t1U4siUC^U+7t% zKEzC3DQh;ENnnlfXe!?ggNug2b#`(&2L{fWBqs~syOXMDvJsV0l1-g(bf1o)M0QVA zrv?eslbs5k9U4AO*lULm%9#tKA#x_@4q(rzwC&f>4h3!M=MuL$F^462S9dQo*w~Vc z1_nb9Vs4QKP#F@(?v5Ls;8B`>4aqesNhA~a5U@?uHnb#wqQSycy?!#>kVbK2MeHP^ z=u&HG{k-f!b)#RZyyPS1Pa-56C*9;>F0cPY#nmUX#`*@_I~rWjAwiW_`MDUJ-Q6d`zJQkAtd=PLdG+-c~QXO1Yf!)kAqN0i1lQ9sraO+a_}I%VXT3~T9-F7;!puiB28wTl-kLsgDQX=BBEl~G|u&uW(I%}kjS zOPACprDn5ZH1)zP|2_-Y~y~rP&Dj zt@`ZZ^1k)VA2_?4M4N*SFojLpl;WAyn9@j@sFmZzf_viaOz(=6y4SCt%4SZ9Tsx9g ztF1O(tZE9;E_s=QGsZ*y^Np>?4U#5%749ViYiF&4va!Ru6qV-PWpE0DaF%zca zuV@4IP$Kf@+4D*5$o9Z}xM)dMO^`S_#5TpB@ZmIQ6<4iy3)s}zEjzVqJRV(-ekh|)Zo$Jj=c$g1wzyqz*g%ftY=8WKgHBg}ul^73dN zm0bfx5{jxZIBlbvHw((FDa~GG)s?rolZI-N3oymHCNJ`xA=i}N>>N>IgDZay5yZ0B5}T5dfr!z znIAUfd0)r|2Gw2nRhlLpvVli0So*oV8=Cfuurq=TI0+Z2(N!Wg&yNYJDYZ3B)rUf8 z^PS?z{InS2hxj0>KVq4oqMFipEbfi*FP#$3`(mWg!D9G*b}aLv{JyC{dyX^zb6^;1 zRBhUFRD6D4WXfpxWa2W(JdU02)XZJ$MwWe1eehA{-^hJ*`xEy2Q&f(QU(Hd;{i{?7 z{T)Zdq0PL(EAM?7Iuel!B12DoiUk6XOLbnzvt1S=7Yvm!y1E7FWg1s)UfwJ_IbEL@ zHuGCvmpWxlehDrqRbRR+Y!5=EYKgSrNG(#`lq189=j?=doy}ynsa}(NwPe>jO#tqF z(dU8N&_b+uz!`WMTsf>(>CH}UP5eZ>@jz_gh(+=8A*|t4;z(f9X>sm>aOufF;qzdc z@9AeWhwzEWe(>phnt1;DEU~~=3^|en?&+rMXnMSAsR*}Z+p}70&w8`3swYwwCMN#9 z$LgnhEUOx~xk^%-*8e76Xo(a>EtV9b`1j4Ob#(n|(d_euCDPE}Mb@G)X=AvUuxJHd zBAr+iE)|xE-xej>*Ov6IO*D^0I!3b(&Nd`CBHXMyUI|c7t4qX?#gnC?GV#pfFsZam z>{vXS5cX@iTV1XvQK7d*}JmMycZM3=|GE7Rg>-4R#oMJW|lI$8e@i( ziFd0K!y4c;Em)`fF?)!ky4vX4r#ekqTOtNkNBTvVy^99jG9${w)auCtC%Ui5cXdhs z+CWx>ZL{XV)|L#YWh_wkRnJ%uHVBKH3o5os)5ZDfI6s3cFd4IC(5SWOJ<+^`878F- zoNybM-D5TwTn2$lqqFETTdibvRM5Hr-kw{M9&ion^b)6pVFoOnKx3J)G)96@S1g?x zsgZ+aGlxp9dqj>p@aQsed1<-?YUvLRm%KNK#Sg{s>0)u^b+ zwVR1S>2dpL+PpZ{R%@FVL|i>#P{t-^ZAm}aLZ#HbrdXYk)-oraosto$8@oDMipY7`+YdAhl<}Rs3{91P( z4-^nHzahzC;;;Irq2(tV?xvN1B;?zeIle@v`j z84ixuuZkDPS4JcfyM~a62bwe+K!hMU4+dh_VVwk#m{pU}e8H+XwRut~H8tx>Khya} zd}TG{{LD+4 z!(vtHEj*Mrioj=sMaLpj8cpsV9@cIFU%npCg(x>U?Y;=H!^OvI$|ZM+$Wp?bXE!l(kd?ANS}r38#4T8aZSE3{&vJWhLb-TANgGb= zV++!i3n<%Fm06qr2l^jv3Z`SZ1@ zvOR)bJz9?3kQGYe#@#&X!>Z zvOL)qF&!fE&P*uZEGLw2!=CkU6UtRO6H)IrY=F^5eI_xE*Ji^lh=F)!=LzQj29hUZ zj96GriUmSa@pUAHwIxn;#4|s_j#k|-SzT;(NnD+a6?IJ^__salomjZyRDn|5)KDUR zUO$SzC~kTtuIeo9v#{oLvc|M4_shEOP3+5f$^dEo*|Ba7kv{IUhDgYB5f1%(5Tley&pB|gM49g0C0ZB=(L?Mu%%XNL6VrxDmPpS@y4Rq48TE{| z1-KW7J_r#9pN()9l;y#*rv?!l1!d!!NUXG>e7d_V8wr#?M}(hy5I-u0xnuF~ba(8a zqc77)tysxj>Y_ljbG9&Z0Vco4z1pXaSMLkT#2)u>T8ex&4Ck}N=ndi0;G<&3hL|eK zgt;-3F&n!wV>x)HZkRsPX)l8=RbgA%W_1HX9za65Ki62H?LW04Hu50&da%{m8K_Ri zyt1@fnYr{Nr56mTq_*>?Y?*b~Zb-)FTpde0mt+)R9A40JF)G-oLRUFu!hu)E36mQ1 zoE;HqTvMC1c%fvrs{yTvS$(3RuGT;?|GAhd1lCQ+MmU+pmW-kCz^Kuf8vZjz=| z5xFr^3JwtI8)G61%HpopHKv$eYtF{>UOP#@2`(0^>z9hwchiy!JH_6OQ6*HvhD0{U zc9bMl1hvRz#ZC6DSE4rZU`D2E*)ej|-f~u_)u*%5A{%O&2pN#^(Ku+%z*2R_L{?+u zj6NWTL*dC-deN1KZDM*=i}<28$??s2j4TR9Fwbx=|C~Bd)XI{(8K^NS7~l zHrA1iQ@5CWxEFgG%WXIBP^Hyn(?tG1J`Od7i{qDag&4UhwuEwr^kj7Yr=N`3r(jWwi9^ACq!L^=tks?ikhZ;J7y1Rf;>CyMi%!h_b9 zOmA9UqA7SGr8i4N0{ zH9eZwB<{wNeyYjP49NqFhDxZ6W)AKDJZBGP?T4Ggsxo0!Bsi^_j6k)z%c4EkG}5?~ zpsj1PT*DGf)Q-9_+FLv;gyF@*T7FKW0cDi)1L2{*jTc^DWuHpE-Wi` zN0hmmEMV7Qo1m;eBgotQd`!t&-CdF^gdA%*3pW|pMZ~iv#Is-w3%MoJRnAvIiK>rr z=x=7A7#aBIi1b~+wPHAQe-IfbGXCu)!nq}_&naC+tvZ~kFPyUhNw=%aGIp29k791x z#qupl{6_Kemf)(#krqQ9Ku$7CkgAk zq`Z()qSXtEtE0Nw%3UJ;r_(CFc%dJ^OZ0d#+_}AkcKq5~zzE3k48~$u z>cOruG3rHUOb)^(Gs{j0(V6qRs&i5IqBA|Gyts+J{~$??C?A3hPd12MS=&ikMCO{N zKfIVIjVKpkO)*kVxkzsso?q(>G*0O;}PPknxg1rjA=a$^?d(|hz3r&f> zm9VIr@MsfDUh64-YYM^%N8guj8Az5!NrD~*sjg<^`c>5lNFgvaWYBeu4Tulgq%lQt2Z3m;uw!B{;rVA0dDdf}Y0 z%4cV%gh>#XSy66pCW@0xvP?;Fnyo~`0vd#$(aj-`*Av;u9EVWSn(zf!D+n)xZc+qJ z+m`pkfa8X$#LSq=A%8>c7wDDPrm5?tc95M+5-~Gda|WgwNdY_RJ*{dQ@<{6hj{NM) zH_Hv>X-y4k44$q!z6#u1*Z}pOmX_LbyIZl|%~SnIt_?7=1_byoXGz5;MbImD33ihH zN}`ly7A3Ew=VX~-7RUnpqN{&zlVdL04@lAaI_Ik%1B7sS2WlBytP)#n)8dWO0kaDc>j z2c~4sH(TfEAUDT42t_+?a`yA+*S*d zP}RRe4BVdNq#lhdf{~EWTOb(MCUZ@>cyxP8531TlR8+ni{9okal?GWd`;u`C!B(YB z^m;Ws2%2f2G1Qi8$>5F>G5pm;zJe%(5kq@)hK!A~*9+pQSM9xNQyh(z{GCQ}!bq5{ zbuq(9Z-L1zgtaumS-&g3eKm>l_dz?-kzN|PqwgRJhG@EZv*65w2oMh7+J~#6{LVTb z)^2LUJu&%@9!~iJNYRTN3#MR2xp-wqN?1jCf7tGwbyQ_1svJ_Qh~IW3;+(f_XK*j| zH4{Sf3z%V)Uqv9YF&e?x1+esy7`HPj)Nofea|wb`s~dJBUldDr2J?@^6FcMk{9SpE zW->y%yA4!ndk&@HFiayTe!nxm*Wb0E+FFf1yOQ`EF=WOLwL7WbxXr zyTc5xI?ix~kSFqKS+9lBG_Bl_wlz3P1v08 zPERue9U0rsKRd^(yA;CF3`F9o&M2o@r+HEF!0xQn9u(yR#c?L(l6EFVUGZ~g=`qnP zxG~-7k{=YUEg|C4Zda(Y=6+?4j z_o}hvk~GMqx)x@>+!-wI7boBNH!R|VJvZau&^PMEjX}50s7rGB2C9oO#GUrmVrfR;wpZTr;b7sl zx3}>$ao4`SqYV~d>c}~6Xr{4I9AS{cno&=3$bDI3jGmXObr_PuZi&ha8Y{&2`(i_l zCmFedKRf5DN}VZsy%Wp#i<{mF?`4!5ElHD_My*nvsC*}hcZ&7z#9nW2r+tTyd@msO z6%tKR>4b=E^!Q%2^ahjph{Q6%ON1G9Pi8NlEd-ry}Q;ggnC*{r( zbN1U~n)JXZn%Qdo5;zjOZhSOLNe{2gyjh}oe^@~7thiblCG`N+eY}5eKmq0AtE*Kr z2P*%-VjQLV=s>V<-YcXRN#>&XMDVKjO!nMaHk|k-=OM|4KW{^bKw=_-=)?J*lV;$U z_ncu=ySMIYsD<9;qwhWC+l1vR1WB$)Vf!#t40*p?t(^4VmEU^*xvt7lYUQQ>+{`D7 z-Unk5I*mMdo3Cq|W;_SP)`NrjIPv|#+xR^q`-3R_JLQA%zROYWNN8ir#cLn*=LO>2 z2T{bJ--l~_H|ojOy<+Q!e@bv4oBx&8+g(1tmN;!JzX5^@#vb?8cpT7)mywQ42DAdw zmV2_`hlmH;q58l#w?l#xainUy!OPx5{rSvozaAROd9xV!@xS=*!uOM>)jmE+r2aqt zB+bWNeot*9SUEg|Qi)>@k0J2P;kkUqw!lw6;~3`mN2m+m&pzXCij$x9^^M+v!E_Yi z`=*{p@9q}<}{x~+3e<~(@-k)z2kAEKS7*DPc?`ud3l$vrhFew33awC}VL71lA zi}yb7A8KGi*mL#9X@svu;1}UE(!?*8O6a}$i?BWkI~f8+cMFA+G{Hl5(KEtJvx{Aa zg_?rK5cUelTPlzrKy9h(6yu#=jJ=eRG>V?;jdh{_N|z1#f8g7PdF#M@d_b zrQIU!)SOTvVqzzotti^87kwdKJryUJ-xQypS}cuvM_fK1Ddv5fLzvgUUBf4cai_z1 zswg`>o(~akoF2=|w)OZfm~*$Vo#{`tCY;F%-LVIHa~Ck`(;I{xmTDRCK2;~2}89N7l_Ga`j@@!v~ zXBxOmZK?5ppLqOi6!rbW*~my^P!#oiWTKNU8=A*y-F$gA%XhfW+BD%f7fWr1pPOL+ z;%&{d6zQ^}w)H+&wcT^BoN6cjI0%eP|4|+4Q$J3CI?n(2wEAz9*z!}YewWvg%8SL4 zj@x{Tca!)-20@ypGDm9>8zp-G zI-cJr7X3Pn*NcTmi@#eMzTQanum&zrq^LvZAMbJ$DuMi(^Q z9c$ZI%C_u_-8k~XBY$t{xn8e$AnN-%$67Zw78I(yT90h`AD;vo>WQ-qk#g9nx*x=^ zf5hVjX0JcPsq^$dr`nAwqdinihC&0NohPd8_%jB4fBNU$e3Te=ssChZLQ zvq6gRgFTFaND*&T?x=2OmpYF)r47hXpxy-!nW3wXFWLL3)!bHYVjJqrzia!B3U$ij zL_6D4->!CV!68Z93)^4eT>bZY15XJ=qaH2i#=R%L>t1iqFNcpd+I!aTs;8>*f77z9 zZDehj-nQ0ktv>;ZJ^zlP#&y5T;UoXM)N_3PU1KnK7=RZeS{t$q3v9uy_qFnJFl2y# zdr`Tg6>_~sPHJ26>E$@v6i8BHF&@-Cdu8l|=-GKo&%!oZBV1Cj9{1<#7BNLE>b!yf zTfEwNPoOc69#PFmaXlIggB?_kQ#SbO2k~oXnQgrLrZ>PpM1<$*3bqd`2ie6W$1CXp>v1 zERy(xyi)mH;x|UBRIq7C#i@B4&TI}~!|O8GusTo}jO?Im6JYdS0lUe`*^Cdw;K-*qJgWcGpG~S z81U(Cd_KXcW?@{^|QIzCA;R{NXKE50avr_EK2lFM$2JPunU;YJu zXXnd)TyUPWbC^G$Ch@nFtpO1B(~9Fd-dFP4r%bpGw0~08U#D^sYT@I#T`9AG%deG3 zEIca4YoE3*AkSP+`#v*!Bi_h6qy1YJC}p$~8px;dHOhiO{xBc5lLzs8IKQy--e5k9 z^CIPB2#?|umA^vx&C>jEWq2q*g2!HA{0_t_I~Rv>yTpen8zT5){LYKRWp+{*E#*o@4W218)O=hn; zZ&EhIgWekDSUj}5M(Klf)0fzyFEDOW79?Qgh06K_ey3b9>*@oAHTpih7SK2~tsIoN ztmO9QmO)onmojT+Wh0vR%B-C=tu}(iVdoMg6RsL33)|ptZ00z1choRTS<{<4rJ7mF zp58n%1a-Q|H@vSYUbKE_Rs0jVnLne1Ch{ADDrR|}k(AJhQj*B+GizoosSRVr>L$CE zI_|K*)VGv^4Ci+{rbDr@&u#Y0fv?^6H9CQJG_~t0zXt|%qofY7ovTSA(XPVi<9JtJ zS~{oYpUix=(%M90^L#aOs?yfr??JDD#rIi_RuveJQwMOW@&>oB$H0iV z(IMS?GQrrsdUC3i(WPAY;?4=Gy~H2Xj4erDP=D>bO%()XAZXk;f+7C-Zov@<$4{_c>L` zHe|Dt$$lR4mC#==ofo5TT6$WPk$o{c>lAz~loWUt)M3#oXO7f%)=Syi7aAc(>D0bK zAQ8u)B<2|4pCSdke=0c|af1ZrAgmuFfnhshiPxa%G*!wFx`tjibyDDcR#lI=u zmNyDNEU5UU@ie<}7%LSSGCEI3uMQ}CK{UKsSY}(LGBu4)h-|C;XLFLPgeO^UW^p(r znPlAuC^L-Z!!$m5^twv=&?5+E17b2GK&u48C8;#i_8vJfjUVl0`QP=0ES~7Z5qWR6 zBze7ZZ+||kUt8rnb+(8*Sv4kx&H4;Gm9h-)@~W9FVg_ri%wF|?hsRh~Ik0xV5;%Z| z^Lk|*KwvqmR?Yi1{ZN{Qo?fJ*$8Ti*ot-9`KIS7nyfpx?5x0W*2ZhCV`maKIZnXPwaW!vjzY>22!2XYgw@Tu2xd)5D& zuIoS0CglGYcJKR_HYDTF53xpUANo+khiE5rf>a?I=d4W_OMoH3W7qT8l(m)FO{7K2 z)E9K6(Kprqy~QZbbUuTIR+kP-hjlfl^OTrfl>?gaVTCFg9P7Yzk}?leX4fV~ERhai z7Nm1~$$`r4P2PBKXJWTD8Im^ZK8mzL+A*|3%MEFTUa%O$%+l-rZwpfv-@wa#4pk1X zJyfaucmq!vcBseNP_vIH{TZL@ zZ8Wjp>MnM6)LrQOx$aWuWyJ315q;SP@!PXDA^IYDzM(gxU`=M5>j_U0k|#de1FvzX zygrCe4eG#ppygAwZ+|a6s3hLV?aoUNrmEqA*T2BhLhYs5g}HIHIBAZMNUMtx&ApLt zmM%W1L}qfkorXbM40`LRNhl46r3vR!C1RPTOhr9k^Fq69=96jx^QIW|*L@$7r-}y@IT`Fwm!<)Fhr)gm-j^)tLvBKrxH~uscIOOAs zZx)a8yY!$zMoG!yDSb=}^;c30agYk{YH97T=pQ%{>qy5tJJpXttkQAiku2Wd(NVeI zed$5G>Rnjm#?sN-ufdC3rsX$Xe2~r!S?Vs#wKhAHlUY1`l;b0KJIN$pm}{>q!jTDY zu9;dJHWsWW9jT=?-V0V)s>Ya{4Mz?bht1UB%Pdc1zOZs{Sg|r>FdroW)(z%^B+unz2|f73lIc_pG~cqPLdbzto=CjX@e zZ3s(kso#1W{$&eO8=wM||4o~#EFn2lphAP14auAC{5Fh98k{J4I z)Vhe4T(8WGMJ0Gie&u9)<{~A37*9*cSXA6~I3{zEaX2OwgV#=K(ng7Bi1vjMO6>#O zPx){d56h3@)rdLiyN@M!ac@fwhb>WFkWP_@=ypXc87#EmvuqkQ?O`$&JyeVBeqE3r zzEM4}lRliMR2kiE`dFL%2+rkT&{LvV#NvCp#Yup$!;unmk>1`fot{FVARLQGt>IP3&~CiXSgYFr?Z288OvFm6+iBh z7>szS5%s)5chhyU&E1HuS0Y=pqS-o4@f*R@c!+Y-2p&~z90@35%bfnKTb*CV^HMb? zrGak;K0?P^J@AY#b6RwKss~=>4farqOa;Z%(aMGqJh%txEtM~6cECChDtkv@i#}cX zeFTr^k14j1{D#Oj^;2)n=^I8twDJ}yb4T*TUZjj=y3!dNuX^1sV^Cfj$>T>63EEE> zwm}aK&m7YApPkcGT~l3+q>?y_4++Ry)K4anhp<%V>R{!8QG5)~ zP~IEG2ZtFPUNKvh)0kU$VjyvPg_JB`QYPKPqaqAuae6t3mWw|R(_F>JJMLR~1Wrm} z;@G)gRf2k$5}DNoH*?fL6JW~d4U8v}O#Lj`QYjpCDF#R!bZ;OVA`a{@Y%dJ?{homc!Ifw8@06i35f=PIVRrzc4_RU*dH%ePxQBrD$_UE5~tUMrpc* zn}-_wT`dhm=oYyqI8GHhoe-kFFLe$Lu~l<*f!DhcV_yta{BwDP{eKbDW^N!&yy3Y# zCV~k42ZU%+d5T+gMD0_!ztVaOH~lY7y$%vlM50C=JDpk90u)bv%%k~COfKyRs*%O@ zfuIjHXbBMd4!?bj_8oreG`qa&)d=HD@SxObGKgxQcxw|!`EoQLl}=}TCSuM0J33nZ z{;K(;PK%c*3eww79m5lSFY1a~tgIZv!*O;oUqpHvE4D(Rj>_h89ep2=UvH{_HH-k;FfX_oz5`|&Gl zTSnqQb2lK*Bsf#|;;XMStdzwkbjJ@1bGA3Rf^WoIVz0V;`G$>7^K{^B$@6fJuf%ZT zGcLKiC63V{@A>?>jfy*;hxEuijP$)Vo89M=BR{MxAIk^#+JYm>L*V7cj^UXj3!DS2 z?0LM&WvXzRm6Kz!>pP_UJ{D=&L&}sqB)+vH(o9+mT4W*Ed9TPr3=s0UawLyCdmqR7 zzgZwiM989_L0a101g;Mw3^Jo zDfkF8ebwkvov4|OYr3fXTEIWEQ0gbH#*4)qA*qjRB3@!l)mYn=%eP{eakxQoPC&Z< zabIQB1O%=Vk0^^L@ELY;0c%xbb+Js{|Zzs za}UPP9#EM;Ut55u`?D*pO^w)G`&FlcRs5C$elWxbn%TZ`h>Ra)sgK6ymddDZ>&jHL zkusZBDw}WPG4>{vXZ)t?%Arlq;hwW;vhtbsV=cAF6-+y#oW2b~G~UQ0PULkGczS&z zA1)OiQKU)8^-hOH;FPeM2d*wu7Ej_62A)%K{b428(9u!S11^bDBJ?#-3S>prW4KWZ zERO<0#+EgmReDV3u|eBc+TC;#K7#RPV)8}OMjY6^eA6pVo@heq)Tg%+hWdZclO0#Y^ctp*3G z@?p{%i-Z^x^YJoU*hC zqKQAIY%byx)Himv1WB?b1mlcjV?FF5pqPi@cp!%z_{c%WG|ywRO6s=MmJo-!H%JbA ziH*9WiXl3{a)Qyvlt%%>s4dZqzpAaWr*&dIq?f+Mg`9bdkp6#9ax1=9VZ7h9it(rAm=pwn_V2(Q_Y$f->f^d0bi2fBpD9u^t~|iN?#>$KDUPv&HKR~Go_{bHQ3=e z7?qXG=ko)N{%+9wJEnX;pGO7Iq-%ibV_l)DLHB_Lz^wcD1GW~eo91gx`MBQwapl;3 z{O*x6SKF|%OPM*VhX8tIV%2JvvBp?Mv20b>8ocLPMR@~lO)@4dc5&*+C{)fx*?*Lk z_w)W{=`_WOn_KV;U!ls$`}x?I?qAVxOWgrD+)MVNJtK8wb+eu)l`#wW)BvYi2j`_x z4kf<6fTskctGIkOi4OICTfmR_X?Eh0=6t0bc>og$DhqoM{`9VImGlRBR!>dwF6mjF z9{x9Mx}7}!ARljf2xwt`JbKMSZV9|rF6R~7LcY`YyxLTf&nqVv^4rOzvKH~Mlved< zvK7AvRTM;lkzryz+jWP5pJE|}Ax$r}ex)p31V?aD*}I5;mS!+bCYPknSu9fUJ-#Zb zBAt{=nyr&cYFFN0jKPg>SNy7YOn|}YSUCI@?MiwTpUaOZTdQD{hn166Fv`6OHj_gG zHtPgPiksV&xz+rc$ZnYYT9h%g7XMQiO9u059>6M^Fl7>#AfzDYXjvtzo3W5p%G4!1 z(ubU)WtFmc37=~pe3JerUeAe7uu7}rGvh}vp?ZpyEljGjpHzaDBCI%~j9kix`b|M~ zI;e_yux2TrJL*9^JGQ`%;I|gyEy^F>9O1fm=AG)iu*i(^5NgwILoaS=2~<7(RNsA5D|7 z_+)%dHb)6sR|vh@x~TAFJa{zCrs~F9%t4Iqse=f~-O?JUlt0X!J&0+l7a}#*?^D)4j2H#u@vDJl8=H^_ zgl@|}SJG>6-sT6TxCR@eAC!A*c#>UPt6kDs1o=KJOI--ovX?Q{-0H5i?(>~*)$kPF zqvjip3xBq(-l5=RQMhj|+iQ~f=9YJqUXSv7q?&J(Rga>Bca%3C#WoqQgC674MjG6a zNRo%+%QSwh&hNlLR)h08tC^#2EpygsFEy{Iod(^9|=V2qArx3s)wQvQmNyv*; zn~0ua;8afWAJr$ku|L6{yM^}MKPczwd3=u@>f9i=jgPt1!4l``4LA!0_(}sG!ZIJYSq0@2Hw|P>SU@ zH9taY#n-F(3UyLFf&TA2tvvb!;_AoraLRdF3$>=4R(3prJ?o&;$`4P#^?afPuEAVH z^|Up3Bl-ExC)V)p5}KrAQkgCkr1o#OK}U)AFyy_|j$@36AzX&kUS ztOTyZ>5z~0lEc&zr5`J!*YTawb!QZx^%xbPb3KHA!%xbX^*Dd`hvIk!%URL)%F<_e zx%Ai><;Q1u82>==eiqw6Jf=U3x$&V={48=SdzA&x^4QQ?e0oX&FR2{6D)klgYsyQ{ zV*B`^^4_!jHvXw%bEE$6%0M^jpZSR_7>gUNgVYW|_Fm;KHyk$PvC7Sdm?JyLgSFuY zn_78DpwS@7oF^T^A?ptmzJZUmJ@Ic%C>J{WVL7!R&k~9V$F1(D$&-AlRBqsdQ(8m7 z9)A3h-i$jkz#gi+7D_Awx68#2u`NjbY{i#gFVsKrZ{^DkJT2e@RZRn$4zQi|bIvL; z&+)m^u(Qgl=dhtH>rmc$4jJwQgDamI3L-^1w1NE{Vb>8MiK$djb!&B`-q zBF#Um>}kYSAMgl0gVb-0e9*u_IEX^&Ia(A=bWghI8gRR$3W3UX9pR_zn>87gZBq5L zd=r0=j=xBoF$YHcpbXlK7lo64Q08w&tf>5;JhvIA8Xx^(XV&w44(DGfFKxl0v_F&+ zTVU(g|D;^rg6e2KXe(b8V2pPJzO4g;pKs-RLP_FQwgny;jHyP_E`6xH^a6h@@essg zVk4ltcGX!sQgsE9(z>eSG)Rb2@*)(`@^9tHi@apmt;U#9rwNXqe#wYoj~Gq(Evf&P z@qhZ9HvUCTc(?MQvZ)CH(uc~oO*jX8Mk#)Y$M!NbN*N=k>m+z-Q?tS&@VftuvSAw% zm;oHW*b5Ve-R^k_^W=>3DOz4_zGNuPSgJly9L@Z8`+PEnnj*Fqxq&$IN`ySql5G`n zEYbWH?_QD3pxNh|xxI&K^saU(1Lt90S3YXy^~6_87hen?4jFtgov-J?*ZLOd^NjLZ zi#DCUY~f)VEkvC9vjY@5bT%R@roQU@m0Qq;McEWtM(5ibO(Q4dgMoC&kk4~ z(0}ZJzXZ(MiI^C0@lKu?u=z)A7zZ(g%|9wTcH*@%bhHx!Aa>#sWcC)SkO%sQ;=4U)EL1i6^=S{#r=&=zEgCcK-Dm5B8$vG3X7r2$K98@Q#3U-hdGl zbtpf+!H4@!>Y)0;@+Znod+;VEzC)R?2MWWEY}Fp*?r5`o4v`s zA|gH(VE|<#A_)Up-~)rQh%uW4mo@4l z8wC}S1w_{cMMOn>aWNq873O~H^ciNnzuzC1&nI+OcXf4jb#-<1F{C>_73hTB6Mxn$KoRWIK zaGALTY`GBoG#sOHj*4EtX3453&%bi@jOYfZ8Pb*n| z(Y}8YTD}Qq?f?(mh3PmJOJfO-OyLE);H>9kM?_jsgilKB7JRl#&-95-2^*o-g|0S< zGkSDN#&YrPB>w#r_I?QW3@tDF5Yv8cfTsc;kc&Rb@@G(18JBUFzYXYznY z=qN8V_GDQj^mf}Xjb=DM#!8b4a|0#IPomB&f2NkEO=CYdd8+tti`Hq8YO6GTAOaey#!uy`@cE*pZe0IYpw0qR--NG z@Zx)71EY4`KOvUHQ~cULbzlDjwI#SqVc=Lo-td;q<;_iA=U|eJtJC|3SQ}WM>@V@i zq3OdAuNLp^osF+++qlafeeb}~$Z=>zSW#%&BaobgXYgsNlAb&ZSiD?X6bmImykQw| zu+3Qa$Z7WO)icM1lu#6J2ox{W!`Mu;XnL$kD^L>hkaW5v?5{N_hE{y~_u9}5va&+qNm^AeYy1xwgj+Y=mPDae_Y zsE_fv2u=_G@QHqFf5vFFd~0m?tVC4mqS<@8VWM#a$Om2m_KPKyedEv?RMQsW z$NVz#L;J@%xE7&4eU``lTYod=qJ^L4Ilx^HV5{~czUcry#yP}q9MGHaMbq?y@MXW| zwFhyoG4dRrI*3jA`_FOmXL?^tCq&M<=aepp5M?6K4rilf>NDwjYrh4~>Q1+Hj3-sY zaiv$!wJiG#USZNEyKsnK_c?y`b3N0U^o#KMXaoBf>2B)$OUvcY^-1_diYI=7?GIc^ z-}ME29-L?`J`5vp$9b+l4AubeIgBY6;l;yxX@UdBKps@JE@eZCtK5e?QIDV3oGbac zgSwm7eu=f$4&IC)v16#i{6!d~veR<#OMP&D??CAayhdzwaqmDm4!jb*k@Ja2KyWSw zTdn?G<^OAnOHCenVebIXIs$$WK5d8Z9f3;%*!7jZjNBLasjtwR$ER@V*SKXD+DWLn zzz=<`Z%h?fL{@V_i8u`NfN!vbzQE6Y1KWE68ZT1CE|bM)sQSVH@A*dec7Gkk%fHL? z$fyeSQu(ngkJ!=UxMKoAw?=6%^2mdF7w&yjPl3CC^HJ=gfxyzEdS2=otNw_>Af^iQ zo};+34I|w5TWlh|$#;CKUq{_9@(bU>mGNBU!{5RO7bt#F!z{K7G~Kua$2iDMY9FU4^5ci1LDxcEDK;`j1JzWANK&G2eE z|NVQtYtm&rRwkZm=;{T$ogcr~_fUOje)9)?oP^0g>R*$;bIZjav4ep=|LDK;2;lsJ`?2+K+qnywaJ#*OQLuqm-i?ZlHy-{dvxx~JoaYcAB@Uz{S+G{~B z`x)mVq4L^q%Jb5n^?_cw_)~?s5xUX1Mape*TgxZmrwG3wqO z54OVPxxP&wI85qWjA8d%-Zba7_I*4%E-78beIER>jB1;-L$$j&_u=1k0T-Oq3rwNs zO3CK&C-g3Tf73AWmleUV0Qt?6`qcCgV{Uj_^EJ0a`Z|fMJpp?35)VA3 zC;J3P%BKNG$CbY@4VlhNk2JmqI&@f&7XaV;Uzf$u7s1(}Mprd{TN~wVAx3u0o2PW& z48P5Ls1Bi}I;;3fN6SOWlAdZQ7OtRRMi$rvEb(DM)F&tOo8%26;k}NePN^Tw2`NI^ zFSvgA+s@^6zv!vH-=-;EJ8Cb&BT&B+t|^b*(9_Hq~)?fJ`Pe&-yvKHleE=drSm{*}j`*9W-1x-3dt;z)K2AmB1f{uLKG#=+KIG*b+4{K(xsSv!HE}Gu*{IB{QdY-uS z6dwv$G5WTgFIl5P(nENWWkd8L%EIhrEZ4NR zo1~1aU_`(vxRsWsZDxL0k7pOrBzi*U8ARUH$q)(k&cG*yF4^bOv&-F9;~=tnq5_(u z^I@V{#$%W~MjA9K1ret!|0{UpcR+gHT7k3swQ6z|y+@+6P7`(5-V;wxqT9zu@hO7_ zV&?7Tpw0$*o`*ZAkC^_&4w{Gb3l4gGVR<0mzBQpyNEbvCKN-{uhGmrH*UHLZD6R^0 z)`~3{ajU6`HZ08@1JOaNujtMMz*25GmIzr1xNYt%#!uH|S_g_aRJAPk^`s|Zxb*TM zg8j52`7nk)t*@%6@g4E zoEzXbqX|z5<9NVfUjP*T#4oQ6WG}~O0;i(Mn|XRl6&~>$BK*MqkG7nIHXI>zu**D2 zJiw&Pba~MjxD7G_#gP!2ZBy`?F?OC|ARYov()(av^cn9mHg&~%AnkfMe27xp*A}Z3U*Zh?E>RKo3zZlo zJ;TtQpA5>!_dmSUNtvl~?3stjve3Sipleg%4B{q72Yv_n<7xxAXsJyO{LZGW?6b1f zS=NOF^agCV+Bks$fz#%LL6MbKhVwpZ!{ceXc8w<%^@@QJ5ktHlUlb3Fq2z@kYIM(U z4BgK-tra?zm9#h~@mqR@QlJPsFB<{@2%+dofuVuP@RAFVz9^ucz$@BOUhdV5NR zW#j?vDRWpS>Ew)RNl&08ovw=Ff<$_V#$jY6QkfhKUQVQB8u~dW zClQt%2e~8(tsWD_Qqz&-cas}1*I9Sin%Eszv@@b>xTfR`^z{kzkI{8#rD)aqdee#Hz3DOoj@qo~P zGlFw2%y|`>LujDfR430!r*xX=Wc-BCFy|8Bi7Ikk8s*y@&hW0cm=lF9@wC~WLkOdI zKjjM3f5s_WHyQw@4|by|)CE_h+*FWsS{T6_!w#HUXgI$^`eHXUFW2NoH^y0($%ozK z#mPcc23=j6WwoaQwx~E?wuxkzTt+Rrb`IP4@8E@g1N~ts6%O;irNj4_XcB z$G7;N?sOHfp6E`);~E4DXI8=BXz$A|KGq#$69nJMp?RGoF9-KWhN30eZAU1hZV{d4 zn|sibY{}|}tc<#ql+pYVb!mrT`+BQUh`t+vhn9w*|F-j)9yDI4jrP&H0n>nzQCm#? zNOZD}@Q4Bpp}#g2QFBuvZEjK|w>6amPx^8QzEXE%@5Jk3-_;mJpi_1=4AY<6@w%&N z7;S9FKVD5fSEwAWHK*q)ypmih(f9D9xinZm%pc@ZR*Y)Pt4$yB8Gu48^>=XeGF|-8 z?`ZMBP@luc*Pti*DYw%mYVG5RwE-}l$LJgog`^%Wh@WKBX8f% zSi{KS@J+~*1_Xnvy>n&nN*aqfP3jQ+mPM8lfS)?I=cn>$G^L^M^1wX8xSrtanOL6H zllmsrTeSQeuxP{8_C=fOWBIk7bW!+!H6KDicsU=6*bv)N+KUQwOB!kT6~CVCd2s=) zp!?f%(luZ%&|XGHCl6V6SlDy?ue*qe9!H!oUfduj{F=5n!0ma~HB^%LKFUf77npG6 zd$s-i_BFWdvLEjnpno5W<;LFdVn5~o?oFLjg-E;VKDZRBS)LMpvB@iY3UY$hhf4KJ zd`BM|L}_unu@B9X(#d@>GVZKCMKvw)c1U_AKgMd z<2kQC8 zl#_g!YUM$5VdvLiln42Z1Msr^Z5BQG(m}3m^04bD&v!OSkHwPElZmoW3#dtPK72gO zeqkljeGL|ie)wMS17Em~>ZPu-LWE%XVj+e(;MD8E!(;J0>3a0Ap1>!rr(sj4+ASQA zpxTguU!lZGr%^WPByF~)y?_r$3I$IdX%2nGf%AMQ#c%PXjI261t}ELc5>{M=cxG!(48B0u(BuaOldmdH(}kIvDd9ru#XA;o~8!A505G znS4Xgk$`6nf$upjiH{AT0#{TL){y>U`CKdW2C9q^I2g?D{Q*C516^f-E}Z84$eVAV zK`vQ>q-oyexD|5o21-p;rI%x8S9H_@>F z=c|j-4*cFtaF^cTA8w)>!=G8;)u@&+!)Pnf5*(o444=)@k>}lvk$g`_-gq+>q4?!v zEE;r5)BM&?Kshcgo{!)2s;TUV&m$FHTp2nK_yfw|m?IopM&7tkIXU%wp#v`~qx#Y{ zxB_K)T=1f%1=U?=Npk`x7WYe>+UA;*9b^_9tx5Uw3lj<>L)c``Jsn#f8cCn&l;4TR zj)LO7#Or@g-Fv*$34CJq4At>g(2qyOi?lHP*DU%+`J+*ED=qBAzR_@OmUiNGqp?}@ zQYSt<8usob?sY45Lon)ASV5#Ny#<>0Qm2;72zBb0Y*k84$-HBCcCHsJ8YX?528gpDS6o9i3JT?5XEiB#rFL^#LmuCp} z1b$4=67J`E0iWd$02=Q3#6K;e^yv9gi@`rvQWx`h1Yit(n50E~q>7xnpQld&5zhkN zH5K84aF)@wPys~?D28z86)I!GB7<}{jt6OD^`dZ&^R~s36Kv(#Qz!)tPOn09w(w&T z%;uL77zdU{;OAhY+rlrOOey4C#;!Xk-B|N@7{wg%grLN8O%-*aq7}Ss3ffx1kKF-D zzP?g1ayM2IW^OnEPvjna5pGCA3>ox5@?MCcH2PRG)OZtqs;~?7XLQG zbk<2FrqzR#yPkd1P;<&llBil~#BPeHIwb-y^EWB98njxNqx;RJF zTL`LI(H0PINy{AZiYhu%+V)CB1)hd5pjY$D)2W;De4|aKxr$PZq9*9xQs`cjq#E3G zFQw|u?3*D%|Er{#9RC2w{xwX=I2{QjY>CLpj{wXOcuXSHaBALSb&h#HGI7G+tVF~A zw=fO7)A-n((7J>-RGQVZZ*cu|sG0WnFrJaJH4K=&w@O{MJlZV4;JfcfW8PBzzw=!| zQ0iqKdQV~RT>*sm6%WnthsklyUF0?rc7{{T>Yb`F(mhoEfhyDbK^Vh0zbg!wg}YUC zGM0^L|BT3S?~xox^&v=gZ#ctQy;m|Y68B+bIe*=6L$v}e|1<L9LxdKh(w!nBNrNMK6@K;Iv-SjU^=R%p7v5E?p5yNn%QglU)^533xp8Ri5Fu;p9$ zrQ|4p%5gUwqt2XrL=sKDTSk5Fuawkh>sVPp>NRsIHJT)DkM>+c05wv~-4>v*$YJoE zRn*l?ixLbp4)lx-(UwWK44~;T6(M2SoNWOL&HNtcbXOXa6Jt}_5ED){Q(R%dsBkH= zMbA)-X=Mb9EJH{$<9XQvSl4((!-!1?GhpmXFt}YMbv2G7^7s@)oQZbClNiQx%2O?9 zq{g#lsO5CBN~IG*DP&f3va&5}VN@lnRG9Z4?!_?Oca>y98xj^!m*@-uY~`Jn83A<6 zil9-QW$-IAF_^LX#6RA9AEv7x=3+2ad%|oP&5^+INFX8GmItgUh2npLY_f$Qn5l*O z8TmcJ#LOW*Bn$ep06lEQRi_#ge0DP*@CgRAK84g2L|#mKkVjUt42T1u7~V~2w=~u z2XRmOC>(Y&teG8t;1A~*o^4mDqgb~Lv(~ZKw;_Ax&C1Yq2mmdCc}uZC;#|l>gqglrzFPv8F!Go z(9DR|9kPLnS_t*7aE9r=OVRlm-Xk)UV&}{WV;JY>*y75$*N&9m8_qUwyVt7Ip6ure zU~s9R7s*IM)e;RakKf4lB(=O^n8UOy6miaSbz|{ z)&&A7Kh8L^5CRapTf3cH$Bk5~n{X(1>+sxXC3dgM{|ErvU=^G^}9KKYZv77VkzS^$&x{t=?6 z=6Yb$hGo1l(HCWKx@#>`O02X6+ea`eq*fJdd4mC4lI~Ti z9&3`qT7!SWv|!4@Lxw`rgJ5>clk9s0N;%@Ga1Caw4T#`~?N+R%9CHIJf<5Pf@ipvv z6pTN+mVF3~Lt7)7TlWvU<~vcxv{qjBC=E0=ylwNf?`_G2IzK}F4bOI!YCN)C5s+aY zy*-RUo3?X3oIrET4oS4B}T zu&PS*kG@oh{$)V4oojFo zWpzmNgK$^Z;MMLYFan0+(9;@}cfoSSNF0-I{tVQ!JRw}zn3fm@%+@5qv)$889Uc72 zLm0U;J2|-B6X>DNlB-!O6cxt`22(qAai}3)6pCy@q@5onx=4v2?-iGM?o~EgGa};9 z(I;26EUUpxVvI;rOo(SlD*oCQnx*rsRrIv6Jk6o}zGfTEa!Zi-{O#1KrD8P=HE3o! z*E6j%H>FFBwqNY-CW$w2{93xJC2cJ&*Uf3&R15ExDQ<%e#IHspx`pLn9mnn;Ax51^gp0XhLsx zt;e~`nm#Qv*29&e5&c@0y+G*>${)~DzY&MLX4Q3yfst!r09&s^KVut#3ejx~R4CnT zZpHNzX<5@$usl$esDVLs&Kx9wSQPQx=N8-Qv8I^o>uHjaHrT<#*V6UQnS(7nKPTKF zihcvncm;w>D`n9lBexXg*3k7-Rob$wfhOt3v!zzsUTdW9b!siOm0=C_r<@ykMl)@r ziW}Jn+hf+$@J@Rp)|>uHUc8u029{x<_H;< zM*`J0aK$JaTUAO+>rc3Bz~5}r~XAl%`qdT84H!6sTh3)bpjvy7v)mxXm))Hi5(r=QjbtK z9OG@q*J93?e*g|vzwvh4$Jkk@Xk^RX2k9Ug2@|dmER(w9TDBg-!K*PlGCgk-(y?Tn zsT<#i)8n}8W27HCLNm!2GtsW~9~93`>#2Rq{BP)Zw0U5naIf*m4{1R3B#FbkZlM0= zatpu~Ar|raBzFBo3!MFK7X*7fVdPG>NQzV+h{BZC|0H#baSqot=WtEi%98=Q_Dv^k z-*jw7p66vJVVm5QIBcop#*?`3;;zKzWF>zpajgm)msNZjahDr$XBBBjXR+@T&LEvt gTy~1QQIb}~51ztt>CjWWPLg{3LfRjB)G6xlKQg_t`Tzg` delta 45964 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 Sp61;W71~PLqx|4`>i)mwXxat< diff --git a/patch_v2/meow_launcherd/meow_font.h b/patch_v2/meow_launcherd/meow_font.h index 11139ce..eb6b8ff 100644 --- a/patch_v2/meow_launcherd/meow_font.h +++ b/patch_v2/meow_launcherd/meow_font.h @@ -109,8 +109,9 @@ int meow_font_config_multifont(int on, /* ---- MeowPanel 预留:TF 卡字体库 .zip 导入/导出(TODO,未实现)---- * 当前仅声明占位,供 MeowPanel 后续接入;不实现、不接 zip 库。 * 调用方约定(待实现):导入=校验 .zip 内含 font.png+font.idx+font.json 三件套, - * 校验通过后解压到 TF 卡 MeowOS/fonts//(family 取自 font.json 的 family 或 zip 名, - * 冲突时覆盖需先确认);导出=把 MeowOS/fonts// 三件套打包为 。 + * 校验通过后解压到 TF 卡 MeowOS/fonts///(family/weight 取自 font.json 的 + * family/weight 或 zip 名,缺省 weight=regular;冲突时覆盖需先确认);导出=把 + * MeowOS/fonts/// 三件套打包为 。 * 目录布局与 font.json schema 见 docs/MEOWOS_SPEC_REF.md §1.2/§5.2。 * 返回码:MEOW_OK=0 成功,负值错误码(沿用本模块失败负值约定)。 */ int meow_font_import_zip(const char *zip_path); /* TODO:MeowPanel */ diff --git a/patch_v2/meow_launcherd/meow_launcherd b/patch_v2/meow_launcherd/meow_launcherd index 5ac9553a4dcbaaae6f56ea13f22763c92c68a4f9..3bdb672f9f2df4555e4ebb48220700b4fc76e5c4 100755 GIT binary patch delta 121125 zcmce=MVnS?u}v+HO)Xlg(WaKxwB@O(`Ml1(cVQFT=lTBi z-S*}^bLQ8XGiT16nL8Kv?wZ#A%W2K234@n-8i$a5!Y9)^sic*^YDLXE? zPJ$XR}A;KIPDtJ?T+-PkWUAUaxAt&#OAY zp!-zZ?^T05=|A$S@~~I+J?2#d;L4}Tv(c*#yyjIkKPH_g$TLQ~0bKUHR&CGf9UkK+ zU-;T%y;@D)i5PgU*`?LrcwXiC9nX56Cwacd^V$xr9^&cYxr*mjo=bQNHft4V2YJ5v zL#-0Q*$->=W=mG_!i=Q*wVL?@t%~l|YU*yS{)ZCZp~W1+r8{@rS$yYw{d`Nztux|Y zzDKLKp3*H#YXU75w|Y-ny-q7bWXaFhGUe83acil=`=p&C?smdY->+NVTzGm*g%KO~ z(A`>n?39jskhESWU(D4FTJ2~#=Z0w#;60mS^S!Rqt%MV@=MauT!P`Vp~d#(_>_0TU*{-bC!|1q2;qR**e&gbz6?! z*Yc&?F7@;`IeqB6&FlG7*Ld|Yzq?DT{FXo6cB#IkW&Z6shThP!;`VHPsO5p%XT;q@ z=fms9Gq()go_AKvQxP4to3{TsvLIgd@I-!#DR=p%@p5rz5)Z{ z+)|&Rf7kM0eU9g_qYy2_^|^7I7|ml7L(`Ifhu6s4-ZJlwC7!1dCK?#`4(-)GJuXOH z&v56&{G4vx((?8RhFe57T`otZHuRQ#=$o9~>VKal(_eRtL_ zcx$s(KkL+Lgt?K1@?DGwYvJYdw#3WY5Ds-bNM%?VKM)HtKmHU4L4kNvOnvlKksdjf9_RT zH~Dvb+E8w^tiC_7<)Zs@<8Hj>+M8>a-?-z}`+x5>zI)A%s^-1%u?}&^DG#^nme(Hf zom_Lxisd)gt~w`@`PD}{Cr`<`=^W?(E5396s#$f{U)%C#Yii4t_fHwGbMxb~`va|>biY5V2B!RHFOYw8S1kYbeDJ%g`1i~ms|SU7%nkjJ()48n5UhmgQqmJCG(e8h0eWC ztC%jbKBv`xw`n!NGr|*q{vvoOV99Q!k29N0+hyd^tuP;Tfrn zQDM@K@{}%)QI$OTI*JIQg3a=&8 z5Dm00k5Qxl6{8x#qhF#h6^?+1zqDiCfy*;OzWZWS@BNek5A!^~-myPpD2DuwO-yBV zE1i(vTogur(P_y>aQqYavgGiDg~#uv4eZ))Rl)&Dmv_JLC>oryaw%Psl7wOuLjHeEjpZ z$a*T&_ga?IKQYP^F)_UpFjN#gf6t`a_O0&Sk*=5!#rhC4FuiBk4Djifdk~LoENJKc*=Nk zdCZhpRSnki962vmt^Pu+8Z9IZtOp0c^rBd`46FkWKr04o!0@U3bBKgeFcI{DZC}{^ zkVn6#LuD6`tDKgiP{NV8q(z?KMHAr&ErS0pe>5#R94P~a#v76hpL=LfXcaDVewTsh ze38n8Hge(dj0;WDg`T=NR`q_-c@C9E!i-IXC|FKLLCJ8Cu*4&e&=aF7i7uB6{ogep zbwu(>`r$9dvR*NUJl-X-DmjjS5_zmU;`Hp@XUFL$bg1ji$!dBA|8xF1qoNlH?Ee4l z38^*G;10A3JhankxRiL}wpcX=t?dMcR&M`1bA{v|f*$1Yk-vt=PhDQ(hj|*@dOzPW zhQuU86^$JvQ?gXRBN>GOp-XsgR0SP`*SL9_U95$HF2aes7{W+-@*UvWOC768FWVQZ zR`K|Fs(BiDX6;^@pzqPf{x_|+C+ng)t9)^4bV{5$z;lqNkN7fBo>58T8FT3aga>@P z7boh^bZCfe>T{U2{t~T52@hYXReF+AW6RlNfNN^Bss`77Q>#X>_gn0&z*RSEbpUL? zMXST0`kq$tCo5I>eXa7q)-_s{gXwo*sU?o1&<0krVD^J~EEfk)Rv|S+;0T1`N44^^ zFqDG@VAW$hJuuNu)PwfBft<|#^b{*4O2n!jtcOmIxAdNBW=?B2k` zU?150saC__5I6?b9MvjyDn0&}R)ydYSOuzMlm}B|4b=s9fdk;41VfF52rQdysMKVo z5?LY&K<_Drss`0mL#+W1f?+WJR733tyTC(W-82Il<S{yPf~%JssvhhE+dy>{jDU?R40RAZcr6uyJ>N2vc^VR^r32sySOeC5oAO}Z z^&G~41>d1O*jZ<&17P9}h8hKvZwwhKJq@kA$xy{$?Jb5{2_6I+z?$zGssl{F+fajG z7dQ$YxyMkx)6szkkN{||GgJi_{t==F6CZ_fux%5fm-H=^0}q3~bQpTVPNHe2 zfxTc2nD;cI2M4PS=^cd{yr#$F= z712u^90mKq_zY&lkEsU?H4w-r&EvLdIBB+4}r_xU<{`t zk)InX7i@eJ9RSmRiRi(>1BPk^+ka)KUT`ls04D!8LkBj1>3-(_D1kyhWA?V8mVrIs zDzM=oS`V)JElLE|g9BhII1CPgW8h)X7l4uX8A5OntOOH3pd(;9xCYDxo55nR11tyk z1VR`H0s|0gz+tfA5C>A3Vle0#xbn|PM&e)x`e)eN>z^QgUGPb&3* z1*dtCe-1r4jf%ilFb^C7gW$3>Dgw>ZJ*rO9!3J<39mYUkhDY^)#nV0N0C)sEBC~N5RA3>MD=&oh2sKqfD^$Ye)v%dxb~UfJec4aP`-b2zVIW0~RbpB47|aB)FV< z@{kCa3l4*&V5s9N#+*POSO*>i8^AFz3|3z4QN7^N6)*;-UQ2~w0jSQ#F07IB@ni_V3UK5HNCvFCo1p^J?_sRLey|@bZSbfeiGxSLBlp6{Y;@^9 z>H&wqa<15nYnwbOc@Cm$MgrjQdL#fIZlz&*T=^hF zBykJv2kY7>2PQsD2j((_KSToHs&*s*wu7}`4_FV5{m7%*z}!cf|2+hb5;y=J=8eQr zu%?3^6rk0-wI~MTANQzgumh|I8=rs?u(%V(!93nx903Qx#B*tww;Co`%o~kTa0sjh z4|P!<3_pWzfel-k|NR6Kdr&H{8C3J&7)%B`!CbIxJ3|2;*}+(XJ-v(_Jsx?3R~^LT zf9_RbFb~`Vt_BCdLxWy544Q9x)lsk=Oh1ouU?EuZixBTr2-N?AcPQW>xEf6SrB}6r zgi@{Z3HP`^I1>3>H;2v-+mctb=IgZ0tupAr%>%qhY z=oIJ&eep4>U;*>LkU$xPO0XJSGno@yumNlXdrpo~ePEuC6I^f%JOp}^W0Y?pN(7o< zRZ5I11lOcd57?dogF>GUgJ2`r19pP@!5V*zIv66*Phb>G&5TjrAY%lkg25S_F@s%T z5Nt3xlLiyBIKu{4XLEE67UXay4K4#a!9!p_=*^`8uoWBw8)n9+^b&fmoS(k+GG&dO zu6?o96|9qISV`$R+gS5$YhJp}G+OJdE7Em_k$RJLYr39!rhhf&%%EgxQhwQEx>{xlx=uN>5Gz{a7B7EHuQ!@8^Q7l%B!wj{ zbkg=GSS49{sues#dyND4T8qzsh5Y-i6@q)3th>+9Gf&EIp}9l~mnJo&PBh1cPmMli zy>o_6N!uUBxRQe`xuxtRh0}DJShdkg%Fr`YhA>4DIi!=ejI={t){+dGIr5Bky`bv0 z)@2}(l|9xjFll5PFPJZ~>+Ia1rQMW=rt5ek^?$5{={ha*!2e)xNv2JIq>EBF!c}?y zWOdWl?O8e{vyOPdr`U8SZ)!xEl9x4tjiq(_bm8Nu_2_h+665<93x;*aB0bF-oUXkW zhl#Io#C2RdOc9mNKMhX3xs{LU7Gr~Fy|+2W?!TY(4$^y_vSWrVy2*aBmy=ZG@mdT0 z`ZQ~}OnWoxpp<&OYOhqr&(E_Knv(aThV^KnPO*AQwD-(TA;w{Ekv=^in^N(Z-e9cv zG((pj?FR?qsmKZh^t1)oAJs4k8$uG<_v@(aqBBfFm6w3caMDv{@T3~%h+36kedgC` zu|dLWvXv1aTupe-WNU$h>m^U3b!9+j#&!~JKgqf~ptC0(Al#db;j?r=Pd!z1;RvL% zQ@tt?c7$tW5zwc{a@wjYPqRLg+Jc0~PO~yHbxQ0q!kuYWQKrsb+(0;tERRxBhB`8Q zexetmbalnHr1c~)myk7vT=DB+G7)*G3$$El1e zGp&y$oKHA0+e(_DvtySL?##7{2rp%7S zk(NH&dXzdc4-;;^5Uc%f^2Ns^!Nu15lCOYp#}~2I&cNnJR9f1qAg$m_)+`g*)DrIf zl68rxv(IcJ?EMBSgHv~YvAlu%=j&-%LqykH>BWZgD@_`o3DU$7($s&k zHdycG>#37`n3qAKwN@ZgPo0uSw744Pm@kwZje?U1DL6J4)>*6}T`suu$JBZg|F)Kkky zIuo_b?wj@VJRS3uR+5fh?^UVN3w}~fC$wbdYnc#`qEsXFKIqG!2OWBRr1~M~?a&*& zcK%L}^_LmwzIQSP{bq~X3MsLE!mDqw9?53*loKw$mHQ+zd!|jQCE7`J$hJt68j03_ zpUUiE3U(4rT;rOJC5{`(L1bna+pEQgyVl;CFJU~vwH}y{=vAB z^hL%fmzD-dQ+J~RNp`ct9@{9KIR<%8E4l_%xH(a&Q%^z_9z_1u3)tv03yC&AgujQ0 z!3N|<>6vZGsz}dk7i;v5^YpYStBLjzU30Qsd(X-CXq?>vxws2`mqyEv7eOCsout_V zSe`VNB{DcY_AumvZC1va3|cB(=-YvhIH8_b6hdq0g-=J;dpxdKWnxy6Hn`KPMy0vZ zq)r{xNztWMQs1s|)gE6{U&id#HF9v3W^iurz3P~?ds@JYKq)qV+!lZRb*mWU))I!UD%X;)IonbZ; z?)|mPG-;xi9ne;@VepDMsBtwuM@b(BNm}!^*Ks>4lg72#PugM94!mt;xAzJJ>xZdxf2SvdzpIl5&Twt$8~8@=n5g-o=`` zMMWxdv|jsrcZI4<%8k~35yU~#3r84D!Vw8dlSiOeL9g;yAJ5g9ll-SJm)W$evi?-8 zPtPhPYT`SrlwwiS!B4cBv_{hECF`_IX=N>>M7B6V!t~cRiPB0t^zsj_H_k>s_Dhw2 z^s;f_SLL{gh|E6I_Z^-XBB322Z#uNdPzuIRW!Rt<6Q(EQX4enB7J9UfNZayGpaFVc zJQ1VZx@nd^BUA&ij4hPuR5GqmYorqBcIBiA6V1>%p-EVNf*sKIK#S;;(Dp#)rEm3>YmnKz3s)Vct_^0ET zYl|w9Dr8-=Cp2`~9hO>C=HoG_QCkeB@#snl8+sa5#tA}v2A#`;~pK6TQ5 zBHGD)jUsAZyN1@eEj}qt7t?)1a`q7Rky_umD;vw0c(qY2()Y=TcO#En0t${X{Yi%viDT~_(_nqlV$+f&vm%M(&mkd&ea)b93?z-Hpe>9c9 zkDrfu(9)sB)0q5(s~|KJT4bzcepN!Nf+ih-tMMhH7W%3a=pxv)(3_!mIQiqTF4m`| zdQwrCgn|VVBO{r6p{<2h=42i>aMIWyX#=DUD{J2(osuB$BD)r%CE8lRsAb4I$-dz6 zb6Cpd^3O=ny5c;YmQY5xql6onerJVVMSOTUJUE)xcb@iUwL#0jI>zx@ql^n=)yqHa zq&fcDNq$HNAQjhev(jGVv&W?LHRDs~IBzET42FZW25s&8qE1Vbm!HYk#$e%{pGcq_ zTI;pe?VL@-t|UBst@TKu&WLR!T=h+BAM~tF!foH=;7p2@PIydGzMr(@>rfhd4VpAe zw1H@;^_NmTHTx*hL81{uEcVWq!DNS~9A7`T=20u@5r12AdsfQN4;rM!l-UfZy1l{%;gx&*vHT0PXQW_X{C-#%jNXtXYgEw1O6zQ}x%LpI1WxTANN2Xvk^ik;L zBAe2rX8XkK^w>to!8O*tB3!UNge&eme$A4X#C6bWC?!9U%`mhBC*(TLNXT7l-Fm)G`_f9nJ!?O|P)feF zq$U4=xgeISJjoxm9@!0bkX~^&+UeMszF2ExzD^H7ZP?7|u;N#m6gFIML25kgN22#y z8O7{f69d@dMr%Q_P6^}^PJDoi$Wq3&r({(@=*7_69RIk6=mDa&k}YcD$w1eW7F>tH zb52s)i4GF2x9-5xirquBqRINGn2B{hZBnY0RoCGuH?k56PraliJ{S`@qa8O^k~T=% z9@09Ua>pH`944*$q2s5$n!#vBXcK*(to&4vPGYrXEm@#50ztyfZQ~5tnko%eK~H}; zMpfC4W5Oz;tBBTX>m4zct;CN!A~REtJ=3!H5a08|2}dB(FB!%Iq~)^nZ*vUonMa8C z5f78b@Evz1YeGuqpXwj+g2DQ2i9S6+l(ZO<|55Aug`B~yBwY6xHb;|CnzSdzZA+yhR3ahpiavgBV7K<=atV-iR3Is;|X3< z*gGhzI*5Z`2(9x8>$)KGw1)8Nr=(Z>PH^z+N%K8DF~4NKwn8g}CUZ@Gf}POHq1mSo z%O=*oKIpAopI7i9=>5hU^h^4z6PxAa?Xx&y}FXorHrst+%Or(jej7UA(KYPGU%6j}RT& zWo0kYne)dBPTC5f*X}u5e2jPJK6l-4WhZjZg`W4~#F8YmVrYd? zG=^POKr4k77B#9!%C}yUecWRgaAvleq>(=BDVhnj6K;N)-3PhkC&ShQt^T)Mb`(OC z%d#JO#{}J;OVa!>^!?DwB|kr*9f6ko4tIVXE%wQri$9ZY|Bm~=lF3o2Q|xz2A~%!7 zJ`z{kr$g7s&5OceE<#G)i3x7kT}@g&Y4wuEPk3GhO})!qVKh-2QuO-GykwYQiJGx7#dfCF~oCba4K&_(*x!j&W*IRZ~oh@Xt<8ff)@&BEexj|U)u}k^$7TAA)8+n5rNQ^7l98VXS?l!$iU!ZvEO0 zY)G!t93|QznWKDNTY990z0Mn{i1dVB480$Efs}DiTcy29=wr}bfgGnGb);3t#yO_F zdfcx`v?bX{VrN{O_2R`kD|Zi(o=L~IDl!^`egOJfM~y42{6#u7cMNLPkkQUvjR5S*? z_0%|LG7%SAVm=K(v-7$%KeR*8>~V5w1^HDdMM|7Aja*_G8B3wrOt`dV(7K}X2}5$l z=>W9oS?q`20DUyYdhUxlBcqFOYFgZJTcAE@CbV3yl~IOD`^vR<&LN298F9`o%Wd>1 zwEfTqh|A9&$=URFIu&}N3Kv2QXT}|8cjW?=nh~eCqiz4Ba5c0eCgb3>t}J84Y#^R` zruAI8&J6VsE<8JKd@1vhzhCl0i-=5mJp?Ux*73cTyra-dq3jMm5|4E%{twI^>j=9`1oS2+=jIw$G9ZUG7hfL2s0-yyA$SDRP@^?YwcR zj30G*=Q1+To82;zRl-l)Pg?$Y?g)7}3bpd*>E!HE$mSOyOA+_yRa3lKqfELD|2!7v zXx&r2i8(y~C7 z#^DQB=w##T&sn=F^vu)$@}f?Z@wnwzDt<_9>dx{j(sW`LZ+D)r&{@Z27$n1CwWZ0< z;8%8rl;|4vli`q^!TM~eo|zU&6H!PD;rW?eBmYZ!2kFBT>2uTj9PT3J{Y9Bw2PYUX z&Qd{{1?&!vXKF#DVQI7%rUoW57^l01`lD#YE^V((v-Vx4XD*C1E_Jk02jBgf@#tXZ z{F1QHvKoSh(E1Q@B)(^&&d*DykxF`;2Cn+Do|Aq4T{^K=#h6l9dLfm`I7TY#bn-s; zWj!-VXfl=^f@)V zK>Qsnpn=9V%6QfCb?u;5bIA7Q&pD z`qYl52G!fts`iyMJrdO&$t{%n4ZktlZQ~r($Gb0OJ@FNNl2O7e`3gq{GE!NE$kAVKoP8VN+_2$w z3s6zh4(o4U(O*s*QI9t{S%(dqj3l&LWd5ck2aYf5`rxj|zh9we@a zTZ_M{7tfsj;B1@!%^T*x|Bf6V{mb%K8$lgoX65@0r;VV|`HHpct9nIf)G!;RZ@2y| z%e*iId-=-vUxuhj^8VLvRN|;HyK$0=sD>^sqr6PDuKC$cJ@EP6w;bh^GDCw|HeaJ# zCeoADj!?IcfshQ__n4;0CM$o~$U4Xs#lk-0HBfXf{v8J;Un}9p=S^&KN7LD=-quB- z+4%(FS~ zS#Tb@<+Hh5^zZ^3pBtPF?G&Cn)+NNhy&z*XVbc5G{J`^$cRW|GAdeKmMsm= zj4xr3|B>xgZ}IHR{xg$-`x@D8zjh>Ynd;;G9EP~PUR;bKHy7!xG3q7WH+ap-{+B%Q z>Xc&dyDG7@sB~+*no``iFt9Gs{<=+yO*NO0rpP;Qw@&mg@tSAp<+HqQy5#)_4Qh2$ zc56||x*2}{9tQcFi+t-O?WFN~rkEjV=<}5YqADwKE1R7yjI(7iQTLSlasleV2Zh?hRO&hq~v`b)2GFC#Xa%q!X z+E#1nGJGS+78&3zRKaSquFlQ6O2uVgKi^qjMOKk{)mF5$@doH+!8tZh`IJjmo1JNb zkrD$W^=1_YjmQ`Z8-s4sqec!dSbgTJIwsMae~0GK5{t(u{dt+5dsxdhZqCE5_7nDceU~{C$`w??p7|HwMXUU}662 zjZ%9moR!N*s&1p^D*=RV6dy1)wX8U zXx=GyJ9k=txl&KJ2Up}H_DZsfz4`=`L8apg$C}!7!0_9NFTR4DQ3M9o9-M(UvQ3!`GO1+6@gc7)CLn`lRP5G#Gls18OCbneDjw>} zXQp_~8@>+>#*C=2XauIhP7}c&{a|7>IQRM4EOYzp<$2Y!bIeh-G3T&rmQHS&Yfi^u z$ny7jivB1H;Wsz~!z;;?%l;ir4l!s?2=gu!Lh~XD$3ntdssdBWP=kNUeI8GuzhxFw3mE$7 zUKtGVg@&VPQm?e1cGyO~z1BTqTRyJV^AalVbM4YWYu0j|68avQvVwiK8cT%@tfgXf z+l#!|hkBqc1gICG_%NIQo=IKmA`Q`PZ&K3yCRw;BO~)x zMr6(*hrwpG>8tjBr79R`77t52Dp{(;yOPSoMLCUv)xm5VmjxYzC5--SpJ~45s<<>H zw6WKOd0ku{w9>B9x1RK;o`9L_4(Zv}#;f!>p)WrWF#RrR{tE#!-3{+-oY*GC?wr_@ zz1usnCp-6{fVtYue<9&jZum^Xb#C|!!nJPrGQum}a5do?wb8otYQ09^cKdsSM>F2DouhCx) z$=2imGp>d#B83FLT4HiH#j1d9@*?Rg$J1wXt3lG=Juba=JpDX&@sh5OORpPG&sVa9 z#j53!em+*pVPMsGhPkTG&Tz+Z6|5dlFR<-C{U}0tzBM;VD*+Mzn%^aln`&DO?J)5zM_q%0&=Avj(;RPKz zXi&;G^;2Jnm?+u%bx@aLM$4uM!)>$t51Xe`m>rHvi9~stdaeKYrk-xJ7g=f7;iyEa z5m(ZeKA9I)y=KhoQlJU6+>lf`^ z2<>alj!{`nry`5_h%479Ifv}VBbKN(%8bUGU`CG}(`GwP`~SvF#FR!eb2+9|%;yZ- zgNU`goUB5>>ke75wR|qb$jqwM^G>>Py(49DbIPn6YI!4m`oLV4ha-)D%hjIO zx}`#|X?qF`y2!chNt1@G72oFV;ds5_NWIlY3OD0KAp-H0hSZsb2bRSllOM(mx8q6$ z!|`FASfx7fID%@!fGq^Pji4HO-3>Pf)j{~kYOA(UHc`?^LE)c#j#naukf6d{G3Nh- z!i6{mE{#9zXfFP#P8?nsR~+5YGQGLGN^j!n$f@Fc^7o&TM#YQK#dq~)o2f8{>uD}W z09kB~gf3E!cBLk(kmE~Sf;z$*hQvKZYm$CPT%zRkL>PS0B;6K8Y_J`RH&&0@UEVHSfab;}swPTI4;5lhf; z*?X@}Ul+sS#si;NOK;F~jSEB8-8bkZmsAD)VPT=lFwC&a&YBWGY)xT_@NX4%zWGG9 zDfr2T9IRmv%_!T873m4x*?L$RH{z)O{x)mDje2J2U%LZl8HRU~>u7%+S0tZ!m2%FG zen)zcxRj6E6EF)1C*Yi(q)z2Eq;u+U?ZW}H61wnL9SoQiZvGBVd`sQ%r27MAp&MSo zDQ}(=zNom0b7#{{IE#uRKGA73Chk)?hhCyiWvoWEsL3SMiT$#u(}4E;y0X-BV{B1fHt$4bmeae=&tTnAP;mpm-e^0_eB@~_4Hdt&-n&W9O8NzPwVIJ9^(_lp8LRY- z`bKO0Dt$qy!A^RIYYx9|!O1r&T^3_uF)-e>KBLs7$47NpY(=3!xeT7Vyal zlgFM$Rlyly8LoQF21D2682f5tv1_Ou+ggp?6}`<~7pMAcv5A;GumR1UYSMJI>*lX1 z$!e5zanEqaZ1yEy9n3k$P6!tT?A@d&sjQlJ;+`LcvB*4qiMSl{WF53_xkWF!ymh(b zO}rPN!bmMKkQOPgC}!8mGQ8gdp{; zUN=#;(=GefQ+8Rq-L)l7zSIp9`MTVE!3o-uo=Dlv0S3${UR$!L(NLb^otv&E?&X{@ zmM5k-A^s}WT(qUJqv*B9)}nimvr*huv)xBVyL(UKuI}E%o!vc&z1>}jJGwg)w|93WZtD&w z_H<`8*Yibn2Zl%&Poj-UwAVARn0Hc-ch~K|!AyL)z&2uok2`z|9}d4UAM7Wlhr;=@oQ(59b)kj-i;rnBCthI?oAbkan$mB0M5 zxwp*`X#sEJs^d1b$njP}q0}Yw(=Edh;)>Zsda(sck6 z8S;}^&KjLY!Zrix_hcd!8AosN^aod%eco+|&BI&k3md%ZLjH2cMGfiqEV!<4THO;=J()s(mg^&boOGl>3}^tVvDm#+>BX%`kX1+mOw?3<{XC z-5G(t79?I!Z{xf3*4S7wPd4K{3}aY@oD8xfpJngbl8a>s&TV$y%1(c9ftl~wn8P-? zyU)8ZrwdHg8*>K1A!Vyz7wweWyG=2D2n3Yn$Dxq$ z;2Qz#vg0_&e4d1^9Q@^49EFbV!i87kY;5jcv(Rx!B)^Y3^P=+iEVvq*vpLj#WWj_J zaotM+vzJUg9BkBa$WhDL&Qw*>T&U;RE5}r|)b=UeSH8v^S0{XGTlWDBn0QSxUAtVJ z%F6HaMBd6}{~Mi}u0xKZbuGBVR;trorIJPqRHV_%&0-zyF66<=HARevAA>Rw6%P`R zy!sL*4n#2_Q(S2K$6vWs8-0{*4ngdXBJL3)w7pR@DJ+{NrjW_Gp}m~dPwL2t(3}HC zu7AW$&`x%Jh+gWGLr5|6NW*YulQQ0Q(?gM-zv8|-{o}B+_R5(|q^DwHS4YLgl&(1; zo``9V=c$jP%eFw6s*ZacOZY@id|YpiH||NM9aeEPtg?djA!98sWY4rsX3$7wGsC=X zNoan_5X02T3tM?P=NPA;F@)p8yv5q}c@hc(IFJ!bH*5^V?#3(!T}wJ_^v3R^F)_dO zMw{Bw?U>*`PmngGj%0Mpr$W2C!;F(uw$c@OHI){UDc)|V-sr$%Oeic-?PzwVn@3D+ zLsU;iB8?}+eUm$K`Y`J?v0HNFi0wPB$R~y)Xw-)oN6C~-rfM?X@NY5+BW*B|%+Zp~ zOt?h(c&8lHyK|ON#;%a9qdmrj!`OdWF$)^&*P|-@O_M$yWY*4?B>NEz;o|ty5G%P7jiTI(Y-r>haoq9fFk~MwhhZmS) z^Px9+Rdv_O4})FRA6nV<`YHpwuU;=m;mvPjqwVzj%&dlblr~bwRk15S++?o&&{}+l zzU-2B-*wLSPgcv#v+`%Cl^<^G3dG;7ysE@@|AcAbqnEwH6jfpyz_XQnY^{{6E!7`p zHJ+7!jiTN6?$DVjk@}=eN6`$sY~MmF?M^)>)Qb--^!TfFV&6i4m*katWCcH~MkmUC zK+>;bWScoxh^|ZI@}J6!-`%&c!)~h;K8<*@E)btNE@(&2S6i>&sRO6<7VYnn)4blI zm%1EAtk3S$MQIU>p5%_aFctHVys@z^yNezF{V*lWCPt+n*qvqmRgU0T`yy|Zq?}lT z3=TBL=-_8C9-*z~jgru$Gg8LK$<{ecat^A^gl0nyo^0AIXdHgn8Yl-Vl%G+oH)om7 zbt+c7C?=$_k2XogR>oS6)g=B4BpGRF6b~{>4wl?&B;pIpv7O?0O&C)TW}Bm)?Y03| zSR%*L_zii<7a5(Ht>iJpFP94t)f9{53))`m=Iz;d9le|yY`30Ys{i4ZB315`a0C=#Qf#869oZ-qIcG3?Ibw=1XAp7+J>T<>=4>p#$^hGb|CJ)ec|>@3{Uz{HUGKR0Bt44Dj<-`mq)J(j|NaJ}>i)4cyZM-L*jYdK?&rtNK`Vk3H3 ztOa-Ll*?ZGDRj;Y{hlZ6VHF7}B;`oRe&u;wTdPrx=z8nWY5%zNc_4wU7W5M}9 zbj}VZUbOp-xe*;?FHlIEqDFpn(>a|8D!-e4&8wDikG?9j$9<_Nyce>D2ygN(*g3s$ zM(>HAI%k;Y^LA7wyU1e??-Qo{e!>`>kA_H^&?BQPa{3W-aO_^wyhfGe9Xp1ROf8|% z6fQ{2*jlE0me{`k?DeMEN5(AoME0XCS*CqX&V&W2}(n2t=SEFTG1~$OL0kha$cUM)m@WVoG>i$DzG)WiR-wWAoE!c(&RLTx5arM z8`hl-I`gE&*PZ@ec&D7|Z==ezi1;Gc3x%6kUl(qy_Zsv}4!o_TdpREvF^U-a@#W7| zCLZp@gvg~jX;R95llxJMLq#!RiagT1*u4IQH<(^}Tn@Wuc%0cR+qyE9zx7(;T6yjI z#ny_=tyJdLvt!0*{poDSJjKmFsWC+-_AAg~mUF?N-TKn$RY4ai-iI^j~OIe7Y z7-4#u%Iu0TD({120`)JnlJ3(fCoORGz>&-B`}DNSBh_)yY+QvGbvbGxGN@76=1P@g zmZDbDOr&a&K}1%2igI|zYuYy^MP4-b=zaPMqm-|t?$c>8qE0`vPP<=Unkgq3!ID@r zGOhPUHT%hibJ-DF_ua1-%t`uTfms*7F$Z_bwozqrh(NfEO=#q7HuO{H*fn0wnVE8f z^-szrIkqco$WiN6w_A%Fbwt(AKB)=H3DE7q-zddVqrnlCq6ma0dy@yI;yy<)xH zs56V2StZ1sXN9qsUD=a3yRbe{Xj@ddI5u*QnUxnZQ&qMP>Oh;{us zefyQtuPM}7me4VN>T?J2etc|ENlBM@2XViWOU4dOHgaopFP5dA1<9d_42Gp17MWIV zqHyMZNt0fzKd{y}@#m7f+nqP}WeFQ|YTY5JVY|MPa6kL~$X5Lg>&+%T^^7CW2iP7= zoYa3r)_k|veoHrVJ?2xgG`OVSaILz^4e#r84(LU{{zx&|uS@vu^>b|tB8LRBul^Ra zYp)6v)LPGfjlb%{udgV?l0=PT^vHN6s2}s(saZ)l?cB+B?g~4%vkHC1diOzn`gmho?Z&2^ z&{%dLd@R#;uj}k;rrFh$M^#gJd^NnSv2VEw&(13hE6LKA2uoL3I@3t+vu?L^Mo}_- z*SJU07wMyLDH{wr-Wx_g zdsxpBWt#N}e=p)`8enu$HtVuSSO#DFz`FeronhNAu~$nO+_D5mksNzwW_L`IxV7&Q z>IMJ$2=!vW(tfDZ1n2!wFA7b&S?r(lx-vnPc*od=jBzhZ+ES{t@l!X9gREqF%MvlN z*JO*Oi&uTUcVahX}A6z{#yy5dLrsZau3^xx-L zuot*l6$=Bun!V;`VP!2Nyt&Qj zwOBJBdJKbx3-;Dy=oC7X5Jsoa(K%s0Q*qwXD}y?lzVe|nba+PDi$1h&3F~PUh+@FI&D!yNuaSGzWP*{&nRAFd(q$2hqo*jGp^;nVLX4lzs-2us$@+U zU0iK!$&rDSL8K2&nSZphH^LKrShCU4^XoP;Ux+`nQDA%OYYCZRQ`Hp%8I)xM?y!Ite>&g|%+8&bUn2&!tO|VO(Qudg9oz#rbkVX7kA$ zT5WJz%8*E19`eeNlrbccHfo~kr>~!FW(Z2Jx6(RTPa?y&Qu0uj%_Dbq$agvEwk%c~ z9XZU~rZvbxRPRUETkA**Mas%iq+Pbq>DxpdP9J5?OF5@sI`O}l?}mEGs^*qlHQ~wm znH*BQn&Ze_8NWugMfMe_Ko$oKQn#q3xRldXa8p*#uu-mdTjy-yGZt*HrmLaEx_%3vxknf+jW8;MXm`?KF!ld4gVr0gHCcSaFwDd$ZGEyupDmLu^KnPP zFL_*NTqQj@jSP`dkr9d>nN%i-IKUC-_p@VhCKKM)3h97jmHc7HQu)I{$qUn>A#TTh z`nXP89O+nbRC;98`&eb8C$z>3kv6<&URHD1aMDGx*32jLoQz{1Il>@cwipPd7H#+h zT2`}PdH-nL`h-rqL^|FV%%zv})eo^jT+3VlC_Ho-p0XZi7HwDJ?|0ycJ;=hWp z{}pS=ljsc>>iDnwW$XX4e)Ob1D^{)+ap&xfCz)ijKq{|&ZNqk++KWnAIQ?=9vJcV}| z*?5-NrxHH%e#6@Jl+K*9WaAv}l{jxUAF!NbnfJraOXqOgd1igQ!7;>3Sb%dIoflMA z!qc1$I|e@N9=cT<6PMJj1*F^7FAJ;U92G^Ui&G=#xsJoeAkGml`#1JiMTVJl*wJMN z=k3+f2L- zXY(p&5<kI(ji zj-iNIJwXP+!%$H-CBxt{JPyQo^_}_8+6^RQEGN`wpFcKCyEws*kMxQlvXx9rl z=EW~|`!C+toqqA|?$nESbthlEv)gxZZ+GIwJG$d9-rnuKcw4u+*t+i-off+KN#}T_ z%-GRXVQg&j8@#+;Jh2xJ!cG}xOO9Y9Z?3VWyWH4K-kv7;46e-B)%273GAv&6dy5FF1Opa2h6Usc*o&&bwl__9k8zJ z=G6MMTSQ=SHgCs{O)+!yQeW% zn(8=Ws|;qYs|7Q;l-sFybVtfc-!qwGWA9{k$^5wQRxZ6xLop!QR<4HaU;-CL&Pd~2 z^_`k^ay%-AAaV`+*s>cN0J(1N=w`p3)L-I%D zm-kXMt;P}Re?L4y6fQ-0WADsuJZ?KiBT`AAEwYSM8(GbNH3EAwjQTrM)XV=kRf+1~ z)p)8B3m|#r+}8WB_1QL^a#bl-NtlvV+s`!Ya~TuHkMfp?uL^SIGsXn|?3k2&lBpwk z+VB+!qTu|E4Uca-?2Ky|B7@^aV`oT$X#w5McWO`9}XFd+^-f- zS38U&y4o1fyPC>BR`I9g^Ce@oqjjQfqG`pP159o!8Sl3+A{tkv=Gsf(_eEB=Y^#l> z)FJYaJhD_u+;_gSRNnMLBwuKl+2ec_?>oPw>*zau-NHbR-q{qX;6Kfve>a5AJcq);1v;9*pTTh+{!2k12XdGaleqYY*#OK z=)E`3H07druNE)7&luIt`*+#&&rA?0#hdR;cBCb?M`}9#dF)-L+Nb0`q{&07&Njo%*BDtIzT!6--5R zp^vaI@WeB0%iVCnHgv=dpT<^vl^f24Ug?IfAslqWV{+xn4gZ4E)*3f_9Y^fdZuqUu z0j`a@=LS1DTJ^gL56Y)tZn*qa4jl*!bKdgHyOGddH+(8m8FIrj z2_GQL$r$hK0|oIe6Iau~n49NcFx2IS+hL;D4X@yg*(>>LD7*p@DYx)zea`8KF!3OV z%3dQQ|gBMUgE&U4Zp=n6Zcl^ zdPWIXxZ&6bxHzXbF0m7~AcR3T;pg=AsN3+P^mWt?Uqt_s-8?rTz7@L~PjGY|1IG;Q%wa$J{Uz#8vA_bZ=`4Gvv`#H{iQ2OVdj>D&n?8&O=v8dndFLDZ}b!A4*1CoKcNm?9^kO|AIcv_{pes`3pK@@re}(!({I6 zqkw$AR;~P9KSQWT^!Dz^9%{DBV1&-Mv(LStmn6yZCj(VyGiIgi!w>z5J0K#I8;(T= z$y%~cr)5Oaq^;<7s+{t7@8e|awm({r@6*>O$QOFP3+*rTGG5eoF6o$mUZa@b4^LsO z;l-MmUMCzh#OylZFoPkVV4uf8aH){b(Y1Parl6#YId%u;;}><2apZMtW*>XIQG_n9 zyGQu;NKWkcBab|T`(uBxuIxi$dy1?LeR}51&iR4n!+J;42Z@fb2crgL%b&%y9d<6M z6C9RWzN}Ji}X4#fBj*GU-RFg za8$0fC}!Os{%Sq-vR-6#659Kv zSH7YzSs>cyHJ%!yPfBzLdE93dU z2>;W}u-<0ZA!U;#UxU(^mO1@;W_BdcA814BjLthMyiVku70KJ@@+wn`J~W@}_Tl&e z6O(j_#h+EE8)qb|aG80Bi*v|KPmdKy+s7El^SjpFnbKb{* z<)mxtt3TFRUy9g+#7`V1WNucftj3@#d8zQP$HFODYyt-G*Q64BuEwuS3VO5Z>uncV zq{UfS{w3B=eypdTx%^fc^jNcel4EO~B4%Sgrb5n$`)LI-4B4Q+*1WFO(p_WQ&JrylQGE!=lT8h>xRZ715UTd#pptOD8|N6NuuF2ke z9iR2AXFcb2&jC=5(+6|W%Jkyp4*Baj0?OrQ2kcS8(;wamMqxNuigH?(qa z9!MDn6vAjZ%2T295fnQ}D}I-I~fWP$m)as8l9W*^tLL5C&MB z|GeiP)xl!RSJ>B`h%e2T;~zGSL8>89Epktwy?BlWdwBO9<7~P}M7fwM%_@F8TWjXJyJX1rKTkJ--!9UkC{!Q`q zSkBbTxpb}pKm6J;V_fvkFv|^!$S`Ie141%0 zjo>aTmPld*@&D{=&^A+V#OG^W(Y7<=nSDW*J3Vd#)Cgg{@+xUiiXt%Eq5fG8r_D8v-vz1I z>jSKBpgy-;ntvvcF_4PPF{#tVjM}xbs|yE-?Hd)yMC2EkGGMvH;W8?zWx9p78qR6# zRM$5Y7Ju%zZyA1rlL}*UdLrH^sUIhMF2ZdC!fge@?TYklXT81O?cUz{c~AHAZ2e+& z_Y3`eE~MZHgITAJ-yWF)rIu&>&WJ&fn`*g__eV}U*f^zjcccY>7X>snbH^;lbJ(~0 z^j-g?2o82)#0_unD06kFl3aqA-c#_f(A z8MmIq0y@ogZA)RSUkt@fF1AdgwE=lUzHbG0OqrIF@4 zjYhuxgC9f6>>7~3cXK>H}l6KBO{pex#PCB%>{Jhk^EOe zvp6@6Ba&+$5t4d9D)I|)z1k$Ru>!Nkt(P;$$@_l`Kd!%iAz%EhT~ZQ{izMZz!IouO zIk*ei0-~>rw8L-K^1&K~^eHu$3G1d>89Z!1DvqC)FCGSKiFQsLwri4(pXLP9{dg|> z9sJAEE9CvZ1ILisAvgZcUeYj0p%%@D17TgVpy!PV_-VD_d<3VrwrvgS+sy5RZ+y?^ z8!Tj#`47+S9{6haPlL6r8dq=VFdX)=0sRq198*_US}*(oDdx1?c*HL1{U<0x$(x;$ z?;WwfWgnAQzGvr(2ZqZT??E8L@0$1Qg0#fH>ow~cf;{}5U7NxKZ6QFN>q)g1j*~@4 z?aTTCuajW+Kz zIxJ%#%fE>(@z0!{ekUh%+8J(slf^MRlk0O&C)OF0+1qL7)KoZWgNRFwmaUMNC$!tT zzL_{MhNmwSjyzp$D^NJkc~%uHkL)bFQEq$R9&-`FGaj#@Q1e#->;xxKzF77>W)E|4q)1Ex&K$D~Dm64S{9h~7 zkQnL+09+-cKZeh#UOBGRlYk@%^%oBGTO$*M|Aaql$HV`B z0q_4QxWE4YGrZ-j_wC$&4QG#mvz&O`9+F1RkLsDgDZ}~6Wyj%{WjMb%&h}ae_l{L? zE?VF`lM1JHo9}#0hr05BGj4x>m;nkvOa@oT!^hz_jWh#I(3f@V@Qmm=%n=&(fiH9Z zU@yAT2=qp@p}w#Q$KNT4G(0_yJEy@WxDDb|YXi}4!-;{Ez5Cmi%isLL9@fA^i-(1= zN=$^S+qH0cYsA4aA8wdSaTqSf=}1P^SSrlnbD=WE_{aTaSb_`D{+dfj?>ESX5A2%- zvbP=mz|Qz);aBacV0+JhSmC<|FFH4HU^j+E0Ng@z1=I=(4}F&|ag9CIhGvev_uZG9V?&QZ;- zCn%YlE3(WPRx!)soLJ&KFND+dFwct?m^`Z(LtABSkbnH6-M45f*5ajp3Dz)l7DRI2UKm-=sHz zL7P%57yQXy(eSU@r#9nXYC+UNyW2Tv<8=i3pf!7(ghe05@ntlt;*^nhd~Ej@i_XY3 zAKMw-zjx|q+3_)S&{S}jItym_U9!2CIq$e&l^L-5l+_TQEpA|HXbJ$DogHd!#y2 z*q#~F@@iRo3Va|mcgs$}?Ro1zVIua6oXwO(_9KoIH8Tu1kr3k9W17 z*hO{czJswEmhxHufKGcggk#K|-`_=B>D_J72e+4>))y!Spa{`B5K`p+PvAO5D?5+p zMtno|N5OOLLsv<@IlCa3siR{y;7ETDt^)%CO*@?1%ZQpDkKoCfD5C@QLW-xUhbJBP-%r6WT5L%G1LwkIm)c4l8)F8{o#bCcs^C$`S6MJfsx^R z+DgwH4K~sDlmZbY0mE=a0WL}f@jiga6iGajd0*Il8DI(~DT^<*tl=WkDmLjHtw4n?Zwv{ANTF)^V+=53aJac)sz=EpIh4FixBuNvYrup(%y-uF-Ye>y zvV<(M07O^@xgpLeQ+&4Q5=RK_+^OYf$vPKp7@}i*E9p*? z>X;RXw!?K%9{mb)E3`I)yAG|z94l1@Sj1c#bqSrBCn5mBLS&r@lK!5vu*DYhubnDm zy+6X`iX7rZOQ%Q=BQ2I6&-_+_lvrNp?+0+<(GcfvMpb2+u&mMu9BP~o%TXv5e_Pht z?o56(*D^CCjbey_gv(1Wh`@KB^WCq$ht>Cq>ihI_zI)a8`nd1aD+gE&TA5jDA8 zvm>TiWNZ>UVvr{6or)wv4tb~xoT0I%aQ`yxO(q03?E)X8R=K zP^^0r-hVTR5fo{?=goo*^sITi_{llhAls!(6T@ZfA9is@>5pstNsZMY9qEmEX^ zhL>S9!LxQ*-I(>Hah6~#n1&BC!P<&Haaq&vuU~ifqv&R{+nTY`&9rgqo4uDt5ntvUhnt-#TNg>R|(Q4L)7Z4b5SH9r~)WQayB>jy19E2b#3ZQbLi-vCY_|D_Pt zzlGDd%lcDsvUN*;uhknd?KAt^R+2x~^}he{u8;6-=m;Mavg+c@&*&iZiArK1LSE@=Vf=+y%r?4$! zSbJ|&hNil_^5e5mf+7ewu?w+)h|8PTW!JbCBB*yqmp#<=J^azxW#2BE?T72c1hLD0 z_)&3>c-NNMwg{HJ-`zBPyFACx1%2b~%HOUH`nNh+G6?5U?wIVj;CdwZ3-H_3l?vuqp0Lqp{ylP@5IG)x59Eg}hV5i#+=_#mv?c_$ zR|~^w2x*hA2=SVIL_X{ic`8RQ6BC-WAROQ*b&P@&J|YjhL_zQ-crKfq5ikg=1!K9@ zKka${sE`G2QGl2Wxh6$qmr*KWWH*(kny&;hIns&GlZJiajp{vOiM?u4*kM9$c8e;u zal$RKQo7p!iv?5ZD_@BT$samp0nK$XyjNt($Nu6@lFbPsC21VS$#|4wFUgGwqA2M_ zzjosI679lAsQ61E%M(S>sP$=%eI1 zm)>NIASaRP*~*qU?vyb(EN*hil3rp?+We2~<`Re2fYQ>za7!;SP0asDrg+2*#slLy zTef(Fx8dc{%Moh399gAuEt)t`dCSGvo%vRDy)lTJOt+lC1CIy%lfd74db$0Oi`9Y$ zq9KdlD)*Q)DIqHl--bX7X(7{g67v4>dvW)7@ZdK2 zZ!8Q4nb;v`B#9h!C|4wjqO?*sCvXToA+VP5X_N)mv7jawG<5kc`yx17{RyeWR< zmce9E(6AgyN-~ipL+4cp3okUs*iaaU2Ex@(8rX)rFQQ|=f8N&fJ~^)Zh^Kqr!?RM& zhvm!T-UF!%`7URD;2I~tO<2I%h5R;pQU&XK8qtkgYN0QSdmrEU7cDF=v-*nc-bEdG z3NXiHbzgBw+JWbT;43z$d_If__9Vy!eMMb^CvKtdf-83tJZQ}YU)Mc!ZXE$wfKONE z1@c%(w}VYotb$n%#N`djck%|YAI^`-Z48lu*H|Hw*-XUg4kNIvND)^;4wOqknG&0R zsNyjG*Hr3SOo9k;Z33xO4tccFw0ank;MkYq8n)?fWFm*o)W*3&9Rvr!zZnc4KNz9{nU2e!80&uo8J+mt z8(GIv!7ToL5decI@<(2hSpzV+b1qTtHVz6g5>Wj*z>KeZfT%H;@0Hh*! zku8VMtZ%})F(CQA_ z4eoS*c|ZjVQR8wgY*^#1t@4(EVqnA4k4E^v{xwv((N`LBq>j%avgA8|S0XS2Jhl>F z-huc+0|XmhkNAX2=kJV{dooyj`hw12VS}_!46SYcsGBb*c-mdud@Trc_Gs0_pmTQ0 zU%N^blKi=sOvwPlvuu$p&%lluy--fh5Oqab_t5UD>P192ny0ZjBuX8_0ij4Jk&8p! z*D}QYFip#;gT$Pad<4N#nSzLbEjRU&Zw^BH_;z-XD9JM4hNRYS(ciiI8Tc&gGDX&; zH&uT%n0$|K*t2-YRZ?a!XcGCic?UY(?L%f+w>DRv^E{J5(z`Ojj3Kkd=b2)1k#O4T zp&A#?i1HWU>0pmsauGI|p%5P2dH7WqqDb*i!^2X}<(sgv%>`40+jv~ZGT5WXe8GN- zL+WUHrF$=UyRQqoK)t~iOxf}~RL0~=vc$CVB=~0s^4D7X?zfTqBoR4KUTMnp1hM;l zg%BIN4^$5BPY?M0w>X1Cg#4>nA}f(~UcO(R$Pz{6)QVv{D8arTCc5u_$OT~C@w)|i zSDJb`j(jwUQC{X{#8fQcCX7jg#re>u>8{Wa-|FkFRUUbAFhl`-PZ=VnU16f3 z3k~%Fl`@I9^*eo@FWXdt@FnJ8+^HzoU*r=*#4sn*VmolJUhyhxKs*@$4W?WPus+W{ zz)9Yu62|wa%278^e^>Z!GM@h4VMvcSpg5|2`};LBkM=>sOrSIg-b4_*8|-cJ>lceF z`o9SUuI9*j6ejow$(!9`kYdbxp)V~g$o&_KBGIR}JbAIG8qO$^1TeZ(LY8(^D-Y*s zcqZdm+7XIA2A|2tTu-Q}(*0zzyg6H3lGHC#t%g`~rCgB>RQ&iLR1u&FT*;*ozkg|O zjb^x+RiWiL=b2@m+ZgaC!&Q(LfGaSplg_Off5!1DjSL6hcWSZ8#7 zEjzI6f(MwFE>2xDr{m40Spx!z=c?cw6!jgZ}BtnxA8-M(Ha}Icg znZyO_LdfZ^J1SjQ-i&xXj*@9KA>Hk|L`=>K0U89{!bCm#$w*ODiW!c%RR+DlzkZpr zmcK|FGYh|$1|HTK2KKEUfpXiGc7J4trp6q|!@udFz@Nx%UXd$WZjpz)qQuE`=LHUi zkn>Vz_`pj;qgw70SxH*s5TcYljqjnAxW^}^X5TUaCNbB>Jg}e&4+#S<;`JDIc9Q&( zb@{wvxq8md5gAFnk@*u-0DY5HIbvDW(&~ITpi_68r+(?3L4AK)mV<_lYXr*>-%^2J zq*Z(_?2upPi0sK{uR#Dgkm0biHZziJS7eBf56Ts}qC|X@CHLlv?4*w{u5@Ta()-9` zxnhOAN8auim)MWW`}|@=2@Pejt|x-V@D{@5V4MjJYU815B5|QcD1@HJ>YO|${UW2> zw0bSdylwfQ@_!PsXL_c8#%ws_xm~_se0`nSTUG@yN{nuD04syvB>|DuKfRBxW1tq2 z_vMPgvOOTuS>_PRHkdxSY8U@F2x-#oPX@0LK>88$jr9o~{!$_u0zVEUh>iHcLrz2= zA0Hgv!unOaHI%!$@=Mvy0SC$g^XB)<@cnW8{&r8X`hLnvkexx1Fo{bMzy@HUKkm?j zNW~yn(R^b^%y1m2Go;9Mg%e5WH>?a;8-Y4%U|S+{$)hq0+92hr17Qk7GKVZ z7GG|qa5zsb;sn5gnTUZ;ZA-4<_Stb8$jk1yU!K?UEQWg7`AehNLcs>NwV5rDRc_=OY=O8o(bI8tD}s6+DG)2tc7Y6qtogy~tcAgVGE2##Vb~O#Ss8{Sb0?4q zrc8B6Tzrz_Js#Y!2EAbj_-d50T2~iUSAcOLN7MX?!Lm&(XpqiObK(7pIN~79l=UPC z`5}wJREXG@zaA!fUv#EC&^^m{U?eoie?)#VOk5I2s-x7$WfzL9pmB*X9+aAuYj^Qp z;y-njsB^S_x13f85=`Ni0v`n8WvJWD3Lfx+>&b!e=+!P3WcH1Ykna(nsm!Jayjvqo zxW@%EN8c6*3RJVGxq^V~@gNk!qrE#RU;-`tyZccw+LKB480|21 z5UwIn-&$3A1fpSBky>UU&>0A#I6crXQxNDEG0_Na0~=>^5e^iH7_SwHj1qFtVKmCJ zA2#_RgxbkBSsPU24}f#za|q9kmzXt|8JCGI7u}0^a3kl9K+L@{WrgK?mx)0^CI;|g z3$R({1uzz^WJG_%qNU#V+bpw+MZwgb6|RPrS@?fy>s*_plZ@hNv$asbGZb8@5)jPx z9Vj#`1JM{zbGM2#p`K&)#XER8=bB=%sHkrWY#{KZYQ$v&6TzXFDW7(O-Hdy-z@z~@ zHN(X+_o;)kR>~t~P<0;}E|O<(S-7UgC&+aPZpAxTzm7xPgrI}locojP z4o+W5XDKkyYUuPgVp~%kwT#p4{t==?XOe6wK@{?)a=EueY@BAigebwFC8x&`%BO%W zEw8>DYKwJkUN9B_GH&ER9LAn73`!d!Oh2m;s$N{>c;<|Orii`w^twgh-qv}gI9qvF zE0tXcW$3=Q72cI?Goed=K1Hr8g=h=_y;dqFvrcfNnA2d?f3Rh%*#UPV#2I!$@z#ui z&s1F851PR=H^8Y#{GE&7*WIej>JZ9>EI-Ch>5TM@q<}luIApRe`+yhI*Si~~BgQCv zP!ootpAMCKJUaGh^~D?V{)ekStxT+$LGK|BrU&WuK(0P}T{`T;;wBJ0ekXRbzyI?i z5J_ip{V&Ew%;Du4lDkY~~E@}wOb(f31wMJ8yVBM%F1N-NM7smC& z34ekO={c%V@xDtoKE(bFfUCF2b)!VN3h+F5@Z9mZQI2iK9`cu-Kc@$}u2X%Q@l!h( zUxoz!{Q2(0e5qS0#v+;Pbe;MQus|iibf!D>uJtRmD_8yBHGIIkO(|_i{5?5H+m)k9 z-&NniNxBP@8KueOp;el*I)uy{`dTlqx&((OHG$F5T|K*%NKqAcZQ zl*{j_yT4py52Qf13U?+@s9WXMgOAEj%EbVceuCy*w{_i?-&r&7`D~CzE()3)^Ny`S z|Kh=#M8SuX_hvAb?^$mUUW-mGdb z40$&1w0oE0VEA62b?xeSSdZ_U2Jg>Xt?r#@ch&1@?ni$aA3(@Wx2A1LwZ5@sCMk!? zwIn~S5R)znJdB(#PXBaDAh*N*K9M(9ib3{M^3Fr5IGN5itGY2 z3S}OJpp*b}0TxBk4BC$n=QLKkfz@nt34MTn+7e4Un0F5Ap25p)Jl{Y}D}72OF7b3mNzW~~;SB?W| zh<0OXQzEZ}6}T?;+_DBK&5BxBxt2s++YTn;G!TnpX-wRh_XvI|%D&r$q<0pQ-hokY z7~_6ckwe_$IpoJii<#h%dp!dVIWZ(=HI(4&0`0PRhVhqY76ovGuy=Fug~)oAjuVIe zCh$~*_EoRzm@sLff?xvHx823R$vx($ z!5Ls{7?&l#Gl0M5n=%eL<*4sYLE5NVW;pZSB_0E$nt(^}+MQ4XKAu4<*P>52v(Br5 znj4JF{WZ`A;dgV5n3`omWM?~SM8&Uz1BKc;dyJ?P_oT@=V?;sHvkuf(q{%g7M6l{H zJX0oFfiZIB=ZhyIR8y<>P<8dRqwVu_!~V6Ch+u!36l1|RK36Y;V@0_*TrX#g6=e-< z%Y}JlSksk!_=3|moF~-t0p~d%kuR_vz(3XJ4y^Wer?JB!3YA+-1opJMJSgkOe%I$c zZv;^SZ1*wyGZ5m#s=aPmV?eSCl=lq>l@&X7r7XA#I`pp%kaMoWfNyzfHsy03xY!9(>!BwM+C zfLt<8l$m^UbYyMl$v4NtTsyMnBeUSZIB(D54(%I$uJX&@lnh4!vo}qKL`vIaT}5&A zd=n0(P#O%#ZaCDQx34Ftjr|$YF<>KC`ZI^(3Iw2)Y z*)>hc?hiY&E5!MeYb{W`Im@uDg~cEnxYR3mT_ef_J^inNZxHFjYDFJ31rM~;3vc<_ zW`ttb^^oq5`!GvlFnAtr;)9Q(Sc5$_C?!HJ?EgLH-vq>NGu8rjo-P&Q2zGeus8 z{B)uS<`@E$m!X$53bPOE9Ws%~V4Y@Vd{I|pATKb$1OX`9OLZmxA?GiOxzI7U8qy%%{e9^8{|< z)I7JJq^KC+3q+#=H!4MDVQDuWZWG5i6*^@<1(qi1+K=lcp>n4k;8g_JX zTt|O)F5EO733PP+pjoFDvXG8fkgrY##Hn-(tPZPCS*{MnaQFzr+_xR9D(qMxKhHy1~yzGEqw*A$0 zv0Qbd7*ent-2-Mo(^Nl)vjNX^jD_QCH)W?A!t#Ui@QornxZ$AodC->!_4rS9b=?tk z;~d-reP7ccnLS06$DcA|&p&0D{c1{u4J#-!sJc~{MUpp19R{2Z4+IYRdg}E6hA9;Z z&9Wuz@`_90hB8HD1gF3+-vnncyDb8{noW8m){G0*xZ(U@4SuI)n6aOq9UK!qv_9Zx zeJ;SW>uP{muF9nRYU|h=v+%d5yymApNW#%nLVGLg(?$9tr$wr4{ieuIq-hLhvBTdK zMP=SI&*dF)J>T}OYk%9@uH9{~yLPp8xWF*DcDB9j+R@hT+TOO$wXJQB3zu(4V^&~m zJAJsTrcxOS&loz1BsJP<-F3Tm@&S0uAYof1kcoQ&Gkqc{Ji~g#;iDJ37=5mNIYMC2 zro=sa@q7SYNM#pMOnV}aS~=nb-z|oqa2MWBfenqjxV6gH(DYrPfxD<|9$bq0t2BSuoV&e={t{g|+x*UU9`_N+7Iw%2L zm8Cyk1P%VgVqzG*GVl%eX|8Qsj9;ypYru7o(8C$`jcpsWe$K+7YguQTlTIBKl;-s% zh7`L(3QhCl-Wh8koy1K!p=O;8fiN3-J*`^0J5y74fFtby-doo4=EMevqwzbH394-C zg}kIwITl77>Fw+b=88{r%F@Z49kFbZQ?|gfO!Qg(f~!xcVPC#Uo(;1na0OoI-rUBpxy&v zBS72;5I6!vjsT$}KbRlFp3I+mDSvsh$emks5z$C<`dp-_x{55M=1G8SjY1gue0|wsx2{7iM%bAX=rfOX zz!&3>U>*_7CxUrJFh2#)@qnjHz0^H0=uC%16^!*N`TJq@u z;vxhCt$XMT$47xEf_zwN`?K<7jGU{&zXP~~Qjajyt*Idd3}ilVTsv4+ucS9_B}2|i zdeurY=fAQ%H0BJ)O8R?N63!EEI}OcTj9Ytd_mv_K(q;=+e2v9m&UE?q%Fqq2iyNG^ zV{i1L`z^$7M2e|(OR=uk2O&^{7oQp@xcT<(;Ar^gkat(9Ij~e_4T;x2PpNob zt(P~t5N+Q%*H_xh@@<|qT~yAzwWic%SYIeQnNz})F9U~j(dPEol)6%Z(3 z?|n}%dR%;iSA;Maz1a2Qe^U3~44`2z2Y}rBK_VM{m^o9I1A$l3d2Y*fmfk)1-V(yh ztAm$d=0>j*@LHI;MpW3yF!MB_2knjiyTJhq_X2ko-0#YkZ-4B{D2po2!7Ktif}BOT zPVECTv}EVKJ4+8ucHAt6_y^&M4aN^Nih-`}@)agIgjALEnvxe9Hn1Z~cm9jy6WpMMvy2+alCy1Y9V zz2!KldByj$?4e54@t=hGxe(@c)aMP;MS7we3T{|n=S>$G*YAFPIBAxeC&wdj@b~?9 z<8gG=XB`p14KG*4aDusXG#m0;>0+S#c)Cax-VS*dy$FAY%$OmHGSWM~{a|WG(}UIm zkJaw&_q`;`LwA^|GeoWE%#!P7h`KZ?yZUh_=7$wuhwo=+h@2cs%+%B+4%P=SC_6^o zjyqXmfDrvIWX&xQr_kq`Td+dtbMGx;0{VOgeZKafRn9&==(7*|%$_M~vhP4!uXio? zKi~C!klaNU_JWD#zGJXlHWTgO_tBYfADcf|zB&`GG^`V#vSG0Nbf$Pj{AjSe|5mXv z!;3J|m--2-rXRwEz_sug#u#d6iK1XS(&8t90rbr-umi;(Sh=HY+vl-u&Of!o^I(^C z`$&xG(OJ-Mof<4Zm<2zNe+-scw~4ZB!h`N=#LQuU0e{nnXc#bn=r$1ynn3Zoiw!?P z2bf?}rZv9F!dU4(1iz8Jw~4CjOc`qEQ>}^kJ|1IBL;2d~A&OygV`s2DUB-I(Uuk2T zZWtXlK*#(9jEd{qKGTnotRJNIkuIZLdl0*q+4W^k23FhU| zcLZ;+Zc|DY)`NP08%u3)Q;&Y~sMpJ>C`)dK7>&DGC*KaaWEJ2TXr%T^cLF&V));Sh z2jo&w_ED6reGOjzoUaLyyavQ80W3Fnd)T=*CgrE4>Xfm-ZaHy0VkF9Co}tF5o`GLy zZwHRPG(=9F10BP!hsZT^L{|1k7)R!r0sc?%3#r6!p7{=!v>uuRmEW3+WyZHfP6;O( zR@6yTGES6K%{b7^2e1H4WH89FUhf+2PZ%QSd|L!38KBWa^<(5NF?enqa#+u_aiQ;A zSmWkK{D8jZ*tel81rBD<6~PJGU9(=LVdVHN>$7!H=<#oY9-o=hyp}c`odom2cv~>q zSX6y5@Y@jQ`_8BMU9Lo%B|Dn^e#Qr9smEzDJg2H+vEPaBsFO`;M5FZ&mbMh?ojf4fC2Je?s?#h$gS846hVO z+wvWeKaK7V#?`^?%pMzh-QjG_^A5IrD=)*g>1}B@fg#}d<4|oNbyH|yjkikok2{ly*(1O&@%J5gJS628Lu0Pbs2(e|SDZz^?3Cq< z(N@W{vhog*o<(OWpQ9}z!t^*($vJn3tbgS-b%7ZEbG@eCg9`Z4OLW(4mmXC+u~K`W z$=au5q+RWnP7J|#{wp1&9?O~=I(XR)pZ(4SIEBh*vlotU&+f|>ilKH2b;ik{D=Y;M z%2{_pO9v%y^PQqRrLbdLlW+A{NZivc(6mE$!aYtaaYN#OGcp3@EOcW0ZIFRQa8$*q zRJTZ!C$&P6uVF8n7m1AAov#P5Yc+g%<{GO2tMWX3@~6 zO%8w|p!B0`E;w}yy>c49@plQ!6jBchB1w7^fZc=_~;e4gpn zOVA>7vSR!_^K&O|43&cFHJi1tH%w`{z81-#K zd->fL*|1iRaO^9puXX=d%qvRmsC$s-{n@U*0B8!p-t^#$4at^oam22v?`Mhn`@R#Z z$Ft{d8#}OS3C$RQdd+v?4ab8n4Mc{6L+1;=E27uP$^W-uk=CQEd@f3 zXaf4b`CU=up;;~v3JF=?GPczm@EvII|igXCr3o z_aWKP050atQjzJ=wczGff0HX+7Jp9^*YXfuYHfhH7*YT<-lpjtBh`V*1CvCO;)7Z= zh^>RVeS-TVk%6ZfbKUqom}E#@h5+kuYOYKM<+&F1j8E{hm}{wZmBJ|F%$bevK&vmm zC$b9IHkltc+S}0eWRU&dgzu_P^i7=rld&M}Wz{lKbS2H(Q@}(K&6;tY^$qyD3x7kN zDxK@RUyR_Fh0fpK`hibn+fwD_Q_Dnda0fomc0Qkc+6U!`ZthLoH3BCl)pX`c`ROuI zd(mW6r^bfWLo0p$vCiKo46-~D8%$R9S4sz9zrt;MWm<5wY z$rJd^qKhY#Sj}_?`iXT_(71VKm&u&4s2WHpLI>i{&e3fVf*JCY=RkPx3yT4C_goVe z**=}>Atp{a#CH#lof~smM?>AI^GR3?%3zxrXwz+d-rR^IrV(ZDyhUc;EwXA;;mf)Q z0TBV1<9TdmpgxXV@ge+G)2&`O1KM3&ebYuyeWG2vSg6!La@pOYyzfisA4&(&J?4S( z@ZBOsojbb!9h+kW?SO$IS(hmI@Jf4odq-6Ki{9xvmV zdR+(}Ke|T@_@)`x9*fQtF|mo;0ooi5`{7MW!E(WQg+)2zvfw~r+PDDB*~bj?{h#|7 zg!TOdE)VVJ!0t#l?EblryRqi!Rw8)E_nV)`4kw(mb7b@PMMi_sV}zVFy%cbn44i7T z);_7>tYJRa`99lGy|MqVIqzo1y&Lbmn;7@*i1Ti2+`D)5yFpeX{L}V;4=HsLL3n`- zcjw6R<)W%?yh1L^(u-VgVIkqC5fh71_T5{xfASfpaSnWnGw^Dw9cnELbhX`e1L`0Y z_{HTS$KE0Tuw3K?cieaPYG;nPXE@rn75~AaN60Si1g^|ff6J14AzEQ5OYQ~Uke}8= z(|e>{4Xr;Y#uJfK!{z>a;Q|L2l@s?u%(>3llkK@OZ3Uvmxc{24H{b250zdAC+boVC zxUk@8nzjP$DSp?i0Ba5WdvOJ^jFi;jh8M*HjzT@4Q>!Dy?$86RK>Sh z*9cJxzD~;;MMe$x>|%JY5&YeI7Jlf!CE%9YvzSw?8?R&PeWJoQ;vdF*s1dN~fulUz zcmcRVHS8}}qEvrBj-HzPFgDP$IrnM!G~XvCO~oE=PPbh6&pGXY8)Cr!S=U(XUpqMg zb0x`)_owHaO}{ior^6VXjy??gPBA36aUE!gEWaP?2r+op{UWCv$8M7dHGao8{%YG- zyiwF#*T+ilSdM-4L{qF+-Ec7nSxHVmGu#*IZRZxhX$8h_w%fgPzK2uy#rtt|e&v^G z55PRzJ0R;G5GCrgVkC*C6C*$awajHihg{q+N1y#n1y3(stpQKD{Q;yB04&m)#LC3Q z%>m>(lAD`EdG-$VH}_{q^m4WV=YA3q=O`l{6q6DcJ*EDh`XElc4RA;;KsNL~=w~L( zKr;b@KDbDa^@pj{vtWC0tRpe-8q`HzCDvv8UU73=`#<~PxhAQmxNq*bI;-N|KMg&u zX{#gd{lI5>-XDy6U+_$zp}WG{aUV9R$>~A8ANPJ|T*nS^QJnV4%{?8w5m&wkcwQ0T zu?8O7Z}5tr$5lv(Yv>Pg?EP42_n}D7dpNOntH7JLlYR9nukAj-)?YaGA#=l$ zu_?ZBX;70IElE@4?~gQhIn6rZc}{DMV^*O~42E$yv((As5mB6!*_roD3oe(>?3CFp zB74RRB+G-6^_jPv23di$j_ba{>79nXRM0)s8EA#dtUd)-RK5{65ObHQdFOP#rbSFk z%CH=h#-ab!#izWB(XW({JM1G54VMw4(zsnTeawAs&x@LaPm8YkZJ2 zkiH7$WtuE=F4c7I-_&iWeBmd$a`5qgU)kt?dK%-V#O4G4&%=>|CWrV`g>fBa%1Eld_^4ubqt%Pm5 zv_oHl`mtktedw9tsx#iumAat>Hpvm+d7xIG2jkje|6H zO|BUJNAPZ>l9x6in_xno#x)kC40QyN8vm+8>3!3kF6TcaDoK^LJOlx%#wTBWNZgZU zE&^HT>cRInun#6B$XTo4XvWB&5CGH&-;Pn%hBk7Je8=zz`g;_g_pTl9^1I*3S67Lg zNi6S0c@DK;PnG)Jw|cnW4_>?0`y;z&)br|ZD z4q5du=72mRQ}LTc6$2MI=)f<4MdyhPCZhRak)ghO@VzkZJCu85GWMJAtX~xOy-L7ayq&GXvPz6-FYKl|et=GnE99HiQ&jE1k@{1oSdkvSK(|LvhJJ zhM@eC0=l6<6X)C_?REgcI%09Mom~4k+(%qH@)i_HI1iSk?ORRNUkE&Sf|B~cb4-;8 ztNU@jLjYad@(x`p??Kt#2X;FvE?yaRe(X41G zO=&$wTyJU1=~c*`!hOyNK7x_oSm(Zn`w(2T zK#-n*UV&)BHhS7z7eRgbUyq4E(U0KYY&yLS17u+~I5G|xy{zwVa#>e3j@&1=JSGYf z+kdH$;^<@Wt6|4(ID}ZP3wLZGsQ%E4GV3Rzq-bGWUysK1m3e`_GF4yM;v0$b(Vsx< z9{j4F{1oB#Q?t%-npgvlp&gTto;UeSXYyv^hlk29e#t2%|1-AN4m+b}k9BZ3@7o%J z!_B$zyDcj8LSOPg56m4p)5rQRXHp9V^!4eI3Q=Vgc*T ziNaG!Kg&6&Kk$#cO>q54e^l&Jr^^Ys_Hi+ohsFNKMb<1H7G&bOkx6L|V~V-sA<>h> z@-`6pc2^JKj*5`8QTtfxoA8=VkK_nPyF#G9*DGQV_*NlkFY7iSH`k{UG}ho7gKa)6 zkn^HqLiQ(UuQynF^UEpEzK?`rLmoE&;V42@dWeKfS_^UPVYJzZHbF;A)*?&W5AZx+ zKhMGQz=ckq?2qJ`(WUM3%C#aliNk5vMGvEBT|1ooxOYs^gBT8r!$nLM|P&I9}tviCDwF9j1Qv=j?YrC&R z(Oc$F>%F`Td97X)KF?0!^J>4Y1Ko607OV%l8c-Z|mLXF)7YYA|FubJ0@B*s@u2N}1 zo>0xRahyFefCc?v509gHdaIkK4-DhnYYNGip&d9KJ&$wwIheX*E^doKR#<0^_5As{ zywB2}Z#$K?zwP6+-EAMH?P@!o_H0`$ZD-q&v>k2lrfqL~J8fIr>uFoz8}nPBIO7v8l-=Cgp-ZZ9vo8K?Go=_O^15nDoL@GOZ0Fa#dgJAn<!oGAkIV*iqybqR6$b3kxfg^|;UxL8dN^nw3Yu9mpHPA49hci7ksj-X zf;Sx>)ytho`}uu$c19Le%mfwmnCX@fJl8@% z?k~FLXK1gr?YProvgnVFy1K3phI^-3^ZTvK^F^zz7A#wrRb1TCA8}%hA$S96WM$hL zGEtGVItK$E9z5Ok2B5Mk$Y@ZkzrSf>Umyl_k=zOF91??@vmfTcDqCa912A*I{Z2sy zI#X2gMym^n*}~6XBAEHrP#M{DlNHTk8{yufdyxD_ZTi-#iT=;3z^UVTRKw^hARw=H z%kWPGx2DN}MwE$2k84>kN3c!Qnwm9+N0J(hm4w@&ywd@#yk-mb;zB6ONOn|)TRcDP|$){T&EYyAJ{8k1fRXTz?pbWA1{TaC*xy!dr22X>Q^^=M4$UW%x|08+6O z6C03U_zq_+aD^!tEvkF;QiMf6XDO^CVNG>7g!L=vg*o*}wE@5}{-+A%{taS=y-)g{5Z7mz z#rJt8atpN*d7uHi{|Q(@o-34_pAbtDb^o$pBjyB+?F9VxA986An*y?$aZKL5Q4C6r ze|_wY9LE8ueWOTDGeQj(NMQ|ljiVcJIA>O9b;DkqGIZ_&i3Yed$?tf<*r1Tc_=f3-%UU6xKoDQIb|m!LICG-I6Mpl|!2l`e8De8fQUAPXr}Zwk&-L&YP*7a_UnM@=`m; zv=SJc+?5CAJx{^6Xn+zGaNR(H+rQWu9F^B($-#LYdkS`4{1$B%B~@ufdI@`5I;9!6 zEd74ncyEK+jkjWI8(!p;%Y~g_jP<^HH>6#z*$n@r!A0`5&0>})E|O(WLjeqKX~xr{ ztcc<_4MU_EtGntI8#BXc=T`NrubQOd3=@ClX)!PH6~$!A@>UU4CVQ$X7;eDD!I&4c ziUQnD_mfsJEX|}!HEaBIkv!ZAeKC?dr9C5xN`9)Q@I?@mq96ljX`fTJI`XKE(Cg6d z@_F_<>kw1TKO?4P998vdFzhichn&CvQY1fk24MTVNS167RVf*lLF(EXMP1vUahY7U z1^r^j?7}x>B$S_T5z|x(2dpPEF?(@A2l950Mc(e}y}G=7tqoRcQ_p#K7Volp=9KNs2_Val0k>rNRz!$U z2w`8%m&sXM#T*}TjEqo69R5y(+Y8Z2xf;n&wt`px{r6Oz1~q~ON4jkyC#?gsA@Y#1aCA1!+eAhh=~iDX{=9e>{|zQ-LO6W_K%>Q0OQ z>$LZt`bBnB=eyad^>I*~?rcC$FSlPyRT|L=S%R@tF>8assAVf?!!|B&*(rt+1)F!m zYZ2aB8+XFPXr9 z>H_VsOtMpE0)#B5%(!zpV>XpZ7sdPi~&`-sroF2(0#G4n?*~aoc z0*0*H3+-rHiJlxMh3J(g&<~Xj__HdxY%gp^^zNV*cPGfT7UX?RP#kt&o?Yo|JjQj8 z!eu`?1x-ll`x)0=Y;SemSxC=HLFL>#9#26^v;bryv%h}sv;6wc#Lp8~{8V}AX6+NT z1tv7mT$0V8KHfCh4)qzG&Hw}u8G0(q`}YBR;54y)AJ`ulV?Wp@a_UxIj%@^Sz+(l1 zY1VP=U}24i3yQBLjA$JM!hk*Trf$WgiM{Y2vT3}hq3?hLEWU@^$)xARB+&jRo)e>! zl133uz3Ah4@;TUuO_ih(8op>QvI+KE*#FA+gNuQ$#?<{#S{mz+i8$jr;2yvG_lqTH zI^lV7S&9mSkG8wUq6tQIJ}+iu@fKf#li<@g`o;u7_feYM|Gd~DrZ186+Ocl|g%$1a zu6$vHe6<~3gfCz?tFUAvaZGru=?X2%@OQE`U2)?4-iW2j~&x?{NFPHsed?S{(-h$#D2w!OyVzAI;;9^F?t_Jh-R5g!$q9x|gup0PCwSAtUAaU^Sti8oa)y7DyOP zIPP9KtNZ$HDSZz6BSJl7h0&kuyoBXeq{UPmYJ<_*M6ix?4tSvVo>y@P;rFg zR2;T7$Zh_coD>cdc=YGMw6(vI6E?e+C7p)4#SL{!=195h6}+F@DIa-76y(gV7z*+1 zYU^5Ob!}^Hejqby^~tnVR@a#o^4Kd-MbGb)Rlh*Jg`INpFT}jy+)jPB6@{AlxK+sN z-5YLZiIodGUxB;Z3lMCB0n|D13o$k4{IbL-*7J7eXm>}byAObwt*`Jkr9%1`4$o3D z9K;IrzwrR*#B5w3dH`uJ3p-yyonDpso$~AfF||B4vWHO4tQgVM->O%FG3(B*C=7n@61@! z94}bTsj!oGM+N35K?ukAYF{y~0kp<{(Z|w0Y~8Jh)0KFLAKo`hRSG%NKN*4 z`dX;RAO(;uH@ea@{>(CsVJiT{q#!|$S>VD49b#HpHXJ&bV*}Z9+n}xyU0ngdsa`oo z#DCL5h*#Ccj$ZOB2weDmi#)M3|`%X065iyr!I9NEd9Ax#?Zju~FwDhYQGYOB0=2Lz!*_e7w9= zcz+;od|Nymhb=55zkFM4RBKse*0SE6Ft7m!qHW!s-#8jdapVS$)NpA-&IpTvsuM+@ zaJBN2EAI5;xrO>AXLLUJC$4SFEp}rWLKdNvfTd5kLeILu>Z}HRB4o<`B3?EYFEUh-)atUdcsA#7TnI z?5FIw{R9XUy#t3H;0!@E-gqF8zki&D|MTvi0yysz-bvxmkEWrq}-4wtt{?`LmBPvKMZU~ zBU!%#)2tgQ$Y6Z~f1@F1e9G^{GJ@_b%VLY=93jJ9AtxLWkLIYY4L6D{PCpj`7gK@5 zFJ6J`$gz!q;YsfyY+Zo{uGpJ!$j6@zd|1Eg!OMuh3!f6LU{;94(s25_L21^-4~sq#}mtG8WodSF;P;>aUw5I z+j56y9dX7D-M6C4W<2q^1mt-GwtS)K^78jZ-<0v4%O9j_ zGdKUZHL+7pdLQ%>i?-r@Xdyx%-0y=0-SjIv`K8f`(4p(Bx0Tr3$V>x`h}KM#+Hmp6 z0clz&vyUOeGAW1~9pjy%78U@kBbtyn+c{X=m3jxn;t-&|Q_e&EhK0Br(Oa9~H;EMf zCzB-L#)9<>VX=uA`Cy6t*7`Ot7L7M2BXC_wLi0O^H{q(;ZiawF<|U-3sevkjDQaHY zY7bMZPi&*e#D?qfH*^>3@50WiCdT~pJyx{n_n=@<1T6Wz$f>#6nH0bAl&9)_W<^aC z^8@jnw=KANs6=~wtnopd+PM8|#WSIp+@uqH=sJ)EbKU{7|l__ftA^@b{ReDHt~$DQxTBLSN>s zfK@`}sMtpTsMroD=HG6`cU68i%H0Sn0_vz|!t;8)o3DY+O6!S|p_!gw*Z_q^{QX#2xFH z?AKWr>`j-op`_>U<=ubN`d~~Gvnz6NHr5DQlLRah>;rvb!gmA7p7UP)jqgp2>%ZkAQO!ec<42-4 z>myVo3~BB`G^rYdlldg^1SCl+CZgbBvE{oJ6=U&CJ|O-cRt!ebY%i`~CN-^ts`D{5v}%xLQROSRuR<-5E)2sZ}S6(6vG zE@01e6!5V?_xIO@?ZRJ?27A~M9T<8iV8bRT0eyJDZCRG zaAMV1AqZb;Rr2wx8GB3Qj8hnpq|`)2jW^|Ue}di?3j9MDSN6=#+;g!AyEqPu(mn+gBrKSBCRbpmqTR6eLMed2qf$-WIS9w7Ou2&dTSJOCK~7kQ8z!Uc5h$A zO_t!V>hdNsGla8{4dRf4Ijmq~yJClQ4>}ncnM{151)rGV_|7Y!o<=9ORa{7HGZRwV z1Z=f=uH2!w%}ghcH9IF3(sJQOwsV#%d}|1a=tyX8%lv1$HZ&869KB`nZ#nJH2*~H{ z4z%rPHw65ZV;L#s_MdcS>_%3cL}&F`W(u5{fW{G1&J64mm1asqo0BsB1(i{v zc1S^PwzJxpU>*pVmfZ;*zeCKft%ef<@ZU5#_*pscB$CB9;>f1)%RrSVhq!7OGlA|n zf@fFU+By>%i}-#ij$@$s-jk4VA+sJkDRSo2gXU2TW9)1u{)_w>^EHc*=)VX{NV${Y zUod2-WhG%^TMH|OEA-@ktjFNb-=~!21~k*U$&+(UNCrQF z&)@FR+!Cn@t(W2YJ4%4YXO}8`(wLpNK%Mm&Fijz0O-TFEx}E*avHTY8?8K?ca(6x2 zUj_G5F(beYN(wO}86F57YDC@Cc0O>>; z!im7>fB5kzA2*(|OJg-ni(|P>Zfk}DAUp08;=ttOPZ4$cpMV>#kgt7;6af=sKD7ve zaM(I`5q#@#O>B|z<74|_@Lfp#sE%L86oe~^fg!1tH^c<;dFcy?IF~805}a^M1NBW{ zl~+Yn^*-%&VKJLoRi9!*2jn2ycu0bcde63a|JoJpfts8SZYqAvV1=jFlz8ro>E^CbBM?Wno#ib6(y1 zKZ7hfB_?-$CbHf5-YQ$35{1(JH<4Pl2oqi8Rp>lAHe~>dJ|TRMr?13atyeF5g??kYk)1R?X8q z&3~!$JFHq3eGaMf%aEM*IYNir)pE<{qAp`7z9S>ApVtTaJTBXU85UU$Qoaxq(umZw zE(56*?%*(-_k}1MACC2h6AS#;opS)8e~OaL2EK-4HmQLM?54{BGt;KyR^;}Ids`oi z-5R|cWmaSJS)jls-LRji=JfFN$SSI6iWW-50G#aC34CjEXUdgC$MK1SA^#&wgY z@AD&v@)LREK(C1mkYFA%hX)nUaA(iE6-TRZNC-1QQN9eva<;JT;Xm~I{SFCW8zvs( z#1rPGOy+~-4Vo@B##<4NLj|`V?GDQn*I3~geR^_LW4!VT#&|_f;v1X8R4kYn12|k5 zB+q(+3rT6WaPR~XLTsk}U1SVg3we|REm0*ETbqNtUEcS1F$TGt6IZ?S4S3oE6O%$jbg-rCNDC>L9O}FydFU2KAPBIKDSD~n8 zIFGzhf|Gm)F0~zmOvu^z8&^m{qk>Cq#aE(itiIGX)P1S#l{I894t^ z+mC^AftIL{vG2PwlG`CyN3nOKQKY?D^A#L6Xxbq?=Hi1dCN+nxhWK__{_ASsknHR@UG=P@aZt2fn2^ z1XKO)3U#;+wu};%a9thqH38Gq-f)A##Q=k>WVAU(`{PtrZg1>xbxaogLlhNVpo9O= zeo)rm=Jvp43whLDBHtwU{{!9wSZ)}pVy?$x-l&Fv{NNv=pulu|{-F0egEpFtyGP6N zvm$3CwH8b(Gp3w}i1uMNhs-9R`%++PD=?CW%qAQ-9LKNZ56>c895(gsXQ8Q2xk8>e zi}Ql~A?X5h^mc&zIe`B!<9|4I8?x-h-0kFuxLC-T@)??@Z95gTA{?6zakR9_V};fE zp{BY^$>c2`TI<)l;IRK+yK+_^NB3NVaE!Mv-`31>`_L9`j%Z8DF5I@cw$TQW z#Afy{97C+ni4JfEi{KR1#&NWT`VWtGU0igbdiOc?+A#)dZFqL+x)0y)3T9uZ3cGQN zyyhwpA7AnCm#(Z7qh=x`9*fBw+f^nujgeDr*SrjK@?2+5p4B{g&{rQ|I76RF5Q~#%GcEv^}(c}C;!9~`rC_6ALDyJ znb%=G*;bsO?SYm%!Cw|Z83+%T^^UIRF6xL?w}5LSH z@UC!Ofxxg00t2s%)DhJj)0qy1+SjXn0#nHUqwIU&qAa%lpM7S;btOWyRX3yEWm$-f zkO+;C7Bn>Sl2MVF5t@;ak&#i636hx+f@yio%2q-%LoiD)QzR?%8k$lHIn!sE*u(&Sf*!&fd0h7?LDjZ{Uod1~{DwLT9+x(c#0%>pvIlSJzM#MM z5a*VCVp=15;bbsi%_O&;mG4)` zBA*) z)iKV~dtFz$)nQJ5@r|x@mK-1>`-WW!&qomUIb@j&a4B5xx|}k5ipYph4tnNWhiQzc zai3F3PmvhOuriEX??POeGmsbqlX&KJv=wFfxaLSt%xLIn9d?ly;ejpFx9AV(M8S%O zV@vHIdV{xUutmC7JJL-rI_`6yuNU&Ozr8vb+Zu#QTkIlU!L`5J00J((msp^1_-Alo zHl}*)%f#62KE7vZfVvl``fFnxd26rr9?F%SQ5U#aAP$}1WEW0f7gNUcc#+ZFz!#ia# zjeK4c9=7MW=n>lK5V^dT`Fjh0gz*R}=-=dmUr(dF-WaE0=f+^2F^q^=P+0<-wBF#V zE8n3Ny+xv9Ql`Nvk^gXSu_T8XM5sAm!_9Sz@y&f6wZa_FL&l{(P4D4*!7OjkfRQio zyL_}WRK&&qIj0?Ba$2{^X%p%V?n-%h?wP$C$8)`ZUiM5bJ)~;+^5)XBM6u01`O9b} zUgm#kD85&Sw}0qbMyhnG3>RL0%N_l;SU+;Yl&FL#5!z>VRI8%dfYx{~t{<)(K z!UFD1&N}QVO*`9Xqz?i{2H-ap^%LH(sUIzx2d9cS4>&ZWel#uZCvqM2DDTwQ!#ou=ZKm5{qHpIIY)%p7`S~-u~yH%imLmI_-qR}UUzZZ zqk-|kJ9(=@zCz5nn{t%_FvpjwJQ@yWgUUkFs-t!kIR=PGrxo|%5aQR4Vm0Kmuc9=3 z1Avq_KsckUJY2WYmZlq|;#OnwTSs5I;(8HThAjopE|!7L#^H;xwL#k$ceabcSR?G= zd#s!lk0HKK5c2r*r9BRYd zU|wzSjT02McwDGDv|S;jZ-Wt9kHrUcBd%#ye(O6rK69YRO))wdz zl6#Pl-q0f+JVD|H<#yeH+ixzn+y>gs9E2HwdW#S`IsXMF%jPmB9IFP2CB3G8>4n%o zqRK_-9=vEj={!-W@-rvG$l_mT{=?^q+Rpsv8u@D@#R|RTYRWnv#8r1S6`qgTG2v>X zA75Ne+s_wi`rTKP!!2?nYmk0Ec16dvbhtBRbqM5N{NsIm&DAv1Epi;okO#&++On%@ zpBn=8v@8nqUnLVc2=@S_?eft<1A1!w3=lq4@{9=g$#E%UH53pY(hU9;FU)5v)9V0UMjI}5R zy8?tQF``(n_)BwQtXO61RsNCJ$I~lFUtS=h7?F-R1CeoYVz2($7}75k@s45HK+5ra z4G2xSP~;i!s(>hOL^>moebKY!6>quPucoF8MYRhIUJ2C(gYOS}`npDg(c`62;dFe4 z+cL~`K*%!(i@Y%7;uBAd^uf!s>F8h)&({oG7l}Om`)n$`2%X=YO$`@eS91?9DzKno zMDr0uG#=E$bC)%n0Z#~IG2=HKMVWXj4fld^E6|Xk+7;Y4)N`68SD8ea6)!6ITE)(I z;mjO)4Qri(>J?TVw1lx7ht|p-(BM5+`6BOUy5_kP-`H_Ga~{4B7-jbWK3hZEIEuSi zWZO>DLl=t+eFr=DDy+>kw33#3!8qS~ZyE)E!&}VY7zZxKV9dLQ+AkI-I6RRcy!Oce zidR%x^Mr8GfhWb;J>~{Ae9amHlKS4 z#5^6Zt0#&S{q<{TOQP^b#E!Mu2WeUZhwacc#*U?v{Qc`|DDe_hipnQlA}U;0;yX`B zD-3A)^{M!~axAr9f*mXJB`1kvy8UCk>?r2wKi^CZmqMOGxb;#jWxgA2P|k*>PQ`Np z&*ad_OCh6WVu6OEn22F)(hpV5t!T24ny&Zqd^d}K{J>?7)lf2vJ zv)sR|;o2)~KCV}4hZ@|-x5CW#^L4a$C>W*hMmjYVOJKn*6nP~O_Vh3y0*U*Ei7eY} zioQ%-n6lwx50qnvl;Us0esMdzPaYjR>jwJE!fxt=O76FGWb z4js4*^XsweC_Y8_ZBNq;DWV3!mnq`rfg5izF27p)_f$xZJn0(grpv{-3`@!7BF(uc z7sMO9UgOU8KqsQZ%k`Y=Y5V0MNXQo1sUlt>FseLKze07IDpN(1zA1+?h69L;uA@c6 zMTtJ>Itoh@lQ=9+6Ak($*OB)Mk*UCljt$x#FeiZp#zLBPh3H>kjZL5%J{Kzd8~*ci z;8}1qY@5%-Irn59JQV&<-%3!fs|>YYA=1v7WOlU-V?FW;qyF3I+JNZG*eD2q41T`Z z*uKp$Nr0QV@ulBYbs!+dN6bUo@0+HqbdjQZ%O{aPnTO<7Zx7K6=?2m_q=WjHLNh=W zgEK_A8ClVpIBkST&>y*;YDb9N*hj8s8tCWaFnUcu3)K!SfUBg={kZj=0wYAf&ML-^ z6tm6IbJ8~>Q6E|a9p>q$uBVw-idv3)GeJ8;Z=m8#Bkmjpo_*^LG=3BouWN6hC8I#c zh_`S$^6R68*Kds%Bj(xVU5Md%z~7?RLL1-^i|o&~ZD&!st8q9yW5j3=)HBem5v7F^8hqZhYo zS-H)Vu4d8m@mwk#BN|+9nwhtq`|s-L#X)F|S;Svg)0#_(e-T?F7uI!khAU$Lqrx-v zk=hs4AvcmUTlif%(mmnnN;EtV#Mh0$aK4 zcIC6+G|E%^HNsh@$^_x3L|ayE|Bs;-t5S@YpTljbIgL75limHdXYn+>)gG>S*1WC% zZ_>M$j}8X9*L&gbD*o@4QOj82%>FZge%AnIOZR%Z|Mo1d(^@gao;B%a9#v=ApVj&M za_^o|?o6a~M^@+``h;T;6Ol}}c$5Q!Wz`?OM!N#XXMafi(=@A))nTJzI(e<|dLP25 z={R%g%F`VvP5aM{l#(N|Tn~<8aVDT!&uHYBl={$ETAG7pwdXk6n==RSPr(@W)02@7=^AnOnz8uGIjr z`n{Xz#5gg@wagUN`f2Ahzzu&xKkfPkW<&SfL`64=!nn^-AJZR)(E|=@{AUP-kJfiL zon7ck;Zu{CSc8ZVLWXy<0mIz%}MY-*= z9>gep)Xh|IE2K?iSa2&S7U6a?)bovaiWwFgVe_hd5ovQBxY_7QnARH3cXmAP0>vaz z!QqKmv6{zI<|Ig<=TD%LNocY61ZtUt6$sA;pW<-L1WLXQkflwa%G*R_&vrv>pt3vk zbL{6&Fk}dt_9T{MRB@QI-iacUQT5shcyacm@`y|+U#rib6syr@7F+Ir3~%Bf29 z>5v2D z*Hk_RTYat{B_ZNBF`~J)pDB; z@%H;5#oJyb=X4;fD8G5>bkShz;h1O(eT%Lw5&iq|`FxUXq?(e0k<3(0?jgcQ!4eS~ znQ-J1c*n_iadPxrL+g-qgzugOc$2ri1e=n96X{5aNK>_z(ghDdO2bK1<^v+HEaAwI zDk$3GU_@0MMrY@|*Pka=M2fb!I&TWq--bhBqX>&&R4T2KHG~j%Vuv_}qz6of69UWWhs# z3m2?6JcP~rKPG~?EDrF&!ik5#5D*rYV(LUrq7|h$31ejPI7q8LaMkIPkj7V37*VQD z#KA#d{oRdmO&M7#DuC$)6yr)`lVls~GoGo?bS4GV4KFzXHLZ`n=2r}h4{0S0kB_OBD_ZVJ?gK@G%JJVV5df9t8P10LW&jhg{C7%8+fNv6j* zhR1@1z0hg58EvNOef*54j{ytQMGx~~AJl(xhDeEPHeq8gcDPysVw*F+5oss`#ff$J zpy+A*Bf_8i4!-d*EZ50I`hE-4l)TzOvB3S?2KSk`$`ac$QrCW*) zPA`DV(ZG7zi@NiE--keFAGnVOO&c`MeY-^0YWZ+0&OQQ@$F0Ve+x(pUuEqw~z`-1E zRaOJ7j-M&wLX(<2^W%{JKbVv_rRbNz{yJ`c-Z=eW`yieKHV~C{LUo=NkOpH2Xmju2 zjs<>a(~JpnWF~e%Nk_<0236aiKE#w@Am;`=!ek7-rsL6W`>z0kiGYE^F|q>K5>Mb- zHS9%^n9Y_A2}dTv(X(5f#PWuO5y!LNQSMVJ(xf9pFmQ%R&GJPssjO5A)7%Ra@R!B;`?&lJ)Ksg>4k$xV83y1aTWL`W7{4!ft&)s_3?Uenvi0hmO76QA` z$%4m4ro);Ccim2h9~bfV+Z0Ton_WNJ`Y~0<&o!tzbFRpURIbN?gM})Wrg7Mg8P0fd z-%epa*<92*SA<3kYkCRBTls1_^O&VJ(SfKt?CG6Aqxp8amj{%bM&!+ioxc67Ld z);7u7gkrq9`t&J?8f+s-<$XofO@H>npOVe*Epbbw#0!4cJlOis8 zMpLmrRlgE=khdMl{uRxMCFqv?(Xmv$am^7}~whAvW}ZGRKxRe|$V6wsV1$d(HV zXls@5#;-8p;ZrtV!WhN-VS`bg&{wlIgCUqayaK#dK+bvCE+EXFClceBYrE7^65(Ta z{0T>9Rpa2v&{7g z+(CuaA~~1mDZ|nIL@>#ggTowt*OEn5j6rO^X|oFjfm#9b6^^=CiU%ykZL$=%9(xC! ztOjLoY)+q#+roIE3dieSW_J;lHuqJOcEKxew9+LqFqlvEEiT?q0CM$(Z4a1eM*!;QZrTOYh>8=(Y=KQcowO(nz{3x29N=XZ<{ z>sZEoQJhF)uaVJ7) zX87*&?;yuhA}(da9n6Pf1{=a6;29QxWS-x}*kL2a=kaarF@CnT;1d{#S8Rz=^b}5z zEGsF%TK$w5U$zd4Ltd}BJ@&XW)pQRRFa^kH^f% zcnr@!9-cxi3t0GRqQeVBW`;C^+0?P;hDFs)8JExei5Qh2`PWiY54yNFgG zs#O>Sc(C*4ow52ZYcN*cAO?L|4YqK;cc#F%x^N{MhKpeJzuR%Z6vmYJ89(b9)twC- zNwDA4murBlRnLebmtkOt(Lo-|9PVP6!(CZMiHo3Ha;N&LrkIysG;P-W+fBi+_D*B^ zLyhCF3Na+}I+#0+1hM##HZH`FJUA^0X?UE=|8bAkA&ungoHiS2GmsYE!+5cX)80ke zex%h)<9YznB10!5@e5msf3)Ohfm&5zPGf)z$V1{THeISF5V<>bWVK<=MGYk4vfcrV zU_06cmYGzKR0?`_Qy9U8I*@xeZG&-2NrVgyVIamt8O+cGs-4Z{aM+?e^Qpq90mN0 ze_v`3HudeD$_?Z-`+U>xq{EA`eqbBncow#^Z=pd3M#BTd+&Rk*PSX-=8}Fp-XGN|{ zaRBgOVeTOIql{ES!+0PPJ^GeTw?7sAknx37UH_LGFImn6dG+$ z2)t1fXNP|#Ecw1vDqR8{%FHG>DThWXy^zwL!?{gl6IDMaN+M?}WA}iLOM?a{4>C8y zpn%K117trhQZlQ|de3a<%(#&c)-8)$g{lMAD1EqoY&&5{UyHhQcPbrtUUh!q)Sz7O!h;ZE1Y zijip0bc>Vfs}JJ0!|hWRv8>eeA&r-=)@ILq7_lmu+)#FQS&{JfcR>ui?`4ayfDBQ> zg?%HOhTTjgy>f z`FTsqT8eF0l9@K#NGm~FS)aS0#ZHZ>=lT)ilpf1!s$YeJQ=_Z64kp^0*05!)p9`>28$aeC2?Zk^Xn!i9I`8I5=}VI^-@j`>5}WVn`e#$qOX)grvs> z>>GJ44L6bCN%AcADCNuW_o?VbP5Lh3-CeZvMQD^;n<+Uc3U&KNsttUasZWrfQRMBociGv~af2E0Fjw z5@#TB1{}OuV)1^&_apupzHu6>4?}H}{h_vKe{Y+S#^Uo-q)kQIUER{YK-w2b`#_~p zUad$RUuzD4rrnOt8e%c1U1`1MVj!ee;8z`hqdB7k7z`k?l5vKCFsRi)C`4xrVt@6$ z>25k&E4&$9$b4KO^Plt1Knf6Q81r+va)4mWL?$YO5Gng5u$`~|geX|>WLUbFVR$e> zVZuHF6E&(H`%#>*HUZ(SK)4|~pAY=_wAcMnS`e&0|91nCs@3rz_%FvdYaC{1bvLU) zc-Ty21n);iV<3!-#z54W17V~Y15sxVL|57uwmNelIE}LEL|ohnAk?Wh*M4k!so~rr zTj(xZZ9{lWy6+R)vW5$B-dsg$(jx6`#Vql=qRY$Ge(2riAwEzo1SL1C!FX$W#42XiL(ZlCN&-cu`al7T!$ zuZZN%Jm{n1B4(ZquZYqf?CnOQL+|0WNSLF+v0J5%`*PhKz0tH+#Q-OBz;Mj$|G*w8 zdai*d)W7sq>~Tvl9?@7^S%~bf+iIE9G^)uFg2_P+7(6*FPB@{666sO^v=~?g);97uGUq5SVgo8KbIKF-z$sveTn)VJ zD5C7uz!Nxc!D`4YuoOYr>Ulu3~&Hi;9euG96c*4c_s`Rh-k$T=CUn4sz$~7O|-#>g^c1*I>tr zw}p*`9?}G+RPAdbO`!+-hJ>quBA#wcD(xK~tM+tket}MXtwH7)Yq3XRvM9$?7}UP3 zTEO!#)GzQjJklR%U#@sMPm@82k3$^Jk~(?L1f(rS8hqR`i&(W5W-pe4nESxP#JA9T zqP)o`=e#b`uClk?p%$W8EJUH`Q>c1Xv{qeJVf=)GZCK=jDPJ97ZlVpmbSa%@(^+qb z{+Ft(rmmT@!_S}o6SN(3abRFH>+ucLFTqUj<107y)hFquH*lEt{4^?gLu5IuDk`SY z_BTYa^X+N84ZqFju|EnWq&LVH)ZU&(IqN_?A55c)bz=OV?x=;bu_Ww0p_9UKDtFL>B|=Of>`A5;3XMtJ{GRR+Vs? z+(Ap%i>%z#9o~A}b?h|w&Qcev~8unTpRL&uIdk1mgx+>zl6XfMG< z92^7T8|T$_B%q9r+gz0Prik>ui+Z^Kr`txb2u=C`~FOWrZmV}rO_2behel3G1$It1Ybk^$VRj|c{rtQ63LOD7UPU~*hCF{ zzYlj+Y9E}#piTIkGB}36zYeeZw~;q-1eAa zI@}@>BaVZo^GOR|K<55`(?6rum(Es^(s>07OE-$*g;N}Y>liZ2 z`w*);Sx9ENjLk4wg=>UTd17fW-20Bg5z<9lJgE|i>_j*6oe3uIgOFPb$nt%z=&kTv+9h?8NU68)Jsimy+)vtOVmjI zi12JBzV-nxlD=5(Cc6EdSrJ#vOAW`_cdVvO#t!t}hS>WkVhbj918#&}{x31ZW3SNu zRWqropLQiSUO2)3B?EaqPbc0_OSXVo`%b6!Eiee|3r52$=s5@(z-wk3;bqe)?Hy3_ z<!XO5`6_F6{87#6xt;bc%adta5Oi%Oif^U8ue|&Xk9^^F6eO zu=G65!X4vGzr($35$%xkDC&NgNze?QtGeW>^7dyvXv zS5nGW%p|~B$RS8=$yS!E?x(Q#L3#=IQ{wwDRyj?}-xue*?!Dh;{|eWa@U|@!NuU}? z)U4Ppy`K)eFVfB~MfLo0IX8o`rGL&A=h5hGVsadRfx=b)yra&Kse!B7A$}|EXQYip z+Gv$Vd$*zCWB1dkZ6Y_DslyYi>z>%Yxc608!*PDT%HtlYba-s}5)I1%PKO@N_bDJ` zgnHb%O7p}a?R z)!=sU0s;smz5dn`a(y6No#~)vD?RfA^ykx+RQQ1?v>TWy7nHwJ#8R8o9Te6k9Q@tY zhJ0uwtxcqaGr^1wmnJ3ya7p_E9zB1)4QzqoXk&@`{^rOXBFx4K@jJy<{o)7crK|#^{D>L3MybW*jexB3=%@aG(D%q;+(x z^M7ZStu^yl@t)=`mz!f&vGR=X78nT6R`67qs2lnKxps>jCj%AO0YC0$L0)ABwNb@x zuxPA|zCmq401~K&xYwz8>Hs+)9%S@e@)cG!+r^mKH% z7prfvM9i?Qh!Nf5(b&~pfo~Dmg0qoF5HJ6+@Kmkx$Nt+H*`6bd?X?Z2efSgb2j8zHj7-%<)NlztE90CDQ+F4ps2&Hvr^9JFz20tcYv%8 zbDUw}ICqfa)|}>xo{v6A?H|F|I0tp|w-D3H#>#^^Uv;u$h(f~uz8#wMF~kgP-Ijce zxz2p3D|FH?ABze4XD?Ik-@u%ZspM}^n1A&$ItU4zsUxuC5+73tSSuJ>KpzSnEl$GW z#KaJ5nX>p>cOcJt2um~`F=Dyy!7qHiL3m(R>lf{N5T{JPAb&(UBc{$!;?ECgRvlP! zUEptY;a+hTJKs;)D_mX+8$D1dbH6Ak4EQ%UFaWPmLRnn07Xlvx%~>*(kKZRIbpnT{n^LEQ(b9b) z^1SXC!?_|9pUWCkON~x`NPRvN{pt8Vu{dH8SZf(bCI#Pq?g&9hOFqN8&Fnftv1_Vq zlZh%m!H9?L7cN^H{bj!xWKSqpqW*r4-Dom$m=Nq2GGrvSHz0`Z`vK|59Tfi$Tx4WM zjm;(mDpsr+x}EDGH~#~NWe6MoA-sv>c0{q{qkV2ddsKxHzS&wu4PQdRE#$^jn6Tif z8!Wt!@q3H<0WsdeiynI{0tYEL0Phj^ zOj%g87DZ0yONeKdhwDlm4jF2|7-|ONmUIH#fL`-YaeJ@M3dnP@>`x#6Q#{CYlYJ1I zk6sT`;X#oSW6&0;%OrX(!$4`;*!t&GgQy#(HP_rB2htbVxp(5Z-ysq1Jd7LLZ}Ef= z@9A4_!i|+Q<&a3T>EF(v(!-dUOJ_7MJq*)a{hu?)@dX6lM`lps7ueP>ok7K4U3I+z#{5h4i#Hl_ z>(#2EoWXXm&-~%(RZPpOvf(4EO3)DhZhnNS|0OE2TNH3^eLu=@`i1b@$)j~`hXXBNdBh4qM$N7H-Gr13|wABf9GilFJgUy~iD$*R6&ouhEd^V+h4Ze^ylM25U$-S+5arRH=j}zz8 z)~|(2jzw;2Es+E0pw#7}Z(!xa?$si2a^o{8?}eEZ`3)+<6w3NWr1-b8r7Siby-hWw zTGPyhoK)jF))-p#4W=*7x{rMWl^oakAb{6oVzOgC9P5Bu@Xi0NDCul(sM#Ja(>Htz z=RK@}n2)K;O91lj{T47F)Q^c$Z$ue)Qg7&-Nf10(KE1+7_gzs&OOJ`7#BE_7tZ8~` zU04P}xXwozn430~pEc3vM##%W;4Ici7+ZX7jnlpp&XCU((NJ0s>7s;_K+%lvK<_QH zsq#Bf=qpmKOb*_QtL#itMjTo)>;Zq{lF-u8@f(DPE;}xUhCQLO^Y%{DFv>HJL$&j) zO3Mi{@_w5|8;(OoV^CE<-(5yazQ-&C58L-WrqBhm=@jBFV+0{NmK!51v{sXD}E5;Gp!lSgk@Yg#`s{j+P56N zf!xts%a33!lSM=`Ob~vbmok5Z+5630CLst}{ui5*YJU_P60M$b_0{~DhZM}Lm#Q}3 ztTv#3XjWTYPSrmF15M?$^Cv8()-Yd#Vg7eHo%#t^Uy^1~$w`svy=WF=qpz<9ds9VL z*y6+gI#v>X`c<#~wVV!|geDi*bp0$!%&z9^##vjrIu<#mK+eaBcQAt04n{Zg;rn-i z!tm{A!%^M`18n7|y+7l2_=Z_j{0sQx`dPH<7r?uG79IUXWQ0{Jn2ZsxoJA@B5lh`) zGhvjMg9b)m&z&DWOcM=B+O&Fu5ss~=w0%T;Ci1HzCQ}~BsfSuPQ zPNmjyV2_heiR-;l6*k;at6kU~0XPL!*Qgl*Ar-Xm6o9#?~a+UIG7eIMXn`hhqf#`K&TlgO=;>?)8G{mHq}15De_d zZ{XZNRFJD3=TnFmwPOIBkJ5^E=meq4J%%u3SL#R~SV~F8LKN^{Z!7sgUtbrcA~IL<{)qGd2}dXH$!iPXF}X zzN)FF)`t%r^N0UFz70kv$cv4+lftEhM~zvODCJ&eT8UI;oE z^%#v0k&{@~XbF)gZ~0Mpd~47~dxtHxqr;Q*yh%w(RURLXwi}_61f`n}qh9v-rkTHc zH+yga%}77_oX0oC{C(j%k8iU1`(5f|mm>x`@$mg@Gbs+$R++!Qrn~L(X8q~MXuDm; zJ6?UvAhA~;gG(rxrXMS(j9wU;PadP%UUIE|`5el1$PE3{d9;MXujbJKhfH=|F~=yE zj*wkMXkdKrqKWi56yIAe2%Beqj~*7(=g*;?y=5VXDWNhhqT2j6pUdKV^&Bb*l}-8w zD0>#Lg)sXpVDE={RC1PFWc!iM3X|vB;^=}f8KpNpLD^w)ygq0ytqPObwj}xwzPd&| zZnN{GWxa0@%!75hSn%qfc#PuDmht+i$0_e@8CO>Mfi3iSS8n~-l=PlAB zW;*+!@Yxf!i%f~lhut~nd#)8^fV@~4pxDh<#!{Kvkv0s!*CTB{Lh~Ef$L%m9=qR(L z{)QpG8jJ}JL8xcAOwa!EeH1Kr+pL0E<$b-&FV)t~wb@f)l?N{(cra|OKN_dyZb&7g z;U#1+o}#I%<^}_Xbi%-3Bk;%vv?yFcQ&&zK!ZAV!+ry^ic-djyaBhXx3HKp_gc!=lq#auR4vR3#nOVqzr z$2H;pk|(LQuS`Z2pZ1k^oo9OzbP?WaTa0Z9w_wGYAIA~yg!c6}J;CJX@I|jFSKKjr zZmaEg=4jL0`qOi1Nk18<$G%Bh`^m_ZL{ysu3Rw(YEoMUv|K{pBo$J!^4ww#6EUpTt z?Vuk1j{A5%^eFNinUecJ8xRG34KFRN7+p2mok%;VD@5}5PAW)fU`kMf4KlX|yX!ks z2{oJ}OZiAV&It}FpP)%jnWCTb1TA#}_UoRY?M}Hw&wQe}pua4#>CZh$dk08w7*A=d z1DFvZ12LlC&m;dp6h>u}24W6ccpHta9Xg@AWQ&tY)~&5w#E)p9GrU`4@5e$^k%w4#KeWfC!LF<$34}sCd-3Yfw0*5MZ;GoI}555c&*dQ4!fZJqKkAT*MM;u!@@8R>M*KfcE+HwCYh4UFR7CwD=wxX;x``pso zIV%}HGd<6Z_MUsPd8S(?+Tsr@YUJ~^q9OC~B2GYi6;r>q=Cqj}ogdJ;(&&IkX6mP( zB)?bA)JIj(3NMzK_$qQl$rc81dz8_cqZ}gc@X4h*RnaORkpEH@?eSr`0~9e$)gFptvwa)o~7JUZeBVIkccW3ZTl7-O+m5hLTmCe1SzgEqiB2@6Dw(N=qm z^u{xCqGEm8Oyps9^#F(AV14-OrDgKw$;OE7WejF^tn`+3A4CI5HangR)4Q>rAphov zyx-~HPh)l@ai-YqdtJBR-P6_YGt0dRn6824yvx|H(08$Ni2sLqJbFR4qQzCI9RJT9 z0Vluyz6qIa5V*Ji1ggvnfRIh|sPY1tShgGAK>C_hA%{-nvqCP*FTq=JD_{3?uGdOG zGvs`1ZDpnZ+)?X`z=9QOELL=RoIJ}`-+Wb^{7z?uP0B^!AsDrSi@=c)F1iS#dI(f; zkt}sxQp2}}b>Eg=J+#d>;X5BszA^BZK+=nsMe4i6cT4&lhee9Fu=su?UdB1NyiniC zb+Ih$+z#`Wb@p&ta5371^tk0>S;Tvr#02m+goO!Gd0IM_Af3+rX&&4&Sk^chBDd0} zVp02N4Y`Iu1i_QYr9(hTD6?dUtngaG){kfx0|F&Zgik^kvu@Eqpi4`X752v$8Y?gD zN|A#c(esTV2`;2#iL%fYg1Allo4<#ar?epFo3{YM=2P({vcOe~?*cYut93({%M+Tp z_~Q%d#3c}zrvI+KNWF4CWhF_kv(il0QI_jq=7csYk}$8*=F`q32tXU=Q_7`slI>%9 z;Zk{Ps_Q9Ch2sH8lyx=m(1R5?U%v;y1Lmhb5K94e?A7}d<})a zaXNozqkuExbDpB2Vc_tiUf_zyyNr4&>J3Z;Gy@a)+P4d+eHh3XEL!8a3AvVe5$=n`n?>FUg?E9k7YId%uuCP`%*h#Vw((3L%E}u$sGOHrzkB2s~0vs zYg1&3BSyimaCkBW?JR$hyqC*7Kc9J*$3|$o%$o=W3k_TcP!}$rE8;;ND=vqcc~Vy$ zhcA~Y5nPr<1m{e~rp!ng~!2mNMY1l4-yzmEm z27}hD-(5;SYEP3HiRYO;(~=CC>4<&0leCX!$P&j@W_&17;Ru=KnAi2a zWdxA0`)P8HlsOUl5}-a1)Q1wtVNHOiM(Ie*!6Q%8){(Nn@s=tV$#XOLO4Kv=8FpT> ztP$}_j`v2~oKgp_#L$fCibrPR`-HA|aVFN@fzQx}OynETm3}Hy&T(-263#`q-cd5y zo3O~L7x3X&CCdIi1Pa#Zjt%dJ_V0Oy4vzw2kUwlR)>eesqai5GeTE7~gKWP-JEO7G z?0$yYM`Nu=IP)r*;|O-OyYDJYkM!p$E(_&vTttOgsPE=Qv?vRMgr#aj7PbWjcTBHm z`1qPP+Bt%J-QjgzEtCDDOn4bq=6}r3jIvH&x3VS3s~=cI4Oh$3coz5=cZ!pjn^N*z zY$-aWWDSBJPYpN5hjPbAf2RVF3DXOLxu}h*$4FO-AvJdio*g*lvC^!uAS~<+K zG=_~1kCBNP)~eN2FT<8zZwbDZWFC$edH*bp;rk2d@LS-)rv2>yFZkQ@7vP{5kt18C zC0p>Y$JEZ9!vBbaP8yw=EyqV*&1{u5k8a>@n=Q1wtVimVJ5-tmcurcsx%z+mc(}L^41Yc0)G>t>G zUx(rXv})tut=I%zFVn^|jWItcw?mt{l1-fsf&P6}YR9*xJ1v`=qu5rRX^itK`~}TC z+*cUHsErTGVZ&2&gPi2-^#bJKgiFwFz|-}c`9#2Tix^g>(BGVJ@72kLq05@Sa@j#j*R*FC;7Qu8a7V)%GN>HIF1Uf z&T}D4QG(S-t*HyRVm_AQiC|XDomS=M135eh{9Q>*0dt4ist{r*X7Y`#_^^ZOW}J51 zHnY8BOAM}>&}ZZ1IW7x3Rwez|<2W=pbGDM>CSWN01B$;1oEKpx$FVgnyh)B%SLT?z zF_$tpi2+1_M-5c{XI$xj!wFff!LzbF+=&_KQM!juI{q*l&quGjvrk5UK;tREp? zG+s713YS>R47qNW8IDmZ-j~^Y!Ob$uUxxT#wcG({kSH%fJ+TCF$GVl>d$Y`r46-b0 z=GorCdH8}ccfPN$Yzbvdz*cj~5?V0lPW8#YkSGMjA*uZcdH$ z7`e`+09V{%531!LR%>o#c_RtVk@&lzbI8{caBPnHT5gg4ZY143ADy}d(;R(^&%=NL zmdrfBf+cW69=5B`KSw9?uoNzMj*@ScwVg}NAhgwOsflD*jZ4CyE~xgpFEy7wPu_g# z?;QNDvj4Z`s%h-N$8o114f*bb3Euo)z)O40I%4 zdQ-BYjpF&viV;j1!4)6h+%r`na&7<>c;Z-b0i}ho@;DOGfoRH@DB~h`JZAuRCQxV? zKv3mGnQii|AsPc3y%>Xvda+g?n+WC1Gprk(n~#^RVP%H8k}z;ahsZw({1-DQXOc`T zP>2S6(Rj6#%PXD=%d~DpVaf*w;UI2Jjm0Kd<*E7t{Xth=w~@xCk0y^}{Q~&p(Mi%3 z$83eyGMq*$gj@1J*X%`IkV675Q2cGO(vfct5Qu5ZZ8FPQZpOEEO!6DQ&*4eroeX~a z=<_swGWvD;d73jBlkCN=vU?`WBFDzAc-HNZ1&<>hJ@+6J>b~3MRz+|J%M3Qy(bE=x zJ`Tf}@Oa#?PP7zASMtyousi={tWQ5}i!+>VNx(yeUR9n$6H zvI}~S^>JuB9q#|D2={Aeg=@#J&{I9byu21=-2qvm*9%m5hg{^ChJ0K*;B!oodGR%7 z+`^f0?sN_&ex#3HJ(gB4>4p zAs-s`b=8GBD(-}AexwVI6L(@_|M&v=3nBaWGwVja6@_woztQcOaq1=+)etuveNsZSy#AeYig7~Sa0c(+FzuGd!^UWj(it}+cm`Z-3t}yWIC%@ z_K#ePWSh3!$Dd(VRj*@#)U<>3n)YZtvSt*^OxvaORE6wI&lk&pxv{~kYuK>x-Wv*w zW5p1P&JI%AeHhr=A$vrZm*W)qT08+jMfYJp&c;`4)R!HkYUJUI2W#&`7Z8R_$ENc2 zAmvR5dR_|Bs_C-8`DV}<1~!!VqN7#vq*)Lo|NSWYMv$`ZmrL!_U$%wL*o^~lbsXNd zqFXFvg!)GDC9)}QP+K|69O>L1 zw;c^hfSH$@FV$gVHh39jKOp_-&+i@q)1Z8{ns;C=5zs#7l50z5EgP4@hE~6z6N^kO~ zFty`)CurCDuM6@-bnBMsG2UyezSlHO#RZK9!%)qwf4`DWJSdwYPn%_}x~-650`9jy zgpKvIQVJ^tll}1}N-33-{Abk~{kP1NtvVrub}zibOs3 zk90<7-R_L4|DesNaxY|oiB(ZhwR!AsLum5&e2cvr!xMen4R|B*rewGe*PckslmqpF zB@{VRy5hNl5UsU8SKwLsF)B4I;o-%&D(bk+j1NIUPxS-ER4`M{iD0XF?)>o%_Bq!o zpb~DM2}BKCM$R%Bmolg=1C0q>F5(BFmf@D&YmI*U2wZ2^Q~TA7goLZ7{#c#iV}AvY zpgrwue-dxbehE@(ncSIX%_FG=U|*nVRX`?(Kj9Lp0iPGD=JYD=By{b#W0qdO0C})y z30A!XH*V59-l9vU#gVWE`OX}42q3CXAGBbaHng4xiUljFwMK9oERgY&zF5R{{uUJ; z@w>F|f~3!a@_5QJDw+k>&9Jgh#DBg-duGY_up=g{u-NuDzeHgbzzg#FD`Z~ZusWkH z<{5qJ6yeZ^`$d0hsF33$e(UyC(~_&Jmy_#Ja6N>@kK*jVc_sO0%lL@u<;LvZ*>Sz% z6u;Fq7tEG9HvP*w+VGgnO=-q-Rsys=pgo1Io$N4Z#%Mre_gPrYJPlSwR{C#slr;zE zRKu2&<8e7DV%&1j4&2}O(^~7bfGzcoscM$bH0oDR`wCV|*PMpT2k4m(2bUAIW z#JoXxsuGB}aRuc(3D#b=f=Zs0$%;%E^+~E8gQc?dvKx;BTkk=v1;b}KGjnsS{27YkpH zS6ABXPtk9c(oHu#Bm2jFhINv!JXnv5@OsYcbdp7AI8{_$BkKtJ{hg)PB81vO+YfxLRoDu%9GY1C$vrs^e-eX;JGL_U4rD)K)E zG8?suCUH1&6)k-Z;!xo#I`N#$jJpH%MCa$*dTJT!F6cKMBh+0`mA*LNrot&4(xm5E zY+6MP&x0M|j{4T;ak!5#;{`~*e_cfzUH~~|uA$PUGBP6aRb$R{UGAV&OXW^|xv6qKuIlhhD zc&YDBTl(M&Y;HAdU#zCXFX1Gg%S8{!SDTM8&68BSnw)hI4gh3w9nPZ~@xAu|AK=03 z;rJZ~7;nXb9g23|IbYWrSJTWo>AJycgY%Ul-y%GSH~@Jt%sxlBSL3`1D980N9ZR#k zmB#n{46Te!c?LP=7@j3(D{QFm0ykj<`t7*@2OrE5Aa;}h>VeBBXt12p7 zA=9!MgbK|6Ga-KGgG+tZNb#{m_ud)UNFV&jA4Y~wu8{FPxlYG`Xgaq}4oqGNeL0K7 z-7B#FuD^Wh-BY2s3$;}GvMh+SfOA89one~zC9XBdXZdPse_1-?I1iT}ggm%5@9V0A z#etrR952977dBGbO6k1d@dlKK{(|x8n5%0RPR~TZA$nw`jJbQJ3BJ_~Q-v{%>77&{ z&1PJR>frhcQVr+pi8%i*&)EwVCTK2;vnxmgAQ{G*df4pX03P{)B1l z|1zJaGauEyA~Sn%(}$bCeMR;c`shXqSq)CJp@EWDLv!LXogD9Ipo-O4iN9)~6RWXo z_(4Jq*m>I;ndmcoX^k|#0p>XuH`37tS-~~|MUCLc*Wo*Jwi_C$wo&HT8Qb9y0O{a< z*^k24$nb~(Z!+s#29suydPCD~zS)hGxCX{%6X?!0GOEwv-5EFo!GXCZ!8Ux_VtQeX zJl8oJ6(7b^Rg70JRu=w^k~`N(=Wy$r)ZQNK=th%PI+uA3;{kklP=grtQY(NV@xm-7|b8XmM!dzOdFB}iu^(_nd~;PRuqp?uHWyj3v1DigjR&53i%G>rf71NR#xYeF7M_zQ&~5YS_95^A)V$ zbW87}%aBRSc zVj0TVfVFnuTH3HdR+eqsonYQs)O3q7m{1c!hk%z|tF|J%ziZu{Ue#YqS8@DSz3yYi z8Cz|@B8a||l0H_Wf^GJm4D1DQL)M-S+fFZ}6zDYP2GrVd%UWAs%%&ke{D2}fp!46x zAnkoiX6CWygUeor6D7!W4AAmd*qx^rn6SY?4;=f4WoYt&;))=4tChOYJ2+d$#{`|BzFpHSB?^%roqr0?}jTxtXoT`HbO_keio3o z9%7#If5&Z38}6--#tdvcV8@>V#c#7cSUE_J!Cysc7iZ;p2vV>5>A3di{F{diy zW03g}F{e*5({Tc`AO-TlryUd3KyjVX^ED{oHN9P%m>92wJ!2Ebc;E|+I&>a*d{@D1 z;MwwjAHXS4pse#l`s=WW00Io;7$eAW4MI?cS%EsGge=R~rs5$jq?$6V4Q|R!{n20+ z7+^GZ?jHO7`f<2QwrQ961_NMbh(@K+zN~fB-Xfi4Ji?%g-|=XA*>Fr(iaOa(!Gvy1 zk@KsaIND)=Eky8d3+T4p?s}#SZmZuOrV{oSs_7%%V7T1SUi8Hjn$}SIhHV6-eYdg} z#{G;`F0h`}dV3ZCLxIi$t-B{;yON0XSqm&ZKj*b!2*E-3ZiX!eDpM|H?&FSPn(%l2 zy%E41|2|x~y8%Z`Y?a=SPjIht*BdmRe}7~Au4u)I+qRq5wt^po?xDE1!IkZMDEn>L zV~6jVwc2Bk0rQE%U##W{kJG^67jPahtS02q^hB<2m9ef@4)!D;Bzfi2K_1Kv|xq&MqQeBs0U#_6lR( zpe-C0ztJ4|u57XCvFn--yvLSCm#?D}Td@l%#e{nwiecPBX?Y*J6Fd#S_kHXEp`g;Y zq1V&bk$)TZd?(hy1qQaVSijo0$?(;c+%5+*Fkv6aIbLgnIj#vqeK4Tq zLp{gzWyO)N=>q_n-%R^HkR^6bXY^6b*gFF{vqtzegz18h(+ah;3`?@E@{^vYbNI| zc|c#;Oec3i)qpU2H)Fk-N_Jy!itxa0=^ey+$*6LPu8ysTPEq+YWrrG{10)JuBHVh| zdP>`aUF)G{D%~UF{Ui72aKUBlwU6Vzcq9}GFocZ7Sf%y`?Ec zS#>k+zZ#N$ZH?5HEnL5zlK%$e6>>T*Uh*(9oB9vO`P4HOGF(EwCc)Ub+*j+V;ct+W z4y>o0e*-M?O>*t+gdviq?UiG6@0--JS31M|Z*~FXf0GXHMaKb9kYOZ~Z$6y%;X-{*F<kFF*{nK+U)PcWc}0MMjqPm2{cQ%bP@llTpFP|KexQI^Myd{r^GLd5U z$wB{PCSU}aGM)3dBdEj%dvS#=FxpYT{yr1?pW)2Yz`h&u(6WWF2v(~ZMxiEk1ElA0 zo1Thidp-kwT?s#npUGrAzYhU%-{PZPTVKx=*aQk@)n)^ zCzuS{-E&ZuIQd&Fyg!Uam!pp#)IGsj`pUN`?~ttU^S5F6<_SKfd)DmMcf1AOvc6To zEkVr~91M;GZ9MQ6g&YRkM17ME%cUuUHUe$))AeCGh*MeG9Mng`p-Dhr)0nEi)@an( z(kPLS>13q#Mh%++?b|>ppEG~jM0uZs$=Ge2aHdQ@^5AzIy#>APv=)gxW8DUxecB_ zY!+eQpj`i86RkLc$-fJ(FOL8&gppqXu4^{In}AG?$lIjmWgV6&pU`Hl%-cj;zmlgI zA6xzfJRl7FH%_x zwr><{01>0pfx#WG%g`27P zm|W@)ZdUZJ4ZyXzf##I9>h=P^+}|;qDfv4YnRrdNyw>*Q%)ERRk72?6)FhOf^Bokt z=zs3_GMPpnmjhh4;v>X+zm6AFn5f}%ya8uy4bN<*mhU06Al&!8%%X$G<#e-TwrkD* zQ0RzR2q6j;>nAr;_6e+ss#jPF&S|B}6R7l>&9veKxOQ|aIex&d5D=CA07i9LEA9CK zGYE0-k1{vxwpIpih@X2=)k<@I1Yg44zY{;oChtG+Eqbm`CpIa&SB&a&=ZCZ5_9uUI7a5@1 zXIbf5jJmiC3wQi948wf7qlXXQ<9?CVVRxuD*w-R1^zNapzu@9U7$kNmMto?e{TFar z?586CBUf>q+c^a6C8v;%_@Yyw(8X`#Ryim=d#1FWb#_efE<7*VxsEMR{EN-FcavWkHrIu}Dx*2@)iLU&Idt(i&?BQDZ)?F_DtQ zBo=8!YjU;a##PZMAxa~1Qe%>BOD&I~m82$XQ(|aDMKnqqni4~-vD{XPRi1lEYEupO zcV^!G$RB;4>+|58GjqaR`0Ug7O>F&Q`1m@((Z<2{8V4mg2VY8TV>?p`Y^Wxcb0H8UJ$~xfc3A`(;$#`uxN20eqrj-ceE{9s|zN zz`Xm

e(uEOb1aTj%CGfc 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 T^iHPBjB)&9tR8X7 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 diff --git a/patch_v2/meow_launcherd/meow_launcherd.c b/patch_v2/meow_launcherd/meow_launcherd.c index 03ff2b7..a41a5bf 100644 --- a/patch_v2/meow_launcherd/meow_launcherd.c +++ b/patch_v2/meow_launcherd/meow_launcherd.c @@ -782,27 +782,37 @@ static void draw_text(int x, int y, const char *s, int scale, uint32_t color) /* ================================================================== */ /* M2.6 meow_font 集成(agent-28 字体子系统,font/meow_font.a + libz.a)*/ -/* 字库放 TF 卡 MeowOS/fonts/default/font.png+font.idx(或固件 /usr/share/ */ -/* meowos/font/);MeowOS 启动 ensure_card_mounted 后再 load,卡晚 */ +/* M2.6 MeowOS 字重结构:字库放 TF 卡 MeowOS/fonts/default/regular/font.png+font.idx + *(或固件 /usr/share/meowos/font/);MeowOS 启动 ensure_card_mounted 后再 load,卡晚 */ /* 挂载时轮询重试。没加载成功时 ui_draw 回退 5x7 点阵(ASCII)。 */ /* ================================================================== */ -#define UI_FONT_PNG_CARD "/usr/data/mnt/sd_0/MeowOS/fonts/default/font.png" -#define UI_FONT_IDX_CARD "/usr/data/mnt/sd_0/MeowOS/fonts/default/font.idx" +#define UI_FONT_PNG_CARD "/usr/data/mnt/sd_0/MeowOS/fonts/default/regular/font.png" +#define UI_FONT_IDX_CARD "/usr/data/mnt/sd_0/MeowOS/fonts/default/regular/font.idx" #define UI_FONT_PNG_SYS "/usr/share/meowos/font/font.png" #define UI_FONT_IDX_SYS "/usr/share/meowos/font/font.idx" -/* M2.5x:TF 卡多字体库 —— 字体目录 = <卡根>/MeowOS/fonts//(font.png+font.idx+font.json)。 +/* M2.5x 多字体库 + M2.6 字重:字体目录 = <卡根>/MeowOS/fonts///(font.png+font.idx+font.json)。 * <卡根> 默认 /usr/data/mnt/sd_0(card_present() 判定;--fontscan 可指定宿主根以便单测)。 */ #define MEOW_FONTS_CFG "MeowOS/fonts" #define FONT_PRESETS_MAX 17 /* 1 默认 + ≤16 卡内字体(防爆) */ +/* M2.6 字重结构:卡内字体 = <卡根>/MeowOS/fonts///(三件套)。 + * 每个 preset = 一套 /(如 misans/regular)。值 = 卡根相对路径 + * MeowOS/fonts///font.png;family/weight 单列供设置页「family→字重」子菜单 + * 分组与 meow_font_effective_paths_tiered 按 family+weight 选库。 */ static const char *font_presets[FONT_PRESETS_MAX]; /* SC_PRESET 值 = 卡根相对路径 */ -static const char *font_preset_labels[FONT_PRESETS_MAX]; /* SC_PRESET 中文标签(含档位大小标记) */ +static const char *font_preset_labels[FONT_PRESETS_MAX]; /* SC_PRESET 中文标签(含字重+档位大小标记) */ /* M2.5x 字体档位:每套的 charset 档("common"/"gbk"/"full",取自 font.json,缺省 "common") * 与 glyph_count(信息用)。供档位分层装载(meow_font_effective_paths_tiered)与设置页标注。 */ static const char *font_preset_tiers[FONT_PRESETS_MAX]; static int font_preset_glyphs[FONT_PRESETS_MAX]; +static const char *font_preset_fams[FONT_PRESETS_MAX]; /* family slug(目录一级) */ +static const char *font_preset_wts[FONT_PRESETS_MAX]; /* weight slug(目录二级) */ +static const char *font_preset_names[FONT_PRESETS_MAX]; /* font.json name(family 显示名) */ static char font_preset_val_buf[FONT_PRESETS_MAX][320]; /* 值持久存储(指向上面指针数组) */ -static char font_preset_label_buf[FONT_PRESETS_MAX][80]; /* 标签持久存储 */ +static char font_preset_label_buf[FONT_PRESETS_MAX][96]; /* 标签持久存储(含字重+档位标记) */ static char font_preset_tier_buf[FONT_PRESETS_MAX][8]; /* charset 持久存储 */ +static char font_preset_fam_buf[FONT_PRESETS_MAX][64]; /* family 持久存储 */ +static char font_preset_wt_buf[FONT_PRESETS_MAX][32]; /* weight 持久存储 */ +static char font_preset_name_buf[FONT_PRESETS_MAX][64]; /* name 持久存储 */ static int font_presets_n = 0; /* 运行时动态计数(默认=1,仅"默认字体") */ static int mfont_ready = 0; static int mfont_forced = 0; /* font.file 变更→强制真实(un)load,跳过 SDK 复用捷径 */ @@ -855,7 +865,7 @@ static int meow_font_resolve_selected(char *out_png, int png_len, char *out_idx, /* 尝试加载字库;成功返回 1。优先级(M2.5x,font.load_full 已接入): * 0) 生效档 = font.load_full ? gbk : common(launcher 自身 UI 跟随系统大字库开关); * 1) 生效字体(tier 解析,tier0 即 font.file 所选;相对路径按卡根解析); - * 2) 卡 MeowOS/fonts/default/font.png(默认字库); + * 2) 卡 MeowOS/fonts/default/regular/font.png(默认字库); * 3) 固件 /usr/share/meowos/font/font.png。 * A-1/A-2:SDK meow_ui_init() 已用同一 meow_font.o 加载过(可能成功也可能未成功)。 * 当字体指向「默认卡字库」或未设置时复用 SDK 已加载状态,避免重复 unload+reload; @@ -899,9 +909,42 @@ static int meow_font_ensure(void) return 0; } +/* 从 MeowOS/fonts///font.png 绝对路径提 family(第一级目录名)。 + * 如 .../misans/regular/font.png → "misans"、.../default/regular/font.png → "default"; + * 结构异常/找不到前缀 → 回退 "default"。 */ +static void font_family_from_png(const char *png, char *out, int olen) +{ + const char *prefix = "/MeowOS/fonts/"; + const char *p = png ? strstr(png, prefix) : NULL; + if (!p) { snprintf(out, olen, "default"); return; } + const char *q = p + strlen(prefix); + const char *slash = strchr(q, '/'); + int n = slash ? (int)(slash - q) : (int)strlen(q); + if (n <= 0 || n >= olen) { snprintf(out, olen, "default"); return; } + memcpy(out, q, (size_t)n); out[n] = 0; +} + +/* 同路径同时提取 family + weight(两级目录名)。weight 缺省 "regular"。 */ +static void font_family_weight_from_png(const char *png, char *fam, int flen, char *wt, int wlen) +{ + const char *prefix = "/MeowOS/fonts/"; + const char *p = png ? strstr(png, prefix) : NULL; + if (!p) { snprintf(fam, flen, "default"); snprintf(wt, wlen, "regular"); return; } + const char *q = p + strlen(prefix); + const char *s1 = strchr(q, '/'); + if (!s1) { snprintf(fam, flen, "%s", q); snprintf(wt, wlen, "regular"); return; } + int nf = (int)(s1 - q); + if (nf > 0 && nf < flen) { memcpy(fam, q, (size_t)nf); fam[nf] = 0; } + else snprintf(fam, flen, "default"); + const char *s2 = strchr(s1 + 1, '/'); + int nw = s2 ? (int)(s2 - (s1 + 1)) : (int)strlen(s1 + 1); + if (nw > 0 && nw < wlen) { memcpy(wt, s1 + 1, (size_t)nw); wt[nw] = 0; } + else snprintf(wt, wlen, "regular"); +} + /* 求「当前生效字体」的 png/idx 绝对路径 + family,供 launch_app 注入 MEOW_FONT_PNG/IDX/APP。 * 优先级(与 meow_font_ensure 一致):font.file(resolve_selected)→ 卡默认 MeowOS/fonts/default。 - * family 取自 MeowOS/fonts//font.png 目录名;无法判定则 "default"。 + * family 取自 MeowOS/fonts///font.png 的第一级目录名;无法判定则 "default"。 * 返回 0 成功(out_png/out_idx/out_family 已填),-1 无卡/无可用字体(调用方跳过注入, * SDK 自身会回退卡默认→固件→点阵)。 */ static int meow_font_effective_paths(char *out_png, int plen, char *out_idx, int ilen, @@ -911,15 +954,7 @@ static int meow_font_effective_paths(char *out_png, int plen, char *out_idx, int if (meow_font_resolve_selected(fpng, sizeof fpng, fidx, sizeof fidx) == 0) { snprintf(out_png, plen, "%s", fpng); snprintf(out_idx, ilen, "%s", fidx); - const char *prefix = "/MeowOS/fonts/"; - const char *p = strstr(fpng, prefix); - if (p) { - const char *q = p + strlen(prefix); - const char *end = strrchr(q, '/'); - int rest = end ? (int)(end - q) : 0; - if (rest > 0 && rest < flen) { memcpy(out_family, q, rest); out_family[rest] = 0; } - else snprintf(out_family, flen, "default"); - } else snprintf(out_family, flen, "default"); + font_family_from_png(fpng, out_family, flen); return 0; } /* 回退卡默认 MeowOS/fonts/default */ @@ -958,9 +993,10 @@ static int meow_font_effective_tier(int app_tier) * - 生效档 = max(app 声明档, font.load_full ? GBK : COMMON):系统「加载大字库」开 → * 强制 ≥gbk; * - tier<=common → 走既有 meow_font_effective_paths(font.file/卡默认/固件); - * - tier>0 → 在已扫描的 MeowOS/fonts// 里找 charset 匹配(gbk 请求接受 gbk/full; - * full 请求接受 full)的那套,以其 font.png/idx 绝对路径返回(family = 目录名); - * - 找不到匹配的大字库 → 回退 meow_font_effective_paths(避免 app 直接点到固件小库)。 + * - tier>0 → 在已扫描的 MeowOS/fonts/// 里找 charset 匹配(gbk 请求接受 + * gbk/full;full 请求接受 full)的那套,以其 font.png/idx 绝对路径返回(family = 一级目录名); + * - M2.6 字重:优先选「与用户当前 font.file 同 family(其次同 weight)」的大字库,避免 + * 大字库跳到另一家字体;找不到匹配 → 回退 meow_font_effective_paths(避免点到固件小库)。 * 返回 0 成功(out_png/out_idx/out_family 已填),-1 无可用。 */ static int meow_font_effective_paths_tiered(int tier, char *out_png, int plen, char *out_idx, int ilen, char *out_family, int flen) @@ -969,20 +1005,32 @@ static int meow_font_effective_paths_tiered(int tier, char *out_png, int plen, if (eff <= MEOW_FONT_TIER_COMMON) return meow_font_effective_paths(out_png, plen, out_idx, ilen, out_family, flen); /* 大字库:从扫描结果选 charset 匹配的一套。 - * 打分(高优先):gbk 请求 → gbk=2 > full=1;full 请求 → full=2 > gbk=1(降级可接受)。 */ + * 打分(档位主导 ×100):gbk 请求 → gbk=200 > full=100;full 请求 → full=200 > gbk=100; + * + 同 family +30(其次同 weight +10,M2.6)仅作同档位内 tie-break:大字库沿用用户所选 + * family,但绝不因「同 family」而把 common 小库越档选成大字库。 */ const char *want = font_tier_charset(eff); + char curfam[64] = "", curwt[32] = ""; + { /* 用户当前 font.file 所选 family/weight(无法判定 → 空,不参与加成) */ + char fpng[400], fidx[400]; + if (meow_font_resolve_selected(fpng, sizeof fpng, fidx, sizeof fidx) == 0) + font_family_weight_from_png(fpng, curfam, sizeof curfam, curwt, sizeof curwt); + } char ref[320]; - int found_family = -1, best_score = 0; + int found = -1, best_score = 0; for (int i = 0; i < font_presets_n; i++) { const char *cs = font_preset_tiers[i] ? font_preset_tiers[i] : "common"; + /* 档位优先(×100 主导):gbk 请求 → gbk=200 > full=100;full 请求 → full=200 > gbk=100。 + * M2.6:同 family +30、同 weight +10 仅作同档位内 tie-break(不越档选小库)。 */ int score = 0; - if (!strcmp(cs, want)) score = 2; - else if (!strcmp(cs, "full") || !strcmp(cs, "gbk")) score = 1; /* 降级 */ - if (score > best_score) { best_score = score; found_family = i; } + if (!strcmp(cs, want)) score = 200; + else if (!strcmp(cs, "full") || !strcmp(cs, "gbk")) score = 100; /* 降级 */ + if (curfam[0] && font_preset_fams[i] && !strcmp(font_preset_fams[i], curfam)) score += 30; + if (curfam[0] && curwt[0] && font_preset_wts[i] && !strcmp(font_preset_wts[i], curwt)) score += 10; + if (score > best_score) { best_score = score; found = i; } } - if (found_family >= 0) - snprintf(ref, sizeof ref, "%s", font_presets[found_family]); - if (found_family >= 0) { + if (found >= 0) + snprintf(ref, sizeof ref, "%s", font_presets[found]); + if (found >= 0) { /* 相对路径按卡根解析为设备绝对路径(与 meow_font_effective_paths 同源)。 */ if (meow_font_resolve_path(ref, out_png, plen) != 0) return -1; if (access(out_png, R_OK) != 0) goto fallback; @@ -992,15 +1040,7 @@ static int meow_font_effective_paths_tiered(int tier, char *out_png, int plen, out_idx[n-4] = '.'; out_idx[n-3] = 'i'; out_idx[n-2] = 'd'; out_idx[n-1] = 'x'; out_idx[n] = 0; } - const char *prefix = "/MeowOS/fonts/"; - const char *p = strstr(out_png, prefix); - if (p) { - const char *q = p + strlen(prefix); - const char *end = strrchr(q, '/'); - int rest = end ? (int)(end - q) : 0; - if (rest > 0 && rest < flen) { memcpy(out_family, q, rest); out_family[rest] = 0; } - else snprintf(out_family, flen, "default"); - } else snprintf(out_family, flen, "default"); + font_family_from_png(out_png, out_family, flen); return 0; } fallback: @@ -1680,15 +1720,17 @@ static int ensure_card_mounted(void) } /* ================================================================== */ -/* M2.5x:TF 卡多字体库扫描 + preset 动态化 */ -/* 字体目录 = <卡根>/MeowOS/fonts//,每套含三件套: */ +/* M2.5x 多字体库扫描 + M2.6 字重结构 / preset 动态化 */ +/* 字体目录 = <卡根>/MeowOS/fonts///,每套含三件套: */ /* font.png(预渲染灰度 PNG,bit depth 4|8)+ font.idx(MFNI v2 索引) */ /* + font.json(元数据 + 完整性校验)。缺任一件 → 该套不进列表 + 日志。 */ /* font.json schema(定版): */ /* { */ -/* "family": "家族标识(同目录名)", // 信息用,不参与校验 */ +/* "family": "家族标识(同目录名/family)", // 信息用,不参与校验 */ /* "name": "下拉显示名", // 缺则回退目录名 */ +/* "weight": "regular", // 字重 slug(缺省 regular) */ /* "glyph_count": 10000, // 信息用 */ +/* "charset": "common|gbk|full", // 档位(M2.5x,驱动按需加载) */ /* "size_list": [28,20], // 信息用 */ /* "bit_depth": 4, // 信息用(4|8) */ /* "sha256_png": "<64hex>", // font.png 校验 */ @@ -1746,14 +1788,17 @@ static int font_sha_eq(const char *a, const char *b) return 1; } -/* 解析 font.json:提取 name / sha256_png / sha256_idx(文件缺失或解析不出则留空)。 */ +/* 解析 font.json:提取 name / sha256_png / sha256_idx / weight(M2.6,缺省 "regular")。 + * 文件缺失或解析不出则留空(name 空 → 调用方回退目录名;weight 空 → 回退 "regular")。 */ static void meow_font_json_probe(const char *json_path, char *name, int nlen, char *sha_png, int slen, char *sha_idx, int xlen, - char *charset, int clen, int *glyph_count) + char *charset, int clen, int *glyph_count, + char *weight, int wlen) { name[0] = 0; sha_png[0] = 0; sha_idx[0] = 0; if (charset) charset[0] = 0; if (glyph_count) *glyph_count = 0; + if (weight) weight[0] = 0; FILE *f = fopen(json_path, "r"); if (!f) return; char buf[256]; @@ -1772,10 +1817,31 @@ static void meow_font_json_probe(const char *json_path, char *name, int nlen, if (json_str(buf, "glyph_count", v, sizeof v) > 0 && v[0]) *glyph_count = atoi(v); } + /* M2.6 字重:weight(regular|bold|italic|…),缺省 "regular"。 */ + if (weight && !weight[0]) { + char v[32] = ""; + if (json_str(buf, "weight", v, sizeof v) > 0 && v[0]) + snprintf(weight, wlen, "%s", v); + } } fclose(f); } +/* 字重 slug → 显示名(首字母大写、连字符/下划线转空格:regular→Regular、bold→Bold、italic→Italic)。 */ +static void font_weight_display(const char *weight, char *out, int olen) +{ + const char *w = (weight && weight[0]) ? weight : "regular"; + out[0] = 0; + int o = 0, cap = 1; + for (const char *p = w; *p && o < olen - 1; p++) { + char c = *p; + if (c == '_' || c == '-') { if (o < olen - 1) out[o++] = ' '; cap = 1; continue; } + out[o++] = cap ? (char)((c >= 'a' && c <= 'z') ? c - 32 : c) : c; + cap = 0; + } + out[o] = 0; +} + /* 档位大小标记(设置页字体选项标注):common≈4k / gbk≈20k / full。 * 由 font.json 的 charset + glyph_count 派生;缺 charset 回退 common。 */ static void font_tier_marker(const char *charset, int glyph_count, char *out, int olen) @@ -1788,62 +1854,78 @@ static void font_tier_marker(const char *charset, int glyph_count, char *out, in snprintf(out, olen, "%s", tier); } -/* 探测一个 / 套件是否合法:三件套齐全 → 解析 label + 档位 + 校验 sha。 +/* 探测一个 <卡根>/MeowOS/fonts// 套件是否合法:三件套齐全 → 解析 label+档位+字重。 * 返回 1=进列表,0=跳过(缺组件/json 不可读)。sha 失败仅 WARN。 - * 输出:label=显示名+大小标记 `名字(common≈4k)`;charset/glyph_count=档位信息。 */ -static int meow_font_probe_family(const char *dirpath, const char *family, + * 输出:label=显示名 ` (common≈4k)`(如 `MiSans Regular(common≈4k)`); + * charset/glyph_count=档位信息;wtout=weight slug(缺省 "regular")。 */ +static int meow_font_probe_weight(const char *dirpath, const char *family, const char *weight, char *label, int llen, - char *charset, int clen, int *glyph_count) + char *charset, int clen, int *glyph_count, + char *wtout, int wtlen, char *nameout, int namelen) { char ppath[400], ipath[400], jpath[400]; snprintf(ppath, sizeof ppath, "%s/font.png", dirpath); snprintf(ipath, sizeof ipath, "%s/font.idx", dirpath); snprintf(jpath, sizeof jpath, "%s/font.json", dirpath); if (access(ppath, R_OK) != 0 || access(ipath, R_OK) != 0 || access(jpath, R_OK) != 0) { - logmsg("fonts: skip '%s' (缺 font.png/font.idx/font.json)", family); + logmsg("fonts: skip '%s/%s' (缺 font.png/font.idx/font.json)", family, weight); return 0; } char name[64] = "", jsha_png[80] = "", jsha_idx[80] = ""; - char cs[8] = ""; int gc = 0; + char cs[8] = ""; int gc = 0; char wts[32] = ""; meow_font_json_probe(jpath, name, sizeof name, jsha_png, sizeof jsha_png, - jsha_idx, sizeof jsha_idx, cs, sizeof cs, &gc); - /* 显示名 = 名 + 档位大小标记(如 `default(common≈4k)` / `gbk≈20k` / `full`) */ + jsha_idx, sizeof jsha_idx, cs, sizeof cs, &gc, wts, sizeof wts); + const char *wt = wts[0] ? wts : (weight ? weight : "regular"); + if (wtout) snprintf(wtout, wtlen, "%s", wt); + if (nameout) snprintf(nameout, namelen, "%s", name[0] ? name : family); + /* 显示名 = ` (common≈4k)`(字重缺省 Regular) */ + char wd[24]; font_weight_display(wt, wd, sizeof wd); char marker[24]; font_tier_marker(cs, gc, marker, sizeof marker); - snprintf(label, llen, "%s(%s)", name[0] ? name : family, marker); + snprintf(label, llen, "%s %s(%s)", name[0] ? name : family, wd, marker); if (charset) snprintf(charset, clen, "%s", cs[0] ? cs : "common"); if (glyph_count) *glyph_count = gc; /* 完整性校验:仅 WARN,不硬失败;该套仍标记可选。 */ char apng[80] = "", aidx[80] = ""; if (font_sha256_file(ppath, apng, sizeof apng) != 0) - logmsg("fonts: '%s' sha256(png) 不可用,跳过校验", family); + logmsg("fonts: '%s/%s' sha256(png) 不可用,跳过校验", family, wt); else if (jsha_png[0] && !font_sha_eq(apng, jsha_png)) - logmsg("fonts: '%s' WARN sha256_png 不匹配(仍可选)", family); + logmsg("fonts: '%s/%s' WARN sha256_png 不匹配(仍可选)", family, wt); if (font_sha256_file(ipath, aidx, sizeof aidx) != 0) - logmsg("fonts: '%s' sha256(idx) 不可用,跳过校验", family); + logmsg("fonts: '%s/%s' sha256(idx) 不可用,跳过校验", family, wt); else if (jsha_idx[0] && !font_sha_eq(aidx, jsha_idx)) - logmsg("fonts: '%s' WARN sha256_idx 不匹配(仍可选)", family); - logmsg("fonts: add '%s' (%s) charset=%s glyph_count=%d", label, family, cs[0]?cs:"common", gc); + logmsg("fonts: '%s/%s' WARN sha256_idx 不匹配(仍可选)", family, wt); + logmsg("fonts: add '%s/%s' (%s) charset=%s glyph_count=%d", family, wt, label, + cs[0]?cs:"common", gc); return 1; } -/* 扫描 /MeowOS/fonts/ 下每个家族子目录,重建字体 preset 列表(默认 + 卡内合法套件)。 - * 上限 FONT_PRESETS_MAX(1 默认 + ≤16 用户字体)。无卡/无目录时仅默认。 */ +/* 扫描 /MeowOS/fonts/ 下两级 //,重建字体 preset 列表。 + * 每个 (family,weight) 组合一套(如 misans/regular、misans/bold);family 级 'default' 由 + * 索引 0(默认字体)单独处理,不进循环,避免重复。上限 FONT_PRESETS_MAX + * (1 默认 + ≤16 用户字体)。无卡/无目录时仅默认。 */ static void meow_font_scan_presets_root(const char *card_root) { font_presets_n = 0; - font_presets[0] = "MeowOS/fonts/default/font.png"; /* 默认字库 = MeowOS/fonts/default */ - font_preset_labels[0] = font_preset_label_buf[0]; /* 指向缓冲(运行时派生含大小标记) */ - /* 默认套也读 font.json 档位(存在则跟真实档,缺则 common);档位信息供分层装载/标注。 */ + font_presets[0] = "MeowOS/fonts/default/regular/font.png"; /* 默认字库 = MeowOS/fonts/default/regular */ + font_preset_labels[0] = font_preset_label_buf[0]; /* 指向缓冲(运行时派生含字重+大小标记) */ + font_preset_fams[0] = font_preset_fam_buf[0]; + font_preset_wts[0] = font_preset_wt_buf[0]; + font_preset_names[0] = font_preset_name_buf[0]; + /* 默认套也读 font.json 档位+字重(存在则跟真实档,缺则 common/regular);供分层装载/标注。 */ { char jp[400], cs[8] = ""; int gc = 0; - char nm0[64] = "", sp0[80] = "", si0[80] = ""; - snprintf(jp, sizeof jp, "%s/%s/default/font.json", card_root, MEOW_FONTS_CFG); + char nm0[64] = "", sp0[80] = "", si0[80] = "", wt0[32] = ""; + snprintf(jp, sizeof jp, "%s/%s/default/regular/font.json", card_root, MEOW_FONTS_CFG); meow_font_json_probe(jp, nm0, sizeof nm0, sp0, sizeof sp0, si0, sizeof si0, - cs, sizeof cs, &gc); + cs, sizeof cs, &gc, wt0, sizeof wt0); char mk[24]; font_tier_marker(cs, gc, mk, sizeof mk); - snprintf(font_preset_label_buf[0], sizeof font_preset_label_buf[0], "默认字体(%s)", mk); + char wd[24]; font_weight_display(wt0[0] ? wt0 : "regular", wd, sizeof wd); + snprintf(font_preset_label_buf[0], sizeof font_preset_label_buf[0], "默认字体 %s(%s)", wd, mk); snprintf(font_preset_tier_buf[0], sizeof font_preset_tier_buf[0], "%s", cs[0]?cs:"common"); + snprintf(font_preset_fam_buf[0], sizeof font_preset_fam_buf[0], "default"); + snprintf(font_preset_wt_buf[0], sizeof font_preset_wt_buf[0], "%s", wt0[0]?wt0:"regular"); + snprintf(font_preset_name_buf[0], sizeof font_preset_name_buf[0], "默认字体"); font_preset_tiers[0] = font_preset_tier_buf[0]; font_preset_glyphs[0] = gc; } @@ -1855,21 +1937,37 @@ static void meow_font_scan_presets_root(const char *card_root) struct dirent *de; while ((de = readdir(d)) && font_presets_n < FONT_PRESETS_MAX) { if (de->d_name[0] == '.') continue; - char dirpath[400], label[80], cs[8] = ""; int gc = 0; - snprintf(dirpath, sizeof dirpath, "%s/%s", root, de->d_name); - if (meow_font_probe_family(dirpath, de->d_name, label, sizeof label, - cs, sizeof cs, &gc) == 0) - continue; /* 缺组件/损坏 → 跳过该套 */ - int i = font_presets_n; - snprintf(font_preset_val_buf[i], sizeof font_preset_val_buf[i], - "%s/%s/font.png", MEOW_FONTS_CFG, de->d_name); - snprintf(font_preset_label_buf[i], sizeof font_preset_label_buf[i], "%s", label); - snprintf(font_preset_tier_buf[i], sizeof font_preset_tier_buf[i], "%s", cs[0]?cs:"common"); - font_presets[i] = font_preset_val_buf[i]; - font_preset_labels[i] = font_preset_label_buf[i]; - font_preset_tiers[i] = font_preset_tier_buf[i]; - font_preset_glyphs[i] = gc; - font_presets_n++; + if (!strcmp(de->d_name, "default")) continue; /* 默认字体由索引 0 单独处理 */ + char fampath[400]; + snprintf(fampath, sizeof fampath, "%s/%s", root, de->d_name); + DIR *w = opendir(fampath); /* 一级:/ */ + if (!w) continue; + struct dirent *we; + while ((we = readdir(w)) && font_presets_n < FONT_PRESETS_MAX) { + if (we->d_name[0] == '.') continue; + char dirpath[400], label[96], cs[8] = ""; int gc = 0; char wt[32] = "", nm[64] = ""; + snprintf(dirpath, sizeof dirpath, "%s/%s", fampath, we->d_name); + if (meow_font_probe_weight(dirpath, de->d_name, we->d_name, label, sizeof label, + cs, sizeof cs, &gc, wt, sizeof wt, nm, sizeof nm) == 0) + continue; /* 缺组件/损坏 → 跳过该套 */ + int i = font_presets_n; + snprintf(font_preset_val_buf[i], sizeof font_preset_val_buf[i], + "%s/%s/%s/font.png", MEOW_FONTS_CFG, de->d_name, we->d_name); + snprintf(font_preset_label_buf[i], sizeof font_preset_label_buf[i], "%s", label); + snprintf(font_preset_tier_buf[i], sizeof font_preset_tier_buf[i], "%s", cs[0]?cs:"common"); + snprintf(font_preset_fam_buf[i], sizeof font_preset_fam_buf[i], "%s", de->d_name); + snprintf(font_preset_wt_buf[i], sizeof font_preset_wt_buf[i], "%s", wt); + snprintf(font_preset_name_buf[i], sizeof font_preset_name_buf[i], "%s", nm); + font_presets[i] = font_preset_val_buf[i]; + font_preset_labels[i] = font_preset_label_buf[i]; + font_preset_tiers[i] = font_preset_tier_buf[i]; + font_preset_fams[i] = font_preset_fam_buf[i]; + font_preset_wts[i] = font_preset_wt_buf[i]; + font_preset_names[i] = font_preset_name_buf[i]; + font_preset_glyphs[i] = gc; + font_presets_n++; + } + closedir(w); } closedir(d); } @@ -4630,7 +4728,7 @@ static const srow_t SMENU[] = { * 开 → 强制全系统用大字库 gbk≈20k 档(覆盖 app 未声明/覆盖默认 font.file); * 关(默认)→ 小字库 common≈4k,仅 app 声明 fonts:"full" 才大字库。 */ { "加载大字库", "font.load_full", SC_SWITCH, 0,0,0, NULL,NULL,0 }, - /* M2.5x 多字体:开关 + 6 个字符类别字体(preset=可用 MeowOS/fonts// 列表; + /* M2.5x 多字体:开关 + 6 个字符类别字体(preset=可用 MeowOS/fonts/// 列表; * 值空 = 跟随全局 font.file)。仅开关开启时 6 行可见(s_row_visible)。 */ { "多字体", "display.multi_font", SC_SWITCH, 0,0,0, NULL,NULL,0 }, { "中文(CJK)", "font.class_cjk", SC_PRESET, 0,0,0, font_presets, font_preset_labels, 0 }, @@ -4733,8 +4831,14 @@ static int s_next_setting(int i) return s_first_setting(); /* 回绕 */ } +/* 字体行(font.file + font.class_*)走「family→字重」两级子菜单(M2.6 字重结构) */ +static int s_row_is_font(const srow_t *r) +{ + return r && r->key && (!strcmp(r->key, "font.file") || !strncmp(r->key, "font.class_", 11)); +} + /* SC_PRESET 行取「选项表 + 数量」:字体行(font.file + font.class_*)用运行时动态数组 - * (TF 卡 MeowOS/fonts// 扫描结果,见字体区 font_presets/font_presets_n), + * (TF 卡 MeowOS/fonts/// 扫描结果,见字体区 font_presets/font_presets_n), * 其余行用编译期静态表(r->presets / r->preset_n)。 */ static const char *const *s_row_presets(const srow_t *r, int *n) { @@ -6036,6 +6140,71 @@ ddone: return result; } +/* ---- 字体行「family→字重」两级子菜单(M2.6 字重结构)---- + * 一级:列出扫描到的去重 family(class 行首项「跟随全局」=空值);选 family 后自动进入 + * 二级:该 family 的可用字重(regular/bold/italic…)。选中写 out_val = 卡根相对路径 + * MeowOS/fonts///font.png(或 class 行「跟随全局」=空串)。 + * 复用 s_dd_modal(与 WiFi/关于 同款模态)。返回 1=已选中(out_val 已填),0=取消。 */ +static int s_font_dropdown(const srow_t *r, char *out_val, int vlen) +{ + if (!r) return 0; + int is_cls = r->key && !strncmp(r->key, "font.class_", 11); + char cur[MEOW_SET_MAX_LEN]; + meow_settings_get_str(r->key, cur, sizeof cur); + char curfam[64] = "", curwt[32] = ""; + if (cur[0]) + font_family_weight_from_png(cur, curfam, sizeof curfam, curwt, sizeof curwt); + + /* ---- 一级:去重 family 列表(class 行首项「跟随全局」)---- */ + char fam_slug[S_NET_MAX][64], fam_disp[S_NET_MAX][64]; + int famn = 0; + if (is_cls) { + if (famn < S_NET_MAX) { snprintf(fam_slug[famn], sizeof fam_slug[0], ""); + snprintf(fam_disp[famn], sizeof fam_disp[0], "跟随全局字体"); famn++; } + } + for (int i = 0; i < font_presets_n && famn < S_NET_MAX; i++) { + const char *f = font_preset_fams[i] ? font_preset_fams[i] : ""; + int dup = 0; + for (int k = 0; k < famn; k++) if (!strcmp(fam_slug[k], f)) { dup = 1; break; } + if (dup) continue; + snprintf(fam_slug[famn], sizeof fam_slug[0], "%s", f); + snprintf(fam_disp[famn], sizeof fam_disp[0], "%s", + (font_preset_names[i] && font_preset_names[i][0]) ? font_preset_names[i] : f); + famn++; + } + if (famn <= 0) return 0; + const char *fitem[S_NET_MAX]; + char ftext[S_NET_MAX][64]; + for (int i = 0; i < famn; i++) { snprintf(ftext[i], sizeof ftext[i], "%s", fam_disp[i]); fitem[i] = ftext[i]; } + int cur_fam = is_cls ? 0 : -1; + for (int i = is_cls ? 1 : 0; i < famn; i++) + if (curfam[0] && !strcmp(fam_slug[i], curfam)) cur_fam = i; + int pick = s_dd_modal(r->label, fitem, famn, cur_fam); + if (pick < 0) return 0; + if (is_cls && pick == 0) { snprintf(out_val, vlen, ""); return 1; } /* 跟随全局 */ + const char *fam = fam_slug[pick]; + + /* ---- 二级:该 family 的字重列表(值=完整卡根相对路径,显示=label)---- */ + char wt_val[S_NET_MAX][MEOW_SET_MAX_LEN]; + char wt_text[S_NET_MAX][96]; + int wn = 0; + for (int i = 0; i < font_presets_n && wn < S_NET_MAX; i++) { + if (!font_preset_fams[i] || strcmp(font_preset_fams[i], fam)) continue; + snprintf(wt_val[wn], sizeof wt_val[0], "%s", font_presets[i]); + snprintf(wt_text[wn], sizeof wt_text[0], "%s", font_preset_labels[i]); + wn++; + } + if (wn <= 0) return 0; /* 该 family 无字重(理论不出现:能进 family 必已探到字重) */ + const char *witem[S_NET_MAX]; + for (int i = 0; i < wn; i++) witem[i] = wt_text[i]; + int cur_wt = -1; + for (int i = 0; i < wn; i++) if (cur[0] && !strcmp(wt_val[i], cur)) cur_wt = i; + int wp = s_dd_modal(r->label, witem, wn, cur_wt); + if (wp < 0) return 0; + snprintf(out_val, vlen, "%s", wt_val[wp]); + return 1; +} + /* ---- 运行设置页(独立子循环;run_menu 触摸命中设置行后调用)---- */ static void run_settings_page(void) { @@ -6043,7 +6212,7 @@ static void run_settings_page(void) int scroll_off = 0; int H = fb_yres; - /* M2.5x:进设置页扫描一次 TF 卡 MeowOS/fonts//,刷新「字体文件」下拉。 + /* M2.6:进设置页扫描一次 TF 卡 MeowOS/fonts///,刷新「字体文件」下拉。 * 进设置时卡通常在位;此步只枚举/校验,不加载(加载由 meow_font_ensure 按 font.file 决定)。 */ meow_font_scan_presets(); @@ -6369,11 +6538,20 @@ static void run_settings_page(void) } else if (r->ctrl == SC_ENUM || r->ctrl == SC_PRESET) { /* 单次点击即开选择器子对话框 */ after_modal = 1; /* 关闭后整帧重绘(还原被 dim 的状态栏) */ - int pick = s_dropdown(r); - if (pick >= 0) { - if (r->ctrl == SC_ENUM) meow_settings_set_enum(r->key, pick); - else meow_settings_set_str(r->key, s_preset_value(r, pick)); - s_commit(r, 1); + if (s_row_is_font(r)) { + /* M2.6 字重:字体行走「family→字重」两级子菜单 */ + char fval[MEOW_SET_MAX_LEN]; + if (s_font_dropdown(r, fval, sizeof fval)) { + meow_settings_set_str(r->key, fval); + s_commit(r, 1); + } + } else { + int pick = s_dropdown(r); + if (pick >= 0) { + if (r->ctrl == SC_ENUM) meow_settings_set_enum(r->key, pick); + else meow_settings_set_str(r->key, s_preset_value(r, pick)); + s_commit(r, 1); + } } /* M2.38 Bug3:s_dropdown 返回后彻底排空本页 tfd + * 重置触摸基线。根因:input 子系统把事件广播到所有 @@ -7429,17 +7607,18 @@ int main(int argc, char **argv) * menu open so edits apply without a daemon restart) */ settings_load(); /* M2.11:读系统设置(audio.volume 等),供音量/状态栏使用 */ - /* M2.5x:启动扫描一次 TF 卡 MeowOS/fonts//,填充「字体文件」下拉 preset。 + /* M2.6:启动扫描一次 TF 卡 MeowOS/fonts///,填充「字体文件」下拉 preset。 * 无卡/无字库目录 → 仅默认字体(等价现状)。进设置页时 run_settings_page 会再扫一次。 */ meow_font_scan_presets(); if (fontscan_root) { - /* M2.5x 测试钩子:扫描指定卡根下的 MeowOS/fonts// 并打印 preset(qemu/宿主可测)。 - * 用于验证 font.json 解析/三件套/缺件跳过/sha 校验 + preset 动态化逻辑。 */ + /* M2.6 测试钩子:扫描指定卡根下的 MeowOS/fonts/// 并打印 preset(qemu/宿主可测)。 + * 用于验证 font.json 解析(含 weight)/三件套/缺件跳过/sha 校验 + preset 动态化逻辑。 */ meow_font_scan_presets_root(fontscan_root); printf("fonts=%d\n", font_presets_n); for (int i = 0; i < font_presets_n; i++) - printf(" %d %s -> %s\n", i, font_preset_labels[i], font_presets[i]); + printf(" %d %s -> %s (fam=%s wt=%s)\n", i, font_preset_labels[i], font_presets[i], + font_preset_fams[i], font_preset_wts[i] ? font_preset_wts[i] : "regular"); return 0; } diff --git a/patch_v2/meow_launcherd/meow_settings.c b/patch_v2/meow_launcherd/meow_settings.c index 20026c7..5fe436e 100644 --- a/patch_v2/meow_launcherd/meow_settings.c +++ b/patch_v2/meow_launcherd/meow_settings.c @@ -95,7 +95,7 @@ static const meow_setting_def g_defs[] = { /* M2.38:设置页滑动方向切换(0=标准:手指上滑→列表往下翻;1=反向) */ { "input.swipe_invert", SET_BOOL, "0", 0, 0, NULL, NULL }, /* 字体/主题 */ - { "font.file", SET_STR, "MeowOS/fonts/default/font.png", 0,0, NULL, NULL }, + { "font.file", SET_STR, "MeowOS/fonts/default/regular/font.png", 0,0, NULL, NULL }, /* M2.5x 多字体:6 个字符类别各一字体(SET_STR,值=字体 family 相对路径,缺省空=跟随全局 font.file)。 * 仅 display.multi_font=1 时生效;同一 family 去重;上限 4 套不同字体(超出 WARN)。 */ { "font.class_cjk", SET_STR, "", 0,0, NULL, NULL }, diff --git a/patch_v2/meow_launcherd/test_font_weight.py b/patch_v2/meow_launcherd/test_font_weight.py new file mode 100644 index 0000000..187a613 --- /dev/null +++ b/patch_v2/meow_launcherd/test_font_weight.py @@ -0,0 +1,155 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +test_font_weight.py — MeowOS 字重结构(M2.6)宿主导出单测。 + +验证 launcher 侧 font 扫描/解析的两块(MEOWOS_SPEC_REF §5.2 字重结构 + §5.7.1 扫描): + (1) 两级扫描:<卡根>/MeowOS/fonts/// 每 (family,weight) 一套,生成 + preset(值 = MeowOS/fonts///font.png,fam/wt 单列)。 + (2) font.json weight 解析:label = ` (common≈4k)`(如 `MiSans Regular(common≈4k)`); + 缺 weight 回退 regular;缺三件套/损坏 → 跳过;旧式一级布局(font.png 直接在 /) + → 不产出(迁移后需重扫)。 + +方法:构造一个假卡根(含合法多 weight family / 缺件 family / 旧式文件 / 顶层 stray), +用 qemu-mipsel 跑真实 meow_launcherd --fontscan ,断言 stdout 的 preset 列表。 + +用法(在 patch_v2/meow_launcherd 下): + 先 build_launcher.sh 生成 meow_launcherd(mipsel 静态 ELF),再: + python3 test_font_weight.py + 依赖 qemu-mipsel(qemu-user)。退出码 0=全过,非 0=断言失败。 +""" +import json +import os +import shutil +import subprocess +import sys +import tempfile + +ROOT = os.path.dirname(os.path.abspath(__file__)) +BIN = os.path.join(ROOT, "meow_launcherd") +FIX_ROOT = tempfile.mkdtemp(prefix="mfscan_", dir="/tmp") +FONTS = os.path.join(FIX_ROOT, "MeowOS", "fonts") + + +def write_font(fam, wt, name, weight="regular", charset="common"): + """写一套 //font.png+font.idx+font.json(合法三件套;png/idx 为占位字节)。""" + d = os.path.join(FONTS, fam, wt) + os.makedirs(d, exist_ok=True) + with open(os.path.join(d, "font.png"), "wb") as f: + f.write(b"\x89PNG\r\n\x1a\nPLACEHOLDER") + with open(os.path.join(d, "font.idx"), "wb") as f: + f.write(b"MFNI\x02\x00PLACEHOLDER") + meta = { + "family": fam, "name": name, "weight": weight, "glyph_count": 4110, + "charset": charset, "size_list": [20, 28], "bit_depth": 4, + "sha256_png": "0" * 64, "sha256_idx": "0" * 64, + } + with open(os.path.join(d, "font.json"), "w", encoding="utf-8") as f: + json.dump(meta, f, ensure_ascii=False, indent=2) + + +def run_scan(): + """返回 (ret, stdout)。""" + r = subprocess.run(["qemu-mipsel", BIN, "--fontscan", FIX_ROOT], + capture_output=True, text=True, timeout=120) + return r.returncode, r.stdout + + +def main(): + if not os.path.exists(BIN): + print(f"FAIL: 未找到 {BIN},请先跑 build_launcher.sh"); return 2 + if shutil.which("qemu-mipsel") is None: + print("FAIL: 缺 qemu-mipsel"); return 2 + + # ---- 构造卡根 ---- + write_font("misans", "regular", "MiSans", weight="regular") + write_font("misans", "bold", "MiSans", weight="bold") + write_font("meslo", "regular", "Meslo LG S Mono", weight="regular") + write_font("default", "regular", "font", weight="regular") + # 缺件:无 font.idx → 应跳过 + broken = os.path.join(FONTS, "broken", "regular") + os.makedirs(broken, exist_ok=True) + with open(os.path.join(broken, "font.png"), "wb") as f: + f.write(b"PNG") + with open(os.path.join(broken, "font.json"), "w") as f: + json.dump({"family": "broken", "name": "Broken", "weight": "regular"}, f) + # 旧式一级布局:font.png 直接在 / 下(无 weight 级)→ 迁移后应不产出 + old = os.path.join(FONTS, "legacy") + os.makedirs(old, exist_ok=True) + with open(os.path.join(old, "font.png"), "wb") as f: + f.write(b"PNG") + # 顶层 stray 文件(非目录)→ 应忽略 + with open(os.path.join(FONTS, "stray.png"), "wb") as f: + f.write(b"PNG") + + rc, out = run_scan() + if rc != 0: + print(f"FAIL: qemu --fontscan 返回 {rc}\n{out}"); return 1 + if os.path.exists(os.path.join(os.path.dirname(FIX_ROOT), "meow_boot.log")): + pass # launcher 日志在 /tmp,忽略 + + # ---- stdout -> dict ---- + presets = {} + famwt = {} + for line in out.splitlines(): + line = line.strip() + if line.startswith("fonts="): + continue + if line and line[0].isdigit(): + # " 0 Label -> path (fam=.. wt=..)" 但行首 i 数字后无空格分隔可靠断言,用 split + parts = line.split(" -> ") + if len(parts) != 2: + continue + idx = int(parts[0].split()[0]) + rest, famwt_part = parts[1].split(" (fam=", 1) + path = rest.strip() + fam = famwt_part.split(" wt=")[0] + wt = famwt_part.split(" wt=")[1].rstrip(")") + presets[path] = idx + famwt[path] = (fam, wt) + elif line.startswith("fonts="): + n = int(line.split("=")[1]) + if n != len(presets): + print(f"FAIL: fonts={n} 但解析到 {len(presets)} 条\n{out}"); return 1 + + fails = 0 + def check(cond, msg): + nonlocal fails + if not cond: + fails += 1 + print(f"FAIL: {msg}") + else: + print(f"ok : {msg}") + + p1 = "MeowOS/fonts/misans/regular/font.png" + p2 = "MeowOS/fonts/misans/bold/font.png" + p3 = "MeowOS/fonts/meslo/regular/font.png" + p0 = "MeowOS/fonts/default/regular/font.png" + + # 两级扫描产出(默认 + 3 套,共 4) + check(len(presets) == 4, f"扫描产出 4 套(实际 {len(presets)})") + check(p0 in presets and presets[p0] == 0, "索引 0 = default/regular") + check(p1 in presets, "misans/regular 进列表") + check(p2 in presets, "misans/bold 进列表") + check(p3 in presets, "meslo/regular 进列表") + check(famwt.get(p1) == ("misans", "regular"), "fam/wt(misans/regular) 系家族+字重") + check(famwt.get(p2) == ("misans", "bold"), "fam/wt(misans/bold) 系家族+字重") + # 缺件 / 旧式一级 / 顶层文件 → 不产出 + check(all("broken" not in k for k in presets), "缺 font.idx 的 broken/regular 被跳过") + check(all("legacy" not in k for k in presets), "旧式一级布局 legacy(无 weight 级)被忽略(迁移后需重扫)") + check(all("stray" not in k for k in presets), "顶层 stray.png(非目录)被忽略") + # weight 解析 → 显示名 `Name Weight(common≈4k)` + labels = {os.path.basename(os.path.dirname(os.path.dirname(p))): + p for p in presets} + # 用 stdout 里的 Label 校验(weight 大写 + 档位标记) + out_has = "MiSans Regular(common≈4k)" in out + out_has_bold = "MiSans Bold(common≈4k)" in out + check(out_has, "label 含 `MiSans Regular(common≈4k)`(weight 解析+大小标记)") + check(out_has_bold, "label 含 `MiSans Bold(common≈4k)`(bold 字重解析)") + + print(f"\n{'RESULT: PASS' if fails == 0 else 'RESULT: FAIL'} ({fails} failures)") + return 1 if fails else 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/patch_v2/sdk/meow_ui_gfx.c b/patch_v2/sdk/meow_ui_gfx.c index e7841af..082d937 100644 --- a/patch_v2/sdk/meow_ui_gfx.c +++ b/patch_v2/sdk/meow_ui_gfx.c @@ -29,12 +29,12 @@ #define FBIO_WAITFORVSYNC 0x4620 #define FB_DEV "/dev/fb0" -#define MEOW_FONT_PNG_CARD "/usr/data/mnt/sd_0/MeowOS/fonts/default/font.png" -#define MEOW_FONT_IDX_CARD "/usr/data/mnt/sd_0/MeowOS/fonts/default/font.idx" +#define MEOW_FONT_PNG_CARD "/usr/data/mnt/sd_0/MeowOS/fonts/default/regular/font.png" +#define MEOW_FONT_IDX_CARD "/usr/data/mnt/sd_0/MeowOS/fonts/default/regular/font.idx" #define MEOW_FONT_PNG_SYS "/usr/share/meowos/font/font.png" #define MEOW_FONT_IDX_SYS "/usr/share/meowos/font/font.idx" -/* 默认字库(卡 MeowOS/fonts/default)与固件内置之外,launcher 会把「当前生效字体」 - * 经环境变量下发给 app(见 meow_launcherd.c launch_app / meow_font_effective_paths): +/* 默认字库(卡 MeowOS/fonts/default/regular,M2.6 字重结构)与固件内置之外,launcher 会把 + * 「当前生效字体」经环境变量下发给 app(见 meow_launcherd.c launch_app / meow_font_effective_paths): * MEOW_FONT_PNG / MEOW_FONT_IDX = 绝对路径;MEOW_FONT_APP = 或 "default"。 * SDK load_font 优先读 env(匹配系统 font.file),无则回退卡默认 → 固件。 */ @@ -361,18 +361,19 @@ void meow_ui_swipe_hint(int x) * 有状态栏(非全屏)→ y = 状态栏高度;收合(collapsed)→ y=提示线下缘 * (MUI_SBAR_COLLAPSE_H,与提示线不重叠);无状态栏(全屏/隐藏)→ y=0。 */ int hy = meow_ui_statusbar_height(); - if (x > 0) { - if (x > g_xres) x = g_xres; - /* 往回滑(新长度 < 上次)时,先清掉「上次画到旧长度、但本次超出的部分」, - * 否则条只增不减(用户要求:右滑变长、左滑回缩实时可见)。 */ - if (g_hint_last > x) meow_ui_fill_rect(0, hy, g_hint_last, MUI_HINT_H, th->bg); - meow_ui_fill_rect(0, hy, x, MUI_HINT_H, th->accent); - g_hint_last = x; - } else if (g_hint_last > 0) { - /* 手指回原点/抬手未达标/抬手达标:清掉此前画的条(填回背景色) */ - meow_ui_fill_rect(0, hy, g_hint_last, MUI_HINT_H, th->bg); - g_hint_last = 0; + /* x<0 视为清空(条长 0);条长上限=屏宽。 */ + if (x < 0) x = 0; + if (x > g_xres) x = g_xres; + /* 只按「新旧长度的差」增量绘制,避免整段重涂背景色: + * - 伸长:仅补画新增段(旧段已是 accent,不再用 bg 重涂——否则 app 底色≠theme bg + * 时会在旧段留下 bg 色块,就是残留残条); + * - 回缩/清空:仅把「超出新长度」的尾部填回背景色(实时回缩)。 */ + if (x > g_hint_last) { + meow_ui_fill_rect(g_hint_last, hy, x - g_hint_last, MUI_HINT_H, th->accent); + } else if (x < g_hint_last) { + meow_ui_fill_rect(x, hy, g_hint_last - x, MUI_HINT_H, th->bg); } + g_hint_last = x; /* 不发 flush:由调用方 meow_ui_flush_region(0,0,宽,6) 只刷顶部条 */ } @@ -704,7 +705,7 @@ int meow_font_set_tier(int tier) /* 字库加载优先级(M2.x): * 1) 环境变量 MEOW_FONT_PNG/MEOW_FONT_IDX(launcher 注入的「当前生效字体」= 系统 font.file) * —— app 未自带字库(§5.7 load_handle 未实现)时跟随系统 font.file; - * 2) 卡默认 MeowOS/fonts/default/font.png(不再硬编码 MeowAPPs/fonts); + * 2) 卡默认 MeowOS/fonts/default/regular/font.png(M2.6 字重结构;不再硬编码 MeowAPPs/fonts); * 3) 固件 /usr/share/meowos/font/font.png。 * 全失败 → g_mfont_ready=0,text_draw 回退 5x7 点阵(系统不死)。 */ static int load_font(void) diff --git a/patch_v2/sdk/meow_ui_input.c b/patch_v2/sdk/meow_ui_input.c index 8c7d0b9..c964f8c 100644 --- a/patch_v2/sdk/meow_ui_input.c +++ b/patch_v2/sdk/meow_ui_input.c @@ -125,6 +125,7 @@ static int t_press_valid = 0; /* BTN_TOUCH=1 已见(本次按下的 gate static int t_dx = 0, t_dy = 0; /* 按下原点(BTN_TOUCH 后首个有效 ABS 锁定) */ static int t_cx = 0, t_cy = 0; /* 当前坐标(-1=本次尚未见到有效坐标) */ static int t_origin_valid = 0; /* 原点是否已锁定 */ +static int t_gmax_dx = 0; /* 本手势「最大右移位移」(t_cx-t_dx 的最大值,条长上限) */ /* 按下边沿:只标记按下,绝不用传入坐标立即锁原点(避免用上一手势残留坐标当原点)。 * t_cx/t_cy 归 -1 —— 本次手势以「无坐标」起步,只接受随后到来的有效 ABS。 */ @@ -136,6 +137,7 @@ static void touch_press(int x, int y) t_origin_valid = 0; t_cx = -1; t_cy = -1; t_dx = 0; t_dy = 0; + t_gmax_dx = 0; /* 新手势:最大右移位移清零(条长从 0 计) */ } /* 由 ABS_X/ABS_Y 驱动:若本次按下且原点未锁且坐标有效 → 锁原点;再更新当前坐标。 */ static void touch_update(int x, int y) @@ -145,13 +147,17 @@ static void touch_update(int x, int y) } if (x >= 0) t_cx = x; if (y >= 0) t_cy = y; + if (t_down && t_origin_valid) { + int dx = t_cx - t_dx; + if (dx > t_gmax_dx) t_gmax_dx = dx; /* 记录本手势已达的最大右移位移(条长上限) */ + } } static void touch_release(void) { if (!t_down) return; t_down = 0; t_press_valid = 0; /* 本次按下从未锁到有效坐标(幽灵触摸/坐标未就绪):丢弃,且清空全部轨迹。 */ - if (!t_origin_valid) { t_cx = t_cy = -1; t_dx = t_dy = 0; return; } + if (!t_origin_valid) { t_cx = t_cy = -1; t_dx = t_dy = 0; t_gmax_dx = 0; return; } t_origin_valid = 0; int mdx = t_cx - t_dx, mdy = t_cy - t_dy; int adx = mdx < 0 ? -mdx : mdx, ady = mdy < 0 ? -mdy : mdy; @@ -163,7 +169,8 @@ static void touch_release(void) * 被手势级清空,绝不继承上一手势坐标,确保: * ① 中部右滑不会误判成左缘返回(t_dx>=EDGE_W); * ② 先点中部再侧滑不返回(原点锁定在中部,>=EDGE_W),符合「必须从左缘起划」; - * ③ 右移严格正向(t_cx-t_dx>=0),杜绝「向左划也出条/误返回」。 + * ③ 返回判定要求右移严格正向(t_cx-t_dx>=0 且 ≥SWIPE_THRESH),杜绝「向左划也误返回」; + * 左划过程仅让进度条实时回缩,不额外生长(过程见上方 MEOW_EV_SWIPE_PROGRESS)。 * SDK 统一上报为 MEOW_SWIPE_LEFT(设计"左滑=返回"契约,hello 用 on_swipe(LEFT) 退出)。 * * 屏幕中部滑动不是返回手势:中部右滑→RIGHT(内容导航),中部左滑→非返回(落 TAP, @@ -192,7 +199,7 @@ static void touch_release(void) push_ev(MEOW_EV_TAP, t_cx, t_cy); } /* 手势级干净起点:清空全部轨迹,下一手势从零开始,杜绝污染无自愈。 */ - t_cx = t_cy = -1; t_dx = t_dy = 0; + t_cx = t_cy = -1; t_dx = t_dy = 0; t_gmax_dx = 0; } /* ---- 输入线程:poll 所有 event 设备 + 解析 ---- */ @@ -224,12 +231,22 @@ static void *input_thread(void *arg) if (code == ABS_X || code == ABS_MT_POSITION_X) { if (t_down) touch_update(val, t_cy); /* 锁原点+更新当前(t_down 时才驱动) */ else t_cx = val; - /* 左滑进度实时上报(视觉条):原点确实在左缘(t_dxt_dx)。抬手触发仍由 touch_release 判定;这里只报过程。 - * t_dx 是本次按下后首个有效 ABS 锁定的真实按下点(非残留),且每次抬手已 - * 清空,杜绝「中部点一下出条 / 向左划也出条」。 */ - if (t_down && t_origin_valid && t_dx >= 0 && t_dx < EDGE_W && t_cx > t_dx) - push_ev(MEOW_EV_SWIPE_PROGRESS, t_dx, t_cx); + /* 左滑进度实时上报(视觉条)。抬手触发仍由 touch_release 判定;这里只报过程。 + * 修复要点(左缘返回滑条 bug): + * ① 双向上报(不再要求 t_cx>t_dx):向右→条伸长、向左→条实时回缩, + * 摒弃「只在返回瞬间闪末帧 / 反向才出条」; + * ② 仅左缘起手(t_dx= 0 && t_dx < EDGE_W) { + int dx = t_cx - t_dx; + if (dx > t_gmax_dx) t_gmax_dx = dx; + int len = dx < 0 ? 0 : dx; + if (len > t_gmax_dx) len = t_gmax_dx; + push_ev(MEOW_EV_SWIPE_PROGRESS, t_dx, len); + } } else if (code == ABS_Y || code == ABS_MT_POSITION_Y) { if (t_down) touch_update(t_cx, val); else t_cy = val; @@ -282,9 +299,12 @@ void meow_ui_run(const meow_ui_events *ev) meow_input_ev e; int got = 0; while (meow_input_pop(&e)) { + if (g_exit) break; /* 已请求退出:不再分发剩余事件,杜绝「退出后又触发」的偶发再进/退 */ got = 1; int in_startup = (now_ms() < startup_cooldown_until); /* M2.22(C) */ if (e.type == MEOW_EV_TAP) { + if (in_startup) continue; /* 启动窗口也吞 TAP:旧手势残留点按(如上一次左滑抬起) + * 在进入瞬间命中 UI 按钮(如全屏按钮)会误触发——丢弃。 */ /* 抬手未达标:清视觉条 */ meow_ui_swipe_hint(-1); meow_ui_flush_region(0, meow_ui_statusbar_height(), meow_ui_width(), 6); @@ -315,16 +335,17 @@ void meow_ui_run(const meow_ui_events *ev) meow_ui_sys_notif_pull(); } else if (e.type == MEOW_EV_SWIPE_PROGRESS) { if (in_startup) continue; /* 启动窗口进度条静音 */ - int x0 = e.a, xc = e.b, dx = xc - x0; /* dx=当前X-按下X */ - /* SDK 自动画顶部条:长度=手指当前 X(=距左缘距离,向内划长度随位移增长)。 - * M2.5x/A-13:全屏/收合下「左缘返回手势保留」,顶部动态提示条(meow_ui_swipe_hint) - * 仍需绘制——不再以 meow_ui_sys_statusbar_active()(全屏/隐藏=0)开关,否则全屏 - * 时滑条完全不显示。条位 y=meow_ui_statusbar_height():非全屏=状态栏下沿、 - * 全屏=0、收合=提示线下缘(MUI_SBAR_COLLAPSE_H),与提示线不重叠加。 - * APP 若注册 on_swipe_progress 仍可自绘(系统条照常画)。 */ - meow_ui_swipe_hint(xc); + /* e.a=按下X(t_dx),e.b=条长 len(输入层已 clamp 到「本手势最大右移位移」且≥0)。 + * SDK 自动画顶部条:从 x=0 画到 len(右移位移),向右伸长、向左实时回缩。 + * M2.5x/A-13:全屏/收合下「左缘返回手势保留」,顶部动态提示条仍需绘制——不再以 + * meow_ui_sys_statusbar_active()(全屏/隐藏=0)开关,否则全屏时滑条完全不显示。 + * 条位 y=meow_ui_statusbar_height():非全屏=状态栏下沿、全屏=0、收合=提示线下缘 + * (MUI_SBAR_COLLAPSE_H),与提示线不重叠加。APP 若注册 on_swipe_progress 仍可自绘 + * (系统条照常画);递交给 app 的是 (len-x_start) 使 x_start+dx==len,与系统条同长。 */ + int len = e.b; + meow_ui_swipe_hint(len); if (g_events_set && g_events.on_swipe_progress) - g_events.on_swipe_progress(x0, dx); + g_events.on_swipe_progress(e.a, len - e.a); meow_ui_flush_region(0, meow_ui_statusbar_height(), meow_ui_width(), 6); } }