From 38f46ad2ea4d2152948ab5ca3e6a7d92d135f9c6 Mon Sep 17 00:00:00 2001 From: voson Date: Thu, 30 Jul 2026 02:42:47 +0800 Subject: [PATCH] v0.5.114: add Douyu streamers with fan enrichment and live probe. Co-authored-by: Cursor --- AGENTS.md | 10 +- CHANGELOG.md | 7 + web/assets/streamer_avatars/gouhuang.jpg | Bin 0 -> 35162 bytes web/assets/streamer_avatars/juezhongjue.jpg | Bin 0 -> 58801 bytes web/assets/streamer_avatars/k9.jpg | Bin 0 -> 10118 bytes web/assets/streamer_avatars/yezi.jpg | Bin 0 -> 12178 bytes .../streamer_avatars/zhedaxiaoyuwang.jpg | Bin 0 -> 43600 bytes web/assets/ui_icons/platform_douyu.png | Bin 0 -> 1108 bytes web/data/streamers.json | 104 +++++++- web/export_relations_site.py | 2 +- web/fetch_streamer_live.py | 31 ++- web/fetch_streamers.py | 243 ++++++++++++++++-- web/frontend/app.js | 16 +- web/frontend/config.js | 2 +- web/frontend/functions/api/live-status.js | 25 +- web/frontend/index.html | 10 +- web/tests/test_refresh_reliability.py | 65 +++++ 17 files changed, 477 insertions(+), 38 deletions(-) create mode 100644 web/assets/streamer_avatars/gouhuang.jpg create mode 100644 web/assets/streamer_avatars/juezhongjue.jpg create mode 100644 web/assets/streamer_avatars/k9.jpg create mode 100644 web/assets/streamer_avatars/yezi.jpg create mode 100644 web/assets/streamer_avatars/zhedaxiaoyuwang.jpg create mode 100644 web/assets/ui_icons/platform_douyu.png diff --git a/AGENTS.md b/AGENTS.md index a73ca66..9c02ed2 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -88,9 +88,9 @@ climperor/ | `web/fetch_hero_matches.py` | 拉取同英雄近期比赛 + 终局出装/加点 → `web/data/hero_matches.json`(`--source league\|public\|both`;合并后保留最近 N 场胜局,默认 10;天梯需传奇及以上;公开列表过滤 bot/Turbo、仅 ranked lobby;`--public-region china` 优先国服;`--workers` 详情并发 + 凑满即停;可选 `OPENDOTA_API_KEY`;增量补缺失/不足 N 场;`--enrich-item-times` 补购买时间;**仅上分帝 Web**;勿进 recommend) | | `web/fetch_pro_matches.py` | 按明星名单拉近期联赛/锦标赛对局 → `web/data/pro_matches.json`(默认读 `web/data/pro_player_watchlist.json`;`--include-pubs` 另拉天梯 lobby 7;每种 lobby 各保留 `--limit` 场;`--players` 覆盖整文件;`--all-pros` 从 `/proPlayers` 盲抽;含终局出装/加点;进 `refresh_web` daily 且带 `--include-pubs`;**仅上分帝 Web「比赛」**;勿进 recommend) | | `web/fetch_leaderboards.py` | 拉取 Valve Immortal 四区榜 Top100 → `web/data/leaderboards.json`(**仅上分帝 Web「排行」**;无 MMR/account_id;勿进 recommend) | -| `web/fetch_streamers.py` | 从抖音主页补全 `web/data/streamers.json` 的昵称/签名/关注粉丝获赞/头像(手工名单 + 直播间/主页 URL;支持 `v.douyin.com` 短链;失败保留旧值;**不**探测开播(由 `fetch_streamer_live.py` 负责);**仅上分帝 Web「主播」**;勿进 recommend;进 `refresh_web` daily) | -| `web/fetch_streamer_live.py` | 探测主播真实在播状态回写 `web/data/streamers.json` 的 `is_live`/`live_probed_at`:抖音解析直播间 SSR 页 `roomStore.roomInfo.room.status`(2 在播 / 4 下播;预热 cookie + ~1s 间隔;web_rid 校验),B 站走 `Room/get_info`(`live_status==1` 在播,轮播算下播);探测失败清为 `is_live:false` 并去掉 `live_probed_at`(与 `/api/live-status` 一致,不沿用旧直播中)、始终 exit 0;`--ids a,b` 限范围、`--dry-run` 只打印;仅 Web;进 `refresh_web` daily(角标以访问触发的 live API 为准,daily 仅作 data.json 兜底) | -| `web/frontend/functions/api/live-status.js` | Pages Function `GET /api/live-status`:访问触发的在播探测(逻辑同 `fetch_streamer_live.py`),读 `data.json` 的 `streamers.streamers`;Cache API 固定键 + isolate 内 in-flight 合并(5 分钟新鲜窗口,**无 KV**);抖音从数据中心 IP 失败属预期 → 失败主播一律 `is_live:false` + `stale:true`(**不**沿用旧的直播中);全失败回 `stale-override` 空角标表或 `error`,永不 500;导出时拷贝 `functions/`;**部署须 `cwd=dist` 跑 wrangler**(Functions 相对 cwd 解析) | +| `web/fetch_streamers.py` | 从抖音 / 斗鱼主页补全 `web/data/streamers.json` 的昵称/签名/关注粉丝获赞(播放)/头像(手工名单 + 直播间/主页 URL;抖音支持 `v.douyin.com` 短链;斗鱼优先 `v.douyu.com/author/`(兼容 `author-video`)的 `$DATA`,仅房间号时从直播间 HTML 解析 `up_id` 再拉作者页,失败才回退 `betard`;失败保留旧值;**不**探测开播(由 `fetch_streamer_live.py` 负责);**仅上分帝 Web「主播」**;勿进 recommend;进 `refresh_web` daily) | +| `web/fetch_streamer_live.py` | 探测主播真实在播状态回写 `web/data/streamers.json` 的 `is_live`/`live_probed_at`:抖音解析直播间 SSR 页 `roomStore.roomInfo.room.status`(2 在播 / 4 下播;预热 cookie + ~1s 间隔;web_rid 校验),B 站走 `Room/get_info`(`live_status==1` 在播,轮播算下播),斗鱼走 `betard/{room_id}`(`show_status==1` 在播,`videoLoop==1` 轮播算下播);探测失败清为 `is_live:false` 并去掉 `live_probed_at`(与 `/api/live-status` 一致,不沿用旧直播中)、始终 exit 0;`--ids a,b` 限范围、`--dry-run` 只打印;仅 Web;进 `refresh_web` daily(角标以访问触发的 live API 为准,daily 仅作 data.json 兜底) | +| `web/frontend/functions/api/live-status.js` | Pages Function `GET /api/live-status`:访问触发的在播探测(逻辑同 `fetch_streamer_live.py`,含抖音 / B 站 / 斗鱼),读 `data.json` 的 `streamers.streamers`;Cache API 固定键 + isolate 内 in-flight 合并(5 分钟新鲜窗口,**无 KV**);抖音从数据中心 IP 失败属预期 → 失败主播一律 `is_live:false` + `stale:true`(**不**沿用旧的直播中);全失败回 `stale-override` 空角标表或 `error`,永不 500;导出时拷贝 `functions/`;**部署须 `cwd=dist` 跑 wrangler**(Functions 相对 cwd 解析) | | `web/frontend/functions/api/mobile-demand.js` | Pages Function `GET\|POST /api/mobile-demand`:移动端「催更」需求计数(Cache API 存 `count`,**无 KV**;边缘竞态/驱逐可能少计或重置);本机 `serve_relations.py` 写 `web/.refresh/mobile_demand.json`;前端 `mobile-gate.js` 用 UA 识别手机/平板并拦截,`localStorage` 同设备只 POST 一次 | | `web/frontend/mobile-gate.js` | 移动端门禁(`` 早载):`html.mobile-client` + 催更按钮;设 `window.__CLIMPEROR_MOBILE__` 供 `app.js` 跳过桌面 boot | | `web/fetch_item_shop.py` | 官网商店 11 列目录(dota2.com.cn/itemscategory)+ 合成图 → `web/data/item_shop.json` + 图标 | @@ -109,7 +109,7 @@ climperor/ | `web/data/pro_player_watchlist.json` | 明星选手 OpenDota `account_id` 手工名单(对照 Dotabuff / Liquipedia;含现役战队席位与昔日国服明星;外号:查理斯→Chalice,Somnus 即 Maybe;CN/EU/SA 等);`fetch_pro_matches.py` 默认只拉此名单;队名可过期,以 id 为准;**不**进 recommend | | `web/data/pro_matches.json` | 明星选手近期联赛/锦标赛(可选天梯)对局(`by_pro`/`by_hero` + 终局出装/加点 + `lobby_type`/`origin`;由 `fetch_pro_matches.py` 生成;Web 顶层「比赛」侧栏筛「全部 / 职业 / 国服」+ 选手,与英雄详情「近期比赛」合并展示;进 daily;**不**参与局内推荐) | | `web/data/leaderboards.json` | Valve Immortal 四区 Top100(`china`/`europe`/`americas`/`se_asia`;仅排名+昵称等;由 `fetch_leaderboards.py` 生成;Web「排行」选手榜只读;**不**参与局内推荐) | -| `web/data/streamers.json` | 主播目录(手工 `live_url`/profile URL + 常用英雄 + 可选精选视频 `video`/`video_title` + 可选 `video_poster`/`video_fit`/`video_crop`/`video_aspect`;抖音/B 站 profile 补全;`platform_meta`;Web 卡片:头像行 = 头像 \| 昵称+账号/获赞粉丝 \|「关注」,签名(`signature`)独立全宽行(最长 3 行);在播时粉环 +「直播」角标叠在环底(抖音式 `bottom:-6px`,无间距);列表排序:先 `is_live` 再粉丝数降序;视口分档滚播(远处不拉、近处 metadata、中部 `canplay` 且单路 `preload=auto`)+ 同名 JPG 封面占位;有 `live_url` 时点头像进直播间;**「直播」角标只信本轮成功探测**(线上 `/api/live-status` 边缘缓存 5 分钟;本地 `serve_relations` 同逻辑缓存 60s;`stale`/失败不显示角标;`data.json` daily 仅作首屏兜底直至接口返回;`live_url` 仅作点击入口);由 `fetch_streamers.py` 补全;Web「主播」只读;**不**参与局内推荐) | +| `web/data/streamers.json` | 主播目录(手工 `live_url`/profile URL + 常用英雄 + 可选精选视频 `video`/`video_title` + 可选 `video_poster`/`video_fit`/`video_crop`/`video_aspect`;抖音 profile 补全;平台含抖音 / B 站 / 斗鱼;`platform_meta`;Web 卡片:头像行 = 头像 \| 昵称+账号/获赞粉丝 \|「关注」,签名(`signature`)独立全宽行(最长 3 行);在播时粉环 +「直播」角标叠在环底(抖音式 `bottom:-6px`,无间距);列表排序:先 `is_live` 再粉丝数降序;视口分档滚播(远处不拉、近处 metadata、中部 `canplay` 且单路 `preload=auto`)+ 同名 JPG 封面占位;有 `live_url` 时点头像进直播间;**「直播」角标只信本轮成功探测**(线上 `/api/live-status` 边缘缓存 5 分钟;本地 `serve_relations` 同逻辑缓存 60s;`stale`/失败不显示角标;`data.json` daily 仅作首屏兜底直至接口返回;`live_url` 仅作点击入口);由 `fetch_streamers.py` 补全;Web「主播」只读;**不**参与局内推荐) | | `web/data/stratz_hero_meta.json` | STRATZ 各勋章段位近 N 周 pick/win(`weeks`/`latest`)+ **同段位最近 1 周分路**(`winWeek`+`positionIds`)+ `meta_board`(由 `fetch_stratz_meta.py` 生成;Web 英雄详情「走势」优先 + 顶层「走势」`#/trends` 近 N 周榜;**不**参与局内推荐) | | `web/data/stratz_matchup_tops.json` | STRATZ 对位/协同 Top(counters/countered/synergies;由 `fetch_stratz_meta.py` 生成;全局聚合 + `scope`/`stale`/`fetched_at`;Web「对位」Tab;与定性 `relations.json` 分开展示;**不**参与局内推荐) | | `web/data/item_shop.json` | 商店 11 列目录(官网 basic/upgrade;由 `fetch_item_shop.py` 生成;物品页只读) | @@ -163,7 +163,7 @@ Dota 2 GSI → pc/gsi_watch.py (:3223) - **合规**:仅 GSI + 屏幕截图;**禁止**读进程内存、注入、绕过 VAC。 - **GSI 范围**:普通玩家视角拿不到双方 pick;GSI 只作阶段触发、`team_slot`、本人 `hero`、本机 `accountid`/`steamid`。本人顶栏槽位**只信** GSI,不用截屏名字亮度猜测。 -- **克制 / 搭档数据**:机制克制/搭档只用定性边存 `shared/data/relations.json`(克制有向 + 搭档无向 + 理由),**不要**用胜率/场次表达机制克制,也**不要**写入 `shared/data/heroes.json`。Web 英雄页三视图:克制 / 被克制 / 搭档。OpenDota 段位胜率/场次单独存 `web/data/hero_stats.json`(近约 7 天窗;上场率 = 出场/(Σ出场/10);冠绝样本过小时与超凡合并),**仅**上分帝 Web 英雄详情「走势」**无 STRATZ 时兜底**。STRATZ 周胜率/分路/`meta_board` 存 `web/data/stratz_hero_meta.json`(三卡与分路均取 **当前选中勋章 · 最近 1 周** `winWeek`;近 8 周列表从新到旧;分路在 8 周列表上方),对位 Top 存 `web/data/stratz_matchup_tops.json`(英雄详情「走势」与顶层「走势」榜 `#/trends` 优先用 STRATZ;「对位」Tab 只读),**禁止**合并进 relations/heroes,禁止 `pc/recommend.py` 读取。同英雄近期比赛出装/加点单独存 `web/data/hero_matches.json`,**仅** Web「近期比赛」Tab,禁止进 recommend。Valve Immortal 四区榜单独存 `web/data/leaderboards.json`,**仅** Web「排行」页选手榜,禁止进 recommend。主播目录单独存 `web/data/streamers.json`(手工名单 + 抖音 profile 补全;首版仅抖音),**仅** Web 顶层「主播」与英雄详情「主播」Tab,禁止进 recommend;由 `refresh_web` daily 软失败刷新粉丝等字段(不阻断整档)。 +- **克制 / 搭档数据**:机制克制/搭档只用定性边存 `shared/data/relations.json`(克制有向 + 搭档无向 + 理由),**不要**用胜率/场次表达机制克制,也**不要**写入 `shared/data/heroes.json`。Web 英雄页三视图:克制 / 被克制 / 搭档。OpenDota 段位胜率/场次单独存 `web/data/hero_stats.json`(近约 7 天窗;上场率 = 出场/(Σ出场/10);冠绝样本过小时与超凡合并),**仅**上分帝 Web 英雄详情「走势」**无 STRATZ 时兜底**。STRATZ 周胜率/分路/`meta_board` 存 `web/data/stratz_hero_meta.json`(三卡与分路均取 **当前选中勋章 · 最近 1 周** `winWeek`;近 8 周列表从新到旧;分路在 8 周列表上方),对位 Top 存 `web/data/stratz_matchup_tops.json`(英雄详情「走势」与顶层「走势」榜 `#/trends` 优先用 STRATZ;「对位」Tab 只读),**禁止**合并进 relations/heroes,禁止 `pc/recommend.py` 读取。同英雄近期比赛出装/加点单独存 `web/data/hero_matches.json`,**仅** Web「近期比赛」Tab,禁止进 recommend。Valve Immortal 四区榜单独存 `web/data/leaderboards.json`,**仅** Web「排行」页选手榜,禁止进 recommend。主播目录单独存 `web/data/streamers.json`(手工名单 + 抖音 profile 补全;平台含抖音 / B 站 / 斗鱼),**仅** Web 顶层「主播」与英雄详情「主播」Tab,禁止进 recommend;由 `refresh_web` daily 软失败刷新粉丝等字段(不阻断整档)。 - **装备机制 / 怕的装备**:标签与技能汇总来自 Valve/OpenDota 自动抽取 + `item_tag_overrides.json`;`item_fears.py` 规则映射到英雄弱点。`fetch_item_counter_stats.py` 的对阵购买率/胜率差仅作为观测证据:须减去同装备全局基线,对全部英雄的已有机制候选只允许小幅调序;统计发现的新组合即使同时满足 `games≥100`、购买率提升 `≥3pp`、条件胜率差 `≥1.5pp`、两项双比例检验 `z≥1.96`,仍须确认机制成立后手工写入 overrides,禁止直接把高相关当因果克制。大段技能文案只进 `web/data/hero_abilities.json` / `items_meta.json`,**不要**塞进 `heroes.json`。本阶段仅上分帝 Web 展示,**不对局内出装推荐**。核心装「使用率」为 `hero_items` 列表内相对热度归一化,非绝对出场率、无段位维度。技能/物品「施加」类 tags(机制查询页)与技能 `dispellable`(效果能否被驱散)严格区分;**禁止**写入 recommend / relations。 - **机制查询页**:顶层 `#/mechanics[/{effect}]`;侧栏弱/强驱散 + 核心控制;结果为施加该效果的技能与物品。数据边界:仅 Web。 - **模板策略**:只维护 CDN 层。皮肤问题用会话策略(选人可改判、决策 `allow_revise=False`、best 帧偏 HERO_SELECTION),不要为皮肤加模板库,也不要复活 real 双层库。 diff --git a/CHANGELOG.md b/CHANGELOG.md index 19749e1..4f2946a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,13 @@ ## [Unreleased] +## [0.5.114] - 2026-07-30 + +### Added + +- 主播资料补全支持斗鱼:`v.douyu.com/author/`(兼容 `author-video`)拉粉丝/关注/播放/头像;仅有房间号时从直播间 HTML 解析 `up_id` 再拉作者页(失败才回退 `betard`)。斗鱼卡片展示「关注 / 播放 / 粉丝」。 +- 主播页收录斗鱼「踏上征途167(狗皇)」「天残少年K9」「叶子长青K」、抖音「浙大小鱼王—dota2」与 B 站「Dota2绝中绝」;开播探测支持斗鱼(`betard`)。 + ## [0.5.112] - 2026-07-30 ### Changed diff --git a/web/assets/streamer_avatars/gouhuang.jpg b/web/assets/streamer_avatars/gouhuang.jpg new file mode 100644 index 0000000000000000000000000000000000000000..25dfbb79a1433172bb10ac6fcfca98a0722656b6 GIT binary patch literal 35162 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Π{^oB~af;eOv>vwTp?MKdUK>ox_p$gQ3mh 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 L8BcZT`m_Jp7>#ag literal 0 HcmV?d00001 diff --git a/web/assets/streamer_avatars/juezhongjue.jpg b/web/assets/streamer_avatars/juezhongjue.jpg new file mode 100644 index 0000000000000000000000000000000000000000..96fa648e36ed74dfcf8ed52bc0f394feac1b7b62 GIT binary patch literal 58801 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 AasU7T literal 0 HcmV?d00001 diff --git a/web/assets/streamer_avatars/yezi.jpg b/web/assets/streamer_avatars/yezi.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9568a6d9faafc09fd2f277945610e31fcd8cc44e GIT binary patch literal 12178 zcmd6NXIK=$)8_z^lL$x-O3s4hB%ovgS(2~>5y>t&!vcb!l9VMWQ6#Lym9R_BISUJm zu;iRUa_0D__wKzpaFmYSv-fP(`7IJXyYg9Y9L z_;`2j+`+@Yt?=>j2?)uE2yY7|DJd}-73IBqRFqUy)c2X`sA(8!si^25&@-~Iu(7dG z(>>&T$jZsg%EpRwOGZdQNI^tI!Ae6#!}@<+ZkhoqA|M&)#>1fkaH(+csBmuDaemy& zh>!En0{pw+;Nso6m5_*-g!C?ei-U)Udn@;?;I|{8w|&4JD*Ss7M3o7s^{ojXy3>fg zi_a$FP$_Gn1r6_UK7Q>HMoe;_j-G*$i<^g+k6&CuQc7Az_USWKHFXV5EdxU%W0RMr zW;SnZ?d%;Kojkp~eSH1=1H#`&M1J`ADGHX5n3SCI^;_zXoZP&8_|JmE@`_3%s;auC zwzaLjqqD2Kr*{NBI))klGch^8u(-6mvbwgu@pu2=@aXvD^z0l5!21`R+xlOC{ueyA zz;SSI)o_RKA9!$ZeQzH;syp}(L<#OG>l0eLQ$G}YM?|9%pIz2M%<&ksNBi1inB+dE z_&nF&e?a;tqW?2MVgFBv{tM85;klUv$nbD(6^2IzJOR#9zl4R70KC9=+UlI{m#QsMpb}|{oa2g`8VZ%7~qD|ki61}PnZl9 zTHk{-Ad}yA;bbU(i6bByS|YmKB-yU@)E}EzKVy1Pg^W&)T6P^f&Mq{G{6x}bG*r9s9-xlgCjLKTx|R22du@jnTJ98r1>&J*eDSDqUQDf zh_nbijPFiam%zj7Yjz5pODA4kBR(|`V+fB+XVN^Qw=Gd!?qrh(_xsmKF?QG!Cncr6 zC?FQ|rTeP^j;Io`#-0ECk^czrE`p9R+B(Wa+_0-~WJO>ifq!I$t%B=ix6;)oj{UCF z(ZWwXT~(KC`x40vg<5d6$%~TfHy;IbZ3v%_{T8%os`ulnx!;Q#r~V*N$1QECRNZ~i zp|Xnd9MbBd`gr^ZgglD60h)7@u1%_QRC^};uSphPsU<&)61R{4!_Oa+%sB_h!JK`$ zXno64;e2vj1qD#2s+8ZA(Kfj%m@lt-+;UxBj=d}wwy^jp_>{NhHKjz0T2n=M)Jj@? z<}?#Tpn*|y!gMQccIzDGoH~pyx}u$(Ge}TrN?N`kQT?gT@PZLz6rU@o#AGw{)t}>u z2wr9=CYnXlRQK2-ro7U*Mp=;WkU9-Eoq_&2V6=0b*1hJ zw|{D{^1o}3AgKd4ufm}@b%x;ESIT)%*P1{k(pE>{==Y(UAJ0b!PkG&;x^nKRF;shN z!0|!6y{RAj15kA4YC24yvwhW>vOm9g(N$p{*$734 zxf`p|JKE~+apk%P!53XI{Hs%0E=Mh3g^-tq>!Zfdh2!l8>=~!eaJM7B&S?HwQ#oPqqI!>aSEL7vfib?X=Yt9>$=NbQrfFCxq}rEdCXWN zMAWgLKU;{r0TlYosv;1ON@@K81oj1k{YUM$^3~sLcy9oKgvy=y>OpmsXWPmPzZ3<3 z7Fh5#!a~9-09$3CIiF`hz6CR%JPfl8&MdNA<@{X_iDXluP+nzbU5q++^3IX)3Tg=A zERYkoyxZkWqE+-MV_4wS<;oHuts~S3#9| z<9|dylX}5F`?Oa3%MBpT;7^rkvlD5NC1ozk&?2*3B%8!MF4B51CS>eqB(0u(g(z~n|jFma~Rm!thCOYg7gh2KgNi%kzP{f zcP>}EfYsy?HO)>b_xqr(1fTJnYkduk43h15=mBq@sEf&?z5VaY<=WswMJ;Kw(K6V`V@x87tx=Al7DsyD*4Un%*&t&G|<}*hT46@?PXkS`o_e+#YBcUAb9e5lMLm%eiDB%M%z>9x3z0tqs zoET+a_f0-K-Wy=AaRkY5@S2H}sk0w)+QUoS7I_DAO}I)kj?jnpMac{EDxlSdR8*G8 z)3UwTL#f&ie_l`Bn{3n1l(GdfP_XJn9>OJ-&9)BPeSOcg({zy=;2p{%QUx?hkXoxET3`75gN)D&%MD{97y{6%`pamSf+ zuK@7heQxPq_vrVwf!ArlaQnrqQ`MtBaG&pAp^~^f$D$b>mJ0CmnIH&lEjvY_A#?LI zR9$P|Bkxn2^?I+kc|w%Vw1Cshc-?8n@mVUSfbOHa>yL}0rgdZ=t3X+KmgeZZ!y75% zMuw5gZ#i!aNo>ldSX5kW(l7g08SrSwwTcyLVP-Ol7Z-gEwTIvYLW2oY1re^(s&iIw zFuR}7eVN~tZi(J)Z&L!_U5 zVsHAJDMPdMKrlq8q;l0Q1zVCbq$6&31{E;Zy-MT>O5f!R!~~l50i9o-UyxNU8FRFHgsXdSLZ{-4Q)7q9&$##&8RS8nm|rk2jboclW$M1I_< z)c4-ubH{Q#=+o+qQjIoUt@7lg)}&5+BN$_tWXs>z^*T39E=<*4);+Z{=?0i{YFsVI zb&{x{B_?D?y9*iGhKqk@kN-FYFaQ+cEKNN>4SyuX=ag{o%)s^MGr(pIWlg_1{^DPi zRDjbek<`^y$wn})v(Y#9j&qA)Mcugd#Vy0FYSeDE9u*gvP2*~VQvxN?1rB{P+IlT! zH-K2_w^w;^*ts%oE>X}~e6pV4wjcmp4m9`1DOslz5Fm>_hld?A_B7C@j-2nHW`>** z+z@q<)bwPI=_uW8(}~GV`=W-@s)}_l(~(`Iw7iLMyla8QQ~c7rV}}JbPJ%cqK~YYY z>_3gmcz3FgX_v>dwfu~tifE>CLK-Y*Ig>Jv)pI@+j+v+=1eN(*WR#vDXEvQH^cI?; zckK3rK7UvmN$z_wF1{wApyt<1rNiveYh>i%7POL>(1K&+zadlpywRCjwtgG^J~b+E zW~!>mFz3g#D>CkRtKs)W%^+RA#>t6^pj)lUrAtL3L@Kc|Z(AFXt$j;F4WgXGi>5XF_@#t( z-E?)T_>r=yY06)KEudDKGv`D>u!%nR2B1!(wdBt+L60@a=BGLD$vq)VnW--2js-Nj4tCABRViu+1-jmkErPilVb*y|UG*3}}sJVUp|PO~%-XlbU>Cw`1{T zZGQ`JpH9}ZjHEio;712A2d{0Jb^(`1?H^C17_bk2GT2Qwe8ThDI;b8up?rl=yjP-t zZ8$nKh9(swN4ny_E+`_L+_B4>g$E6@o+;H8`*2O9kmA#~7BPr77sOK`lVo&+@$X{X zwN7YZxPm}v#t&u7zXB5-p$)qy6bls7MPi23218W7OoW+SL*g5e0Im<{ET#I z7D_1IV9l_NS7sAZzn5LUr_L;Zoxj?K`K7&$?~X8~G{5W5Qnc=91UDn`nshue%UNC3 z^;+(euwOC$;%RnIUE|+7PeS#RTDyEOqq38%b>slA0wG9}qezSd@c1nU6S~hP%KoEm zl{G(_GJV=qyzeFT3p7&mJ2A7PFL^6q^cCOMn8A1o`%MY}HWL_z!lRPR%9BV&OA&sR z=Rz4(!;S)SjmfnNLCn_l7Y?IUY9+II#|I|Ho5P7N-gOoe>Ppy7-%IZrlr>xGwjhiz z!9g0oJ$nylt*4vk^S4Ohm-X3d!Xxk;%p~XbKC<-k+tz5CAcZXt*G?T0+t{QKR4Ejs zb?WLJGWSznnc&P@4(u~Dard!qDA{+AhfkSuW{usMX0v>ar2kQnLGB@(XZ%@KNlBHS zb|q4w_=G=FI4S80DKQ)buB@MlMF`YMZu#kyjamC@Y}>k-^CziDy;+Q#Snq0pZmX;K zcsQK)im-i1%%PX8yJn5(;~p&)W-mi=*;U8CjwA|pyWln)-UqRKSmDiiJc>e}K zG+ZXol+h+s=JhROPEZYW10|H6rwa2>9u*y{_Hnd$yjhOY3CW$Zq}cnWOXk@;giH)1 z8Q*%BV}tZ)Ul(b4?a`bhrLEVMgRf2$`m@M2JNnnKVljW7!UScntOlphmSiPB1(JL>Uqj@wCAH78%ht?r|YUVSNy6A_$yaI@D83I z7dHS!G`f3a1gTG^a(rx9Rl!73k!|zHo)`&2@QDnvFZEeIY;l0QzvtsPuM`MZHN0T2kdF&2Ux_UkVE<@Zf%-vxt;t_qIU zt=qNh*CfCX==!SqUo(QQWq`XhI=X@@gQ-{Zqnv3}c$^r(a~3s7?kRnI<$A3)_WF$G zTylKc_25B??yHVR%sDhTPW`Q1iXl_`vuwK%xsbnG#zy{U(1D%C&7x~M$?UDOtjfuu z-HNJ3>oBA!^Kfx|OfalPQG_YR;hD zMi%P5gXymTgeX(Z|k3$XT60%BSr*3jvM#xJq`!J!y`jJ@fN_q`A#%DqZGp@gm z*)-`-P(W*0keZf9I-9cBMtPB4KWhmu;+3c2Nxw_76dxwT&UjjEC@O6hCt;L&h(13w z4v=$-N`6d@zx_bOcdIc~&U@W!(ns6!Q+1}rB3n4>U_(kayu~~CGbxR>e^{8WfPd6G zW|&)OXmvMF%pzo*PRy9ASM3aD3{msABN@lKL=gokF+diN2X3whuN})l@bqqg_W>dVEnYTMW^FW8 zAnV}KeZdl*WIGcE5vKdmj_jH-6v#dL^p@K4ey5GyTyGyOj0{i7 zE^jO^ueRtdc4OvKK+dX2)Mpk%lpULcR6-ABmUtBfDMy6{lb_Lxkv9Z9I03jNJ+8m^ z&5-UdgB{lp5ZSfNSk%_83!>23cEO#1HItBT>(yv+axEC4ns^MB9R#I=^Cz>rzz-I9H@6P?7c<{#+lPmAQwP zpJt}sGQz)1%B;<|XU5m;%D5CjHO2MqHYIS6irCh_jBcZ?)GvKl6)6_qsX!yuA2RdW zv=-LBv`JwqrSEbB6a_U671@*9OE`H*fS|M z`%a&1Yqv=5yT!1_F3+VS9>HB1jyM-(nTE=rnC| zYCzpdK$4+}>1q@{AT0#w!7D|rusv?s^O{DvpvOsf-q@_0n#AO3>4%TOT@BvKXOomA zj*U27rx52*Y0$ng#Zi4*u*jv{HEPcmVI)&igoIelZJ+Mwm^s}m_Z@!Hz~h=c)bC}D zeXp_=z}u;LxEke|`rbURoJ8E-EZ5P%Br#QcY%TKivv#^NcfqSN!DOn=@@h{1&oGML z?Z-0gcL~H~HW#c9XhBXHu2q5lB2PHBJl{sr^TH#16G2VdjhmN<_0`UnLW^fVB%TRU zP@&=w5Q^eSg*JNZ~>1IGW z>w{{fdo4YrO}WrI=W?q3;x*5z6Jf#idG& z9nOi(HTi8g=(y;;w3IP6Qd{flJ5jWgvCW-iXpWihF@VYH-Y(y)Wo@iJM<+)N%EGU#*_DdlQP?%?)xWS%j1OY=g` z;JFRmvwb>8wp7OKp)>#m{m91W6AAP!O3E@!!_0E6ea_0ZG~#kDasU)=9CGyq(=lpFH`RJ3Ck&?dxnErpd@15)1=eP9K|@b)#c^cJ;GrFEG>QhIkbON zN(N_OJoU?~2kD(3D7-zvkyqq52-K+&$=qDNe%==ULaSA*L(C_cUV1zAm>nC{xH>qh zsky%e7=4i@0f+_we!jzn=(tJqI{0_zm<36P-`!N>G8_Qanlk$}?W$dp46nxx@VIL8 z2Ebc^5|X_z679{oAnsc&zeuY+Ur{r$MKq- zJ|>3oaL+%2@d*AQ2Epr!9l0{woIKtMVzr4(1R-d5wC&E3w_T1mm)p~ zI?GMHU$P#B#=<(H-W>?vEl^OKkISWIu|SvTO4j;b3Y~6jRqp;4+md%y@l6r#JwIx4 zNfnronsBl|Rc{`z5^W3o>Hphtoa}X!!*=_+80~`$4eJ#{&^1NJXeejCU>g5sNXIa_|Q`!d)IrB&D&x&^~q|;fdY7L zsGXsnD_h;Y*r`)nK}#}IdT>~%XxCP_rsqp~`bB`f#J>NE5t*$$vpAc)7c?^p3xQ{^ zTTf=t578M&uYDMWpN3bwE~F$@2i5%UY1 z=8*O=+ivQ040Kc|RF@Fp;XKtkoW!W9GXt)g&SHsa=RY$4QNkKs{?H}qx5t<2Z6z}C zP_2K&gGl4q@g(~A9{+w1QZElu7_AhcCVnvfN(F;yv~B*T9QXWgTBO`^Bq1RuPU__i zAldr5e4TH8CUyesjhX$BSEYDB_&Mk6@Uet(fitwhJzRTF;m=2w;Ji5P8^OyG6iq`7l~C#sKchd)%BXQYuPBcrCVGN^7PNo!ghOFbbp+s zCh5%2_&!W%g}5-}K9d8NDURuD3e81Ack^Hy+8#Zs0U4fQ?4I6{T;aSqUrUMqt()n7 zlk&aZqr>RU#BU3q?taNe#dhar%*=|N`y%8-5tJpMTujr-_BoqgTTRev%7Uo;0M}~X z;{BtG@ddB8xvQ1W)Oy96vPw-~enz@&3p%evQc2SDnRnw-f8g*@T9lX{UX-OaZhMh{ z+zo`LS@u{+=J*zA>&A6-ab+R}2KO6MN)B~)N+-2?n&cjns-%FM&=40SX~R?fNAPd= zE_dQ1>0b=QB!q`jzMTuILF5~{`DqR2l&2r9`%Yh%oE#~-OKK<%dx&9a#QOI!XK-=5c>H3sCYTScTQeh>-w`c&EAW!a9pHb1#*S{Wh=s^J?NBu$5D4$16VeO~>V zuF^SbZva__nV*>4qK&LwcOUR{Zmf820?N9C&lCH zKPI-ej&`<-Ve-8LLP!?=- zYOV2LX_?nJ2AmuZx%G!Pc^rkf6MSBXZr}i2c;|1v;Mi|h7vmNadx}eB6DrG$8FM3X zUxtCM>q1&&3Rdog*S}f3^4;B+EjR*O(K-eA6#O(Joql-7VK9APqQX3M_ObZKer2Z6 zIm+7aM+17Jd0TKjN&{F93I$rm<{-xl`nD6f;UMPUzWa?=2)jz3TPuQoducKs>+v%A zm;jw$7HRrCf#^#=+~rV{6u)O5jT5!X@q6)L%Y@R-KOm?mLo+XL5T;YA}%v<%V#g2z0T)OAU(s)8#=Sb_* z%$yq_Ebyx!m$_k$Bf_$KJE1jo{DYv`*6d_w3h%Gyy~KaWq9&F+aEy5J2?9>edRD66 zzCDv+LKO|El^istZ9wl+JawQnlKXY458DK`r#=Y-Zl=ogV?I_)Aetok(FRRYLJAwvS1 z0HrQ(EUI{9iQ9~#!08AWE`m@pdWjU&%!iOV2XoYcE$E)t)TePMnz_}iS0C!{Xq1w< zI7haqr`C^HMIVBj;?df~{84*g=yX7Xteo!}RADcC?i1RDPX902#!fN_+X11QVSW9} z1Dvl__mf_F(EnkhY_hA>qn}q%%O)#LCVh4=9XSZZU_5)>CNC0BkIp} zOqZiAhQ3~cMLt~$E$XOiq3V!jU(CB*p1TVcj_{EzlOp&v?l6-@4$7HK7`4t-_!JFT zUS)04*_RBymGq43-P@&9(-FEoua*8xX=i0`{7YPI^73IswyMKN@+5UGLyD5fVBktd zqV0X}qnhW2OH+BiuExc)Q%Ki?GVI4ecZNDIhYl4X9-g}4ne7R0OiwVKH01Tla{K** z8FPQ1cki8qU%tN++oI+U3-}_#!?_4A`|zGeN}tQOuDmHF3nu^exvd)iy~Z@55Rv}u z6;7ue8vhvC%y9JO2}0A1r28OaX=f1KYAOGhrE)T2J2@{9J~7o>B)~ZX`s4<7F~MWo zWMUzd?vnU>dYMAZ+nS-lrzM~xl0WUbR6i6*8CwJbrJaH|Axzh4G6UM}QfeE=N&zQjZ%lVGiT#C0|-JPM3 z)T80LfT_^R8vvrChB2CDq!qmynLA=&gEs`y{_HG2Ng9$((ggWNmoZstV6HW)Dw7{# z<5Pjyu07aS_P9mG4_{RM$9M}}){zIUd%jlh*7Oq!OKeZT`(@d-1;vlL$nHBkGCZkw z$VhWr3?p8GE{@&>ht;n}8ZHm64)~&7(aR$PE?Ih@B&H74&f<AmO?+bHE#`egLWO zcs=jOxv%$Xnvif!F+6Ikb&=MjM}h0?257mi!w&X)6wI4c#{If%DqZ%KnDXajGV(;K zEG^C1@L)n2+c?B=NJ$7pBLKB&hubO6i&r>|WWqYwRG^>7SC*1RGM^=gN*moFoAbgO ztup^Rx8OEfs5x3vf@&vfY=QuUs;LBZ-Pn# z9{G~0_;JUe!pAVp9{pJviNE5@DzvM{A{raD4jHqy$l0gc7P4QmMI2xdk3I`pGR~U``O;mq2V>GXbR=4_Jbe%mNC-mVJk!|P zgjoJrAt>T#)!^MvtjqWa}YB(p28TF zb6nv93b2^2I>$o14yD&$6hy(SxURMO^kC&9$F=eoomq^DRUoHoC=#}X?E6Aum?}~*o?7Qh$r_S+!Pxg|_^t7b{oqw3k z4oe=Qp9RQBx-#GM$`HSeWFJGTCi{Xjg3YC3Tsc0Qr}hr|!6Ro>8a?iUjG0}SOe00n zWYfCDgc8#!`M>_&=J8lgBhZGKnU2m-s)4ix49C4Gh;4qF;8jA6Kt#71Dr5dWEZ{`f9;q&W7Ss%495qs7QGwYx3)jR&ky$!#w zW3F$;XBIGx=5^jRoAWh|MSZk&O;fp9b0=$0+K*2xdB#d5EVw(Lk{M&x{=%|5yN$#M z{Ci^3$udE-(JFD;UEpsMBY=LWKNMGOyIEL|_U}Zp6jh`V4c|evX#=R-Rc#locBtE9G2s;a;X@|w zBe){O>1`AFvDwK3i28HMiU~*c0bBo)om~Fx;GHp1F&VNNt~U4HeCa95oUp#aF<6NO z)}AJ_Zu)?S)&+9_eLEhX?v5|rG4GbzH3Nchr%sqopH&{Nujtz~BeE3*Kc$HSd}j{0 zJk7UBKwp2~f&4R4%sQ|atsEgg#<&2uEdN8;oQ0b9Z)3SQ7!``K( z4I>8^=~#C8s@b=dC`EZ#q3%jrk#IS z$X+SZR#jiTDZk33wYgN1+3jYz0Va-*SNqb>O7M%Wn~E|exhsm;Y-k5W8iEivKwd~@ zV!iT09hlT{N9Ppm(8s_T`*OI3E~vWMRW`Pur=v*YKrmFPp)$ten7|wc@K0P!;f%`zawhBk zQj`YSPDu}TMbuZlvDeJ20~JnIt*xd{YiprihrW;rE=0j<3Z0n7QVNeE^4QSfXUXT! z2#cz0#&P}DBQC91{?}!87}@uzC6@2Y#5-{KDO5REfAo|`CvIlKo5A35PnL+=Mf8Tk z5F%e;jVqZ=Pe`!;*t2^`{Bt5-7%BDi2ODz<2jfI+wDEQQ=bz1X{!nId$FZ37Iu~2UGjF#@4cjr%SgXisf&tNusBm}fAR3$B&6DZn` zSY)ZX*JMrf7npsj=KV|FCAXw5D6ajPk-iF{2=LAo?>F7uB1MPRT>;7=HFu6;=rU5*KJ716_wnP{m-p z)(2*hfhzw&94t0IPBrMhXTh?Z52vCmz)mVNFDtuI#knWr(X-#fxij~MnQUB9PB@7; z&l#0+bmh8gqnlHpgnb{OUztC9F=J zUOv-9mdYrsr*MHgk;Cq295sH8lutcPjSnx8EGXJ^jjlDB7H?`>@%s>4@94iknh!Hw z@zyVYz_C8f%eJ z7{`h4@5^H4gclQxv zizt!VD3Sl$C4kOdFue&IsnbTvM?D( zflveBVd%Xt_yFj7?AHyDc>|m-hD1D~+y+yg?cM-!Ql~F)u8OR0(;9DpznwP#37}uN zezo)D-|t0^H^9N|2H_v$aBl$T|K$_sssw%m40T;g&(13m9;32ufG2GKU=FZNPKI1w zhAhTj(*Pm=Kao5byWO{+o!$UlOqaYkPmsk=R-67QKJkD51y7J~|IQi>OMFU3i5*WeUQfda+dt+>0pOL2mGf(8gM ze0%oZXJ&q#Gked>`7v+Son)=NE9<=;x#haA=W*e29Y822B`XC$K>+|zo?d{*C4d9~ z3j+fa104$!6Z83VENom-JX{DV_;%E$HsZOp_UMUih_oQ`V0*n{n@jpyM3O12RtJ} zCw|2xjzOYgj7jf6`rbb#3ya}XWha^HB#e>!n`6Lp>=!S|DJYppIQKeB#DEhbcq~0m5M2%QzNb3mEG6B0G;fv#fi9d)(l{EN1XAEM9 z=_ZMyfZ{SP)?UUP)-u}d%pRN}vM_H`Tt!bD)VJUw`(lg^oa+j9A8Uy8jVinA*nF zX4JaPhs1mYRA?NPco5y^NROO(l((@XBxPrKri*o%-)=nXfLzDz0DqJ$^7Yxg*)gg< z)O50{j;8SA2={pe{Lm_th9*_Dj$yT>I^~7 z`%id71b?N+(wG!293()YT_;q(WyTPC_K$!=jkelt%K0uIwXWmW73=MUM8w{Gta(I# zfTuolKz)s;F*S4krGrRVz`(Ry%%r*30T-5g7^lN#j-%Aazh*Z!2!l7|1B#O`f1CXM zU2#sDPJ%c|1tUele3BWR7l? zblxZ|u5Xv1oHdbklDQhDQB#_k_6fdhox1I&v)k4@9OV>!zA(~t-bH!Y8wJHJ<->Is z9cy4X<4t-QC2X+HwmprsD3Eos?f>rf5w8dTpgZ)I*18~c9}sND>wF>N>92DuT3c|q z=xMlLFDuNx;#qWIyl_W33I|8N6@HbU5)sST@RJC=L5wH#mOxGafY>gcT|rN?F{kV> z860}?m$Q~CIE0BBZFW49X1vzJYNo{iZhosEBpzJKqyCjCZ4dytT5u6N3a{VDKm~~r zT|R?zM!t?+lLPX+SaTjov(G`Otrb;h3&tlznbD?Y>q(-wFjzm+r@zMpm$^>m3?0>i z0|Y?dOcV^i48t3!I28eX2p})N~&IHT?NH%;~ z(_{(8^0EHZIF)n)HG`ksF6jkfdR(a&AwQD6no|-Q*o!PQTmeUpuE=hV%&nYCGEHbHUbrf|_Kvr!5mH%yDkIkf{(pl~?Swi#e#FNyCTwb<>R+0eXt+U>|{Rdti z_ckW|#fCbD?O$9`tp}I=V` zogN6`W*HGRF0J*n`h!6YeyP9LZUYzQ#r0JcIY$2SbcM6zzWYBIZ_x<))N1PkE|U^Z z*;9Y_H}rb!c6oD#j){e9G2U*Xwqo`Z)wE&G#dzLFjc;)q+QG_I?tg>}DIS2SwaOAX zU8NI~!Ot#gVt$55z3I*(D`47AuPA6ssnG5Bu;9d{ae{y=8g{A%I&ygbzL5i|b>$d3 zr$NVs=8&wV-kkF!daz*ypRBPCS;Ap5Oazdom9o@bzS|K|&@+vw=tGGlsn~~0)|84a#XoNBY1}hW|6BW|sv?0ZV;=kbbBusAO|J{3 zYc<}PPr|XfP*elMo6UwNcdJErE)86B0jlZDC#U<$J4%;C=j?0GWERu#aB*j!(lk?p z!)hWbf_z0FI@8&1u=_jXO~Z)v$_$5DpOV>{(N9Yn(>ABa)U7RhG~|({K5T;z^zP+P z@#N36H_gk_a`Of$a~i!WG(_s|VylV#G{dBGioyqyUvG4C|qGLyUkqc4$*&DtAc9?lsaY zu(n;9Z4K1z?egt`5D|u7_rtfhkY+p@U>hwKr8G=C zvd=fGmqVyoUnd6783Oyors~<|J%MbD)78Y0$t;=TlBfxBt|+YHrDBBc(et0GV?A=w zEc?I2`T$Nqqa30v2i4U$@?4Sd#xSuwJR^zh=ofi5-yoLbWi;-cVsbDKZwu(~&rj{K z1lJ_w$b+E8_Apy7vOzRGyEUJcA(=7Z1Aa6b8|!-DvL-&^x{oSjw6u*!A%4&eeIJgIrL`j;;fpYvEW91vvDNUF})9vWZ|=EcMpeDyA@9tOfn z4ZJ!Q6GQTSw7R*!OyVX63YY^PnM59g$;qd@t#xH5`{CUjVG?yl6&rrzrmu()!C0%4K(6+z`WwIEr%K-s zom1}Sw$?yL|JsC%%#>6`(p*_Zk`(a2&rGdpStoenB96Zey?8j3!||1Povd*5l6SA1 zco%vdRJIV*)X>n6gxB+nh4q@(_uZp8EEyNZ90olCC})iiM1vZ0J#EN#KV(oKh3tDx z>)S$CeiGeM=0FJ|HN!K^VJp?EEA6N{gu!Y@t=bR2<|uPq|D?`BR6U3pIT=bV1*`uk zi;-x%iGF~!rbbcUUi!HllyE@B-p)g0v)og9)qDzi1ao7ub_bbHAZFCqt(e^_WSFPu zBL!`yeP94v69ouN!hc{+nt9~O=KTfcScl*E{8noBRudQ@EWZwZ>F(?ELBSPk`wk{I zuxT2YwdH)|6J^ZlSMyF_dP_`)HU#z}Xc^}@WV zgDDF6kJl?_kAUV3#r63-?L#yaiPFjF_oeu2Lk$s-kX!ZCPxJOb)y~i@No8>8^^4Dg z1&5qOhO+irml(~nQ`P*|Z$+$}ShX(^<;F>lv8-3)yevB{A2=zD_ReZc!#^tj9z?l19O+ZotI?IJW!=6ccd?9S1)%Y zkggK*x|S4-X; zNq|sy0==EAyMNo)aJRq!jAkoMftC$(y%2mKzlR&GbVgppvqr0T=tPD0ZH&!>@kaHd zY~&-Ls^en3j48Z)~~b z3oOL>L3$r;(($ly@d&^kOJ<>$*Y{w%Tq3HNaj|s}*}2h@Upu zufYq27J3O7eD_hLYyn9mQO>AHI@0`;T>h^&)FhtCrB24Ffy!RW1UDzYoSBK&N1_c% zFTE9~g@xD_77DJSbMeh2RnAg1TK9l_%uVtx zZ>wJSB8JHa*QyoQ0RBXV`^}|&^;!br15x@JJvrEn;#mJ~BQ>=f-4*TSGy=5I8WJnH zny>kQICFFS;p2bcGwN!7*5R!7uNFsRQ@kcM#@USlHeEOQ;Vqp1D`>#1CE{ zwt3C;VglV!)M{&c{N}2>kv^I$=%X06&vWhFl8Dp`UHV8tjV8ytTu~%;Q)OR7P?WkC zwyyrP?U(KEV%YCQSh=OFeb%{aTdli4POqL^1{7|PI*$1OD&93U!GS%j;hzJ#W$-%C zLLSP&au+LVAEz&qvSM!;SR%6HI?J#!LsmXX5@-7X0M4jUW62sha(r@U$Y_a=Fq-Ii z$|@<`h8-&m{d*zo{cqDYIRdN=x0Ry?hms;+m{pzJ;^;mk^f;mVYN*=0{xBFklyOoy zP{zTMeb)Fg(dox5lDS|db=7J>33&n87W-YU2u5AAnu;hxQ;iis8IW=;IHv(qUcE;- zKv!*;{+hxh)pyvd32`bhQDEH@wdKh}7qIl*!+X zwXOMRY39~v*`MD~?HY~{DEs`V$gH_T@G1zdUd`4^yvJ0#Jia75@6c$heFV5`fnh0n zOEhy~_Pfp&qoK@|{KofIo2)EK=|VD_qkjf_HNr)t!bJ+pO;5aG|C(K(kj<9z)x|F9 z)47{{iY{oNZ&~W(i$jp~U(-^y{7k`_Lw#-1w|Pwk2eMWu4OWOEigI{vKU0o2EQv%! zjkLOw%)^8qUN;_0s|9{J9X@Pw@h}{@Ts{wH!|7avA|kpHC=U@K7TgHYu&@i7extk-uobRj{fTJF#dbJf)W{fB(U(BJ`M?CpM-7 zxN4^6Z7H zk8BxrxE!lv=C9PWg{LX*`6m|ri#6~XUOgeN1EmcASPuh-OLZVcK#@&|>J5YiS1--h z0lsigBmm5vti@X(k#~P9V>s|>`WF$hyD$7Yxd_V>a5xcX#5d? zx++%Y#l)K>D?R4lmL1hZqtd4#*B?5#PUFb>1-2&6*uKgkE*4hmBP~7e{Cjw1iR2~n zQlf>Rh=y%#Yw9?anpNTe&tg1hi1cXb4Q*z0d$1LDv=~n1tkU};nsHW`NOT&jSAUXO zn_7(N9Kj`4_D%PB_QnY5jOD(b5KuIc4JJh{OUSv{tBSbKH1@@L?*}dd=0`JdK2?bT< zKnDEcUX6E;FM} zA87o2Hqi&(Eb+sp@=r^Xw?i`#Wd3#IEH)&|d+*|at=okl?18%_M1D!(jSw3aO#4Q% z;oAHmpw*<5xPJ26qM^%WzL&z9yo%eCFM z!6Tr1{F$yhLAQ2_i8Xhj*I<9eHRc`LZ91sxm%vNmgbEYZLCRbF;5_%2-3|+XGi7op zJP1~k#x+HEFG^`X-5Pw_8fHezuE;F9G?2Zd%8*ez;k+z8@Ac&O{GdOze6wuJwm6(1 z^y+Cn9Pt15G=>o6E>a14FVy{Fshn!0(fF>A@N9K=Liw+9Q2x!gsNs^rx5v2+jY+RU zxDq_509t7vFzM&G6d;~1@64{hP!_{M$;<<<|CJq~`;|+}Y{7>``yKvYUrp}gPcM1h z)Y7}V>ax3~>(mOz0MER~xF_NckLAW)JqfcE@yAya*Q4cofQ!|N6=jBl4q)b$I=qHV z(Mrn{m;=gNl8hvFl;eY^@@p-i1)FEiz(ni*q3G2r8co;RN5F>%ja8yl z^~F0fqZdRumJV|3&r zYgb14_T{tKOnb<(uLx*0M1XvNx8HqOLT`m*XGKeBV(|He!vJu1u1I!icP{l`rWdz@^Do zns=Wc&3}}7Q3r>DRj^D(=*h=NfBd)IQGowzQQ6_+tGK0J$CTG$Oh(em-It{vNSckq zSX~?1k;;QlHV+#04UM$8%)yNv&fE*~J#J zI2sJ#QuoFDbeMHe9TOb8t)bLl2u^d_Ogt$aH+s{WbWo!r=`LOO?{Vqh;?sZdlPnB6 zPPBy3>pnkFGfwl>HetRu4b6NgSkPSC48Q4zYDJ8PdCPC_fZ962-0Y`z_D*{hD&z+xvT*qHQb8S z)OO*D#~rR;-ux%@9?|2eNqm zj7}IRoBxNK@O-?i4MQ6m4^jBJ1RSSFm$Xeftc8z<$=!me=JSJx+ReOd4)P=Hq_UP6 zrZ)!Oj_)6EI`Y&k&bDCsLStz?Ij!>X)vxzI)i3C_DA^=_|4XDfo(tb@0c~P=a}|(7 zzux{DzWd$YyyS58;G9y$kxIQiObn!QpCiEQV7D0>Es_zHxjmvSyT|n0yZ~Y=fn8lP z2)UJn+XZ`HA?v}xy0F9`+X~zEIv4wC!x1-sP9dN1_OlAP+G%KgCmr`~%v9?4+L-w_ zG1;wYBDdAp2dg`)y?NTOPaC8J=e^<^V642fZtKOL=M`Hwac;=!>)Uz#k0O$sa@37U zqsIox29g7LD+<{W6w9s$?^$b9zBW1zJ?OEz<;!KX1i@yz-Oo1$SG`Tv%O+Mndk;s* zNc-mf^t`R`ot?*SEHD}@SoR1T%4lhga+=9M9mRVDa987mU)ja#_NFQYAgwUNj=hsy zdkcHoTOu;SSBXd=EscwEC8%`wZnVUv9cD)4vJb(p>f5_OS7*{ zKnLpy{fNkM`?~g43w_$^`X<;Dfl0OnCN>e|i{fcDC+oX>b{B68{=_yR%n9}4B!0?0 ztI3i@nZnx6?(RkQU%P$#x=TJQpVb^LrzWdz|37vgG2T!OK8#zRu4UfNT!t1Kgqfao zQjxS*v=TK_@{dy=pbmG(Nl_6m$57r2*6$+^+YolSAEMT6L@C5|^3@#Z7=G$+5p;ZO zX`1@mMu&L7;d!>7VAG^|q@pBtJ-M#cS{$rg{0|& zKI@*%Nuby>zsM>_Th_;mC7QfnZ6@QRP_l0q(JVgy;+gB0bCVqR>CR_^c?LA{N`|_$ zdT96E(+7Aih7|DL^tLs#WajF2Y93W*yR0Xwc4V@}tQgc36xaLxr`3>sb0{WaS z%Em-Amt%GDl~Xj07DkU!%}Is&&N(@Qb02^a_nqPr8?wnPMnd1#q_I} z=EY8Kc_i0wI}@R@Bz962UFv@x7ZU|;Jy(_w~%R2R4h^Z=_2 z=x-*YQz1!U+MLx^CxfYJt*O`5U*97bL^F39Z7jNnMMG}YVw#6&^=LJ~Kb_#k`r%o|b0v z^c}OMe@ZJx0{*2<#_G@uU?OekRcW93RuvWTZW+UaALo(>kFA+*h7-Ms{3nDr^l3$O z_a2*iWx6^TjhK&Sz}U?zU&2N!H@0G-2TnCZ5wS`>?NHD}3kvKO zh|_s>cpP_dMv&A`Pv=>jVWg)0jf*RXihbM!J-}@@DQ8^?t9yeT_oHj=(SlbJrt4A8 zf|i;j+4`8R?a?)H)zeJp{@YBW{AW;|hO%%r%@#QGk5VLFcG}q>eMBq)dNb>j19<91 z_CCCd=z5@PoXPEsml_}u^OTrIf>ID%8{K9FD~L7iVMC)AFSZ}9rhLsG0sgd@f67~g zZ9Ljzer=l-?Frgun5`ROFYaB@*+mOu^uHI=bh;Fqs-)FQmWq{nd*mp4s%mI3=;1gm z<9R_FkVUpXRWML~Z7~9cbJUbgqU_7cS+QjcQTxk>%YCoPC2W~$%C*Gd=IT%uoJMWS zDO}wDK)kvt#}M!;!361d^3+$9EI(-DY=3EF+~D*6WsfqQ(8tqQq2z@pQndYtFa3*z zBe>;NS?cX0pvGt1c(GZJO{SEcp|0*@3|)uHXOj_6^{H;1S`V>~ZD%7=jI%Pv$?Y1A zu0oX#WFH8mKXY=?D#BTogJ1c_f_&EoM5cMy0W9N%%Fp($V#D_F(wiV1ZGrdjwK+%DriN&xwiXqxm+xdt>&+ zBW5>VH0M6~C_b>zj4p5@`f`(&VX|D9tB9jLCsHrr{^Fy3(qYDx(!RlUh_Ez%jxjY{ z^qV)vmvbsl%5kvDHx^E)gt?2l>166=)@d(rE>9@+X%Vaai@dZz>L|KA6t{pb+=eBO z$)#}iG;3;gVgKO+toMlskfLBRsKVb{N%HAeF(lhqYF-O{c-sJrZU9fNDlLC;*UxC` zzE8Nv^V~`Dz4cif5RmAGSQo&JI`%h}aLX zR-6c?NLdi^daEYwKs<_5(zoeYl^TG@QF`3_dh@vl&eJ&X|KoTt2KI@$2Rc=xWJSc?fFLCFD5Iz7G%aoT==i054lBR&<}wI zh>`+vD#<*?M9%3E2J3q#9YKo_Z#_8LaARxAk)T>?36Wp-eLQvj%nlCx1A}{-;_?U5vZm~=Hb)l`CHcb+fn_w2)NsjcuJVn zW@{hjdjVP1mmP@(IxX$-mu*akpPynNl`H4B48+u4`lx5BuoD$%iKkRpy;si;POj=bOwY2{lwH3b9)f^COgITlWl*x zd+I3sCDbP)xXeuKYt=Vq7XdWjA=R}18N~B4O%6);XF>N(zm;_W|D-1_F2R6<{>v^K ziVLOZFEF=rr%29YJD6sL2o$vm2AF&pOm88@zNCbEoMlagc$?i)|O z7!6Y90qKDdDtLIj46f;J(vi6nH}Z|RaRk-DMH_*k7gQ0~+rMnWz-_yk54AhKc=e&& zhfQfCMpljH3uZsj0({L6`;>rkX%|BFH8T3GAZ; zrcUzyl~N1P!2+gP>mGdI8^SAFCb7tre)gcT5Q1+5>Ejh;|f&^r$}o;CWFyQFaB^ zFRjRsz-A+!%@LJrdmjgXgciC<1p@NvD@8hV#j~GpL=0_46R#uSTs?k60#~)tMSs`U zqks2v{9h0XAJ9Z?YaBGk3lhS+)~d(B^|%o~@C|JB=xg6xDwze@yyLCGq#H!qJphBv z^(^PL&PrC6W%m47-pa1KQj|GQe4nlRvz+sjOYzjC1TXFk#6ITqWp*sZzM82$g;ijU zZjgBixzmKW%peDS#N$(Z0jCx2`i*qsyU0ge#W|5rP)8s_MUdW7?cg zKIi(qZ@fK}uhOe2}vhRpkOgT11nv!Me6;F|W&KpId&&i^> zvANdNJc@i$H<{>hIB{MQ8LNz2p(B(OHrxg#wI9OAmXDEExlF2PU>z!$$LEuP-h zpet`g>a=2kg6~9CUfm5}7?002m#_`E;E;2&XLxhdIop}s zgED8ovkQYZgj(OgILs6pA2y>k+R^So{k~MzYWvAiPsxAn+q~Y=$ZwjLm^&(ufGq5> zpk)0DXHV?`sajrDs+=jyyxj6%Cmtxut9Wy&kSixObvLvRQ;;i5^hW4|sGmL}RL(Cp z`}6ad88i4j$ZO-F!YTJqi`2VNPm0g6+=dunR}W-KZHl#<={y&xaW}vA0b{? z*}uK780H~HH>d4qyO$)^OYf>F>We#oe9O-K(+p9bKCYm@i|eT(_#PcEf^|k&UHz0s z`J=ze%MS4~=_JiKWROC>`PKB9edLQuD*=5CA0@Z!hdP=?;mzK3Y>296yt24w&Q`n> z+8rNab}h6`v@sek%mtM)Yf{@@8h_Pk_t|7^;d6)tyiB zyT*F`fL3jM2ZRe*yfs%DkbAmg)9ksUlF34~qyrewTU%IRV2-}?m*aTvU@=kP^C_IAi2PrBSN~y!3`unDW(JXYTyHxe&-imana|4a&IcY|*lIrl zI-W?CQtL#xm9D{DmH;Z7d$QEv1=*Gnjt%2Xt%6?9wTbg|vsBR4TgQcabl3HwdQsbc z4vzY&{J#gpHD9H1v58m7=U9F@YpD3W5oPIR@*>jI6xDQcjEj33?82XDJZ^bpNl+Rc z9ubUF6>kz^Z@)(XNjj;oGglvns)~Wq2YBnu>Kk}`d+7JAo)DMmr| zGU0}22Oq&r#caP|X49R}2))0{361eNuFOTYkAO5EobP!yCWfg_h8)H}O5|iE7k8J| z?SJi0$>xk=c9sc6uB>o?myBQq;I4#eSsaHxWo z6Cqn$`K)pnrRiK{G7yzQd>!I>I&^cN+Zg=1F_whlfcvueB_(f5HDh6TB)%f1?u6Q? zU@J8Fvr2y@DoY1xL${NXiT{_aX+XWR5z(I6iZagZH|=!*3S%s2g2VR}!gkJtay4VASkj$xXmlEqn%aYDr1fDv@nwlUW{4qWuT@ zXp28qPB`c>uOo9fAe8U1kvwce}rM8VSJ zM^<ItUfGKacfa2*de_?$49&(bLc>J^14n~e+jFY!}0{; zC9Okbpr{cdUZANN|N1$(;#iuB6CSU$*N&g(l;YLqjgJw8(onVukajD+=f!=RG-3YW2q)wu z*@Xc&hd|}az*!RXiG|VCMTwy-Li+ROY`T*nxqJy=#-THOPa@BEZDQYVuj_upQS1*oRcTVodQ1Tu@OtXk&|3+P`M< ze#-*6ki2hAH2CA;ZQ1e@!)Z8?n2XMSOdQ zx2(;9nt1=dxSOu}NI<2%dGVd{+GUTx zWa4%{2B|qEI-7|njyVpZkMo~Y!o2K!DnmPUi{@IW@(i18V=|w=dIVVcsv%3p`lqVZ zL|V`-RAbxrR}*6Z|8Vxtkl_47(!lbclR_6-qsXFD8i zT>#pR`1WQ=Ju^}ad$YwIyupB|&E3lk#4FCU7a}>YMEX_80ZjaRy|noqrwlCulV=uD z!*_+Xpaa5urlq9vE^Ic@!k3p~!PeHEL7E>sK48=T)NX^`f`hAZ`EG=SE*5XSKs5UjzB{ z3hq78K32y1V0!+1-wmE9%0FoNhnN88so(oQ%R&mAF;w2KYF}U$G#XRM|jZybcy6umrb?{O#?zv;?Sl~f8aPOW^b*R1-ux$OYyuk|sf4akud zcYgOvAai;pSrlbn_fA3E)afckm~}TnvH#Xr;{faM4O_*Eaf}f^0<01z4#(z6!lD}b z?O6eaSNKkGXlj4Jz^nf$Z4YvREhCnFfEG^-T#h8CU0-aV-#>kkXeeo8UBYt!D?KUQ z#n!hLX_gh;Umv}k8rcZOk(SJf4- za2ybPD#}ZU`d(2g`{XkJ#vj1TJQ?PPXZ&JO>J_ti8#!vaN~g=s{u_3YbOf=}D#sJw zlwih&mD3fvunKZSQ+LmB!OCJc&&#VwcY6UttSwI>!}$6<_!yq*7zlxjG;U}5jvv1+94 z0AC)~r@J-SoH+WRdxZ7~#W|Ge{LKN-EA&)uGF~Im1vs?R5d5pf(ti-H^GCka(>9d> z2?JQy9n3d#8FFU?*hr-|`MvMF5Dw_df>d?!vGWmkG*AO_6?oKw^83kGZd3*A915Z!r&*4*s6SfU0$qEBX-7@^Er>s{DJ{!-cmev_x*Z z{a!sMv_wruh@q9SPGtOn#13^&Tb|_mJFW;eV}FF-o8a+214`kW4==0k(n>PsTGTT8 zz=EKkq}8b?gRkqNF*39qYeh(U#Hj3oOE}Wepra!=9wbP*FUeA-_+7uzQnq?h zSk{`eg}Z18xLF4t!F>eC^&*(vcHKpx3%mEU$L+5H^Wr7?()dYEjcw+^9W)R7InbILNz6=sLSmA?P8d;Y_A;2^0ochVaYT4?xUk*+T0 zd_S1~-a&z_`FXnd`uxK(BB%TiS5!MPMQP>;m{}py()gm%QR@6!Yp&&RLu!c~Q@QP@ zxoiPeBfrO0@7?qa_?%b8`++dp}?FiCx^*I z>9FwmA8wS>NpMklNp~`ju0ecRq&p*_soiPi0mvUl2wEdHFjD*yi#7bhPStb1#40Rh zR%}HTBni@Y&v1MbyJt(wfAOUL%~Vf!h=UqP+_81*2Jg}F*#9xQhM?Wdk7-ukB+3Y0 z^B#+lo{+mcuJ(zwyEtb0&jU!1a6_LBAc5Xta$9EgO&DH_yJplM2@Am81#gsYaq@1$ z!1YDvZtP?dBCM#6sBY9 zwxW&V)SpKMR?5fI?K;;7~tTw06v2;h7N zewn{9*`8*9n-EyBr`I-b&dHvbH~X8tzl2!@p*6X2j;*1QQq4UlMucJAIy&Pz)LhTq z*d-PCc6S2*(nN9ECC#Iy^}~=1lo`*>IiJTUQ@DP^FmPiHW5JUBD)IHXG6SB=yJrwn z8dBdHIQgx*X7ZmMN5q#5OoS*16g0=1i*ZU(Ung7&xE3u#mNe6_W&-#NPtx6wcD%HM z>TxKz`bPamqcOa+M(4@|t9KIBw0k8f(i!121))5T08x9hbftvV6{S%&PXar&#g;#V zZiR-UMb?fUiPe|=D^XtbwndHVe*?8Ap z0OwUXhXy#_>$jl0x3EVZ)5w^wuZ61`+fuk`6(d(-OhDm*EVTZ(1*KvI;#VRqpZ!QT1>mD`(h+<) z6Qeu>hF(Y674mqzGTJiU^8)Vcesz#1dYNAknxbs|Qe{< zBh^Yleyw{1gh{1&Voj-!Bax4AZp@d zY{O~Apo#1#8$T+{i_+#s|N0y=b)F;>^g?r$a(eOPjQmHCsZb<5W~#gkTbs26>=Q4a%<|emMzDrXn9BK?ytZ%5fOCTbzGBzJP8+; zkVPr66=-tsN{W!N6d^)oaQUdZMJiZ}sBL?^@>K6CX1v_mLUVR`V5;sTL%m&xD_N)w z<`S=VwsHJQ!YzL7#ybu3Hdd)#xG=}`Glb_QZ_yk@L8@z$9a_R6Psa}qM&kNt=|Ogd0o zBf4IkSsGFXjB2P_Jx|bNNKIe!gSI3}&b%#kk!)_M_Ucpo=5J)lxsZ;a4QTfAVea>R z&mTR1_n~(HJ$D2IxyO1S>(wH{IhQwyBa?C|!#YxcW{_6K-EqpBxD+bgRhdxL?M4!) z8T!KxI}5s!U-1baywvu9xhqKm6`y*(Sl+@@$k*9h;5_Ru4WJ~9e)D+H*qnR07!@GR9(DAGZ0p%Kfm&H;$!I=XI*h#k!`RF~GiS z_NYnoW3Uo`1UGcH$2$zAZZ`3%MlAS{Iv@6uy?C?t?`cpbj9cBdwv1ztqP&)k|I_99 zYZXX0&y4BSCr6o9Nk=y@u{WF5BY;ce_pLaU*kPn5*;=2?i`Q&cW*+uVokGgM9gyV) zNZ#`2p}6h1Y)-3(DpDRUReZ-|_k8g63E_>SEYgpRF9r@$iL5!a%l+iB!WvC-<2XBs z+g5@ojWml0SW=rF#OC7zxCs-C%m*ovl?TE_p{uM6UP6h>!BlVZ8qq}i!>3y&UI@3f zZ&Fm`A8suXZ;B?_ipg!%_I+;As*T#zRvK)q^4w|l#>aN1N*jBtpMI-c|TK| z-LAH#RqHn+L$(qX|L}eL@bD_pZ1A87}D zSVB{Yf9rjjeGZCA$5r8ydNcUOs(z148|tBsT)vmIlrS#Q&u(o?ba^lKX0qdmV8UPT z&QoRWQ+bdFt<>^}c7~b)dvpO=v)MWUg*84Ik4~26g8-Zyn1RqT%Jn8}_*vStnos1_ zYt2V;+yKATR2yLxx9l(ZOKVuc)H8@)qr@|2UmTIZyr5O+&bPsM-r@-f`!B@3bx>Ph z-!DoFErlYbEe=VsQoOj6QXGmD3+@)&9a5mU1SwG5-QC?OZlSol1t-Yw*lG2aG!^p*+RDB@JB!4!2JANoF9-^=ia_92H7K;GX>YG(0#&iPYOzsC6i4v4T_v)}@)pbvlSbzr9YPi-DQKWXGz za15YfpZIX}bL(iSiy6Vtz#4m|x>oob@MR-?mH3(HV)(2#qTKH?_$@)m*+lqZ>PmBH=C z%hq!QZ-ovv1yeqr=6+w_)Z zV^p-q3h4ZH+ph6Qj;es#qYa^3i(Pb;>p?^G7#lHoDj3lhxYeG% zR@q+Ze!Y!zfjaSc3FXekbgQ1ku&g>wYj<^EwF;vYbL@-bAC8%iIf0!Ns><%0U7la9 zCxrxU;`dg~RG*S6n9*NG;KkS4had9{38qPHq_?sc<>X@TLT1XQ5%fe&+B}H$t#l}kBW>uCq0B5WCo9i-F8+n=6S&|ou2^5$*MWi^{ zb>1wS!p2<y=;?X* zVhZ*Jx?Y3$Swg%Uy1ad4S}Xh0CU~@=?GN%O>Hewq^LDLC?lP%vtr^e2@aSiY%nPoL@W@zk&n(Kyy{j zF)2$(h7y2K0vRDtM^ZtPiTY7Wmj7N;pA4ZF zQo?b0zZCO*$mzXY60O>`Fk~J~M^6}9qCgjKtP-8(TYFfhmivP0g({+@&CDYNPfoom zvd*+@kj^YfxAx3jj`swG{j^Af5g@wu~X351JEK98ONvI+DPCw92 zAFXnxg`RDU`VeWyavi#Dd29v1ZlpkIp5TB7;(T|<(T~#V+EXG{p)WO{Esv9z=D)SQiKaV&Rc*ZOwGT7OPd9`H@|=?IYupT-d(8#E-J$ z{S~Qzq@syiKrq{;mz9;AJg?OBS`>{?(?USp0}XxA7QE(=oi%_k3#~g;_Tv z`s~GQ_Wq9Qp@*S8uima{rY&(XryNe}d@hMad8oKP5Mpwc5!O*{yWOAR+vPa$(-*bp zo0zp$S7@=ItG$Q@aEh!6w>uz zRalYqOGi7LSK(jv^Z%AiEef{2vd^oxcn4}qdQ;-5fHge)J*ez%D}m2-**k^b8A+JG zR{aKU!G#Cv><3z=vk{pjC)5^;BAbNk`uMDX1$il%3?`P=mU`qH*UE>^3Vqg$<~5I| zc)_U-fK0*rl9r1F(uz24yB;0HMuCD2#zrz}t-m+n}*F`<&cznr$y6)H`^)1q2 z>;|}=;2v^mZXn@p{mKqIGbasA)(K926D73AHO9SNAAj!~T#&X$_EDutKO1>d%CO;+ zx=rL`!`CjItL1;aV$oAN=p(tFI)X~IVVRy?bVy@VwDc27ok3)yJo4|CrFUd^D=&6M?DxDNyG3`Sum!v%M9 zhd|NCY)b5KXRRd$rz0!&R?z0BC{WD_Yy$luQqmbl955QV`-sr;v4mX^42kr&TZ~tg zLXR?tP`94v=IJq6@yL#-Uh&%W8trg9RRuW;+##mDCl@SwU3l>4E^KQ@;Ft29qkl!J z4J)X>w(J3AbLiDHoHkA1+2S*0gi_4P5y&zgM@qC2l)_#2d?C@k+^;PYitQ;HCR8D7 z_(Xr^M&CW|CnD7bMTl=>^~@4hsGjcZwwQ=vJ#4jFIlL2NaT<}n8@wBqrOngV=QF-8 zvx^VF4o8v6A~bx9P5Qg!`MO(Plh&o>rJ>{KjzO}1k9vS0QROU9Y=mxBcaeoN!?5p5 zjnHZRt8}pN4_bJ$#skOMRX$d=42fHOIFvJN-}+KmWblRm)Te>$LX^{+KE0wcGRHqr z-TNOj!!?wa!}6zxr&o6bAEaIMi5m`qzM}IM$#XqEh>py8LUQku1(nu23fYTiw2+z! zSLs{=__PlTKlnQ}o0!9_bqrj_tj3FyjTl!3oH^!8_+3s!R=YgagEG4cBx3nvqOKoC z?Vny7=em!pOld^t{VvW>;|FF{=+*o>AoC(sH7}4o2fd@erte*RJ=J2IT7E8=(G2}v zRy`sXFPVG8=k!g;Cp=6W&|biZUnfXfXftLYcC3PZ^ZhJ{H|&Za&t3a_%W{y0Y(Wbz z`rT7}zc>3dh8Fz-&(ryVG3tJcc0M{OKWKNDOqX)~Zt^Pf?#^kXz@K@Fhr1ig%QHy_ z@lq+zy~$1gu}O{){%Uo9Q%|5Y; zQLfidIB!C0)25m}d`2M<&rk&$X2?~W;s&6GH8CeGS*>YIW8H)%hj-?Z5W21u(en(N=5f~ZHH}xG__Vxk)|#^*0BYf#WJSi2gM}h_GhnRsmibF4+JFapccz=p z4PD6d24D6A5vd@SQb}H2o#&!Y2PoQvgDJ4Ot_2aelDHoEIip&eI%&Hf4b;0kZ{l}g zwO3tVG~r|(nlyb~qa+9m&=ML2^sgr8}Hrv3{ zT=zCi@(t5R)23~$MqGfNHm!2TI*Oew2+3a{gJrXq#R_%DG^OlsdJ{CHIc%EHN;bo^ zE8@}t*5ASwN%nfdil_PElXpry!8fV1!8Q>0liDr<#CYIA5r)(uR8tNU7v>U(nM+eE zV~yPr?g^s!e93KAXYzu5hR@Wn2Zzju>niixe)}uERyTpUU%P>e0x<7m&{SJkD{x&W ze|5ujiP1h*TlUpe{}j^-(+;9)yLfc%5(VWpz5W-T`(J&$x!h>w>?7Lk(I+O_!mV$P zqP@PmwHpe8lHJH&=tneDwVrK}l`?)?@J^z|6SwJl2zl9D8PCs1svayvp%DBnx-B1H z%?MXlzg47e*qvUDEIkI}?;jy|sF@zFi^1CN1iXGcCRK;d%%h+?2?xN8(DqA+;xW8> zOJ?5vTD+}s&P5xRzB#Ij16^1exBw03-MWRdg|$;x3WX|vpDw2WZdtMgR|E09zsx=G zJGy$5uIPEb{TXvt#J#mK?NIcmJs7@j($?=e-?`se4(ufc?_H$u{j4eZQ9SAwac))J z+~hwzr=3!y{)t+7?0E9ash+OeMoOE$s@Hs$oEMHwD5;1C=FQ^tzMdoyU%BRn;AH(! zGR1pYK8@!__3a3p&S+siL~?7(3+@Kkd`omcPrBLWQ6E@5?zZtLFsuq2il;L}1IU(3 zcxtXq^(v(?oR2#q2(!3;3AnsNpHN=&@>MnX?x&%%GsAwY=Z0|9)#MW7L)AIvv_Exz zUyR>~4%pW1HTGekM}PT%2+;aoaKUQD1uLJ8=3Ro%i)2i3-&;DOp+(%k8`#$E5cTW4%r18?jth@SJE4=r9%XvcgNKd9S|@Bo3HB9|_bEF$LR1zAj5 z?vc1pFb9gW20W~VL7!JbVa_7t(Hw6Q_G<}Wc>eHV8Z(GJm1}#Nn#w)5?d)MY8|hd! zTs>SsMZP3oHH0|Vwl*k7bjM8?-HmX!kJn zwJz`@5?-*>9?Np~NHKi%ZH3K%i{VrVp7G;!jE>GfqSc0%>ZFgH8fyoR>f!tjOzElR z78b-`Z^UXE$GivQYi^;)L+Pt>x%E2ug7-V~xDkmQkl#OOIO^k}+@=$kuSZ3znm>&v z;JXR29qMcD_(BEj78+T1Q*?&@LBo>j%U?iW-2VrSF)97*$-PICLpXXB+LC`G;FD^dXprsy zg_ItB22Q$JK_;>O$S6_g!W+jR?Xl<8Frn^TG@N^9+@um4=4g(!N#(X#5h9lZagSjE z58?P8#Qdqc9tQ?`uKpCFF=fnXvew1@SXzhVH)bdyX{_&=I*~e#m! zFx;0KaUVCntrsN#E>rg|QVyR4sI;d1OJvy;6d%#?#=^CoYLeCYPu++UE4rKHQO^?D zU5@(XX)9-meEtEujSIgdC8gKr>xyFJ94N$_J>NaOcfnG9y>pvZ55Rd)&@i1q61{f_L$I5OwE-i|z(>_O)nQOrgzZnK_s5E=fJ7Tx*oQ_|+$Tv^AD zR;Y7k%6D7LhpVLbQwbk`d4}fy$#|^-?R%Y1L&cI0LcXf-pkx{oA-}~`I_rDf$t#h2 ztuqe%75dJ$b4-T*jBxLfsjF{{vv^59GYusGD_8FRPpZG3|GV=`^#6(#Y3OL`e6p~m zu~-6rWmmT-uooil;#6GEAkuetJzAeKu5lx!fz8@Ov9Bih2DC2zK?`rjnM+jnWvSGW zL1zY&T!UzUj~Gvcv$u8{!8#LV6JlFEzZj^X6!RoWG^T}6K(vFu)xd4cut~P&Fxh`SFWj&}H ze*>SoxiadPp{03&;+yulU6}%%f6&ZtE5zGaerjjX4ef`%T-^=3HeLe%7%%*5Nu&_H z+)vkO!t5H|69ZoYSGybc5-mIhTRB%}Hk!QVG7Z{}w(kLIT{u}PCaFrE#X7orrKl>e zp^A5c88QU3?Y}nrQbK2oU#ArrCEnuHw4h~rC2y7cesWh>FebhZ7?DDVz29C@0@-C=u^fx}&HfF@IHBrh>|6Vya8X%afi zkq7Vc*FTyIob8Qg(Y6E$`OAoe>r{k!OXZda7HY1nF7%rFZEE~Eag^Tl8`s*}ymi|g zHL;zo`&Fm%@X~1DTmhuDIxT{|m#`&MsHdwh!mocNt++n)aM%;{_7|CB!g3(9N^Es# z{F(n+y`R@JAqo3e4^k-hwAfpwqj9dT4b+`%zsfmCCIMUpIRi6yYFcs2v~TU?5R|=3 z%p5O5Id3wU-{TKAgMKa$_B~#$M!2vyL;fbrH+VnpAfc}+EbHvd6@T9$HEgX_^RK0- zSTlT3uCQw!WZv|UB_asryfwu1M*}SjTg_cQ+5iY$oYT>V2ZQ+uD>m40_I>Fq??2|f zydq^EEWjtdQqeO8buAkWD?2N`!GKi{HN8R}ufgNE72j0Qn|b}Rl1;XROXaZ^S*)H< zz>1TDcC~BjzaHJ9w@~I>RiKo?fli2L?O^yi*5P#mXqub5qbpM3`UqH)DuPLKYh$A_N2WOz2$=`dJEQ!x|&F3C{bQ*8s{I*xv76g zVSt9Vhxs0*t4;kMsN8?q_89)tPK5u7qv4shQf0#|*L^s7F8+&dl4T#!r@D<5^2Ur# zJ+7v+x!i#xH~jmgSDmzva3n$3O@(7Q(*`I2w9Yu`eW>&@&*F9G@{$|M?$_pGXywJP zc{IZQUQL6q=J#zwK}rUWsAuMBZK?^92?zR_X~LVn7}vZz+4PJb!ZHKmzx!qIl-;`6 zqXmDUTOn>g+sSr4aQHI0jvT~9`vbWcFm*w3qnQRvMyi%{#*-t zA#R8;w&Ry6wy?u!0JmaS!+BNJ8Ad$Cz<+PTZ@LRg}CJIs* z0mJplYA~UFk-8@xG`cilB#S2)Ato7W-Y~18%ry65eM}_cB@|sPZX>-eSM~$SI-1VG z$LyCw`-mrXs9LKSip)>5aVt7}m-3etZ&91O`-hY|{jI9=6?aUTl?XLrcD89|*5=4a zFqTWVWZc(-p7JoCgkHHXp&|1%9Ao_i*%1mPN@3N0< z7~?5is-`WT=x@E&i4$x-9T2}0IA&H#Me#lw1v(GOf$01)!rUP%_!k*Lp5qAkN>d`kaqH z^VV;};VGk#JF*5~jJq8HZEk&X(X$Kwtkrq3Y84g3HgZJM`6%yQiX2ji z5@0;hXIAje)Y&NZ!l_P{`Ybyf2?xJlULoP?Z{t1B>$rzQim<=C-X_T@O*03e+_>o$ z6W*hr(5kM`z&>l?uwYII`^N@Th+Pr=AFAe+KlJxvsrU{WM9G#CHaj}FAvxRMXCAG{ z4#wtpq;ylyr3fzx&$k&Nl3HaWc~Zr~e{|uOAnaQQZh7h+#U#pyS}Rkftg4t;rugs; zc!-fi@@eTiTbJ|DKow1!=YU_USK;0husYnt?K8%L zvI2WRRNb}^M)sXn3x`q>gCmN!aO=;&*QIQzze%t;P?GK_0Oh$RgF|a|A!3k)w7LOO z#)=@|*}GAX>mmeaXL8z1!osQFbOphn!OE^EZyt%p~H1>wBlEfG6v4zV?%B;W<2u#n5Nyiy{b7_CJ~8h=78 zvS*RS0@w%^?pDLIijnk9xv+cbMuSrq0zB9WtXcj__6rSJLRK^-N+PCs|ipa)R0PfFgZf=wOEWQY@?-R9P;lv)Cqlrwz%$ z9w?W}DsOfV9Ny&Qmsr_5-7C!G@L<^492ppeX(cq_zERT^`(86uO4rujD9w^h>OpY^ z>b+MBc8TI~GbqfgVHZN<|JX{bKC^opzVSMgwLBf(GlzR#eDxs}2k&Ga)rZ4yPhhJ0 zqrxJgkR9UfeV@vs|G-G?RQS>B$$b8Um5h_HfWGLx1(8szoc%Ya31D0&H+nXz?-QP^ z^6GOZRIP}QNyg?@lx2~XSnuU#o;%6`j=YjfHZb4bhAnUo_ZK@{(ZU@9yyP>FM1jzU>X*~n^Ixe0zu5XoiGC-CpNBns zyDHi7^M(=|z3u_J7b~#yF!;Y0a6lZ6?+G zPSxxf&!!J`YTr69#tPLhU%iuWMx_n@O%b2jdIRjRRoHS^dT(7+(DfL;@#m`E%5=g7 z&KD-l!IB?WX)4q!bArdIv2RzbWq~-TQfyyJC8VeG7@*Fdsq)C{DeQ?)5Mrk(eDH~M zl8xst_{7Aen)69h`f4>0z|cC!%*Iuw432&3s%lnjADYgvmt>kO*ls2!q_OlJsM$0q+@588~G{7aK{Szvy>rX#|n0A-gRSA3x)d zUahI=N^kb50Cj*5&R`pz0h97WIR-Dv?OC!giB;$``3Y za?*dBkBdGg8Nf!YQ(e)yq~3&aN4TCUT$h>LlgZR%G`G*XJU6OpV5d6#*B{gt#+&L2 z>^sW#s7VEUL4C0z#IW@Vy+c%^fkToc(BSxZD*OHWyipeENUr6-bYq3b=U-YdZ(73s zB%8w6Xwy7)iwaroHh;ePJif@;`ad>nmA-E+$M`QeaWzo|YzQCDQqf+}cRe;qwztXWuKX#tWj0VpCF zhZj|_FvjnC9X5^1rXG$B9d;}^IRXXy9r6759un$y0&Q7V=+||nZ%Vxmah0dFlCKw* zhG}VwzBd~0e zojZ`lM_Il8LsEB5xSuGN(A4-p$w(28_i2V=1zSeqs@gxK%A?5YDV&Y z?(ZQc?#Q{z-IJiT%_odvC>b(NvV$x=+|>6K^#(>9O!*~L2mVK31ZqCB-S0Y>1>5`w z4PKEcLa4`m+S3MdxXXlm0G$yHKEA3z|6DNK_B#JcQ1(-HYn=W6z|WL-Yv9Qhfg0Ww%sG}B)5x07fWz_2inIrI zo95$F6JS$=vKvtAy1IdZ{>4nZ%uHc+bIQ?mJH=#Yzjoy*4V?c?ic;&nNx%)PQw{hd zx2@U6NjFGDoQ<)ML>P@F;;C*4<&pyyTPRoSK`!ht0-e7ON)=MKFsg_9#O}#kwvJ7z z>qcxAFfW+@r4u6T_rWi7;<BUp`ANHR68XnQf!_#c$-Ma-SMy#K&3sgeDXeCyf-aCYY)zuo z{6$Dnxih7j@$wFq;*DBUg{ZMnVz-Nrp{oGoYE)!ZaCb?{bf<_nWX_glV*%8<(=>RA zs~|R7KY1|n!ea4OYdz%MQV9IMq8Rb#-Ab#~G^G%-81gNk$uX+W`CY2B7STI zhhv=*6)K^Ms+At*gQ*V&qffK0>Q8jjtf1|xkn|}WFrV#lGUZVxOyMexK`ybEsM9NA zF2QQuRAQJF;cA{M!KK1#6i)#N)F69>dtQBlSx6IhvB&%|#3P*dS5I>+yGqXnrR-3> zPoY9iP2}G)hPn7pi}5I_*1P;5mPr^>nAgF>jliEaboo|{+UGo=KH#v`TRS}c`KmaD z=9Q-V$n&^IT#Y(}Gwavo#a5|Vy!AVmvJ_p}{?p&KIc87$e4v=3;F<{5t(lOY7G6w4 zb!n^0W1x=z}z<6rh;O#CNB)s+kuZeA4Ug2+)I5=y@(^dg`Nw!sy>F*^& z-dWI~y^qZjyQCpJ_swLz^r)zH9e#E4%3$E^2RT!h=G$9O-vyME`m6NY_j zq!R%|>A5s1(5u4puv={_z9nhAnGe_ai#GJRMRQ%4hm%%evZS62tLT#NPwXoEel|+s zO7Y~W@6!%-y0a^g>nh%W%ikZr46%gKWKq^%=xOG-)9cOcbm-&1I$>ckSvarFLZeu_ zIAZcPYA5MITq7$Sbg-eX|MTHun5kc*?q^8YBH#k+t8;e$EK!pZ)M3hD82gci2YX+6gq2^!RRAC#ceADe(qmCArv{^@Vv&X zWtJO2mpB}OdM`ZWJjlyaeD2Sip^n-zDv|dMTl}EUJ^l^@;{f0ukHmg8^71S+N4BG z?`xgypNWh9Z3=eXY4uD>UG4TH=u*)q*i!QT6xt6|PJ`VO;6Mci5ul#Fv&UR8&3AGW zn_@bct>O&0;|2ET9H6M4E<(Sz`CBshn%3?*9KqN`a86BANI!GgnS&o*rkow_>GH9R zj6DEC(U&T3J#sw%6J<5?tv{+-=+~0wj|E6zgHa`EA|)H3b@G<#Uw# zJ@84eb%sqU*u~yodL3vQXFDB8QR12Egi?$7O}ANv6!F~AI*2mqpoBhKTqv&QznnS# z4~<#j0)-g8SzZ>irK~SX`0^t|G`Z443xVq-*Ls_RkW!i|E5NcV=sYBEV9b-+PyC=h z1M!l)f5)KFR(_~8(3|l-!-6Lh#JBb@_9)uTqP13>5sp+$!__ zHP@QUipMVEV^d}ADt%jv+3iqC9w7L=Q|i^RPDW_%1-F$&u*7%xO!EE-t6^;egw91x zUqweD$A@w*w%o{bUc2nEKxmYg+=5howe8 zT_M=!wR+uD7aghpuxq$g!I@X}Z` z(AyWTD{m4Mac&cp&&IO78!kYu+CMa)2r)v%_4c3MVw)N#xjKLMSKEy|--_%#D1rht zZ-?0JDEqdfr=)C1sfaNsV)-Af#(KHc6%u307@8fGrE2~bYO5m663)*T73*RTPMrN; z^=rxCp;eGgKd~MN`22J|hp;OQ4g5Z@jzg;R1_*%5nB=u`Fs74%Ezp_oZiCk?< zF&FMaETVS9!}U%|_k|P@BB$W^%MKhVT8ApC@~U9F8)&oeIQOXLz7oXhI;H;YQo5r@ z*Y&u58GjuvNa|;gZAq%rQbW7f9CKn~^T>{%#eBf(1XT7Kq7+DHk&~>Lv|@Xdplh`8 zr`O&x*@_oj?iITIyg zVJME!NsH#p&#o2{++YF`>=WHw!+OIn7!D$r6{qUg&rK)&wi-${%ljVF=|LgdOliU zlW>tTl95$0sbSrQLvR(~?%1<)p4SwZB=ZlN6{@Fa_U+T%NvmODO{{kVK_O-(VXwDH ze9mn=D%A%2gLG=Wh5-dbKj@vVVo2`2REXV{@Q&qZ#fobd8D?Ug|Wk6W#OOb8iN1CsxSb1Eh!l#tduh!I?ow}ZLj5Uh5it)u3*YK zs=L0AQy7`aDX<)!;wC8447SEnI*yStKD;c$3kdVWO(u+YNFHgeBaoDh(;9Zq9}FA( zOS)0S^LtF^aX3nuh=|#~@lbh?orbMVjpv3eJGE5j^dfv!@qWg?)uPxX_m^LOGe#g+Hpa&ZKOPo>X?j~M;_7q^Aw}>D6 z9qSW2dK;>Nx|wrG2}r*7_8ZAI_k)?kl17_EW;Y(b=S?z_Zjq@sw{Si4Z{V~rU>x#UJ!l1R{p#-W?1CyC}yC9+`^UU?>`o&wb zw{b-kVk_+cPS6i7N$cICPG9k`{YazRuOsvBAgMaLHp*=C14+e;vf?vKZ~0^?6!OdX zf9&yn-jordE_vVS*()l?(P^qAtQzo$>)cZ&<$$fz#nKwU!1&%Si-g-gKKFOh1uUqp z?hsMRC(2IKPa#!0tVgH+s$;3g@bFO#N#z}Oid{9;S=}Z*jwdpzEf^}yp?{6 zg(VJ>C7&&N;JVh0FE)bhCqVlYw`hiINcFBhHx}W~p6WJW#9yK8J66!bGP+IDADba{ z%L(_sjAg*#poxApoVvErs=tnkxDy<7$*8tUWW7#|P$$jZr%2k*5Q_#ej-J)m6uS#p z*s@JIGJN3K7>FE}%z~e!SPs4M;^_^7O}^``%M1aX~SmH(M_0 zgZsYZ(;bvCuFkz8P{_?Kcj;qfc~#U7H4%TV5Z@8jQ{ADKZ^;YfLj>V~8me;LDGB~X z%rQ$YV8c{#Yy8Ef^wH}(nSx)TCB~ZeVr#$wCa|1IvJn`boXg{j6WcpNQ=HV8osD-b!-YMovBofGX{({;{EDd~<{ zS1J#02=?^eOUydJQ4IoJlRTBfRZX`lMx@=6K;mpr0BPvuDlv8E_hZ|1ZiWk z05#V(!s$GBsRmR>K2{t=O_eXf!H&ZmGKVUVIbY+Xyl+(Z#a`1c+IcP-(OdYfUOo(U zhO)MjQGvp9Z5wSwqY7}|PdVt7{7+w7gvB`y5)IqWlDZxaG1o^&BS3GR?_tcP?ETy5 zS2#36C~fItYsz?AW6J$Gr*B<~9wLt4?ycg7HzC;w>rU9|7sL zS#jCn-M~0l^UB>g_rOxF9Y!d_a~@@qIIRxM2lZs#rDW5d6F;4Z-CL{!k>HH}{M=M9 z$DXrc&e#&s^~4%?ij9+KQfZwae;K{{{n4u>%&a|$Z#Rb}?yefT9a9F+qM#voS68kz zhSx1PuRb&Z-Dw9YDO?YyT0#9ls_Q^b5~4TJ^;zi9sn>zutOpJzM%InfSn%{?zzDfQ-=JI;#T>~5a+ z`Td8Ar+WA^&95_K125hSKAw?71~A>0>5=NWCsm8J#d||hulUO|Oj$OIK;Sr?$yti!&ewuS zvzkjE&&@9g3az|mnm?~onIa+p`1{E|JK6r~uXvj-_ZXkT*LR!DT4rb#N=2jx57T$z zRg_ot@C6beKOB;apI8y`k=iV4l6ynnX96DnvuQ;tA1XfqAin3 z7k~rSDG*d*Scqj-W7tj?VR9FcMY2g~7-a7`(zZ&Y@^^;kG?sHC(Tzn6NT?elzp=C}xxL|g%j7HM%v~=e_hP$7l!NPC z`YWM|TR02fg&t(!%RCZpLcJ1X-!^3H!cZ>LV}n^V&eiOj;!rqLjdAC6A-()UckI6|eU7>}HFv)G0F8+BUOhL})a$+}l@sCd6$&dZ_c$ik;^GR==;bh|RU4 z_cTA(c#x~9mccpAuUKIFIOZl75p#**cL(>u?|Ur=BbLhPdfS#oM|SFpX22nRTx)Ql z2F96f;-+S)bM?ft8h`rmAl`7co$?nlR%00(!HTC&@VI%p$AsAjeOu1WlrZ_gk?%or z4B4c>&w6TOg0-CWNU$d5%TYCDVL9%-Xd{j{jE1#%IqG(mWAH94bqr>4AXB5>X@m@9J-#WDZgE-9p zY>ab!pjJmvE7W*{PML*mAkMMp2L+D#dDjCIyq3JKd0L6+r78&yK8_&S00JDmhTsjh ztsSbw32&w!SaKKy?N)L3d9x#4jJ932lgxIw6luN#z=fLe6?O1Oz*&;BRONd~!+Jy0 zdL<8$<3y|TcPjhMWlc@f<{J_eGVfeXZ!lA#$ddkohL$tm7Mqg!CDxpR9GfWXR4yMJ zN4#Q(MFim`TbK}c!Qu7Ox9Z=vh;!*QD8Ujq$UV3lKz-I)EmXxdXDiJqaY2KB9c-6X z-dM)$5nVI{+J?>zcsXUdI}HFx1tNb2S@>@i(u~#Hon&M^9FAKHi59!_TxyT>BfId2 zJ0FIHVRm^=NY^5ttkv*iz=<6HfKtJym0o9>`MJ9BFzdR~_ACo#yYbc77b6^A@lWqA z2aEH6`7EYoXqJtS{XJM<>m4OSaz96i#XObU#rQqAbN5V6x zqf1Y&d%5wyjk72_WXGnhzir8X64AKNnaiqbsIgK0REM<{G#ZM_$hwi9>SL7?*S+## zI!14p?}~|@JUiiUZ&=SBp6GRn8f0L(Enp=*k5bvSpBpP4R zY602w8edkJOV9m-wgw2KDU9xWZ*oGqCkscb{2D<@6{$`6)laiK$19um$nop627I0z zc4=kgN#J+q!fkY;fXbcq)V7gQTw0NO#{`f@0knC}4PXK-?Y7=t4AHoZZOvr!z={XO zbswi*I5E_uq2bPEw*6={9lReUl3%egQLGXh>#%eU3fAL=eXk4}UT^3Jf0iCdg*xAd zWelWK1R;UPBnHdO#&nxN9^nDcyYVjwK*@SjUeu&ot}lU(xiJcW!`HfkqCI?>VKr^6 zpUYo%u$GBQfyFg}WP9eDy;3&x>obJ8ZMgM(rSK~tuFd{Q;=j}QRs>@9ENcNA&2n5* ztrF<^3*y)k0`>GEUc8dPqdG4Zcu*_TX1H7X)JY60N&H1wBTi2Z!x}vOumk(*(9F&M zeLL)a0+@nOd1P{5JgNy;7=V;;hBr^MocX64alV-3a@(=M5+D9i#_eF_U91WD}ZF0#&q}96Geq z{mxE%-rR<5?5edX3g;wRmYg>o$UO9UR!v4Y6vQ6>;6pR;jbHNwg;!ka;(wni>-GTW zB=O^u?nnE^AA@k&Oxn)mQ@$OY1WwdY#9aWGhDNBkmZciRCc9Mwo0Mlp=bUYLq*-mt zt+OChk*Q5O6hFM+A^BRX22Z@0gs1I1bxnzqGqHc69<-RYf=C!DHIAgfBFvavt(idg zuj(n56Nf{>uJjStr~3Y@&WQLBa6 zCzJC+x|AY5 z_`O?kI*1S%=HroT?#eZLsTa0sn3MIa++I50zbz3E^ zd~@v8q%qj<}~m!$(**d4MQfaV_mN$*TOR`KOIh1;_(gqs9_y*#kF%xo)g*b z(T_Vn+!QP`No6HWJ;$VN5j?h;;3!xFkT-wes*dXg(03qohciB|J_1Gv24;LP53Jbw zh@C8vxgx}qi9T10fl0yAaT6Ic_u%q9GVX@pOF>JC-SmDw97xnHnP@OEUC z&xJM0cP(S(-Uv~iwrZ}A6KEWYd~A#{>WI&=*QP=nFznpK@Z~;SfWm|X3lG`W?`)Oj zCIPR1;3zl@?=}^Ai>)8xzlFSoz!5tHbOR4XWFhwri52@(Cyzot}XX$laSsIVZsLre288gs4y5t|Nd#pcV0l94O@ zpJc5pOppem1%F9sf2T^0=vAd=#NMX8wJfJ*Cl%p(al zlHN>4o~q20Ij4ze|Jhd;bPpa;+++H@YnwQs39I{HF>>|^4_`rgqiAKWDZ=6S z^xbxz@}J-VZYTM<3g@po{Z6EoNVlgqt2lhCkD&#hY53oSAu`_FO7@>_H187~)YrSQ zmsVxlza)+ZoyKYYm1O&U*keSgsl|}<8{P{3*ioRdC{NBkf}>mDx*bZ1nP;Z8AX4Pu zF~m#4Q6a400W8z$n2c3?XGtU=L`w&l{ilN@%&2AG-h22bVw{1w3;>8=X9MY=R~yrqbEpT zOj9e$kFNJ0G`nfq&-w!wg({I-o`8Y7IrX&C5jzrv=Q=@xUF2?nwW$7(F3ZW(M4rA? zB2M1A3ct9^F{|09Pm5yf<1hBKUM35*5b}M10$z%Olx4WL^%x^`EUK2+ zRPCiE8_PHQ7q&ca{DtV9qezpNus%E0bq5;woHLc6<5{bL4zubBy>{ada)uMI;K7*u zH-s(4dq&ryUN43kAn$JG$45YqYQbgDfm-vGX1S6G$n|7Y1zFr>pR?I_eGTJYh|1Tf z!15(`UJbB6nCIOaQl}fm!kY?*fL?a@jPB;2pXIk#g>zcz6p`I89ffcA^@TMSajn#1 zPOylgVJWE&^S<0QSyt8Vir=XfIc&IMjXyjL&Tq61*Dl{>6F3*hPnWgE z-I|TE<%D@mepB`+Bxi2ByDk&#z`6ahBt^NBWDqwV8{Po1%Ou2Maq8|Vspy+{z#B8UU4)a%8GYGr^a1hw`Qi6f2%gur(0a*ml+@@ zPkp+bI?a{<;t_7u&Nn_pb$ux^>-g)JM?&Fe4T0%Y)dH*E>921+OgAD)D@k$c*N%0b$G)T1t=aG1pVQc-eoGX>y_9VMo?MHr@@|NL{%ri{IiuN=we7MjTvy2RR zj!HxJR;iZ^>OQo8%fw}3o=T9hgR7^>AX(PTzOj}jc+Fq&-`YFRpeDaPk5g0>1O%i* z5Cuefkq)9Fy>}!8MLHoMCA3gP5Rqc&y-11l5~L-7NS7KQKxir@(nBu+5pQ;P?(FQ$ z&d%ML|DC%p_SKnrUYwcp%=4W2o%8+tzF#_hv{pDFRVJ*5HB=)LU)D9`MWkzZyEr5J z&HfHMMrNG&>ZTdx%j*7SH_V6 z*SU+#0=F}&t_Of!N5Xai1YA^r!mjN9WW9vM$jhJqo3;!!Bx<%Q(d8o4x#Y4^I%jXb zp-7-NkvyW@tKJE!>8npjC2D(VzP47C>d3U7! z{Rmf+F?WY*9dvo5$#GHiHVtQXxX9FK`2D!~dz49rK6#U?{{D(PJuRq3>`bLE=ffUQ zl=Aw+Q=iS>RBbvbj3|?Wm@;P-CZ%saJwa6Ahe^+0i*Y)<{LC@)MKBRd{ezyI4daHrBv+jR zXI0B~K&dw^FBRjrM^aw@m45yI110}=0-wAy0N26z_XUbZ=0HNQ_`kE-c^J|YqXg>doOrI^Odrp zv-?!gvuM#O(ac!c=}^B1#mfRME*2-&$r8CTqJW;7IK>>+ECYDaOh0O8XF~BrNS-H3 ztNQJdSp22$RG%%IEM-Sm#1!;Dzg-g^**+JBE^zx8>}eG4Z#M3#?##cwE;>`|gDu4b z9kK5D#V>`?jwBAm@yDeqEH>kL)PU%Dq=mnv6_4xvvMMrAJKa}{q= zPc>oWrP*1iGLPHf-Xz|-)!MJU1jNAZL#Y!P0SG)re%%1q5TC-h8%C-YX%^~)q;)Bp zzxt{Mz>Z~Dqd(KqWT%HvoVpWMpF1{W^OGOhgxxVF*kg9MT@}4jL@%6y3!YR@iH17A zhdwTC;Drahn#h~KQY(?$@bswCeqXmfBi0zk^?Tkj_9jzpc`li}r3skaVqqy9G-#-& zbJ%~O)s%>%z7nSMb+5a3?#t{@jMnYRFRHe}dAU!8nzq&AC*c4rbWr6H>tLdNdaK7v zP3#mh*s{dkapD8pi?G1=tH^3YuETZHs-p?7`?|_`z?Vij5w?Y1ZE+#l^8{a-=p#{u zs#VZf?d&Gu$2s_}c^!Ipa1)3MoO%#J`S&`KL-+n`yQC>o=~c8b=7PNEU}NuYeOn;IYdsjc`9R-n=pWA`v=bXQb_ z*qxI?VtE%?-S$SQ+wDrO81pShj9RMblnW%nEx_{u2PXR_G@LN7puJHkQZtF{4EJ=m zy~jHA{RviIBnd26Dc9Qf(}9ZsI9+K@LpIno4feuf2GI3s{auu)7&;|ORmHSyn{{(B zoN8;jMi8dE-xP$+Te_k4aLK3{?-j*EIt{)Fd^@8*T$`v7a+P3xW*Dob-Z1fr&jBJn zu{?T)wYW6ClO?WTJrI_6?a`^0%IAie@Z<>J)lW*2p`FI@I^z0S8!v{S*S1ZZlhj1q zm>n){e_8)p^~;khpmRi$!_8Dt@XLXj98dJH9m*f>ZbI<5CZFs{qcI9ODh2jSc|NZV7eRcD2}8xo&y#-?R04nV zCa=VL+4vJoMfe4~PTYq0vVobBy0_JD7pO|$V@~oTjy1Z}cy2MyCrjt}z!!Pa4{Eqa z33LeMpulK8Ez)u0eKpl1+Xl!ow^FC9RABct(Bn$o!30GzCHkNPw@EiQLF|TDHH%ML zE`w^M=OXq(G+=-x{o3kfUz0#ShTpV4?Kh5=l#L7BAgBdovwZ{X{0lzR+)tItE&qn6 z!=Atgx~T0B)*0zi^4#n#7bC(Gy%P@Hk3r6Rm>#Wv#ntCAP+L|@BC+8JYTa}Q*P5CO31ufAfP#MSd%gii^mxmjZ zA)bM^`<1mAW?;)PZR5>CX5M~lU;+FoqS;uTIpMD^`2UglXtG>K0uY6-*zX%-XnKT% zdzZm?u15hPNoq^%;zilwAc~Zcnw~ZB^CPyupYnJ94!uWFLlA+Ny&`fxgoo3sKbT9OK zdE#xuXouJ=&tY=QR-bvs&&?Np9A1&wKpVZVcRY1?7}Ab_m?jmQ*SkQ428vM#)S7wt zGT5?h*8=Iu#y>kb5dMRUWO4m1#!!ksn0a2h{^({>xw3nb{UB6m=1`fVQ#?&O;rM~U z*fQO|)0yQI-R@*(Ynh{H99pZq4)sg;i_Pkq&=|i z9%5J+0N38*F3s0%i-GnHp}K02wuKE|&u*#94Cf4rF!o=H9b0};9C{l)EVq;&>pOpM zLVcEg5ly0?Yp%4qWda|LKIPlYliHIZi)foGlC z9mMJf>ziW><~mH*G>yPXh-+A4qK&qf_n?i5 zu1ggv-m?o*Z>X^qdKvOv!q+bv!pk-}Qg9Gx*o)XZ`xp+$^^g$Z54$xHqB4d|8vy#r z8mGE;{T~jg66P7u%Z4^_02NwqTva&{W{Sd!(Xfl+U2?e`xB$&6aO)$;HJ2famZYxI zxuJ)&4Q(8m{w43;rBT)ypfJof^Xs@An~vi^`n^8vehCe%#Zk&yuStS_o9n{9O5EN# zK;ovGzeTOKrw{vqWMpV6Oa6V?ugc@*`8mJLULVhHT|(=}sRTJ8P}m|A=jfZe*aCz? zW7TaFq`NIJF<(LQsC4#XT7tryZ?DG=0~SRBUMv7E8g4pNhQAt7C^ah(jhVtJT4pk; z;1|q23A(o1VLMq>J`(8$v=^gnB^^-mH+#h*g)*Eu&NSNrg}GN7c4#shv*Ig!Q|N1$ z74?#?7e$?M^#8I*7d+hpsVoOwZp@baL#EjlkX@VNbs96a_~O_ehpJ-(9MMkDc+qIg zI~N?vXnvg(HT8A$xV^d0J+TJ0n%>H!mRq+%OGh6|I;b(#$(hSnVd&7M**;|Q$~oqu z7R*k-=xJsTIz^|(;LD3v%AhLk5=_u>d2QySC)a_OC=||C&=N-~xhuUVchjFD-^HA^ zL|-fntNlin=yu83Zlw}9o^`fUyVi#DCqL5)>i3rsr< z@&T7+^*PDjy`^x2^&}`ar!hg7x=>U6I-y0Oul54EVUgx{%z~VqeVp)!t+S8q3+1}$ zQtRw=pUJxDl>%q45Ldy%=6H%2!Q%g*b#5B{t46A{bBobxh?vN^WATbo3+pqL^ir~O zI1xaPtgPXhbG?ul7g2^dvUGVDem^z(Lsp&{5{5y*n1@>}{p#lCHR{xaQlK7@B<0lh z4i^=PCy4QEl`EI#q1)JuOxS1ol@wyO8&c62y9yUKbL4k=X{jh(`i+U|SeavFPNgzC zq18i`njpTlg5CM}DTiK4U{*_kYBXY=A%Zw5_gW#HQP6G&s8In-F2FSG+mJF&qC8JG z*=Co|IDDPJMve^``eYmQ=4bCGy+dwtHK6{Gy~^LK?7x*a*}?W#ThyJ9ahLLE0zE!N-S-TT%BM%=_`ofnlVS4*d_unEym zn8aJW^+}CiX@ZOn41~l3Ia2(2_S$S z{O+FazrW1KzjgOudBc8$J&bz&Gvm;6VuVxs!MMT=IFX*zbKiU@_2^c>baBM)ZA8== z5Y}9CE1|=m>Frb2IEL>HUZ$~H>_;P51In1L-S?kA-`O3`E0$c*k{zOQ=8_{`$e?Vw zQgbuw)rSRK3KKg2JEM(%)iYELC((e1WlhTZMuk5Q26B&m_ItkCD9H-80#QVER34f0 zOp3`;b9fXq=Mq5N+uJ^r#K00&2~lqo^a!IBeX{%Pahp?@i-2206{TDYtX zuTo6K#~<2=4L=+*gvkGt?5JZMh<;~YoBZI51uX*EIst)bJjybI!@Vyhatv2G@HaYJleR#?ynFZ{M3xdU%!uD15yE*jEAm^~f)Swg7X}FgyR52$xB-29?0Nvx%ZfFirHZDdFmi!QOa#*8x zI*0wjQ36Ln&w>>vJd~wtia;)`ks0{81o8`+iwfc-t)&4At12qR5PWy|`hYh(%u=ri zV$sV_Z9JY7ll&M#h_n<0k~?rkRr{%bS#4sT$^$3merkP>&-xzW&u}Q-$w~ETmy1bB z?#!%4sBB9*99}KlTA5EXU7fiI5*jvmVu6Hr$K~T>D#4iY(~o#pZqkiQ<-q@nfBt9l z*OzbBe<`TkQ1r`0V0_ATx%}+3l84s5>@{)sAJ$|zp&H);QQ0~%&~bc9bazoIfVd3* zX&b-it&MqiSlXb`41Y-G@I^}3dG(g>w>WYeOiZg?p&RX${G#=7pesxHC59W!@A^dM zNe$(p0Iu3G+ZCyx)No9Dn^-`lAMS=maI?XJ{GhoX#9;TQT{BdrC?0uUp2`koOaz;w zVzeTK7PI{fl&G^iY@eOqwZ4}^kqZQ@Z0F3COcM-Rz!yOH$M)a_LD zd@pz@2YgaO%dp0Crv%#;s0S`zi^;M;(C~Q_n#X@We9F%AIB2;ch$lXncgbtnch4Z) zmF0sGuT?SiimZ9xyl1NtJZMRVTfEO79eI+Drp02U)4gwPheow=SRA_w*ol6X)-kx3 zKbfd$p{P@A6k4+KEo&hg?fkXbBkKwDjGp8R~wjM!CyC@Ral#Y#U=JEonm*y75 zV^@1OVfFZ6xvAt=^VmZkrKxk&x~>`Y9L%i$(l`{WGp?k}X^MXG~P yY3D1d+QJyI&W_|w5;!dJ@3tRVf*&X!9R8(5^FM=<{{K1uD>eR~?<4Hb%-;Zp1XUaW literal 0 HcmV?d00001 diff --git a/web/assets/ui_icons/platform_douyu.png b/web/assets/ui_icons/platform_douyu.png new file mode 100644 index 0000000000000000000000000000000000000000..1484c53493779432bcb90b75a5aab10f51ef275b GIT binary patch literal 1108 zcmb`HO=uHA6vy9=(_~0CWfucYR80IhirJWx2)f3NF_#iWP@&MpiU%)61@WV9#u9AB z6h96MdZ-|RUOe=!*&t1+CySsU*fxq6rP@Hng{HB|M#DP-D}y- zbilXH2LOT00pk#Wgj)%i2TRwP$0q^k`i!yn@cDN$?OtF=k@^npjtOfg zH{5>B$GdXp9(|wm-h6U_MS%klVDP^-j1R2Z@BYyIy$@j@jHb7@6JGN7gE@CR3ZZ8q z2K!?k!YlqOU^+=e&lLt&W0dgfb>4)^F+$ARAcxRyRF!Wq#;aSF(4Nh!MTEoe#%xdR zTl}c1a9+*r^lT#}yA={+gKat_$6^Hiyk7HD{Dh?NR~Upb-EmSnrPCa0rwhk`MrUVY zfU-(&PE|l+*1R887;glaJ{nnI?i&IeC;IJp-APyyO5Iie(E*}wd2!ym5H1P}vGmVx zt)XrlQ`=P+M^~(gfvTTFerm3#MsVzr%i$s_Fa4CeDYa9>Up+zLMs=XBD^?v`cdUho znDqy0p%SeqZdIrzqPI48omAVwt6Q4a0vYhJqbY(^z{53yHtd&GE1^cCs#%M9By=`# zJ|J2=q(JgGMxydd@f7hzr|a)#T?rAnS;e$INpX?wsIW=vqdJo#h+d>2Z_la_*Dg|B zE^L&PH4oE3OVcX6DVGvKyhZ$2Dc;CGZK%EPZ*0uF-s05RTf^-Y5B@D6lj<~{Ce8j| D3U%SL literal 0 HcmV?d00001 diff --git a/web/data/streamers.json b/web/data/streamers.json index 3e6b712..7d37fba 100644 --- a/web/data/streamers.json +++ b/web/data/streamers.json @@ -1,6 +1,6 @@ { - "fetched_at": "2026-07-28T14:20:00+00:00", - "source": "manual+douyin+bilibili", + "fetched_at": "2026-07-29T18:37:21.491922+00:00", + "source": "manual+douyin+bilibili+douyu", "platform_meta": { "douyin": { "label_zh": "抖音", @@ -9,6 +9,10 @@ "bilibili": { "label_zh": "哔哩哔哩", "icon": "ui-icon/platform_bilibili.png" + }, + "douyu": { + "label_zh": "斗鱼", + "icon": "ui-icon/platform_douyu.png" } }, "streamers": [ @@ -480,6 +484,102 @@ "profile_fetched_at": "2026-07-29T09:54:00+00:00", "is_live": true, "live_probed_at": "2026-07-29T09:54:00+00:00" + }, + { + "id": "gouhuang", + "platform": "douyu", + "live_url": "https://www.douyu.com/957090", + "profile_url": "https://v.douyu.com/author/EqAvg1lQD75L", + "tagline": "米波绝活 · 狗皇", + "heroes": [ + "meepo", + "broodmother", + "alchemist" + ], + "nickname": "踏上征途167", + "unique_id": "957090", + "signature": "娱乐DOTA 轻松氛围", + "avatar": "streamer_avatars/gouhuang.jpg", + "is_live": false, + "live_probed_at": "2026-07-29T18:16:27.171378+00:00", + "profile_fetched_at": "2026-07-29T18:37:18.228078+00:00", + "following_count": 868, + "follower_count": 280201, + "total_favorited": 9673470 + }, + { + "id": "juezhongjue", + "platform": "bilibili", + "live_url": "https://live.bilibili.com/1747114599", + "profile_url": "https://space.bilibili.com/520653835", + "tagline": "绝活打野炼金", + "heroes": [ + "alchemist" + ], + "nickname": "Dota2绝中绝", + "unique_id": "520653835", + "signature": "绝活打野炼金。鄙人不擅长对线对线,但极其擅长与野怪掰头!", + "follower_count": 433, + "avatar": "streamer_avatars/juezhongjue.jpg", + "is_live": false, + "live_probed_at": "2026-07-29T18:08:20.096701+00:00" + }, + { + "id": "k9", + "platform": "douyu", + "live_url": "https://www.douyu.com/235520", + "profile_url": "https://v.douyu.com/author/JPw9YOLKlw5X", + "tagline": "绝活卡尔", + "heroes": [ + "invoker" + ], + "nickname": "18yearsold天残少年K9", + "unique_id": "235520", + "signature": "k9:午夜牢车教室!.", + "avatar": "streamer_avatars/k9.jpg", + "is_live": true, + "live_probed_at": "2026-07-29T18:16:27.995333+00:00", + "following_count": 16, + "follower_count": 465781, + "total_favorited": 26074078, + "profile_fetched_at": "2026-07-29T18:23:59.723287+00:00" + }, + { + "id": "yezi", + "platform": "douyu", + "live_url": "https://www.douyu.com/246195", + "profile_url": "https://v.douyu.com/author/Kqy70jkrpdXG", + "tagline": "绝活火猫", + "heroes": [ + "ember_spirit" + ], + "nickname": "叶子长青K", + "unique_id": "246195", + "signature": "QQ:394867894 网易云搜用户 淡然听听歌", + "avatar": "streamer_avatars/yezi.jpg", + "is_live": false, + "live_probed_at": "2026-07-29T18:16:28.416689+00:00", + "profile_fetched_at": "2026-07-29T18:37:20.691635+00:00", + "following_count": 134, + "follower_count": 286391, + "total_favorited": 6336746 + }, + { + "id": "zhedaxiaoyuwang", + "platform": "douyin", + "profile_url": "https://v.douyin.com/tSe_vsZ8r7o/", + "tagline": "小鱼人", + "heroes": [ + "slark" + ], + "nickname": "浙大小鱼王—dota2", + "unique_id": "89748079578", + "signature": "本硕985,浙大在读 9700冲万分", + "following_count": 52, + "follower_count": 1802, + "total_favorited": 842, + "avatar": "streamer_avatars/zhedaxiaoyuwang.jpg", + "profile_fetched_at": "2026-07-29T18:26:00+00:00" } ] } diff --git a/web/export_relations_site.py b/web/export_relations_site.py index 6cc4b10..1edf695 100644 --- a/web/export_relations_site.py +++ b/web/export_relations_site.py @@ -52,7 +52,7 @@ from shared.paths import ( from serve_relations import WEB_DIR, build_payload -SITE_VERSION = "0.5.112" +SITE_VERSION = "0.5.114" DEFAULT_OSS_BASE = "https://climperor.oss-cn-shanghai.aliyuncs.com" diff --git a/web/fetch_streamer_live.py b/web/fetch_streamer_live.py index bab579c..3ee2495 100644 --- a/web/fetch_streamer_live.py +++ b/web/fetch_streamer_live.py @@ -13,6 +13,9 @@ Approach (verified 2026-07): - Bilibili: public API ``api.live.bilibili.com/room/v1/Room/get_info`` with the numeric room id taken from the ``live_url`` path; ``data.live_status == 1`` means live (0 offline, 2 replay — replay is treated as offline). No login. +- Douyu: public ``www.douyu.com/betard/{room_id}``; ``room.show_status == 1`` + means live, ``== 2`` offline; ``room.videoLoop == 1`` (carousel) counts as + offline. - Douyin: one shared cookie session is warmed up (www.douyin.com + live.douyin.com), then per room we GET ``live.douyin.com/{web_rid}`` with a browser UA (the numeric ``live_url`` path segment is the ``web_rid``). The @@ -65,10 +68,12 @@ TIMEOUT = 20 # Douyin rate-limits aggressively; keep ~1s spacing between its requests. DOUYIN_SPACING = 1.0 BILIBILI_SPACING = 0.5 +DOUYU_SPACING = 0.3 DOUYIN_HOME = "https://www.douyin.com/" DOUYIN_LIVE_HOME = "https://live.douyin.com/" BILIBILI_INFO_URL = "https://api.live.bilibili.com/room/v1/Room/get_info?room_id={room_id}" +DOUYU_BETARD_URL = "https://www.douyu.com/betard/{room_id}" # Escaped JSON inside the SSR pace chunks: \"roomStore\":{\"roomInfo\":{\"room\":{ DOUYIN_ROOMSTORE_RE = re.compile( @@ -152,8 +157,27 @@ def probe_bilibili(room_id: str) -> bool: return data.get("live_status") == 1 +def probe_douyu(room_id: str) -> bool: + """show_status: 1 live, 2 offline; videoLoop carousel counts as offline.""" + payload = http_utils.http_json( + DOUYU_BETARD_URL.format(room_id=room_id), timeout=TIMEOUT + ) + if not isinstance(payload, dict): + raise ValueError("douyu betard returned non-object") + room = payload.get("room") + if not isinstance(room, dict): + raise ValueError("douyu betard returned no room") + if int(room.get("videoLoop") or 0) == 1: + return False + status = room.get("show_status") + try: + return int(status) == 1 + except (TypeError, ValueError) as e: + raise ValueError(f"douyu unexpected show_status {status!r}") from e + + def room_ref_from_url(live_url: str) -> str | None: - """First path segment of the live room URL (douyin web_rid / bilibili room id).""" + """First path segment of the live room URL (douyin/bilibili/douyu room id).""" path = urllib.parse.urlparse(live_url.strip()).path.strip("/") if not path: return None @@ -167,6 +191,8 @@ def live_platform_from_url(live_url: str, fallback: str = "") -> str: return "bilibili" if "douyin.com" in host: return "douyin" + if "douyu.com" in host: + return "douyu" return (fallback or "").strip().lower() @@ -210,6 +236,9 @@ def probe_streamers( elif platform == "bilibili": is_live = probe_bilibili(ref) time.sleep(BILIBILI_SPACING) + elif platform == "douyu": + is_live = probe_douyu(ref) + time.sleep(DOUYU_SPACING) else: print(f"skip {sid}: platform={platform!r} unsupported", flush=True) continue diff --git a/web/fetch_streamers.py b/web/fetch_streamers.py index 3a7c441..5676364 100644 --- a/web/fetch_streamers.py +++ b/web/fetch_streamers.py @@ -1,16 +1,23 @@ -"""Fetch Douyin profile fields into data/streamers.json. +"""Fetch Douyin / Douyu profile fields into data/streamers.json. Manual seed fields (id / platform / live_url / profile_url / heroes / tagline) are preserved. Profile enrichment (nickname, signature, counts, avatar) is -best-effort via Douyin HTML RENDER_DATA + text fallback; failures keep the -previous values. +best-effort: + +- Douyin: HTML RENDER_DATA + text fallback +- Douyu: ``v.douyu.com/author/`` (or ``author-video/``) page + ``window.$DATA`` (fans / following / plays / avatar). Room-only rows + resolve ``up_id`` from the live-room HTML then fetch the author page; + if that fails, fall back to ``betard`` (nickname / avatar / bio, no fans). + +Failures keep the previous values. Preview only — do not merge into relations/heroes or recommend. Part of refresh_web ``daily`` (soft-fail: never aborts the tier). Usage: python fetch_streamers.py - python fetch_streamers.py --ids xiaowang + python fetch_streamers.py --ids xiaowang k9 python fetch_streamers.py --out data/streamers.json """ @@ -32,8 +39,8 @@ import urllib.request from datetime import datetime, timezone from typing import Any -from shared.http_utils import write_json_atomic -from shared.paths import DATA, STREAMER_AVATARS +from shared.http_utils import http_json, write_json_atomic +from shared.paths import DATA, ROOT, STREAMER_AVATARS OUT = DATA / "streamers.json" AVATAR_DIR = STREAMER_AVATARS @@ -58,6 +65,17 @@ HTML_AVATAR_RE = re.compile( re.IGNORECASE, ) SEC_UID_RE = re.compile(r"/user/(MS4wLjABAAAA[A-Za-z0-9_-]+)") +DOUYU_AUTHOR_HASH_RE = re.compile( + r"(?:v\.)?douyu\.com/author(?:-video)?/([A-Za-z0-9]+)", re.IGNORECASE +) +DOUYU_ROOM_RE = re.compile( + r"(?:www\.)?douyu\.com/(\d+)(?:/|$|\?)", re.IGNORECASE +) +DOUYU_DATA_RE = re.compile(r"window\.\$DATA=(\{.*?\}),\$", re.DOTALL) +DOUYU_BARE_KEY_RE = re.compile(r"([{\s,])([A-Za-z_][A-Za-z0-9_]*)\s*:") +# Room HTML embeds up_id in plain JSON and/or JSON-escaped script strings. +DOUYU_UP_ID_RE = re.compile(r'\\?"up_id\\?"\s*:\s*\\?"([A-Za-z0-9]+)\\?"') +DOUYU_BETARD_URL = "https://www.douyu.com/betard/{room_id}" # Fields fetch may overwrite; manual seed keys are never removed. PROFILE_KEYS = ( "nickname", @@ -104,7 +122,11 @@ def _opener() -> urllib.request.OpenerDirector: def _get( - opener: urllib.request.OpenerDirector, url: str, *, timeout: int = 30 + opener: urllib.request.OpenerDirector, + url: str, + *, + timeout: int = 30, + referer: str = "https://www.douyin.com/", ) -> tuple[str, str]: """Return (final_url, html).""" req = urllib.request.Request( @@ -113,7 +135,7 @@ def _get( "User-Agent": BROWSER_UA, "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8", - "Referer": "https://www.douyin.com/", + "Referer": referer, }, ) with opener.open(req, timeout=timeout) as resp: @@ -306,7 +328,7 @@ def resolve_profile_url( return url, None -def download_avatar(url: str, dest: Path) -> bool: +def download_avatar(url: str, dest: Path, *, referer: str | None = None) -> bool: dest.parent.mkdir(parents=True, exist_ok=True) # Prefer a larger CDN variant when the URL embeds a size token. candidates = [url] @@ -314,12 +336,22 @@ def download_avatar(url: str, dest: Path) -> bool: candidates.insert(0, url.replace("/100x100/", "/720x720/")) if "300x300" in url: candidates.insert(0, url.replace("300x300", "720x720")) + if "_avatar_middle." in url: + candidates.insert(0, url.replace("_avatar_middle.", "_avatar_big.")) + if "_middle.jpg" in url: + candidates.insert(0, url.replace("_middle.jpg", "_big.jpg")) + host = urllib.parse.urlparse(url).netloc.lower() + if referer is None: + if "douyu" in host: + referer = "https://www.douyu.com/" + else: + referer = "https://www.douyin.com/" for candidate in candidates: req = urllib.request.Request( candidate, headers={ "User-Agent": BROWSER_UA, - "Referer": "https://www.douyin.com/", + "Referer": referer, }, ) try: @@ -336,6 +368,153 @@ def download_avatar(url: str, dest: Path) -> bool: return False +def parse_douyu_dollar_data(blob: str) -> dict: + """Parse Douyu ``window.$DATA={...}`` JS object (bare keys) into a dict.""" + quoted = DOUYU_BARE_KEY_RE.sub(r'\1"\2":', blob.strip()) + data = json.loads(quoted) + if not isinstance(data, dict): + raise ValueError("douyu $DATA is not an object") + return data + + +def extract_profile_from_douyu_data(data: dict) -> dict: + """Map Douyu author ``$DATA`` fields onto streamer profile keys.""" + out: dict[str, Any] = {} + nick = _first_str(data.get("name"), data.get("nickname")) + if nick: + out["nickname"] = nick + room_id = _first_str(data.get("roomId"), data.get("room_id")) + if room_id: + out["unique_id"] = room_id + out["live_url"] = f"https://www.douyu.com/{room_id}" + up_id = _first_str(data.get("upId"), data.get("up_id")) + if up_id: + # Canonical homepage (author space); author-video is an alias. + out["profile_url"] = f"https://v.douyu.com/author/{up_id}" + # Author bio only — do not fall back to live room title (would wipe + # hand-seeded / betard signatures on every refresh). + contents = _first_str(data.get("contents"), data.get("ownerAuthContents")) + if contents: + out["signature"] = contents + out["following_count"] = _first_int(data.get("upFollowNum"), data.get("up_follow_num")) + out["follower_count"] = _first_int(data.get("subscribeNum"), data.get("subscribe_num")) + # Video play count — shown as「播放」on Douyu cards. + out["total_favorited"] = _first_int(data.get("playCount"), data.get("play_count")) + avatar = _first_str(data.get("avatar")) + if avatar: + out["avatar_url"] = avatar.replace(r"\/", "/") + return out + + +def fetch_douyu_author_profile( + opener: urllib.request.OpenerDirector, profile_url: str +) -> dict: + """Fetch Douyu author / author-video page and parse ``window.$DATA``.""" + m = DOUYU_AUTHOR_HASH_RE.search(profile_url) + if not m: + raise ValueError(f"not a douyu author url: {profile_url!r}") + hash_id = m.group(1) + # Prefer /author/; fall back to /author-video/ if $DATA is missing. + errors: list[str] = [] + for path in (f"author/{hash_id}", f"author-video/{hash_id}"): + page_url = f"https://v.douyu.com/{path}" + try: + _, html = _get(opener, page_url, referer="https://v.douyu.com/") + except (urllib.error.URLError, TimeoutError, OSError) as e: + errors.append(f"{path}: {e}") + continue + data_m = DOUYU_DATA_RE.search(html) + if not data_m: + errors.append(f"{path}: no window.$DATA") + continue + profile = extract_profile_from_douyu_data( + parse_douyu_dollar_data(data_m.group(1)) + ) + if not any( + profile.get(k) is not None + for k in ("nickname", "follower_count", "avatar_url", "unique_id") + ): + errors.append(f"{path}: parsed empty") + continue + return profile + raise ValueError("; ".join(errors) or "douyu author page failed") + + +def extract_douyu_up_id_from_room_html(html: str) -> str | None: + """Pull author ``up_id`` hash embedded in the live-room page HTML.""" + m = DOUYU_UP_ID_RE.search(html or "") + return m.group(1) if m else None + + +def resolve_douyu_author_url_from_room( + opener: urllib.request.OpenerDirector, room_id: str +) -> str: + """Fetch ``www.douyu.com/`` and build the author homepage URL.""" + page_url = f"https://www.douyu.com/{room_id}" + _, html = _get(opener, page_url, referer="https://www.douyu.com/") + up_id = extract_douyu_up_id_from_room_html(html) + if not up_id: + raise ValueError(f"douyu room {room_id}: no up_id in HTML") + return f"https://v.douyu.com/author/{up_id}" + + +def fetch_douyu_room_profile(room_id: str) -> dict: + """Fallback enrichment from live-room ``betard`` (no fan counts).""" + payload = http_json(DOUYU_BETARD_URL.format(room_id=room_id), timeout=20) + if not isinstance(payload, dict): + raise ValueError("douyu betard returned non-object") + room = payload.get("room") + if not isinstance(room, dict): + raise ValueError("douyu betard returned no room") + out: dict[str, Any] = { + "unique_id": str(room_id), + "live_url": f"https://www.douyu.com/{room_id}", + } + nick = _first_str(room.get("nickname"), room.get("owner_name")) + if nick: + out["nickname"] = nick + details = _first_str(room.get("show_details"), room.get("room_name")) + if details: + out["signature"] = details + avatar = room.get("avatar") + avatar_url = None + if isinstance(avatar, dict): + avatar_url = _first_str(avatar.get("big"), avatar.get("middle"), avatar.get("small")) + elif isinstance(avatar, str): + avatar_url = avatar + if not avatar_url: + avatar_url = _first_str(room.get("owner_avatar"), room.get("avatar_mid")) + if avatar_url: + out["avatar_url"] = avatar_url + if not out.get("nickname") and not out.get("avatar_url"): + raise ValueError("douyu betard parsed empty") + return out + + +def fetch_douyu_profile( + opener: urllib.request.OpenerDirector, row: dict +) -> dict: + """Enrich a Douyu streamer from author URL, room→up_id, else betard.""" + profile_url = str(row.get("profile_url") or "").strip() + live_url = str(row.get("live_url") or "").strip() + if DOUYU_AUTHOR_HASH_RE.search(profile_url): + return fetch_douyu_author_profile(opener, profile_url) + room_id = None + for candidate in (profile_url, live_url): + m = DOUYU_ROOM_RE.search(candidate) + if m: + room_id = m.group(1) + break + if not room_id: + raise ValueError("douyu row needs author profile_url or room live_url") + try: + author_url = resolve_douyu_author_url_from_room(opener, room_id) + return fetch_douyu_author_profile(opener, author_url) + except (urllib.error.URLError, TimeoutError, OSError, ValueError) as e: + print(f" douyu room→author failed ({e}); betard fallback", flush=True) + return fetch_douyu_room_profile(room_id) + + def fetch_douyin_profile( opener: urllib.request.OpenerDirector, profile_url: str ) -> dict: @@ -382,6 +561,15 @@ def merge_profile(row: dict, profile: dict, *, streamer_id: str) -> None: if val is None or val == "": continue row[key] = val + # Fill missing live/profile URLs from platform enrichment; never wipe seeds. + for key in ("live_url", "profile_url"): + val = profile.get(key) + if isinstance(val, str) and val and not str(row.get(key) or "").strip(): + row[key] = val + # Prefer canonical Douyu author homepage when enrichment found one. + prof = profile.get("profile_url") + if isinstance(prof, str) and DOUYU_AUTHOR_HASH_RE.search(prof): + row["profile_url"] = prof avatar_url = profile.get("avatar_url") if isinstance(avatar_url, str) and avatar_url: dest = AVATAR_DIR / f"{streamer_id}.jpg" @@ -408,18 +596,25 @@ def enrich_streamers( if ids is not None and sid not in ids: continue platform = str(row.get("platform") or "").strip().lower() - if platform != "douyin": - print(f"skip {sid}: platform={platform!r} (only douyin supported)", flush=True) + if platform not in ("douyin", "douyu"): + print( + f"skip {sid}: platform={platform!r} " + f"(supported: douyin, douyu)", + flush=True, + ) skip += 1 continue - profile_url = str(row.get("profile_url") or "").strip() - if not profile_url: - print(f"skip {sid}: missing profile_url", flush=True) - skip += 1 - continue - print(f"fetching {sid} ...", flush=True) + print(f"fetching {sid} ({platform}) ...", flush=True) try: - profile = fetch_douyin_profile(opener, profile_url) + if platform == "douyin": + profile_url = str(row.get("profile_url") or "").strip() + if not profile_url: + print(f"skip {sid}: missing profile_url", flush=True) + skip += 1 + continue + profile = fetch_douyin_profile(opener, profile_url) + else: + profile = fetch_douyu_profile(opener, row) merge_profile(row, profile, streamer_id=sid) nick = row.get("nickname") or "?" print( @@ -434,7 +629,7 @@ def enrich_streamers( time.sleep(0.8) if ok > 0: payload["fetched_at"] = _now_iso() - payload["source"] = payload.get("source") or "manual+douyin" + payload["source"] = payload.get("source") or "manual+douyin+douyu" meta = payload.get("platform_meta") if not isinstance(meta, dict): meta = {} @@ -442,13 +637,19 @@ def enrich_streamers( "douyin", {"label_zh": "抖音", "icon": "ui-icon/platform_douyin.png"}, ) + meta.setdefault( + "douyu", + {"label_zh": "斗鱼", "icon": "ui-icon/platform_douyu.png"}, + ) payload["platform_meta"] = meta _ = PROFILE_KEYS return ok, skip, fail def main() -> int: - ap = argparse.ArgumentParser(description="Enrich streamers.json from Douyin profiles") + ap = argparse.ArgumentParser( + description="Enrich streamers.json from Douyin / Douyu profiles" + ) ap.add_argument("--out", type=Path, default=OUT) ap.add_argument( "--ids", diff --git a/web/frontend/app.js b/web/frontend/app.js index b20ab72..bd10d23 100644 --- a/web/frontend/app.js +++ b/web/frontend/app.js @@ -4364,7 +4364,14 @@ function buildStreamerMetaLine(row) { const parts = []; if (uniqueId) { parts.push({ - label: platform === "douyin" ? "抖音号" : platform === "bilibili" ? "UID" : "账号", + label: + platform === "douyin" + ? "抖音号" + : platform === "bilibili" + ? "UID" + : platform === "douyu" + ? "房间号" + : "账号", value: String(uniqueId), account: true, }); @@ -4373,6 +4380,13 @@ function buildStreamerMetaLine(row) { if (Number.isFinite(Number(row.following_count))) { parts.push({ label: "关注", value: formatStreamerCount(row.following_count) }); } + } else if (platform === "douyu") { + if (Number.isFinite(Number(row.following_count))) { + parts.push({ label: "关注", value: formatStreamerCount(row.following_count) }); + } + if (Number.isFinite(Number(row.total_favorited))) { + parts.push({ label: "播放", value: formatStreamerCount(row.total_favorited) }); + } } else if (Number.isFinite(Number(row.total_favorited))) { parts.push({ label: "获赞", value: formatStreamerCount(row.total_favorited) }); } diff --git a/web/frontend/config.js b/web/frontend/config.js index 276c649..36ae99a 100644 --- a/web/frontend/config.js +++ b/web/frontend/config.js @@ -1,5 +1,5 @@ /* Local defaults; production export overwrites via export_relations_site.py. */ -var SITE_VERSION = "0.5.112"; +var SITE_VERSION = "0.5.114"; var ABILITY_VIDEO_BASE = ""; var STATIC_ASSET_BASE = ""; diff --git a/web/frontend/functions/api/live-status.js b/web/frontend/functions/api/live-status.js index ee43df2..2ac65fb 100644 --- a/web/frontend/functions/api/live-status.js +++ b/web/frontend/functions/api/live-status.js @@ -10,6 +10,8 @@ * Probe logic is a JS port of fetch_streamer_live.py: * - Bilibili: api.live.bilibili.com Room/get_info; data.live_status === 1 is * live (0 offline, 2 replay counts as offline). + * - Douyu: www.douyu.com/betard/; room.show_status === 1 is live + * (2 offline); room.videoLoop === 1 (carousel) counts as offline. * - Douyin: warm up cookies (www.douyin.com + live.douyin.com), then GET * live.douyin.com/ with a browser UA and parse the escaped JSON in * the SSR pace chunks: roomStore.roomInfo.room.status (2 live / 4 offline); @@ -44,6 +46,7 @@ const DOUYIN_HOME = "https://www.douyin.com/"; const DOUYIN_LIVE_HOME = "https://live.douyin.com/"; const BILIBILI_INFO_URL = "https://api.live.bilibili.com/room/v1/Room/get_info?room_id="; +const DOUYU_BETARD_URL = "https://www.douyu.com/betard/"; // Escaped JSON inside the SSR pace chunks: \"roomStore\":{\"roomInfo\":{\"room\":{ const DOUYIN_ROOMSTORE_RE = /\\"roomStore\\":\s*\{\\"roomInfo\\":\s*\{\\"room\\":\s*\{/; @@ -162,7 +165,25 @@ export async function probeBilibiliRoom(roomId) { return data.live_status === 1; } -/** First path segment of the live room URL (douyin web_rid / bilibili room id). */ +/** show_status: 1 live, 2 offline; videoLoop carousel counts as offline. */ +export async function probeDouyuRoom(roomId) { + const res = await fetchWithTimeout(DOUYU_BETARD_URL + roomId, { + headers: { + "User-Agent": BROWSER_UA, + Accept: "application/json", + Referer: "https://www.douyu.com/", + }, + }); + const payload = await res.json(); + const room = payload && payload.room; + if (!room || typeof room !== "object") { + throw new Error("douyu betard returned no room"); + } + if (Number(room.videoLoop || 0) === 1) return false; + return Number(room.show_status) === 1; +} + +/** First path segment of the live room URL (douyin/bilibili/douyu room id). */ export function roomRefFromUrl(liveUrl) { let path = ""; try { @@ -180,6 +201,7 @@ export function livePlatformFromUrl(liveUrl, fallback = "") { const host = new URL(String(liveUrl).trim()).hostname.toLowerCase(); if (host.includes("bilibili.com")) return "bilibili"; if (host.includes("douyin.com")) return "douyin"; + if (host.includes("douyu.com")) return "douyu"; } catch { /* keep fallback */ } @@ -245,6 +267,7 @@ async function probeAll(targets) { let isLive; if (t.platform === "douyin") isLive = await probeDouyinRoom(t.ref, jar); else if (t.platform === "bilibili") isLive = await probeBilibiliRoom(t.ref); + else if (t.platform === "douyu") isLive = await probeDouyuRoom(t.ref); else throw new Error(`unsupported platform ${t.platform}`); results.set(t.id, { is_live: isLive }); } catch (err) { diff --git a/web/frontend/index.html b/web/frontend/index.html index 1a8a419..b5fa8c5 100644 --- a/web/frontend/index.html +++ b/web/frontend/index.html @@ -5,8 +5,8 @@ DOTA2 上分帝 - - + +

