From 46898c8165ee7d18f3caed7d2015c839d3bd7e02 Mon Sep 17 00:00:00 2001 From: tangsong Date: Fri, 27 Feb 2026 16:05:14 +0800 Subject: [PATCH] =?UTF-8?q?add=20=E5=88=9D=E7=89=88=E7=A8=8B=E5=BC=8F?= =?UTF-8?q?=E7=A2=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env.example | 7 + .gitignore | 45 +++ README.md | 92 +++++- animate.json | 697 +++++++++++++++++++++++++++++++++++++++++++ cogs/base.py | 76 +++++ cogs/lottery.py | 153 ++++++++++ countdown.wav | Bin 0 -> 882044 bytes discord-bot.py | 75 +++++ pokemon.json | 757 +++++++++++++++++++++++++++++++++++++++++++++++ requirements.txt | 2 + 10 files changed, 1902 insertions(+), 2 deletions(-) create mode 100644 .env.example create mode 100644 .gitignore create mode 100644 animate.json create mode 100644 cogs/base.py create mode 100644 cogs/lottery.py create mode 100644 countdown.wav create mode 100644 discord-bot.py create mode 100644 pokemon.json create mode 100644 requirements.txt diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..40467f1 --- /dev/null +++ b/.env.example @@ -0,0 +1,7 @@ +# Discord Bot Token +# 從 https://discord.com/developers/applications 取得 +DISCORD_BOT_TOKEN=your_bot_token_here + +# Discord Application ID (可選) +# 用於 Slash Commands +DISCORD_APPLICATION_ID=your_application_id_here \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2ebb96e --- /dev/null +++ b/.gitignore @@ -0,0 +1,45 @@ +# Python +__pycache__/ +*.py[cod] +*$py.class +*.so +.Python +env/ +venv/ +ENV/ +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +*.egg-info/ +.installed.cfg +*.egg + +# 環境變數 +.env + +# 語言模型 +models/ + +# IDE +.vscode/ +.idea/ +*.swp +*.swo +*~ + +# OS +.DS_Store +Thumbs.db + +# 機器人日誌 +logs/ +*.log \ No newline at end of file diff --git a/README.md b/README.md index 757cc2c..3412049 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,91 @@ -# discord-guess-img-bot +# 🖼️ Discord 猜圖片機器人 -猜圖片discord機器人 \ No newline at end of file +一個用 Python 和 discord.py 開發的 Discord 猜圖片互動機器人! + +## ✨ 功能特色 + +- 🖼️ 發送圖片讓人猜是什麼 +- 🎯 投票互動系統 +- 🎉 恭喜猜對者 +- 🎲 隨機答案提示 +- 📖 基礎功能指令:`!info`, `!help`, `!ping`, `!echo` +- ⚡ 支援 Slash Commands (`/info`, `/help`, `/ping`, `/echo`) + +## 🚀 安裝與設定 + +### 1. 克隆專案 +```bash +cd /home/tangsong/.openclaw/workspace/projects/discord-guess-img-bot +``` + +### 2. 安裝依賴 +```bash +pip install -r requirements.txt +``` + +### 3. 設定 Discord Bot Token +1. 前往 [Discord Developer Portal](https://discord.com/developers/applications) +2. 創建一個新應用程式 +3. 在 Bot 分頁創建機器人 +4. 複製你的 **Token** +5. 建立 `.env` 檔案: +```bash +cp .env.example .env +``` +6. 編輯 `.env` 檔案,填入你的 token: +```env +DISCORD_BOT_TOKEN=your_actual_token_here +``` + +### 4. 執行機器人 +```bash +python discord-bot.py +``` + +## 📖 指令說明 + +### 基礎指令 +- `!info` - 顯示機器人資訊 +- `!help` - 顯示幫助訊息 +- `!ping` - 測試機器人連線 +- `!echo <訊息>` - 回覆你的訊息 + +### Slash Commands +- `/info` - 顯示機器人資訊 +- `/help` - 顯示幫助訊息 +- `/ping` - 測試機器人連線 +- `/echo <訊息>` - 回覆你的訊息 + +## 🔧 專案結構 + +``` +discord-guess-img-bot/ +├── discord-bot.py # 主程式 +├── cogs/ +│ └── base.py # 基礎功能 Cog +├── .env.example # 環境變數範例 +├── requirements.txt # Python 依賴 +└── README.md # 專案說明 +``` + +## 🚧 待開發功能 + +- [ ] 猜圖片互動功能 +- [ ] 投票系統 +- [ ] 答案統計 +- [ ] 資料庫支援 +- [ ] 自訂機器人回應 + +## 🤝 貢獻 + +歡迎提交 Issue 和 Pull Request! + +## 📄 授權 + +MIT License + +--- + +**開發者:** 唐宋 +**語言:** Python +**套件:** discord.py \ No newline at end of file diff --git a/animate.json b/animate.json new file mode 100644 index 0000000..8937d2c --- /dev/null +++ b/animate.json @@ -0,0 +1,697 @@ +[ + { + "animate": "布布恰恰", + "character": "恰恰(車)", + "url": "https://i.imgur.com/M4iIjKs.jpg" + }, + { + "animate": "神風怪盜貞德", + "character": "怪盜貞德", + "url": "https://1.blog.xuite.net/1/4/2/e/24751250/blog_2308821/txt/40264635/5.jpg" + }, + { + "animate": "小紅帽恰恰", + "character": "小紅帽恰恰", + "url": "https://static.wikia.nocookie.net/chacha/images/5/53/Chacha140421f.gif/revision/latest?cb=20150425211616" + }, + { + "animate": "小紅帽恰恰", + "character": "利亞", + "url": "https://i.imgur.com/aNz6Wjo.jpg" + }, + { + "animate": "小紅帽恰恰", + "character": "希尼", + "url": "https://i.imgur.com/AsPZtrA.jpg" + }, + { + "animate": "美少女戰士", + "character": "月野兔(小兔)", + "url": "https://i1.wp.com/popbee.com/image/2020/04/sailormoon-3-seasons-free-on-youtube-teaser.jpg?quality=95&" + }, + { + "animate": "美少女戰士", + "character": "小小兔", + "url": "http://www.twword.com/uploads/wiki/72/bd/669536_27.jpg" + }, + { + "animate": "玩偶遊戲", + "character": "倉田紗南", + "url": "https://p2.bahamut.com.tw/HOME/creationCover/08/0003121708_B.JPG" + }, + { + "animate": "玩偶遊戲", + "character": "羽山秋人", + "url": "https://img.ttshow.tw/images/media/frontcover/2020/07/31/0000000.jpg" + }, + { + "animate": "玩偶遊戲", + "character": "巴比特", + "url": "https://www.newton.com.tw/img/2/fd0/cGcq5SN0MDMiRDZhNDNxQWN5M2YjJjMlVzYhVGNyYGMzImZwETNllTO4E2Nv0WZ0l2LjlGcvU2apFmYv02bj5SdklWYi5yYyN3Ztl2LvoDc0RHa.jpg" + }, + { + "animate": "我們這一家", + "character": "柚子", + "url": "https://imgur.com/Cp1uuvm.jpg" + }, + { + "animate": "我們這一家", + "character": "橘子", + "url": "https://imgur.dcard.tw/lGLkd9Th.jpg" + }, + { + "animate": "我們這一家", + "character": "花媽", + "url": "https://imgur.dcard.tw/NvFjGHth.jpg" + }, + { + "animate": "我們這一家", + "character": "花爸", + "url": "https://pic.pimg.tw/dark21dark21/1611394960-272538816-g.png" + }, + { + "animate": "飛天小女警", + "character": "花花", + "url": "http://i1.kknews.cc/UBrRJGjbbIXe_3Ao6PX-mIJrZVf4fGvM9LUADyM/0.jpg" + }, + { + "animate": "飛天小女警", + "character": "泡泡", + "url": "http://i2.kknews.cc/19oTUrSwHZkZKTiqgG3bN43TVF58bRpGDp8AuXs/0.jpg" + }, + { + "animate": "飛天小女警", + "character": "毛毛", + "url": "http://i2.kknews.cc/1-gvGQ740jacyhYyxbmtpAFLTnBYnr5H9c7cAX8/0.jpg" + }, + { + "animate": "飛天小女警", + "character": "魔人啾啾", + "url": "http://i1.kknews.cc/AOjo2LM9TIpxvmXf3ObhCT41BUavskVTWcfvBm4/0.jpg" + }, + { + "animate": "海賊王", + "character": "魯夫", + "url": "https://img.alicdn.com/imgextra/i2/2744466110/O1CN01axWoXd1v0QTQxN07i_!!2744466110-0-beehive-scenes.jpg" + }, + { + "animate": "海賊王", + "character": "娜美", + "url": "https://static.wikia.nocookie.net/onepiece/images/2/24/%E5%A8%9C%E7%BE%8E_%E8%B6%85%E6%96%B0%E6%98%9F%E7%AF%87_%E5%8B%95%E7%95%AB%E4%BF%A1%E6%81%AF%E6%A1%86.png/revision/latest?cb=20220226120148&path-prefix=zh" + }, + { + "animate": "海賊王", + "character": "喬巴", + "url": "https://sites.google.com/site/2017onepieceofcake/_/rsrc/1484064778421/7/4975f7735e38b.gif?height=375&width=400" + }, + { + "animate": "櫻桃小丸子", + "character": "小丸子", + "url": "https://cdn0.popo.tw/note/99/128995//7323254/201808281741521.jpg" + }, + { + "animate": "櫻桃小丸子", + "character": "小丸子的爺爺", + "url": "https://cdn2.ettoday.net/images/2385/2385503.jpg" + }, + { + "animate": "櫻桃小丸子", + "character": "小玉", + "url": "https://static.wikia.nocookie.net/maruko/images/c/c5/%E5%B0%8F%E7%8E%89.jpg/revision/latest/scale-to-width-down/313?cb=20160215090156&path-prefix=zh" + }, + { + "animate": "哆拉A夢", + "character": "哆拉A夢", + "url": "https://static.wikia.nocookie.net/doraemon/images/c/c4/%E5%93%86%E5%95%A6A%E5%A4%A2-0.jpg/revision/latest?cb=20190218095749&path-prefix=zh-tw" + }, + { + "animate": "哆拉A夢", + "character": "大雄", + "url": "https://i.imgur.com/1xle8rj.jpg" + }, + { + "animate": "哆拉A夢", + "character": "靜香", + "url": "https://img.moegirl.org.cn/common/thumb/5/57/%E6%BA%90%E9%9D%99%E9%A6%992005%E5%B9%B4%E7%89%88%E7%AB%8B%E7%BB%98.png/420px-%E6%BA%90%E9%9D%99%E9%A6%992005%E5%B9%B4%E7%89%88%E7%AB%8B%E7%BB%98.png" + }, + { + "animate": "庫洛魔法使", + "character": "木之本櫻", + "url": "https://imgur.dcard.tw/fQAMnV5h.jpg" + }, + { + "animate": "庫洛魔法使", + "character": "大道寺知世", + "url": "https://www.bnacg.com/uploads/2104/1-21041509134G96.jpg" + }, + { + "animate": "庫洛魔法使", + "character": "李小狼", + "url": "https://imgur.com/jaU2BF9.jpg" + }, + { + "animate": "尋找滿月", + "character": "神山滿月", + "url": "https://wx2.sinaimg.cn/large/006bnqvqly1gto7w1r8xbj61kw16oqv502.jpg" + }, + { + "animate": "尋找滿月", + "character": "長大的滿月", + "url": "https://wx1.sinaimg.cn/large/006bnqvqly1gto7w2wy9nj61kw16oqv502.jpg" + }, + { + "animate": "真珠美人魚", + "character": "七海露亞", + "url": "https://imgur.dcard.tw/meMlgVe.jpg" + }, + { + "animate": "真珠美人魚", + "character": "寶生波音", + "url": "https://imgur.dcard.tw/ndW5tZ0.jpg" + }, + { + "animate": "真珠美人魚", + "character": "洞院莉娜", + "url": "https://imgur.dcard.tw/HJ2aYxg.jpg" + }, + { + "animate": "魔法咪嚕咪嚕", + "character": "咪嚕", + "url": "http://i1.kknews.cc/ZVCqdHcwQCY05ciBO1XYsu4IyKdPHd0LDRLSLe7fJCQ/0.jpg" + }, + { + "animate": "探險活寶", + "character": "老皮", + "url": "https://upload.wikimedia.org/wikipedia/zh/thumb/d/d0/JaketheDog.png/220px-JaketheDog.png" + }, + { + "animate": "探險活寶", + "character": "阿寶", + "url": "https://upload.wikimedia.org/wikipedia/zh/e/e5/FinnAdventureTime.png" + }, + { + "animate": "探險活寶", + "character": "BMO", + "url": "https://i1.sndcdn.com/avatars-000119781902-cd2uwn-t500x500.jpg" + }, + { + "animate": "阿爾卑斯山的少女", + "character": "小蓮", + "url": "https://pic.pimg.tw/zyi5866/4b5dd69a744f1.gif" + }, + { + "animate": "阿爾卑斯山的少女", + "character": "小芬", + "url": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQLVIb5f6r2hzQyWh9-C50kSJ5l4JpBpIxGYkGDpQI2WszsByZ_7_dr28IfgTXnfL37kqk&usqp=CAU" + }, + { + "animate": "通靈王", + "character": "麻倉葉", + "url": "https://unimap.wingzero.tw/unipic/yeh.jpg" + }, + { + "animate": "通靈王", + "character": "安娜(阿葉的婆)", + "url": "https://imgur.dcard.tw/ezo8m1W.jpg" + }, + { + "animate": "通靈王", + "character": "葉王", + "url": "http://p9-tt-ipv6.byteimg.com/large/31d50000d27de9fc8364?from=detail&index=0" + }, + { + "animate": "KERORO軍曹", + "character": "Keroro軍曹", + "url": "https://stickershop.line-scdn.net/stickershop/v1/product/595/LINEStorePC/main.png" + }, + { + "animate": "KERORO軍曹", + "character": "Tamama二等兵", + "url": "https://stickershop.line-scdn.net/stickershop/v1/sticker/4891/android/sticker.png" + }, + { + "animate": "KERORO軍曹", + "character": "Giroro伍長", + "url": "https://stickershop.line-scdn.net/stickershop/v1/sticker/4887/android/sticker.png" + }, + { + "animate": "KERORO軍曹", + "character": "Dororo 兵長", + "url": "https://stickershop.line-scdn.net/stickershop/v1/sticker/4900/android/sticker.png" + }, + { + "animate": "KERORO軍曹", + "character": "Kululu曹長", + "url": "https://stickershop.line-scdn.net/stickershop/v1/sticker/4895/android/sticker.png" + }, + { + "animate": "麵包超人", + "character": "麵包超人", + "url": "https://img.shoplineapp.com/media/image_clips/5f8037678e37d30023fe6242/original.jpg?1602238311" + }, + { + "animate": "麵包超人", + "character": "果醬爺爺", + "url": "https://img.shoplineapp.com/media/image_clips/5f8038068f843a494a53c559/original.jpg?1602238469" + }, + { + "animate": "麵包超人", + "character": "細菌人", + "url": "https://img.shoplineapp.com/media/image_clips/5f803796cb32120038c61202/original.jpg?1602238358" + }, + { + "animate": "大嘴鳥", + "character": "大嘴鳥", + "url": "https://www.popdaily.com.tw/shaper/u/202011/ae675724-19dc-40d9-b39f-7a4e1e6bfedc.jpg?resize-w=900&resize-h=675" + }, + { + "animate": "飛天少女豬", + "character": "國分果林", + "url": "https://wx3.sinaimg.cn/large/007tH3W4gy1gyk8crdoslj30gn0mctb9.jpg" + }, + { + "animate": "飛天少女豬", + "character": "國分果林(豬版)", + "url": "https://wx3.sinaimg.cn/large/007tH3W4gy1gyk8crdoslj30gn0mctb9.jpg" + }, + { + "animate": "湯姆貓與傑利鼠", + "character": "湯姆貓", + "url": "https://p1.nanmuxuan.com/images/a9/d8acae639bf8cf9f.jpg" + }, + { + "animate": "湯姆貓與傑利鼠", + "character": "傑利鼠", + "url": "https://dl.bbs.9game.cn/attachments/forum/202002/26/124149j5t4d4ddit5i5z6d.jpg" + }, + { + "animate": "白金公主", + "character": "優希", + "url": "https://9.share.photo.xuite.net/emily920278/19b2e3e/9108639/388818847_m.jpg" + }, + { + "animate": "怪醫黑傑克", + "character": "黑傑克", + "url": "https://imgur.com/W8kKWxK.jpg" + }, + { + "animate": "怪醫黑傑克", + "character": "皮諾可", + "url": "https://cdn2.ettoday.net/images/1476/1476932.jpg" + }, + { + "animate": "豆豆先生", + "character": "豆豆先生", + "url": "http://b.blog.xuite.net/b/1/f/6/23823944/blog_1988994/txt/32214847/0.jpg" + }, + { + "animate": "豆豆先生", + "character": "豆豆先生的泰迪", + "url": "https://imgur.dcard.tw/QoStsJx.jpg" + }, + { + "animate": "企鵝家族", + "character": "PINGU", + "url": "https://cdn2-t17.techbang.com/system/attached_images/2015/08/164950/original/1aa179ac5ae9103a1f6d5a8eaf39dad8.jpg?1440067084" + }, + { + "animate": "企鵝家族", + "character": "PINGA", + "url": "https://www.popdaily.com.tw/shaper/u/202012/3cbd4c09-27b3-4af3-b87a-3352eb009dde.jpg?resize-w=900&resize-h=531" + }, + { + "animate": "霹靂酷樂貓", + "character": "酷樂", + "url": "https://truth.bahamut.com.tw/s01/201512/fcf85503e488c9f283635fbbfbdad498.JPG?w=1000" + }, + { + "animate": "外星人田中太郎", + "character": "田中太郎", + "url": "https://img.komicolle.org/2020-10/16041463930272.jpg" + }, + { + "animate": "大力水手卜派", + "character": "卜派", + "url": "https://truth.bahamut.com.tw/s01/201609/f05dfa9e4a15c939827273958c5ea1ac.JPG" + }, + { + "animate": "大力水手卜派", + "character": "奧莉薇", + "url": "https://truth.bahamut.com.tw/s01/201609/9e94399871c7ac5f71e03ad232bd8af5.JPG" + }, + { + "animate": "遊戲王", + "character": "武藤遊戲", + "url": "https://static.wikia.nocookie.net/motoneta/images/0/03/31027.jpg/revision/latest/scale-to-width-down/595?cb=20161015115601&path-prefix=zh" + }, + { + "animate": "遊戲王", + "character": "海馬瀨人", + "url": "http://pic.pimg.tw/billy77111/1317433353-3667293818.jpg" + }, + { + "animate": "可愛巧虎島", + "character": "巧虎", + "url": "https://truth.bahamut.com.tw/s01/201709/0804088c1c6c076d79396877f2323116.JPG" + }, + { + "animate": "可愛巧虎島", + "character": "桃樂比", + "url": "https://cf.shopee.tw/file/24dd04695da5c1188608bf4604748f4d" + }, + { + "animate": "可愛巧虎島", + "character": "琪琪", + "url": "https://www.newton.com.tw/img/0/580/cGcq5CZ5Q2NxMDZiVjM5kTZmJWZzQjYhFGOlNjZxAjZlVGN5QTNjhjZ4UjYv0WZ0l2LjlGcvU2apFmYv02bj5SdklWYi5yYyN3Ztl2LvoDc0RHa.jpg" + }, + { + "animate": "神奇寶貝", + "character": "小智", + "url": "http://i.imgur.com/7jpS5.png" + }, + { + "animate": "神奇寶貝", + "character": "小霞", + "url": "https://img.139y.com/article/image/201809/12/e91553f48f.gif" + }, + { + "animate": "神奇寶貝", + "character": "小剛", + "url": "https://tw.portal-pokemon.com/anime/series/s1/img/character/big_04.png" + }, + { + "animate": "海綿寶寶", + "character": "海綿寶寶", + "url": "https://static.wikia.nocookie.net/worldpedias/images/a/a4/Spongebob_SquarePants.jpg/revision/latest?cb=20140620141253&path-prefix=zh" + }, + { + "animate": "海綿寶寶", + "character": "派大星", + "url": "https://cdn-origin.cool-style.com.tw/cool/2020/02/49559949267_3da049d7ab_b1.jpg" + }, + { + "animate": "海綿寶寶", + "character": "章魚哥", + "url": "https://upload.wikimedia.org/wikipedia/zh/9/99/Squidward1.png" + }, + { + "animate": "天線寶寶", + "character": "丁丁", + "url": "https://pic.pimg.tw/shiuan0920/1382449280-2901655149.jpg" + }, + { + "animate": "天線寶寶", + "character": "迪西", + "url": "http://368521570729454624.weebly.com/uploads/1/3/6/3/13635053/112349.jpg" + }, + { + "animate": "天線寶寶", + "character": "拉拉", + "url": "https://image.knowing.asia/a022f397-e107-4a1e-8627-18e7e825b9f1/ab0c746a9932f418e072ec0a2b5cc302.png" + }, + { + "animate": "天線寶寶", + "character": "小波", + "url": "http://368521570729454624.weebly.com/uploads/1/3/6/3/13635053/3229820.jpg" + }, + { + "animate": "PUCCA(中國娃娃)", + "character": "Pucca", + "url": "https://inkscape.org/zh-hant/gallery/item/9639/Pucca.png" + }, + { + "animate": "PUCCA(中國娃娃)", + "character": "Garu", + "url": "https://static.wikia.nocookie.net/pucca/images/3/30/Garu_5.png/revision/latest?cb=20160919182049" + }, + { + "animate": "靈異教師神眉", + "character": "神眉(鵺野鳴介)", + "url": "https://image.32yx.com/file/userfiles/images/201803151743142678.png" + }, + { + "animate": "靈異教師神眉", + "character": "雪女(雪姬)", + "url": "https://i.imgur.com/zmv8v4f.jpg" + }, + { + "animate": "灌籃高手", + "character": "櫻木花道", + "url": "http://farm1.static.flickr.com/146/431236414_61aaa30f28.jpg" + }, + { + "animate": "灌籃高手", + "character": "安西教練", + "url": "https://p1.nanmuxuan.com/images/46/62a69fcb688d68f7.jpg" + }, + { + "animate": "小紅豆", + "character": "小紅豆", + "url": "https://i.imgur.com/XTPreqX.jpg" + }, + { + "animate": "小紅豆", + "character": "勇之助", + "url": "https://static.popdaily.com.tw/u/202105/c021e3e9-af01-439d-a215-2e1a3282cbb1.png" + }, + { + "animate": "小魔女Doremi", + "character": "Doremi", + "url": "https://wiki.komica.org/images/5/53/Img13127.jpg" + }, + { + "animate": "小魔女Doremi", + "character": "藤原羽月", + "url": "https://wiki.komica.org/images/d/d9/Img13129.jpg" + }, + { + "animate": "小魔女Doremi", + "character": "妹尾愛子", + "url": "https://wiki.komica.org/images/7/70/Img13130.jpg" + }, + { + "animate": "小魔女Doremi", + "character": "瀨川音符", + "url": "https://wiki.komica.org/images/9/97/Img13132.jpg" + }, + { + "animate": "小魔女Doremi", + "character": "飛鳥桃子", + "url": "https://wiki.komica.org/images/3/3d/Img13133.jpg" + }, + { + "animate": "蠟筆小新", + "character": "野原新之助", + "url": "https://obs.line-scdn.net/0h_XrCaP2kAHdPOi0AuRJ_IHVsAxh8VhN0KwxRdAxUXkMxCkZ2IFoYGWwzXU5kDkcpJl9HF2o-G0ZrDxIicFsY/w1200" + }, + { + "animate": "蠟筆小新", + "character": "野原美?", + "url": "https://web.ntnu.edu.tw/~40047006S/hw1/5.png" + }, + { + "animate": "蠟筆小新", + "character": "野原廣志", + "url": "https://img.toy-people.com/member/16158686292.jpg" + }, + { + "animate": "蠟筆小新", + "character": "風間徹", + "url": "https://p1-tt.byteimg.com/origin/pgc-image/ef7199f1096c4f36af8873a29183952e?from=pc" + }, + { + "animate": "獵人", + "character": "小傑", + "url": "https://img.alicdn.com/imgextra/i1/119389549/O1CN01peEoS02KPUeRyCD7Z_!!119389549.jpg" + }, + { + "animate": "獵人", + "character": "奇犽", + "url": "https://i.imgur.com/V7laqQm.png" + }, + { + "animate": "獵人", + "character": "酷拉皮卡", + "url": "https://img.ruten.com.tw/s2/d/85/78/21306274516344_650.jpg" + }, + { + "animate": "獵人", + "character": "雷歐力", + "url": "https://static.wikia.nocookie.net/hunterxhunter/images/0/08/Leorio-2011.png/revision/latest?cb=20200711024522" + }, + { + "animate": "獵人", + "character": "西索", + "url": "https://shironeko-matomemix.com/wp-content/uploads/2016/06/hiso2.png" + }, + { + "animate": "彗星公主", + "character": "彗星公主", + "url": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRQ4407-TbSSbVxEac3hYSff5-J4_F4eSQ7dQ&usqp=CAU" + }, + { + "animate": "彗星公主", + "character": "流星公主", + "url": "https://pbs.twimg.com/media/D0ud8Z4VYAA2t03.png" + }, + { + "animate": "德克斯特的實驗室", + "character": "德克斯特", + "url": "https://truth.bahamut.com.tw/s01/201906/b2ed8e0a0576c43f293b93e4f645ab06.JPG" + }, + { + "animate": "德克斯特的實驗室", + "character": "蒂蒂", + "url": "https://truth.bahamut.com.tw/s01/201906/cd5270370e1662127a2aa963c268e3ca.JPG" + }, + { + "animate": "膽小狗英雄", + "character": "膽小狗英雄", + "url": "https://truth.bahamut.com.tw/s01/201111/f4b494832b68ecd68551c86f13157870.JPG" + }, + { + "animate": "膽小狗英雄", + "character": "茉莉兒", + "url": "https://imgur.dcard.tw/DbJ2tiq.jpg" + }, + { + "animate": "膽小狗英雄", + "character": "奧提斯", + "url": "https://imgur.dcard.tw/82Kf47L.jpg" + }, + { + "animate": "拼命郎約翰尼", + "character": "約翰尼", + "url": "https://truth.bahamut.com.tw/s01/201207/92a87a221b07a2f780ed8ceb6831c1a7.PNG" + }, + { + "animate": "火影忍者", + "character": "漩渦鳴人", + "url": "http://i1.kknews.cc/P9FCkCChy2lhqdm1IhJ-UiGwJOluo-ZXsznHeJc/0.jpg" + }, + { + "animate": "火影忍者", + "character": "春野櫻", + "url": "http://pic.happytify.cc/uploads/20211031/3B/A3B782EC6282w650h334.jpeg" + }, + { + "animate": "火影忍者", + "character": "宇智波佐助", + "url": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRR4x2hwgFDY3kTy9RJCGMpsiYynKi3AL6MLA&usqp=CAU" + }, + { + "animate": "火影忍者", + "character": "旗木卡卡西", + "url": "https://static.wikia.nocookie.net/naruto3258/images/b/b3/KakashiHatake.png/revision/latest?cb=20170121140313&path-prefix=zh" + }, + { + "animate": "名偵探柯南", + "character": "江戶川柯南", + "url": "https://static.wikia.nocookie.net/detectiveconanchinese/images/d/dd/Conan.jpg/revision/latest/top-crop/width/360/height/450?cb=20180808144302&path-prefix=zh-tw" + }, + { + "animate": "名偵探柯南", + "character": "毛利蘭(小蘭)", + "url": "https://cloud.sbsub.com/pedia/5/5c/%E6%AF%9B%E5%88%A9%E5%85%B0.png" + }, + { + "animate": "名偵探柯南", + "character": "毛利偵探", + "url": "https://static.wikia.nocookie.net/detectiveconanchinese/images/1/1a/Kogorou.jpg/revision/latest/top-crop/width/360/height/450?cb=20180805042418&path-prefix=zh-tw" + }, + { + "animate": "哈姆太郎", + "character": "哈姆太郎", + "url": "https://www.likejapan.com/wp-content/uploads/2018/07/editors/10520/20180714163033_5b49b4a90e5c1.jpg" + }, + { + "animate": "哈姆太郎", + "character": "麗麗", + "url": "https://www.newton.com.tw/img/b/79a/cGcq5COhRGN0ITOwQGNhljN1YmMkZGOhFWO4MzLtVGdp9yYpB3LltWahJ2Lt92YuUHZpFmYuMmczdWbp9yL6MHc0RHa.jpg" + }, + { + "animate": "哈姆太郎", + "character": "大老闆", + "url": "https://ying310.tripod.com/siuyuk/taisho.gif" + }, + { + "animate": "犬夜叉", + "character": "犬夜叉", + "url": "https://img.moegirl.org.cn/common/thumb/c/ca/Inuyasha_.png/420px-Inuyasha_.png" + }, + { + "animate": "犬夜叉", + "character": "日暮籬(阿離)", + "url": "https://img.moegirl.org.cn/common/thumb/e/e3/24144428.jpeg/280px-24144428.jpeg" + }, + { + "animate": "犬夜叉", + "character": "殺生丸", + "url": "https://cdn.suruga-ya.jp/database/pics_light/game/892041666.jpg" + }, + { + "animate": "雞與牛", + "character": "雞", + "url": "https://truth.bahamut.com.tw/s01/201401/d48e21c164b69a6afff69b2cf0215f3d.JPG?w=1000" + }, + { + "animate": "雞與牛", + "character": "牛", + "url": "https://truth.bahamut.com.tw/s01/201401/1c56eeb396daa46aaa8e22bcd6fceb1d.JPG" + }, + { + "animate": "雞與牛", + "character": "雞與牛的爸媽", + "url": "https://imgur.dcard.tw/17EfoiHh.jpg" + }, + { + "animate": "七龍珠", + "character": "悟空", + "url": "https://cdn2.ettoday.net/images/3081/d3081968.jpg" + }, + { + "animate": "七龍珠", + "character": "達爾", + "url": "https://www.chinchun.com/upload/customer/4478d3f8-cc73-42dd-973e-5f589376fc32.jpg" + }, + { + "animate": "七龍珠", + "character": "比克", + "url": "https://img.moegirl.org.cn/common/thumb/e/e5/Piccolo.png/420px-Piccolo.png" + }, + { + "animate": "七龍珠", + "character": "魔人卜烏", + "url": "https://www.easyatm.com.tw/img/2/649/nBnauM3X3QjN2cTNzETN3MDO0UTMyITNykTO0EDMwAjMwUzLxUzLzgzLt92YucmbvRWdo5Cd0FmLxE2LvoDc0RHa.jpg" + }, + { + "animate": "中華一番", + "character": "劉昴星(小當家)", + "url": "https://cdn2.ettoday.net/images/1023/d1023591.jpg" + }, + { + "animate": "中華一番", + "character": "嘟嘟", + "url": "http://i.imgur.com/nP0j5Uh.jpg" + }, + { + "animate": "中華一番", + "character": "四郎", + "url": "https://img.komicolle.org/2019-06/15612197759256.jpg" + }, + { + "animate": "中華一番", + "character": "雷恩", + "url": "https://i.imgur.com/uRoWZds.jpg" + }, + { + "animate": "中華一番", + "character": "鋼棍解師傅", + "url": "https://i0.wp.com/imgsrc.baidu.com/forum/w%3D580/sign=6a24817d73f082022d9291377bfafb8a/ec0a6159252dd42aef5b64f5033b5bb5c9eab83a.jpg" + }, + { + "animate": "中華一番", + "character": "李嚴", + "url": "https://i.imgur.com/ttvXi3f.jpg" + } +] \ No newline at end of file diff --git a/cogs/base.py b/cogs/base.py new file mode 100644 index 0000000..309da92 --- /dev/null +++ b/cogs/base.py @@ -0,0 +1,76 @@ +""" +Base Cog - 基礎功能 +開發者:唐宋 +""" +import discord +from discord.ext import commands +from discord import app_commands + + +class Base(commands.Cog): + """基礎功能 Cog""" + + def __init__(self, bot): + self.bot = bot + + # --- Slash Commands --- + @app_commands.guilds(discord.Object(id=605678541530726421)) + @app_commands.command(name='info', description='顯示機器人資訊') + async def slash_info(self, interaction: discord.Interaction): + """顯示機器人資訊""" + embed = discord.Embed( + title='📖 機器人資訊', + color=discord.Color.blue() + ) + embed.add_field(name='名稱', value=self.bot.user.name, inline=True) + embed.add_field(name='ID', value=self.bot.user.id, inline=True) + embed.add_field(name='伺服器數量', value=len(self.bot.guilds), inline=True) + embed.add_field(name='成員數量', value=sum(g.member_count for g in self.bot.guilds), inline=True) + embed.set_footer(text=f'由 Discord.py {discord.__version__} 驅動') + await interaction.response.send_message(embed=embed) + + @app_commands.guilds(discord.Object(id=605678541530726421)) + @app_commands.command(name='ping', description='測試機器人連線') + async def slash_ping(self, interaction: discord.Interaction): + """測試機器人連線""" + latency = round(self.bot.latency * 1000) + await interaction.response.send_message(f'🏓 Pong! 延遲: {latency}ms') + + @app_commands.guilds(discord.Object(id=605678541530726421)) + @app_commands.command(name='echo', description='回覆你的訊息') + async def slash_echo(self, interaction: discord.Interaction, message: str): + """回覆你的訊息""" + await interaction.response.send_message(f'🔊 {message}') + + # --- Prefix Commands (向後相容) --- + + @commands.command(name='info') + async def info(self, ctx): + """顯示機器人資訊""" + embed = discord.Embed( + title='📖 機器人資訊', + color=discord.Color.blue() + ) + embed.add_field(name='名稱', value=self.bot.user.name, inline=True) + embed.add_field(name='ID', value=self.bot.user.id, inline=True) + embed.add_field(name='伺服器數量', value=len(self.bot.guilds), inline=True) + embed.add_field(name='成員數量', value=sum(g.member_count for g in self.bot.guilds), inline=True) + embed.set_footer(text=f'由 Discord.py {discord.__version__} 驅動') + await ctx.send(embed=embed) + + @commands.command(name='ping') + async def ping(self, ctx): + """測試機器人連線""" + latency = round(self.bot.latency * 1000) + await ctx.send(f'🏓 Pong! 延遲: {latency}ms') + + @commands.command(name='echo') + async def echo(self, ctx, *, message): + """回覆你的訊息""" + await ctx.send(f'🔊 {message}') + + +# 需要注入 bot 變數 +async def setup(bot): + """註冊 Base cog""" + await bot.add_cog(Base(bot)) \ No newline at end of file diff --git a/cogs/lottery.py b/cogs/lottery.py new file mode 100644 index 0000000..43a3a19 --- /dev/null +++ b/cogs/lottery.py @@ -0,0 +1,153 @@ +import discord +import random +import json +import asyncio +import datetime +from discord.ext import commands +from discord import app_commands +from discord import FFmpegPCMAudio + +class Lottery(commands.Cog): + def __init__(self, bot): + self.bot = bot + with open('./pokemon.json', mode='r', encoding='utf8') as jFile: + self.pokeData = json.load(jFile) + with open('./animate.json', mode='r', encoding='utf8') as jFile: + self.aniData = json.load(jFile) + + self.getPokeCount = 0 + self.getAniCount = 0 + self.pokeList = random.sample(range(0, len(self.pokeData)), len(self.pokeData)) + self.aniList = random.sample(range(0, len(self.aniData)), len(self.aniData)) + self.stop = False + + # --- Slash Command with Choice --- + @app_commands.guilds(discord.Object(id=605678541530726421)) + @app_commands.command(name="建立抽選清單", description="建立寶可夢或動畫角色的抽選清單") + @app_commands.choices(list_name=[ + app_commands.Choice(name="寶可夢", value="寶可夢"), + app_commands.Choice(name="動畫角色", value="動畫角色"), + app_commands.Choice(name="全部", value="全部") + ]) + async def create_list(self, interaction: discord.Interaction, list_name: app_commands.Choice[str]): + if list_name.value == "寶可夢": + self.pokeList = random.sample(range(0, len(self.pokeData)), len(self.pokeData)) + self.getPokeCount = 0 + msg = "已建立寶可夢抽選清單!" + elif list_name.value == "動畫角色": + self.aniList = random.sample(range(0, len(self.aniData)), len(self.aniData)) + self.getAniCount = 0 + msg = "已建立動畫角色抽選清單!" + else: + self.pokeList = random.sample(range(0, len(self.pokeData)), len(self.pokeData)) + self.aniList = random.sample(range(0, len(self.aniData)), len(self.aniData)) + self.getPokeCount = 0 + self.getAniCount = 0 + msg = "已建立全部抽選清單!" + + await interaction.response.send_message(msg, ephemeral=True) + + + @app_commands.guilds(discord.Object(id=605678541530726421)) + @app_commands.command(name="抽選清單", description="檢視所有抽選清單及目前抽選狀態") + async def show_list(self, interaction: discord.Interaction): + pokeCount = self.getPokeCount + 1 + aniCount = self.getAniCount + 1 + await interaction.response.send_message( + f'寶可夢清單:共{len(self.pokeData)}個,正準備抽選第 {pokeCount} 個\n' + f'動畫角色清單:共{len(self.aniData)}個,正準備抽選第 {aniCount} 個' + ) + + @app_commands.guilds(discord.Object(id=605678541530726421)) + @app_commands.command(name="抽寶可夢", description="顯示題目,並於指定秒數後公布答案圖片") + @app_commands.describe(t="倒數秒數(需大於5)") + async def get_poke(self, interaction: discord.Interaction, t: int): + if t < 5: + await interaction.response.send_message("秒數需大於5秒", ephemeral=True) + return + + if self.getPokeCount >= len(self.pokeData): + await interaction.response.send_message("清單已抽取完畢,請重新建立抽選清單", ephemeral=True) + return + + if interaction.user.voice and interaction.user.voice.channel: + if interaction.guild.voice_client is None: + vc = await interaction.user.voice.channel.connect() + else: + vc = interaction.guild.voice_client + + idx = self.pokeList[self.getPokeCount] + poke = self.pokeData[idx] + self.getPokeCount += 1 + + await interaction.response.send_message( + f'第 {self.getPokeCount} 抽\n{poke["name"]} \n倒數 {t} 秒,開始!' + ) + + await asyncio.sleep(t - 5) + if not vc.is_playing(): + vc.play(FFmpegPCMAudio('countdown.wav')) + + await asyncio.sleep(5) + await interaction.followup.send("時間到!") + + embed = discord.Embed(title="抽選寶可夢", timestamp=datetime.datetime.now(), color=0x34f4b4) + embed.add_field(name="編號:", value=poke["number"], inline=True) + embed.add_field(name="名稱:", value=poke["name"], inline=True) + embed.set_image(url=poke["url"]) + await interaction.followup.send(embed=embed) + await vc.disconnect() + else: + await interaction.response.send_message("請先加入語音頻道", ephemeral=True) + + @app_commands.guilds(discord.Object(id=605678541530726421)) + @app_commands.command(name="抽動畫角色", description="顯示題目,並於指定秒數後公布答案圖片") + @app_commands.describe(t="倒數秒數(需大於5)") + async def get_ani(self, interaction: discord.Interaction, t: int): + if t < 5: + await interaction.response.send_message("秒數需大於5秒", ephemeral=True) + return + + if self.getAniCount >= len(self.aniData): + await interaction.response.send_message("清單已抽取完畢,請重新建立抽選清單", ephemeral=True) + return + + if interaction.user.voice and interaction.user.voice.channel: + if interaction.guild.voice_client is None: + vc = await interaction.user.voice.channel.connect() + else: + vc = interaction.guild.voice_client + + idx = self.aniList[self.getAniCount] + ani = self.aniData[idx] + self.getAniCount += 1 + + await interaction.response.send_message( + f'第 {self.getAniCount} 抽\n{ani["animate"]} 的 {ani["character"]}\n倒數 {t} 秒,開始!' + ) + + await asyncio.sleep(t - 5) + if not vc.is_playing(): + vc.play(FFmpegPCMAudio('countdown.wav')) + + await asyncio.sleep(5) + await interaction.followup.send("時間到!") + + embed = discord.Embed(title=f'第 {self.getAniCount} 抽角色', timestamp=datetime.datetime.now(), color=0x34f4b4) + embed.add_field(name="動畫:", value=ani["animate"], inline=True) + embed.add_field(name="角色:", value=ani["character"], inline=True) + embed.set_image(url=ani["url"]) + await interaction.followup.send(embed=embed) + await vc.disconnect() + else: + await interaction.response.send_message("請先加入語音頻道", ephemeral=True) + + @app_commands.guilds(discord.Object(id=605678541530726421)) + @app_commands.command(name="停止", description="停止顯示總複習清單") + async def stop_check_all_ani(self, interaction: discord.Interaction): + self.stop = True + await interaction.response.send_message("已接收停止指令", ephemeral=True) + +# Discord.py 2.0+ 的 setup 寫法 +async def setup(bot): + await bot.add_cog(Lottery(bot)) \ No newline at end of file diff --git a/countdown.wav b/countdown.wav new file mode 100644 index 0000000000000000000000000000000000000000..ee75ddaca70d2e0263372fdc68eda2fe27f9ad89 GIT binary patch literal 882044 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⁢JDA3<943*5{}yvvoW!4L>6=0bm6$W;5d8cIGflg z;kY%-aUS5fY0Pnbz;VZ`4Jp@BaoklqH;0ShxC_j2O~G;D;J6=j&cQ1c$1T!T1;@4a z?Dmo41_;NE2ghB|IBq;Ru18kvndX^)f#b4-+Duyt=;%$0fD$vp)(s?zY1~$Z@~;{>Q@|avXQu7MA0-1}8#}tHpBMa>#MFS&kd7 z$#L`Q$A}yk%W@n#?uKyO#v=_B$6=21fEUbC(R|Gk(UBQEUTE|6* z9EXnEFd&cRxQdYD?gTzzIc|=AoX(czxEqk;#syD@92YEdoF(MAfso^NH5#wvINe7% z?gGnk=(wSf<+u@=9EXmp zsQ)e?BiM%JxayGOxZ`AwL&x=~6ek?FT5(+44J{i205;^^Y@VB z%pu3+Gsisx$BozIICR{H^P3^Z`S0!kj;jwj?t7Nwk_>j>xL?6>ry$3jVL6UFu5|Y| zkmE`&)PNi(9XEsJxbn5vvK%KJhdIt$$#M3OCthc^#@sw3ks2ro8Nz|Nsj9P zIW84)TocG~(s2(ya$I)mc9!GNabpz6jfWgJj^#LXoFnA8dHb)Qw>Z)JCOQstoW00# z-jL(6YAemp<90Q35;;zF+yii2pvZAo4-6MMZWeRg z3zp-;A;)cvsKjy{cO2%p49Ia+kKJO9I|MoI;N!G%U0=Gh9Oq-@Dso&GO^)jTIc@}V z+}&XAxbO781l5Ner#jBUA(7>{#Fq6%j=KUmjyn!>oTrlG{(u~Jh~>C?N{&Ovl^SLm z=Yiu+ew5?TaeIX0WR9z5iH@_*4~bc zBOmuO__zjEU*Y4HNXC(mn+ZM+8TX^~aqBc6*UQGo`3WC)*6W%7nqGAz8K5m%jJGZWFh;aeJ$DNmqTXJO@__(d$-GIK{ZFBC9Ok4jG3&4zo&IAGh-= zGVUs5mFVMsfvj@Hj+DgbBC9+j8An-VXRD{kDjgGaA4iO%tn#i+R=J`6M#w4`%B&I@ z_e%IUl~qoGtP&ZAKF$#sH?E&IFm9OeamYB#D%WdS<(P7cagVP3`C#dp5|CBeGEUDb z6Rj64lOe0DV8|-T$Blxlvdx9MBCE`L@;>9PwipUoB{D9*^KsvLBCDJ%v&s?D$9Y0l z`Gv?Tw?bA~w%-pDjx{O{VaUkg6FP~RmOvlQ(5Jrw0@e8qpVW-xX0k* zYJra{16k#2$SU`Pj|&0DsjTvAkyRc5A7{)e&5%`IkXhx0Lb6Kb;}qj4t3<|)f~+!L zFpjcHWE}dqfg-DH28>%Sd|V4Ht6UT_Ic~G`aUToD8MDeac8m+Y^+;xwI^!yUkDCBl z-=9A9oe9%1)3~dS=xDABT)1A4iP4StrDfap>bPtE?}w${=$QkyS2>x&b~; z&nnT!MRy#i`8ZdWA*-A#eB3a|Dv@!sz{gQmsWT3< z%9kRmbdXu4dldP&5s+10jv6DfN@83^kFz4HoFlVJZ>KfyWtBSPFsmdVH!1dnO;%~o zIP!6dahO%^Gx)fWLKx@Wr-XARgM#kBOjL`vdT4y(|3@MTP3ne^l{6s-jhDA3}ltaxJGUvGON5LvdZ5BMnhJ) zRb-X%kX6o?StT+Kv&!gz^@gl+v`1zm@^RZBt8D6^eB8oZV%&cWS>+3nRicj@F0)Es z>m_B{LQY#-WcJdu3f-n9M2*V;p6bbwVpjAJ+{Sci41XFphkj zoAhycUPDAy`3|y5WZYlQ0j}udR93k}WR*JOl#e6EWs9s5ecasGq1G+&HMOjA$v$^2 zt3<}3k9%71IWW$_z_?WKad?kIA9q6D9T!LVn@^O?^qL0IS+)Qzgb2ZO4+~YhoANT$}4jD&TWtLzZ-s8@mz98>$x{t$q zobKZ?3|VD5+~Y+#$hftFadeL>@SAFPk3+_NCGT-H;U2d| z-s32%RE$&ixP^v$obqw~c3y#dTzXuVxW}!sJg{zuta7c$Dv@zc@zcdU4jHFsmG(X^ z0K^yAxW^r9rZbLw+<3?;iE%Z=J+7L($B~c2dmLqzc#j(n zStZ`%ilrGDhdxf-z$4#!Q zXO+mfb8wHttg_?z5#k<~4?a%6$K`51ZiT$ZB}gBq?r|lLlonYf-s1}39!EY-XI$52 zbs(!WGA>2jgvKM5PXPn;}?s0*TRX&4zTwP#X zVfQ%7D&0fVdpQNv(Pyy(;9u;0l3HAg3ie);p6;7R(VHsPV{@6?&Bz{#Lfx%IJ(ER zb9T`fmwJCX_&B`B>5Rk9iMq$xc21CS72zId**h?O5_C@Vtn!{sR;fBCI^)R4-Iez^ z-N#{8`Kgvwp0w+nOoGly9&}EWkHgN%QqegfAE$Rt=pI)X<9x+E&bD*%2<~wsp>twn z+*RnDn52(WStT*9A#_eU$<9e}=$v3yi9QY)r)QNHpmUM}K2E>KVOFU+CyH^wz_>x8 zbAtD{)sk_TRVp9%Eimq^=$wSWJ+6wObCR5WKN4`bQM{pt&h8`bxzR74Y-azPG?+A(K*3;9A%YskHgMM5ku#MvP$fn>^(o;&^bXL zM~uUJ+&CK_hxa(lDt*Am{Y(0|k0bg+=LGL@p~Av*8|BPTb=ZcnofEppedzZX?s3F8<2~+GDV0@H=LCJ6VjO0bsUoXPN^T-MCzMs9kLx4uahO$N z=VbVy<)U*^`fq(4c1|#>#Lmew(K)f&bWYlf&WXG1oK%*blZsmB#6fgUFsuBnpsnbf z;61J>bWZRdXWuz7G7dW@mB9yd*NPTF{9X^bNuhxa%m z<6ObV

{#ofCDB+tjdHE4s&JYWFzGDs35u_c-dD_(JDIWtGS{%qr;~r+nP6T2^Uf z9QnA0Zb5dP6WzyQ=Y)J5GA;~!oX)s+p7Ukr1Q}=FIa#Q6PP#(p1hdLb|D|(M*gft? zVBCko$EnTdL?8Ee_qcI3y-MAlLY;U1^=D%CwMTXs$`t8Ag&;}V6B z+W|f;slaoDSzWaw4qL+6CD$|(^a z!99*TCmy0#Syc8a-)9{5D(N0aof9|cRqBkxUgaFES4o|da&V8Mta6QHoZhR{eca-k zH$|_qrRY_vtg;I*&P(%gdglZgN4-kbInjMwBJ?WNJq{U1_c&v(vai;w#H`ZTtE78e zs&h`@^RFwRE!(<RRVp8+GtLbdmkqs2#kgX?IP6vWZ8@a% zD(N1FS!Is6$Dxl?S>%Nsq+TUumDsDq&WSzaHbJiv zvr6oo*!C(_=fr)pi`J_|ABT+lKrk*sWR=IDSE+YSGTnTEap>c)S6Mf-JTUIH=v6Al zQLl0{^eT~Ys!=vgIoPKJo>fV1dTek8X8*sE0cIAgC8 zvr5&g#LfwB2e5NO+W}%6^(x87>Agza4xo?2?Ev{WBjbL9?SPSSxE(+r*FpF=%qnR+ zK=(Mc9l)#-eH?8E5)7S_#*Y%^JuYq6JYZaq%qp>0NsPm+Qu(+Q$))8z4z~lkkHf4I z8He{c>{aU90hLwacAyVrmE_|J+YVso#FlZGRnm6A*f}{2J`T47=;Oj=R@q8!2UJ#x zofBl7@^QJl-u!K^QoqMhuhO=2qV93&;Nu2E=cK1uF%El`Dyvl60o$w+w*%IuydjqhueXh zkX25OnrIFZ+kvC79Z;PU+71}A%4nHYW{d5B&N$i*=su3N1B!8~S4oUhJ`Ou4CB=5& z-NQVsS2+u|1K6uX#;INAr;5{xx%POa6jB|{^tWxh)ZnxVGkdMR8$$XJj>WtHSm1;Yne4N@2c#k{d{H9@b;p2RvSE(~j-wx=# z%I{>avW@U@`H)p2;|kjjD8|utz_xRO+W}**a=zFOsC%3(<8V8GjLVbTfk)EEQC6w$ zakP)atWq&f-^bZzmDo9HpzY&S=VXlo_A0S+G99)9Ef4JxofExRc{<@VbWYI6;dX%b zapdDDtHgbrZLd=8`#9CB zq&9qI04%PVM7t8E4z8wBHUO<5cGaecT+_4v>$-eVjRCyW9@oKF+uu zaEI-{A+e8BK2E>KseK$~m3L+5gczs$IDH?7Stae`ROf{Dae;C>;J;tp<7gjuLUc}4 zR*AjJBU)BDO?FQ7eH><$vmZvweH?BF8WoaNqL0IST%61*72~j1sqf?TtWq%!_i=cS zL&oX%IAk38IAR=a2XG%pj9UWxxTzb^$EocAc23kij`nf!f^q2M-b%({R;l0PXgh%W zIOXGPvr65^A>+E&z^oE`l~1+KiQ32EJr1+Vp{a+`o7nB+l#kmC`?&ArK5mJ&kE45> z+Q(t%MBm4ekHZZ(ZU=sn+W}(SO0kcl4R}S^$EAhZZU;g|uaY_^xB(}|8M8|Jd)yhZ z0jI2z_HnymALl6Vap>dpd)(h|z%i?&4LI)Ouvb|@c1~ymPTK+8fUB(1$T-}9(>)Fu zha2#0*{ihQfa5)mwgZ?|Qm+yjH`8VVj#;I?0e=D;aGh~@kHcOi`nVG^tDI`cDm$5J zJAn5%wE;b(>WE}3}6yq?f#0~gL*nl^L4R}$}tE8+F zH{gfC$KgJX?s2#Qr(UIzacVn28}L-I0UxnLD)kMx@^QEU_lE6&{XLF0;CPQ)YPSK$eVp=f*f~MQ=~<<*S83KZ z;B=2WBsSpa<8T8`jH7#8?WXQp=fuc3)vHvD!|i~J+{Y!uc3`4m1Fka;eH?BF$j2>{ z8*p`xqpT7;C%6H(-^Wdr8}Kx-9nkM_DywWD_iH{f`W%ZFa2o>kVDj8nbJ6Ji5SSta>6WL)D!-_6)LSuQ&#igCCB|6XR5@AoQc z1CEU2j}>4ASOHdm6<`He0akz&Uk-{YP6% ztr3kUR@hV{x7gTn<`;L1JbD!LEbH2n2TRU4UTt>x%;}3e7acsaWo$;@q?pvuxB-dI zF|ixwTN11nEmJIyW6E1IHjaqxk}@OScU#|0JN7KxKKfXfeXTFlIkEdzvCPL$lJ9)} zS9VURQd0}2RH^Lrb-jsIueBJ~z}#tVtF&%;olp4I?=d>~jo*}rk3-HzHR?ay+|kt8 z{EgWws+jr9@bt(kL1|&N`a1VZ^SRKwatH4&pEUbdyNk6KG}%<~e$DnJ63hSmvT3nK zj~6_zdZY29gtP9~njU%Z$Ch1l4=qj$-g!A`;Fj%ij}n7o%E$d`xo=Ikd~f+J=CLJU zW3AW~$xiX#Y+aLbZuh=zpB)X|Tk*Wh@x?c9T}b$I+U*vvld=ywdc5gc`E;r9x;`%Z zntRtbb)47oeAgG9D){#9ele)GU)hLb!9PT$N0`j7qr%J+%-=*cGUtRlMI{Hd55Lhj zq2J1`zxJutv5C(Y%}2K{S$AX8oJuunPjvjV!lhTA6(9KLsTX~24$3-m?!)WNk2;)P zzI*oJ@U1O(O-Qbh)^g)lNsD8m<5De+V%A!Iw0s_R7}z2A2#kzb4bbARj~En zM~3cscGmgWKX2?gKkjkJt%oniKl!f2v)9EcEiBonPO&PMX65Qdb{O9x*XL!&etm~@ z>k>56cUgGn;C@lz5kBVhsA1+I=6z8;%mX7LqXL3s!hiJ*4Vu<%XkXV(<+?6yF`+|; zdPkczs}fLWOUdSyYX22iV)>IwuO{4D_W1t!nK#-Tb3OO%o>@m+wmI*voN_U3^+uQE z%$U1zr!7Nc7FpI?YR9BlM#RmE8J<*UW6`w1$rW~aZvFS+X}hnSDSfo#_4VgGvg+Qn zyzu<9XYrI*2Pyvdu`PS<3iOG#)O&fD88)Ck(?6lmluCx@3 z>m8Gs7$4`q<#1BFos-i>99pq!{~x7}I9;1}*5Og!^?yBoljTrs^vl`h%a+((b6&+y znk}a%Gpga@89ZvBK*RD zeT$F9Y`?VUADceewj@3@B|7%_#wyn5F_SGa@dlhgO_EwQ=TcGrabl;g2} z@jljGvEwZTmI>CcEL}GoweC!~y5aif-x8fQX= z4<|c3dFJFiqv(L@70Wkr3$EG9y`Zs=*Uh$ddhPRG7ci!`C3IV$W8{>ujiw(X7npNR zznNy3bNYvxz7LJ;KRIAs$fKTSe+RDxJs!3h<#DM|tJYsvo4JtXK85lvre?!j{T3- zGhxbxwwtRY#-)d(&e-pmvEXEtgFjsgJU!svm@Dh^!XI>cxAE!GGChklaQ(x%pka*~ zwcA{B^Y=XO9?(-`6jRuWgJNvtiD3V|1+|z;YCO12b9 zb^C{=9!PJT*mv`c4gLu$tWRPmS%R#!t>Y~7Vux5$<7;i0v1wky)$J=c|7Ty@9p9X& zb6|9)$0@hFftUZ4TkHPQf|2=ioE#h;SN%~kF11k@Fm9}1+$q60|Nav~{ef}c1LK|p z<5oo`n`Q&!PD;kz2F4W^j0*U8yJ`LrgfgbfpJe;E^HVDjQbfFHyapNJS55gwjJaC6pZ^f zFwPSgHze?6m(swveu8o9YmIC?slsN#IMa(ez_{RNj|_~vuygUjvx0Hf)Udb@1>+V- z#$^HHc5WOg80WXm7Z|rlW85xaT$W&5PEN^EQwpN1RC1c8G48ikTY+&WfpMdP3k2iN zL^bUHnPA*>$+#T`#+?_88zdQ*0*vbbjQizf6JXrJ=hbdB0mikt)&v-rCKwka7?%!= z>n9lZ02ucjFfPmDzp-ZQO3AqMz_{T@g9YOjX^cw-#&v$v4Hy?D7}uq~x#N7nxblK= zy(Hsy2*!m1){O_oRj)k(73 zpLL`4vFhi(0mfAY##Kqll#IIW-&0XR!p+xv$&ZtBa&(Z<316L`}FYFl5rMb zT)mst7oCA|$*=ZT2y)D;bx<Fz&&vZos$?_AQc(8zdMvQ8F$X7#C}ur!npa!MGh;#tO!j0>+J(jNAJt zy+|9uxcN1LCFAM}#^v-%7L02aHV7E^Trh5qxr%v=X{umcK}c@IAz+*fFs_V&ac2eN zF1g%$JEn9LFs|&q5MZ3EWZW;uqk(abo11U1mhe^3oBp7!`W8C*eKLExx)EIZWZQWk`y?+PBtqQ9n!n;V6C90DJA%d-dgxF19Q8Q>2-ju^L6__$S(o506a6h3Ya__$lb$9-tMmT>~HYS>$-|agox;IfIYu0X}Yht>K!FGri~I&I%ug zjOznF4jET2W&`-RM9s$)#<(`%C27zWWL!{81?l6EagQy2@A zTpjRnigEYfW8B5GHNwXsOYV^ZYVG=+wo#{#A}Q6af)%*z{hP)StfiO zGA_pw2aMZkxhZ|z1z?;X__($^qtlRa2c(Zf#tnP^78o~1W87y=lEKF*#x3)C8Cblp zHOwI>34GjJle_S7-Uc66+5cPcaYn`!0miMb=PiAl&ba%)xCrUvF7NqJ`nXAganFR0 ziv=IIYC{R($iw%1+$+Jj zrUoB3`f`xwf{#PS{V09hI?c!Rvhi_#!pEKU zdgi~TR~^Z?FM)CB<4zXpWMJI7{X-<< zzW+b?xNn7z^E}m9_&8+T$o#oZMI5p;A4iNMABT(^42+uqS>+w@am&HS&67S(F>b5K zDvP&6#-WeHtkTxU?YxSNy9!w)`nX>pt6Z@oCGok)D$hv9QC8X6>M62H#{}KS5#uPU zylazHZm7QzvdV=rt3<}V5*o!O8zy`lG7huK^;%XrrkrBj zqicUYSbC-eWRjleX$SNxsvP$xCqadqnbD^%tDzl!v&$z2ChC)_}jLYwQ z+_#>{DksaVa)k78o{&|3A+pM?kX4rLw?$*zzuR4?Js+~l2ZC`w3m>=OxhrIq@!;cB zR=FsxpXTEzt5iPjG5EMz;N!|bR=FCo%KhNuLV$59tNdDIl?TAb8M8_=WR(|WR(YY2 ztWx0;k#VCStBe+u$5#w&w39(}w`Z&xg z>x-;1$XrBZmCK@TfREF&O7wBj9S3SYju>|d7>8M9Ns(1{{4ZH$1~BgLd|YYBD(4Cx zHw>~$WZW$9agWR;hr#)zzv7+2BbtjH?o$gI-aY0Z0C zrOr6aD#^!9ialYIRoXL-e4Jt&W|jL4J}#sX#(DQ?re&4LI2YmLkZ}bed4>46YQVVD zkX0h%Fsr<1msKL;$j4z;c}!-N;{@Z#$7P7Da!um&9pvLyiL4TR+_J0pq>n2DStT;A zkz0t&DsPFb^7nwzkX3FKS!FzAmGfm*iHyUnGCE+rA*&qik=clR+&0K6n>r{Tw=kC& z_a8%6`9frs=;MaVtkTyy39`zc1moNxtK66#3|VE#j75TR=;Ov-S(g_kv&zC4M_FZ^ z(2CN>bpys7HXRp?BOm7`eO#W`5Rp~BgRBx6_m^{kEBZKnI8V*Ty?>8G#!*(8 zB^ZbIxU;7($a|dbxKYQvwR;?8mDxF^A*)0mM_DB@ZmnP(-Qx=U zrrO=(ka1thdt6Pp$8C}KILay& zdt5`f$64h)jz$K{B7oVUEkJ%g-L z`8dofm5+0Qd)yi=tK1~-aZ?22$j6lvKF;+{KXH#E#+9(iDtm!1dILU=?r|9jS2o-* z+~ZbD#w`TK-OZl^_qadd9yhblta2?d4t<_c)Wh$Bl-2T+7yF z4O!(9$SQlmJr1)x;vuW-1zF`8 z=eLG?Tp(nX&)^*B}(u#}=F617!O5Wq@9vG9UXO-$6hd%BsbWX~&Mjv+o?s2!Eb8<@fI6sk9-VvP> z{T`?LILa!qb3#6j?s4s$T{Om}-k%OW4)1X~75h0#}&pn zUvZDK?VLPEl#ZNsMa*-joTPw{ z)9-PZRjSU3Vq7pVZjk7l;5}}&WE^Id%Ex^Rj5{kjCn0c;t77P!BxfJcIwxJBb3*qx zTOW5EIw#0D$|}*vVdq5oILs0WtG%9K_90WhgoH+$SRYP zo5;=yWtHgT`iOfRW|i1E8GdNF=$w@PTOWs=6U-{HbFxfyPOLVallG!>;x0QUm1XCo zqSiTa5S^55k828@6THXScTS9q!_Eo$xZZI;q;^O$XQ+EzX+!74$T+;m zO%t7yHr`npyHLTW(?s1vgJ&v+UTgKr%jyfm4&^b|A zB{B}PO1j4>ANQ-4RT>#bKCYo#kX`3Q_i@-cAs>f~3j-ggGwz+|eAzic#@TmH7HXZ7 zuFyHbta8(T>6{dHkNXiA_o47{s&j&j!_G-f(K*4a(qCg-g}@luIhhAO4m&3SvU7s> zxOC{8*fOr6=$w#```D&)(jKzP1{v$^vdZk(Xy}~Ov5tk#$zVh0L@^FKCti?M1_&RA zS>+rj>{U|dq_kk1>Qxfs=pKhzCG{%N$Nk+sZk$c8l6>4QkyWaDobqvcukvfS$LYOF zb&t!IofFI|TWI&VMB(FhfRBqPLs=#EDz_N!aY@jteE%NjD0`La9;bX9-s6yQ*sCNT z7o>Ggnu=cKV(3+lgI=Xo^eW5Bd)x)+Rc48-@^jfa!CvJe@Nt+`;ytc7bWT)OITd^y z_9`bCdX@RmIiaj_O2kKSkE70shv-!nmA%UM8Hc?}y2nxH#0`3tI^(ccIY;YNQs<-` z+~X*#Tq7B$_bPQCxA^8w(W`7JdX*}x>;jDQ(tMoWIYGuzuTphRbRU-py-IbDL&niP z&e*H$tMw`|t2Fj1=^mG=-Q%!xg7>(^qF1SW9Q7&{WCCAlJW5AYsm%qsC7H?5Wz z^eX8dmuTo!J`c+T#?6J!$ynK|)EQ^*<4)KA!rcwL$7k`fg7?{`OzP`k9+crvPxs;1n+VCpmTyg4m&60WX*fMO7wBaILs=k zS4mkV_A0S+V$Zlu(5u9(5<4fhy-L+Nao_Bs^(xWFA>%#}jEfLiYbBJH(y{J z`Z(-W)(tHWjC(D5m5OoHtK1B|N@N`QxR>DL)IIJmL$5Mg^eWNE+4m}aWv?o(Dc0li(G=a_u`M7}6>5_5r)l{z%w*#0}(sn>G4z~k(R!NQuQjabAsCe?3~bcfEY);O7d}fuM)Qd=;LrZKt9gMxZhwq zU}PL_2hhiL5IzpGO4<(4Jx*;0Fsno#N85n}L+7ONqeOX+OWQRM7#Ae7O6*k<<1njK zK5j*FX?c&s?SSs%Fsnqy;XMv}mHKu-WtF%c=mS|L`MAQi1K2sSWgKRev>h;ZP7Z^Q z!|ee2xNw1kGs!(OGz zD%EztHmk(#0Q$Juf^oPVpk5_z2k0J$S>+FMJD_|VW|ipUuyaD&0SnyYXgkmYwgdac zcHp339QioxoG8ZOcHkytm6M|;nuEl4;3#YdROf`Y1IDZ}T4t5mVmqKSjh>WtI31A4FWJK3vjBYa#wWR=Lc!nOm7akL$u4cO6;6WhwVViLwiK$ zMDJCePB;yn6ZCPo9iV+2`8didaUW;ft5o|qqmQ%CD$&PPf_)tID(4#RakP)atWtGO za34omnq6QylyvI>iiTgO* z4vZGt0rYXkeH><$xR2W!hW9vPoR_wb)3*b-k5k(L+{Zn%*~d|@68CZBrP{~ki|xQC(5oEkGRd%yqs|H4<2uNDT&|W?qL0IU9Qrui$5B>E_c*nW zLm#KM1H0Y@$5F4+c#orfoa&t5J?@I=oal^G`#4+1+4d^!w*$yH)j2^QHwU%@ zj7)RRy+{Y2)mcTx4>IU?2YCC|P6LpWHeO$a? z9QwGol5v<->i0O>4&Xjc`8eCGQulGlxb8JDtHfUAQ>}BN_HlTR!>n>>>Y?-|cKbNx z<2J)S?t8h9TcYjb=pLu`ao9Q0_i^Ooa08CpfuH1dfEc$@?Bi$yUJ>?jX`!~;fl$$_ zq|OO$z=?6jtkV7-cSdZ$DXXM?+-}&%Im&w+`Z)a__xBrc%qnREj{7+5RaTIl6WV~& zb^tfvDyuXy4maR*k3+`c20UB#D(yGmc#os)0A`ict3<}lwAp}TR;h2mpTGuOXB^(+ zuvdvb?u5)Lry8=#PG;H;;5|-lz*Xl&Z3n1VsrGS{RmRH=c$&y6X&<*k+YVsogf`%K zk1IT@RNDdC$91jz2lzO=$6;2fdX?BYv1c6Z<8s2w!Uh~WCka~T1bdaZ9l*{BW|er4 z8>DT(bsuNTIO9DIeH`86)OG+j;Mh6&#AZA2Ty#!w1CE`O2(bY-W|g{+Gj0d4S4o`{ zeLFz+INE^g+ksymKY*;Vjom)ZHmk%9c#^os(RN_4jgM2?0n93UK(7)Rhx<6iILs<> z1HKYA;0<8|UR3ldDXYW{_+jvIxR0ZI9B#m=S7~IN+78eLJXLJKN9>&^HsE^a1h)f< zajI9DV7CERJ`T47w2zxr-pQ~5r+XY`mA1V~eFLt19B#n9VLM=dkE0DZ-s6_qZNPCK zr+gfCPLOeWR%z^2nzao$-Qy044LJHZ+<+6~=pI+Qsk_!WF)~i|Diz~!JK!Ssamlb9 zm}uC5>x@GmhuZ=2am(ZeT;1a+tHjO;ZouvLaZ}|6JWXr|^n0AjDjUdsTo>?hDyyVk zrG4kbc#pH)fYUv$qUcpF5gTw~9QrsP&BqzH1FCaE8*seGA>-mjuM)QddgnynfUA2P z`8e7RoRggswU5IM_+hafP>jP3INsy(p;xJAmGvd#RIl=c*nm@3Nj?r4*ErF4Gj>jv z%g%{n9B#nBms#cey-M1EBjfmE1y})AfE8c`SOHdm6<`He0akz&UFwF8Si66C)o&8wKE9@(n`ilH)#Hn{cdq*UH;1H$ z&QEt;-Ex20AJ;CoJhbc7>x^XwYHnG+V^iX@%?~%6O8CPXxM7;*OY2L^c#Bu8ht(r~ zZ|wDyk_qLv=Wep@{Wv}Pc#HiZ7n`5Vzuov!)0}&E6W_GT3n;zgZHh}onYjA#)tTtBa{{(Xi9 zp6KG#yKMU)@19Nn(biIHMB|ASHr2>2HnyDk#oZ#09tAziy7uJ3k~5B1n;kxL`r^(- z2hVI7o6$EZCN(r}K%#R@?1uT41nWi16wBk7^45%vBVxOx%!v2h)_2p6Jqx#wKGtPl z>kD;G?7mej^YN49JD>lRol~mR)PgBhDm#5$Z(`MJErvBPcUs#jty^B_6TbC(j1GR| zHznfZkh4*Z`VTjEG<7zAWA=(FX8tlfJ+ewrT3D^V&i&GSF7&S4!Mn>R&HmNyV(kS@ zHdVY|vwexg@;|?9TCCCI1<$MAX#6PQtoya5M;`pKW!Kz8i_?O4UQQagWqaJC#Gsh+ zalcybThlGyTYigqYzf#{D|SV)Q~Wnu*QA`=y>HuRM??2kJnwRR@y%No68@ZayT$9I z?1PRTZ@N}KT`Ih;kITO1-t|o#=e0cF^+l%&zP-C&4C?JyHsVD6b&2mX2L zMW364vW}el@Oty34riC|o_#ocYs*~|l53>3-1t?};+W{TR7<0nwU!?(AIBWCT!=dr zQ#AR9jl0tvQgU_`Z2k9;mh$)zAN$Ub+JkdOE#)gtcs;s zxq6Wu#<$4zdD*dF-yz+)1kLna7T!6yUsQO6k2yVRn0bhKUsMnCz=+7GfZ&+$UwuP^ zrgaD{U03uw z*tb#ms-PlKx5De0qoXF7gUv-vADE9sERVVtTqEK`zpS7^-JAGU>-@B9Ld)ompVYtK ze27bQ-B+cCRUY`}iDPDV|JUnppa0YG;+C78j(0dea_`)uSGVQuPEA?9wR(JFa^qOj z#vIFrm~SjQEjO$yEydz`$7CkP$N6tLoYZdT)Nb#m;ClSdN22R6!#A&tJ9F^C{%dZ}_B`5Ar1gt{a)*m8s1Z`ZukrL+ z-finNZSDQIU3RaeE}?;4`ZNz4*ze=W7hxAowBq*L>Ua{({_5m;2rQ@YGM4J_mk35x65|U&`j^+gBtk-_&Hof%wm? zOJm1b8e09V6D_x6|6}z`n6jbm<|>JC=^?2z_B&=QI9cW3PnQBu54bnx%KE(U2c6z+ ze0sD@&ms+6|8Op7SffVmHkaJ|JG7@g^H%I$98<$vYYy8pCbWd0l{2ZzU1f0T?%Z4?HK8!H%h zN-)m9|AbI~VBGh>xaYvQRguZ2*}%Ayl5w|zam5AWf`M_qZXV^owqsl>Fz)*0R)=<< z`YYq-1JyOgos^9G!ukpr=Na1>7`I0-uEO>ljd8&S#wERJo#$_0+|!l|8%6=+eg?+P z2F4W+N%FsK$GATQoYhVBASy+^FCJ!MHO~4f}s47&l!qZij(!=LO>iNyeoB<2nH2etFph7`O0wwHr-< zac!A<*Ljd6+nRtd&6_W7#$sP>L^=?jUwa^h<^a%1`5XI0plih93&a{8W=aohH(WTjGJSwVjg3fDi~J~ zk{fXd80P|vD`Q~XS;4qVF8AJ!DIEojD|;^l80RV(_sj8UV4UOT=G&_!Je7>=4UBtZ znFNgMCKz``GOn0l-0D;1fN>uQ#@*2v_kGb1fN>2q#@%jPx7U8}-+^)KL$?N&1jfai zegekj7#J7TKia^!M}l!JfpLFH#w7#eY6-@T2FCqEFmCOMev)x36P9giy5XQ;+<3{j zJHR*(!8n)1jgoN-1>*vMapMHzIs@a5l<8fhp~kq&ZhoHUfN^I9k zI8VX2VYxN$=NF6+jLWL}lVsfHMxh>uz{lP4>;XRR$B=&p_=Arl#;p`SZdK$a@NpG| zkDCKN?w0Uz9~ykz*VPlGk4qFj4jFe%GH%&{8XDu!#|40oL&i;zKF*eLla9CCkBrL$ zAJ;7B{#_&EHb@_bj9c10OZd3r;NxybJQhA~iup5>tMGBxz{hhYnqQJ)?fqzP6h3aV#SIwu6EN;L z__&k8#}VTSwtfme?)lkr;NukICI}x_w9+Es;}ql2#|3FV&I5d0SVUJdGH!@@ukdmG zqZH$&bsJ{m<63}^O9LNQ2Yj4j-2L|$cQI{^@Nvkvp&H|cgOB@6_&8*o7x=iZcV9i@ zbhOiTWE}c959#BAz{ee|G^gne@Nvkv|Lx;$fRED|m)|uJeB7Y=52TM93XIEkyqF#F z+9G|NV%#En=b!=Aqd#*NV! z_gRx<@NtT9%Y0r27Vm2fa|lWTANSVeE_|G~!N*nh{}z0lk#R+UaqH`OOCP5*?mjRs zLi)JNdp?vtZjxZ!GvVW6!N;xIP(t`PVjTLo9pK|iAHE?Nw-0>W-bdSuxWDihJ}$U| zuk>+k3_h*}__%?Bad#q#abK8!>|Y&xoX$8W&rQO|ZE9Fu`nXHr8MjR`PWiYp&d9h52FBfzj2jJ%+h$-~u4yg!xNPuo zGr-412mBuL@I4>*N-(ae!N-lh9HjX;V%&@E$T;$GKZB2JVD%L~Zi!?Z`M86h9U>y3mlZE=Yq2S|&dA@V&+J+bxAbi|;$+#s~ zrh$*!3O+6w7`JZ!5Xrdj{|`RyTjAq8Pc;@k4jDHxf38yzhb+y<5#z|mA>#%E<0e2> zc?W#la`18Uq>odK+bXik;_Z-e=;JV}wDoa2uOj2FLRN`B?ia`^SL{ehd@i!eGm>$X zRd%*|imcKxLHBXQILa#T+GLd*>TiUsa-qyBk#Vntk5gIY6v!%(ap>b5fpO#dc?08y z2_J`y!>n?>mQ{`^rx^F>+Mf@Wo+$xYr7h$1tTNGh!7>@L$_j?8l6>4K$ST`hs4KF{ ztS9d??rMvnkX0h%@;e{*ttYa|$ug@PA$^=DWR+itta2-4m1X;F(HQsdb{A^Thph5} zVBF8b$1Qm73Rz`5_&AkSE=udC`8didm5+N2KCTw{xH6Dcu7<2~Klr#1V4TV-zZO~L z0q}9gtkMiw==hW4ztSoBC8BC7ZF+IvZx#2ja`BC90E zRrEM3vdTF!tMqnS^Ile|GY+##@^O=5PuOIY_KYJRrx=G>L+eR#`G*kzgG9 zxUpB(<%P+tvM|O`R#_*sqV#dyfN_US#|7ia$GJ%#m*+J^WR>qAt3<~A_yvON2F2j&jro%mM)G=@E9!FVac1~%? zD$&PLR*8&TD;P)jxB|bacK0}B+*k4*R}=1WTjV{CvP#7`b&p$UxW_3U*Kg+)xW}c( zWr=&-D$4`wcE~E%imVbD=M+C(+~bgOdRA%g<02rdL?4G)B{8m7cVwKixX0}PANQBI z$4!rNgL@qMxOU*<$=;QQzoRM*QR{1VDSKi~E zi+kMO^J5jkR_Wsc4EH$2ICYO}3_ea}m3WU+ zJ`V43IpQAYE$?y9Agfe94zo(-<6Ph#w?@ko`4L1z;xYd$z3xRQW^XI@l?oYVK%`7ylTnmgtALkf3*>I1WDeiGI zLZjq8&Lr<~qv0OcvUOQQR=EVS%3g4f!>p3-aci}EobKc39!HF$tdbaq_qdYa<6Ph# zrx+Lhp!2(U$SQk5R(Zzxt>GRQ2wCMbxX0B6#uavtqpZ?BG`*KoK%N)+IJ(EFtkU)# zH|^d?@Nwr-P5fdz{WV?3}23oNea> z8CMbRahAOU(;K)&dDU`oa900MEN-E zoGcZc6Y_C-=Y;NYg)z=o+~aIJCy(GBHxfE0M#f!*&WTC-IF(fr;~GNeq?7EN6o<|U zW|ipUka2oec>y{nDd6MudmLt!s&k?k7YvLWBswQ}k6SGnhgqfaao+;t&Wg@S2;AeU z7&<4(*$1@FNmuBc&^^x9#~p{x2{MkdO7wBqIZ-|ivr1QyRoeQv%Ub6IecXWS=;L(8 z)fAl*yvI>iN%uJHoD?y1PAIFy&dJ{M;|-k?^l`*EyvL2R@o{*M!>rN=eB8gJkNY^H zKXgv;9v3QnoNK4@U6FAe>m6&>T;AibbFxBoP88$t9yc5AaplB4PBD(|aTe&DBm?7= zkNYIKJakU*9)~{8wsVrKbxts=B*v+G+=0Hz$LXDu0nj<2d)$Y9kKrCij5FTjUX@Z= zC3Q~F$0^2PR+%cY%B18bvU5UNCHlBN;vR=tC3a4RA6hOtC#C<^$6@CLvr6ooEEAm* zt4-&mz37~{%g#w<**U4Gbxs^a=LECL-wN7_&I#V*nnLFU?{W5>6C>lWb3#6@cia!D z9g@r$>K<3x&^a+O4)1Z(MCYW9cb3LD@^N^NGcwKka*E!LB9Cl8~$06gwz{lx~ zd*?Y{c21CS_MMZ3TIZxIbWSj<-1J{MCxzYPegwvSD14mioFL<{b5c`uPB5$V*BDnJ zFh+Jx=7EpH&PjmmoZvk!9XcnrjB6-5C*XdX?j#S7{Z!%ChnvcL92pSt6_aTy{>dSGfp$ z9A=exk1GzH6O~m?1s{jK%1MS^Wj=IHD65~Dlx0X&WUZWQgu$;H@j%PO7wBaxDN#5 zB1Bes40@G%=Ook37Z`^=4tte#L(2o>UW;C(VjT4g{Dsel2K5n*P9Bv1wSBcvJy2oKw`GedJC?AJeCHgq* zoX~c_0{1xD4)lQSz<#kEI4BrLJ`Ou4igCCdxCvS1#<8&W~+krU`r@(dq8D|!~O7wAWU^{^KxV@5b`gUL*+~XAE zzSDdhZ3i9z<1njK+X1@A;dX!+HvoE-=;PFOU?pq^6yva0iJcS0xVFGJ>{VjtWRYMT zZ3ounA>-m;JAn7NGtO@sRu?|b7kZUCS zC%7Fj_A2L#?SQ(+*)k5d1IV~MxgB^UeH>+#>K;e?ILs;)k&L&e%C|wcE!H%sQ;yYU&{PBD)5ad?j-#_7FE?410sUZuLnVOFX3 zamYCPtg@WQDm%!mQgu#N%I$!$SBd+$DzJ}Jy-K>rVdq3;m375EPBBh(PE@ZF8He|{ zr{Lq}X!kf{ukzQRqGCIMJ}yM=<5X6u_Hp@QJMangDu=pEGVJ51b3*sH4)PwCt7Vnw z<8U8`J`VSBlvUC_PVM8+$EoeWFu5I2K92Tr)T=b!<7gkJIwyFKyCOO#I^)zn&X#eu zy-NG-05VQ>PSD5Af$aeKINZmXGq%g^0Pf?A+W~jj4jdBuIOXH?dz{+GVODupc204q)d*-Q#E<7cUrxKJKk#9A=gJJ&v{mxQ|ml&Ni#meH=2bdkxGgu~+$2>zt^4 z9NyzFs~nnoD7}f@K2G_#&9IOAUhdKpJUumRT@hxa(_RickOA+yS+#@p1#6 zCbCM}$L-Lz1K2sC4LIK83ePIlc7XPAT`T_qJ`V43m{qD?C3a5i8AtoLoba-+0msfs zg4Q{~UL|e^uycZ0CEnu(X&Z3e$JsK@c#lILNB20j9l#AZc1}LA*$zAxofF)EW9KA7 zY`~3KrS9X5+X3uVQs+e94$wW0HsJbp;Fre_AggR+w~w>UDscmzB<^vv9T;rmQyG#ZNQa}!|ed=<7Sn2GHk%<9*0?_ZLd<_fGZz|8*p#f z4%px0XakP-xTSU*aNNf!ABUY2WSpK=8he#yZ39mCxIs!xX686GHeGX8aCiM;!Dydg#-#Ibf<7_wJbdRejdX-DW2Amj&KF&w;amMX{>YUI99Pe?+ zxOma4#O;9IIng)Z>K;cvj zofCfNM9(S<+koR+Ui{7pzjK0bdGR|Z{LYE$RjRC#-#M{;%S&ws_?;7e=R{?d{LTr# zbE5C#_?;7e=fpOvEK{A|IT;Q6IDY4Z-#OuTPVh};e&^)<_bU0F6Sa>^5uFo$=LEL{ z{LTr#bHeYO@H;2`&I!MBg8v=hcTV2_?*PAZqP7Ej#amwd&I!MBg8v=hcTVu%I<^~d ze&>YWIpKFs_?;8{f1L5Z1N_d(cNTuobWp*^#3@1=S02bbzA-ioZmUY ztWy7f+)eQxaQwGUi2O(DwCeHlKj2B?Kj2%$f52NF+6DjCSqA?|UA|*eqW<53X%^dm z>s*I_>y+P~EB`ytVt)wyKaT#9de7z`sp{W4k>Wq#^p+RB$&CMxn<4%mM{jvu75~=3 zx4inx|A4Fi4&Zy0_?8#`cYxnH;df5>ofCfNgx@*gcTV`76Mp9e{~w3{9Z>()!8e(c zgW8ARfd3Ax>Pl}i<3Cazi^p)sGu8Y^d(XB}sRnP`U#N($MssmnMI^gFvnSR_ly~#XU8mVKmn{K{)$1`pR-02SV z__euoz`MI0aJ5%C+ivUB=Ov~@PfCUb#oGCOx%rn^@;#&7zEGsINbp^jZ}6{*g2VJMR-jIT=nDf^@CJI5Ik4we*m zE54&UVES>VDs{kX`*-P0X4Tf2Egf*x)_FrZ;B|r?vNxGkTjzoPMQ&TCx_3%!rf;!# zzO;4LNI$MDKE|iI1Cs}@jsCeGJ14X3?!bG}9jMrkdrsOqs*yT3@U8%-k!t#Je(A@R zN(cO)?tn+cr`T43MB4)|XM zOXau96?<~GT$K*^p{#GDtuw=Iq;}8fnYmYY2kJ-%JVW|%PFu(PR(ZD4Z-=+B+dCOu7R}kq13B+_ug-_qR%?AEz3r7wqnU z>3|>38(*N>Ix)H*w?X=GTQZKOr`p|tvAU7!^y5q;^#R=-C~u^i?!ffs6C0dto2a`3 zJEc2NY>Z$W_JgU|1svC1bxS;4)_S& z0beftxLE1OrQ|fWJK(9(0dKK>t+aJUNmwcTM7sm7?l|@LICf43=ni;<+W}X196KlMoCHf-=gIA} zimFRLE?75G**Rh7gq;(1PS`nN=Y*Y;x{({>**P)aoE*&hTKD5Be{-Tb;Ov~RbHdKa zWc%-N?3|?99dOf+W9NjO6LwD6IWfOgMy;>ycEH&=Vdq43z{~7LYN>p4Qe_i6C+wWC za}p7sZ2vuOh3;4S?(y}Mm~bFwFI{O9@d%}LITZ`Gi{o;i<~bV!zO zPD0urZdl$O7~_GH7Ej(?w71%}Hu(*+uH>q3PCT;7oSc4BI^gV_%(MKy z1M&?=gqNKYc23wiVdsRMlcx$7$p3N2KV#>lv~#omg<!zM7T?^!W-1W#R;p<}qhU9o((C_13vmUiPzH#my7c6&NnA~x7dmPbs z++6pL`%vz<&ialkvG2IY^&O}Fk1P3X#MV)}mSo1r9d|(Aah3lbXYM#lza7}E-wvod z&hOrF9j*Iy?N(;*#F` z)*gu5lUta(?OJ|X*0QZFH}1=2.3.2 +python-dotenv>=1.0.0 \ No newline at end of file