DOTA2 上分帝

@@ -178,8 +178,8 @@
- - - + + + diff --git a/web/tests/test_refresh_reliability.py b/web/tests/test_refresh_reliability.py index 50cf880..193cf2f 100644 --- a/web/tests/test_refresh_reliability.py +++ b/web/tests/test_refresh_reliability.py @@ -17,6 +17,12 @@ sys.path.insert(0, str(ROOT / "web")) from web import notify_site_traffic, refresh_web from web.fetch_stratz_meta import preserve_failed_meta_brackets from web.fetch_streamer_live import probe_streamers +from web.fetch_streamers import ( + DOUYU_AUTHOR_HASH_RE, + extract_douyu_up_id_from_room_html, + extract_profile_from_douyu_data, + parse_douyu_dollar_data, +) from web.refresh_cache import restore_patches, restore_streamers from shared.http_utils import write_json_atomic from shared.paths import HEROES_JSON, RELATIONS_JSON, WEB_FRONTEND @@ -260,6 +266,65 @@ class LiveProbeFallbackTests(unittest.TestCase): self.assertFalse(row["is_live"]) self.assertNotIn("live_probed_at", row) + def test_douyu_probe_path_writes_live_flag(self) -> None: + payload = { + "streamers": [ + { + "id": "gouhuang", + "platform": "douyu", + "live_url": "https://www.douyu.com/957090", + } + ] + } + with patch("web.fetch_streamer_live.probe_douyu", return_value=True): + live, offline, fail = probe_streamers(payload) + self.assertEqual((live, offline, fail), (1, 0, 0)) + self.assertTrue(payload["streamers"][0]["is_live"]) + self.assertIn("live_probed_at", payload["streamers"][0]) + + +class DouyuProfileParseTests(unittest.TestCase): + def test_author_and_author_video_hashes(self) -> None: + self.assertEqual( + DOUYU_AUTHOR_HASH_RE.search( + "https://v.douyu.com/author/JPw9YOLKlw5X" + ).group(1), + "JPw9YOLKlw5X", + ) + self.assertEqual( + DOUYU_AUTHOR_HASH_RE.search( + "https://v.douyu.com/author-video/JPw9YOLKlw5X" + ).group(1), + "JPw9YOLKlw5X", + ) + + def test_dollar_data_maps_fan_fields(self) -> None: + blob = ( + '{type:"0",uid:"13506421",upId:"JPw9YOLKlw5X",upFollowNum:"16",' + 'subscribeNum:"465781",playCount:"26074077",' + 'avatar:"https://example.com/a.jpg",' + 'name: "18yearsold\\u5929\\u6b8b\\u5c11\\u5e74K9",' + 'contents: "",roomId:"235520",roomName: "k9 room"}' + ) + profile = extract_profile_from_douyu_data(parse_douyu_dollar_data(blob)) + self.assertEqual(profile["nickname"], "18yearsold天残少年K9") + self.assertEqual(profile["unique_id"], "235520") + self.assertEqual(profile["following_count"], 16) + self.assertEqual(profile["follower_count"], 465781) + self.assertEqual(profile["total_favorited"], 26074077) + self.assertEqual(profile["profile_url"], "https://v.douyu.com/author/JPw9YOLKlw5X") + self.assertEqual(profile["live_url"], "https://www.douyu.com/235520") + self.assertNotIn("signature", profile) + + def test_room_html_up_id_extraction(self) -> None: + plain = '{"rid":957090,"up_id":"EqAvg1lQD75L","ban_display":0}' + escaped = ( + r'{\"rid\":957090,\"up_id\":\"EqAvg1lQD75L\",\"ban_display\":0}' + ) + self.assertEqual(extract_douyu_up_id_from_room_html(plain), "EqAvg1lQD75L") + self.assertEqual(extract_douyu_up_id_from_room_html(escaped), "EqAvg1lQD75L") + self.assertIsNone(extract_douyu_up_id_from_room_html("")) + class NotifySummaryTests(unittest.TestCase): def test_skipped_summary_is_labeled(self) -> None: