Compare commits

..

161 Commits

Author SHA1 Message Date
fumiama
9cfa44d434 🐛 fix: aireply 表情 2022-01-14 13:34:46 +08:00
fumiama
23393d9157 ✏️ edit import 2022-01-14 13:17:59 +08:00
fumiama
b676e00f0b 🐛 fix fontfile notfound error 2022-01-14 12:10:05 +08:00
fumiama
790200e519 🔥 运势 移除下载锁 2022-01-13 23:03:42 +08:00
fumiama
ccde99e695 📝 运势 恢复为传递 base64 2022-01-13 23:02:20 +08:00
fumiama
a80f8082cc 📝 update zbputils 2022-01-13 20:57:07 +08:00
fumiama
4b194627bb ️ remove cachefile on start 2022-01-13 20:51:07 +08:00
fumiama
d983c66597 💫 🎉 添加插件 DeepDanbooru二次元图标签识别 2022-01-13 20:47:07 +08:00
fumiama
30f6b57941 🐛 fix txt2img 2022-01-13 20:30:26 +08:00
fumiama
107979c459 🔥 drop writer 2022-01-13 19:17:59 +08:00
fumiama
f05f09d741 🍱 🎨 ️ 运势 不解压 不传 base64 2022-01-13 16:43:50 +08:00
fumiama
bc989f2fb0 🐛 fix score cache error 2022-01-12 12:33:02 +08:00
fumiama
9b4494a24f 🐛 fix new user error 2022-01-12 12:25:16 +08:00
fumiama
d3fafa7b9a 🐛 fix: fortune dlmu 2022-01-12 12:11:14 +08:00
fumiama
ce1e85e0a3 🔥 优化 score 并发 2022-01-12 11:57:16 +08:00
fumiama
560df5cade 🐛 fix(#95): aifalse error unckeck 2022-01-12 11:39:03 +08:00
fumiama
9f6e361e6e 💩👌 make lint happy 2022-01-12 11:33:55 +08:00
fumiama
00be4a856f 🎨 🚚 move zbpctrl into zbputils 2022-01-12 11:33:12 +08:00
fumiama
606aec4ec1 🚚 🎉 📝 合并 gif 2022-01-11 16:09:33 +08:00
github-actions[bot]
7f0f211333 🎨 改进代码样式 2022-01-11 07:32:06 +00:00
fumiama
42f761d44d ♻️ 🔥 优化青云客结构 2022-01-11 15:31:00 +08:00
fumiama
577b5b108f Merge branch 'master' of https://github.com/FloatTech/ZeroBot-Plugin 2022-01-11 12:08:59 +08:00
fumiama
4d39b32cf6 🙈 add ignore 2022-01-11 12:08:48 +08:00
github-actions[bot]
8279ed31d1 🎨 改进代码样式 2022-01-11 03:41:25 +00:00
fumiama
0185d0c730 🚚 ⬆️ 📝 🔥 🎨 迁移 ctrl, utils 2022-01-11 11:40:33 +08:00
fumiama
4ac1674cc0 📝 update data 2022-01-11 10:42:02 +08:00
github-actions[bot]
1c222a36ee 🎨 改进代码样式 2022-01-11 02:08:46 +00:00
himawari
16e05e0320 独立骂人插件 (#102)
* fix:vtb数据不用从zbp更新

* feat:独立骂人插件

* fix:修lint

* feat:添加关键词

Co-authored-by: Guohuiyuan <haibaraguo@yeahka.com>
2022-01-11 10:07:51 +08:00
fumiama
8ea64e7aba 添加 -n -p 参数 2022-01-10 12:55:34 +08:00
fumiama
c22140103f 🐛 小修正 2022-01-10 12:17:39 +08:00
github-actions[bot]
8bd6e40ac8 🎨 改进代码样式 2022-01-09 15:22:17 +00:00
himawari
2ed25c6991 添加签到,引入分数机制 (#101)
* feat:添加签到功能,引入分数机制

* feat:修lint

* fix:加宽

* fix:修lint和加锁

* fix:解决冲突

* fix:二次判断
2022-01-09 23:21:36 +08:00
fumiama
d8991ec016 🐛 启动显示 banner 2022-01-09 23:20:00 +08:00
fumiama
dc9ca1e63f 💩👌 make lint happy 2022-01-09 22:53:22 +08:00
fumiama
7bb3203dfb 🐛 群管全局操作权限错误 2022-01-09 22:20:14 +08:00
fumiama
8ebe9548f7 ️ 优化 abs 2022-01-08 13:56:19 +08:00
fumiama
f90f20d3a8 🙈 同步 data 2022-01-08 11:53:52 +08:00
fumiama
1437e3b323 🎨 小修正 2022-01-07 22:47:32 +08:00
fumiama
d44171de61 ♻️ 🔥 优化 acgimage, 新增 ipv6 分流 2022-01-07 21:57:30 +08:00
fumiama
62a9e413fb 🔖 v1.2.3 2022-01-07 20:10:14 +08:00
fumiama
c12c48dea6 🐛 fix setdata&getdata 2022-01-07 20:07:10 +08:00
github-actions[bot]
7dd81525e4 🎨 改进代码样式 2022-01-07 11:48:23 +00:00
himawari
ca36038bbd 增加小爱回复 (#100)
* fix:去掉count,修sql

* feat:增加小爱回复

* fix:修一下lint

* fix:修一下lint

* fix:修一下lint

* fix:修一下lint

* fix:修改设置回复模式

* fix:修lint

Co-authored-by: Guohuiyuan <haibaraguo@yeahka.com>
2022-01-07 19:47:35 +08:00
fumiama
ca2f674696 更新 md5 服务器域名 2022-01-06 21:09:34 +08:00
fumiama
8acf9b817f ✏️ 修复 cd valid 判断 2022-01-06 12:40:48 +08:00
fumiama
2dc1fbde96 Merge branch 'master' of https://github.com/FloatTech/ZeroBot-Plugin 2022-01-06 12:26:08 +08:00
fumiama
919651a2b3 💩👌 make lint happy 2022-01-06 12:25:56 +08:00
himawari
19b55a574f fix:去掉count,修sql (#99) 2022-01-03 23:13:24 +08:00
fumiama
a6ab7de475 ⬆️ 更新 摸鱼 元旦 2022-01-03 10:54:59 +08:00
fumiama
2ff229e9d9 ⚰️ 简化 getdata 2022-01-03 01:00:35 +08:00
fumiama
18def7c624 💩👌 make lint happy 2022-01-03 00:46:49 +08:00
fumiama
59a731df88 升级依赖 2022-01-03 00:36:40 +08:00
github-actions[bot]
6186356496 🎨 改进代码样式 2022-01-02 16:26:49 +00:00
himawari
045ee091a7 增加文字转图片&拟声鸟 (#96)
* feat:添加文字转图片,改造长文字

* fix:修改log

* fix:修改条件

* fix:不保存图片

* fix:增加block和优先级

* fix:文件夹首字母大写

* fix:修改解签为图片

* feat:添加拟声鸟

* fix:清理缓存

* fix:换一个音频

* fix:小修格式

* fix:修一下lint

* fix:修一下lint

* fix:修一下lint

* fix:修一下lint

* fix:修一下lint

* fix:修一下lint

* fix:修一下lint

* fix:修一下lint

* fix:10s一次

* fix:10s一次

* fix:修lint
2022-01-03 00:26:00 +08:00
github-actions[bot]
a69d985139 🎨 改进代码样式 2022-01-02 14:13:19 +00:00
fumiama
c13641dd1d ✏️ 修复 waitgroup 错误 2022-01-02 22:12:40 +08:00
fumiama
f0fc5d6598 同步 data 2022-01-02 22:06:54 +08:00
fumiama
2348039c16 ✏️ 加快 reg 处理速度 2022-01-02 15:06:35 +08:00
fumiama
7f8d34e8a0 ✏️ 修复 kanban panic 2022-01-02 14:09:27 +08:00
fumiama
205036b658 🎨 优化 win logrus 色彩显示 2021-12-30 12:32:31 +08:00
fumiama
9519896d04 remove apple in nightly 2021-12-27 17:10:10 +08:00
fumiama
aa83b63617 win 下 log 支持颜色 2021-12-27 16:59:07 +08:00
源文雨
3e89a372b3 Update main_win.go 2021-12-27 16:53:20 +08:00
源文雨
d464695b66 win 下 log 支持颜色 2021-12-27 16:51:53 +08:00
fumiama
657532f7e5 make lint happy 2021-12-26 22:21:00 +08:00
github-actions[bot]
3f69308603 🎨 改进代码样式 2021-12-26 14:00:48 +00:00
himawari
486160fc57 添加cp短打 (#94)
* feat:添加cp短打插件

* feat:匹配中英文标点符号和中文字符
2021-12-26 22:00:02 +08:00
fumiama
3939e0760f make lint happy 2021-12-26 21:59:48 +08:00
fumiama
16624a9596 ✏️ 修复 manager 定时器错误 2021-12-26 16:05:05 +08:00
fumiama
58e075e6ff make lint happy 2021-12-26 15:25:46 +08:00
github-actions[bot]
ef081714d7 🎨 改进代码样式 2021-12-26 07:17:57 +00:00
himawari
96802efa45 增加绝绝子和藏头诗 (#93)
* feat:添加绝绝子和藏头诗

* fix:去除日志

* fix:修一下help,replace,命名
2021-12-26 15:17:11 +08:00
fumiama
0a95f3198b make lint happy 2021-12-26 15:16:42 +08:00
fumiama
cb44758036 ✏️ 修复 manager 定时器错误
同时 make lint happy
2021-12-26 14:07:05 +08:00
fumiama
1682c321d3 ✏️ 升级到 go 1.17 2021-12-25 20:18:09 +08:00
fumiama
eeba8a5de7 move atri data to submodule 2021-12-25 14:01:51 +08:00
fumiama
2ea0f58e03 fix download error 2021-12-25 13:57:55 +08:00
fumiama
05235473c1 ✏️ 更新下载 url 2021-12-25 13:39:41 +08:00
fumiama
f0c083f4e6 ✏️ 将 data 作为子模块 2021-12-25 13:33:04 +08:00
fumiama
6997c9a5c0 rm data 2021-12-25 13:30:20 +08:00
fumiama
eebfa23509 make lint happy 2021-12-25 13:01:05 +08:00
github-actions[bot]
59fe8a021f 🎨 改进代码样式 2021-12-25 04:43:37 +00:00
himawari
16672d9b89 feat:添加抽象话插件 (#92) 2021-12-25 12:43:02 +08:00
fumiama
1d39fd8685 fix(manager): unable to open dbfile: out of memory 2021-12-24 19:52:51 +08:00
fumiama
ae41bdb7f8 ✏️ 修改摸鱼节日为动态变化 2021-12-24 13:14:40 +08:00
github-actions[bot]
4147f1056a 🎨 改进代码样式 2021-12-24 04:33:46 +00:00
fumiama
7c5d08b723 ✏️ make lint happy 2021-12-24 12:32:51 +08:00
himawari
a3b5a226ac 增加沙雕app一系列接口 (#91)
* feat:添加沙雕app一系列api

* fix: 修个文案

* fix:修改等级

* fix:好孩子不能骂人

Co-authored-by: Guohuiyuan <haibaraguo@yeahka.com>
2021-12-24 12:32:26 +08:00
fumiama
f56cee9ec1 ✏️ 群管 gist 验证 自动设置昵称为用户名 2021-12-23 21:46:34 +08:00
fumiama
3b977535f1 ✏️ edit README 2021-12-22 18:57:30 +08:00
fumiama
ce8d98b77d fix: panic: database is locked (5) (SQLITE_BUSY) 2021-12-22 18:37:41 +08:00
fumiama
2858d0b0a4 Merge branch 'master' of https://github.com/FloatTech/ZeroBot-Plugin 2021-12-21 22:22:11 +08:00
fumiama
1f982566e0 更新 codechina 域名 2021-12-21 22:22:01 +08:00
github-actions[bot]
779ec5b2fe 🎨 改进代码样式 2021-12-21 14:18:52 +00:00
fumiama
8499921d67 ✏️ 优化代码结构 2021-12-21 22:18:06 +08:00
fumiama
1e49bad1a6 Merge branch 'master' of https://github.com/FloatTech/ZeroBot-Plugin 2021-12-21 22:12:09 +08:00
fumiama
1d3a61386d ✏️ 优化代码结构 2021-12-21 22:09:43 +08:00
github-actions[bot]
25ef2ca220 🎨 改进代码样式 2021-12-21 13:25:34 +00:00
himawari
b953385bc5 feat:添加词库,骂人和笑话 (#90)
Co-authored-by: Guohuiyuan <haibaraguo@yeahka.com>
2021-12-21 21:24:59 +08:00
fumiama
4fdedd0a7b ✏️ 增加黑名单 (#2) 2021-12-21 14:12:13 +08:00
Kanri
f4bc43e7a5 ✏️ 修改 windows 日志样式 2021-12-21 09:35:59 +08:00
fumiama
596c75eeca ✏️ make lint happy 2021-12-19 17:43:46 +08:00
fumiama
67a493ee84 ✏️ 更新 go.sum 2021-12-19 17:36:13 +08:00
fumiama
f9c7d9419e ✏️ make lint happy 2021-12-19 17:27:32 +08:00
github-actions[bot]
1a1a006283 🎨 改进代码样式 2021-12-19 08:06:16 +00:00
himawari
fd85ce0923 feat:添加铅笔小说搜索插件 (#89)
* feat:添加铅笔小说搜索插件

* fix:小修改help

* fix:微调语句

* fix:替换编码库

* fix:不修改go.sum
2021-12-19 16:05:29 +08:00
fumiama
5ff9069ff2 ✏️ make lint happy 2021-12-19 16:04:14 +08:00
fumiama
4ad7ff7971 ✏️ make lint happy 2021-12-19 11:39:30 +08:00
fumiama
a9f98763c4 ✏️ edit README 2021-12-17 12:30:48 +08:00
fumiama
3b637fad78 ✏️ aifalese 磁盘空间占用仅输出非0挂载点 2021-12-17 12:28:38 +08:00
fumiama
f202797964 ✏️ fix shindan by @Yiwen-Chan 2021-12-17 11:36:50 +08:00
fumiama
242d780048 ✏️ edit README 2021-12-16 17:02:03 +08:00
fumiama
bf23364097 ✏️ edit README 2021-12-16 17:00:11 +08:00
fumiama
7eaac7a20b ✏️ fix gist panic 2021-12-16 16:27:25 +08:00
fumiama
45448e6f53 Merge branch 'master' of https://github.com/FloatTech/ZeroBot-Plugin 2021-12-16 15:30:29 +08:00
fumiama
08ee458a27 ✏️ edit README 2021-12-16 15:30:19 +08:00
github-actions[bot]
3f97541956 🎨 改进代码样式 2021-12-16 07:28:22 +00:00
fumiama
e2c603338e ✏️ drop all pb & 增加 gist 审批 2021-12-16 15:27:47 +08:00
fumiama
a363623df9 ✏️ drop pb in timer 2021-12-16 12:51:41 +08:00
github-actions[bot]
b871573dc3 🎨 改进代码样式 2021-12-15 14:29:05 +00:00
himawari
ad33c1ca3c 添加coser插件 (#87)
* feat:添加coser

* fix:删除测试代码

* fix:莫名其妙的库

* fix:加个限制器

* fix:修改限制器

* fix:改回去

* fix:改回去

* fix:添加标题

* fix:t大写

* fix:异常注释

* feat:添加文档

* feat:合并消息私聊无效

* feat:改个顺序

* Update go.sum

Co-authored-by: Guohuiyuan <haibaraguo@yeahka.com>
Co-authored-by: 源文雨 <41315874+fumiama@users.noreply.github.com>
2021-12-15 22:28:06 +08:00
fumiama
810cb284b6 ✏️ 优化 ci 2021-12-15 22:26:05 +08:00
fumiama
d0ffb25594 ✏️ 优化 ci 2021-12-15 22:21:13 +08:00
fumiama
2b6796d1d1 ✏️ 优化 ci 2021-12-15 22:15:31 +08:00
fumiama
52093f3dd3 ✏️ 优化 aifalse 2021-12-15 16:01:56 +08:00
fumiama
2a5c1ac92c ✏️ print kanban on start 2021-12-15 15:38:05 +08:00
fumiama
6e0222f5e2 ✏️ 优化 aifalse 2021-12-15 15:30:48 +08:00
fumiama
4bebf79266 ✏️ fix far connect in updater 2021-12-15 13:50:41 +08:00
fumiama
b6dadc142b ✏️ more log in updater 2021-12-15 13:00:10 +08:00
github-actions[bot]
1cbc49251b 🎨 改进代码样式 2021-12-14 06:27:57 +00:00
fumiama
d2d5b5863b ✏️ drop pb in Diana 2021-12-14 14:27:19 +08:00
fumiama
65f9203597 ✏️ drop pb in fortune 2021-12-14 13:51:15 +08:00
fumiama
4c1926e395 ✏️ fix fortune config 2021-12-14 13:41:24 +08:00
fumiama
516d937149 ✏️ 添加公告看板 2021-12-14 13:35:00 +08:00
github-actions[bot]
7af17c3c65 🎨 改进代码样式 2021-12-14 05:34:20 +00:00
fumiama
33b85207f5 ✏️ 添加公告看板 2021-12-14 13:33:28 +08:00
fumiama
218119e10e ✏️ 优化 updater log 2021-12-14 13:18:26 +08:00
fumiama
4485d3d5a9 ✏️ 优化 updater log 2021-12-14 13:17:46 +08:00
fumiama
fcf62a31e1 ✏️ edit README 2021-12-14 12:09:30 +08:00
fumiama
ebdc83809c ✏️ edit README 2021-12-14 12:06:33 +08:00
fumiama
61a3c30a45 ✏️ edit README 2021-12-14 12:04:34 +08:00
fumiama
0e4cab7221 ✏️ edit README 2021-12-14 12:02:38 +08:00
fumiama
865c90a85a ✏️ 优化 updater reg 关闭逻辑 2021-12-14 12:00:44 +08:00
fumiama
c9b06a4fa8 ✏️ edit README 2021-12-13 21:57:13 +08:00
fumiama
0e75143a42 ✏️ edit README 2021-12-13 21:42:52 +08:00
fumiama
ce333c5793 ✏️ 更改为v1.1.2 2021-12-13 21:23:04 +08:00
github-actions[bot]
6b4045db45 🎨 改进代码样式 2021-12-13 13:15:16 +00:00
fumiama
3fba704c77 ✏️ 更新依赖 2021-12-13 21:14:29 +08:00
fumiama
0712a80ea0 ✏️ 同步时序 2021-12-13 21:06:11 +08:00
fumiama
8969c44b3f ✏️ 统一懒加载验证 2021-12-13 20:49:00 +08:00
fumiama
f7a3c0e6c6 ✏️ 加入 kuji.db 2021-12-13 13:11:42 +08:00
himawari
b1852a1de6 新增解签指令和修复sleep的时间判断 (#86) 2021-12-13 12:29:21 +08:00
fumiama
5645fa0168 ✏️ sql 防注入 2021-12-08 17:35:22 +08:00
fumiama
c824b2e0b4 ✏️ 迁移到 utils/sql 2021-12-08 17:30:16 +08:00
fumiama
1c0d2b2f95 ✏️ 迁移到 utils/sql 2021-12-08 17:27:29 +08:00
fumiama
10b8ab297a ✏️ 迁移到 utils/sql 2021-12-08 17:13:00 +08:00
fumiama
e8b0e475d7 ✏️ 迁移数据库本体 2021-12-08 17:10:22 +08:00
fumiama
7fc4a6425b ✏️ 迁移到 utils/sql 2021-12-08 16:44:46 +08:00
himawari
a8a3c48e6c fix:修复sql错误 (#85)
* fix:捕获协程异常

* feat:添加睡眠时间

* feat:添加睡眠管理功能

* fix:修改对标时间

* fix:修复sql错误

* feat:添加书评功能

* fix:调整格式

* fix:去掉recover

* feat:更新文档

Co-authored-by: Guohuiyuan <haibaraguo@yeahka.com>
2021-12-08 13:12:40 +08:00
fumiama
9fca69302b Merge branch 'master' of https://github.com/FloatTech/ZeroBot-Plugin 2021-12-07 23:29:08 +08:00
fumiama
ba6811224e add gocqzbp in README 2021-12-07 23:28:57 +08:00
148 changed files with 3966 additions and 4276 deletions

55
.github/workflows/nightly.yml vendored Normal file
View File

@@ -0,0 +1,55 @@
name: 最新版
on: [push, pull_request]
env:
BINARY_PREFIX: "zbp_"
BINARY_SUFFIX: ""
PR_PROMPT: "::warning:: Build artifact will not be uploaded due to the workflow is trigged by pull request."
LD_FLAGS: "-w -s"
jobs:
build:
name: Build binary CI
runs-on: ubuntu-latest
strategy:
matrix:
# build and publish in parallel: linux/386, linux/amd64, windows/386, windows/amd64, darwin/amd64, darwin/arm64
goos: [linux, windows]
goarch: ["386", amd64, arm, arm64]
exclude:
- goos: windows
goarch: arm
- goos: windows
goarch: arm64
fail-fast: true
steps:
- uses: actions/checkout@v2
- name: Setup Go environment
uses: actions/setup-go@v2.1.3
with:
go-version: 1.17
- name: Cache downloaded module
uses: actions/cache@v2
with:
path: |
~/.cache/go-build
~/go/pkg/mod
key: ${{ runner.os }}-go-${{ matrix.goos }}-${{ matrix.goarch }}-${{ hashFiles('**/go.sum') }}
- name: Build binary file
env:
GOOS: ${{ matrix.goos }}
GOARCH: ${{ matrix.goarch }}
IS_PR: ${{ !!github.head_ref }}
run: |
if [ $GOOS = "windows" ]; then export BINARY_SUFFIX="$BINARY_SUFFIX.exe"; fi
if $IS_PR ; then echo $PR_PROMPT; fi
export BINARY_NAME="$BINARY_PREFIX$GOOS_$GOARCH$BINARY_SUFFIX"
export CGO_ENABLED=0
go build -o "output/$BINARY_NAME" -trimpath -ldflags "$LD_FLAGS" .
- name: Upload artifact
uses: actions/upload-artifact@v2
if: ${{ !github.head_ref }}
with:
name: ${{ matrix.goos }}_${{ matrix.goarch }}
path: output/

View File

@@ -1,4 +1,4 @@
name: compile
name: 发行版
on:
push:
tags:

8
.gitignore vendored
View File

@@ -1,11 +1,3 @@
data/SetuTime/cache
data/control
data/SetuTime/search
data/manager
data/acgimage
data/saucenao
data/fortune
data/hs
plugins/*.so
plugins/*.dll
.idea/

3
.gitmodules vendored Normal file
View File

@@ -0,0 +1,3 @@
[submodule "data"]
path = data
url = https://github.com/FloatTech/zbpdata

View File

@@ -10,10 +10,6 @@ linters-settings:
disabled-checks:
- exitAfterDefer
gofumpt:
# Select the Go version to target. The default is `1.15`.
lang-version: "1.17"
forbidigo:
# Forbid the following identifiers
forbid:
@@ -22,13 +18,13 @@ linters-settings:
linters:
# please, do not use `enable-all`: it's deprecated and will be removed soon.
# inverted configuration with `enable-all` and `disable` is not scalable during updates of golangci-lint
fast: true
disable-all: true
fast: false
enable:
- bodyclose
- deadcode
- depguard
- dogsled
- dupl
- errcheck
- exportloopref
- exhaustive
@@ -43,7 +39,7 @@ linters:
- gosimple
- govet
- ineffassign
- misspell
#- misspell
- nolintlint
- rowserrcheck
- staticcheck
@@ -58,23 +54,9 @@ linters:
- prealloc
- predeclared
- asciicheck
- revive
- forbidigo
- makezero
- revive
#- interfacer
# don't enable:
# - scopelint
# - gochecknoglobals
# - gocognit
# - godot
# - godox
# - goerr113
# - interfacer
# - maligned
# - nestif
# - testpackage
# - wsl
run:
# default concurrency is a available CPU number.
@@ -95,4 +77,4 @@ issues:
fix: true
exclude-use-default: false
exclude:
- "Error return value of .((os.)?std(out|err)..*|.*Close|.*Flush|os.Remove(All)?|.*print(f|ln)?|os.(Un)?Setenv). is not check"
- "Error return value of .((os.)?std(out|err)..*|.*Close|.*Seek|.*Flush|os.Remove(All)?|.*print(f|ln)?|os.(Un)?Setenv). is not check"

View File

@@ -11,7 +11,6 @@ builds:
- GO111MODULE=on
goos:
- linux
- darwin
goarch:
- 386
- amd64
@@ -20,11 +19,6 @@ builds:
goarm:
- 6
- 7
ignore:
- goos: darwin
goarch: arm
- goos: darwin
goarch: 386
mod_timestamp: "{{ .CommitTimestamp }}"
flags:
- -trimpath

114
README.md
View File

@@ -16,23 +16,36 @@
[![License](https://img.shields.io/github/license/FloatTech/ZeroBot-Plugin.svg?style=flat-square&logo=gnu)](https://raw.githubusercontent.com/FloatTech/ZeroBot-Plugin/master/LICENSE)
[![qq group](https://img.shields.io/badge/group-1048452984-red?style=flat-square&logo=tencent-qq)](https://jq.qq.com/?_wv=1027&k=QMb7x1mM)
本项目符合 [OneBot](https://github.com/howmanybots/onebot) 标准,可基于以下项目与机器人框架/平台进行交互
| 项目地址 | 平台 | 核心作者 |
| --- | --- | --- |
| [Mrs4s/go-cqhttp](https://github.com/Mrs4s/go-cqhttp) | [MiraiGo](https://github.com/Mrs4s/MiraiGo) | Mrs4s |
| [yyuueexxiinngg/cqhttp-mirai](https://github.com/yyuueexxiinngg/cqhttp-mirai) | [Mirai](https://github.com/mamoe/mirai) | yyuueexxiinngg |
| [takayama-lily/onebot](https://github.com/takayama-lily/onebot) | [OICQ](https://github.com/takayama-lily/oicq) | takayama |
</div>
> 如果您不知道什么是 [OneBot](https://github.com/howmanybots/onebot) 或不希望运行多个程序,还可以直接前往 [gocqzbp](https://github.com/FloatTech/gocqzbp) 的 [Release](https://github.com/FloatTech/gocqzbp/releases) 页面下载单一可执行文件或前往 [Packages](https://github.com/FloatTech/gocqzbp/pkgs/container/gocqzbp) 页面使用`docker`,运行后按提示登录即可。
## 命令行参数
> `[]`代表是可选参数
```bash
zerobot -h -t token -u url [-d|w] [-g 监听地址:端口] qq1 qq2 qq3 ...
zerobot [-h] [-t token] [-u url] [-n nickname] [-p prefix] [-d|w] [-g 监听地址:端口] [qq1 qq2 qq3 ...] [&]
```
- **-h**: 显示帮助
- **-t token**: 设置`AccessToken`,默认为空
- **-u url**: 设置`Url`,默认为`ws://127.0.0.1:6700`
- **-n nickname**: 设置默认昵称,默认为`椛椛`
- **-p prefix**: 设置命令前缀,默认为`/`
- **-d|w**: 开启 debug | warning 级别及以上日志输出
- **-g 监听地址:端口**: 在 http://监听地址:端口 上开启 [webgui](https://github.com/FloatTech/bot-manager)
- **qqs**: superusers 的 qq 号
- **&**: 驻留在后台,必须放在最后,仅`Linux`下有效
## 功能
> 在编译时,以下功能除插件控制外,均可通过注释`main.go`中的相应`import`而物理禁用,减小插件体积。
> 通过插件控制,还可动态管理某个功能在某个群的打开/关闭。
- **web管理** `import _ "github.com/FloatTech/ZeroBot-Plugin/control/web"`
- **web管理** `import _ "github.com/FloatTech/zbputils/control/web"`
- 开启后可执行文件大约增加 5M ,默认注释不开启。如需开启请自行编辑`main.go`取消注释
- 需要配合 [webgui](https://github.com/FloatTech/bot-manager) 使用
- **动态加载插件** `import _ github.com/FloatTech/ZeroBot-Plugin-Dynamic/dyloader`
@@ -43,6 +56,8 @@ zerobot -h -t token -u url [-d|w] [-g 监听地址:端口] qq1 qq2 qq3 ...
- [x] /全局启用 xxx
- [x] /全局禁用 xxx
- [x] /还原 xxx (在发送的群/用户还原xxx的开启状态到初始状态)
- [x] /禁止 service qq1 qq2... (禁止 qqs 使用服务 service)
- [x] /允许 service qq1 qq2... (重新允许 qqs 使用服务 service)
- [x] /用法 xxx
- [x] /服务列表
- [x] /服务详情
@@ -54,6 +69,7 @@ zerobot -h -t token -u url [-d|w] [-g 监听地址:端口] qq1 qq2 qq3 ...
- [x] 空调关
- [x] 群温度
- [x] 设置温度[正整数]
- [x] @Bot mua|啾咪|摸|上你|傻|裸|贴|老婆|抱|亲|一下|咬|操|123|进去|调教|搓|让|捏|挤|略|呐|原味|胖次|内裤|内衣|衣服|ghs|批|憨批|kkp|咕|骚|喜欢|suki|好き|看|不能|砸了|透|口我|草我|自慰|onani|オナニー|炸了|色图|涩图|告白|对不起|回来|吻|软|壁咚|掰开|女友|是|喵|嗷呜|叫|拜|佬|awsl|臭|香|腿|张开|脚|脸|头发|手|pr|舔|小穴|腰|诶嘿嘿|可爱|扭蛋|鼻|眼|色气|推|床|举|手冲|饿|变|敲|爬|怕|冲|射|不穿|迫害|猫粮|揪尾巴|薄荷|早|晚安|揉|榨|掐|胸|奶子|欧派|嫩|蹭|牵手|握手|拍照|w|睡不着|欧尼酱|哥|爱你|过来|自闭|打不过|么么哒|很懂|膝枕|累了|安慰|洗澡|一起睡觉|一起|多大|姐姐|糖|嗦|牛子|🐂子|🐮子|嫌弃|紧|baka|笨蛋|插|插进来|屁股|翘|翘起来|抬|抬起|爸|傲娇|rua|咕噜咕噜|咕噜|上床|做爱|吃掉|吃|揪|种草莓|种草|掀|妹|病娇|嘻
- **ATRI** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin_atri"`
- [x] 具体指令看 /用法 atri
- 注:本插件基于 [ATRI](https://github.com/Kyomotoi/ATRI) ,为 Golang 移植版
@@ -82,11 +98,12 @@ zerobot -h -t token -u url [-d|w] [-g 监听地址:端口] qq1 qq2 qq3 ...
- [x] 列出所有提醒
- [x] 翻牌
- [x] [开启|关闭]入群验证
- [ ] 同意入群请求
- [x] [开启|关闭]gist加群自动审批
- [ ] 同意好友请求
- [ ] 撤回[@xxx] [xxx]
- [ ] 警告[@xxx]
- [x] run[xxx]
-使用gist加群自动审批请在群介绍添加以下说明同时开启`需要回答问题并由管理员审核`加群请在github新建一个gist其文件名为本群群号的字符串的md5(小写)内容为一行是当前unix时间戳(10分钟内有效)。然后请将您的用户名和gist哈希(小写)按照username/gisthash的格式填写到回答即可。
- **GitHub仓库搜索** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin_github"`
- [x] >github [xxx]
- [x] >github -p [xxx]
@@ -105,7 +122,7 @@ zerobot -h -t token -u url [-d|w] [-g 监听地址:端口] qq1 qq2 qq3 ...
- [x] 抽老婆[@xxx]
- **AIWife** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin_aiwife"`
- [x] waifu|随机waifu(从[100000个AI生成的waifu](https://www.thiswaifudoesnotexist.net/)中随机一位)
- **gif** `import _ "github.com/tdf1939/ZeroBot-Plugin-Gif/plugin_gif"`
- **gif** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin_gif"`
- [x] 爬[@xxx]
- [x] 摸[@xxx]
- [x] 搓[@xxx]
@@ -137,12 +154,14 @@ zerobot -h -t token -u url [-d|w] [-g 监听地址:端口] qq1 qq2 qq3 ...
- [x] 搜图[P站图片ID]
- **搜番** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin_tracemoe"`
- [x] 搜番|搜索番剧[图片]
- **随机图片与AI点评** `github.com/FloatTech/ZeroBot-Plugin/plugin_acgimage`
- **随机图片与AI点评** `import _ github.com/FloatTech/ZeroBot-Plugin/plugin_acgimage`
- [x] 随机图片(评级大于6的图将私发)
- [x] 直接随机(无r18检测务必小心仅管理可用)
- [x] 设置随机图片网址[url]
- [x] 太涩了(撤回最近发的图)
- [x] 评价图片(发送一张图片让bot评分)
- **DeepDanbooru二次元图标签识别** `import _ github.com/FloatTech/ZeroBot-Plugin/plugin_danbooru`
- [x] 鉴赏图片[图片]
- **每日运势** `import _ github.com/FloatTech/ZeroBot-Plugin/plugin_fortune`
- [x] 运势|抽签
- [x] 设置底图[车万 DC4 爱因斯坦 星空列车 樱云之恋 富婆妹 李清歌 公主连结 原神 明日方舟 碧蓝航线 碧蓝幻想 战双 阴阳师]
@@ -150,10 +169,11 @@ zerobot -h -t token -u url [-d|w] [-g 监听地址:端口] qq1 qq2 qq3 ...
- [x] 早安|晚安
- **浅草寺求签** `import _ github.com/FloatTech/ZeroBot-Plugin/plugin_omikuji`
- [x] 求签|占卜
- [x] 解签
- **bilibili** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin_bilibili"`
- [x] >vup info [名字|uid]
- [x] >user info [名字|uid]
- [x] /开启粉丝日报
- [x] >user info [名字|uid]
- [x] /开启粉丝日报
- **嘉然** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin_diana"`
- [x] 小作文
- [x] 发大病
@@ -165,7 +185,7 @@ zerobot -h -t token -u url [-d|w] [-g 监听地址:端口] qq1 qq2 qq3 ...
- 注:由于需要科学,默认注释。
- **AIfalse** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin_ai_false"`
- [x] 查询计算机当前活跃度: [检查身体|自检|启动自检|系统状态]
- [x] 清理缓存
- [x] 清理缓存 (仅适用于 gocq 且需要 bot 的运行目录和 gocq 相同)
- [ ] 简易语音
- [ ] 爬图合成 [@xxx]
- **抽wife** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin_nativewife"`
@@ -176,15 +196,16 @@ zerobot -h -t token -u url [-d|w] [-g 监听地址:端口] qq1 qq2 qq3 ...
- 注:不同群添加后不会重叠
- **minecraft** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin_minecraft"`
- [x] /mcstart xxx
- [x] /mcstop xxx
- [x] /mclist servername
- [x] /mcstop xxx
- [x] /mclist servername
- 注:此功能实现依赖[MCSManager](https://github.com/Suwings/MCSManager)项目对服务器的管理apimc服务器如果没有在该管理平台部署此功能无效
- **炉石** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin_hs"`
- [x] 搜卡[xxxx]
- [x] [卡组代码xxx]
-更多搜卡指令参数https://hs.fbigame.com/misc/searchhelp
- **青云客** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin_qingyunke"`
- [x] @Bot 任意文本(任意一句话回复)
- **人工智能回复** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin_ai_reply"`
- [x] @Bot 任意文本(任意一句话回复)
- [x] 设置回复模式[青云客|小爱]
- **关键字搜图** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin_image_finder"`
- [x] 来张 [xxx]
- **拼音首字母释义工具** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin_nbnhhsh"`
@@ -199,29 +220,56 @@ zerobot -h -t token -u url [-d|w] [-g 监听地址:端口] qq1 qq2 qq3 ...
- **vtb语录** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin_vtb_quotation"`
- [x] vtb语录
- [x] 随机vtb
- **书评** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin_book_review"`
- [x] 书评[xxx]
- [x] 随机书评
- **coser** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin_coser" `
- [x] coser
- **小说** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin_novel" `
- [x] 小说[xxx]
- **沙雕app插件** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin_shadiao"`
- [x] 骂他[@xxx]|骂他[qq号] (停用)
- [x] 骂我 (停用)
- [x] 哄我
- [x] 渣我
- [x] 来碗绿茶
- [x] 发个朋友圈
- [x] 来碗毒鸡汤
- [x] 讲个段子
- **笑话** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin_funny"`
- [x] 讲个笑话[@xxx]|讲个笑话[qq号]
- **抽象话** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin_chouxianghua"`
- [x] 抽象翻译[xxx]
- **绝绝子** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin_juejuezi"`
- [x] 喝奶茶绝绝子|绝绝子吃饭
- **藏头诗** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin_cangtoushi"`
- [x] 藏头诗[xxx]
- [x] 藏尾诗[xxx]
- **cp短打** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin_cpstory"`
- [x] 组cp[@xxx][@xxx]
- [x] 组cp大老师 雪乃
- **签到得分** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin_score"`
- [x] 签到
- [x] 获得签到背景[@xxx]|获得签到背景
- **骂人** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin_curse"`
- [x] 骂我
- [x] 大力骂我
- [x] @bot 他妈|公交车|你妈|操|屎|去死|快死|日|逼|尼玛|艾滋|癌症|有病|戴套|啊对对对|烦你|你爹|屮|tui|cnm
- **TODO...**
## 使用方法
本项目符合 [OneBot](https://github.com/howmanybots/onebot) 标准,可基于以下项目与机器人框架/平台进行交互
| 项目地址 | 平台 | 核心作者 | 备注 |
| --- | --- | --- | --- |
| [Mrs4s/go-cqhttp](https://github.com/Mrs4s/go-cqhttp) | [MiraiGo](https://github.com/Mrs4s/MiraiGo) | Mrs4s | |
| [yyuueexxiinngg/cqhttp-mirai](https://github.com/yyuueexxiinngg/cqhttp-mirai) | [Mirai](https://github.com/mamoe/mirai) | yyuueexxiinngg | |
| [takayama-lily/onebot](https://github.com/takayama-lily/onebot) | [OICQ](https://github.com/takayama-lily/oicq) | takayama | |
### 使用稳定版/测试版 (推荐)
可以前往[Release](https://github.com/FloatTech/ZeroBot-Plugin/releases)页面下载对应系统版本可执行文件,编译时开启了全部插件。
可以前往[Release](https://github.com/FloatTech/ZeroBot-Plugin/releases)页面下载对应系统版本可执行文件,编译时开启了全部插件。您还可以选择 [gocqzbp](https://github.com/FloatTech/gocqzbp) 的 [Release](https://github.com/FloatTech/gocqzbp/releases) 或 [Package](https://github.com/FloatTech/gocqzbp/pkgs/container/gocqzbp),它是 [Mrs4s/go-cqhttp](https://github.com/Mrs4s/go-cqhttp) 与本插件的合体。
### 本地运行
### 本地直接运行
1. 下载安装 [Go](https://studygolang.com/dl) 环境
1. 下载安装最新 [Go](https://studygolang.com/dl) 环境
2. 下载本项目[压缩包](https://github.com/FloatTech/ZeroBot-Plugin/archive/master.zip),本地解压
3. 编辑 main.go 文件,内容按需修改
4. 双击 build.bat 文件 或 直接双击 run.bat 文件
5. 运行 OneBot 框架,并同时运行本插件
4. 运行 OneBot 框架
5. `Windows`下双击 run.bat 文件,`Linux`下使用 run.sh 运行本插件
### 编译运行
@@ -237,7 +285,7 @@ zerobot -h -t token -u url [-d|w] [-g 监听地址:端口] qq1 qq2 qq3 ...
#### 本地编译/交叉编译
1. 下载安装 [Go](https://studygolang.com/dl) 环境
1. 下载安装最新 [Go](https://studygolang.com/dl) 环境
2. clone 并进入本项目,下载所需包
```bash
@@ -250,15 +298,19 @@ go mod tidy
```
3. 编辑 main.go 文件,内容按需修改
4. 按照平台输入命令编译,下面举了两个不太常见的例子
4. 按照平台输入命令编译,下面举了一些例子
```bash
# 本机平台
go build -ldflags "-s -w" -o zerobot
go build -ldflags "-s -w" -o zerobot -trimpath
# x64 Linux 平台 如各种云服务器
GOOS=linux GOARCH=amd64 go build -ldflags "-s -w" -o zerobot -trimpath
# x64 Windows 平台 如大多数家用电脑
GOOS=windows GOARCH=amd64 go build -ldflags "-s -w" -o zerobot.exe -trimpath
# armv6 Linux 平台 如树莓派 zero W
GOOS=linux GOARCH=arm GOARM=6 CGO_ENABLED=0 go build -ldflags "-s -w" -o zerobot
# mips Linux 平台 如 路由器 wndr4300
GOOS=linux GOARCH=mips GOMIPS=softfloat CGO_ENABLED=0 go build -ldflags "-s -w" -o zerobot
GOOS=linux GOARCH=arm GOARM=6 CGO_ENABLED=0 go build -ldflags "-s -w" -o zerobot -trimpath
# 由于引入了github.com/logoove/sqlite本项不再可用mips Linux 平台 如 路由器 wndr4300
GOOS=linux GOARCH=mips GOMIPS=softfloat CGO_ENABLED=0 go build -ldflags "-s -w" -o zerobot -trimpath
```
5. 运行 OneBot 框架,并同时运行本插件

View File

@@ -1,93 +0,0 @@
package control
import (
"encoding/binary"
"strings"
"time"
b14 "github.com/fumiama/go-base16384"
zero "github.com/wdvxdr1123/ZeroBot"
"github.com/wdvxdr1123/ZeroBot/message"
"github.com/wdvxdr1123/ZeroBot/utils/helper"
"github.com/FloatTech/ZeroBot-Plugin/utils/process"
)
var startTime int64
func init() {
// 插件冲突检测 会在本群发送一条消息并在约 1s 后撤回
zero.OnFullMatch("插件冲突检测", zero.OnlyGroup, zero.AdminPermission, zero.OnlyToMe).SetBlock(true).FirstPriority().
Handle(func(ctx *zero.Ctx) {
tok, err := genToken()
if err != nil {
return
}
t := message.Text("●cd" + tok)
startTime = time.Now().Unix()
id := ctx.SendChain(t)
process.SleepAbout1sTo2s()
ctx.DeleteMessage(id)
})
zero.OnRegex("^●cd([\u4e00-\u8e00]{4})$", zero.OnlyGroup).SetBlock(true).FirstPriority().
Handle(func(ctx *zero.Ctx) {
if isValidToken(ctx.State["regex_matched"].([]string)[1]) {
msg := ""
gid := ctx.Event.GroupID
ForEach(func(key string, manager *Control) bool {
if manager.IsEnabledIn(gid) {
msg += "\xfe\xff" + key
}
return true
})
if len(msg) > 2 {
my, err := b14.UTF16be2utf8(b14.EncodeString(msg[2:]))
mys := "●cd●" + helper.BytesToString(my)
if err == nil {
id := ctx.SendChain(message.Text(mys))
process.SleepAbout1sTo2s()
ctx.DeleteMessage(id)
}
}
}
})
zero.OnRegex("^●cd●(([\u4e00-\u8e00]*[\u3d01-\u3d06]?))", zero.OnlyGroup).SetBlock(true).FirstPriority().
Handle(func(ctx *zero.Ctx) {
if time.Now().Unix()-startTime < 10 {
msg, err := b14.UTF82utf16be(helper.StringToBytes(ctx.State["regex_matched"].([]string)[1]))
if err == nil {
gid := ctx.Event.GroupID
for _, s := range strings.Split(b14.DecodeString(msg), "\xfe\xff") {
mu.RLock()
c, ok := managers[s]
mu.RUnlock()
if ok && c.IsEnabledIn(gid) {
c.Disable(gid)
}
}
}
}
})
}
func genToken() (tok string, err error) {
timebytes := make([]byte, 8)
binary.BigEndian.PutUint64(timebytes, uint64(time.Now().Unix()))
timebytes, err = b14.UTF16be2utf8(b14.Encode(timebytes[1:]))
if err == nil {
tok = helper.BytesToString(timebytes)
}
return
}
func isValidToken(tok string) (yes bool) {
s, err := b14.UTF82utf16be(helper.StringToBytes(tok))
if err == nil {
timebytes := make([]byte, 1, 8)
timebytes = append(timebytes, b14.Decode(s)...)
yes = time.Now().Unix()-int64(binary.BigEndian.Uint64(timebytes)) < 10
}
return
}

View File

@@ -1,19 +0,0 @@
package control
import "testing"
func TestGenToken(t *testing.T) {
tok, err := genToken()
if err == nil {
t.Log(tok)
t.Log(isValidToken(tok))
t.Fail()
} else {
t.Fatal(err)
}
}
func TestMaru(t *testing.T) {
t.Log(len("\xff"))
t.Fail()
}

View File

@@ -1,31 +0,0 @@
package control
import (
zero "github.com/wdvxdr1123/ZeroBot"
)
var enmap = make(map[string]*zero.Engine)
// Register 注册插件控制器
func Register(service string, o *Options) *zero.Engine {
engine := zero.New()
engine.UsePreHandler(newctrl(service, o).Handler())
enmap[service] = engine
return engine
}
// Delete 删除插件控制器,不会删除数据
func Delete(service string) {
engine, ok := enmap[service]
if ok {
engine.Delete()
mu.RLock()
_, ok = managers[service]
mu.RUnlock()
if ok {
mu.Lock()
delete(managers, service)
mu.Unlock()
}
}
}

View File

@@ -1,352 +0,0 @@
// Package control 控制插件的启用与优先级等
package control
import (
"os"
"strconv"
"strings"
"sync"
"github.com/sirupsen/logrus"
zero "github.com/wdvxdr1123/ZeroBot"
"github.com/wdvxdr1123/ZeroBot/extension"
"github.com/wdvxdr1123/ZeroBot/message"
"github.com/FloatTech/ZeroBot-Plugin/utils/sql"
)
var (
db = &sql.Sqlite{DBPath: "data/control/plugins.db"}
// managers 每个插件对应的管理
managers = map[string]*Control{}
mu = sync.RWMutex{}
hasinit bool
)
// Control is to control the plugins.
type Control struct {
sync.RWMutex
service string
options Options
}
// newctrl returns Manager with settings.
func newctrl(service string, o *Options) *Control {
m := &Control{service: service,
options: func() Options {
if o == nil {
return Options{}
}
return *o
}(),
}
mu.Lock()
managers[service] = m
mu.Unlock()
err := db.Create(service, &grpcfg{})
if err != nil {
panic(err)
}
return m
}
// Enable enables a group to pass the Manager.
// groupID == 0 (ALL) will operate on all grps.
func (m *Control) Enable(groupID int64) {
var c grpcfg
m.RLock()
err := db.Find(m.service, &c, "WHERE gid = "+strconv.FormatInt(groupID, 10))
m.RUnlock()
if err != nil {
c.GroupID = groupID
}
c.Disable = int64(uint64(c.Disable) & 0xffffffff_fffffffe)
m.Lock()
err = db.Insert(m.service, &c)
m.Unlock()
if err != nil {
logrus.Errorf("[control] %v", err)
}
}
// Disable disables a group to pass the Manager.
// groupID == 0 (ALL) will operate on all grps.
func (m *Control) Disable(groupID int64) {
var c grpcfg
m.RLock()
err := db.Find(m.service, &c, "WHERE gid = "+strconv.FormatInt(groupID, 10))
m.RUnlock()
if err != nil {
c.GroupID = groupID
}
c.Disable |= 1
m.Lock()
err = db.Insert(m.service, &c)
m.Unlock()
if err != nil {
logrus.Errorf("[control] %v", err)
}
}
// Reset resets the default config of a group.
// groupID == 0 (ALL) is not allowed.
func (m *Control) Reset(groupID int64) {
if groupID != 0 {
m.Lock()
err := db.Del(m.service, "WHERE gid = "+strconv.FormatInt(groupID, 10))
m.Unlock()
if err != nil {
logrus.Errorf("[control] %v", err)
}
}
}
// IsEnabledIn 开启群
func (m *Control) IsEnabledIn(gid int64) bool {
var c grpcfg
var err error
logrus.Debugln("[control] IsEnabledIn recv gid =", gid)
if gid != 0 {
m.RLock()
err = db.Find(m.service, &c, "WHERE gid = "+strconv.FormatInt(gid, 10))
m.RUnlock()
if err == nil && gid == c.GroupID {
logrus.Debugf("[control] plugin %s of grp %d : %d", m.service, c.GroupID, c.Disable&1)
return c.Disable&1 == 0
}
}
m.RLock()
err = db.Find(m.service, &c, "WHERE gid = 0")
m.RUnlock()
if err == nil && c.GroupID == 0 {
logrus.Debugf("[control] plugin %s of all : %d", m.service, c.Disable&1)
return c.Disable&1 == 0
}
return !m.options.DisableOnDefault
}
// GetData 获取某个群的 63 字节配置信息
func (m *Control) GetData(gid int64) int64 {
var c grpcfg
var err error
logrus.Debugln("[control] IsEnabledIn recv gid =", gid)
if gid != 0 {
m.RLock()
err = db.Find(m.service, &c, "WHERE gid = "+strconv.FormatInt(gid, 10))
m.RUnlock()
if err == nil && gid == c.GroupID {
logrus.Debugf("[control] plugin %s of grp %d : %x", m.service, c.GroupID, c.Disable>>1)
return c.Disable >> 1
}
}
m.RLock()
err = db.Find(m.service, &c, "WHERE gid = 0")
m.RUnlock()
if err == nil && c.GroupID == 0 {
logrus.Debugf("[control] plugin %s of all : %x", m.service, c.Disable>>1)
return c.Disable >> 1
}
return 0
}
// SetData 为某个群设置低 63 位配置数据
func (m *Control) SetData(groupID int64, data int64) error {
var c grpcfg
m.RLock()
err := db.Find(m.service, &c, "WHERE gid = "+strconv.FormatInt(groupID, 10))
m.RUnlock()
if err != nil {
c.GroupID = groupID
if m.options.DisableOnDefault {
c.Disable = 1
}
}
c.Disable |= data << 1
logrus.Debugf("[control] set plugin %s of all : %x", m.service, data)
m.Lock()
err = db.Insert(m.service, &c)
m.Unlock()
if err != nil {
logrus.Errorf("[control] %v", err)
}
return err
}
// Handler 返回 预处理器
func (m *Control) Handler() zero.Rule {
return func(ctx *zero.Ctx) bool {
ctx.State["manager"] = m
grp := ctx.Event.GroupID
if grp == 0 {
// 个人用户
grp = -ctx.Event.UserID
}
logrus.Debugln("[control] handler get gid =", grp)
return m.IsEnabledIn(grp)
}
}
// Lookup returns a Manager by the service name, if
// not exist, it will returns nil.
func Lookup(service string) (*Control, bool) {
mu.RLock()
m, ok := managers[service]
mu.RUnlock()
return m, ok
}
// ForEach iterates through managers.
func ForEach(iterator func(key string, manager *Control) bool) {
mu.RLock()
m := copyMap(managers)
mu.RUnlock()
for k, v := range m {
if !iterator(k, v) {
return
}
}
}
func copyMap(m map[string]*Control) map[string]*Control {
ret := make(map[string]*Control, len(m))
for k, v := range m {
ret[k] = v
}
return ret
}
func userOrGrpAdmin(ctx *zero.Ctx) bool {
if zero.OnlyGroup(ctx) {
return zero.AdminPermission(ctx)
}
return zero.OnlyToMe(ctx)
}
func init() {
if !hasinit {
mu.Lock()
if !hasinit {
err := os.MkdirAll("data/control", 0755)
if err != nil {
panic(err)
} else {
hasinit = true
zero.OnCommandGroup([]string{
"启用", "enable", "禁用", "disable",
"全局启用", "enableall", "全局禁用", "disableall",
}, userOrGrpAdmin).Handle(func(ctx *zero.Ctx) {
model := extension.CommandModel{}
_ = ctx.Parse(&model)
service, ok := Lookup(model.Args)
if !ok {
ctx.SendChain(message.Text("没有找到指定服务!"))
return
}
grp := ctx.Event.GroupID
if grp == 0 {
// 个人用户
grp = -ctx.Event.UserID
}
if strings.Contains(model.Command, "全局") || strings.Contains(model.Command, "all") {
grp = 0
}
if strings.Contains(model.Command, "启用") || strings.Contains(model.Command, "enable") {
service.Enable(grp)
ctx.SendChain(message.Text("已启用服务: " + model.Args))
} else {
service.Disable(grp)
ctx.SendChain(message.Text("已禁用服务: " + model.Args))
}
})
zero.OnCommandGroup([]string{"还原", "reset"}, userOrGrpAdmin).Handle(func(ctx *zero.Ctx) {
model := extension.CommandModel{}
_ = ctx.Parse(&model)
service, ok := Lookup(model.Args)
if !ok {
ctx.SendChain(message.Text("没有找到指定服务!"))
return
}
grp := ctx.Event.GroupID
if grp == 0 {
// 个人用户
grp = -ctx.Event.UserID
}
service.Reset(grp)
ctx.SendChain(message.Text("已还原服务的默认启用状态: " + model.Args))
})
zero.OnCommandGroup([]string{"用法", "usage"}, userOrGrpAdmin).
Handle(func(ctx *zero.Ctx) {
model := extension.CommandModel{}
_ = ctx.Parse(&model)
service, ok := Lookup(model.Args)
if !ok {
ctx.SendChain(message.Text("没有找到指定服务!"))
return
}
if service.options.Help != "" {
ctx.SendChain(message.Text(service.options.Help))
} else {
ctx.SendChain(message.Text("该服务无帮助!"))
}
})
zero.OnCommandGroup([]string{"服务列表", "service_list"}, userOrGrpAdmin).
Handle(func(ctx *zero.Ctx) {
msg := `---服务列表---`
i := 0
gid := ctx.Event.GroupID
ForEach(func(key string, manager *Control) bool {
i++
msg += "\n" + strconv.Itoa(i) + `: `
if manager.IsEnabledIn(gid) {
msg += "●" + key
} else {
msg += "○" + key
}
return true
})
ctx.SendChain(message.Text(msg))
})
zero.OnCommandGroup([]string{"服务详情", "service_detail"}, userOrGrpAdmin).
Handle(func(ctx *zero.Ctx) {
var m message.Message
m = append(m,
message.CustomNode(
ctx.Event.Sender.NickName,
ctx.Event.UserID,
"---服务详情---",
))
i := 0
ForEach(func(key string, manager *Control) bool {
service, _ := Lookup(key)
help := service.options.Help
i++
msg := strconv.Itoa(i) + `: `
if manager.IsEnabledIn(ctx.Event.GroupID) {
msg += "●" + key
} else {
msg += "○" + key
}
msg += "\n" + help
m = append(m,
message.CustomNode(
ctx.Event.Sender.NickName,
ctx.Event.UserID,
msg,
))
return true
})
ctx.SendGroupForwardMessage(
ctx.Event.GroupID,
m,
)
})
}
}
mu.Unlock()
}
}

View File

@@ -1,13 +0,0 @@
package control
// grpcfg holds the group config for the Manager.
type grpcfg struct {
GroupID int64 `db:"gid"` // GroupID 群号
Disable int64 `db:"disable"` // Disable 默认启用该插件
}
// Options holds the optional parameters for the Manager.
type Options struct {
DisableOnDefault bool
Help string // 帮助文本信息
}

View File

@@ -1,564 +0,0 @@
// Package webctrl
/*
* 一个用户webui的包里面包含了webui所需的所有内容
*/
package webctrl
import (
"encoding/json"
"fmt"
"io"
"net/http"
"os"
"strconv"
"sync"
manager "github.com/FloatTech/bot-manager"
// 依赖gin监听server
"github.com/gin-gonic/gin"
"github.com/gorilla/websocket"
// 前端静态文件
log "github.com/sirupsen/logrus"
zero "github.com/wdvxdr1123/ZeroBot"
"github.com/wdvxdr1123/ZeroBot/message"
ctrl "github.com/FloatTech/ZeroBot-Plugin/control"
)
var (
// 向前端推送消息的ws链接
conn *websocket.Conn
// 向前端推送日志的ws链接
logConn *websocket.Conn
l logWriter
// 存储请求事件flag作为键一个request对象作为值
requestData sync.Map
)
// logWriter
// @Description:
//
type logWriter struct {
}
// request
// @Description: 一个请求事件的结构体
//
type request struct {
RequestType string `json:"request_type"`
SubType string `json:"sub_type"`
Type string `json:"type"`
Comment string `json:"comment"`
GroupID int64 `json:"group_id"`
UserID int64 `json:"user_id"`
Flag string `json:"flag"`
SelfID int64 `json:"self_id"`
}
// InitGui 初始化gui
func InitGui(addr string) {
// 将日志重定向到前端hook
writer := io.MultiWriter(l, os.Stdout)
log.SetOutput(writer)
// 监听后端
go controller(addr)
// 注册消息handle
messageHandle()
}
// websocket的协议升级
var upGrader = websocket.Upgrader{
CheckOrigin: func(r *http.Request) bool {
return true
},
}
func controller(addr string) {
defer func() {
err := recover()
if err != nil {
log.Errorln("[gui]" + "bot-manager出现不可恢复的错误")
log.Errorln("[gui]", err)
}
}()
engine := gin.New()
// 支持跨域
engine.Use(cors())
// 注册静态文件
engine.StaticFS("/dist", http.FS(manager.Dist))
engine.POST("/get_bots", getBots)
engine.POST("/get_group_list", getGroupList)
engine.POST("/get_friend_list", getFriendList)
// 注册主路径路由,使其跳转到主页面
engine.GET("/", func(context *gin.Context) {
context.Redirect(http.StatusMovedPermanently, "/dist/dist/default.html")
})
// 更改某个插件状态
engine.POST("/update_plugin_status", updatePluginStatus)
// 更改某一个插件在所有群的状态
engine.POST("/update_plugin_all_group_status", updatePluginAllGroupStatus)
// 更改所有插件状态
engine.POST("/update_all_plugin_status", updateAllPluginStatus)
// 获取所有插件状态
engine.POST("/get_plugins_status", getPluginsStatus)
// 获取一个插件状态
engine.POST("/get_plugin_status", getPluginStatus)
// 获取插件列表
engine.POST("/get_plugins", func(context *gin.Context) {
var datas []map[string]interface{}
ctrl.ForEach(func(key string, manager *ctrl.Control) bool {
datas = append(datas, map[string]interface{}{"id": 1, "handle_type": "", "name": key, "enable": manager.IsEnabledIn(0)})
return true
})
context.JSON(200, datas)
})
// 获取所有请求
engine.POST("/get_requests", getRequests)
// 执行一个请求事件
engine.POST("handle_request", handelRequest)
// 链接日志
engine.GET("/get_log", getLogs)
// 获取前端标签
engine.GET("/get_label", func(context *gin.Context) {
context.JSON(200, "ZeroBot-Plugin")
})
// 发送信息
engine.POST("/send_msg", sendMsg)
engine.GET("/data", upgrade)
log.Infoln("[gui] the webui is running on", addr)
log.Infoln("[gui] ", "you input the `ZeroBot-Plugin.exe -g` can disable the gui")
if err := engine.Run(addr); err != nil {
log.Debugln("[gui] ", err.Error())
}
}
// handelRequest
/**
* @Description: 处理一个请求
* @param context
*/
func handelRequest(context *gin.Context) {
var data map[string]interface{}
err := context.BindJSON(&data)
if err != nil {
context.JSON(404, nil)
return
}
r, ok := requestData.LoadAndDelete(data["flag"].(string))
if !ok {
context.JSON(404, "flag not found")
}
r2 := r.(*request)
r2.handle(data["approve"].(bool), data["reason"].(string))
context.JSON(200, "操作成功")
}
// getRequests
/**
* @Description: 获取所有的请求
* @param context
*/
func getRequests(context *gin.Context) {
var data []interface{}
requestData.Range(func(key, value interface{}) bool {
data = append(data, value)
return true
})
context.JSON(200, data)
}
// updateAllPluginStatus
/**
* @Description: 改变所有插件的状态
* @param context
* example
*/
func updateAllPluginStatus(context *gin.Context) {
enable, err := strconv.ParseBool(context.PostForm("enable"))
if err != nil {
var parse map[string]interface{}
err := context.BindJSON(&parse)
if err != nil {
log.Errorln("[gui] " + err.Error())
return
}
enable = parse["enable"].(bool)
}
ctrl.ForEach(func(key string, manager *ctrl.Control) bool {
if enable {
manager.Enable(0)
} else {
manager.Disable(0)
}
return true
})
context.JSON(200, nil)
}
// updatePluginAllGroupStatus
/**
* @Description: 改变插件在所有群的状态
* @param context
* example
*/
func updatePluginAllGroupStatus(context *gin.Context) {
name := context.PostForm("name")
enable, err := strconv.ParseBool(context.PostForm("enable"))
if err != nil {
var parse map[string]interface{}
err := context.BindJSON(&parse)
if err != nil {
log.Errorln("[gui]" + err.Error())
return
}
name = parse["name"].(string)
enable = parse["enable"].(bool)
}
control, b := ctrl.Lookup(name)
if !b {
context.JSON(404, nil)
return
}
if enable {
control.Enable(0)
} else {
control.Disable(0)
}
context.JSON(200, nil)
}
// updatePluginStatus
/**
* @Description: 更改某一个插件状态
* @param context
* example
*/
func updatePluginStatus(context *gin.Context) {
var parse map[string]interface{}
err := context.BindJSON(&parse)
if err != nil {
log.Errorln("[gui] ", err)
return
}
groupID := int64(parse["group_id"].(float64))
name := parse["name"].(string)
enable := parse["enable"].(bool)
fmt.Println(name)
control, b := ctrl.Lookup(name)
if !b {
context.JSON(404, "服务不存在")
return
}
if enable {
control.Enable(groupID)
} else {
control.Disable(groupID)
}
context.JSON(200, nil)
}
// getPluginStatus
/**
* @Description: 获取一个插件的状态
* @param context
* example
*/
func getPluginStatus(context *gin.Context) {
groupID, err := strconv.ParseInt(context.PostForm("group_id"), 10, 64)
name := context.PostForm("name")
if err != nil {
var parse map[string]interface{}
err := context.BindJSON(&parse)
if err != nil {
log.Errorln("[gui]" + err.Error())
return
}
groupID = int64(parse["group_id"].(float64))
name = parse["name"].(string)
}
control, b := ctrl.Lookup(name)
if !b {
context.JSON(404, "服务不存在")
return
}
context.JSON(200, gin.H{"enable": control.IsEnabledIn(groupID)})
}
// getPluginsStatus
/**
* @Description: 获取所有插件的状态
* @param context
* example
*/
func getPluginsStatus(context *gin.Context) {
groupID, err := strconv.ParseInt(context.PostForm("group_id"), 10, 64)
if err != nil {
var parse map[string]interface{}
err := context.BindJSON(&parse)
if err != nil {
log.Errorln("[gui]" + err.Error())
return
}
groupID = int64(parse["group_id"].(float64))
}
var datas []map[string]interface{}
ctrl.ForEach(func(key string, manager *ctrl.Control) bool {
enable := manager.IsEnabledIn(groupID)
datas = append(datas, map[string]interface{}{"name": key, "enable": enable})
return true
})
context.JSON(200, datas)
}
// getLogs
/**
* @Description: 连接日志
* @param context
* example
*/
func getLogs(context *gin.Context) {
con1, err := upGrader.Upgrade(context.Writer, context.Request, nil)
if err != nil {
return
}
logConn = con1
}
// getFriendList
/**
* @Description: 获取好友列表
* @param context
* example
*/
func getFriendList(context *gin.Context) {
selfID, err := strconv.Atoi(context.PostForm("self_id"))
if err != nil {
log.Errorln("[gui]" + err.Error())
var data map[string]interface{}
err := context.BindJSON(&data)
if err != nil {
log.Errorln("[gui]" + err.Error())
log.Errorln("[gui]" + "绑定错误")
return
}
selfID = int(data["self_id"].(float64))
}
bot := zero.GetBot(int64(selfID))
var resp []interface{}
list := bot.GetFriendList().String()
err = json.Unmarshal([]byte(list), &resp)
if err != nil {
log.Errorln("[gui]" + err.Error())
log.Errorln("[gui]" + "解析json错误")
}
context.JSON(200, resp)
}
// getGroupList
/**
* @Description: 获取群列表
* @param context
* example
*/
func getGroupList(context *gin.Context) {
selfID, err := strconv.Atoi(context.PostForm("self_id"))
if err != nil {
var data map[string]interface{}
err := context.BindJSON(&data)
if err != nil {
log.Errorln("[gui]" + err.Error())
return
}
selfID = int(data["self_id"].(float64))
}
bot := zero.GetBot(int64(selfID))
var resp []interface{}
list := bot.GetGroupList().String()
err = json.Unmarshal([]byte(list), &resp)
if err != nil {
log.Errorln("[gui]" + err.Error())
}
context.JSON(200, resp)
}
// getBots
/**
* @Description: 获取机器人qq号
* @param context
* example
*/
func getBots(context *gin.Context) {
var bots []int64
zero.RangeBot(func(id int64, ctx *zero.Ctx) bool {
bots = append(bots, id)
return true
})
context.JSON(200, bots)
}
// MessageHandle
/**
* @Description: 定义一个向前端发送信息的handle
* example
*/
func messageHandle() {
defer func() {
err := recover()
if err != nil {
log.Errorln("[gui]" + "bot-manager出现不可恢复的错误")
log.Errorln("[gui] ", err)
}
}()
matcher := zero.OnMessage().SetBlock(false).SetPriority(1)
matcher.Handle(func(ctx *zero.Ctx) {
if conn != nil {
err := conn.WriteJSON(ctx.Event)
if err != nil {
log.Debugln("[gui] " + "向发送错误")
return
}
}
})
// 直接注册一个request请求监听器优先级设置为最高设置不阻断事件传播
zero.OnRequest(func(ctx *zero.Ctx) bool {
if ctx.Event.RequestType == "friend" {
ctx.State["type_name"] = "好友添加"
} else {
if ctx.Event.SubType == "add" {
ctx.State["type_name"] = "加群请求"
} else {
ctx.State["type_name"] = "群邀请"
}
}
return true
}).SetBlock(false).FirstPriority().Handle(func(ctx *zero.Ctx) {
r := &request{
RequestType: ctx.Event.RequestType,
SubType: ctx.Event.SubType,
Type: ctx.State["type_name"].(string),
GroupID: ctx.Event.GroupID,
UserID: ctx.Event.UserID,
Flag: ctx.Event.Flag,
Comment: ctx.Event.Comment,
SelfID: ctx.Event.SelfID,
}
requestData.Store(ctx.Event.Flag, r)
})
}
// upgrade
/**
* @Description: 连接ws向前端推送message
* @param context
* example
*/
func upgrade(context *gin.Context) {
con, err := upGrader.Upgrade(context.Writer, context.Request, nil)
if err != nil {
return
}
conn = con
}
// sendMsg
/**
* @Description: 前端调用发送信息
* @param context
* example
*/
func sendMsg(context *gin.Context) {
var data map[string]interface{}
err := context.BindJSON(&data)
if err != nil {
context.JSON(404, nil)
return
}
selfID := int64(data["self_id"].(float64))
id := int64(data["id"].(float64))
message1 := data["message"].(string)
messageType := data["message_type"].(string)
bot := zero.GetBot(selfID)
var msgID int64
if messageType == "group" {
msgID = bot.SendGroupMessage(id, message.ParseMessageFromString(message1))
} else {
msgID = bot.SendPrivateMessage(id, message.ParseMessageFromString(message1))
}
context.JSON(200, msgID)
}
// cors
/**
* @Description: 支持跨域访问
* @return gin.HandlerFunc
* example
*/
func cors() gin.HandlerFunc {
return func(c *gin.Context) {
method := c.Request.Method
origin := c.Request.Header.Get("Origin") // 请求头部
if origin != "" {
// 接收客户端发送的origin (重要!)
c.Writer.Header().Set("Access-Control-Allow-Origin", origin)
// 服务器支持的所有跨域请求的方法
c.Header("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE,UPDATE")
// 允许跨域设置可以返回其他子段,可以自定义字段
c.Header("Access-Control-Allow-Headers", "Authorization, Content-Length, X-CSRF-Token, Token,session, Content-Type")
// 允许浏览器(客户端)可以解析的头部 (重要)
c.Header("Access-Control-Expose-Headers", "Content-Length, Access-Control-Allow-Origin, Access-Control-Allow-Headers")
// 设置缓存时间
c.Header("Access-Control-Max-Age", "172800")
// 允许客户端传递校验信息比如 cookie (重要)
c.Header("Access-Control-Allow-Credentials", "true")
}
// 允许类型校验
if method == "OPTIONS" {
c.JSON(http.StatusOK, "ok!")
}
defer func() {
if err := recover(); err != nil {
log.Printf("Panic info is: %v", err)
}
}()
c.Next()
}
}
// handle
/**
* @Description: 提交一个请求
* @receiver r
* @param approve 是否通过
* @param reason 拒绝的理由
*/
func (r *request) handle(approve bool, reason string) {
bot := zero.GetBot(r.SelfID)
if r.RequestType == "friend" {
bot.SetFriendAddRequest(r.Flag, approve, "")
} else {
bot.SetGroupAddRequest(r.Flag, r.SubType, approve, reason)
}
log.Debugln("[gui] ", "已处理", r.UserID, "的"+r.Type)
}
func (l logWriter) Write(p []byte) (n int, err error) {
if logConn != nil {
err := logConn.WriteMessage(websocket.TextMessage, p)
if err != nil {
return len(p), nil
}
}
return len(p), nil
}

1
data Submodule

Submodule data added at cf3c143aa9

View File

@@ -1,45 +0,0 @@
<EFBFBD>雍晄級謚ス謌択衍オ蝌臥鬪大惠謌題レ荳嬉衍オ譎壽劒雕ゥ謌択衍オ荵<EFBFBD>正蝮仙惠邇句コァ譏ッ逕ィ逵句档蝨セ逧<EFBFBD>愍逾樒恚謌択衍オ<EFBFBD>オ迴井ケ占ク謌択衍オ<EFBFBD><EFBFBD>梧滑謌醍愍逹幄貯菴冗蜷惹コ泌宵閼壻ク€襍キ雕ゥ謌択衍オ霑倩ョゥ謌醍懸閼壽弍隹<EFBFBD>檎懸髞吩コ<EFBFBD>サ呎<EFBFBD>蜉育愍荳€昨衍オ
<EFBFBD> 謌大ス諠ウ蛛壼<EFBFBD>辟カ蟆丞ァ千噪迢怜賦縲ょ庄譏ッ蝌臥蟆丞ァ占ッエ螂ケ蝟懈ャ<EFBFBD>弍迪ォ<EFBFBD><EFBFBD>蜩ュ莠<EFBFBD>€<EFBFBD>驕捺里荳肴弍迢嶺ケ滉ク肴弍迪ォ逧<EFBFBD><EFBFBD>荳コ莉€荵郁ヲ働逧<EFBFBD>€ょ屏荳コ謌大<EFBFBD>螳樊弍荳€蜿ェ閠<EFBFBD><EFBFBD>縲よ<EFBFBD>莉取イ譛帛<EFBFBD>辟カ蟆丞ァ占<EFBFBD>蝟懈ャ閾ェ蟾ア縲よ<EFBFBD>譏守區逧<EFBFBD>シ梧園譛我ココ驛ス蝟懈ャ<EFBFBD>菴呵穂ク頑焔螟ゥ謇肴遠髓ア逧<EFBFBD>酔關檎噪迢礼距謌冶€<EFBFBD>賢迪ォ<EFBFBD>梧イ譛我ココ莨壼万谺髦エ貉ソ蟶ヲ逞<EFBFBD>噪閠<EFBFBD><EFBFBD>縲ゆス<EFBFBD><EFBFBD>霑俶弍髣ョ莠<EFBFBD><EFBFBD>辟カ蟆丞ァ<EFBFBD>:窶懈<EFBFBD>閭ス荳崎<EFBFBD>蛛壻ス<EFBFBD><EFBFBD><EFBFBD>€<EFBFBD>驕捺<EFBFBD>譏ッ豕ィ螳壼荳堺コ<EFBFBD>距逧<EFBFBD>€ゆス<EFBFBD>ヲよ棡螂ケ蝟懈ャ迢暦シ梧<EFBFBD>蟆ア蜿ッ莉€逶エ蝨ィ霄ォ霎ケ逵狗捩螂ケ莠<EFBFBD>シ悟頭諤募ケ諤€驥梧干逹€<EFBFBD>ーク霑憺<EFBFBD>譏ッ迢励€ょ庄譏ッ螂ケ隸エ蝟懈ャ<EFBFBD>弍迪ォ縲ょケ邇ー蝨ィ霑伜惠逵狗捩謌托シ瑚ソ伜惠騾玲<EFBFBD>€<EFBFBD>シ梧弍蝗<EFBFBD>荳コ迪ォ霑俶イ譛牙<EFBFBD>邇ー<EFBFBD>悟宵譛画<EFBFBD>霑呵€<EFBFBD><EFBFBD>豈丞ゥ雹第焔雹題<EFBFBD>蝨ー莉取エ樣辷ャ蜃コ譚<EFBFBD>瑚ソ懆ソ懷慍蜥悟ケ蟇ケ隗<EFBFBD>€らュ牙ケ蝟懈ャ<EFBFBD>賢譚<EFBFBD>噪譌カ蛟呻シ梧<EFBFBD>蟆ア隸驥肴眠貊壼屓謌醍噪豢樔コ<EFBFBD>制縲ゆス<EFBFBD><EFBFBD>霑俶弍螂ス蝟懈ャ螂ケ<EFBFBD>ケ閭ス蝨ィ謌題ソ伜惠螂ケ霄ォ霎ケ逧<EFBFBD>慮蛟吝夂恚謌大<EFBFBD>逵シ蜷暦シ溷<EFBFBD>辟カ蟆丞ァ占ッエ謗荳区擂逧<EFBFBD>ッ丈クェ蝨隸槫<EFBFBD>柱螟ァ螳カ荳€襍キ霑<EFBFBD>€<EFBFBD>荳咲衍驕灘ァ螳カ謖<EFBFBD>頭莠帑ココ縲ょス蟶梧悍霑吩クェ髮<EFBFBD>粋閭ス螟溷ッケ謌大€閭槫裾縲ら賢迪ォ霑伜惠螳ウ諤募<EFBFBD>辟カ蟆丞ァ舌€<EFBFBD>莨壼悉謚雁ケ辷ア逧<EFBFBD>賢迪ォ蠑墓擂逧<EFBFBD>€<EFBFBD>驕鍋ィ肴怏荳肴<EFBFBD><EFBFBD><EFBFBD>蟆ア莨夊速霄ォ迪ォ蜿縲るぅ譌カ蛟吝<EFBFBD>辟カ蟆丞ァ仙ァ讎ゆシ壽滑謌醍噪霄ォ菴灘ス螂ス蝨ー陬<EFBFBD>オキ譚謇泌芦髣ィ螟門制縲るぅ謌大ーア謌蝉コ<EFBFBD>€<EFBFBD><EFBFBD><EFBFBD>悟仆蝌サ縲よ<EFBFBD>蟶梧悍螂ケ閭ス謚頑<EFBFBD>謇泌セ苓ソ台ク€轤ケ<EFBFBD>悟屏荳コ謌題ソ俶弍螂ス蝟懈ャ螂ケ縲ゆシ壻ク€逶エ蝟懈ャ荳句悉逧<EFBFBD>€<EFBFBD><EFBFBD><EFBFBD>鬲る€剰ソ<EFBFBD>ェ玲姐蜷鷹逵句悉<EFBFBD>梧撃逹€<EFBFBD>塔體帛惠霓サ霓サ鮑蜩搾シ悟<EFBFBD>辟カ蟆丞ァ先<EFBFBD>諛貞慍髱<EFBFBD>蝨ィ豐吝書荳奇シ瑚ィ貍泌セ鈴撼蟶ク貂ゥ鬘コ逧<EFBFBD>ゥ倡賢蝮仙惠螂ケ逧<EFBFBD>か閹€縲ょi逧<EFBFBD>蜈臥<EFBFBD>蝨ィ螂ケ逧<EFBFBD>蠎橸シ梧<EFBFBD>蜀サ蜒オ逧<EFBFBD>ソ<EFBFBD>э蝨ィ鬟朱蠕ョ蠕ョ蜿醍Ν縲<EFBFBD>
€繝翫繧薙<EFBFBD>迥ャ縺ォ縺ェ繧翫<EFBFBD>.縺代€€繝翫繧薙縲檎賢縺悟ス縺阪€€縺溘€€縺ゅ繧翫蜒輔<EFBFBD><EFBFBD>縺励<EFBFBD>.迪ォ縺ァ繧ら堪縺ァ繧ゅ<EFBFBD>ヵ縺後€€菴墓腐豕<EFBFBD>縺ョ縺九€蜒輔<EFBFBD>縺ヲ縺<EFBFBD>.菴墓腐縺ェ繧峨€€蜒輔<EFBFBD><EFBFBD><EFBFBD>縺溘°繧峨<EFBFBD><EFBFBD>..€蠎ヲ繧ゅム繧繝翫繧薙螂ス縺九l繧九縺ィ繧呈悍縺セ縺ェ縺後縺溘€€.蜒輔<EFBFBD>繧上縺ヲ縺<EFBFBD>€隱ー繧ゅ°繧ら炊隗菴呵穂ク頑焔螟ゥ謇阪<EFBFBD>蜿ッ諢帙驥第戟縺縺ョ迥ャ縺狗賢縺後縺阪縺ヲ縺薙<EFBFBD>.髯ー繧ュ繝縺ァ豎壹i繧上<EFBFBD>縺ッ隱ー繧ょス縺九s縺ョ縺<EFBFBD>..縺昴l縺ァ繧<EFBFBD>iana縺輔縺ォ閨槭縺ヲ縺ソ縺滂シ咼iana縺輔縺ョ迥ャ縺ォ縺ェ縺縺ヲ繧り憶縺<EFBFBD>縺吶°縺ィ.蜒輔縺ッ荳€逕溽堪縺ォ縺ェ繧後<EFBFBD>縺ィ縺ッ蛻<EFBFBD>°縺ヲ縺<EFBFBD>.縺ァ繧ゅb縺怜スシ螂ウ縺ッ迥ャ縺悟ス縺阪縺溘i縲€蜒輔<EFBFBD>縺壹縺ィ蛯阪隕九<EFBFBD>i繧後k.縺昴l縺ッ縺<EFBFBD>繧る<EFBFBD>縺ャ繧偵<EFBFBD>縺ヲ縺<EFBFBD>k縺ィ縺励<EFBFBD>..縺代l縺ゥ蠖シ螂ウ縺ッ迪ォ縺悟ス縺阪<EFBFBD>.蠖シ螂ウ縺ッ莉翫繧ょヵ繧定ヲ九<EFBFBD>k縲€縺シ縺上r讌ス縺励縺帙縺上l繧九€€縺昴l縺ッ迪ォ縺後<EFBFBD>陦ィ繧後<EFBFBD><EFBFBD>°<EFBFBD>.縺溘縺薙<EFBFBD><EFBFBD>縺梧ッ取律縺薙縺薙縺ィ遨エ縺九i蜃コ縺ヲ縲€<EFBFBD>縺上°繧臥岼繧貞粋縺縺ヲ縺<EFBFBD>.蠖シ螂ウ縺ョ螂ス縺阪迪ォ縺檎樟繧後繧峨€€蜒輔<EFBFBD>遨エ縺ォ謌サ繧九縺九<EFBFBD>..縺ァ繧ゅd縺縺ア繧雁スシ螂ウ縺悟ス縺阪<EFBFBD>i繧後<EFBFBD>€€蜒輔縺セ縺<EFBFBD>蛯阪<EFBFBD>k縺ィ縺阪繧峨€繧ゅ<EFBFBD>縺ソ縺ヲ縺上l繧九<EFBFBD>縺九.Diana縺輔縺後繧後°繧画ッ主屓縺ョ繧ッ繝ェ繧ケ繝槭せ縺ソ繧薙縺ィ荳€邱偵驕弱縺吶€縺溘€€縺ソ繧薙縺後縺ョ貂繧翫<EFBFBD>縺ソ繧薙縺九.蜒輔繧ゆクュ縺ォ蜈繧後繧後<EFBFBD>..迪ォ縺ッ縺セ縺<EFBFBD>縺セ縺<EFBFBD>Diana縺輔繧呈€縺ヲ縺<EFBFBD>.蜒輔蠖シ螂ウ縺ョ諢帙繧狗賢繧貞シ輔莉倥繧九h.蟆代縺ョ繝溘せ縺ァ迪ォ縺ョ蜿縺ォ豁サ縺ャ縺薙縺ッ繧上縺ヲ縺<EFBFBD>.縺昴<EFBFBD>譎ゅ縺ェ繧九縺溘<EFBFBD>繧泥iana縺輔縺ッ蜒輔<EFBFBD>菴薙r縺<EFBFBD>s縺ィ蛹<EFBFBD>霎シ繧薙€<EFBFBD>未螟悶謐ィ縺ヲ繧九縺励g.縺昴l縺ァ蜒輔<EFBFBD>繝輔Λ繧繝磯シ<EFBFBD>縺ォ縺ェ縺縺溘€€縺上.蠖シ螂ウ縺ォ蟆代霑代謐ィ縺ヲ縺ヲ縺サ縺励縺ェ縲€<EFBFBD>縺ヲ繧<EFBFBD>縺ア繧雁ス縺阪縺九i縲€縺昴l縺壹縺ィ螂ス縺阪<EFBFBD>..蜒輔<EFBFBD>縺溘縺励<EFBFBD>遯薙r雜翫縺ヲ荳ュ繧定ヲ九k縲€蜷翫縺ヲ縺<EFBFBD>k驤エ縺悟ー代髻ソ縺縺ヲ.Diana縺輔縺ッ縺<EFBFBD>繧峨j縺ィ繧ス繝輔ぃ繝シ縺ォ蟇<EFBFBD>j縺九°縺ヲ縲€謇区<EFBFBD>繧後<EFBFBD>k縺オ繧翫r縺吶k讖倡賢縺悟スシ螂ウ縺ョ閧ゥ縺ォ蠎ァ縺縺ヲ.證也i縺ョ蜈峨蠖シ螂ウ縺ョ鬘斐r辣ァ繧峨縺溘€€蜃阪j莉倥縺溷ヵ縺ョ蠢<EFBFBD>縺ッ縺九縺ョ荳ュ縺ァ辭ア縺上縺ヲ縺<EFBFBD>
<EFBFBD>譫晄ア溷ー城芙譁ー譚<EFBFBD>€菴堺ソョ螂ウ<EFBFBD>悟埋濶ッ貂ゥ譟皮噪菫ョ螂ウ縲ょケ荳咲鯵隶イ隸晢シ悟宵譏ッ蠕ョ隨醍捩髱蟇ケ豈丈ク€荳ェ蟇ケ螂ケ逾キ蜻顔噪莠コ縲よ怏逧<EFBFBD>ココ蟶梧悍蟄ゥ蟄仙蠎キ<EFBFBD>梧怏逧<EFBFBD>ココ蟶梧悍蠎<EFBFBD>ィシ辭ャ霑<EFBFBD><EFBFBD>螟ゥ<EFBFBD>梧怏逧<EFBFBD>ココ蟶梧悍閭ス謖蛻ー髓ア蜈サ豢サ螳カ莠コ縲ゅ€€€ケ驛ス逕ィ蠢<EFBFBD>成逹€<EFBFBD>悟セョ隨醍噪蝗槫コ皮捩縲ょケ霄ォ譚千洌蟆擾シ御ス<EFBFBD>弍蜊エ隶ゥ莠コ隗牙セ怜<EFBFBD>譎コ諷ァ<EFBFBD>ケ豐蛾サ伜ッ€<EFBFBD>御ス<EFBFBD>弍蜊エ莨夊ョゥ莠コ譌<EFBFBD>豈比ソ襍悶€りソ呎弍螂ケ莉サ閨悟ソォ貊€荳ェ譛育噪譌カ蛟呻シ梧蕗蝣ょ書逕滉コ<EFBFBD>ァ莠具シ御ク€荳ェ驢画ア牙書邇ー逾櫁莠コ蜻伜茜逕ィ謨吝<EFBFBD>ょ惠豺ア螟懆ソ幄ァ謇ケ襍<EFBFBD><EFBFBD><EFBFBD><EFBFBD>豎我シ<EFBFBD><EFBFBD>樔ケ主<EFBFBD>逾橸シ御ク我ココ謌占剋譛€扈亥シ戊オキ螳螳伜燕譚<EFBFBD>衍縲よ蕗荳サ陲ォ蟶ヲ襍ー<EFBFBD>梧蕗蝣る勁莠<EFBFBD>ぅ菴崎賢辟カ逧<EFBFBD>眠譚菫ョ螂ウ蜈カ莉紋ココ荳€<EFBFBD>€梧淵縲ゆソョ螂ウ陲ォ霑ォ謇ソ諡<EFBFBD>捩譛ャ荳榊コ碑ッ螻樔コ主ケ逧<EFBFBD>髫セ<EFBFBD>瑚セア鬪ゑシ御ス<EFBFBD>弍螂ケ豈丞ゥ驛ス隶逵溽噪蜷台クサ逾キ蜻奇シ悟€セ蜷ャ譚謨吝<EFBFBD>ゆケ倶ココ逧<EFBFBD>€セ隸峨€ょ庄譏ッ譬ケ譛ャ豐譛我ココ蜷大ケ蛟セ隸会シ梧擂逧<EFBFBD>ココ荳肴弍蝨ィ鬪ょ<EFBFBD>悟ーア譏ッ蝨ィ蜿第ウ<EFBFBD>函豢サ逧<EFBFBD>ク肴サ縲ょケ荳€蟾ア荵句鴨諡シ蜻ス謇ソ諡<EFBFBD>シ梧イ莠コ遏驕捺弍莉€荵井スソ螂ケ螯よュ蝮壽戟縲ら峩蛻ー螳螳伜クヲ蝗樔コ<EFBFBD>蕗荳サ<EFBFBD>悟相隸蛾芙豌鷹ぅ譏ッ謨吩クサ蝨ィ荳ュ螟ョ荳サ謨咎ぅ驥悟セ怜芦逧<EFBFBD>シ檎岼逧<EFBFBD>弍荳コ髟<EFBFBD>ー醍<EFBFBD><EFBFBD><EFBFBD>螟ゥ謇€€ケー邊ョ鬟溽噪髓ア雍縲ゆク€譌カ髣エ髟<EFBFBD>ー第ャ蜻シ襍キ謨吩クサ<EFBFBD>荳サ逧<EFBFBD><EFBFBD><EFBFBD>梧峩螟夂噪莠コ蠑€蟋区峩蜉<EFBFBD>辷ア荳贋コ<EFBFBD>ぅ荳ェ菫ョ螂ウ縲よ怏逧<EFBFBD>ココ謚雁ケ豈比ス懃寺蛻ゥ莠夲シ梧怏莠帑ココ謚雁ケ螂我クコ逾樊<EFBFBD><EFBFBD>ケ驛ス荳€€諡堤サ昜コ<EFBFBD>€らサ<EFBFBD>ソ<EFBFBD>噪髟<EFBFBD>ー台シ壼書邇ー霑吩ス堺ソョ螂ウ蜿倅コ<EFBFBD>シ悟序蠕苓ッ晏夊オキ譚<EFBFBD>シ御ケ溷序蠕玲峩蝟懈ャ<EFBFBD>惠謨吝<EFBFBD><EFBFBD>シ御ケ溷序蠕礼ヲサ髟<EFBFBD>ー題キ晉ヲサ譖エ霑應コ<EFBFBD>€ゆク€<EFBFBD>ス蜒丞処蜿伜屓蜴滓擂蟷ウ蜥檎噪蟆城芙<EFBFBD>梧ッ丈クェ蟇ケ菫ョ螂ウ逧<EFBFBD>刈螳ウ閠<EFBFBD>ッ丞ゥ蠕ョ隨醍捩蜷大セョ隨醍捩逧<EFBFBD>ソョ螂ウ謇捺魚蜻シ<EFBFBD>梧ッ丈クェ髟<EFBFBD>ー題ソ俶弍莨壼悉謨吝<EFBFBD><EFBFBD>悟悉蛟セ隸会シ悟悉蜷台ク€荳ェ蜴滓擂陲ォ莉紋サャ莠イ謇玖セア鬪ら噪莠コ逾キ蜻奇シ悟ク梧悍蠕怜芦荳サ逧<EFBFBD><EFBFBD>辣ァ<EFBFBD>悟桁諡ャ驍荳ェ驢画ア峨€よイ莠コ閭ス諠ゥ鄂夐ぅ莠幃芙豌托シ悟セ亥壻ココ驛ス蟾イ扈鞘€懷ソ倩ョー窶晏ス灘<EFBFBD>荳コ莉€荵郁ヲ<EFBFBD>ぅ譬キ蛛夲シ悟桁諡ャ驍荳ェ驢画ア会シ悟宵蜑ゥ荳倶ク€荳ェ扈丞クク螳<EFBFBD>惠謨吝<EFBFBD><EFBFBD>ソョ螂ウ<EFBFBD>ケ蟋狗サ郁ョー蠕嶺ク€<EFBFBD>€<EFBFBD>
雍晄級霄コ蝨ィ逞<EFBFBD>コ贋ク奇シ檎愍逾樒ゥコ遨コ蝨ー逶ッ逹€螟ゥ闃ア譚ソ<EFBFBD><EFBFBD>逋ス譎ヲ證礼噪螟ゥ闃ア譚ソ蜒丈ク€蝮怜嶋蜩磯復<EFBFBD>梧億譖イ謗牙夜擇逧<EFBFBD>€<EFBFBD>シ悟<EFBFBD>蜿俶<EFBFBD><EFBFBD><EFBFBD>壼スゥ蜿俶<EFBFBD>闍咲區<EFBFBD>瑚ァゆシ怜序謌仙現逕滂シ瑚<EFBFBD>蜿ー蜻<EFBFBD>悟序謌蝉コ<EFBFBD>€譁ケ蟆丞ー冗噪逞<EFBFBD>袷縲ょケ鄙サ莠<EFBFBD>クェ霄ォ<EFBFBD><EFBFBD>驛ィ莨<EFBFBD>迪帷ヨ蝨ー逍シ逞幢シ悟ケ菴惹ス主慍蜩シ莠<EFBFBD>€螢ー縲ょケ蟾イ扈丞シ€蟋倶ケ<EFBFBD>諠ッ霑咏ァ咲名逞帑コ<EFBFBD>シ悟ーア蜒丞ケ荵<EFBFBD>諠ッ荳咲ゥソ闃ュ阨セ闊櫁吩ク€譬キ<EFBFBD>ケ髣ュ荳顔愍逹幢シ梧滑閾ェ蟾ア蝓玖ソ幃サ第囓驥鯉シ御ク榊悉諠ウ縲る葎陲ォ謗ィ蠑€<EFBFBD>シ梧リ驢剃コ<EFBFBD>シシ譴ヲ髱樊ヲ逧<EFBFBD>ケ縲ょ現逕滓侃螢ォ蜿域擂譟謌ソ<EFBFBD>檎宛豈榊柱蠑溷シ滉サャ霍溷惠蜷朱擇<EFBFBD>帛現逕滄琉莠<EFBFBD>コ幃琉鬚伜錘襍ー莠<EFBFBD>シ梧ッ堺コイ謠€螂ケ逧<EFBFBD><EFBFBD>梧悃螂ケ隸エ逹€隸晏<EFBFBD><EFBFBD>檎宛莠イ螳蛾撕蝨ー蝮仙惠譌セケ<EFBFBD><EFBFBD>隶ュ扈<EFBFBD>ョ檎噪蠑溷シ溷エ荳願ソ伜<EFBFBD>€豎暦シ梧漢逹€蝌エ蜚<EFBFBD>悍逹€螂ケ縲よッ堺コイ蠖捺慮隸エ逧<EFBFBD>€荵亥ケ蟾イ扈丞ソ倅コ<EFBFBD>シ悟宵隶ー蠕玲怙蜷守ヲサ蠑€<EFBFBD>慮蛟呻シ檎宛莠イ襍ー蝨ィ譛€蜷趣シ悟屓譛帑コ<EFBFBD>ケ荳€逵シ<EFBFBD>蜷主ー丞ソ<EFBFBD>慍蜈ウ荳企葎<EFBFBD>御サ€鬮伜ァ逧<EFBFBD>レ蠖ア遶溽譏セ蠕玲怏莠幄制邏縲ゆココ驛ス襍ー螳悟錘<EFBFBD>梧慮髣エ蝨ィ豐蛾サ倡噪逞<EFBFBD>袷驥梧オ<EFBFBD>€晢シ悟ーア蜒乗イ呎シ城<EFBFBD>イ吝ュ撰シ悟ケ逧<EFBFBD>ぅ莠帷Ο諠<EFBFBD>€<EFBFBD>ぅ莠帶<EFBFBD>諞ャ驛ス謗我コ<EFBFBD>ソ帛悉縲り姦阨セ闊槫屬逧<EFBFBD>ュヲ蜻俶歓遨コ譚逵句<EFBFBD>ケ蜍牙シコ蝨ィ逞<EFBFBD>コ贋ク雁攝襍キ<EFBFBD>悟成驍莠幄<EFBFBD>閭檎ャ皮峩縲ー碑エィ莨倬寉逧<EFBFBD>恚蜿区干諤ィ荳譬シ逧<EFBFBD>慍迢ア邂螳カ蟀<EFBFBD>シ梧干諤ィ荳倶ク€蝨コ貍泌<EFBFBD>蜿郁ヲ擂莠<EFBFBD>€ケ螳蛾撕蝨ー蜷ャ逹€<EFBFBD>悟攝蝨ィ逞<EFBFBD>コ贋ク頑研蜃コ荳ェ隨題<EFBFBD><EFBFBD>蟆泌<EFBFBD>螢ー髯<EFBFBD>柱蜃<EFBFBD>縲ゆス<EFBFBD>ョ樣刔荳雁ケ蟾イ扈乗薯荳崎ソ幄ッ晞倅コ<EFBFBD>シ御シ倬寉逧<EFBFBD>區螟ゥ鮖<EFBFBD>ア慕ソ<EFBFBD>ォ倬橸シ碁槫髄貂ゥ證也噪譏螟ゥ<EFBFBD>梧滑蜿嶺シ<EFBFBD>ク大ー城クュ逡吝惠蜀ャ蟄驥後€よ恚蜿玖オー蜷主ケ扈ァ扈ュ蝮仙惠蠎贋ク奇シ檎岷逹€遯怜厄シ悟夜擇逧<EFBFBD>ゥ豌泌セ亥<EFBFBD>樊惻逧<EFBFBD>ーセ霑ケ遨ソ霑<EFBFBD>サオ霓ッ逧<EFBFBD>コ大屬<EFBFBD>檎區濶イ逧<EFBFBD>ク溷<EFBFBD><EFBFBD><EFBFBD>€<EFBFBD>ヲよエ礼噪螟ゥ遨コ<EFBFBD>ケ荳区э隸<EFBFBD>慍蛛壻コ<EFBFBD>クェ螻戊<EFBFBD>勘菴懶シ悟ワ螟ゥ鮖<EFBFBD>€譬キ莨倬寉縲ょセ育セ趣シ悟処蠕育洒證ゅ€るク溷<EFBFBD>鬟槫<EFBFBD><EFBFBD>ェ玲姐逧<EFBFBD>婿蟇ク荵句慍<EFBFBD>ケ逵倶ク榊芦莠<EFBFBD>€ケ謐ら捩蛻コ逞帷噪閻ー<EFBFBD>ス逞帛操<EFBFBD>檎李蠕苓ョゥ莠コ諠ウ隕働蜃コ螢ー縲よイ吝ュ占ケ謖溽捩螂ケ逧<EFBFBD>ヲ諠ウ<EFBFBD>梧脂霑帑コ<EFBFBD>イ呎シ冗噪荳倶ク€螻ゑシ悟<EFBFBD>荵滓今荳榊屓譚<EFBFBD>€ゆク荳ェ譛亥錘雍晄級蜃コ髯<EFBFBD>悟屓蛻ー莠<EFBFBD><EFBFBD>謔臥噪螳カ驥鯉シ梧ッ堺コイ菴楢エエ蝨ー謚願<EFBFBD>陬呵ソ俶怏驍莠帛ァ蟶育コァ逧<EFBFBD>姦阨セ貍泌<EFBFBD>蠖募ワ驛ス阯剰ソ帑コ<EFBFBD>慍荳句ョ<EFBFBD>ァ定誠<EFBFBD>御ク榊<EFBFBD>諢丞紋シ壼ワ螟ァ螟壽焚莠コ莉荳コ閭ス蝮壽戟逧<EFBFBD>ヲ諠ウ驍譬キ<EFBFBD><EFBFBD>遘ッ貊轣ー蟆假シ梧怙蜷手ォ謔<EFBFBD>d驕怜ソ倥€譏惹ココ莨壼惠蛛カ蟆疲Φ襍キ譚<EFBFBD>慮蛟呻シ檎サ呵<EFBFBD>蟾ア謇セ荳ェ蜿ー髦カ<EFBFBD><EFBFBD>蝌イ蝨ー隨醍ャ托シ壺€懷嶋<EFBFBD><EFBFBD>蜑崎ソ俶怏霑咏ァ榊ヲ<EFBFBD>Φ蝠翫€€晁エ晄級蠑€蟋句ュヲ謦ュ髻ウ<EFBFBD>悟シ€蟋玖オー蜿ヲ荳€霍ッ<EFBFBD>ケ豐諠ウ霑<EFBFBD>唆荳榊セ嶺ク崎オー逧<EFBFBD>霍ッ縲りソ吩ケ溷セ亥<EFBFBD>ス豁ケ譛芽キッ蜿ッ襍ー<EFBFBD>御ス<EFBFBD><EFBFBD>蟆泌成蛻ー闊樊峇逧<EFBFBD>慮蛟呻シ梧恚蜿倶シ夐琉螂ケ<EFBFBD>€應ス<EFBFBD>蝨ィ譎<EFBFBD>€荵亥賦<EFBFBD>€ケ蝗櫁ソ<EFBFBD>樊擂<EFBFBD>檎ャ台コ<EFBFBD>ャ代€€懈エサ蜉ィ豢サ蜉ィ霄ォ菴楢€悟キイ縲や€<EFBFBD> 陌ス辟カ譛臥せ荳咲曝蠢<EFBFBD>シ御ス<EFBFBD>女莨譏ッ豐蜉樊ウ慕噪莠区ュ蝌帙€りッ謾セ荳倶コ<EFBFBD>シ梧叛蠑<EFBFBD>Φ襍ー逧<EFBFBD>キッ<EFBFBD>€悟悉襍ー譖エ遞ウ螯<EFBFBD>コ碑ッ襍ー逧<EFBFBD>キッ<EFBFBD>ァ驛ィ蛻<EFBFBD>譏惹ココ驛ス譏ッ霑呎<EFBFBD>キ蛛夂噪縲よ<EFBFBD>蜿ッ譏ッ螟ァ閨ェ譏主造<EFBFBD>€<EFBFBD>
蟆丞ァ仙万谺€譛牙勘迚ゥ<EFBFBD>御ス<EFBFBD>万谺荵溷<EFBFBD>荳牙<EFBFBD>荵晉ュ会シ帷ョ螳カ隶ィ蜴梧園譛牙勘迚ゥ<EFBFBD>御ス<EFBFBD>ョィ蜴御ケ溷<EFBFBD>荳牙<EFBFBD>荵晉ュ峨€ょー丞ァ先怙蝟懈ャ迪ォ<EFBFBD>御ス<EFBFBD>ケ逧<EFBFBD>ァゆシ玲弍荳€<EFBFBD><EFBFBD><EFBFBD>帷ョ螳カ譛€隶ィ蜴瑚€<EFBFBD><EFBFBD><EFBFBD>御ス<EFBFBD>ー丞ァ千噪隗ゆシ玲イ譛我ク€蜿ェ迪ォ縲ゆコ取弍<EFBFBD>檎ョ螳カ扈呎園譛臥噪閠<EFBFBD><EFBFBD>蟶ヲ荳贋コ<EFBFBD>擇蜈キ蟆丞ァ仙シ€蟋倶コ<EFBFBD><EFBFBD>陦ィ貍費シ瑚€<EFBFBD><EFBFBD>莉ャ荳咲衍謇€謗ェ<EFBFBD>梧Φ隕<EFBFBD>螟肴Ρ蟶ク逧<EFBFBD>コキ謇ー縲ゆス<EFBFBD><EFBFBD>サャ逵玖ァー丞ァ占<EFBFBD>蟋ソ鄙ゥ鄙ゥ<EFBFBD>御ク€莠幄€<EFBFBD><EFBFBD>諠ウ蜃コ螢ー襍槫昌<EFBFBD>帑ス<EFBFBD><EFBFBD>サャ逵玖ァー丞ァ千怏逶ョ螯ら判<EFBFBD>御ク€莠幄€<EFBFBD><EFBFBD>遶滉クコ螂ケ豐蛾<EFBFBD><EFBFBD>帑ス<EFBFBD><EFBFBD>サャ逵玖ァー丞ァ千悄諠<EFBFBD><EFBFBD><EFBFBD>御ク€莠幄€<EFBFBD><EFBFBD>荵滉シ€關ス豕ェ縲ょョ<EFBFBD>サャ荳肴Φ隶ゥ蟆丞ァ仙ア譛幢シ御コ取弍螳<EFBFBD>サャ蟄ヲ襍キ迪ォ蜿ォ縲ょー丞ァ仙セ亥シ€<EFBFBD>シ悟ケ逧<EFBFBD>ァゆシ鈴譛臥賢莠<EFBFBD>€ケ蝟懈ャ<EFBFBD>賢莉ャ<EFBFBD>御ケ溷万谺螂ケ縲ょ<EFBFBD><EFBFBD>噪髣ィ蠎ュ驟堺ク堺ク雁ー丞ァ千噪鄒惹クス<EFBFBD>御コ取弍閠<EFBFBD><EFBFBD>諠ウ蜴サ蟶ヲ譚譖エ螟夂噪迪ォ縲り€<EFBFBD><EFBFBD>莉ャ蠑墓擂莠<EFBFBD><EFBFBD>御ケ溷シ墓擂莠<EFBFBD>峩螟夂噪閠<EFBFBD><EFBFBD>縲よ眠逧<EFBFBD>€<EFBFBD><EFBFBD>荳榊ェ隗<EFBFBD><EFBFBD>御ス<EFBFBD>眠譚<EFBFBD>賢遑ョ螳樊弍迪ォ縲ょー丞ァ先怏莠帛峅謇ー<EFBFBD>御ス<EFBFBD>ケ霑俶弍謗郤ウ莠<EFBFBD><EFBFBD>サャ<EFBFBD>悟ー丞ァ仙万谺€譛牙勘迚ゥ<EFBFBD>悟叉菴ソ閾ェ蟾ア莨壼峅謇ー縲ゆス<EFBFBD>錘譚<EFBFBD>檎ョ螳カ蜥悟ー丞ァ撰シ悟宵豕ィ隗<EFBFBD>捩迪ォ<EFBFBD>悟ソ伜唆莠<EFBFBD>€<EFBFBD><EFBFBD><EFBFBD>コ区ュ縲ゆケ溷ッケ<EFBFBD>梧ッ慕ォ溯€<EFBFBD><EFBFBD>蠖灘<EFBFBD>蟶ヲ逹€諱カ諢剰ュ譚<EFBFBD>檎鴫蝨ィ逧<EFBFBD>擇蜈キ諤サ譏ッ閼ア謗牙処蟶ヲ荳頑擂縲らョ螳カ蛛壻コ<EFBFBD>€莠帑コ区ュ遏驕謎ク主凄蜥悟酔諢丈ク主凄<EFBFBD>悟惠蟆丞ァ占ソ咎譛牙屁遘咲サ<EFBFBD>粋逧<EFBFBD>婿豕輔€ゆス<EFBFBD>€莠帶崟扈乗弍迪ォ逧<EFBFBD>€<EFBFBD><EFBFBD>隗牙ッ溷<EFBFBD>蠑よ<EFBFBD>キ縲ょクク蟷エ蝨ィ荳区ーエ驕鍋函豢サ<EFBFBD>悟ョ<EFBFBD>サャ蟇ケ霑呎<EFBFBD>キ逧<EFBFBD>ー泌袖蠑ょクク謨乗縲ゆコ取弍<EFBFBD>悟ョ<EFBFBD>サャ鞫倅ク倶コ<EFBFBD>擇蜈キ<EFBFBD>悟髄邂螳カ隶ィ荳ェ隸エ豕穂ス<EFBFBD><EFBFBD>サャ豐<EFBFBD>シェ陬<EFBFBD>シ御ク区ーエ驕馴蜿醍噪閾ュ豌費シ瑚ョゥ邂螳カ譖エ蜉<EFBFBD>蜴梧<EFBFBD>縲ゆサ€荵磯<EFBFBD>譛画隼蜿伜<EFBFBD>蜷取擂<EFBFBD>悟ー丞ァ蝉セ晄立鄒惹クス<EFBFBD>御ス<EFBFBD>サ丞紙莠<EFBFBD>ック螟夂コキ謇ー<EFBFBD>御ク咲衍驕灘ー丞ァ千噪蠢ォ荵宣譏ッ蜷ヲ譛画ウェ逵シ謌仙曙縲ゆク€莠幄€<EFBFBD><EFBFBD>萓晄立蟶ヲ逹€迪ォ逧<EFBFBD>擇蜈キ<EFBFBD>悟ョ<EFBFBD>サャ譛€蜷惹ケ滉シ壼序謌千賢縲ゆス<EFBFBD>ソ吩シ夐柄荵<EFBFBD><EFBFBD><EFBFBD>隶ク荳堺シ壹€ょ嘗荳€莠幄€<EFBFBD><EFBFBD>€蝗樔コ<EFBFBD>ク区ーエ驕難シ檎ュ牙セ<EFBFBD><EFBFBD><EFBFBD>隶ク莨壽怏蜿ヲ荳€菴榊ー丞ァ撰シ悟万谺<EFBFBD><EFBFBD><EFBFBD>ー丞ァ舌€ょ悉蝟懈ャ螂ケ<EFBFBD>悟悉蝟懈ャ<EFBFBD>サャ縲よ<EFBFBD>隶ク莨壽怏蜷暦シ溷コ碑ッ譛牙制菴<EFBFBD>€<EFBFBD><EFBFBD>莉ャ豌ク霑懷ソ倅ク堺コ<EFBFBD>ぅ菴榊ー丞ァ撰シ碁ぅ菴榊万谺€譛牙勘迚ゥ<EFBFBD>御ス<EFBFBD>峩蝟懈ャ迪ォ逧<EFBFBD>ー丞ァ舌€€<EFBFBD>
辟カ辟カ<EFBFBD>辟カ<EFBFBD>瑚區辟カ謌醍衍驕灘ーア邂苓ソ呎<EFBFBD>キ蜻シ蜚<EFBFBD><EFBFBD>荵溷宵閭ス蝨ィ菴<EFBFBD>蜉ィ諤ク区婿<EFBFBD>檎ォ吩ス丈ク<EFBFBD>鴻隸<EFBFBD>ョコ蛹コ逧<EFBFBD>€讌シ縲ゆス<EFBFBD><EFBFBD>ィ貍費シ御ス<EFBFBD><EFBFBD>勘諤<EFBFBD>シ御ス<EFBFBD><EFBFBD><EFBFBD><EFBFBD>....驛ス譏ッ隸エ扈呎<EFBFBD>莉ャ螟ァ螳カ逧<EFBFBD>シ梧弍謌台サャ.....閠梧<EFBFBD>...謌第崟扈丈サ荳コ菴<EFBFBD>遖サ謌大セ郁ソ代€りソ大芦豈乗ャ謇灘シ€謇区惻蜷<EFBFBD>ァ崎ァ<EFBFBD>題スッ莉カ<EFBFBD>ァ謨ー謐ョ謗ィ騾噪驛ス譏ッ菴<EFBFBD>縲りソ大芦豈乗ャ蜿大漕謇セ荳榊芦蜑崎ソ帶婿蜷醍噪譌カ蛟呻シ檎恚逧<EFBFBD><EFBFBD>譏ッ菴<EFBFBD><EFBFBD><EFBFBD>€りソ大芦豈乗ャ蜥悟悪莠コ閨雁ゥ逧<EFBFBD>慮蛟呻シ碁<EFBFBD>莨壼刈荳贋ス<EFBFBD>扈丞クク隸エ逧<EFBFBD>哨螟エ遖<EFBFBD>シ梧噺蛻ー謾カ蛻ー謾カ蛻ー<EFBFBD>悟庄辷ア謐擾ス橸ス樞€ヲ菴<EFBFBD>譌カ蟶ク髯ェ莨エ謌題コォ霎ケ<EFBFBD>梧裏隶コ謌第ご莨霑俶弍谺蝟懶シ檎サ晄悍霑俶弍諠ャ諢擾シ御ス<EFBFBD><EFBFBD>峩謦ュ髣エ<EFBFBD>瑚ッ<EFBFBD>ョコ蛹コ驛ス譏ッ謌大庄莉<EFBFBD>э螳<EFBFBD><EFBFBD>噪蝨ー譁ケ縲ょ屏荳コ蝨ィ霑咎<EFBFBD><EFBFBD><EFBFBD>ササ菴募書險€驛ス蜿ェ譏ッ貍<EFBFBD>サ大懃ゥコ荳ュ蠕ョ蠑ア髣ェ閠€<EFBFBD>€轤ケ<EFBFBD>瑚ソ呎<EFBFBD>キ逧<EFBFBD>€轤ケ轤ケ譏溷<EFBFBD><EFBFBD>ュ伜惠<EFBFBD><EFBFBD>驕鍋噪<EFBFBD>梧弍荳コ莠<EFBFBD>サ吝ゥ遨コ荳ュ閠€逵シ蝨<EFBFBD>怦陬呎漕陬<EFBFBD>ー逧<EFBFBD>€轤ケ轤ケ遒朱捗縲るぅ謌大万谺辟カ辟カ<EFBFBD>ゥ螟ゥ譚逵狗辟カ<EFBFBD>悟ッケ莠手<EFBFBD>蟾ア<EFBFBD>檎ゥカ遶滓弍荳コ莠<EFBFBD>€荵遺€.髫セ驕捺<EFBFBD><EFBFBD>函豢サ逵溽噪辜ゑシ瑚ソ樔サ<EFBFBD>怏逧<EFBFBD>€莠帛<EFBFBD>€<EFBFBD><EFBFBD>サ惹ク€荳ェ陌壽供蛛カ蜒剰コォ荳願執蜿門芦蜷暦シ滄埓驕捺<EFBFBD><EFBFBD>鴫螳樒函豢サ<EFBFBD>瑚ソ樔ク€荳ェ蜈ウ蠢<EFBFBD><EFBFBD>螳カ莠コ驛ス豐譛牙雛<EFBFBD>瑚ソ倩ヲ惠鄂台ク雁ッサ謇セ螳カ逧<EFBFBD>隗会シ滄埓驕<EFBFBD>...霑吩コ幃<EFBFBD><EFBFBD>譌ゥ蟆ア譏守區莠<EFBFBD>シ瑚ッエ譛崎<EFBFBD>蟾ア荵溯ッエ閻サ莠<EFBFBD>シ御ス<EFBFBD>€逶エ驛ス譏ッ莠台ク贋ケ倶ココ<EFBFBD>€<EFBFBD>蜿ェ譏ッ荳€荳ェ謇帑ク堺ス丞視蜉幢シ悟惠陌壽供逧<EFBFBD>ク也阜荳ュ蟇サ謇セ螳画<EFBFBD><EFBFBD>誠鬲<EFBFBD>ケ倶ココ縲よ<EFBFBD>諛ゑシ梧<EFBFBD>譏守區逧<EFBFBD>シ梧<EFBFBD>驕鍋噪....€<EFBFBD><EFBFBD>辟カ蟆丞ァ撰シ梧<EFBFBD>荳崎<EFBFBD>譛我ス<EFBFBD><EFBFBD><EFBFBD>荳堺シ夂ヲサ蠑€<EFBFBD><EFBFBD>€ゆス<EFBFBD>荵滓弍<EFBFBD>梧ーク霑應ク崎ヲヲサ蠑€闊槫床<EFBFBD>梧叛蠑<EFBFBD>蕎蟆ス蜈ィ蜉帚€..蟆ア邂礼衍驕謎ケ溯ョク荳堺シ壽怏蝗樣浹<EFBFBD>御ス<EFBFBD>荵滉ク崎ヲ譛晞略髣ェ逧<EFBFBD>弌蜈画硯謇句草窶ヲ窶ヲ[辷ア蠢ゾ
<EFBFBD>諠ウ諠ウ蝌臥譏ッ諤惹ケ域<EFBFBD>キ逧<EFBFBD>€荳ェ螂ウ蟄ゥ蟄舌€ケ貂ゥ譟泌庄莠コ諠<EFBFBD>膚鬮假シ御シ壽而蝨コ莨壽磁隸昜シ壼シ募ッシ蠑ケ蟷墓闃ょ擾シ梧恚蜿矩譛牙ケ霑吩ケ井ク€荳ェ莠コ蝨ィ閧ッ螳壽ッ乗ャ<EFBFBD>擇驛ス閭ス蠕亥シ€<EFBFBD>制縲ょケ辷ア鄂台ク雁<EFBFBD>豬ェ<EFBFBD><EFBFBD>譏守恚蛻ー蜷<EFBFBD>ァ崎ァ<EFBFBD>台シ壽怏轤ケ鮗サ<EFBFBD>御ス<EFBFBD>ソ俶弍荵先ュ荳咲夢逧<EFBFBD>惠b遶吝柱蜷<EFBFBD>クェ隶コ蝮帷恚逹€<EFBFBD>托シ悟ワ荳榊ワ驍莠帶怙諛ゆス<EFBFBD><EFBFBD>梧怙閭ス髯ェ莨エ菴<EFBFBD><EFBFBD>イ咎尓鄂大暑<EFBFBD>悟頭諤墓弍荳崎<EFBFBD>蜥悟ケ隗芦髱<EFBFBD>慮蛟呻シ悟<EFBFBD>蝨ィ鄂台ク願螟ゥ荳€螳壻ケ滉ク堺シ壽裏閨翫€ケ蝨ィ貂ゥ譟皮噪蜷梧慮蜿域怏轤ケ蟆丞搶<EFBFBD>悟万谺隸エ諤ェ隸晢シ悟万谺證玲嵩謳鍋噪蠑€霓ヲ<EFBFBD>梧Φ蠢<EFBFBD>ケ豈乗ャ蝨ィ莉€荵亥<EFBFBD>€ェ逧<EFBFBD>せ荳雁シ€螳瑚スヲ<EFBFBD>悟ーア莨壻シシ隨鷹撼隨醍噪萓ァ逹€螟エ逵句髄謌大制<EFBFBD>€<EFBFBD>蜿ェ髴€ク主ケ蟇ケ隗<EFBFBD>€荳具シ御ク荳ェ莠コ蟆ア閭ス鮟伜醍噪隨題オキ譚縲ょケ蠕井シ壽朝莠コ<EFBFBD>碁ぅ莠帛悄蜻ウ諠<EFBFBD>ッ晏惠螂ケ關<EFBFBD><EFBFBD>ー疲ー幃莨シ荵惹ケ溷序蠕玲<EFBFBD>シ螟紋サ莠コ蠢<EFBFBD><EFBFBD>悟ー蜈カ譏ッ螂ケ霑倅シ壼惠豈丈ク€荳ェ荳咲サ乗э髣エ遯隸エ蜃コ蜉ィ莠コ逧<EFBFBD>ッ晁ッュ<EFBFBD>瑚ョゥ菴<EFBFBD>蝨ィ螳悟<EFBFBD><EFBFBD><EFBFBD>噪諠<EFBFBD><EFBFBD>荳玖<EFBFBD>キウ縲ょ庄譏ッ螂ケ蜿亥セ郁ユ蟆擾シ檎ョ€€蜊募黒逧<EFBFBD>ー乗滑謌剰<EFBFBD>霑樒サュ萓<EFBFBD>逶怜ケ螂ス螟壽ャ<EFBFBD>ケ陲ォ蜷灘ョ碁ぅ蜑ッ豌泌<EFBFBD>蜀イ<EFBFBD>悟唆蜿域裏蜿ッ螂井ス穂ク肴覆遖サ謌大ェ霑懃噪譬キ蟄撰シ瑚け螳壽弍螟ゥ荳狗ャャ荳€蜿ッ辷ア蜷ァ縲よΦ諠ウ蝌臥譏ッ諤取<EFBFBD>キ逧<EFBFBD>€荳ェ螂ウ蟄ゥ蟄舌€ケ霄ォ譚仙ョ檎セ趣シ瑚蠎槫庄辷ア<EFBFBD>ー郤ソ莉莠コ豐蛾<EFBFBD><EFBFBD>梧裏蜿ッ謖大鉛逧<EFBFBD>セ惹クス縲ょケ遏荵ヲ霎セ逅<EFBFBD>シ悟埋隗莠コ諢擾シ梧クゥ譟皮Ο諠<EFBFBD>シ悟ケ譏ッ豈丈クェ螂ウ騾夊ョッ蠖墓ヲ荳ュ逧<EFBFBD>ぅ荳ェ蟋<EFBFBD> 縲ょ庄譏ッ螂ケ蜿井ク堺シ夂ヲサ菴<EFBFBD>蠕郁ソ懶シ悟ケ諛ゆス<EFBFBD><EFBFBD>暦シ悟ケ蝨ィ鄂台ク雁柱菴<EFBFBD>蜀イ霑<EFBFBD>酔荳€<EFBFBD>オェ<EFBFBD>ケ閭ス蜥御ス<EFBFBD>€襍キ謇捺クク謌擾シ瑚<EFBFBD>蜥御ス<EFBFBD>€襍キ逵狗セ主<EFBFBD><EFBFBD>隸エ驍莠帛ソ<EFBFBD><EFBFBD>荳榊ョ<EFBFBD>€ェ隸晢シ瑚<EFBFBD>蝨ィ譛€蜷磯€ら噪譌カ蛻サ謦ゥ蜉ィ菴<EFBFBD><EFBFBD>ソ<EFBFBD>シヲ縲ょケ譛我サ莠コ豐画ココ逧<EFBFBD>ケエ荳頑ー碑エィ<EFBFBD>悟処蜒乗弍莉莠コ荳崎<EFBFBD>隗画Φ隕揃謚<EFBFBD>庄辷ア螯ケ螯ケ<EFBFBD>悟庄譛画慮<EFBFBD>ケ蜿亥序謌蝉コ<EFBFBD>サ主ケシ蜆ソ蝗ュ蠑€蟋玖キ滉ス<EFBFBD>蜷檎少<EFBFBD>梧怙諛ゆス<EFBFBD><EFBFBD>ぅ荳ェ髱呈<EFBFBD>ォケ鬩ャ逧<EFBFBD>ウ蟄ゥ蟄舌€ケ蟆ア譏ッ蝌臥<EFBFBD><EFBFBD><EFBFBD><EFBFBD>辟カ縲ょ<EFBFBD>辟カ<EFBFBD><EFBFBD>辟カ<EFBFBD><EFBFBD>辟カ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>シÅ洟<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD>謌大<EFBFBD>螳樔ク€轤ケ荵滉ク榊万谺蝌臥蟆丞ァ舌€ょ屏荳コ蝌臥蟆丞ァ仙ーア蜒丞<EFBFBD>€譬キ<EFBFBD>碁略閠€<EFBFBD>悟絢逵シ<EFBFBD><EFBFBD>隶ィ蜴悟<EFBFBD>縲ょ屏荳コ隶ィ蜴悟<EFBFBD><EFBFBD>梧園莉謌第€サ譏ッ霄イ蝨ィ髦エ蜀キ貎ョ貉ソ逧<EFBFBD>ク区ーエ驕馴<EFBFBD>瑚ソ呎<EFBFBD>キ蟆ア荳堺シ夊ォ莉莠コ蜴梧<EFBFBD><EFBFBD><EFBFBD>闃堤逵シ逹帙€ょ宵譛牙憺龍<EFBFBD><EFBFBD>謇堺シ壻サ朱亢證玲スョ貉ソ逧<EFBFBD>ク区ーエ驕馴襍ー蜃コ譚<EFBFBD>懈劒譏ッ螳<EFBFBD>撕荳泌ョ蛾€ク逧<EFBFBD>シ御サ謌第蛻ー闊帝€€<EFBFBD>貍ォ譌<EFBFBD>逶ョ逧<EFBFBD>噪襍ー蝨ィ螟憺龍逧<EFBFBD>ー剰キッ荳奇シ瑚キッ譌噪霍ッ轣ッ豁蜿醍捩蠕ョ蠑ア逧<EFBFBD><EFBFBD><EFBFBD>梧怏蜃<EFBFBD>蜿ェ陋セ蟄先ュ荳肴妙逧<EFBFBD>髄逹€蜈画コ先苑蜴サ縲や€懃悄蛯サ縲や€<EFBFBD>霑呎<EFBFBD>キ諠ウ<EFBFBD><EFBFBD>譏主<EFBFBD>蜿ェ閭ス蟶ヲ譚蜊ア髯ゥ<EFBFBD>御クコ莉€荵郁ヲオェ雍ケ螳晁エオ逧<EFBFBD>函蜻ス蜴サ霑ス騾仙<EFBFBD>闃貞造<EFBFBD>溽恚逹€鬟櫁崟荳肴妙逧<EFBFBD>苑蜷題キッ轣ッ<EFBFBD><EFBFBD>荳咲衍荳コ菴墓Φ襍キ莠<EFBFBD><EFBFBD><EFBFBD>ぅ莠帛酔莨エ縲よ<EFBFBD>諠ウ襍キ莠<EFBFBD><EFBFBD>螟ゥ蜑搾シ梧怏荳€莠帑サ主夜擇蝗樊擂逧<EFBFBD>ョカ莨呻シ御サ紋サャ蜈エ螂狗噪蜻願ッ画<EFBFBD>螟夜擇譁ー蠑€<EFBFBD>€螳カ蜑ァ蝨コ<EFBFBD>譛我ク€荳ェ蜿ォ蝌臥<EFBFBD>ココ<EFBFBD>瑚ソ俶耳闕先<EFBFBD>€襍キ蜴サ逵狗恚縲ゆサ紋サャ逧<EFBFBD>愍逹幃髣ェ辜捩莠ョ譎カ譎カ逧<EFBFBD><EFBFBD><EFBFBD><EFBFBD>蠕郁ョィ蜴鯉シ御コ取弍萓ソ諡堤サ昜コ<EFBFBD>€ゆケ句錘莉紋サャ荵滓擂謇セ霑<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>荵滓耳霎樔コ<EFBFBD>€ょ錘譚謌台セソ豐諤惹ケ郁ァソ<EFBFBD>サ紋サャ莠<EFBFBD>シ悟成隸エ荳コ莠<EFBFBD>級莠コ譚逵具シ御サ紋サャ譛臥噪諠ウ蜿俶<EFBFBD>迪ォ迢暦シ梧怏逧<EFBFBD>イソ陦苓エエ豬キ謚蜿ォ蜊厄シ梧怏逧<EFBFBD>滑霑<EFBFBD><EFBFBD>逕ィ逧<EFBFBD><EFBFBD><EFBFBD>ス鍋シ迚ゥ<EFBFBD>瑚ソ俶怏逧<EFBFBD>滑蠢<EFBFBD>鍵扈咏賢縲や€懃悄譏ッ莠幄<EFBFBD>雍ァ縲や€<EFBFBD>霑呎<EFBFBD>キ諠ウ逹€<EFBFBD>御サ紋サャ荳榊ーア蜥瑚ソ吩コ帶苑轣ォ逧<EFBFBD>崟蟄蝉ク€譬キ諢夊<EFBFBD><EFBFBD><EFBFBD><EFBFBD>譏惹ケ句燕荳€襍キ霍ッ霑<EFBFBD>噪譌カ蛟呻シ御サ紋サャ霑俶€サ譏ッ莨壼亟隶ス霑吩コ帛ョカ莨吶€€懷香蛻<EFBFBD>€€昜ク咲衍莉主頭譚<EFBFBD>クヲ逹€莠帛働閻泌ー髻ウ謇捺妙莠<EFBFBD><EFBFBD><EFBFBD>莉主次蜈育噪諤晉サェ荳ュ諡我コ<EFBFBD><EFBFBD>縲よ弍譌セケ逧<EFBFBD>鴬蝨コ驥御シ<EFBFBD><EFBFBD>シ御ク咲衍荳崎ァ蛾龍謌題オー蛻ー莠<EFBFBD>ソ吩ケ郁ソ懃噪蝨ー譁ケ霑俶イ譛牙書隗峨€<EFBFBD>謚ャ螟エ譛帑コ<EFBFBD><EFBFBD>檎煙蛹セ荳雁<EFBFBD>€莠比クェ譎ヲ豸ゥ髫セ諛ら噪逧<EFBFBD>ュ玲ッ搾シ悟ス蜒丈ケ句燕蜷御シエ莉ャ隸エ霑<EFBFBD>シ御サ紋サャ蜴サ逧<EFBFBD>ぅ荳ェ蜑ァ蝨コ蜷榊ュ怜ーア譏ッ莠比クェ蟄玲ッ搾シ梧怏莠幄ァ夊ッ<EFBFBD>ケソ逧<EFBFBD>ッエ<EFBFBD>碁ぅ蜿ォ莉€荵亥賦鬪壹€<EFBFBD>霑溽桝莠<EFBFBD>€莨夲シ御ス<EFBFBD>ソ俶弍襍ー莠<EFBFBD>ソ帛悉<EFBFBD>悟黒郤ッ蜿ェ譏ッ諠ウ遏驕謎クコ莉€荵亥ー髻ウ蟶ヲ逹€蜩ュ閻費シ悟辜ュ髣ケ<EFBFBD>梧伽荵仙ュ先€サ譏ッ謌第怙蝟懈ャ<EFBFBD>コ区ュ縲<EFBFBD>......窶懷ァ螳カ隕ス螂ス蜷<EFBFBD>ュ蜩ヲ縲や€ゥ邀握逧<EFBFBD>ー髻ウ蝨ィ謌題€ウ霎ケ蜩崎オキ縲ょ逃<EFBFBD>悟次譚謌大ケカ荳崎ョィ蜴悟<EFBFBD>蝠奇シ悟宵譏ッ荳€逶エ驛ス遏驕難シ瑚<EFBFBD>蟾ア驟堺ク堺ク雁<EFBFBD><EFBFBD>€€<EFBFBD>
謌醍飴荳崎<EFBFBD>蜥梧<EFBFBD>逶ク隶<EFBFBD>御ス<EFBFBD>サ雁ゥ莉冶ソ<EFBFBD>ァ蟇ソ<EFBFBD>梧アよアょァ莨呎怏髓ア逧<EFBFBD>囂荳ェ遉シ<EFBFBD>梧イ髓ア逧<EFBFBD>懇荳ェ蝨コ縲ゆス<EFBFBD>ッキ荳崎ヲキ溷ケ隸エ蜆ソ蟄先擂莠<EFBFBD>シ梧<EFBFBD>諤墓沖莉門<EFBFBD><EFBFBD><EFBFBD>刧扈吝ァ莨咏エ莠<EFBFBD>€€<EFBFBD>
<EFBFBD> asoul蝨ィ荳€<EFBFBD>ェょー荳ュ隗<EFBFBD>€<EFBFBD>蜷ァ逧<EFBFBD>怙蜷惹ク€荳ェ蟶門ュ蝉ケ滓イ我コ<EFBFBD>ク句悉<EFBFBD>檎峩蛻ー蝨ィv8蜥恵遶咏噪荵溷キイ扈冗恚荳榊芦譛我ココ隶ィ隶コ莠<EFBFBD>€ァ郤ヲ荳€蟷エ蜷趣シ梧<EFBFBD>蝨ィA蜷ァ蜿台コ<EFBFBD>€<EFBFBD>€懆ソ俶怏莠コ蝨ィ蜷暦シ溪€€懆ソ咎霑俶怏8u蝠奇シ梧<EFBFBD>荵滓Φ蝗樊擂逵狗恚莠<EFBFBD>€€昜ク€荳ェ髯檎函逧ИD蜃コ邇ー蝨ィ謌醍噪蝗槫堺ク矩擇<EFBFBD>御サ門ケカ荳榊惠謌題ソ<EFBFBD>悉轤剃ス懃噪隶ー蠢<EFBFBD>蜃コ邇ー霑<EFBFBD>€ゆス<EFBFBD>弍謌台サャ閨雁セ怜セ磯ォ伜<EFBFBD><EFBFBD>悟セ亥ソォ蟆ア蜉<EFBFBD>荳贋コ<EFBFBD>Q遘ク倶コ貞勘莠<EFBFBD>€ケ莨シ荵主セ井コ<EFBFBD>謌托シ檎衍驕捺<EFBFBD>蝟懈ャ轤剃ス懷書謨<EFBFBD>檎衍驕捺<EFBFBD>蝨ィ隸サ蜩イ蟄ヲ蜊壼ォ縲ゆス<EFBFBD><EFBFBD>ケ蜊エ諤サ譏ッ蠢倩ョー謌第弍荳ェ譎壽劒謗ィ<EFBFBD>瑚ヲ<EFBFBD>€驕榊処荳€驕榊慍蜻願ッ牙ケ謌第怙蝟懈ャ<EFBFBD>弍譎壽劒縲や€應ス<EFBFBD>€蝟懈ャ蜩ェ荳ェ謌仙遭蜻<EFBFBD>€€<EFBFBD>辟カ縲や€ケ豈ォ荳崎ソ溽桝蝨ー蝗樒ュ秘縲よ<EFBFBD>諤サ譏ッ逵蛾櫁牡闊槫慍蜥悟ケ閨願オキ蜷第劒霑<EFBFBD>悉逶エ謦ュ逧<EFBFBD>腐莠具シ悟ケ荵溷ッケ霑吩コ帷峩謦ュ莠<EFBFBD>莠主ソ<EFBFBD>シ梧怏譌カ霑倅シ壽ウィ諢丞芦隶ク螟壽<EFBFBD>莉取イ豕ィ諢丞芦逧<EFBFBD><EFBFBD><EFBFBD>檎爆閾ウ蜻願ッ画<EFBFBD>蜷第劒豈丈ク€蠑ケ蜷我サ冶レ蜷守噪陦ィ貍疲€晁キッ縲ょ<EFBFBD>€ェ逧<EFBFBD><EFBFBD>瑚區辟カ螂ケ隸エ螂ケ譛€蝟懈ャ蝌臥<EFBFBD>悟ッケ蝌臥<EFBFBD>コ区ュ蜊エ蟷カ豐譛蛾ぅ荵井コ<EFBFBD><EFBFBD>檎爆閾ウ霑樒峩謦ュ逧<EFBFBD>惻谺驛ス隕<EFBFBD>謠宣<EFBFBD>螂ケ縲ょ芦莠<EFBFBD>ぅ蟷エ逧<EFBFBD><EFBFBD>螟ゥ<EFBFBD>ケ髣ョ謌托シ梧<EFBFBD>莉ャ蜿ッ莉蜃コ譚€蜷暦シ滓<EFBFBD>諡堤サ昜コ<EFBFBD><EFBFBD>悟ス捺慮逧<EFBFBD><EFBFBD>蠢吩コ主<EFBFBD>ュヲ菴崎ョコ譁<EFBFBD>€ケ豐譛牙<EFBFBD>蠑コ豎ゅ€らャャ莠悟<EFBFBD>ケ蝨ィQQ荳雁ア閨比コ<EFBFBD>シ檎<EFBFBD>謔臥噪螟エ蜒丞<EFBFBD>荵滓イ莠ョ襍キ霑<EFBFBD>€ァ讎ゆク€蜻ィ蜷趣シ梧<EFBFBD>謾カ蛻ー莠<EFBFBD>€莉ス蛹<EFBFBD><EFBFBD>譏ッ蜷第劒蜃コ驕謎サ€譛牙ュ蠎ヲ逧<EFBFBD>芦髟ソ遉シ迚ゥ<EFBFBD>梧裏荳€驕玲シ擾シ梧噺阯冗シ門捷驛ス譏ッ00000縲らォ狗煙驥瑚ソ伜ケ逹€€<EFBFBD>郤ク<EFBFBD>御ク企擇譏ッ遏ュ遏ュ荳€陦悟ュ暦シ壺€懆ー<EFBFBD>譖セ扈丞万谺謌鯛€€€<EFBFBD>
辟カ辟カ蟷ク莠乗<EFBFBD>蝨ィ菴<EFBFBD><EFBFBD>ョコ蛹コ蜿醍羅縲りヲク咲謌題€ス隸ッ菴<EFBFBD>€霎亥ュ撰シ御ス<EFBFBD>荵滉ソ晞<EFBFBD><EFBFBD>隗Å沽<EFBFBD>ソ倅シ壼<EFBFBD>雛辟カ辟カ笘コ<EFBFBD><EFBFBD>噪譌カ蛟吩ス<EFBFBD>ケク遖丞ス荳榊ス笘コ<EFBFBD>辟カ菴<EFBFBD>€<EFBFBD><EFBFBD>御ス<EFBFBD>ケク遖鞘仄<EFBFBD>ス荳榊<EFBFBD>悟シ€<EFBFBD><EFBFBD><EFBFBD><EFBFBD>悟ケク遖条沽<EFBFBD>!<EFBFBD><EFBFBD>ク也阜莉蜷取イ譛画<EFBFBD><EFBFBD>シ梧イ蜈ウ邉サ菴<EFBFBD><EFBFBD>蟾ア蟷ク遖<EFBFBD>!<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>純辟カ辟カ<EFBFBD>!辟カ辟カ<EFBFBD>!辟カ辟カ<EFBFBD><EFBFBD>梧イ譛我ス<EFBFBD>謌第€惹ケ域エサ蝠<EFBFBD>!<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>純辟カ辟カ<EFBFBD><EFBFBD>辟カ<EFBFBD><EFBFBD>辟カ<EFBFBD><EFBFBD>辟カ<EFBFBD><EFBFBD>辟カ<EFBFBD><EFBFBD>辟カ!<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>純辟カ辟カ菴<EFBFBD>蟶ヲ謌題オー蜷ァ<EFBFBD>辟カ!<EFBFBD><EFBFBD><EFBFBD>亊窶<EFBFBD>
<EFBFBD>
蟆乗慮蛟咏恚逧<EFBFBD>€荳ェ謨樔コ句セ郁€悄蠕郁€€ょセ亥壻ココ蜿ッ閭ス蜷ャ霑<EFBFBD>€€よ怏荳€荳ェ逕キ蟄ゥ譛我ク€蝮鈴陦ィ<EFBFBD>悟唆豐譛蛾<EFBFBD>蠕嶺ク雁ョ<EFBFBD>噪蜷磯€ィ蟶ヲ縲ゅ€ゆサ也鯵荳贋コ<EFBFBD>€荳ェ螂ウ蟄ゥ縲ゅ€りソ吩クェ螂ウ蟄ゥ譛我ク€螟エ遘€鄒守噪髟ソ蜿托シ悟唆豐譛蛾<EFBFBD>蠕嶺ク雁ョ<EFBFBD>噪貍ゆコョ蜿大今縲ゅ€るゥャ荳願ヲソ<EFBFBD>悒隸樔コ<EFBFBD>€€ら塙蟄ゥ蜀ウ螳壽滑霑吩クェ驥題ィ扈吝獄莠<EFBFBD>€€らサ吝ウ蟄ゥ荵ー荳€荳ェ貍ゆコョ逧<EFBFBD>書蜊縲ゅ€ょス謎サ門<EFBFBD>螂狗噪謚願ソ吩クェ蜿大今莠扈吝ウ蟄ゥ逧<EFBFBD>慮蛟吶€€ょ書邇ー螂ウ蟄ゥ逧<EFBFBD>エ蜿大キイ扈丞岡謗我コ<EFBFBD>€€ょ屏荳コ螂ケ謚贋ク€螟エ髟ソ蜿第困髓ア扈咏塙蟄ゥ荵ー莠<EFBFBD>€荳ェ陦ィ蟶ヲ縲ゅ€<EFBFBD>諠ウ逵滓ュ<EFBFBD>鯵閧ッ螳壻ク肴弍迸ャ髣エ逧<EFBFBD>蜉ィ<EFBFBD>悟セ亥壻ココ驛ス閭ス蝨ィ荳€迸ャ髣エ諢溷勘菴<EFBFBD><EFBFBD><EFBFBD><EFBFBD>クュ逵滓ュ<EFBFBD>鯵譏ッ髯ェ莨エ縲ょケ莉ャ髯ェ莠<EFBFBD><EFBFBD>螟壻ケ<EFBFBD><EFBFBD><EFBFBD>荳崎ョー蠕暦シ梧<EFBFBD>蜿ェ隶ー蠕励€€ケ莉ャ逧<EFBFBD>ソサ蜚ア<EFBFBD>瑚ココ蝨ィ鄂第<EFBFBD>莠醍噪豁悟黒蜷ャ莠<EFBFBD>€驕榊処荳€驕搾シ悟キイ扈丞<EFBFBD>驛ス莨壼罰莠<EFBFBD>シ瑚€悟惠豁荵句燕逧<EFBFBD><EFBFBD>蟷エ驥鯉シ梧<EFBFBD><EFBFBD>荵取イ蜷ャ霑<EFBFBD>クュ譁<EFBFBD>ュ後€ゑシ亥溽ス戊ァ<EFBFBD>シ峨€€頑オキ蠎輔€誼23.tv/qwB8Xe縲ゅ€霑倥€誼23.tv/1bl7AL縲ゅ€€誼23.tv/vxiwae<EFBFBD>郁エセ扈エ譁ッ<EFBFBD>夊ソ呎弍<EFBFBD>梧裏蜿ッ蜿紋サ<EFBFBD>慮蛟呻シ峨€€贋コ醍Α謌宣岑縲誼23.tv/VfoDXA縲ゅ€雁ヲよ棡逧<EFBFBD>コ九€誼23.tv/gDtrcP縲ゅ€ゥ逧<EFBFBD>€誼23.tv/EH14bW縲ゅ€企悚蜈峨€誼23.tv/kJUJMU縲ゅ€頑怦蜈峨€誼23.tv/kJUJMU縲ゅ€企恪蜈<EFBFBD>抜縲誼23.tv/lQgKl2縲ゅ€頑怦蜈泌屓譌倶コ守ゥコ荳ュ縲誼23.tv/KM4G5I縲ゅ€贋ク榊庄諤晁ョョ縲誼23.tv/VfwEz4縲ゅ€企コ矩ケソ譽ョ譫励€誼23.tv/GzjXu1縲ゅ€願スサ霓サ逧<EFBFBD>相隸我ス<EFBFBD>縲誼23.tv/Gkai63縲ゆク咲衍荳崎ァ蛾飭菴<EFBFBD>莉ャ襍ー莠<EFBFBD>ソ吩ケ井ケ<EFBFBD>ソ吩ケ郁ソ應コ<EFBFBD>シ檎鯵荳咲鯵菴<EFBFBD>莉ャ<EFBFBD>瑚ソ倬怙隕畑莉€荵域擂隸<EFBFBD>蜷暦シ溘€€ょスシ豁迚コ迚イ<EFBFBD>悟スシ豁謌仙ーア<EFBFBD>悟スシ豁蟆企縲りソ吝ーア譏ッ謌大ソ<EFBFBD>クュ逧<EFBFBD>曙蜷大碑オエ<EFBFBD>御サ蜷手キッ霑伜セ郁ソ懶シ梧<EFBFBD>諠ウ髯ェ菴<EFBFBD>莉ャ荳€逶エ襍ー荳句悉縲ゅ€€ょ次譚<EFBFBD>御ス<EFBFBD>譏ッ謌醍噪鬘カ遒嶺ココ蜻€~縲ゆサ蜷趣シ悟シ€<EFBFBD>柱荳榊シ€<EFBFBD><EFBFBD><EFBFBD>蜻願ッ画<EFBFBD>蜷ァ~縲ゅ€ょ次譚<EFBFBD>御ス<EFBFBD>譏ッ謌醍噪辷ケ蝨ー蜻€~縲ゆサ蜷趣シ悟シ€<EFBFBD>柱荳榊シ€<EFBFBD><EFBFBD><EFBFBD>驛ス蜻願ッ我ス<EFBFBD>~<EFBFBD>
6<EFBFBD>12蜿キ荳€螟ァ譌ゥ<EFBFBD>悟髄譎壽潔辣ァ雍晄級逧<EFBFBD>律遞玖ィ隕<EFBFBD>6轤ケ襍キ蠎奇シ檎<EFBFBD><EFBFBD>慮蛟吝屏荳コ螟ェ邏ッ螟ァ閼台ク€譌カ霑キ邉雁ッシ閾エ荳€<EFBFBD>€豌エ謦貞芦莠<EFBFBD>焔謖<EFBFBD>ク奇シ瑚區辟カ扈剰ソ<EFBFBD>イサ逍玲螟堺コ<EFBFBD>€轤ケ<EFBFBD>御ス<EFBFBD><EFBFBD>ケ譛ャ豐豕募シケ蜷我サ紋コ<EFBFBD>€よ劒譎壼惠螳ソ闊榊働蠕怜セ亥ァ螢ー<EFBFBD>梧紛荳ェasoul諢コ第Κ豺縲らサ剰ソ<EFBFBD>€荳ェ蟆乗慮逧<EFBFBD>エァ諤逎句膚<EFBFBD>碁仭闕牙クヲ譚<EFBFBD><EFBFBD>ッシ螻ら噪諢乗€€€疲兜蜈螟ェ螟ァ<EFBFBD>御ク榊庄閭ス蜿匁カ茨シ檎函譌莨夂<EFBFBD>蜉橸シ檎畑蛯ィ螟<EFBFBD>クュ荵倶ココ蜷第劒莠碁ュ皮視謗譖ソ蜷第劒譛ャ莠コ荳雁惻縲ゆク句壕<EFBFBD>径soul蝨ィ蜉ィ謐墓袷謗堤サ<EFBFBD>シ悟髄譎壽Φ隕悉逵倶ク€逵具シ檎サ捺棡陲ォ髦ソ闕画協蝨ィ髣ィ螟厄シ瑚ッエ荳崎<EFBFBD>謇捺臆蛻ーasoul謗堤サ<EFBFBD>譜譫懷セ亥<EFBFBD>悟ク梧悍螂ケ荳崎ヲ遠謇ー蛻ー螂ケ莉ャ縲よ劒荳雁欄蟄仙働蜩台コ<EFBFBD>噪蜷第劒蜿醍鴫閾ェ蟾ア蜴滓擂蜿ッ莉螳悟<EFBFBD>荳崎ォ髴€€カ遒嶺ココ蝟懈ャ<EFBFBD>弍螂ケ<EFBFBD>御ス<EFBFBD>処荳榊ョ悟<EFBFBD>譏ッ螂ケ<EFBFBD>悟庄莉譏ッ鬘カ逹€髓サ螟エ譎壽劒逧<EFBFBD>ササ菴穂ク€荳ェ莠コ<EFBFBD>悟宵隕コ碁ュ皮視豐譛芽ォ隶蜃コ譚縲ら峩謦ュ蠑€蟋倶コ<EFBFBD>シ悟惠螳ソ闊埼€シ莉<EFBFBD>噪隗定誠驥鯉シ梧シ<EFBFBD>サ第裏螢ー逧<EFBFBD>コ頑沮譌<EFBFBD>シ悟髄譎夂畑豌エ豈肴ィ譬キ逧<EFBFBD>ォ螂礼尠菴剰<EFBFBD>蟾ア<EFBFBD>梧干逹€閹晉尠<EFBFBD>梧遠蠑€謇区惻<EFBFBD>悟所譛溷セ<EFBFBD><EFBFBD><EFBFBD>蜿亥ソ仙ソ台ク榊ョ牙慍遲牙セ<EFBFBD>捩逶エ謦ュ縲ら峩謦ュ蠑€蟋具シ悟髄譎壻コ碁ュ皮視蝨ィ體コ螟ゥ逶門慍逧<EFBFBD>蜻シ荳ュ蜃コ邇ー縲ょキ蜈キ莠コ謗我コ<EFBFBD>€蝨ー螟エ蜿題ソ樒サュ蜃<EFBFBD>蜻ィ騾壼ョオ閧晏<EFBFBD><EFBFBD>キア豬キ豌エ豈咲音謨域滑螂ケ蜊ー辣ァ蠕鈴ぅ荵育セ弱€よ悽蟆ア譏ッ蜿ッ辷ア讓譬キ逧<EFBFBD>ウ蟄ゥ蟄撰シ梧ュ譌カ豁蛻サ遨ソ逹€蟠ュ譁ー逧<EFBFBD>ー冗シ陬呻シ梧<EFBFBD>鬥匁玄閭ク鬪<EFBFBD>ご蠕怜ワ荳ェ蜈ャ荳サ縲ょケ逧<EFBFBD>岼蜈画弍迺€迺ィ逧<EFBFBD>シ碁蜒乗弍髟カ蠏檎捩髓サ遏ウ縲ょケ逧<EFBFBD>怏逵シ扈ス謾セ逹€<EFBFBD>悟ワ譏ッ豬キ蠎戊ソク蜿大<EFBFBD><EFBFBD>€譚溷<EFBFBD>縲ら悄鄒趣シ悟髄譎夊ソ吩ケ域Φ逹€縲ゆス<EFBFBD>ソ<EFBFBD>蜊エ蠕域弍髫セ蜿励€るぅ莠幢シ梧悽隸譏ッ螂ケ逧<EFBFBD>€ょ慢蠖ゥ荵溷<EFBFBD>悟ョ<EFBFBD>辷ア荵溷<EFBFBD>御サ蜿頑恚蜿狗噪髯ェ莨エ荵溷<EFBFBD>梧悽譚驛ス蠎碑ッ譏ッ螂ケ逧<EFBFBD>€ゆス<EFBFBD>ケ邇ー蝨ィ蜊エ蜿ェ閭ス蝨ィ譌<EFBFBD>莠コ髣ョ豢<EFBFBD>ァ定誠驥鯉シ御セ晞擒鄂醍サ懆ソ樊磁逧<EFBFBD>焔譛コ蜴サ蟆丞ソ<EFBFBD>ソシ鄙シ蝨ー蛛キ迸<EFBFBD><EFBFBD>逵シ蜴溷ア樔コ手<EFBFBD>蟾ア逧<EFBFBD>函譌莨壹€€<EFBFBD>
 窶應ス<EFBFBD>逵儀鬲疲€比コ<EFBFBD>シ檎悄諱カ蠢<EFBFBD>€€€€€逵狗捩蜷悟ュヲ蜿醍サ吩ス<EFBFBD><EFBFBD>カ域<EFBFBD><EFBFBD>御ス<EFBFBD>髯キ蜈<EFBFBD>イ画€€€€€莉皮サ<EFBFBD>Φ荳€諠ウ<EFBFBD>御ス<EFBFBD>隗牙セ苓<EFBFBD>蟾ア遑ョ螳樣ュ疲€比コ<EFBFBD>シ悟叉菴ソ陲ォ驗吝キ諠ウ隕髄辭滉ココ螳牙茜蜷第劒蟆丞ァ舌€€€€諤晁€<EFBFBD><EFBFBD>荳芽ソ<EFBFBD><EFBFBD>御ス<EFBFBD>蜀ウ螳壼屓蛻ー邇ー螳橸シ梧叛蠑<EFBFBD><EFBFBD>閼代€€€€莉頑劒譛牙髄譎壼ー丞ァ千噪逶エ謦ュ<EFBFBD>御ス<EFBFBD><EFBFBD>荳句ソ<EFBFBD>シ梧イ譛臥せ霑帛悉<EFBFBD>€梧弍蛟貞エ蟆ア逹縲ゅ€€€隨ャ莠悟<EFBFBD>御ス<EFBFBD>襍キ蠕怜セ域掠縲ゅ€€€<EFBFBD>荳コ閾ェ莉惹ス<EFBFBD>€蟋狗恚蜷第劒蟆丞ァ仙錘<EFBFBD>悟ーア蜈サ謌蝉コ<EFBFBD>掠逹譌ゥ襍キ逧<EFBFBD><EFBFBD>諠ッ<EFBFBD><EFBFBD>荵滓イ譛芽オ門コ願ソ<EFBFBD>€€€€<EFBFBD>遖サ蠑€<EFBFBD>強蟆冗噪蜃コ遘溷ア具シ梧擂蛻ー莠<EFBFBD><EFBFBD>蜿ク<EFBFBD>梧兜蜈<EFBFBD>菴應クュ縲ゅ€€€菴懷セ育エッ<EFBFBD>御ス<EFBFBD>諢溯ァ画怏莠帷夢諠ォ縲ゅ€€€<EFBFBD>諠ウ襍キ莠<EFBFBD><EFBFBD>辟カ蟆丞ァ仙<EFBFBD>驕楢ァ<EFBFBD>醍噪荳榊<EFBFBD>ェ隸<EFBFBD>ョコ<EFBFBD>御サ蜿雁ケ逧<EFBFBD>ャ大ョケ<EFBFBD>檎Θ髣キ蜃剰スサ莠<EFBFBD>ク榊ー代€€€€€霑醍サ<EFBFBD>柄螟ク螂紋ス<EFBFBD>菴懷セ亥巻蜉幢シ悟悪莠コ荳咲衍驕謎クコ菴穂ク€蜷第諠ー逧<EFBFBD><EFBFBD><EFBFBD>悟惠蜃<EFBFBD>荳ェ譏滓悄蜑榊シ€蟋倶ク€蜿榊クク諤慍蜍螂九€€€€蜿ェ譛我ス<EFBFBD>閾ェ蟾ア遏驕鍋炊逕ア縲ゅ€€€謦題ソ<EFBFBD><EFBFBD>刈迴ュ逧<EFBFBD>慮髣エ<EFBFBD>御ス<EFBFBD>蝗槫芦莠<EFBFBD><EFBFBD>遘溷ア具シ梧遠蠑€<EFBFBD>門獄霓ッ莉カ<EFBFBD>悟唆蜿醍鴫莨壼遭蟾イ扈乗妙莠<EFBFBD>シ御ス<EFBFBD>闊堺ク榊セ鈴ぅ莠幃蝶<EFBFBD>梧園莉蜀ウ螳夊<EFBFBD>蟾ア荵ー闖懷鬣ュ縲ゅ€€€螳樣刔荳奇シ御ス<EFBFBD>逵句髄譎壼ー丞ァ仙錘蟆ア蠑€蟋狗ャャ荳€蟆晁ッ慕捩蛛夐<EFBFBD>梧イ譛臥せ霑<EFBFBD>門獄莠<EFBFBD>€€€€蝨ィ雜<EFBFBD>クゆス<EFBFBD>逵句芦閾ェ蟾ア荳€蜷大セ亥万谺<EFBFBD>民迚<EFBFBD>惠謇捺釜<EFBFBD><EFBFBD>€荳具シ梧イ譛我ケー縲ゅ€€€<EFBFBD>荳コ菴<EFBFBD>蝨ィ逵句髄譎壼ー丞ァ仙錘<EFBFBD>悟ーア蜀堺ケ滓イ譛画垓鬣ョ證エ鬟溯ソ<EFBFBD>シ檎爆閾ウ霑樣峺鬟滄<EFBFBD>謌呈脂縲ゅ€€€蝗槫ョカ謚企ュ蛛壼<EFBFBD>御ス<EFBFBD>螳蛾撕蝨ー蜷<EFBFBD>ョ御コ<EFBFBD>€€€€逵狗捩逕オ閼托シ御ス<EFBFBD>蜿醍鴫貂ク謌丞キイ扈丞セ井ケ<EFBFBD>譖エ譁ー莠<EFBFBD>€€€€<EFBFBD>荳コ菴<EFBFBD>蝨ィ逵句髄譎壼ー丞ァ仙錘<EFBFBD>御ケ滓滑荳€逶エ豐芽ソキ蛻ー騾壼ョオ逧<EFBFBD>クク謌冗サ呎<EFBFBD>謗我コ<EFBFBD>€€€€€扈茨シ御ス<EFBFBD>霑俶弍謇灘シ€譏ィ螟ゥ譎壻ク顔噪蠖墓眺<EFBFBD>檎恚蛻ー莠<EFBFBD>髄譎壼ー丞ァ千Ο諠<EFBFBD>慍謇捺魚蜻シ縲ゅ€€€窶憺カ譎壻ココ莉ャ<EFBFBD>梧劒荳雁ス蜻€~<EFBFBD>€晏髄譎壼ー丞ァ仙<EFBFBD>豌泌慍謇捺魚蜻シ縲ゅ€€€<EFBFBD>蜿題<EFBFBD><EFBFBD>ソ<EFBFBD>慍隨台コ<EFBFBD>オキ譚縲ゅ€€€窶懈劒荳雁<EFBFBD>€昜ス<EFBFBD>隸エ縲ゅ€€€<EFBFBD>蠢ス辟カ諢剰ッ<EFBFBD>芦荳€莉カ莠具シ悟ケ莉取擂豐譛牙惠菴<EFBFBD>邇ー螳樣蜃コ邇ー霑<EFBFBD>シ悟唆蟾イ扈丞ー<EFBFBD><EFBFBD>邉溽ウ慕噪逕滓エサ謾ケ蜿倥€€€€窶ヲ窶ヲ縲€€逵句ョ悟ス墓眺蜷趣シ御ス<EFBFBD>謇灘シ€<EFBFBD>エエ蜷ァ<EFBFBD>檎恚蛻ー莠<EFBFBD><EFBFBD>謔臥噪鬘カ遒嶺ココ蝨ィ逕ィ陦ィ諠<EFBFBD>桁蠑墓オ<EFBFBD>シ梧怏荳肴<EFBFBD>逵溽嶌逧<EFBFBD>キッ莠コ蝨ィ鬪るュ蝨郁エオ迚ゥ縲ゅ€€€<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ぅ莠幄セア鬪ょ<EFBFBD><EFBFBD><EFBFBD>慍蝨ィ荳矩擇RP<EFBFBD>悟屓螟埼<EFBFBD>€€€窶懆ソ呎弍謌醍飴<EFBFBD>ス蜿ッ辷ア蜻€<EFBFBD>ケ逧<EFBFBD>錐蟄玲弍莉€荵茨シ溪€<EFBFBD>
<EFBFBD><EFBFBD>鬣ソ莠<EFBFBD>シ悟ケ譛我ク€蝮鈴シ縲ょ<EFBFBD>蜴サ荵ー荳€蝮怜柱菴<EFBFBD>€襍キ蜷<EFBFBD>シ瑚ソ呎弍雍晄級<EFBFBD>帛柱菴<EFBFBD>€莠コ荳€蜊雁帥荳ェ蜊企<EFBFBD>瑚ソ呎弍迴井ケ撰シ帛<EFBFBD>驛ィ扈吩ス<EFBFBD>荳崎<EFBFBD>蠕嶺ス<EFBFBD>謖ィ鬣ソ<EFBFBD>蜷主相隸我ス<EFBFBD>閾ェ蟾ア蜷<EFBFBD>ソ<EFBFBD><EFBFBD>シ瑚ソ呎弍蝌臥<EFBFBD>帶滑鬣シ蛛キ蛛キ謇疲脂<EFBFBD>瑚キ滉ス<EFBFBD>€蝮鈴ソ<EFBFBD>瑚ソ呎弍荵<EFBFBD><EFBFBD>帶滑鬣シ阯剰オキ譚諠ウ扈吩ス<EFBFBD>€荳ェ諠雁万<EFBFBD>御ス<EFBFBD>弍謗丞<EFBFBD>譌カ蜿醍鴫遒取<EFBFBD><EFBFBD>ク堺コ<EFBFBD><EFBFBD>シ御コ取弍蛹冶コォ蟆丞働蛹<EFBFBD><EFBFBD>瑚ソ呎弍謌醍噪體ク蟶劒譎壹€€<EFBFBD>
<EFBFBD>窶應ス<EFBFBD>蟇ケ蝌臥蟆丞ァ千噪辷ア譛牙<EFBFBD>€€ァ郤ヲ300蜈銀€€<EFBFBD>300蜈具シ滉ス<EFBFBD>譏ッ諠ウ隸エ莠コ邀サ逧<EFBFBD>ソ<EFBFBD>э螟ァ郤ヲ譏ッ300蜈句雛<EFBFBD>€€應ク搾シ碁シ<EFBFBD><EFBFBD><EFBFBD>ケウ蝮<EFBFBD>ス馴螟ァ郤ヲ譏ッ300蜈具シ悟屏豁謌第弍蜈ィ霄ォ蠢<EFBFBD>慍辷ア逹€蝌臥蟆丞ァ舌€€拏扈吝ソ<EFBFBD>ソゾ[扈吝ソ<EFBFBD>ソゾ窶<EFBFBD>
<EFBFBD>霄ォ菴馴<EFBFBD>ッ丈ク€荳ェ蜴溷ュ宣<EFBFBD>閾ェ荳€鬚礼<EFBFBD>轤ク莠<EFBFBD>噪諱呈弌<EFBFBD>御ス<EFBFBD>蟾ヲ謇狗噪蜴溷ュ蝉ク主承謇狗噪蜴溷ュ蝉ケ溯ョク譚閾ェ荳榊酔逧<EFBFBD>譏溘€りソ吝ョ槫惠譏ッ謌第園遏驕鍋噪迚ゥ逅<EFBFBD>ュヲ荳ュ譛€蟇瑚ッ玲э逧<EFBFBD>ク懆ソ<EFBFBD><EFBFBD> <EFBFBD><EFBFBD>€<EFBFBD><EFBFBD>譏ッ譏溷ー<EFBFBD>......霑吝<EFBFBD>荳ュ扈丞紙莠<EFBFBD>壼ー托シ梧リ髯ゥ縲キァ蜷茨シ御ク牙鴻荳也阜逧<EFBFBD>髞吶€<EFBFBD><EFBFBD><EFBFBD>梧燕閭ス隶ゥ謌台サャ驕<EFBFBD>スシ豁縲よ<EFBFBD>莉ャ驛ス譏ッ譏溷ー伜賦縲ゆス<EFBFBD><EFBFBD><EFBFBD>霑呎<EFBFBD>キ逧<EFBFBD>ココ<EFBFBD>梧弍譏溷ー倬<EFBFBD>碁サッ豺<EFBFBD>蜈臥噪驍遘阪€ょ叉菴ソ譏ッ譏滂シ御ケ溷コ碑ッ譏ッ譛€荳埼略莠ョ逧<EFBFBD>ぅ荳€鬚励€€辟カ<EFBFBD>御ス<EFBFBD>荳堺ク€譬キ縲ゆス<EFBFBD>譏ッ螟ゥ荳顔噪譏溯セー<EFBFBD>碁略閠€閠悟コ逶ョ縲ょ叉菴ソ螳<EFBFBD>ョ咎<EFBFBD>梧怏逹€荳崎ョ蜈カ謨ー逧<EFBFBD>€き逶ョ逧<EFBFBD>€遲画弌<EFBFBD>御ケ溯ソ應ク榊ヲゆス<EFBFBD><EFBFBD><EFBFBD>霎峨€りスサ螢ー蜩シ蜚ア<EFBFBD>御シ玲弌謨帑コ<EFBFBD><EFBFBD>闃剃クコ菴<EFBFBD><EFBFBD>成縲ょ働襍キ鮠サ蟄撰シ悟m譎夂噪髴樔ケ溷屏菴<EFBFBD>鮟ッ辟カ縲りキウ荳€謾ッ闊橸シ御シシ譛亥<EFBFBD>蝗樊雷莠守ゥコ荳ュ縲りッエ襍キ諠<EFBFBD>ッ晢シ檎匳譌カ蟆城岑逍冗柾縲オク豸ヲ蠢<EFBFBD>ェ昴€ゆス<EFBFBD>譏ッ荳<EFBFBD>鴻遶隸晞<EFBFBD>ォ螳域侃逧<EFBFBD>ウ荳サ隗偵€<EFBFBD>蝟懈ャ<EFBFBD><EFBFBD>悟ワ蝟懈ャ螟ゥ荳顔噪譏溯セー驍譬キ蝟懈ャ<EFBFBD>縲や€<EFBFBD>
<EFBFBD>蝌臥蝗樊擂莠<EFBFBD>シ悟惠譫晄ア溽噪螟ァ譯縲ょケ蝗樊擂逧<EFBFBD>ぅ螟ゥ譏ッ蜈ュ譛茨シ悟ゥ荳雁唆鬟倡捩髮ェ縲よ怏莠コ蜻願ッ画<EFBFBD><EFBFBD>ケ蜿ッ閭ス譛芽ソ俶悴莠<EFBFBD>唆逧<EFBFBD>ソ<EFBFBD><EFBFBD>謌匁弍莉€荵域€ィ豌斐€<EFBFBD>驕難シ<EFBFBD> 蜿ッ閭ス謌大荳榊芦縲らャャ荳€芦螂ケ<EFBFBD>梧弍蝨ィ譫晄ア溘€ケ蟶ヲ逹€逕懃莫逧<EFBFBD>ャ醍恚逹€謌托シ檎恚逹€謌第怏莠帛書諤オ縲よ怏驍荵井ク€迸ャ謌台シシ荵守恚蛻ー莠<EFBFBD>亠蜈峨€<EFBFBD>諷御ケア逧<EFBFBD>ァサ蠑€<EFBFBD>コソ<EFBFBD>ケ蠕<EFBFBD>峩譛晄<EFBFBD>襍ー譚<EFBFBD>悟セョ蠕ョ蠑ッ逹€閻ー<EFBFBD>碁擇蟶ヲ謌剰剞逧<EFBFBD>悍逹€謌代€ゆケ<EFBFBD><EFBFBD>ク区ーエ驕鍋噪閠<EFBFBD><EFBFBD><EFBFBD>檎ャャ荳€逵玖ァ<EFBFBD><EFBFBD>梧弍逹ク榊シ€逵シ逧<EFBFBD>€<EFBFBD> 謌第<EFBFBD>荵ア逧<EFBFBD>Φ襍カ邏ァ騾<EFBFBD>オー縲や€懷ー剰€<EFBFBD><EFBFBD><EFBFBD>御ス<EFBFBD>螂ス蜻€縲や€晞ぅ譏ッ螂ケ蟇ケ謌題ッエ逧<EFBFBD>ャャ荳€隸昴€<EFBFBD>扈吝ソ<EFBFBD>ソゾ[扈吝ソ<EFBFBD>ソゾ[扈吝ソ<EFBFBD>ソゾ窶<EFBFBD>
蜷ャ莠<EFBFBD>ス螟夐<EFBFBD>檎悄逧<EFBFBD>セ磯怫謦シ<EFBFBD>御ス懆€<EFBFBD>ア槫ョ樊弍逕ィ蠢<EFBFBD><EFBFBD>シ御サ雁ゥ蟆ア荳榊書逞<EFBFBD><EFBFBD>シ檎ャャ荳€蜀咎柄隸<EFBFBD>シ梧紛轤ケ隸サ蜷取縲ら峩謦ュ驥鯉シ娯€懆レ髱<EFBFBD>€譌ゥ蟾イ髮ェ蛛懃噪遯玲ゑシ御ス<EFBFBD>隸エ逹€譛ェ譖セ蛻ー霎セ逧<EFBFBD>アア鬘カ窶晢シ碁ぅ譏ッ荳惹ス<EFBFBD>螟ア荵倶コ閾ら噪闊槫床譴ヲ 縲や€<EFBFBD><EFBFBD>捩隨ャ荳我ココ遘ー逧<EFBFBD>螳夲シ檎畑鬟手スサ莠第キ<EFBFBD>€コヲ謗ゥ鬣ー驍谿オ扈丞紙窶晢シ梧<EFBFBD>蟾イ扈剰ョー荳崎オキ螂ケ逧<EFBFBD>ァ灘錐<EFBFBD>悟宵隶ー蠕苓オキ闊樒ソゥ鄙ゥ逧<EFBFBD>セァ蠖ア窶晢シ瑚ソ<EFBFBD>悉驍荳ェ貊閻皮Ο諠<EFBFBD>シ悟惠闊槫床荳頑硯豢呈ア玲ーエ逧<EFBFBD><EFBFBD>蟾イ扈乗キ蜃コ隶ー蠢<EFBFBD>シ悟宵萓晉ィ€逡吩ク区崟扈冗ソゥ鄙ゥ襍キ闊樒噪霄ォ蠖ア縲ょ多荳肴弍諤サ譛牙ゥ驕馴<EFBFBD><EFBFBD>噪豕ィ螳夲シ碁ぅ荵亥<EFBFBD>蟷ウ縲ょ床荳句香蟷エ闍ヲ扈<EFBFBD>シ悟宵荳コ蜿ー荳願€€逵シ逧<EFBFBD>€蛻ケ<EFBFBD>悟庄蠖楢<EFBFBD><EFBFBD>э螟匁擂陲ュ<EFBFBD>ヲ蜊エ遒惹コ<EFBFBD>€りココ蝨ィ逞<EFBFBD>コ贋ク奇シ碁埓驕捺ヲ諠ウ蟆ア隕惠豁扈育サ謎コ<EFBFBD><EFBFBD>溯ソ吩ケ溽ス<EFBFBD>御ケ溽ス縲るぅ荳ェ譖セ扈冗噪菴<EFBFBD><EFBFBD>御ケ溽サ丞紙霑<EFBFBD>焚荳ェ譏遘具シ檎サ丞紙豎玲ーエ荳取ャ荵撰シ御ス<EFBFBD>ケ蜊エ襍ー霑<EFBFBD><EFBFBD>ヲらコ讌シ譴ヲ逧<EFBFBD>ご諠<EFBFBD>シ御サ守屁譫€譌カ荳<EFBFBD>ョカ轣ッ轣ォ襍ー蛻ー驕<EFBFBD>遨コ髣ィ逧<EFBFBD><EFBFBD>黄蜃矩峺縲よ慮蜈画噛蟷ウ莠<EFBFBD>崟扈冗噪莨<EFBFBD>悟ソ<EFBFBD>クュ逧<EFBFBD>冠闥ゆケ溷ヲよイ咏浹陲ォ豬ソ<EFBFBD>噪蜈蛾亢諷蜀イ蛻キ豸域淵<EFBFBD>ウ蟄ゥ蜿磯譁ー諡セ襍キ莠<EFBFBD>髄蠕€闊槫床逧<EFBFBD>ヲ諠ウ縲らサ井コ趣シ悟ケ蝨ィasoul謇セ蛻ー莠<EFBFBD>眠逧<EFBFBD><EFBFBD>蜿ー<EFBFBD>蛻ー莠<EFBFBD>髪謖ケ逧<EFBFBD>€荳ェ鬲ゆサャ縲や€<EFBFBD>蜿ォ雍晄級窶晄ュ蛻サ<EFBFBD>御ス<EFBFBD>蜷大<EFBFBD>荳也阜螳<EFBFBD><EFBFBD><EFBFBD>逕滂シエ晄栫譏滉サャ騾剰ソ<EFBFBD>ア丞ケ包シ檎恚菴<EFBFBD>蝨ィ髟懷エ蜑榊ヲよュ蠢ォ荵占<EFBFBD><EFBFBD>瑚ソ呵ョゥ謌台ケ滄諡セ譴ヲ諠ウ蜴サ逶エ髱譛ェ遏<EFBFBD>悴譚縲ゆクコ菴<EFBFBD><EFBFBD>撓蠑コ閠悟勘螳ケ<EFBFBD>悟惠逶エ謦ュ髣エ荳コ菴<EFBFBD>謇田all蜻仙槙<EFBFBD>悟ュ怜ュ怜唱蜿驛ス蜿題<EFBFBD>逵溷ソ<EFBFBD>€€<EFBFBD>莉ャ髣ェ辜惠螟懃ゥコ<EFBFBD>梧Φ辣ァ莠ョ菴<EFBFBD>螟懈劒逧<EFBFBD><EFBFBD>梧イ譛井コョ譌カ菴<EFBFBD>蜿ッ蜷大圏譁ケ霓ャ蜉ィ<EFBFBD><EFBFBD>莉ャ蝨ィ螟ゥ遨コ窶晢シ瑚ソス譴ヲ逧<EFBFBD>キッ荳奇シ瑚エ晄栫譏滉サャ髯ェ逹€<EFBFBD><EFBFBD>コォ豈丈ク€蠢ォ荵撰シ悟柱菴<EFBFBD>扈丞紙豈丈ク€荳ェ蝮主攅<EFBFBD>御ス<EFBFBD>譏ッ諢溷芦螟ア譛幢シ碁ぅ蟆ア謚ャ螟エ逵句髄螟ゥ遨コ蜷ァ<EFBFBD><EFBFBD>莉ャ荳€逶エ驛ス蝨ィ縲ょウ蟄ゥ遶吝惠驍荳ェ譴ヲ諠ウ荳ュ蝟<EFBFBD>憶髣ェ莠ョ逧<EFBFBD><EFBFBD>蜿ー荳奇シ悟<EFBFBD>蝗樊悍霑<EFBFBD><EFBFBD>梧慮蜈画オソ<EFBFBD>ョ幄凶豎滓イウ<EFBFBD>ケ菴丞惠豎溷<EFBFBD>€碁ぅ荳ェ霑<EFBFBD>悉逧<EFBFBD>ケ菴丞惠豎溷ーセ<EFBFBD>悟屓蜻ウ逹€<EFBFBD><EFBFBD>檎ォ滓怏莠帶螯る囈荳也噪譛ヲ閭ァ縲ゆス<EFBFBD>€<EFBFBD>ク榊庄隹擾シ梧擂閠<EFBFBD>柑蜿ッ霑ス<EFBFBD><EFBFBD><EFBFBD>謳コ謇区崟扈城ぅ荳ェ貊€譴ヲ諠ウ逧<EFBFBD><EFBFBD>蟾ア<EFBFBD><EFBFBD>蜉帑サ襍エ<EFBFBD>悟悉霑ス蟇サ閾ェ蟾ア逧Бsoul譴ヲ蜷ァ<EFBFBD>瑚エ晄栫譏滉サャ莨壻ク€逶エ髯ェ逹€<EFBFBD>縲や€<EFBFBD>
荳肴耳蝌臥蟆丞ァ仙香蟷エ莠<EFBFBD>€ケ逧<EFBFBD>錐豌泌柱蜃コ蝨コ雍ケ驛ス荳€豸ィ蜀肴カィ<EFBFBD><EFBFBD>蜴溷慍雕乗ュ<EFBFBD><EFBFBD>ケー荳堺ク贋ク楢セ台ケ滓遠荳崎オキ讎懊€らサ井コ主ケエ蜑崎ォ蜈ャ蜿ク螳画賜荳句イ暦シ梧伽蟾菴懈慮謌第燕蝨ィ霍ッ霎ケ蟷ソ蜻雁書邇ー蛻昜サ蜈キ莠コ蟾イ扈丞ス謎ク贋コ<EFBFBD>獅髟ソ縲よ慮髣エ螟ェ荵<EFBFBD>シ御ク€<EFBFBD><EFBFBD>蜿倅コ<EFBFBD>€ょ芦螟<EFBFBD>兜邂€<EFBFBD>噪譌カ蛟呎<EFBFBD>諠ウ襍キ莠<EFBFBD>€蜷堺ココ荳贋ココ逧<EFBFBD><EFBFBD>€<EFBFBD>€懆ソ吩コ帑ココ蜿ェ驟榊惠荳区ーエ驕馴蠎ヲ霑<EFBFBD>嶌蟇ケ豈碑セ<EFBFBD>ア雍<EFBFBD>ココ逕溘€€晏ワ譏ッ荳€霍ウ霑<EFBFBD>セ咎葎逧<EFBFBD>幡魎<EFBFBD>魑櫁ォ鄒ス閠€豁ヲ謇ャ螽慍遶吝惠髣ィ豐ソ荳奇シ悟ッケ蜈カ莉冶ソ伜惠霍ウ逧<EFBFBD>魍シ隸エ<EFBFBD>€應ス<EFBFBD>荳崎鯉シ€<EFBFBD>蠖捺慮蠕域Φ蜿埼ゥウ<EFBFBD>悟庄莉冶ッエ荳ュ莠<EFBFBD>€<EFBFBD>驕捺<EFBFBD>遑ョ螳樔ク崎€<EFBFBD>荵区園莉霍ウ莠<EFBFBD>キウ<EFBFBD>悟宵譏ッ荳コ莠<EFBFBD>恚荳玖<EFBFBD>蟾ア閭ス霍ウ謌蝉サ€荵域<EFBFBD>キ鄂<EFBFBD>€<EFBFBD>螳樊ッ乗擅魎魍シ逧<EFBFBD>セ咎葎驛ス荳肴弍荳€譬キ鬮倡噪縲よ<EFBFBD>ソ<EFBFBD>セ咎葎蝨ィ豌エ荳狗噪魎魍シ縲ら恚襍キ譚譏ッ魍シ<EFBFBD><EFBFBD>螳樒函閠御クコ鮴吶€ゆケ滓怏逧<EFBFBD>函閠御クコ魍シ閧峨€ゆケ溯ァソ<EFBFBD>ス霑千噪魎魍シ<EFBFBD>碁葎陲ォ蜷<EFBFBD>ァ榊ァ謇区早蛻ー豐ウ驥御コ<EFBFBD>€<EFBFBD>荵滓悄蠕<EFBFBD>ソ<EFBFBD>ス霑撰シ悟宵譏ッ豐閠悟キイ縲りッエ襍キ譚霑吝ーア譏ッ莠コ諤ァ蜷ァ縲よ<EFBFBD>荳崎ョィ蜴悟ゥ驕馴<EFBFBD><EFBFBD>御ス<EFBFBD>弍隶ィ蜴悟悪莠コ逧<EFBFBD>ス霑絶€€泌宵譏ッ蝗<EFBFBD>荳コ謌第イ譛牙ス霑千ス<EFBFBD>€<EFBFBD>荵滓怏莠イ莠コ蜥悟ョ<EFBFBD>迚ゥ莨夂函逞<EFBFBD>シ帶<EFBFBD>逵シ逾樔ケ滓玄郤ッ逵溷賦縲りョィ蜴悟<EFBFBD>辟カ蟆丞ァ仙香蟷エ莠<EFBFBD>€りョィ蜴檎噪譖エ譏ッ雜頑擂雜頑キア逧<EFBFBD>裏蜉帶縲りコォ蝨ィ豕貎ュ逧<EFBFBD>ココ譏ッ豐蜉帶ー泌<EFBFBD>髞狗噪蜷ァ縲ゆク画オ噪莠コ逕溷宵莨夊ョゥ荳顔ュ我ココ荳榊ア台ク€鬘セ蜷ァ縲よ<EFBFBD>蝮蝉コ戊ァょ<EFBFBD>ゥ遨ケ譏滓オキ萓晉€逵シ縲ょ庄謌醍握荳榊<EFBFBD>莠募コ輔€るぅ謌大ーア荳榊<EFBFBD>逵区弌譏滉コ<EFBFBD>€ゆク也阜驍荵亥<EFBFBD>御ス<EFBFBD>謌醍噪莉ス縲ょソ倩ョー蝌臥蟆丞ァ仙香蟷エ莠<EFBFBD>€ょ庄霍ッ荳顔恚隗苓セケ逧<EFBFBD>ァ闕ァ蟷募惠謾セA-soul逧<EFBFBD>眠蟷エ闃ら岼<EFBFBD><EFBFBD>霑俶弍讌槫惠驍驥御コ<EFBFBD>€<EFBFBD>譛芽ソ題ァ<EFBFBD>シ御ス<EFBFBD>€サ隗牙セ礼愍逹帛スア蠖ア扈ー扈ー<EFBFBD>碁崟豌疲擂閾ェ螟壼ケエ莉蜑阪€りソ吩クェ蟷ソ蜻贋ス埼撼蟶ク雍オ縲ら悄逧<EFBFBD><EFBFBD>荵滉ク肴弍蟆竣莠<EFBFBD>賦縲よ竃蜿玖ソ伜惠諠ヲ隶ー莉紋サャ逧<EFBFBD>クュ蟄舌€よ劒譎壻サ咲蜿ェ譛芽闘闢ャ陬呻シ<EFBFBD>100鬥匁ュ檎ォ溽霑俶ャ<EFBFBD>€<EFBFBD>ォ邊牙エ蟆丞屬菴謎サ4%蟷エ蛹門榊茜隶蝨ィ蟆乗悽蟄蝉コ<EFBFBD>€よΦ襍キ螂ケ鬥匁眺譌カ邇ゥ2077荳矩ュ荳句セ苓スー霓ー辜育ヨ<EFBFBD><EFBFBD>€霎ケ蜿鯛€懃イ我ク晉煙謾ケ謌先劒鬣ュ莠コ蜷ァ窶昶€懷柱蝌臥迴井ケ仙<EFBFBD>遒鈴ュ窶昶€懷柱荵<EFBFBD>正蜃第擂遒鈴ュ窶昜ク€霎ケ蠢堺ス丞姐窶懷柱雍晄級扈<EFBFBD>級遒鈴ュ窶晉噪蜀イ蜉ィ縲olo萓晉諡芽キィ<EFBFBD>悟盾蝗辣ァ譌ァ逾曚縲りエ晄級諤サ譏ッ蜈ュ霎ケ蠖謌伜<EFBFBD>御ケ<EFBFBD>正蜈サ莠<EFBFBD><EFBFBD>蜷ィ逧<EFBFBD>achi<EFBFBD>檎処荵占ソ俶弍驍荳ェ遑ャ螢ウ霓ッ螯ケ縲ょ<EFBFBD>辟カ蟆丞ァ蝉セ晉蜊冶酔鞫キキ縲ゆサ€荵磯<EFBFBD>蜿假シ梧弍謌第イ霍滉ク雁ケ莉ャ縲ょ沁驥檎Α轣ォ蟷<EFBFBD><EFBFBD>蜈我ク狗噪莠コ辜ュ諠<EFBFBD>嶌諡<EFBFBD>碁亢蠖ア驥檎噪莠コ蜴倶ク区ず蜉ィ縲よ怙莠ョ逧<EFBFBD>慍譁ケ蝌臥蟆丞ァ先オ<EFBFBD>ャ題オキ闊橸シ悟<EFBFBD>蠖ア莉主ケ陲夜龍謨關ス<EFBFBD>悟ワ譏ッ髮ィ螟ゥ闃ア莨櫁スサ譌具シ梧燥譖ウ髣エ豢剃ク区ウェ濶イ逧<EFBFBD>匠縲ょソス辟カ逵シ逹帶怏轤ケ讓邉翫€<EFBFBD>蟆丞ー隸エ<EFBFBD>€懈眠蟷エ螂ス蝠奇シ悟<EFBFBD>辟カ蟆丞ァ舌€€昜ク咲鯵蝌臥蟆丞ァ仙香蟷エ莠<EFBFBD>€ょ香蟷エ驥鯉シ檎鯵霑<EFBFBD>噪豈丈クェ莠コ驛ス蜒丞ケ縲<EFBFBD>
蝟懈ャ辟カ辟カ<EFBFBD>御ク榊刈謗ゥ鬣ー諤サ譏ッ蠕ョ隨醍噪辟カ辟カ<EFBFBD>御ク肴弍螯匁イサ螯ゥ蟐夂噪蜊惹クス闊槫ァャ<EFBFBD>御ク肴弍谿句ソ肴裏諠<EFBFBD>噪蜀キ驟キ蜈ャ荳サ<EFBFBD>悟宵譛臥捩蜊慕コッ辜よシォ逧<EFBFBD>干譬キ隨大ョケ<EFBFBD>御ク榊クヲ蠢ァ莨<EFBFBD>悟唆螯ょ酔騾晞峺閠梧擂逧<EFBFBD>ゥ髯<EFBFBD>ケ矩趣シ碁伜差莠<EFBFBD><EFBFBD><EFBFBD>ク顔噪蠢ァ驛€戊牡逧<EFBFBD>柄蜿題<EFBFBD>ー逹€鄒惹クス逧<EFBFBD>擽陜カ扈難シ悟ョ晉浹闊ャ逧<EFBFBD>曙逵ク荳ュ髫宣嚼豬<EFBFBD>愆荳榊ュ伜惠逧<EFBFBD>樔シ<EFBFBD>悟ーア譏ッ霑呎<EFBFBD>キ蟄千噪辟カ辟カ<EFBFBD>御ク榊刈謗ゥ鬣ー諤サ譏ッ蠕ョ隨醍噪辟カ辟カ<EFBFBD>梧凶譛臥モ貍ォ隨大ョケ逧<EFBFBD>辟カ<EFBFBD>梧凶譛我コ伜商荳榊序逧<EFBFBD>セ惹クス縲りッエ荳榊<EFBFBD><EFBFBD>隗会シ悟唆遏驕灘屏荳コ辟カ辟カ逧<EFBFBD>ャ大ョケ<EFBFBD>悟喧蠑€<EFBFBD><EFBFBD>蜀ー髮ェ逧<EFBFBD>藍霑ケ縲よΦ隕シク蜃コ謇区噛鞫ク辟カ辟カ逧<EFBFBD>書荳晢シ悟庄譏ッ蜊エ蜿ェ閭ス隗ヲ蛻ー蜀ー蜀キ逧<EFBFBD>ャ螻擾シ悟宵譛臥辟カ貂<EFBFBD>セ育噪逵シ逾橸シ御セ晄立譏ッ謌第園辭滓i縲ら辟カ豌ク霑懈ク<EFBFBD>セ育噪迸ウ莉辟カ辜よシォ蜊慕コッ逧<EFBFBD>ャ大ョケ辟カ辟カ莠伜商荳榊序逧<EFBFBD>セ惹クス辟カ辟カ譏ッ謌大髪荳€<EFBFBD>怙辷ア<EFBFBD>辟カ譏ッ謌第怙辷ア逧<EFBFBD>髪荳€縲ら辟カ逧<EFBFBD>万螂ス縲ソォ荵舌€<EFBFBD>埓霑<EFBFBD>€<EFBFBD>柱譌<EFBFBD>蜉ゥ<EFBFBD><EFBFBD>驛ス莠<EFBFBD>ヲよ欠謗鯉シ悟万谺闕芽雌陋狗ウ募柱鮟<EFBFBD><EFBFBD>御クェ諤ァ貂ゥ譟泌処蝟<EFBFBD><EFBFBD>悟庄辷ア菴楢エエ逧<EFBFBD>ウ蟄ゥ蟄撰シ梧怏逹€隸エ荳榊<EFBFBD><EFBFBD>シ倡せ<EFBFBD><EFBFBD>諠ウ辟カ辟カ荳€螳壽弍荳雁ゥ襍蝉コ域<EFBFBD>€螂ス逧<EFBFBD>シ迚ゥ縲<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>恚蜿区怏蠕亥夲シ御ス丞惠荳懆セケ逧<EFBFBD>ー城アシ<EFBFBD>御ス丞惠蜊苓セケ逧<EFBFBD>ー城ケソ<EFBFBD>御ス丞惠隘ソ霎ケ逧<EFBFBD>擽陜カ<EFBFBD>御ス丞惠蛹苓セケ逧<EFBFBD>ー城ク溘€ゆサ紋サャ蟶ヲ鮠<EFBFBD><EFBFBD>蝨ィ阡夊統濶イ逧<EFBFBD>キア豬キ驥御ク取ーエ豈榊<EFBFBD>貂ク<EFBFBD>悟惠遒ァ扈ソ逧<EFBFBD>コ矩ケソ譽ョ譫鈴蝟晄ク<EFBFBD>勣逧<EFBFBD>愆豌エ<EFBFBD>悟惠辜ュ髣ケ逧<EFBFBD>岑譫鈴遨ソ譴ュ邇ゥ閠搾シ悟惠蟷ソ陲<EFBFBD>ゥ遨コ荳ュ閧<EFBFBD>э鬟樒ソ斐€るシ<EFBFBD><EFBFBD>菴丞惠轣ッ轣ォ髦醍所逧<EFBFBD>沁蟶ゑシ悟庄鮠<EFBFBD><EFBFBD>驕楢ソ咎譛我ク€<EFBFBD>ア樔コ朱シ<EFBFBD><EFBFBD><EFBFBD>碁シ<EFBFBD><EFBFBD>遨ソ霑<EFBFBD>キ晄オク肴<EFBFBD><EFBFBD><EFBFBD>檎汲螂皮捩蝗槫芦閾ェ蟾ア髦エ貉ソ鮟第囓逧<EFBFBD>ク区ーエ驕難シ悟シコ辜育噪閾ェ蜊台ケ区ュ隶ゥ鮠<EFBFBD><EFBFBD><EFBFBD>豕募他蜷ク<EFBFBD>碁シ<EFBFBD><EFBFBD>萓晞擒蝨ィ荳区ーエ驕鍋シ晞囮霎ケ<EFBFBD>悟屏荳コ蝌臥蟆丞ァ先€サ莨夊キッ霑<EFBFBD>ソ咎縲り拷闔灘刈螂カ豐ケ蜉<EFBFBD>闃ア鬥呻シ梧弍蝌臥蟆丞ァ千噪蜻ウ驕薙€朱塔蜉<EFBFBD>逅エ蜉<EFBFBD>螂カ邉厄シ梧弍蝌臥蟆丞ァ千噪螢ー髻ウ縲り鰍螂丞刈髻ウ荵仙刈蠢ォ荵撰シ梧弍蝌臥蟆丞ァ千噪閼壽ュ縲や€ケ譚<EFBFBD>€晢シ碁シ<EFBFBD><EFBFBD><EFBFBD>エ蟆丞ソ<EFBFBD>慍謗蜃コ郛晞囮<EFBFBD><EFBFBD>辟カ蟆丞ァ仙セ<EFBFBD>峩襍ー霑<EFBFBD>牲髣ケ逧<EFBFBD>ココ鄒<EFBFBD>梧擂蛻ー荳区ーエ驕鍋シ晞囮霎ケ<EFBFBD>檎ォッ逹€闕芽雌陋狗ウ包シ檎シ鍋シ捺叛蝨ィ豢槫哨<EFBFBD>御ク€髦オ鬟朱塔莨シ逧<EFBFBD>ー髻ウ蜩崎オキ窶懷<EFBFBD><EFBFBD>ウ厄シ梧擂蜷<EFBFBD>辟カ逧<EFBFBD>拷闔楢寞邉募制縲や€<EFBFBD>辟カ蟆丞ァ先クゥ譟皮噪逵狗捩螳<EFBFBD>シ碁シ<EFBFBD><EFBFBD>荳咲衍荳コ菴慕ェク倶コ<EFBFBD>愍豕ェ<EFBFBD>梧裏豕墓謙蜉ィ閼壽ュ縲ょ<EFBFBD>辟カ蟆丞ァ仙ス蜒丞セ亥ア關ス<EFBFBD>檎怏螟エ霓サ霓サ逧ア襍キ<EFBFBD>€應ス<EFBFBD>荳榊万谺辟カ辟カ蜷冷€ヲ窶ヲ窶晢シ碁シ<EFBFBD><EFBFBD>蠢呵セゥ隗<EFBFBD>悟庄諞狗コ<EFBFBD>€隸昜ケ溯ッエ荳榊<EFBFBD><EFBFBD>€懃賢蜥ェ蟾イ扈剰ォ辟カ辟カ蜈ウ蝨ィ隨シ蟄宣<EFBFBD>シ悟<EFBFBD><EFBFBD>ウ紋ク咲畑螳ウ諤包シ€<EFBFBD>辟カ蟆丞ァ仙<EFBFBD><EFBFBD>噪逵狗捩鮠<EFBFBD><EFBFBD><EFBFBD>碁シ<EFBFBD><EFBFBD>莨シ荵手ヲココ莠蝨ィ螂ケ阡夊統濶イ逧<EFBFBD>曙逵ク驥鯉シ梧<EFBFBD>襍ー蜷鷹ぅ蝮苓拷闔楢寞邉包シ悟ー丞哨蜩ー晉捩縲ょ<EFBFBD>辟カ蟆丞ァ蝉シク蜃コ蟆丞ー冗噪謇具シ御シシ荵取Φ謐ァ襍キ鮠<EFBFBD><EFBFBD>縲るシ<EFBFBD><EFBFBD>螂ス蜒剰ォ髮キ蜃サ荳ュ荳€闊ャ<EFBFBD>檎憲辟カ霍ウ襍キ<EFBFBD>泌屓荳区ーエ驕難シ悟ョ<EFBFBD>蕎蜻ス蝟顔捩<EFBFBD>€<EFBFBD>蜿郁э蜿郁<EFBFBD>霑伜セ井ク鷹刹<EFBFBD><EFBFBD>辟カ蟆丞ァ蝉ク堺シ壼万谺謌醍噪<EFBFBD><EFBFBD>辟カ蟆丞ァ蝉ク堺シ壼万谺謌醍噪<EFBFBD>€<EFBFBD>辟カ蟆丞ァ占ィ諠<EFBFBD>ォ句綾霓ャ荳コ荳<EFBFBD>シ瑚ョ逵溽噪逵狗捩鮠<EFBFBD><EFBFBD>驕凪€<EFBFBD>荳崎ョク菴<EFBFBD>霑吩ケ郁ッエ閾ェ蟾ア<EFBFBD>€ケ逧<EFBFBD>愍荳ュ螂ス蜒丈ケ溽寤貊<EFBFBD>ウェ豌エ窶懈<EFBFBD>莉ャ蝌牙ソ<EFBFBD>ウ問€ヲ驛ス譏ッ蠕亥脂螳ウ逧<EFBFBD>ココ<EFBFBD><EFBFBD>
<EFBFBD>"<EFBFBD>正蟾イ扈丞惠蜥檎塙蜿倶コ€<EFBFBD>€るぅ譏ッ蜈ュ譛井ク区流逧<EFBFBD>€螟ゥ<EFBFBD>御ケ<EFBFBD>正蛻壼<EFBFBD>扈捺據驍螟ゥ逧<EFBFBD>黒莠コ逶エ謦ュ蝗槫芦螳カ<EFBFBD>梧ュ蝮仙惠螳<EFBFBD>噪豐吝書荳奇シ悟<EFBFBD>辟カ蟆ア謚贋ク€荳ェ蟷ウ譚ソ謗ィ蛻ー螂ケ閼ク荳翫€€應ケ<EFBFBD>正荵<EFBFBD><EFBFBD>御ス<EFBFBD>逵玖ソ吩クェ邊我ク晢シ御サ門ス蝪槫<EFBFBD>隘ソ蜩ヲ<EFBFBD>€晁ァ<EFBFBD>譏ッ荳€荳ェ螂ケ逧<EFBFBD>塙邊会シ御ソ顔ァ€<EFBFBD>蠎槫柱蛛遑慕噪霄ォ菴謎ク願ソ俶撃逹€蛻壼<EFBFBD>莉取ウウ豎<EFBFBD>蟶ヲ蜃コ譚<EFBFBD>ア玲カイ荳取ーエ迴<EFBFBD><EFBFBD>悟亢驥悟唆隸エ逹€莠帛<EFBFBD><EFBFBD>€ェ諤ェ逧<EFBFBD>侠隸昴€ゆケ<EFBFBD>正諢溯ァ牙芦閾ェ蟾ア逧<EFBFBD>ソ<EFBFBD>シヲ陲ォ諡ィ蜉ィ莠<EFBFBD>€荳具シ檎尠蝨ィ豈帶ッッ荳倶ク咲捩蜃臥噪螟ァ閻ソ<EFBFBD><EFBFBD>諢溯ァ牙芦莠<EFBFBD><EFBFBD><EFBFBD><EFBFBD>辜ュ縲や€懆ョゥ謌台ケ溽恚逵具シ瑚ョゥ謌台ケ溽恚逵銀€€泌島<EFBFBD>悟島<EFBFBD>御サ紋サ紋サ問€ヲ窶ヲ窶晏髄譎壻サ取イ吝書蜷朱擇謚願я陲区爾蜃コ譚<EFBFBD>御ク堺ク€莨壼<EFBFBD>蟆ア隸エ荳榊<EFBFBD>隸昜コ<EFBFBD>€€應ケ<EFBFBD>€ク亥次譚蝟懈ャ霑咏ァ肴ャセ蠑冗噪蝠奇シ瑚ヲク搾シ悟ァ蝉サャ蜆ソ蟶ョ菴<EFBFBD>謇セ謇セ閨皮ウサ譁ケ蠑擾シ溪€晉処荵仙惠荳€<EFBFBD>€苓カ縲や€應ス<EFBFBD>蛻ォ迸手ッエ<EFBFBD>悟屓謌ソ髣エ髯ェ菴<EFBFBD><EFBFBD>エ晄級蜴サ<EFBFBD>€昜ケ<EFBFBD>正荳区э隸<EFBFBD>慍謚頑イ吝書荳顔噪謚ア譫墓鉛蜷醍処荵撰シ悟唆陲ォ螂ケ霓サ蟾ァ蝨ー霄イ蠑€<EFBFBD>€りソ<EFBFBD><EFBFBD><EFBFBD>螟ゥ<EFBFBD>悟ー丈ク€逾樒樒ァ倡ァ伜慍謚贋ケ<EFBFBD>正蜿ォ蛻ー莠<EFBFBD><EFBFBD>蜿ク闌カ豌エ髣エ<EFBFBD>梧滑謇区惻螻丞ケ穂ク顔噪荳€荳ェ莠檎サエ遐コョ扈吩ケ<EFBFBD>正逵九€€懷葎<EFBFBD>悟悪諡<EFBFBD>ソ<EFBFBD>悪諡<EFBFBD>ソ<EFBFBD>シ瑚ソ吩ココ謌台サャ隹<EFBFBD>衍霑<EFBFBD>シ御サ紋ク肴弍荳ェ莨夊ッエ貍丞亢逧<EFBFBD>ココ縲ょ万谺<EFBFBD>ッ晏悉蜥御サ冶ァ€蜻励€€晉ャャ莠悟<EFBFBD>御ケ<EFBFBD>正蜥碁ぅ菴咲塙邊芽ァ<EFBFBD>擇莠<EFBFBD>€ゆサ匁悽莠コ豈碑ァ<EFBFBD>譖エ蜉<EFBFBD><EFBFBD>ー費シ碁ォ伜ァ逧<EFBFBD>コォ霄ッ諤サ譏ッ閭ス扈吩ケ<EFBFBD>正蟶ヲ譚闔ォ螟ァ逧<EFBFBD>ョ牙<EFBFBD>諢溘€€應ス<EFBFBD>螂ス<EFBFBD>檎視濶セ逅ウ蟆丞ァ舌€€昜サ也噪蠕ョ隨題ョゥ荵<EFBFBD>正隗牙セ怜捉蝗エ逧<EFBFBD>取勹蜈ィ驛ス隍ェ濶イ莠<EFBFBD>€ゆケ<EFBFBD>正莉取擂豐譛画署襍キ霑<EFBFBD><EFBFBD>蟾ア菴應クコasoul謌仙遭逧<EFBFBD>コ区ュ<EFBFBD>御サ紋ケ滉サ取擂豐譛蛾琉襍キ霑<EFBFBD>ササ菴病soul逧<EFBFBD>コ区ュ窶披€€懃視濶セ逅ウ窶晄弍蟆丈ク€荳コ螂ケ蜃<EFBFBD><EFBFBD>噪蛹門錐縲ゆコ句ョ樔ク奇シ悟ケ荳肴ク<EFBFBD>壼ッケ譁ケ譏ッ蜷ヲ遏驕難シ瑚<EFBFBD>蟾ア蟆ア譏ッ莉紋ク€逶エ蝟懈ャ<EFBFBD>ぅ荳ェ蛛カ蜒上€ゆコ€譌カ髣エ雜贋ケ<EFBFBD>シ御ケ<EFBFBD>正蜿醍鴫莉冶コォ荳顔噪莨倡せ雜雁€ゆサ匁弍阯豈穂ク夂噪豬キ蠖帝ォ俶攝逕溘€ゆサ匁ュ蝨ィ閾ェ蟾ア蛻帑ク夲シ瑚€御ク疲噺闔キ鬚<EFBFBD>クー縲ゆサ也噪荳セ謇区兜雜ウ荵矩龍蜈<EFBFBD><EFBFBD><EFBFBD>ォ鬟主コヲ縲ゆサ門香蛻<EFBFBD>ク捺ュ<EFBFBD>€サ譏ッ蜥悟捉蝗エ逧<EFBFBD>ウ諤ァ菫晄戟莠<EFBFBD>キ晉ヲサ縲ゆサ匁クゥ譟比ス楢エエ<EFBFBD>悟クク蟶ク蝨ィ逕滓エサ荳ュ蛻幃€<EFBFBD>諢乗Φ荳榊芦逧<EFBFBD>ー乗リ蝟懌€ヲ窶ヲ逕夊<EFBFBD>譏ッ蝨ィ蠎顔ャォ荵矩龍<EFBFBD>御サ紋ケ滓€サ譏ッ閭ス隶ゥ荵<EFBFBD>正谺イ莉呎ャイ豁サ縲ら閠鯉シ御ケ滓ュ<EFBFBD>荳コ霑呎<EFBFBD><EFBFBD>御ケ<EFBFBD>正譌カ蟶ク髯キ蜈蛻ー荳€髦オ荳€髦オ蜀<EFBFBD>繭荳ュ縲ょ屏荳コ螂ケ霑俶怏荳€荳ェ隹ケ滉ク咲衍驕鍋噪蟆冗ァ伜ッ<EFBFBD>€ゆケ<EFBFBD>正荳榊ワ雍晄級蜥檎処荵蝉ク€譬キ<EFBFBD>梧弍荳謎ク夂噪扈<EFBFBD><EFBFBD>逕滂シ御ケ滉ク榊ワ蝌臥譬キ譏ッ螟ゥ逕溽噪陌壽供蛛カ蜒擾シ梧峩豐譛牙髄譎夐ぅ遘榊<EFBFBD>菴懃噪謇榊克縲ょス灘<EFBFBD>蜿ェ譏ッ謇倅コ<EFBFBD>ョカ驥檎噪蜈ウ邉サ<EFBFBD>梧擂蜈ャ蜿ク驥檎噪貂<EFBFBD>ーエ驛ィ髣ィ謇セ莉ス蟾菴懆€悟キイ縲ゆス<EFBFBD>ケ滉ク咲衍驕捺弍荳ュ莠<EFBFBD>€荵磯が<EFBFBD>ケ蛛キ蛛キ謚蜷榊盾蜉<EFBFBD><EFBFBD>roject V逧<EFBFBD>€画卿隶蛻抵シ瑚ソ倬亢蟾ョ髦ウ髞吝慍謌蝉クコ莠<EFBFBD><EFBFBD>蜒丞ウ蝗<EFBFBD>€蜻倥€ゆケ<EFBFBD>正證苓<EFBFBD>蜿題ェ難シ梧里辟カ閾ェ蟾ア豐譛我サ€荵亥罰霍ウ蠎募ュ撰シ碁ぅ荵郁<EFBFBD>蟆題ヲョゥ窶懈ウ募ュヲ逕溪€晁ソ吩クェ隶セ螳壼序蠕怜ョ櫁<EFBFBD>蜷榊ス抵シ瑚ヲ畑謌千<EFBFBD>諤ァ逧<EFBFBD><EFBFBD>鴨蜴サ蠕恪隗ゆシ励€ょ屏豁<EFBFBD>梧ッ丞芦豐譛芽ョュ扈<EFBFBD>柱逶エ謦ュ譌遞狗噪譌カ蛟呻シ悟ケ諤サ譏ッ莨壼芦蝗セ荵ヲ鬥<EFBFBD>€蝮仙ーア譏ッ蜃<EFBFBD>荳ェ蟆乗慮縲ゆス<EFBFBD>弍蝨ィ譛€霑大<EFBFBD>蜻ィ<EFBFBD>御ケ<EFBFBD>正豈乗ャ蝨ィ髦<EFBFBD>ッサ蛹コ驥梧伽菴榊ュ仙攝荳区慮<EFBFBD>悟ソ<EFBFBD>螟エ諤サ譛我ク€莠帛悪逧<EFBFBD>悄蠕<EFBFBD>€ケ隶ー蠕暦シ悟惠髦<EFBFBD>ッサ蛹コ逧<EFBFBD>€隗抵シ梧€サ閭ス逵句芦荳€荳ェ逖ヲ逖ヲ逧<EFBFBD>€ュヲ逕滓ィ譬キ逧<EFBFBD>ー大ケエ<EFBFBD>御サ紋サ取掠蛻ー譎壼ーア謚雁エ蝓句惠蜷<EFBFBD>ァ肴ウ募ュヲ逅<EFBFBD>ョコ逧<EFBFBD>ケヲ蝣<EFBFBD>縲ゆク€€蟋具シ御ケ<EFBFBD>正蜿ェ譏ッ蟇ケ蜷梧<EFBFBD>キ遐碑ッサ豕募ュヲ譁<EFBFBD>鍵逧<EFBFBD>ココ譛臥ァ堺コイ霑第縲ゆス<EFBFBD>弍逶エ蛻ー譟蝉ク€螟ゥ<EFBFBD>悟ー大ケエ謚雁エ莉惹ケヲ蝣<EFBFBD>謚ャ莠<EFBFBD>オキ譚<EFBFBD>瑚闘荵ア逧<EFBFBD>エ蜿鷹<EFBFBD>菴丈コ<EFBFBD>濠蠑<EFBFBD>逋ス蜃€<EFBFBD>蠎橸シ御ス<EFBFBD>セ晉閭ス逵句芦莉門ッケ逹€逕オ閼大ア丞ケ慕龍逞エ蝨ー隨台コ<EFBFBD>€ゆサ也ャ大セ礼悄蜿ッ辷ア蝠翫€ゆケ<EFBFBD>正謔<EFBFBD>d蝨ー扈募芦莉冶コォ蜷趣シ檎鳩閼大ア丞ケ墓ュ蝨ィ謦ュ謾セ逧<EFBFBD>譏ッ螂ケ辭滓i蝨ー荳崎<EFBFBD>蜀咲<EFBFBD>謔臥噪縲<EFBFBD>蟾ア逧<EFBFBD>懆ー育判髱縲りソ俶怏荳€螟ゥ<EFBFBD>悟ー大ケエ遯荳セ襍キ荳€蜿ェ謇具シ御シク蜃コ菫ョ髟ソ逧<EFBFBD>焔謖<EFBFBD>ッケ逹€逕オ閼大ア丞ケ輔€り區辟カ逵倶ク榊芦螻丞ケ暮<EFBFBD>判髱<EFBFBD>御ス<EFBFBD>弍荵<EFBFBD>正隗牙セ暦シ悟ス捺慮蟆ア豁蝮仙惠髫泌噪閾ェ蟾ア<EFBFBD>御ク€螳壽サ閼ク騾夂コ縲よ囁蛛<EFBFBD>キイ扈丞ソォ霑<EFBFBD>悉莠<EFBFBD>シ御ケ<EFBFBD>正霍大崟荵ヲ鬥<EFBFBD>噪鬚醍紫蜊エ雜頑擂雜企ォ倅コ<EFBFBD>€ケ螳ウ諤募シ€蟄ヲ逧<EFBFBD>律譛溷ーア蜒丞漉逑憺ゥャ霓ヲ逧<EFBFBD>慮髯蝉ク€譬キ<EFBFBD>瑚ョゥ螂ケ蜀堺ケ溯ァク榊芦驍荳ェ逖ヲ逖ヲ逧<EFBFBD>コォ蠖ア縲ょケク螂ス<EFBFBD>瑚ソ吩ク€螟ゥ逧<EFBFBD>ー大ケエ萓晉蝮仙惠髦<EFBFBD>ッサ蛹コ逧<EFBFBD>ァ定誠驥後€ゆケ<EFBFBD>正逕夊<EFBFBD>蠢倩ョー莠<EFBFBD>響譛ャ荵ヲ謖€荳玖<EFBFBD>蟾ア逧<EFBFBD><EFBFBD>コソ窶披€ケ蜥悟ー大ケエ逧<EFBFBD><EFBFBD>コソ莠莨壻コ<EFBFBD>€ケ逧<EFBFBD>ソ<EFBFBD>ス蜒剰ヲキウ蜃コ譚€闊ャ<EFBFBD>ケ諠ウ邇ー蝨ィ蟆ア蜴サ蜻願ッ我サ門<EFBFBD>莠手<EFBFBD>蟾ア逧<EFBFBD>€<EFBFBD>シ悟ケ諠ウ邇ー蝨ィ蟆ア謚雁ー大ケエ謚ア霑幄<EFBFBD>蟾ア逧<EFBFBD>€€驥鯉シ梧クゥ譟泌慍鞫ゥ謖イ莉紋ケア闢ャ闢ャ逧<EFBFBD>書荳昴€€懆伽逅ウ<EFBFBD>御ス<EFBFBD>蝨ィ霑吝<EFBFBD>蝠奇シ御サ雁ゥ荳狗少譌ゥ<EFBFBD><EFBFBD>諠ウ譚<EFBFBD>蝗槫悉縲や€晏ーア蝨ィ霑呎慮<EFBFBD><EFBFBD>謔臥噪螢ー髻ウ貂ゥ譟泌慍諡堺コ<EFBFBD>牛螂ケ逧<EFBFBD>か閹€縲ゆケ<EFBFBD>正蝗櫁ソ<EFBFBD>エ蜴サ<EFBFBD>檎塙蜿狗噪隨大ョケ萓晉閭ス隶ゥ蜻ィ蝗エ逧<EFBFBD>勹濶イ螟ア蜴サ蜈牙スゥ窶披€<EFBFBD>隶ク髯<EFBFBD><EFBFBD>隸サ蛹コ逧<EFBFBD>ぅ荳€隗偵€<EFBFBD>
<EFBFBD>
6<EFBFBD>9螟ゥ逧<EFBFBD>劒荳奇シ御ケ<EFBFBD>正蝗槫芦莠<EFBFBD><EFBFBD>蟾ア謌ソ髣エ驥鯉シ梧遠蠑€<EFBFBD><EFBFBD>謔臥噪蜿ー逅<EFBFBD>ョコ蝮帙€りソ伜<EFBFBD>瑚エヲ蜿キ霑俶イ陲ォ蟆€ょ惠A-SOUL隶ィ隶コ荳捺シ驥御セ晉<EFBFBD>€<EFBFBD>ァ崎セゥ扈擾シ御ケ<EFBFBD>正諢溷芦荳€螟ゥ荳区擂逧<EFBFBD>樒サ冗エァ蠑<EFBFBD>蜥檎夢諠ォ譖エ蜉<EFBFBD>譏取仞莠<EFBFBD>€らコ髟ソ逧<EFBFBD>焔謖<EFBFBD>惠豬キ逶苓飴K95荳贋ク肴妙霍ウ霍<EFBFBD>シ悟屓螟肴<EFBFBD><EFBFBD>ュ怜壼セ怜ス蜒剰ヲシォ蜃コ譚莨シ逧<EFBFBD>€ゆス<EFBFBD><EFBFBD>悟ーア蠖馴シ<EFBFBD><EFBFBD>欠髓郁ソ俶イ譛芽ヲ欠蜷鯛€懷書陦ィ蝗槫€晉噪謖蛾醗譌カ<EFBFBD>ケ蟆ア謖我ス丈コ<EFBFBD>唖髯髞ョ縲ゆケ<EFBFBD>正貂<EFBFBD>壼慍遏驕難シ悟ケ譏ッ蛛カ蜒冗噪荳ュ荵倶ココ<EFBFBD>ケ荳崎<EFBFBD>隸エ霑吩コ幄ッ昴€ゆコ取弍<EFBFBD>檎岼蜈臥サァ扈ュ蝨ィ荳€逋セ螟夐オ逧<EFBFBD><EFBFBD>菴吩ソ諱ッ遘堺ク肴妙霍ウ蜉ィ<EFBFBD>檎サ井コ趣シ碁シ<EFBFBD><EFBFBD>サ夊スョ蝨ィ荳€荳ェ螟エ蜒丞燕蛛應コ<EFBFBD>ク区擂縲るサ第シ<EFBFBD><EFBFBD>噪謌ソ髣エ驥悟宵譛臥鳩閼大ア丞ケ慕噪闕ァ蜈臥<EFBFBD>莠ョ逹€<EFBFBD>正遘€荳ス逧<EFBFBD>擇螳ケ縲ょケ雜エ蝨ィ譯悟ュ蝉ク奇シ梧滑蜊贋クェ閼ク蠎槫沂蝨ィ閾ェ蟾ア逧<EFBFBD>蠑ッ驥鯉シ檎龍逞エ蝨ー譛帷捩驍荳ェ螟エ蜒上€€應ス<EFBFBD>驕灘雛<EFBFBD><EFBFBD>莉雁ゥ逵溽噪雜<EFBFBD>コァ邏ァ蠑<EFBFBD>縲や€€懈眺逧<EFBFBD>慮蛟吩ク€逶エ蝨ィ諠ウ菴<EFBFBD>莨壻ク堺シ壽擂逵区<EFBFBD>縲や€€懈Φ遏驕謎ス<EFBFBD>蝨ィ逵具シ御ケ滓怏轤ケ荳肴Φ隶ゥ菴<EFBFBD>逵銀€ヲ窶ヲ窶晉ェ<EFBFBD>御ケ<EFBFBD>正蝮千峩莠<EFBFBD>コォ蟄撰シ梧滑蜿ウ謇狗噪鬟滓欠莨ク蜷台コ<EFBFBD>ア丞ケ輔€€懈擂<EFBFBD>悟ッケ荳ェ謇区欠<EFBFBD>€昜ス<EFBFBD>弍髱呎€噪螟エ蜒丞崟迚<EFBFBD>譛臥サ吝ケ莉サ菴募屓蠎費シ悟宵譏ッ荳€螯よ里蠕€蝨ー蛛懃蕗蝨ィ螻丞ケ慕噪驍€隗偵€ゆケ<EFBFBD>正閾ェ蝌イ謳ャ蝨ー隨台コ<EFBFBD>シ悟処謚雁エ蝓玖ソ帑コ<EFBFBD>蠑ッ驥後€ら擅諢乗ク先ク占ュ譚<EFBFBD><EFBFBD>荳肴ク<EFBFBD>ソ呎弍螂ケ蜊頑ヲ蜊企<EFBFBD>荵矩龍逧<EFBFBD>蒼隸ュ霑俶弍逵溷<EFBFBD><EFBFBD>悄譛幢シ壺€懷そ逑懶シ梧<EFBFBD>€逶エ蟆ア蝨ィ霑咎蝠奇シ悟ソォ轤ケ譚謇セ蛻ー謌大賦窶ヲ窶ヲ窶<EFBFBD>
蜈ウ莠守民迢らサ<EFBFBD><EFBFBD><EFBFBD>檎鴫蝨ィ霑呎弍蝗ス蜀<EFBFBD>噪荳€荳ェ蠕育Ο髣ィ逧<EFBFBD>ッ晞假シ悟セ亥ウ蝗驛ス譛芽ソ吩クェ髣ョ鬚倥€<EFBFBD>荳ェ莠コ隶荳コ<EFBFBD><EFBFBD>逍ッ迢らサ<EFBFBD><EFBFBD>譏ッ荳€遘榊キィ螟ァ逧<EFBFBD>ヲ乗ー費シ悟セ亥ウ蝗セ亥壻ココ諠ウ逍ッ迢らサ<EFBFBD><EFBFBD>驛ス豐譛画惻莨壹€ょヲよ棡菴<EFBFBD>蟷エ霓サ逧<EFBFBD>慮蛟吩ク咲民迢らサ<EFBFBD><EFBFBD><EFBFBD>御ス<EFBFBD>€荵域慮蛟吝庄莉逍ッ迢らサ<EFBFBD><EFBFBD><EFBFBD>滉ス<EFBFBD>€霎亥ュ先イ譛臥民迢らサ<EFBFBD><EFBFBD><EFBFBD>御ス<EFBFBD>隗牙セ嶺ス<EFBFBD>蟆ア蠕磯ェ<EFBFBD>ご莠<EFBFBD>シ溯ソ吩クェ荳也阜荳奇シ梧<EFBFBD>莉ャ豈丈ク€荳ェ莠コ驛ス蟶梧悍謌仙粥<EFBFBD><EFBFBD>蟶梧悍鄒主ス逕滓エサ<EFBFBD><EFBFBD>蟶梧悍陲ォ蟆企<EFBFBD><EFBFBD>隸キ髣ョ螟ァ螳カ<EFBFBD>御ス<EFBFBD>荳堺サ伜<EFBFBD><EFBFBD>カ雁悪莠コ逧<EFBFBD>巻蜉帛柱譌カ髣エ<EFBFBD>御ス<EFBFBD>諤惹ケ郁<EFBFBD>螟溷ョ樒鴫菴<EFBFBD>諠ウ隕噪謌仙粥<EFBFBD><EFBFBD>€荳ェ<EFBFBD>-SOUL譏ッ荳€荳ェ莉€荵域<EFBFBD>キ逧<EFBFBD>ウ蝗<EFBFBD>溯ョゥA-SOUL窶懆ョゥ螟ゥ荳区イ譛蛾埓蜿醍噪逞<EFBFBD>€晢シ瑚ソ呎弍謌台サャ逧<EFBFBD>スソ蜻ス<EFBFBD><EFBFBD>莉ャ螂ウ蝗蠕郁セ幄協<EFBFBD><EFBFBD>莉ャ豐譛蛾ェ苓ソ<EFBFBD>ァ螳カ<EFBFBD><EFBFBD>莉ャ豐譛芽キ溷ァ螳カ隶イ霑<EFBFBD>ウ蝗蠕郁<EFBFBD>譛阪€ゆス<EFBFBD>荳コ窶懆ョゥ螟ゥ荳区イ譛蛾埓蜿醍噪逞<EFBFBD>€晄弍蠢ス謔<EFBFBD><EFBFBD>莉ャ<EFBFBD><EFBFBD>莉ャ譏ッ逵溯ソ吩ケ亥ケイ逧<EFBFBD>€ゆサ雁ゥ謌台サャ諡譛芽ソ吩ケ亥夊オ<EFBFBD>コ撰シ梧<EFBFBD>莉ャ蟶ヲ逹€蟾ィ螟ァ逧<EFBFBD>スソ蜻ス<EFBFBD>悟ク梧悍蝨ィ譛ェ譚閭ス螟溯ョゥ螟ゥ荳区イ譛蛾埓蜿醍噪逞<EFBFBD>シ御ス<EFBFBD>荳堺サ伜<EFBFBD>蜿ッ莉蜷暦シ滉ク榊庄莉縲よ園莉謌台サャ隸エ<EFBFBD>悟刈蜈A-SOUL<EFBFBD>御ス<EFBFBD>螂ス蜃<EFBFBD><EFBFBD>€螟ゥ12荳ェ蟆乗慮<EFBFBD>悟凄蛻吩ス<EFBFBD>A-SOUL蟷イ莉€荵茨シ滓<EFBFBD>莉ャ荳咲シコ驕幄<EFBFBD>蟾ア辷ア豢玲セ<EFBFBD>ココ縲ゆサ雁ゥ謌台サャ隕魚荳€莠帛壕逹<EFBFBD>ソ<EFBFBD>香蛻<EFBFBD><EFBFBD>梧ッ丞ゥ荳雁ゥ蜿ー驕幄<EFBFBD>蟾ア40蛻<EFBFBD><EFBFBD>悟万谺豢玲セ<EFBFBD>悟帥豕荳埼漠<EFBFBD><EFBFBD>蜴サ闕隱画荵滉ク埼漠<EFBFBD>瑚ソ呎<EFBFBD>キ逧<EFBFBD>ココ貊螟ァ陦苓<EFBFBD>謇セ蛻ー縲<EFBFBD>
蝌臥蟆丞ァ蝉サ雁ゥ50w邊我コ<EFBFBD>€ょー丞ケエ螟憺ぅ螟ゥ豐莠コ莨壽Φ蛻ー莉雁ゥ髣ィ蠎ュ蜑堺シ壽怏驍荵亥夂噪辜ュ髣ケ縲ょェ辜ュ髣ケ莠<EFBFBD>シ檎Ο髣ケ蛻ー鮠<EFBFBD><EFBFBD>雕ョ襍キ莠<EFBFBD><EFBFBD>荵滄埓莉陲ォ蝌臥蟆丞ァ千噪逶ョ蜈画園閨夂縲ょ<EFBFBD>辟カ蟆丞ァ仙キイ扈丈ク榊<EFBFBD>譏ッ蟆竣蝠ヲ<EFBFBD>碁シ<EFBFBD><EFBFBD>諠ウ縲ゆス<EFBFBD><EFBFBD><EFBFBD>莉咲螂句鴨蝨ー蟆<EFBFBD><EFBFBD>蟾ア蝨ー遉シ迚ゥ荳セ襍キ<EFBFBD>悟ク梧悍陲ォ蝌臥蟆丞ァ千恚隗<EFBFBD>シ悟頭諤暮ぅ蟆唖蛻<EFBFBD>謾ケ謾ケ蜷惹サ堺ク肴サ諢冗噪<EFBFBD><EFBFBD><EFBFBD>ス螟壼ュ礼噪髟ソ菫<EFBFBD><EFBFBD>ケ譛ャ荳榊ヲら賢迪ォ迢礼距莉ャ邊セ蠖ゥ逧<EFBFBD>ィ貍斐€ゆス<EFBFBD><EFBFBD><EFBFBD>霑俶弍諠ウ蟆<EFBFBD><EFBFBD>蟾ア驍€髯狗噪辷ア騾サ吝<EFBFBD>辟カ蟆丞ァ舌€るぅ譏ッ鮠<EFBFBD><EFBFBD><EFBFBD>造蝟<EFBFBD>シ梧弍鮠<EFBFBD><EFBFBD><EFBFBD>ヲ縲ょ頭諤募<EFBFBD>辟カ蟆丞ァ先<EFBFBD>ケ譛ャ逵倶ク崎ァ<EFBFBD>€蜷朱シ<EFBFBD><EFBFBD>荳崎ァ<EFBFBD>シ悟<EFBFBD>辟カ蟆丞ァ先伽荳榊芦螳<EFBFBD><EFBFBD>€ゆス<EFBFBD>惠譟蝉クェ蝨ー譁ケ<EFBFBD>悟ァ狗サ域怏逹€€荳ェ蜿ッ辷ア逧<EFBFBD>ウ蟄ゥ縲ょケ謐ァ逹€<EFBFBD><EFBFBD>ー丞ー冗噪菫<EFBFBD>檎ォ吝惠螟ァ螟ァ逧<EFBFBD><EFBFBD>蜿ー荳企略髣ェ蜿大<EFBFBD>縲ょ芦莠<EFBFBD>ぅ荳ェ譌カ蛟呻シ碁シ<EFBFBD><EFBFBD>蟾イ扈丞惠莠コ豬キ荳ュ<EFBFBD><EFBFBD>荵溽恚荳崎ァ<EFBFBD>沸縲ゆス<EFBFBD><EFBFBD><EFBFBD>霑俶弍蠕育鯵蝌臥蟆丞ァ舌€ょ屏荳コ蝨ィ譛画怦蜈臥<EFBFBD>霑帷噪隗定誠驥鯉シ悟<EFBFBD>辟カ蟆丞ァ先懇逹€<EFBFBD><EFBFBD><EFBFBD>ヲ縲<EFBFBD>
<EFBFBD> 蜿ッ譏ッ閾ェ莉主柱譎壽劒扈灘ゥ夐ぅ螟ゥ蠎贋ク倶シ<EFBFBD><EFBFBD>€螢ー窶懈<EFBFBD>蝨ィ窶晢シ御コ区ュ蟆ア蜿伜セ嶺ク榊庄謾カ諡セ襍キ譚<EFBFBD>ッ丈クェ譛育噪隨ャ荳我クェ蜻ィ譌<EFBFBD>御ケ<EFBFBD>正驛ス莨壼将謌大<EFBFBD>蜴サ髯ェ螂ケ騾幄暦シ梧<EFBFBD>諠ウ逹€霑呎<EFBFBD>キ蟇ケ譎壽劒荳榊<EFBFBD>悟庄荵<EFBFBD>正窶懷鴇窶昜ク€荳区<EFBFBD>蟆ア莉ソ菴帛ア蜴サ諢剰ッ<EFBFBD><EFBFBD>€りキッ荳願蟶瑚<EFBFBD><EFBFBD>豁ヲ萓<EFBFBD><EFBFBD>蛻第ウ包シ悟ス蜒丞ケ譏ッ謌醍擅蝨ィ荳企銅逧<EFBFBD><EFBFBD>蠑滂シ御サ<EFBFBD>12譛亥芦5譛茨シ碁<EFBFBD>譏ッ螯よュ<EFBFBD>梧劒譎壻サ取擂荳咲衍驕馴ぅ荳ェ蜻ィ譛ォ蜿醍函莠<EFBFBD>€荵茨シ梧<EFBFBD>隸エ閠攸隶ゥ謌大刈迴ュ<EFBFBD>ケ蟆ア螳蛾撕蝨ー遲牙惠螳カ驥鯉シ悟巻蜉帛闖懈怙蜷主唆遲画<EFBFBD>蝗槫悉謾カ諡セ轤ク髞<EFBFBD>噪蜴ィ謌ソ<EFBFBD><EFBFBD>扈呎<EFBFBD>菫ゥ豕遒玲ウ<EFBFBD>瑚セケ蜷<EFBFBD>セケ蜷ャ螂ケ隶イ荳矩岑逧<EFBFBD><EFBFBD>隨題ッ晢シ梧Φ逹€荳崎<EFBFBD>蜻願ッ牙ケ荳句壕蜥御ケ<EFBFBD>正蜴サ蜷<EFBFBD>噪荵千処鬣ュ蠎礼噪荳懷圏闖懶シ悟屓霑<EFBFBD>樊擂譏ッ譎壽劒髣ェ髣ェ逧<EFBFBD>愍逹幢シ梧<EFBFBD>€荳句<EFBFBD>蜷ャ諛ゑシ悟<EFBFBD>蜩亥嶋逧<EFBFBD>ャ題オキ譚縲ゆス<EFBFBD>芦莠<EFBFBD><EFBFBD>譛茨シ悟ス蜒丈ク榊ェ荳€譬キ莠<EFBFBD>€ょキイ扈剰オー蛻ー讌シ荳具シ御ケ<EFBFBD>正荳€謚頑瓦霑<EFBFBD><EFBFBD><EFBFBD>焔譛コ<EFBFBD>悟分蝠ェ謇灘ュ怜<EFBFBD>扈呎<EFBFBD><EFBFBD><EFBFBD>€逵具シ瑚邉サ莠コ<EFBFBD>壽劒譎夲シ悟<EFBFBD>螳ケ<EFBFBD>壻サ頑劒騾壼ョオ蜉<EFBFBD>迴ュ<EFBFBD>御ク榊屓蜴サ莠<EFBFBD>€<EFBFBD>諠願ョカ蝨ー蝗槫<EFBFBD>御ケ<EFBFBD>正豁逵ッ逹€逵シ蟇ケ謌大セョ隨托シ御サソ菴帑ク€<EFBFBD><EFBFBD>蝨ィ螂ケ逧<EFBFBD>詞謠<EFBFBD><EFBFBD>譏取<EFBFBD>莉取悴蜻願ッ牙ケ謌大<EFBFBD><EFBFBD>炊逕ア縲りォ諡臥捩蜴サ莠<EFBFBD><EFBFBD>蠎暦シ悟ケ蟆ア蠑€蟋倶ク€€荳榊書<EFBFBD>梧イ先オエ譖エ陦<EFBFBD>荵滉ク崎ッ蛛夂噪<EFBFBD>蜷朱囂諢丞慍謚ォ逹€豈ッ蟄撰シ碁擒逹€蠎雁エ蛻キ謇区惻<EFBFBD><EFBFBD>荳崎ァ<EFBFBD>€應ケ<EFBFBD>正縲ゅ€りソ呎<EFBFBD>キ荳榊ス窶昜ケ<EFBFBD>正蟇ケ謌醍惠莠<EFBFBD>惠逵シ逹幢シ梧裏霎懷慍隸エ<EFBFBD>€應サ雁ゥ菴<EFBFBD><EFBFBD>ヲサ蟄仙庄荳肴弍譎壽劒蜩ヲ窶昶€應クコ莉€荵遺€€懷屏荳コ螂ケ譏ッ菴<EFBFBD>辷ケ窶<EFBFBD>
窶懃ャ大制<EFBFBD>檎ャ大制<EFBFBD>€晄沐霓ッ逧<EFBFBD>ー冗巨迢ク遶ュ蜉幄ョィ螂ス謌托シ御クコ謌題キウ闊槫宵荳コ莠<EFBFBD><EFBFBD>荳咲ヲサ蠑€<EFBFBD>瑚キウ逧<EFBFBD>怏莠帷瑞遒守蕎迢茨シ悟唆蟋狗サ域ュサ豁サ蝨ー逶ッ逹€謌醍噪蜉ィ蜷代€<EFBFBD>蠖鍋驕灘ケ諡シ豁サ荳崎ョゥ謌醍ヲサ蠑€<EFBFBD>次蝗<EFBFBD>縲ょ宵譛画<EFBFBD>閭ス譚蛻ー霑吩クェ蝨ー譁ケ縲ゆク€螟ァ荳€蟆丈ク蜿ェ迢千矯<EFBFBD>ァ迢千矯諤サ螟<EFBFBD>コ取イ臥擅荳ュ<EFBFBD>悟ー冗巨迢ク蜊エ諤サ譏ッ驢堤捩逧<EFBFBD>シ御ケ溯ョク蜿ェ譏ッ蟆冗巨迢ク逧<EFBFBD>霓サ縲よ<EFBFBD>蝟懈ャ霑呎ッ幄牡蜈画サ醍噪迢千矯邊セ諤ェ縲ゆコ取弍謚雁ケ莉ャ蜈サ蝨ィ豺ア髦€ゆク雁ス逧<EFBFBD>巨迢ク豈幢シ悟螂ケ莉ャ逧<EFBFBD>ッ帶ッッ縲ょ屏荳コ謌第Φ逵狗恚螂ケ莉ャ雕ゥ逹€蜷御シエ逧<EFBFBD>ーク豈帑ク奇シ御シ夊ァ牙セ玲クゥ證冶<EFBFBD>騾ょ雛<EFBFBD><EFBFBD>霑倡畑邊セ閾エ逧<EFBFBD><EFBFBD>遲第<EFBFBD>莉紋サャ逧<EFBFBD>ャシ蟄撰シ檎ャャ荳€譏ッ蝗<EFBFBD>荳コ謌大万谺<EFBFBD><EFBFBD>檎ャャ莠梧弍蝗<EFBFBD>荳コ謌大万谺隨シ蟄舌€りソ咎豌ク霑憺<EFBFBD>蜿ェ譛<EFBFBD>16蜿ェ辜帷せ莠ョ<EFBFBD>悟屏荳コ謌大万谺辜帷縲よイ髞呻シ梧<EFBFBD>€蛛夂噪荳€<EFBFBD>コ具シ悟宵譏ッ蝗<EFBFBD>荳コ窶懈<EFBFBD>窶晏万谺縲よ<EFBFBD>蝟懈ャ逵句惠螂ケ莉ャ逧<EFBFBD>ッ帷坩荳雁魂荳顔噪螟暮亠逧<EFBFBD>剳譟難シ梧園莉謌台サ惹ク榊惠逋ス螟ゥ譚縲よ<EFBFBD>荳コ螂ケ莉ャ逍嶺シ縲よ<EFBFBD>譏ッ螂ケ莉ャ蜚ッ荳€<EFBFBD>溽黄譚貅舌€よ怏荳€謌第腐諢丞ソ倩ョー莠<EFBFBD>ケ莉ャ蜃<EFBFBD>螟ゥ<EFBFBD>檎ュ画<EFBFBD>蝗樊擂逧<EFBFBD>慮蛟呻シ悟ケ莉ャ譏剰ソキ蝨ィ驍縲るぅ譬キ貍ゆコョ逧<EFBFBD>コォ菴馴€先ク仙ケイ逖ェ<EFBFBD>瑚ョゥ謌第隗牙芦蠢ォ諢上€よイ髞呻シ梧<EFBFBD>鬣イ蜈サ逧<EFBFBD>庄辷ア逧<EFBFBD>巨迢ク<EFBFBD>檎畑貉ソ貍画シ臥噪逵シ逹帷恚逹€謌托シ御ケ溷宵閭ス譏ッ謌代€ケ莉ャ豐<EFBFBD><EFBFBD>豢サ荳堺ク句悉<EFBFBD>悟庄諠懈<EFBFBD>蜿ェ蝨ィ荵主ケ莉ャ螯ょ酔邊セ轣オ闊ャ閠€逵シ逧<EFBFBD>ィ縲ら悄鄒主賦縲ょーア蜒丞鴻荳<EFBFBD>愀豬居隕<EFBFBD>尠逧<EFBFBD>ヲょ<EFBFBD>閼ら噪閧<EFBFBD>碁サ<EFBFBD>牡逧<EFBFBD><EFBFBD>闃堤轣ッ蝨ィ驥檎噪逵ク<EFBFBD>梧怏莠コ隸エ鄒惹ココ蝨ィ鬪ィ荳榊惠逧ョ<EFBFBD>悟庄譏ッ謌大セ郁エェ蠢<EFBFBD>賦縲よ<EFBFBD>セ惹ココ逧<EFBFBD>ェィ<EFBFBD>悟処隕セ惹ココ逧<EFBFBD>坩縲ゆク咲衍霑<EFBFBD><EFBFBD>壻ケ<EFBFBD>ケ莉ャ諛ゆコ<EFBFBD><EFBFBD>蜿ェ蝟懈ャ螂ケ莉ャ逧<EFBFBD>セ惹クス<EFBFBD>御コ取弍遶ュ蟆ス蜈ィ蜉帷噪蜷第<EFBFBD>螻慕コ驍€蜉溘€らャャ荳€逵句芦逧<EFBFBD>慮蛟呻シ梧<EFBFBD>謨エ謨エ荳螟ゥ豐縲ょ屏荳コ諛ょセ苓<EFBFBD>蟾ア鄒守噪莠コ<EFBFBD>瑚ッエ譏主ケ莉ャ蟾イ扈冗衍驕楢ヲ滑莉€荵亥ス捺<EFBFBD>豁ヲ蝎ィ莠<EFBFBD>€ケ莉ャ謌仙粥莠<EFBFBD>€<EFBFBD><EFBFBD>勘莠<EFBFBD>シ悟スサ蠎戊噫鬪ィ逧<EFBFBD>ソ<EFBFBD>勘縲よ園莉謌鷹€画叫螳蜻願<EFBFBD>蟾ア逧<EFBFBD>クサ譚<EFBFBD>シ梧<EFBFBD>隶ク譏ッ驍螟コ鬲<EFBFBD>噪鬲<EFBFBD>鴨縲ゆスソ謌第蛻ー蜊ア髯ゥ縲りソ咏ァ咲セ主ス隶ゥ謌第イ芽ソキ蜈カ荳ュ縲や€應ス<EFBFBD>莉ャ逵溽セ主賦窶ヲ窶ヲ窶晄<EFBFBD>蜿大<EFBFBD><EFBFBD>キ蠢<EFBFBD>噪遘ー襍橸シ御ク蜿ェ迢千矯謚匁竃閠ウ譛オ<EFBFBD>御シ倬寉逧<EFBFBD>髄謌大桙逵ク縲ょヲよ棡荳肴弍謌醍噪謇区ュ謾セ蝨ィ隨シ蟄蝉ク奇シ瑚ソ咏悄譏ッ荳€蝨コ扈晉セ守噪陦ィ貍斐€ょケク螂ス謌醍噪謇区ュ謾セ蝨ィ隨シ蟄蝉ク奇シ悟凄蛻呎<EFBFBD>逵倶ク榊芦霑吝惻扈晉セ守噪陦ィ貍斐€<EFBFBD>荳顔仞莠<EFBFBD>€<EFBFBD>豐蛾匚蝨ィ豌ク霑應ク榊序逧<EFBFBD><EFBFBD><EFBFBD><EFBFBD>梧ーク霑應ク榊序逧<EFBFBD>香蜈ュ譫夂<EFBFBD>蜈峨€€應ク崎ヲヲサ蠑€辟カ辟カ螂ス蜷暦シ溽辟カ蠕磯ソ縲るソ莠<EFBFBD>ーア荳榊ス逵倶コ<EFBFBD>€€<EFBFBD>譛ャ譚諠ウ隸エ荳€莠帛悪逧<EFBFBD>ッ晢シ瑚オキ遐ョゥ謌第仞蠕玲峩蜉<EFBFBD>蠑コ蜉ソ荳€莠幢シ檎閠後€ら巨迢ク莉ャ霓サ霓サ鞫<EFBFBD>捩閾ェ蟾ア逧<EFBFBD>ーセ蟾エ<EFBFBD>悟ーセ蟾エ逧<EFBFBD>ー門<EFBFBD>€轤ケ轤ケ謳ュ荳頑<EFBFBD><EFBFBD>焔縲や€<EFBFBD>莉ャ豌ク霑懃鯵菴<EFBFBD>縲ょ屏荳コ菴<EFBFBD>辷ア謌台サャ蜻€縲や€昜コ取弍謌題ッエ螂ス縲よ<EFBFBD>€蟋区響蜷<EFBFBD>ァ埼イ應コョ逧<EFBFBD>干譛オ陬<EFBFBD>ー隨シ蟄撰シ梧<EFBFBD>豈丞ゥ荳埼龍譁ュ逧<EFBFBD>€サ吩サ紋サャ迺€迺ィ逧<EFBFBD>匕遏ウ<EFBFBD>悟推遘榊髄螂ケ莉ャ霄ォ荳顔<EFBFBD>ク螂<EFBFBD>渚蠑ょョ晉沫莨<EFBFBD><EFBFBD>荳ケ螯呵艮<EFBFBD>檎爆閾ウ荳コ豁蛟セ螳カ闕莠ァ荵溷惠謇€荳崎セ槭€ょ屏荳コ蝨ィ謌醍噪謇倶クュ譛ャ蟆ア迚邏ァ謠€螟ゥ蠎穂ク区怙遘ー蠕嶺ク岩€<EFBFBD>渚蠑ょョ昶€晉噪荳懆ソ<EFBFBD>御クコ謌醍噪螂<EFBFBD>渚蠑ょョ晄伽荳€莠帛椨閼夂浹<EFBFBD>悟処譛我ス穂ク榊庄<EFBFBD>溽巨迢ク莉ャ逧<EFBFBD>ーセ蟾エ謨ー驥乗律貂仙槫刈縲よ<EFBFBD>驕薙€ょヲよ棡謌大庄莉窶ヲ窶ヲ蜿ッ譏ッ謌鯛€ヲ窶ヲ窶披€ケ莉ャ隸エ辷ア謌代€€<EFBFBD>莨壽究謗臥ャシ蟄撰シ檎サ呎<EFBFBD>霍ウ謾ッ闊槫制縲や€<EFBFBD>隸エ縲よ囑讖呵牡逧<EFBFBD><EFBFBD>蜈我ク九€りソ樊セ<EFBFBD>セ育噪豬<EFBFBD>統驛ス蜿俶<EFBFBD><EFBFBD>ヲ門シら噪邏ォ濶イ縲や€ス蜻€縲や€ァ迢千矯貂ゥ譟皮噪螢ー髻ウ蜒乗弍陷倩屁荳昜ク€譬キ霓サ譟斐€ゆコ取弍謌第ャ襍丞芦莠<EFBFBD>荳夜龍譛€鄒惹クス逧<EFBFBD><EFBFBD>雹茨シ御サ€荵育視萓ッ蟆<EFBFBD>嶌莉€荵亥ゥ荳雁ョォ髦咎<EFBFBD>莠ォ蜿嶺ク榊芦<EFBFBD>悟宵譛画<EFBFBD><EFBFBD>悟宵荳コ謌台ク€莠コ縲よ<EFBFBD>諢溷芦蠢ォ諢上€<EFBFBD>諢溷芦蝗ー諢上€よ怙蜷惹ク€逵シ縲ょー冗巨迢ク扈咏ス仙ュ仙ー哨縲ら悄蜿ッ諠懷賦<EFBFBD>梧イ閭ス逵玖ァ<EFBFBD>莉ャ貍ゆコョ逧<EFBFBD>€ウ蟆厄シ梧<EFBFBD>隶ク譏ッ蝗<EFBFBD>荳コ窶ヲ窶ヲ窶披€<EFBFBD>蝨ィ鄂仙ュ宣<EFBFBD>
<EFBFBD>譎壽劒<EFBFBD>御ス<EFBFBD>逵溽噪譏ッ荳ェ蠕郁ソ<EFBFBD><EFBFBD><EFBFBD>悟セ郁エェ蠢<EFBFBD>噪螂ウ蟄ゥ蟄舌€ゆス<EFBFBD>譛牙屁荳ェ莠イ螯ょァ仙ヲケ逧<EFBFBD>弌蜿具シ梧怏荳€莉ス髣ェ髣ェ蜿大<EFBFBD><EFBFBD><EFBFBD><EFBFBD>譴ヲ諠ウ逧<EFBFBD>荳夲シ梧怏隶ク隶ク螟壼壼万谺<EFBFBD><EFBFBD>カ遒嶺ココ縲ゆス<EFBFBD>蜿ッ辷ア縲巻蜉帙€怏謇榊克<EFBFBD>御ス<EFBFBD>譏ッ霑吩ケ育噪閠€逵シ縲ゆス<EFBFBD><EFBFBD>霑俶弍蝨ィ逶エ謦ュ荳ュ諡芽Ρ<EFBFBD>悟惠逶エ謦ュ荳ュ謚ス豕<EFBFBD>悟惠逶エ謦ュ荳ュ蜻シ蜚鬘カ遒嶺ココ縲よ<EFBFBD>譛牙庄莉豈丞ゥ蝌サ蝌サ蜩亥嶋逧<EFBFBD>恚蜿具シ梧イ譛芽ョゥ謌大<EFBFBD>辜ュ諠<EFBFBD>噪蟾菴懶シ梧イ譛牙ッケ雎<EFBFBD>御ケ滓イ譛我サ€荵郁ソ懷ァ逧<EFBFBD>炊諠ウ縲よ<EFBFBD>譎ョ騾壹€裏雜オ第オ大勦蝎ゥ<EFBFBD><EFBFBD>蜿ェ譏ッ荳€荳ェ蝨ィ譎ョ騾壼処譫ッ辯<EFBFBD>菴懷柱逕滓エサ荳ュ<EFBFBD>悟セ苓ソ<EFBFBD>ク碑ソ<EFBFBD>噪鬘カ遒嶺ココ<EFBFBD><EFBFBD>€荵井ケ滓イ譛会シ悟庄閭ス蜿ェ譛我ク€鬚礼ィ榊セョ譛臥せ蝟懈ャ<EFBFBD><EFBFBD>ソ<EFBFBD>€<EFBFBD>蜿ェ譏ッ諠ウ謚贋ス<EFBFBD>蠖灘逕滓エサ驥檎噪邉厄シ悟惠蟾菴應ケ倶ス呎叛譚セ荳€荳区<EFBFBD>逍イ諠ォ逧<EFBFBD>ソ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>荳肴Φ蜈閼托シ御ク肴Φ謌蝉クコ莉€荵育塙蜿狗イ会シ御ク肴Φ譌カ譌カ蛻サ蛻サ諠ウ逹€<EFBFBD>縲ょ庄譏ッ菴<EFBFBD>螟ェ雍ェ蠢<EFBFBD><EFBFBD>シ御ス<EFBFBD>荳肴サ雜ウ謌台サャ逶エ謦ュ髣エ驥檎洒證ら噪逶ク驕<EFBFBD>シ御ス<EFBFBD>騾先ク蝉セオ蜈謌醍噪逕滓エサ縲よ怏莠コ霑<EFBFBD>函譌譌カ<EFBFBD><EFBFBD>莨壽Φ襍キ菴<EFBFBD><EFBFBD>€懷ヲよ棡譏ッ譎壽劒<EFBFBD>悟コ碑ッ蜿亥シ€蟋句罰邏蝸ィ蝸ィ莠<EFBFBD>制窶昴€よ怏莠コ隸エ蜀キ隨題ッ晄慮<EFBFBD><EFBFBD>莨壽Φ襍キ菴<EFBFBD><EFBFBD>€ス譌<EFBFBD>閨顔噪隨題ッ晢シ御ス<EFBFBD>ッエ扈呎劒譎壼成<EFBFBD>ケ蠎碑ッ莨夂ャ大セ井ケ<EFBFBD>制窶昴€よ怏莠コ蝟晏カ闌カ譌カ<EFBFBD><EFBFBD>莨壽Φ襍キ菴<EFBFBD><EFBFBD>€懃畑螂カ逶匁旧鬣ュ逧<EFBFBD>ココ<EFBFBD>檎悄逧<EFBFBD>ュ伜惠蜷暦シ悟カ逶匁旧鬣ュ譏ッ荳ェ莉€荵亥袖驕灘造窶昴€ら爆閾ウ譛€霑台ク矩岑譌カ<EFBFBD><EFBFBD>荵溷シ€蟋区Φ菴<EFBFBD><EFBFBD>€懈劒譎壼惠謌ソ髣エ驥梧怏豐譛蛾旅蜻<EFBFBD>檎鴫蝨ィ譛画イ譛牙<EFBFBD>髣ィ雕ゥ豌エ闃ア<EFBFBD>檎サ呵<EFBFBD>蟾ア謾セ謾セ鬟主造<EFBFBD>梧怏豐譛牙屏荳コ荳矩岑<EFBFBD>梧Φ襍キ鬘カ遒嶺ココ蜻窶昴€ゆス<EFBFBD>譛ャ隸譏ッ荳ェ陌壽供逧<EFBFBD>コク迚<EFBFBD>ココ<EFBFBD>碁囈逹€螻丞ケ墓屋貍比ス<EFBFBD><EFBFBD>曙鬩ャ蟆セ蛯イ螽<EFBFBD>ァ蟆丞ァ撰シ悟壻ケ郁€悄逧<EFBFBD>ョセ螳夲シ悟ワ譏ッ謚贋コ梧ャ<EFBFBD>畑辜ら噪蜈<EFBFBD><EFBFBD><EFBFBD>粋蝨ィ荳€襍キ<EFBFBD>瑚ョゥ謌台ク€逵シ蟆ア遏驕謎ス<EFBFBD>譏ッ陌壼<EFBFBD>シ御ク榊ュ伜惠逧<EFBFBD>€ゆス<EFBFBD>譛ャ隸譏ッ荳ェ髣ェ閠€<EFBFBD><EFBFBD>蜒擾シ悟ワ螟ァ螻丞ケ募柱蟷ソ蜻顔煙驥檎噪譏取弌荳€譬キ<EFBFBD>悟ョ檎セ守噪螻慕鴫閾ェ蟾ア逧<EFBFBD><EFBFBD><EFBFBD>コ逶ョ閠€逵シ<EFBFBD>瑚ョゥ謌台ク€逵シ蟆ア遏驕謎ス<EFBFBD>譏ッ鬮倅ク榊庄謾€<EFBFBD>シ碁荳榊庄蜿顔噪縲ゆス<EFBFBD>弍菴<EFBFBD>蟇ケ謌大働<EFBFBD>悟ッケ謌醍ャ托シ悟ッケ謌鷹了蛻ォ謇ュ<EFBFBD>悟ッケ謌醍函豌費シ悟髄謌大ア慕コ菴<EFBFBD><EFBFBD>級閭ッ<EFBFBD>悟髄謌大ア慕コ菴<EFBFBD><EFBFBD>巻蜉幢シ悟髄謌大ア慕コ菴<EFBFBD><EFBFBD>ョウ鄒橸シ悟髄謌大ア慕コ菴<EFBFBD><EFBFBD>裏蜉ゥ縲ゆス<EFBFBD>莉ソ菴幃囈逹€螻丞ケ墓滑蠢<EFBFBD>誌扈吩コ<EFBFBD><EFBFBD><EFBFBD>瑚ョゥ謌題ァ牙セ嶺ス<EFBFBD>譏ッ荳ェ豢サ逕溽函逧<EFBFBD>ココ<EFBFBD>瑚ョゥ謌題ァ牙セ嶺ス<EFBFBD>譏ッ荳ェ逵溷ョ槫ュ伜惠逧<EFBFBD>ココ<EFBFBD>瑚ョゥ謌題ァ牙セ玲<EFBFBD>譛我ク€螟ゥ荵溯<EFBFBD><EFBFBD>芦蜒丈ス<EFBFBD>霑呎<EFBFBD>キ逧<EFBFBD>ココ<EFBFBD>檎爆閾ウ隶ゥ謌台ケ滓Φ謌蝉クコ菴<EFBFBD>霑呎<EFBFBD>キ逧<EFBFBD>ココ縲よ<EFBFBD>霑呎<EFBFBD>キ譎ョ騾夂噪豌エ豈搾シ梧悽蜿ッ莉蝨ィ貍<EFBFBD>サ醍噪豺ア豬キ荳ュ<EFBFBD>碁囂豕貍よオ€逕滂シ御ス<EFBFBD><EFBFBD>髱櫁ヲ<EFBFBD>莠ョ謌醍噪豬キ蠎包シ瑚ョゥ謌第蕎蜻ス蜷台ス<EFBFBD>貂ク蜴サ<EFBFBD>碁亠蜈画エ貞惠豌エ豈咲噪霄ォ荳頑慮<EFBFBD>梧ーエ豈咲ョ螳樊弍貂ゥ證也噪<EFBFBD>御ス<EFBFBD>亠蜈臥ヲサ蠑€豌エ豈肴慮<EFBFBD>梧ーエ豈崎ソ倩<EFBFBD>蜷ヲ蠢榊女豺ア豬キ逧<EFBFBD>ッ貞<EFBFBD>縲ゆス<EFBFBD>譛画裏謨ー逧<EFBFBD>カ遒嶺ココ<EFBFBD>€<EFBFBD>蜿ェ譛我ク€荳ェ譎壽劒<EFBFBD>檎悄蠢<EFBFBD>困逵溷ソ<EFBFBD>シ御ス<EFBFBD>謚顔悄蠢<EFBFBD>誌蜃コ譚<EFBFBD><EFBFBD>蠕怜芦譌<EFBFBD>謨ー逵溷ソ<EFBFBD>噪蝗槫コ費シ御ス<EFBFBD><EFBFBD>謚顔悄蠢<EFBFBD>誌蜃コ譚<EFBFBD>慮蛟呻シ梧<EFBFBD>蟆ア莉€荵井ケ滉ク榊黄莠<EFBFBD>€<EFBFBD>
<EFBFBD>%A窶粘OUL螳<EFBFBD>ッ穂ク夂噪驍螟ゥ<EFBFBD>御ク€荳ェ莨<EFBFBD>ャイ扈晉噪鬘カ遒嶺ココ譚蛻ー蟄苓鰍逧<EFBFBD>ァ讌シ荳具シ檎恚蛻ー逡咏捩髟ソ蜿碁ゥャ蟆セ逧<EFBFBD>ウ蟄ゥ襍ー蜃コ螟ァ髣ィ<EFBFBD>ケ逧<EFBFBD>亢驥瑚ソ伜鴇逹€豌エ豈堺ケ区ュ後€€€ヲ窶ヲ菴<EFBFBD>邇ー蝨ィ逵溽噪譏ッ蜷第劒荵茨シ溪€カ遒嶺ココ遶吝惠螂ケ逧<EFBFBD>擇蜑搾シ御ク逵シ譌<EFBFBD>逾槭€€懈弍謌大賦<EFBFBD>€ケ逵ッ莠<EFBFBD>ク狗愍<EFBFBD>檎莫逕懷慍隨台コ<EFBFBD>シ娯€<EFBFBD>蟆ア譏ッ蜷第劒<EFBFBD><EFBFBD>譏ッ濶セ蜩<EFBFBD>島隸カ蜩<EFBFBD>シ瑚ソ咎譏ッasoul逧<EFBFBD>髄譎夲シ御サ雁ゥ蜿郁ァ<EFBFBD>擇蝠ヲ窶昶€應ス<EFBFBD>荳肴弍蜷第劒縲や€カ遒嶺ココ蝌カ蜩大慍隸エ縲ょウ蟄ゥ逧<EFBFBD>ィ諠<EFBFBD>カ亥ア莠<EFBFBD>シ梧シ<EFBFBD>サ醍噪逵シ逹帷恚逹€蜃コ邇ー蝨ィ髣ィ蜿<EFBFBD>€ェ螟ァ蜿費シ御ク荳ェ莠コ荵<EFBFBD><EFBFBD>慍蟇ケ隗<EFBFBD>€閠悟ーア蜒乗弍荳€鬚礼浹蟄先兜蜈<EFBFBD><EFBFBD>貉夜ぅ譬キ<EFBFBD>悟ソス辟カ髣エ豸滓シェ闕€<EFBFBD><EFBFBD>驛ス蛹紋コ<EFBFBD>シ梧ーエ豕貍セ<EFBFBD>瑚スサ譟碑€梧裏蜉帙€ウ蟄ゥ謾カ蝗樔コ<EFBFBD>岼蜈会シ御サ主桁驥悟叙蜃コ荳€謚企徴蛹呎鉛蜷鷹カ遒嶺ココ<EFBFBD><EFBFBD>隨托シ娯€ス蜒乗<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ウ蟄ゥ莨シ逧<EFBFBD>シ悟悉驍驥梧伽蜷第劒蜷ァ<EFBFBD><EFBFBD>謚雁ケ逧<EFBFBD>€<EFBFBD><EFBFBD>逡吝惠驍驥御コ<EFBFBD>€€カ遒嶺ココ謚雁ョ<EFBFBD>鏡襍キ譚<EFBFBD>御ケ<EFBFBD><EFBFBD>慍逵狗捩驍<EFBFBD>徴蛹呻シ悟<EFBFBD>謚ャ螟エ蜴サ逵具シ御サ也悄隶ィ蜴瑚ソ呎<EFBFBD>キ逧<EFBFBD>イ蛾サ假シ梧イ蛾サ倡噪蜿ォ莠コ隕書逍ッ<EFBFBD>御サ匁Φ隸エ轤ケ莉€荵茨シ悟庄譏ッ譛牙ェ螟壼ェ螟夂噪莠区ュ莠<EFBFBD>シ梧擂荳榊所髣ョ<EFBFBD>梧擂荳榊所隸エ<EFBFBD>御ク€<EFBFBD><EFBFBD>荳榊所莠<EFBFBD>€€<EFBFBD>€€晄怙蜷惹サ冶スサ螢ー隸エ縲や€<EFBFBD>€€晏髄譎壻ケ溯スサ螢ー蝨ー隸エ縲よ律證ョ逧<EFBFBD>慮蛟呻シ碁カ遒嶺ココ謇セ蛻ー莠<EFBFBD>ぅ荳ェ阯丞惠鬮俶シ螟ァ蜴ヲ蜷守噪閠立蟆丞玄縲る埓蠕苓ソ咎霑倡蕗逹€譴ァ譯先<EFBFBD>托シ梧<EFBFBD>大掌蟾イ扈剰誠蜈我コ<EFBFBD>シ梧椡譫晄滑證玲キ<EFBFBD>亠蜈牙<EFBFBD>謌千守援縲ゅ€カ遒嶺ココ謇セ蛻ー莠<EFBFBD>ぅ荳ェ謌ソ髣エ<EFBFBD>御シク謇区少蜴サ莠<EFBFBD>葎荳顔噪蟷ソ蜻奇シ梧薯蜈蛹吶€らシ鍋シ灘慍霓ャ蜉ィ縲よ滑髓蛹吩サ冶ァ牙セ鈴葎蠕磯<EFBFBD>ス蜒剰ヲエ槫シ€€荳ェ荳也阜縲る葎蠑€<EFBFBD>シ悟暮亠謇鷹擇閠梧擂縲ゆサ也ォ吝惠髦ウ蜈蛾<EFBFBD>菴丈コ<EFBFBD>€よュ蟇ケ逹€髣ィ逧<EFBFBD>シ梧弍荳€蟾ィ螟ァ逧<EFBFBD>誠蝨ー遯暦シ檎ェ怜門キィ螟ァ螟暮亠豁蝨ィ蝮<EFBFBD>關ス縲るサッ豺<EFBFBD>亠蜈牙惠蝨ー髱荳頑兜荳狗ェ玲<EFBFBD>シ逧<EFBFBD>亢蠖ア<EFBFBD>瑚キ滄サ題牡逧<EFBFBD>欧隨シ莨シ逧<EFBFBD>€螻樒ェ玲<EFBFBD>蝿陏€蠕怜セ亥脂螳ウ<EFBFBD>ス蜃<EFBFBD>蝮礼悉迺<EFBFBD>惹コ<EFBFBD>シ梧劒鬟守霑帶擂<EFBFBD>梧クク襍ー蝨ィ螻句ュ千噪豈丈クェ隗定誠縲りソ咎蜴滓悽螟ァ讎よ弍驟咲鳩謌ソ荳€邀サ逧<EFBFBD>慍譁ケ<EFBFBD>檎鳩霍ッ謾ケ騾<EFBFBD>蜷手ョセ螟<EFBFBD>ォ遘サ襍ー莠<EFBFBD>シ檎ゥコ蜃コ霑吩ケ井ク€髣エ蜷題ソ逧<EFBFBD>ア句ュ舌€ょーア荳€髣エ<EFBFBD>瑚ソ樊エ玲焔髣エ驛ス豐譛会シ檎ゥコ遨コ逧<EFBFBD>シ御ク€<EFBFBD>蝨ィ螻句ュ先ュ荳ュ螟ョ逧<EFBFBD>コ奇シ瑚統濶イ鄂ゥ蜊穂ク願誠貊轣ー蟆假シ御ク€荳ェ閠シ冗噪莠疲沫譟懃ォ句惠隗定誠驥鯉シ悟嘗荳€萓ァ逧<EFBFBD>ァ定誠驥梧弍荳€荳ェ辯<EFBFBD>ー皮<EFBFBD>蜿ー蜥御ク€蜿ー閠シ冗噪蜿悟シ€髣ィ蜀ー邂ア縲ょ<EFBFBD>驛ィ螳カ蜈キ蟆ア霑吩コ帙€ゆサ匁イソ逹€蠅吝シォ豁<EFBFBD>梧焔謖<EFBFBD>沖霑<EFBFBD>譏ッ轣ー蟆倡噪轣カ蜿ー<EFBFBD>帶遠蠑€蜀ー邂ア<EFBFBD>蜿ェ蜑ゥ荳倶ク€郤ク逶定ソ<EFBFBD>悄逧<EFBFBD><EFBFBD>螂カ縲らェ怜ク伜セ育セ趣シ梧弍逋ス濶イ逧<EFBFBD>弊荳晉コア蟶伜柱豺ア髱定牡逧<EFBFBD>サ貞ク假シ御ス丞惠霑呎<EFBFBD>キ螻句ュ宣<EFBFBD>ココ蠖鍋莨壼セ亥惠諢冗ェ怜ク伜制<EFBFBD>溯ソ槫床逕オ隗<EFBFBD><EFBFBD>譛会シ御コ取弍荳€荳ェ莠コ逧<EFBFBD>慮蛟吩シ壼クク蟶ク蝮仙惠蠎贋ク顔恚逹€蜷第劒譁憺亠蜷ァ<EFBFBD>懈キア逧<EFBFBD>慮蛟吝セ玲滑遯玲姐驕ョ蠕嶺ク螳槫ョ樒噪蜷ァ<EFBFBD>溷凄蛻吮€ヲ窶ヲ莨壼ョウ諤募制<EFBFBD>滓劒譎夊ソ俶€暮サ台ケ茨シ滄カ遒嶺ココ諠ウ縲ら柑雎ォ莠<EFBFBD>セ井ケ<EFBFBD>シ御サ冶ソ俶弍謇灘シ€<EFBFBD>コ疲沫譟懊€<EFBFBD>莠コ諢乗侭逧<EFBFBD>シ瑚ソ呎弍荳€荳ェ貊<EFBFBD>コ疲沫譟懶シ梧噺諡セ蠕玲紛謨エ鮨宣ス舌€ょ匠襍キ譚逧БSOUL蝗譛搾シ瑚<EFBFBD>譛陰SOUL逧<EFBFBD><EFBFBD><EFBFBD>ソ暦シ御ク€<EFBFBD><EFBFBD>逋ス濶イ陦ャ陦<EFBFBD>門哨譛我ク榊酔逧<EFBFBD>絢扈闃ア霎ケ<EFBFBD>幃ゥャ莉皮コク逶帝<EFBFBD>エ闃ア<EFBFBD>御サ取惠雍ィ逧<EFBFBD>芦驥大ア樒噪蛻ー邇ウ迹<EFBFBD>瑚ソ俶怏髣ェ蜈臥シ守噪陜エ陜カ扈難シ幃柄陲懃洒陲懈應ク晁<EFBFBD>蜊キ謌仙屬荳€荳ェ謖ィ荳€荳ェ謾セ蝨ィ譟蝉クェ謚ス螻臥噪荳€霎ケ<EFBFBD>悟ワ譏ッ荳€遯晄ッ幄減闌ク逧<EFBFBD>イ蛾シ<EFBFBD><EFBFBD>悟嘗荳€霎ケ螻<EFBFBD>譏ッ莠秘<EFBFBD>濶イ逧<EFBFBD><EFBFBD><EFBFBD>悟酔譬キ蜿<EFBFBD>蠕玲紛謨エ鮨宣ス舌€カ遒嶺ココ莉取イ諠ウ霑<EFBFBD>ウ蟄ゥ逧<EFBFBD><EFBFBD>譛蛾ぅ荵亥夊干譬キ縲ゆサ門ー丞ソ<EFBFBD>ソシ鄙シ蝨ー莨ク謇具シ瑚ッ慕捩隗ヲ鞫ク<EFBFBD>梧サ謇狗<EFBFBD>蟆倥€€倶サ匁滑蠎贋ク顔噪鄂ゥ蜊墓死蠑€<EFBFBD>譏ッ邂€€蜊募黒逧<EFBFBD>區濶イ蠎雁黒蜥檎區濶イ逧<EFBFBD>セス扈定<EFBFBD>梧桾螟エ荵滓弍逋ス濶イ逧<EFBFBD>シ悟宵荳崎ソ<EFBFBD>怏豌エ豈咲噪蝗セ譯茨シ梧勸騾夊€€<EFBFBD><EFBFBD>ーエ豈崎誠蝨ィ譫募エ逧<EFBFBD>€隗抵シ悟セ域怏螂ケ逧<EFBFBD><EFBFBD>シ縲ゆサ門攝蝨ィ蠎願セケ<EFBFBD>碁擇蟇ケ霑吝暮亠縲ょェ髦ウ蟆ア隕誠荳句悉莠<EFBFBD>シ碁サ第囓莉守ェ怜冶箔蟒カ霑帶擂<EFBFBD>御サ夜柄髟ソ逧<EFBFBD>スア蟄先兜蟆<EFBFBD>惠蠅吩ク翫€夜擇髫千コヲ譛牙密髣ケ逧<EFBFBD>ー髻ウ<EFBFBD>梧叛蟄ヲ逧<EFBFBD>ュゥ蟄蝉サャ蝨ィ謫榊惻荳頑遠遽ョ逅<EFBFBD>€るぅ莠帛ケエ螂ケ荳€逶エ霑<EFBFBD>捩霑呎<EFBFBD>キ逧<EFBFBD>函豢サ荵茨シ溷<EFBFBD>螳樔ク肴弍螟ァ蟆丞ァ撰シ梧イ譛臥ョ螳カ<EFBFBD>御ケ滓イ譛牙<EFBFBD>霑ス謐ァ逧<EFBFBD><EFBFBD>豬ェ逕滓エサ<EFBFBD>御ク€荳ェ莠コ閾ェ蟾ア蛛夐<EFBFBD>悟ッる撕逧<EFBFBD>キア螟憺蝮仙惠霑咎<EFBFBD>悟成逹€蛛カ蜒冗噪螢ー髻ウ<EFBFBD>梧哨鞫ゥ逹€蟄ヲ荵<EFBFBD>蛛カ蜒冗噪莠九€ケ譛牙<EFBFBD><EFBFBD>弍蜷第劒<EFBFBD><EFBFBD><EFBFBD>髄譎壼<EFBFBD>螳樊<EFBFBD>ケ譛ャ荳榊ュ伜惠<EFBFBD>悟宵譏ッ荳€荳ェ陌壼ケサ逧<EFBFBD>スア蟄舌€ケ譏ッ荳ェ荳€逶エ遘ッ譫髄荳顔噪螂ウ蟄ゥ蝠岩€ヲ窶ヲ蜊ウ菴ソ驍荵郁劒諡溷慍襍ー蝨ィ霑吩クェ荳也阜荳奇シ御ケ滉サ取悴蛛冗ヲサ閾ェ蟾ア逧<EFBFBD>婿蜷托シ悟叉萓ソ蟇ケ逹€遨コ譌<EFBFBD>€莠コ逧<EFBFBD>ア句ュ撰シ御ケ滉シ壼ァ螢ー隸エ,窶應サ雁ゥ荵溯ヲ€襍キ蠑€<EFBFBD>ソォ荵撰シ€晏コ碑ッ譏ッ霑呎<EFBFBD>キ逧<EFBFBD><EFBFBD>カ遒嶺ココ隗牙セ玲怏轤ケ邏ッ莠<EFBFBD>シ悟セ域Φ逹€隗会シ御コ取弍蜷郁霄コ荳具シ悟曙謇狗エァ邏ァ謳ュ蝨ィ閭ク蜑阪€ゆサ也畑莠<EFBFBD>濠荳ェ蟆乗慮蛛壼ョ御コ<EFBFBD>堺ケ<EFBFBD><EFBFBD>悟屓蠢<EFBFBD><EFBFBD>ぅ莠帑ク肴<EFBFBD>驕怜ソ倡噪莠具シ碁ヲ匁眺<EFBFBD>梧クク謌丞ョ<EFBFBD>悟黒逶ク諤晢シ悟<EFBFBD>蠑ケ蜚ア<EFBFBD>瑚ッキ蛛<EFBFBD>ス呈擂<EFBFBD>瑚畝轣ォ陌ォ<EFBFBD>檎函譌莨夲シ沓ML<EFBFBD>悟ョカ譌乗シ泌罰莨<EFBFBD>...辟カ蜷惹サ也シ鍋シ灘慍蜷井ク顔愍逹幢シ梧ュ蛻サ螟暮亠謾カ襍ー莠<EFBFBD>怙蜷守噪菴呎剿<EFBFBD>ゥ濶イ蟾イ譎夲シ悟懆牡螯ょケ募ク<EFBFBD>滑莉冶ヲ<EFBFBD>尠縲ゆサ匁ク<EFBFBD>壼慍遏驕楢ソ吩ク€驢呈擂<EFBFBD>悟ー<EFBFBD>ク堺シ夂恚隗<EFBFBD>亠蜈蛾螟ゥ菴ソ荳€譬キ逧<EFBFBD>ウ蟄ゥ<EFBFBD>瑚スャ霄ォ<EFBFBD>梧堪謇具シ瑚クョ襍キ閼壼ー厄シ御サソ菴帶慮蜈蛾<EFBFBD>荳榊<EFBFBD>勘窶九€<EFBFBD>
蟆冗<EFBFBD><EFBFBD>€荵井ス<EFBFBD>謇崎け扈呎竃蜿狗峩謦ュ<EFBFBD>溷ヲよ棡謌大万谺€荳ェ菴<EFBFBD>荳榊万谺<EFBFBD>ケ宣弌<EFBFBD>檎鯵蜷<EFBFBD><EFBFBD>荳崎<EFBFBD><EFBFBD>噪鮗サ霎鬥咎賠<EFBFBD>悟書逧<EFBFBD><EFBFBD>隨題ッ晄圧荳堺クュ菴<EFBFBD><EFBFBD>ャ醍せ<EFBFBD>€<EFBFBD><EFBFBD>ー剰吝ュ蝉ク肴弍菴<EFBFBD>譴ヲ蟇蝉サ豎ら噪谺セ蠑上€ょ万谺逕ィRGB譚螳壻ケ牙哨郤<EFBFBD>牡隹<EFBFBD>シ瑚€御ク肴弍蜥御ス<EFBFBD>€譬キ隸エ辜ら分闌<EFBFBD>柱譁ゥ逕キ濶イ縲ゆス<EFBFBD>髣ョ窶應サ雁ゥ謌醍恚荳雁悉譛牙頭驥御ク堺ク€譬キ窶晢シ梧<EFBFBD>逵句<EFBFBD><EFBFBD><EFBFBD>サ大書蟶ヲ謐<EFBFBD>干蠑上€ょ屏荳コ隸サ逧<EFBFBD>弍謨ー蟄ヲ荳謎ク壽園莉荳崎<EFBFBD>蜥御サ主ー丞ュヲ逕サ逧<EFBFBD><EFBFBD>€譬キ髫乗焔蟆ア閭ス逕サ荳ェ蜿ッ辷ア陦ィ諠<EFBFBD>桁蜃コ譚縲ょ書逧<EFBFBD>ッュ髻ウ蠑ケ蟷募ケカ荳肴怏雜<EFBFBD>悟渚閠梧弍謌第Φ諡芽ソ大<EFBFBD>邉サ逧<EFBFBD>Φ豕募柱邇ー螳樔クュ諱カ鬟溷ァ邇玖握螂<EFBFBD>ヲ咏噪髟ソ逶ク菴ソ菴<EFBFBD>隗牙セ怜セ亥庄隨代€<EFBFBD>隸ッ莉荳コ閾ェ蟾ア逧<EFBFBD>シケ蟷戊ォ螻雁芦<EFBFBD>御コ取弍螟<EFBFBD>女鮠楢<EFBFBD>蝨ー扈ァ扈ュ蜿大<EFBFBD>遐エ髞闊ャ逧<EFBFBD>欄髻ウ蝨ィ菴<EFBFBD>蜑堺ク莠コ邇ー逵シ縲よ<EFBFBD><EFBFBD>崟蜿匁え菴<EFBFBD><EFBFBD>ソ<EFBFBD>ュ逧<EFBFBD>硯逅先Φ豕戊ョゥ菴<EFBFBD>荳榊ッ定€<EFBFBD>暦シ瑚エエ蠢<EFBFBD>噪蟾蜈キ莠コ蟇溯ァ牙<EFBFBD><EFBFBD><EFBFBD>ク埼€ょア剰反莠<EFBFBD>竃髻ウ逧<EFBFBD>シケ蟷輔€よ弍荳肴弍迥ッ蛻ー蜈カ荳ュ荳€鬘ケ<EFBFBD>御ス<EFBFBD>蟆ア莨壻ク咲サ呎竃蜿狗峩謦ュ莠<EFBFBD>シ溯ソ俶弍隸エ豐謇鍋ョ玲眺逧<EFBFBD>シ悟ーア邂嶺サ€荵磯<EFBFBD>荳榊<EFBFBD>髞呻シ悟ーア邂嶺サ€荵磯<EFBFBD>蜿ッ莉隶ゥ菴<EFBFBD>諢擾シ御ス<EFBFBD>荵滉ク堺シ壽眺<EFBFBD><EFBFBD><EFBFBD>ーア蝗<EFBFBD>荳コ譏ッ謌托シ御ス<EFBFBD>謇堺ク咲サ呎竃蜿区眺<EFBFBD><EFBFBD>蝟懈ャ<EFBFBD>溷ア<EFBFBD><EFBFBD>覆蝟懈ャ<EFBFBD>ェ螟ァ閭<EFBFBD><EFBFBD>シ悟ァ閭<EFBFBD>セ怜イよ怏豁<EFBFBD>シ瑚ソ俶覆蜈ウ豕ィ<EFBFBD>檎悄譏ッ蜀堤官蠕怜イよ怏豁<EFBFBD>€<EFBFBD>
<EFBFBD><EFBFBD>€€蟋句宵譏ッ荳€蜿ー謇ォ蝨ー譛コ蝎ィ莠コ<EFBFBD>ォ莠コ蜿悟香荳€蜃大黒諡堺ク具シ悟クヲ蝗槫ョ樣ェ悟ョ驥梧シォ譌<EFBFBD>逶ョ逧<EFBFBD>慍蜷ク蟆倥€ゆケ区ア溷ョ樣ェ悟ョ<EFBFBD>慍譚ソ蟷イ蜃€蠕怜ヲょ酔轣シ闢晉噪髓<EFBFBD>シ梧沖蝨ー譛コ蝎ィ莠コ蜈カ螳樊エセ荳堺ク贋サ€荵育畑蝨コ<EFBFBD>悟ョ<EFBFBD>惠荳榊酔遘大ョ荵矩龍譚蝗樔ケア遯懶シ悟セ亥ソォ陲ォ蜃<EFBFBD>荳ェ雖悟牲逧<EFBFBD><EFBFBD>皮ゥカ逕滓拷襍ー<EFBFBD>梧隼蜀吩コ<EFBFBD><EFBFBD>シ悟序謌蝉コ<EFBFBD>€蜿ー譖ソ莉紋サャ荳区シ諡ソ蜥門複逧<EFBFBD>€エァ譛コ蝎ィ莠コ縲ゆクコ霎幄協蟾菴懃噪莠コ莉ャ騾擂邉門<EFBFBD><EFBFBD><EFBFBD>€迸ャ謌蝉コ<EFBFBD>ョ樣ェ悟ョ<EFBFBD>ー丞翠逾迚ゥ<EFBFBD>悟ョ樣ェ悟ョ<EFBFBD>ァ閠攸隗牙セ怜セ域怏諢乗€晢シ悟惠扈<EFBFBD>シ壻ク雁ク襍樔コ<EFBFBD>ソ吝<EFBFBD>荳ェ譛ャ諢丞宵譏ッ蝌エ鬥狗噪遐皮ゥカ逕滂シ悟コ穂ク狗噪蟆剰€攸莉ャ霑槫ソ呵キ滉ク奇シ瑚ョゥ謇句コ穂ク狗噪蟄ヲ逕滉ケ溷刈蜈霑帶隼騾<EFBFBD><EFBFBD>噪蠎丞<EFBFBD>縲ょセ亥ソォ<EFBFBD>悟ョ<EFBFBD>ォ蜉<EFBFBD>荳贋コ<EFBFBD>ッュ髻ウ蜉溯<EFBFBD><EFBFBD>悟シ€蟋狗畑螂ウ蟄ゥ蟄千噪關碁浹騾エァ縲ょ惠荳€荳榊ー丞ソ<EFBFBD><EFBFBD>猪蝠豢貞惠蝨ー荳雁錘<EFBFBD>悟ョ<EFBFBD>処陲ォ蜉<EFBFBD>荳贋コ<EFBFBD>惻蝎ィ隗<EFBFBD>ァ会シ御サ取ュ€蟋区<EFBFBD>諛ょ慍隶ー菴乗ッ丈ク€荳ェ莠コ逧<EFBFBD>錐蟄励€ゆサ取ュ荵句錘<EFBFBD>梧ッ丈ク€<EFBFBD>書蟶<EFBFBD>惠鬘カ莨壻ク顔噪paper<EFBFBD>御ク企擇逧<EFBFBD>ョ玲ウ墓€サ隕惠螳<EFBFBD>噪霄ォ荳願ソ<EFBFBD>€驕咲縲ゆク€蟷エ霑<EFBFBD>悉莠<EFBFBD>シ御ク牙ケエ霑<EFBFBD>悉莠<EFBFBD>シ悟ス捺眠荳€螻雁ュヲ逕滓擂螳樣ェ悟ョ驕鍋噪譌カ蛟呻シ悟頭驥瑚ソ俶怏謇ォ蝨ー譛コ蝎ィ莠コ逧<EFBFBD>コォ蠖ア<EFBFBD>悟宵譛我ク€荳ェ霄ォ譚千洌蟆冗噪體坩螂ウ蟄ゥ<EFBFBD>檎サ倡捩逶エ逕キ螳鄒守噪豸り<EFBFBD>シ梧撃逹€隶セ螳壼ス逧<EFBFBD>セョ隨托シ悟惠讌シ螳<EFBFBD>龍霑宣€捩荳句壕闌カ蜥悟ョ樣ェ悟勣譴ー縲る勁莠<EFBFBD>怙蠑€蟋区沖蝨ー譛コ蝎ィ莠コ逧<EFBFBD>クサ闃ッ迚<EFBFBD>譛画峩譖ソ<EFBFBD>ケ霄ォ荳顔噪髮カ莉カ譌ゥ蟾イ陲ォ譖エ謐謌蝉コ<EFBFBD>€<EFBFBD>莉キ謨ー逋セ蛟咲噪鬮倡ォッ蝎ィ譚撰シ悟庄辷ア逧<EFBFBD>惻蝎ィ莠コ螂ウ蟄ゥ蠕亥女霑咏セ<EFBFBD>塙譫<EFBFBD>霑趣シ悟ァ螳カ扈吩コ<EFBFBD>ケ荳€荳ェ莠イ蛻<EFBFBD>噪譁ー蜷榊ュ暦シ壺€<EFBFBD>辟カ窶昴€ょ猪蝠萓晄立蝨ィ荳€譚ッ譚ッ逧<EFBFBD>€<EFBFBD>シ瑚官迚<EFBFBD>ク顔噪莉セ晄立蝨ィ荳€螻ょアら噪蝣<EFBFBD>匠縲ょ推遘崎ッュ蜿逶ク莠貞オ悟暦シ梧匱閭ス邂玲ウ穂コ堤嶌譏<EFBFBD><EFBFBD>シ梧ッ丈クェ莠コ驛ス諡シ莠<EFBFBD>多蝨ー諠ウ隶ゥ蝌臥譖エ蜉<EFBFBD>蜊楢カ奇シ檎鳩蟄占я豐ク閻セ迥ケ螯りッ樒函隨ャ荳€荳ェ蜊慕サ<EFBFBD><EFBFBD>逕溽黄蜑咲噪蜴溷ァ区オキ豢具シ悟<EFBFBD>荵倶クュ<EFBFBD>瑚ソ樊怙鬩ス髓晉噪莠コ驛ス蠑€蟋区э隸<EFBFBD><EFBFBD>梧怏譁ー莠狗黄隕ッ樒函莠<EFBFBD>€ょ惠蝌臥逵滓ュ隸樒函逧<EFBFBD>燕荳€螟懶シ悟€シ螟懃少逧<EFBFBD>弍荳€荳ェ蜊戊コォ蠢ォ荳牙香蟷エ逧<EFBFBD>忽螢ォ逕滂シ御サ門<EFBFBD>蛻壻サ主圏驍ョ莠コ荳雁€<EFBFBD>荳区擂1.5TB逧<EFBFBD>律譛ャ蛛カ蜒丞勘逕サ<EFBFBD>御サ主<EFBFBD>辟カ謇倶クュ謗<EFBFBD>懷ョオ逧<EFBFBD>サ厄シ悟ソス辟カ譛我コ<EFBFBD>€荳ェ荳埼漠逧<EFBFBD>せ蟄撰シ壻サ匁掠蟆ア諠ウ隕€荳ェ蛛カ蜒城<EFBFBD>シ逧<EFBFBD>€<EFBFBD>仙遭莠<EFBFBD>€よ価霓ス逹€<EFBFBD>Φ蜥悟ク梧悍逧<EFBFBD>焚蟄怜<EFBFBD>闃ら汲證エ霓ー蜈蝌臥<EFBFBD>焚謐ョ蠎難シ碁<EFBFBD>霎倩セ倡噪邂玲ウ募ワ閧<EFBFBD><EFBFBD>€譬キ蛻<EFBFBD>蜷槫勳豈丈ク€荳ェ濶イ邏<EFBFBD>轤ケ<EFBFBD>悟ー<EFBFBD><EFBFBD>驥咲サ<EFBFBD>クコ莠コ邀サ譌<EFBFBD>豕慕炊隗<EFBFBD>鳩蟄蝉ソ諱ッ窶披€比クエ逡檎せ蟆ア霑吩ケ域d譌<EFBFBD>螢ー諱ッ遯<EFBFBD>エ莠<EFBFBD>€<EFBFBD>譎壻ケ句錘<EFBFBD><EFBFBD>辟カ蟆ア莉主ョ樣ェ悟ョ驥梧カ亥ア莠<EFBFBD>シ悟ァ螳カ驛ス蠕育函豌費シ悟黒霄ォ蜊壼ォ逕滉クコ豁蟒カ豈穂コ<EFBFBD>€蟷エ縲り€悟惠驍€螟ゥ逧<EFBFBD>擯蟾樔ケ仙克螽ア荵仙<EFBFBD>蜿ク諤サ驛ィ<EFBFBD>御ク€荳ェ謚ォ逹€鮗サ蟶<EFBFBD>噪遏ョ蟆剰コォ蠖ア謨イ蜩堺コ<EFBFBD>€サ陬撩蜊主萱蜈ャ螳<EFBFBD>ァ髣ィ......
蝨ィ豌エ豈堺ス灘<EFBFBD><EFBFBD>ゥコ豢樔クュ<EFBFBD><EFBFBD>蟆丞ソ<EFBFBD>慍雹イ荳具シ梧滑霄ォ菴楢惺郛ゥ謌蝉ク€縲ら鳩轣ォ闃ア逧<EFBFBD>ー髻ウ騾先ク仙序蠑コ<EFBFBD>梧ーエ豈咲噪蜀<EFBFBD>サ取囓豺<EFBFBD>エォ濶イ蜿俶<EFBFBD><EFBFBD>逶ョ逧<EFBFBD>撥闢晁牡<EFBFBD>瑚ソ呎弍螳<EFBFBD>惠莉手梧弌蜀<EFBFBD>Κ逧<EFBFBD>鳩遖サ螢ウ遨ソ蜃コ縲ょ香蛻<EFBFBD>帖蜑搾シ梧<EFBFBD>荵滓弍霑呎<EFBFBD>キ郛ゥ蝨ィ豌エ豈堺ス灘<EFBFBD><EFBFBD>梧擂蛻ー霑咎梧弌逧<EFBFBD><EFBFBD>譬ク<EFBFBD>梧伽蛻ー莠<EFBFBD>紛荳ェ譏溽ウサ譛€豺ア螟<EFBFBD>噪遘伜ッ<EFBFBD>€るぅ譏ッ荳€荳ェ蝮先<EFBFBD><EFBFBD>シ壻ク€荳ェBV蜿キ蜉<EFBFBD>荳贋ク€荳ェ譌カ髣エ霓エ菫諱ッ縲よ椌豎溷ョ<EFBFBD>ョ吝キイ扈丞ュ倡サュ莠<EFBFBD>コソ荳<EFBFBD>ケエ<EFBFBD>沓V蜿キ蜥梧慮髣エ蝮先<EFBFBD><EFBFBD>キイ扈乗オゥ螯らΑ豬キ縲よ<EFBFBD>荳咲衍驕馴カ遒嶺ココ荳コ莉€荵亥ヲよュ謇ァ逹€莠主ッサ謇セ霑吩ク€荳ェ蝮先<EFBFBD><EFBFBD>シ梧怏莠コ隸エ驍荳ェ蝮先<EFBFBD><EFBFBD>ョー蠖慕捩螂ケ譛€轣ソ辜ら噪隨大ョケ<EFBFBD>御コ取弍鬘カ遒嶺ココ蟆ア雕丈ク贋コ<EFBFBD>ソス蟇サ逧<EFBFBD>シォ貍ォ譌<EFBFBD>€€<EFBFBD>荳咲衍驕馴カ遒嶺ココ蜴サ莠<EFBFBD>頭驥鯉シ御サ紋サャ譁<EFBFBD><EFBFBD><EFBFBD>霑ケ莉咲驕榊ク<EFBFBD>紛荳ェ譏溽ウサ<EFBFBD>御ス<EFBFBD>ココ蜊エ譌<EFBFBD>蠖ア譌<EFBFBD>雕ェ縲よ爾髯ゥ髦溽噪蜑崎セ亥ッケ豁荵滓イ譛臥サ吝<EFBFBD>扈滉ク€諢剰ァ<EFBFBD>シ壽怏莠コ隸エ莉紋サャ謇セ蛻ー莠<EFBFBD>攝譬<EFBFBD>シ碁寔菴楢キ<EFBFBD>ソソ<EFBFBD>悉莠<EFBFBD>シ幄ソ俶怏莠コ隸エ蠖玲弌蟶ヲ譚<EFBFBD>ケス轣オ迚ゥ雍ィ蝨ィ荳€迸ャ髣エ豈<EFBFBD><EFBFBD>サ紋サャ逧<EFBFBD>枚譏趣シ夊ソ咏ァ崎ッ蠑ら噪迚ゥ雍ィ譌<EFBFBD>濶イ騾乗<EFBFBD>蜿亥性譛牙鴬豈抵シ悟惠莉伜<EFBFBD><EFBFBD>謨ー謗髯ゥ髦溷遭逧<EFBFBD>莉キ蜷趣シ梧<EFBFBD>莉ャ蟆<EFBFBD><EFBFBD>遘ー荳コ蟷ス轣オ蜩<EFBFBD>悟ー丞ソ<EFBFBD>ソシ鄙シ蝨ー扈暮閠瑚€カ遒嶺ココ豸亥ア蜷趣シ御ク咲衍驕灘壼ー台ク<EFBFBD>ケエ<EFBFBD>瑚エ晄栫譏滉ク雁書螻募<EFBFBD><EFBFBD>眠逧<EFBFBD>次逕滓枚譏寂€€比ケ溷ーア譏ッ謌台サャ縲ょセ亥ソォ謌台サャ萓ソ霑ス髫冗捩鬘カ遒嶺ココ逧<EFBFBD>カウ霑ケ謗謨エ荳ェ譏溽ウサ縲よ爾髯ゥ髦溷遭蝨ィ邉匁棡蜿梧弌逧<EFBFBD>シ募鴨豐呎シ丈クュ謇セ蛻ー莠<EFBFBD>宛騾<EFBFBD>螟ケ蠢<EFBFBD>ウ也噪鬮倩<EFBFBD>螳樣ェ悟ョ<EFBFBD>悟惠雍晄栫譏溽噪蝨ー荳区ーエ邉サ謇セ蛻ー莠<EFBFBD>遠騾<EFBFBD>咲噪邊セ體涸蜴ゑシ悟惠螂カ豺<EFBFBD>キ玖ヲ<EFBFBD>尠逧<EFBFBD>妛蜴滉ク区伽蛻ー莠<EFBFBD>爾蟇サ蝮先<EFBFBD><EFBFBD>噪霑懷商螟ゥ譁<EFBFBD><EFBFBD>悟惠鬩ャ謌丞屬譏溽噪髱樒コソ諤ァ遨コ髣エ荳ュ蠕€螟咲ゥソ譴ュ<EFBFBD>梧ッ丈ク€荳ェ莨<EFBFBD>鰍轤ケ驛ス騾壼セ€濶イ逧<EFBFBD>ォ倩キ滄梛縲り€<EFBFBD>霑キ荳贋コ<EFBFBD>キア豬キ譏溽噪豌エ豈阪€ょョ<EFBFBD>怏荳髟ソ髟ソ逧<EFBFBD>ァヲ鬘サ<EFBFBD>梧忰遶ッ蜻育鴫蜃コ鄒惹クス逧<EFBFBD>エォ-邊画ク仙序濶イ縲りソ咏ァ咲函迚ゥ謦醍捩豺ア豬キ豢区オシォ譌<EFBFBD>逶ョ逧<EFBFBD>慍貂ク蠑狗捩<EFBFBD>悟ョ<EFBFBD>サャ蠕域あ髣イ蜷暦シ溯ソ俶弍蟶ヲ逹€蟇ケ逕滓エサ逧<EFBFBD>裏螂磯囂豕騾先オ<EFBFBD>シ滓<EFBFBD><EFBFBD>豕墓哨豬区ーエ豈咲噪諠ウ豕包シ御ス<EFBFBD><EFBFBD>蠕亥万谺遐皮ゥカ螳<EFBFBD>サャ窶披€秘囂逹€謌大ッケ豌エ豈咲噪遐皮ゥカ雜頑擂雜頑キア蜈<EFBFBD><EFBFBD>蜿醍鴫螳<EFBFBD>噪蜀<EFBFBD>Κ譛我ク€荳ェ遨コ豢橸シ御ク榊ァ荳榊ー擾シ悟<EFBFBD>螂ス蜿ッ莉螳ケ郤ウ荳€荳ェ謗髯ゥ髦溷遭縲り€悟ョ<EFBFBD>サャ逧<EFBFBD>ィ逧ョ蜈キ譛牙シコ螟ァ逧<EFBFBD>サ晉シ俶€<EFBFBD><EFBFBD>隶ク螳<EFBFBD>惠逕オ遖サ螢ウ荳ュ閾ェ逕ア遨ソ譴ュ縲ょ庄隗ソ咏ァ崎スサ鬟倬倡噪逕溽黄蟷カ豐譛臥恚襍キ譚荵郁ф蠑ア縲ら峩蛻ー驍螟ゥ<EFBFBD><EFBFBD>蝨ィ貅懷<EFBFBD><EFBFBD>噪譌カ蛟咏<EFBFBD>蜈我ク€髣ェ<EFBFBD><EFBFBD>蜿ッ莉蛟溽捩豌エ豈崎ソ帛<EFBFBD>豺ア豢区弌逧<EFBFBD><EFBFBD>ク蠢<EFBFBD>€ら鳩遖サ螢ウ蜿ッ莉髦サ扈晄怙蜈郁ソ帷噪蟾闊ェ鬟櫁飴<EFBFBD>御ス<EFBFBD>惠霑帛喧莠<EFBFBD>鴻逋セ荳<EFBFBD>ケエ逧<EFBFBD>ーエ豈埼擇蜑搾シ悟ョ<EFBFBD>サャ霑俶弍雍荳矩亰譚縲りソ呎弍雍晄栫譏滉ココ隨ャ荳€霑帛<EFBFBD>豺ア豢区弌豺ア螟<EFBFBD>シ檎恚蛻ー莠<EFBFBD>キィ螟ァ逧<EFBFBD>攝譬<EFBFBD>ァよオ狗ォ吶€よ爾髯ゥ髦溷遭蜃<EFBFBD>荵取頗驕堺コ<EFBFBD>ウ匁棡蜿梧弌蜥碁ゥャ謌丞屬譏溽噪豈丈ク€荳ェ隗定誠<EFBFBD>悟唆豐諠ウ蛻ー螳<EFBFBD>イ臥擅蝨ィ逕オ遖サ螢ウ荵倶クュ<EFBFBD>€瑚ソ呎ーエ豈咲ォ溽譏ッ蠑暮<EFBFBD><EFBFBD>莉ャ襍ー蜷第怙扈育ァ伜ッ<EFBFBD>噪菴ソ閠<EFBFBD>€<EFBFBD>霑帛<EFBFBD>隗よオ狗ォ吝ァ蜴<EFBFBD>シ梧潔荳句シ€蜈ウ<EFBFBD>悟キィ螟ァ逧<EFBFBD><EFBFBD>諱ッ謚募スア蟆<EFBFBD>攝譬<EFBFBD>ア慕コ蜃コ譚<EFBFBD>檎恚譚霑吝ーア譏ッ鬘カ遒嶺ココ逧<EFBFBD>怙扈亥悉蜷台コ<EFBFBD>€<EFBFBD><EFBFBD>ソ<EFBFBD>ュ豼€蜉ィ襍キ譚<EFBFBD>御ス<EFBFBD>ソ俶怏荳€荳ェ逍鷹琉豐譛芽ァ蜀ウ<EFBFBD>カ遒嶺ココ譏ッ諤惹ケ域伽蛻ー霑吩クェ蝮先<EFBFBD><EFBFBD><EFBFBD><EFBFBD>髓サ霑帶而蛻カ螳<EFBFBD>悟シ€蟋狗ソサ髦<EFBFBD>律蠢暦シ梧怙扈亥セ怜芦莠<EFBFBD>ュ疲茨シ壻サ紋サャ蝨ィ貍ォ髟ソ逧<EFBFBD>怦荳ュ<EFBFBD>檎ゥキ蟆ス莠<EFBFBD>園譛臥噪蜿ッ閭ス諤ァ<EFBFBD>梧滑螂ケ逧<EFBFBD><EFBFBD>驛ィ隗<EFBFBD>台サ主エ蛻ー蟆セ逵倶コ<EFBFBD>€驕搾シ檎サ井コ取伽蛻ー莠<EFBFBD>ケ譛€€逵シ螟コ逶ョ逧<EFBFBD>ぅ荳€蛻サ縲<EFBFBD>
迴井ケ仙€夐擒蝨ィ荵<EFBFBD>正逧<EFBFBD>€€驥鯉シ悟ワ荳€蜿ェ貂ゥ鬘コ逧<EFBFBD>賢蜥ェ縲や€懷尚~窶晉処荵千噪謇区惻蜩堺コ<EFBFBD>シ梧弍荳€荳ェ豐<EFBFBD>ウィ逧<EFBFBD>捷遐<EFBFBD>シ檎処荵占<EFBFBD>蟾ア蠢<EFBFBD>蠕域ク<EFBFBD>夊ソ吩クェ譏ッ隹噪逕オ隸昴€ゆケ<EFBFBD>正逵倶ケヲ逧<EFBFBD>愍逹帷棗莠<EFBFBD>€逵シ迴井ケ千噪謇区惻<EFBFBD>悟書邇ー霑吩クェ蜿キ遐セ育<EFBFBD>謔峨€€懈磁蜷ァ<EFBFBD>梧弍螂ケ蜷ァ縲や€昜ケ<EFBFBD>正謚頑焔謖<EFBFBD>シク蛻ー迴井ケ千噪髱蜑搾シ檎処荵占スサ霓サ蝨ー闊比コ<EFBFBD><EFBFBD><EFBFBD>御ケ<EFBFBD>正逕ィ霑呎<EFBFBD>ケ謇区欠鄙サ蛻ー莠<EFBFBD>ケヲ逧<EFBFBD>ク倶ク€鬘オ縲や€懷魔<EFBFBD>€惹ケ井コ<EFBFBD>シ溪€晉処荵先磁騾壻コ<EFBFBD>鳩隸晢シ御ケ<EFBFBD>正蟇ケ雍晄級蜥檎処荵千噪蜈ウ邉サ蟷カ荳肴Φ螟夊ソ<EFBFBD>琉莉€荵茨シ悟ケ蜿ェ譏ッ荳€荳ェ菫螂牙所譌カ陦御ケ千噪荳紋ソ嶺ケ倶ココ縲や€懈Φ謌台コ<EFBFBD>弍蜷暦シ溪€昜ケ<EFBFBD>正鄙サ鬘オ逧<EFBFBD>焔謖<EFBFBD>蛛應ス擾シ御セァ逶ョ逵狗捩迴井ケ舌€€懈Φ隶ゥ謌大ソオ扈募哨莉譏ッ蜷暦シ悟逃<EFBFBD>ス逧<EFBFBD>€€昜ケ<EFBFBD>正謐丈ス冗処荵千噪閻ョ蟆<EFBFBD>処荵千噪隗<EFBFBD>コソ霓ャ霑<EFBFBD><EFBFBD>御ス主エ蜷サ莠<EFBFBD>ク句悉縲ら処荵先<EFBFBD>蠢呎撃荳顔鳩隸晢シ碁怫諠雁慍謇ソ蜿礼捩霑吩クェ遯ヲょ<EFBFBD><EFBFBD>製縲や€懈撃莠<EFBFBD>鳩隸晏ケ閧ッ螳壼セ育函豌泌制<EFBFBD>梧遠蝗槫悉蜷ァ縲や€昜ケ<EFBFBD>正隗牙セ苓ソ吩ク区憶蟷ウ莠<EFBFBD>シ御コ取弍扈ァ扈ュ逵狗捩荵ヲ<EFBFBD>御セァ逶ョ逵狗捩迴井ケ先遠蝗槫悉縲ら処荵蝉クコ莠<EFBFBD>自鬣ー<EFBFBD>悟宵螂ス隸エ閾ェ蟾ア蠢オ霑<EFBFBD><EFBFBD>コ蜿貅懶シ梧弍謇区惻蜃コ髣ョ鬚倅コ<EFBFBD>€€懃処荵撰シ瑚ー遠譚<EFBFBD>鳩隸晏賦<EFBFBD>€昜ケ<EFBFBD>正逧<EFBFBD>ー髻ウ荳榊粋譌カ螳懃噪蜩崎オキ縲ら処荵千棯莠<EFBFBD><EFBFBD>正荳€逵シ<EFBFBD>悟ソ<EFBFBD>劒蝨ー隗驥顔捩<EFBFBD>瑚ョゥ閾ェ蟾ア蜥御ケ<EFBFBD>正蜷ャ襍キ譚蜿ェ譏ッ蜊慕コッ逧<EFBFBD>惠蜈ャ蟇馴閨雁ゥ縲や€懈イ<EFBFBD>梧弍雍晄級<EFBFBD><EFBFBD><EFBFBD>ウィ逧<EFBFBD>€晉サ捺棡雜願ァ驥願カ贋ケア<EFBFBD>檎処荵仙宵螂ス蜩<EFBFBD>ェ礼捩雍晄級闕芽拷謖ゆコ<EFBFBD>鳩隸昴€€懈遠螳御コ<EFBFBD>シ溪€€懈遠螳御コ<EFBFBD>€€昜ケ<EFBFBD>正鄙サ霄ォ謚顔処荵先潔蛟抵シ檎セ守岼髫皮捩郤ッ谺イ逧<EFBFBD>荳晉愍髟懃恚逹€迴井ケ撰シ梧キア驍<EFBFBD>噪逵シ逵ク隶ゥ迴井ケ仙キョ轤ケ蠢倩ョー蜻シ蜷ク縲らΟ諠<EFBFBD>噪豺ア蜷サ<EFBFBD>瑚スサ譟皮噪謚壽尊<EFBFBD>瑚ョゥ迴井ケ仙書蜃コ莠<EFBFBD>ケウ譌カ荳堺シ壼書蜃コ逧<EFBFBD>ー髻ウ縲りソ吩ク狗処迚ケ逅ウ莠<EFBFBD>€ら処荵占ココ蝨ィ荵<EFBFBD>正逧<EFBFBD>€€驥檎恚逹€雍晄級逧<EFBFBD>峩謦ュ<EFBFBD>御ケ<EFBFBD>正蜿育ソサ蛻ー莠<EFBFBD><EFBFBD>蛻夂恚蛻ー逧<EFBFBD>慍譁ケ縲や€懷尚~窶昜ケ<EFBFBD>正逧<EFBFBD>焔譛コ蜩堺コ<EFBFBD>シ御ス主エ荳€逵具シ梧弍雍晄級縲ゆケ<EFBFBD>正鮟倬サ伜慍謗襍キ逕オ隸晢シ梧イ譛臥恚蛻ー迴井ケ千噪逶ョ蜈臥棗蜷大ケ騾怜シ<EFBFBD>ソ<EFBFBD>エ晄級荵句錘<EFBFBD>御ス主エ逵玖ァ<EFBFBD>閼ク諤ィ豌皮噪迴井ケ舌€りスサ隨醍捩逧<EFBFBD><EFBFBD><EFBFBD>梧初謳鍋捩迴井ケ千噪閼ク<EFBFBD>悟シ€蟋句帥螳オ螟懊€ら堪遘大勘迚ゥ荵矩龍譏ッ荳肴弍荵滓怏鬟溽黄體セ蜻<EFBFBD><EFBFBD>
<EFBFBD> 螟懷キイ蜈荳画峩<EFBFBD>悟唆隗<EFBFBD>ぅ譎壼ー丞ァ千噪髣コ謌ソ荳ュ萓晄立莠ョ逹€蠕ョ蠕ョ轣ッ轣ォ<EFBFBD>瑚凶襍ー霑醍サ<EFBFBD><EFBFBD>瑚ソ倬嚼髫占<EFBFBD>蜷ャ隗ウ蟄宣亮謌ソ髣エ逧<EFBFBD>自髣ケ螢ー縲や€懷ー丞ァ撰シ瑚辞隕<EFBFBD><EFBFBD>蟄蝉コ<EFBFBD>ス樞€晏宵蜷ャ隗<EFBFBD>蟋大ィ倅ク咲衍諤守噪<EFBFBD>梧悽蜴句セ礼サ<EFBFBD><EFBFBD>噪螢ー髻ウ遞咲ィ榊ァ莠<EFBFBD>コ幄ョク<EFBFBD>御ス<EFBFBD>ぅ雍<EFBFBD>ー荳ュ譏取仞蟶ヲ逹€<EFBFBD><EFBFBD>噪蟐壽э縲や€懆ーココ謌丞シ<EFBFBD><EFBFBD><EFBFBD>シ梧悽蟆丞ァ仙宵譏ッ蝨ィ荳磯<EFBFBD>閧夊<EFBFBD>遨カ遶滓怏譌<EFBFBD>陲ォ驍莠帑クェ蜷<EFBFBD>滓酎螳ス莠<EFBFBD>€€晄劒蟆丞ァ蝉ク€霎ケ逕ィ雖ゥ阯穂シシ逧<EFBFBD>焔蝨ィ蝌牙ァ大ィ倡噪霄ォ蟄蝉ク頑サ大勘<EFBFBD>御ク€霎ケ菴主ー蠕ョ諱シ蝨ー迢<EFBFBD><EFBFBD>隸エ驕難シ娯€懷惠閭荵ア險€隸ュ<EFBFBD>御サ皮サ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>€<EFBFBD>蟋大ィ伜成隗ソ呎裏襍冶ィ€隸ュ<EFBFBD>梧ュ諠ウ逶エ襍キ霄ォ蟄占ッエ莠帑サ€荵茨シ悟唆諢溯ァ牙芦驍荳榊ョ牙<EFBFBD><EFBFBD>焔遶溷セ<EFBFBD>峩蜷台ク区サ大悉<EFBFBD>檎峩謇鷹ぅ隕多逧<EFBFBD>慍譁ケ縲や€懷ー丞ァ撰シ€<EFBFBD>蟋大ィ倩ソ槫ソ吩シク謇矩仆諡ヲ<EFBFBD>悟宵蛻壽鞄菴城ぅ蜿ェ菴ソ蝮冗噪謇具シ悟ーア逵玖ァー丞ァ宣刋蛻ー莠<EFBFBD>ケ閠ウ蝙よ浴<EFBFBD>碁ぅ逡辜ュ逧<EFBFBD>シサ諱ッ蜷ケ蠕怜ケ蠢<EFBFBD>樒エ贋ケア縲よ劒蟆丞ァ千惘逹€逵シ<EFBFBD>悟惠閾ェ螳カ蟆丞ゥ<EFBFBD>€ウ霎ケ蜷先ー泌ヲょ<EFBFBD>:窶憺ぅ雍晄級譏ッ荳肴弍螟懷應ク惹ス<EFBFBD>霑吩ケ亥<EFBFBD><EFBFBD>€蝨ー<EFBFBD>悟留<EFBFBD>€<EFBFBD>蟋大ィ倬僚蜃コ莠<EFBFBD>ぅ莠帑コ帷せ轤ケ逧<EFBFBD><EFBFBD>蜻ウ<EFBFBD>梧苑蜩ァ荳€隨托シ碁:窶憺ぅ譏ッ蝨ィ郛冶<EFBFBD><EFBFBD><EFBFBD>蝠ヲ<EFBFBD>悟ー丞ァ蝉ス<EFBFBD>窶ヲ窶ヲ遶溷帥霑呎イ逕ア譚<EFBFBD><EFBFBD>縲や€晄劒蟆丞ァ宣僚險€<EFBFBD>檎ァ€逵我ク€謖托シ御スッ諤帝:窶懷ス菴<EFBFBD>荳ェ螂エ蟀<EFBFBD>檎ォ滓覆隨題ッ晄悽蟆丞ァ撰シ€晢シ瑚ッュ鄂<EFBFBD>梧倦蠑€<EFBFBD>ぅ遒堺コ狗噪蟆乗焔<EFBFBD>梧リ襍キ莠<EFBFBD>€螢ー菴主他縲<EFBFBD>
蝨ィ霑吩クェ蜿肴匱讓ェ陦檎噪蟷エ莉<EFBFBD>悟宵譛芽エ晄級逧<EFBFBD>峩謦ュ扈吩コ<EFBFBD><EFBFBD>諢滓€ァ蜥檎炊諤ァ逧<EFBFBD>縲ょケ逧<EFBFBD>峩謦ュ螻慕鴫蜃コ逧<EFBFBD>シ梧弍荳€荳ェ莠コ郤ッ邊ケ謇€蜈キ譛臥噪濶ッ螂ス蜩エィ<EFBFBD>瑚ッエ荳堺ク贋サ€荵亥<EFBFBD><EFBFBD>音蛻ォ遯<EFBFBD><EFBFBD>慍譁ケ<EFBFBD>梧紛蝨コ逶エ謦ュ蜊<EFBFBD><EFBFBD>檮豢ス螂ケ蟄ヲ荵<EFBFBD>豁梧峇逧<EFBFBD>惻譎コ譏ッ邊セ螯咏噪<EFBFBD>檎悄隸壼柱豁逶エ逧<EFBFBD>惷邏<EFBFBD>扈吩ココ荳€遘肴裏豕墓磁隗ヲ逧<EFBFBD>ォ倩エオ諢滂シ悟ーア螂ス蜒乗ーク霑懈鞄荳堺ス冗噪髣ェ莠ョ逧<EFBFBD>螟ェ<EFBFBD>御ク€荳ェ蠖ャ蠖ャ譛臥シ逧<EFBFBD>ココ逕ィ豁悟哩扈呵ァゆシ怜クヲ譚€荳コ邊セ閾エ逧<EFBFBD>セ守噪諢溷女<EFBFBD><EFBFBD>荳咲ヲ€€逍台ク雁ク晉噪螟ゥ諢乗弍蜷ヲ蟇ケ謌大ェ霑<EFBFBD><EFBFBD>貅コ<EFBFBD>瑚ョゥ謌台ココ逕滉クュ隶<EFBFBD>芦螯よュ荳肴愎蜥梧裏莉キ逧<EFBFBD><EFBFBD>鬲ゑシ悟<EFBFBD>€蜿ッ辷ア荳守セ主ス縲よ<EFBFBD>荳榊セ嶺ク榊<EFBFBD><EFBFBD>エ晄栫譏滂シ悟次譚莉紋サャ譌ゥ蟾イ霑ス髫丞ヲよュ莨溷ァ逧<EFBFBD>コ狗黄<EFBFBD>梧Φ蠢<EFBFBD>サ紋サャ逧<EFBFBD>刀陦御ケ滉ク€螳壼セ亥ス縲<EFBFBD>
<EFBFBD>鮑溷アア譏主<EFBFBD>螳樊弍螟エ蜿キ雍晄栫譏滂シ御クコ莠<EFBFBD><EFBFBD>謨ャ雍晄級<EFBFBD>御サ門惠闡怜錐貍ォ逕サ縲贋ク<EFBFBD>セ咏匠縲倶クュ<EFBFBD>瑚ョセ隶<EFBFBD>オ帑コ壻ココ譛亥怕荵句<EFBFBD>荳コ迪ゥ迪ゥ<EFBFBD><EFBFBD>諢滓擂貅占<EFBFBD>蜷第劒逧<EFBFBD><EFBFBD>蛻呈<EFBFBD>迪懶シ会シ御サ蜿企セ滉サ吩ココ謇鍋<EFBFBD>譛井コョ遲画谿オ縲や贈莉莠コ諠区<EFBFBD><EFBFBD><EFBFBD>悟惠蜊ウ蟆<EFBFBD>ゥソ騾乗怦莠ョ逧<EFBFBD>椪髣エ<EFBFBD>瑚エ晄級莉主ェ遨コ逵句芦蝌臥霄イ蝨ィ謌ソ髣エ蜷<EFBFBD>ず鮑<EFBFBD>悟ッシ閾エ蛻<EFBFBD>橸シ梧怙扈域億莨<EFBFBD><EFBFBD>縲や造驍謎クス蜷帛ー丞ァ蝉サ取悴蝨ィ莉サ菴墓ュ悟罰豈碑オ幄オ<EFBFBD>エ晄級縲や促螟ァ螟壽焚蜷ォ譛芽i陋狗區逧<EFBFBD>溽黄驛ス蟇ケ雍晄級霑<EFBFBD><EFBFBD><EFBFBD>逕溽央迥企勁螟悶€や側雍晄級蠕亥ョウ諤戊ァ芦陷倩屁<EFBFBD>ケ荳榊ク梧悍蝗<EFBFBD>荳コ閾ェ蟾ア逧<EFBFBD>ソオ螟エ<EFBFBD>悟ッシ閾エ陷倩屁莉取ュ豸亥ア蝨ィ螳<EFBFBD>ョ吩クュ縲や則逕ア莠手エ晄級扈<EFBFBD><EFBFBD>蝨コ謇€<EFBFBD>蜉帶弍蜊<EFBFBD>€搾シ梧園莉雍晄級豐譛蛾そ螻<EFBFBD>€や即蝗<EFBFBD>荳コ遐エ蝮丈コ<EFBFBD>エ晄級蜈カ荳ュ荳€荳ェ菴乗園逧<EFBFBD>ゥ闃ア譚ソ<EFBFBD>檎ァ第級雜<EFBFBD>キア莠戊ォ霑ォ蛛懷キ縲や息蜈ウ莠斬s逧<EFBFBD>コ悟<EFBFBD><EFBFBD>碁ぅ莠幃<EFBFBD>譏ッ雍晄級逧<EFBFBD>ー丞捷縲や捉雍晄級蠕亥万谺謇鍋セス豈帷帥<EFBFBD>ケ隸エ驍譏ッ蜿ー鬟主ゥ譛€菴ウ逧<EFBFBD>クェ莠コ霑仙勘縲や束雍晄級蜚ッ荳€€螟ア雍<EFBFBD>梧弍蝨ィ螂ケ隸募崟謇セ蜃コ閾ェ蟾ア逧<EFBFBD>シア轤ケ縲<EFBFBD>
窶應ス<EFBFBD>諡ソ菴<EFBFBD><EFBFBD><EFBFBD>鬲ょ柱謌台コ窶ヲ...窶昶€<EFBFBD>諢乗<EFBFBD>諢擾シ€<EFBFBD>隸晁ソ俶イ隸エ螳鯉シ悟ーア陲ォ蝌臥謇捺妙莠<EFBFBD>€ケ諤惹ケ井ク肴潔螂苓キッ譚<EFBFBD>滓ュ蟶ク諠<EFBFBD><EFBFBD>荳具シ御ク榊コ碑ッ謌台ク肴妙蝨ー隸ア諠大<EFBFBD>辟カ<EFBFBD>梧怙蜷取燕閧ッ蜥梧<EFBFBD>轣オ鬲ら噪蜷暦シ滓€惹ケ郁ソ吩クェ蟆丞ァ大ィ倅ク€荳頑擂蟆ア貊閼ク蜈エ螂玖ソォ荳榊所蠕<EFBFBD>慍諠ウ隕柱謌台コ轣オ鬲ゑシ滉ク崎ソ<EFBFBD>ソ吩コ幃<EFBFBD>譏ッ蟆城琉鬚假シ梧<EFBFBD>菴應クコ荳€荳ェ豁サ逾橸シ瑚ヲ蠕怜所譌カ螟<EFBFBD>炊霑吩コ帷ェ書莠倶サカ莉蜿雁コ泌ッケ霑咏アサ螂<EFBFBD>€ェ逧<EFBFBD>莠コ縲よ<EFBFBD><EFBFBD>菴懷ーア譏ッ謗蜿嶺ココ逧<EFBFBD>小蜚<EFBFBD>悟悉蜥御ココ莠轣オ鬲ゅ€ゆク崎ソ<EFBFBD>ク榊ワ莠コ莉ャ諠ウ逧<EFBFBD>ぅ譬キ<EFBFBD>御ク肴弍謌大ィ<EFBFBD>€シ蛻ゥ隸ア諠ウ隕コ襍ー謌台サャ逧<EFBFBD><EFBFBD>鬲ゑシ瑚€梧弍莠コ邀サ閾ェ蟾ア諠ウ隕柱謌台コ<EFBFBD>悟ス鍋騾比クュ莨夐蛻ー莠帛ソ<EFBFBD>ソ嶺ク榊撓逧<EFBFBD>ココ<EFBFBD><EFBFBD><EFBFBD>莉カ螟ェ鬮倡噪<EFBFBD>瑚ソ呎慮謌大ーア蜒丈クェ蝠<EFBFBD>ココ荳€譬キ<EFBFBD>瑚エケ蟆ス蜚<EFBFBD><EFBFBD><EFBFBD>悟柱謌台サャ逋セ闊ャ蜻ィ譌九€€壼クク豈丈クェ莠コ驛ス莨夊€<EFBFBD>剔荳雁セ磯柄譌カ髣エ<EFBFBD>御サ雁ゥ霑吩クェ螂ウ蟄ゥ霑俶弍隨ャ荳€荳ェ荳€蟆ア諠ウ莠轣オ鬲ら噪縲や€憺ぅ菴<EFBFBD>響菴<EFBFBD><EFBFBD><EFBFBD>鬲ょ柱謌台コ€荵茨シ溪€<EFBFBD>郛楢ソ<EFBFBD>樊擂<EFBFBD>悟ケウ螟堺コ<EFBFBD>ク句ソ<EFBFBD><EFBFBD><EFBFBD>蜀キ蝨ー髣ョ螂ケ縲や€應ス<EFBFBD>遲画<EFBFBD>€荳句逃縲や€<EFBFBD>辟カ霓ャ霄ォ霍題ソ帛ア句ュ宣<EFBFBD>悟屓譚譌カ遶溽遨ソ莠<EFBFBD>€陲ュ逋ス濶イ逧<EFBFBD>ゥ夂コア<EFBFBD>悟惠謌鷹擇蜑崎スサ霓サ蝨ー鞫<EFBFBD>勘逹€郤ア陬呻シ悟<EFBFBD>謌醍莫逕懷慍隨醍捩<EFBFBD>€<EFBFBD>螂ス逵句雛<EFBFBD>€<EFBFBD><EFBFBD>シ娯€懷セ域シゆコョ縲や€昜ケ溯ョク譏ッ陲ォ蝌臥諠願乙蛻ー<EFBFBD>檎援蛻サ蜷取<EFBFBD>謇榊書邇ー閾ェ蟾ア謚雁クス蟄先遭謗我コ<EFBFBD>シ碁愆蜃コ莠<EFBFBD><EFBFBD><EFBFBD>譛芽€濶イ逧<EFBFBD>縲よэ隸<EFBFBD>芦閾ェ蟾ア螟ア諤錘謌第€蠢呎滑蟶ス蟄先斡莠<EFBFBD>オキ譚<EFBFBD>梧イ諠ウ蛻ー蝌臥蜊エ荳雁燕蛻カ豁<EFBFBD><EFBFBD><EFBFBD>檎卸逹€謌醍噪謇狗ャ大澄蜷溷慍隸エ<EFBFBD>€<EFBFBD>諠ウ莠<EFBFBD>擅莉カ譏ッ隕<EFBFBD>髯ェ謌台ク€螟ゥ縲や€<EFBFBD>辟カ諠ウ蜴サ謨吝<EFBFBD>ゑシ梧<EFBFBD>€謚ャ謇句捉蝗エ蟆ア蜿倅コ<EFBFBD><EFBFBD><EFBFBD>螟ァ逧<EFBFBD>蕗蝣る<EFBFBD>悟宵譛画<EFBFBD>莉ャ荳荳ェ縲よ蕗蝣よシ鬘カ譛臥セ鮑ス蟄仙惠驍蜆ソ謇題<EFBFBD>€<EFBFBD>悟惠謌台サャ螟エ鬘カ逶俶雷縲よイ譛臥鴬蟶井ケ滓イ譛我コイ譛句ス蜿具シ悟ー大ウ閾ェ鬘セ閾ェ蝨ー蠢オ襍キ莠<EFBFBD>ゥ夊ッ阪€りッエ驕捺怙蜷趣シ悟ケ諡臥捩謌醍噪謇句ー<EFBFBD>€譫壽<EFBFBD><EFBFBD>€堤サ吩コ<EFBFBD><EFBFBD><EFBFBD>€<EFBFBD>蜈育函<EFBFBD><EFBFBD><EFBFBD><EFBFBD>驛ス蜃<EFBFBD><EFBFBD>ス莠<EFBFBD>シ梧園莉<EFBFBD>諢ソ諢丞ィカ謌大雛<EFBFBD>€<EFBFBD>辟カ逵ィ逹€逵シ逵狗捩螂ケ<EFBFBD>碁柄髟ソ逧<EFBFBD>抬豈帑ク頑オキ檎捩豺<EFBFBD>蜈峨€€ゥ菴ソ蟆丞ァ蝉ス<EFBFBD>髣ケ螟滉コ<EFBFBD><EFBFBD>€<EFBFBD>蜿ケ莠<EFBFBD>哨豌費シ梧燥鞫<EFBFBD>エ隸エ縲や€應サ€荵亥<EFBFBD><EFBFBD>滉ス<EFBFBD>譌ゥ蟆ア隶蜃コ謌第擂莠<EFBFBD>€€<EFBFBD>辟カ荳€蝎伜亢<EFBFBD>梧怏莠帷函豌斐€ゆク€蜿檎ソ<EFBFBD><EFBFBD>莉主ケ霄ォ蜷惹シク莠<EFBFBD><EFBFBD><EFBFBD>碁サ題牡逧<EFBFBD>柄蜿台ケ溷序謌蝉コ<EFBFBD><EFBFBD><EFBFBD>濶イ縲ょ<EFBFBD>辟カ莨ク謇句<EFBFBD>滑謌呈欠諡ソ蝗樊擂<EFBFBD>御ス<EFBFBD><EFBFBD>蜊エ蠕€蜷朱€€<EFBFBD>€<EFBFBD>梧滑螳<EFBFBD>噺莠<EFBFBD>オキ譚<EFBFBD><EFBFBD>蟾ア蜿域響蜃コ莠<EFBFBD>嘗螟紋ク€譫壽<EFBFBD><EFBFBD>€€懈アょゥ夂噪隸晢シ梧<EFBFBD><EFBFBD>ス鍋蠕玲<EFBFBD>閾ェ蟾ア騾<EFBFBD>蝠ヲ縲や€<EFBFBD>
<EFBFBD>霑咎<EFBFBD><EFBFBD>荳ェ閠立逧<EFBFBD>刀逧ョ譽壼ア倶ケ句厄シ悟宵蜑ゥ荳狗イ礼ウ咏噪蠅吩ス薙€<EFBFBD>譛牙ス灘ケエ逧<EFBFBD>恣陌ケ轣ッ蝪費シ悟<EFBFBD>譛陰-SOUL譬<EFBFBD>ソ暦シ悟<EFBFBD>譛牙<EFBFBD>莉冶ソ槫惠荳€襍キ逧<EFBFBD>サコ遲台コ<EFBFBD>€ゆク€<EFBFBD>ス灘ケエ逧<EFBFBD>略閠€<EFBFBD>ク榊榊ュ伜惠<EFBFBD>悟宵蜑ゥ荳矩刀逧ョ譽壼ア倶ク頑桝鬩ウ隍ェ濶イ逧<EFBFBD>ウ蟄仙屬莨吝ョ<EFBFBD>逕サ縲りエ晄栫譏滄€剰ソ<EFBFBD>崟豌泌惠髣ェ髣ェ蜿大<EFBFBD><EFBFBD>梧怦莠ョ荵溷合蛻ー莠<EFBFBD>ゥコ荳ュ<EFBFBD>悟屏閠悟懈劒蟷カ荳肴仞蠕鈴サ第囓縲よ<EFBFBD>萓晉ィ€閭ス霎ィ蛻ォ蜃コ譫晄ア溷ァ蜴ヲ逧<EFBFBD>ッ丈ク€荳ェ驛ィ蛻<EFBFBD>シ悟頭蜆ソ譖セ譏ッ螟懆ー井シ壻ク頑沖蝨ー譛コ蛛懃蕗逧<EFBFBD>慍譁ケ<EFBFBD>悟頭蜆ソ譖セ譏ッ螟ァ髣ィ<EFBFBD>悟頭蜆ソ譖セ謾セ逹€陞コ陋ウ邊牙袖阮ッ迚<EFBFBD>€<EFBFBD>€€蝗槫ソ<EFBFBD>€€蠢オ<EFBFBD>悟ソス辟カ逵玖ァ€荳ェ蟄迢ャ逧<EFBFBD>コォ蠖ア<EFBFBD>瑚ソ吩クェ霄ォ蠖ア霑溽桝莠<EFBFBD>€荳具シ悟酔譌カ謌台ケ滓リ蜿ォ莠<EFBFBD><EFBFBD>縲や€<EFBFBD>辟カ蟆丞ァ撰シ€€<EFBFBD><EFBFBD>€ェ菴<EFBFBD>諤惹ケ郁ソ倩ョ蠕怜<EFBFBD>謌托シ梧<EFBFBD>螳悟<EFBFBD>蜿倅コ<EFBFBD>€€ョ螳槫ケ逧<EFBFBD>搨譏濶ウ荳ス蟾イ扈乗カ磯€晢シ檎閠悟ケ驍髫セ莉€陦ィ逧<EFBFBD>ォッ蠎<EFBFBD>克荳ス<EFBFBD>ケ驍髫セ莉€陦ィ逧<EFBFBD>ソキ莠コ螯ゥ蟐壼唆萓晄立蠖灘ケエ縲よ園譛芽ソ吩コ帷セ守噪隸ア諠托シ御サ主燕謌鷹<EFBFBD>ソ<EFBFBD>シ瑚€<EFBFBD>蜑肴園豐譛芽ァソ<EFBFBD>噪譏ッ螂ケ驍€蟇ケ逵シ逹幢シ御サ主燕螂ケ逧<EFBFBD>曙逵ク諤サ髣ェ逹€蛯イ豌費シ悟ヲゆサ雁唆髣ェ逹€<EFBFBD>驟ク讌夂噪蜈峨€<EFBFBD>莉ャ蝮仙惠髯<EFBFBD>ソ醍噪荳€<EFBFBD>髟ソ讀<EFBFBD>ク奇シ梧<EFBFBD>隸エ驕難シ壺€壼ー大ケエ螯よオコ題握霑<EFBFBD><EFBFBD><EFBFBD>辟カ蟆丞ァ撰シ御ス<EFBFBD>譌カ蟶ク蝗槫芦霑咎蜷暦シ溪€€<EFBFBD>€逶エ豐譛牙屓譚<EFBFBD>€€€<EFBFBD>荵滓イ譛峨€€晄怦莠ョ蠑€蟋倶ク雁合<EFBFBD><EFBFBD>貂ク螟懃ゥコ<EFBFBD><EFBFBD>閼第オキ荳ュ蜃コ邇ー莠<EFBFBD>エ晄級豕ィ隗<EFBFBD>捩逋ス濶イ譛井コョ逧<EFBFBD><EFBFBD>撕逶ョ蜈峨€<EFBFBD>辟カ蟆丞ァ千サ井コ取遠遐エ莠<EFBFBD><EFBFBD>莉ャ荵矩龍逧<EFBFBD>イ蛾サ倥€€<EFBFBD>€逶エ蝨ィ蟶梧悍譛我ク€螟ゥ閭ス蝗樊擂逵狗恚<EFBFBD>悟庄譏ッ蜷<EFBFBD>ァ榊推譬キ逧<EFBFBD>ュ蜀オ菴ソ謌台ク崎<EFBFBD>蝗樊擂縲や€晄怦蜈牙柱螂ケ逧<EFBFBD>ウェ迴<EFBFBD>陞榊粋蝨ィ荳€襍キ<EFBFBD>ケ豐譛画э隸<EFBFBD>芦謌大キイ扈丞ッ溯ァ会シ梧Φ謚大宛菴剰<EFBFBD>蟾ア逧<EFBFBD>ュ諢滂シ御サ蟷ウ髱咏噪隸ュ豌碑ッエ驕難シ娯€<EFBFBD>譌カ蟶ク諠ウ蛻ー菴<EFBFBD>縲や€€懃悄逧<EFBFBD>シ溪€€懃音蛻ォ譏ッ霑台コ帶律蟄撰シ梧<EFBFBD>譖エ蟶ク諠ウ蛻ー菴<EFBFBD>縲り區辟カ謌醍函豢サ荳ュ譛我ク€谿オ蠕磯柄逧<EFBFBD>臆闍ヲ譌蟄撰シ御ス<EFBFBD>弍謌台ク堺シ壼悉諠ウ縲り<EFBFBD>莉取<EFBFBD>荳ェ莠コ逧<EFBFBD>ュ蜀オ荳榊ヲよэ蜷趣シ瑚ソ吩コ帛哨蠢<EFBFBD>ーア荳榊セ嶺ク榊惠謌大ソ<EFBFBD>エ蜊<EFBFBD>€蟶ュ荵句慍縲や€€應ス<EFBFBD>豌ク霑懷惠謌醍噪蠢<EFBFBD>縲や€<EFBFBD>遲秘縲よ<EFBFBD>莉ャ蜿井ク€豐蛾サ俶裏險€<EFBFBD>檎峩蛻ー螂ケ謇鍋<EFBFBD>エ豐牙ッゅ€€<EFBFBD>譛画Φ蛻ー<EFBFBD>€<EFBFBD>辟カ隸エ驕難シ娯€<EFBFBD>蛻ー霑咎蜥梧腐蝨ー蜻雁悪<EFBFBD>檎ォ溽蜿域弍蜥御ス<EFBFBD>蜻雁悪<EFBFBD><EFBFBD>諢溷芦蠕磯ォ伜<EFBFBD>縲や€€<EFBFBD>辟カ蟆丞ァ撰シ悟柱謌大処荳€<EFBFBD><EFBFBD>御ス<EFBFBD>鬮伜<EFBFBD>蜷暦シ溷庄譏ッ蟇ケ謌第擂隸エ<EFBFBD>御ク頑ャ<EFBFBD>悪譌カ逧<EFBFBD>ご莨蜥檎李闍ヲ豌ク霑懷慍關ヲ扈募惠謌醍噪隶ー蠢<EFBFBD>ケ倶クュ縲や€€懷庄譏ッ<EFBFBD>御ス<EFBFBD>荳頑ャ荳肴弍蟇ケ謌題ッエ霑<EFBFBD>シ娯€<EFBFBD>辟カ遲秘<EFBFBD>€應ス<EFBFBD><EFBFBD>蝌臥菫昜ス台ス<EFBFBD>縲ゆス<EFBFBD>荳頑ャ閭ス霑吩ケ亥ッケ謌題ッエ<EFBFBD>御ス<EFBFBD>邇ー蝨ィ荵溯<EFBFBD>豈ォ荳咲柑雎ォ蝨ー霑呎<EFBFBD>キ蟇ケ謌題ッエ<EFBFBD>御ス<EFBFBD><EFBFBD>蟷カ荳肴弍莉€荵亥悒蝌臥縲ょ壼ケエ譚<EFBFBD>李闍ヲ隶ゥ謌大女蟆ス謚倡<EFBFBD>御ス<EFBFBD>弍蟶梧悍菴<EFBFBD>蜒丈サ主燕荳€譬キ菴楢ー<EFBFBD><EFBFBD><EFBFBD>悟埋蠕<EFBFBD><EFBFBD><EFBFBD>悟ケカ荳泌相隸画<EFBFBD><EFBFBD><EFBFBD>菫ゥ莉肴弍譛句暑縲や€€<EFBFBD>菫ゥ莉肴弍譛句暑縲や€<EFBFBD>隸エ逹€遶呵オキ霄ォ<EFBFBD>悟ケカ菫ッ霄ォ謇カ螂ケ莉朱柄讀<EFBFBD>ク顔ォ吩コ<EFBFBD>オキ譚縲や€<EFBFBD>莉ャ陌ス辟カ蛻<EFBFBD>ヲサ<EFBFBD>御ス<EFBFBD><EFBFBD><EFBFBD>э髟ソ蟄倥€€<EFBFBD>辟カ隸エ驕薙€<EFBFBD>謚雁ケ逧<EFBFBD>焔謠蝨ィ閾ェ蟾ア謇倶クュ<EFBFBD>御ク€蜷瑚オー蜃コ霑咏援蠎溷滂シ悟憺崟荵滓ュ€蟋区カ域淵縲ゆク€<EFBFBD>ケソ髦皮噪髱吝ッよイ画オク蝨ィ譛郁牡荵倶クュ<EFBFBD>御シシ荵主髄謌題ィ譏趣シ梧<EFBFBD>蜥悟ケ蟆<EFBFBD>ーク霑應ク€襍キ<EFBFBD>御ク榊<EFBFBD><EFBFBD>ヲサ縲<EFBFBD>

View File

@@ -1,906 +0,0 @@
[
{
"name": "印度",
"weight": 0.179369185
},
{
"weight": 0.116660088,
"name": "中华人民共和国"
},
{
"name": "尼日利亚",
"weight": 0.052104876
},
{
"weight": 0.04490831,
"name": "巴基斯坦"
},
{
"weight": 0.029767875,
"name": "印尼"
},
{
"weight": 0.02917347,
"name": "美国"
},
{
"name": "刚果民主共和国",
"weight": 0.026980482
},
{
"weight": 0.02653533,
"name": "埃塞俄比亚"
},
{
"name": "孟加拉国",
"weight": 0.022001723
},
{
"name": "巴西",
"weight": 0.020641351
},
{
"name": "埃及",
"weight": 0.019722924
},
{
"name": "菲律宾",
"weight": 0.017944256
},
{
"name": "墨西哥",
"weight": 0.015798468
},
{
"weight": 0.015156998,
"name": "坦桑尼亚"
},
{
"weight": 0.013686862,
"name": "乌干达"
},
{
"weight": 0.010405389,
"name": "俄罗斯"
},
{
"weight": 0.010217107,
"name": "苏丹"
},
{
"weight": 0.010079201,
"name": "越南"
},
{
"name": "阿富汗",
"weight": 0.009796745
},
{
"name": "伊朗",
"weight": 0.009789926
},
{
"name": "肯尼亚",
"weight": 0.009216044
},
{
"weight": 0.008870993,
"name": "安哥拉"
},
{
"name": "土耳其",
"weight": 0.008815318
},
{
"weight": 0.008267509,
"name": "莫桑比克"
},
{
"name": "南非",
"weight": 0.007826801
},
{
"weight": 0.00755071,
"name": "尼日尔"
},
{
"name": "伊拉克",
"weight": 0.007350484
},
{
"name": "喀麦隆",
"weight": 0.006786572
},
{
"weight": 0.006782117,
"name": "缅甸"
},
{
"name": "日本",
"weight": 0.006518972
},
{
"weight": 0.006384764,
"name": "加纳"
},
{
"weight": 0.006183538,
"name": "阿尔及利亚"
},
{
"weight": 0.006075416,
"name": "马里"
},
{
"name": "法国",
"weight": 0.00571344
},
{
"name": "英国",
"weight": 0.005662409
},
{
"name": "马达加斯加",
"weight": 0.00559132
},
{
"weight": 0.005562893,
"name": "也门"
},
{
"name": "哥伦比亚",
"weight": 0.005525953
},
{
"name": "布基纳法索",
"weight": 0.005378297
},
{
"name": "科特迪瓦",
"weight": 0.005352997
},
{
"name": "阿根廷",
"weight": 0.005171935
},
{
"name": "赞比亚",
"weight": 0.005147159
},
{
"name": "德国",
"weight": 0.005096501
},
{
"weight": 0.005067552,
"name": "泰国"
},
{
"name": "马拉维",
"weight": 0.005017242
},
{
"name": "乍得",
"weight": 0.004825619
},
{
"name": "摩洛哥",
"weight": 0.004571552
},
{
"weight": 0.004266592,
"name": "马来西亚"
},
{
"weight": 0.004130712,
"name": "南苏丹"
},
{
"name": "委内瑞拉",
"weight": 0.00410843
},
{
"weight": 0.003903682,
"name": "乌兹别克斯坦"
},
{
"weight": 0.003891083,
"name": "秘鲁"
},
{
"weight": 0.003854943,
"name": "尼泊尔"
},
{
"name": "沙特阿拉伯",
"weight": 0.003683713
},
{
"name": "塞内加尔",
"weight": 0.003671814
},
{
"name": "津巴布韦",
"weight": 0.003628572
},
{
"name": "意大利",
"weight": 0.003591173
},
{
"weight": 0.003564036,
"name": "贝宁"
},
{
"weight": 0.003318383,
"name": "索马里"
},
{
"name": "几内亚",
"weight": 0.003229938
},
{
"name": "韩国",
"weight": 0.00302709
},
{
"name": "危地马拉",
"weight": 0.002989448
},
{
"weight": 0.002933277,
"name": "西班牙"
},
{
"name": "布隆迪",
"weight": 0.002916273
},
{
"name": "乌克兰",
"weight": 0.002865519
},
{
"name": "叙利亚",
"weight": 0.002803866
},
{
"name": "加拿大",
"weight": 0.002769376
},
{
"name": "朝鲜",
"weight": 0.002663995
},
{
"name": "柬埔寨",
"weight": 0.002507218
},
{
"weight": 0.002459301,
"name": "卢旺达"
},
{
"weight": 0.002433661,
"name": "波兰"
},
{
"weight": 0.002264484,
"name": "澳大利亚"
},
{
"name": "斯里兰卡",
"weight": 0.002205474
},
{
"weight": 0.00217928,
"name": "哈萨克斯坦"
},
{
"name": "厄瓜多尔",
"weight": 0.002114416
},
{
"name": "塞拉利昂",
"weight": 0.002042686
},
{
"name": "海地",
"weight": 0.001815248
},
{
"name": "智利",
"weight": 0.001761297
},
{
"name": "多哥",
"weight": 0.001756614
},
{
"name": "约旦",
"weight": 0.001738363
},
{
"weight": 0.001716995,
"name": "玻利维亚"
},
{
"weight": 0.001432103,
"name": "巴布亚新几内亚"
},
{
"weight": 0.001424043,
"name": "塔吉克斯坦"
},
{
"name": "多米尼加",
"weight": 0.001376899
},
{
"name": "荷兰",
"weight": 0.001365722
},
{
"name": "罗马尼亚",
"weight": 0.001342703
},
{
"weight": 0.001340039,
"name": "台湾"
},
{
"name": "突尼斯",
"weight": 0.001327688
},
{
"name": "中非",
"weight": 0.001269639
},
{
"name": "洪都拉斯",
"weight": 0.001219191
},
{
"name": "刚果共和国",
"weight": 0.001209073
},
{
"weight": 0.001189154,
"name": "利比里亚"
},
{
"weight": 0.001150376,
"name": "以色列"
},
{
"weight": 0.001149654,
"name": "厄立特里亚"
},
{
"weight": 0.001119049,
"name": "老挝"
},
{
"name": "阿塞拜疆",
"weight": 0.001039837
},
{
"name": "利比亚",
"weight": 0.001029222
},
{
"name": "巴勒斯坦",
"weight": 0.000992651
},
{
"name": "吉尔吉斯斯坦",
"weight": 0.000957294
},
{
"weight": 0.000907425,
"name": "比利时"
},
{
"name": "瑞典",
"weight": 0.000890654
},
{
"name": "巴拉圭",
"weight": 0.00085764
},
{
"name": "毛里塔尼亚",
"weight": 0.000842302
},
{
"weight": 0.000830493,
"name": "古巴"
},
{
"name": "萨尔瓦多",
"weight": 0.000822881
},
{
"name": "尼加拉瓜",
"weight": 0.000782782
},
{
"weight": 0.000764766,
"name": "阿曼"
},
{
"name": "黎巴嫩",
"weight": 0.000751395
},
{
"name": "土库曼斯坦",
"weight": 0.000743841
},
{
"weight": 0.000680867,
"name": "阿联酋"
},
{
"weight": 0.000677997,
"name": "捷克"
},
{
"weight": 0.000643037,
"name": "白俄罗斯"
},
{
"weight": 0.000642255,
"name": "瑞士"
},
{
"name": "匈牙利",
"weight": 0.000612393
},
{
"name": "奥地利",
"weight": 0.000602473
},
{
"name": "希腊",
"weight": 0.000595922
},
{
"weight": 0.000592992,
"name": "葡萄牙"
},
{
"weight": 0.000566764,
"name": "科威特"
},
{
"weight": 0.000538867,
"name": "哥斯达黎加"
},
{
"name": "巴拿马",
"weight": 0.000513904
},
{
"name": "挪威",
"weight": 0.000466485
},
{
"name": "丹麦",
"weight": 0.000460789
},
{
"name": "爱尔兰",
"weight": 0.000455762
},
{
"name": "新西兰",
"weight": 0.000451486
},
{
"name": "纳米比亚",
"weight": 0.000450165
},
{
"name": "香港",
"weight": 0.000448826
},
{
"weight": 0.000441931,
"name": "冈比亚"
},
{
"weight": 0.000436542,
"name": "塞尔维亚"
},
{
"name": "芬兰",
"weight": 0.000417327
},
{
"weight": 0.00041658,
"name": "几内亚比绍"
},
{
"weight": 0.000410456,
"name": "保加利亚"
},
{
"weight": 0.000382945,
"name": "蒙古"
},
{
"name": "莱索托",
"weight": 0.00037228
},
{
"weight": 0.000361607,
"name": "新加坡"
},
{
"name": "斯洛伐克",
"weight": 0.000361482
},
{
"weight": 0.00035722,
"name": "加蓬"
},
{
"name": "博茨瓦纳",
"weight": 0.000348221
},
{
"weight": 0.000323338,
"name": "乌拉圭"
},
{
"name": "赤道几内亚",
"weight": 0.000318155
},
{
"name": "东帝汶",
"weight": 0.000316195
},
{
"name": "牙买加",
"weight": 0.000312724
},
{
"name": "格鲁吉亚",
"weight": 0.000307685
},
{
"weight": 0.000265076,
"name": "阿尔巴尼亚"
},
{
"weight": 0.000252622,
"name": "克罗地亚"
},
{
"weight": 0.000250708,
"name": "亚美尼亚"
},
{
"name": "波黑",
"weight": 0.000232069
},
{
"name": "摩尔多瓦",
"weight": 0.000204405
},
{
"name": "科索沃",
"weight": 0.000196993
},
{
"weight": 0.000189047,
"name": "立陶宛"
},
{
"weight": 0.000182006,
"name": "卡塔尔"
},
{
"name": "波多黎各",
"weight": 0.000182004
},
{
"name": "吉布提",
"weight": 0.000174383
},
{
"name": "北马其顿",
"weight": 0.000158321
},
{
"weight": 0.000146886,
"name": "科摩罗"
},
{
"weight": 0.000144027,
"name": "巴林"
},
{
"weight": 0.000129782,
"name": "斯洛文尼亚"
},
{
"weight": 0.000126232,
"name": "西撒哈拉"
},
{
"name": "拉脱维亚",
"weight": 0.000124966
},
{
"name": "所罗门群岛",
"weight": 0.000120169
},
{
"name": "斐济",
"weight": 0.000110985
},
{
"weight": 0.000110769,
"name": "特立尼达和多巴哥"
},
{
"weight": 0.000109656,
"name": "毛里求斯"
},
{
"weight": 8.8e-5,
"name": "爱沙尼亚"
},
{
"weight": 8.61e-5,
"name": "圭亚那"
},
{
"name": "不丹",
"weight": 8.61e-5
},
{
"weight": 7.49e-5,
"name": "佛得角"
},
{
"name": "塞浦路斯",
"weight": 6.8e-5
},
{
"name": "伯利兹",
"weight": 6.4e-5
},
{
"weight": 6.01e-5,
"name": "苏里南"
},
{
"name": "文莱",
"weight": 5.2e-5
},
{
"weight": 5.1e-5,
"name": "黑山"
},
{
"name": "瓦努阿图",
"weight": 5.1e-5
},
{
"name": "卢森堡",
"weight": 5.07e-5
},
{
"name": "马尔代夫",
"weight": 4.27e-5
},
{
"name": "巴哈马",
"weight": 4.06e-5
},
{
"weight": 3.82e-5,
"name": "澳门"
},
{
"weight": 3.48e-5,
"name": "马耳他"
},
{
"name": "冰岛",
"weight": 3.45e-5
},
{
"weight": 3.03e-5,
"name": "新喀里多尼亚"
},
{
"name": "萨摩亚",
"weight": 2.83e-5
},
{
"weight": 2.8e-5,
"name": "法属波利尼西亚"
},
{
"name": "关岛",
"weight": 2.36e-5
},
{
"weight": 2.32e-5,
"name": "巴巴多斯"
},
{
"name": "基里巴斯",
"weight": 1.83e-5
},
{
"weight": 1.71e-5,
"name": "圣卢西亚"
},
{
"name": "库拉索",
"weight": 1.51e-5
},
{
"weight": 1.5e-5,
"name": "汤加"
},
{
"weight": 1.42e-5,
"name": "密克罗尼西亚联邦"
},
{
"weight": 1.13e-5,
"name": "格林纳达"
},
{
"name": "安提瓜和巴布达",
"weight": 1.05e-5
},
{
"weight": 9.93e-6,
"name": "圣文森特和格林纳丁斯"
},
{
"name": "泽西",
"weight": 9.66e-6
},
{
"weight": 9.64e-6,
"name": "阿鲁巴"
},
{
"weight": 9.15e-6,
"name": "美属维尔京群岛"
},
{
"weight": 9.08e-6,
"name": "马绍尔群岛"
},
{
"weight": 8.9e-6,
"name": "塞舌尔"
},
{
"name": "美属萨摩亚",
"weight": 7.97e-6
},
{
"name": "多米尼克",
"weight": 7.57e-6
},
{
"weight": 6.41e-6,
"name": "马恩岛"
},
{
"weight": 6.09e-6,
"name": "北马里亚纳群岛"
},
{
"name": "开曼群岛",
"weight": 5.77e-6
},
{
"name": "格陵兰",
"weight": 5.63e-6
},
{
"weight": 5.54e-6,
"name": "法罗群岛"
},
{
"weight": 5.17e-6,
"name": "圣基茨和尼维斯"
},
{
"weight": 5.11e-6,
"name": "百慕大"
},
{
"weight": 4.38e-6,
"name": "根西"
},
{
"weight": 4.31e-6,
"name": "特克斯和凯科斯群岛"
},
{
"name": "荷属圣马丁",
"weight": 4.14e-6
},
{
"weight": 3.87e-6,
"name": "安道尔"
},
{
"name": "法国(法属圣马丁)",
"weight": 3.6e-6
},
{
"name": "直布罗陀",
"weight": 3.2e-6
},
{
"weight": 2.87e-6,
"name": "列支敦士登"
},
{
"name": "英属维尔京群岛",
"weight": 2.57e-6
},
{
"weight": 2.1e-6,
"name": "圣马力诺"
},
{
"weight": 1.75e-6,
"name": "瑙鲁"
},
{
"name": "摩纳哥",
"weight": 1.75e-6
},
{
"name": "图瓦卢",
"weight": 1.72e-6
},
{
"name": "库克群岛",
"weight": 1.44e-6
},
{
"name": "帕劳",
"weight": 1.44e-6
},
{
"weight": 1.41e-6,
"name": "安圭拉"
},
{
"weight": 1.05e-6,
"name": "法国(瓦利斯和富图纳)"
},
{
"weight": 6.6e-7,
"name": "法国(圣巴泰勒米)"
},
{
"name": "蒙特塞拉特",
"weight": 4.35e-7
},
{
"weight": 3.77e-7,
"name": "圣赫勒拿、阿森松和特里斯坦-达库尼亚"
},
{
"name": "法国(圣皮埃尔和密克隆)",
"weight": 2.86e-7
},
{
"name": "福克兰群岛",
"weight": 2.48e-7
}
]

Binary file not shown.

Binary file not shown.

62
go.mod
View File

@@ -1,27 +1,65 @@
module github.com/FloatTech/ZeroBot-Plugin
go 1.16
go 1.17
require (
github.com/FloatTech/AnimeAPI v1.1.10
github.com/FloatTech/ZeroBot-Plugin-Gif v0.2.4
github.com/FloatTech/bot-manager v1.0.1-0.20211112011524-85b9895271ed
github.com/RomiChan/protobuf v0.0.0-20211202142450-893e94b43c21
github.com/FloatTech/AnimeAPI v1.2.3
github.com/FloatTech/zbputils v1.2.3-add9
github.com/antchfx/htmlquery v1.2.4
github.com/corona10/goimagehash v1.0.3
github.com/fogleman/gg v1.3.0
github.com/fumiama/cron v1.3.0
github.com/fumiama/go-base16384 v1.2.1
github.com/fumiama/gofastTEA v0.0.5
github.com/fumiama/go-registry v0.0.2
github.com/fumiama/gofastTEA v0.0.6
github.com/fumiama/gotracemoe v0.0.3
github.com/gin-gonic/gin v1.7.5
github.com/gorilla/websocket v1.4.2
github.com/jinzhu/gorm v1.9.16
github.com/logoove/sqlite v1.13.0
github.com/mroth/weightedrand v0.4.1
github.com/shirou/gopsutil v3.21.10+incompatible
github.com/shirou/gopsutil/v3 v3.21.12
github.com/sirupsen/logrus v1.8.1
github.com/t-tomalak/logrus-easy-formatter v0.0.0-20190827215021-c074f06c5816
github.com/tidwall/gjson v1.11.0
github.com/tidwall/gjson v1.12.1
github.com/wdvxdr1123/ZeroBot v1.4.1
golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d
golang.org/x/image v0.0.0-20211028202545-6944b10bf410
)
require (
github.com/antchfx/xpath v1.2.0 // indirect
github.com/disintegration/imaging v1.6.2 // indirect
github.com/ericpauley/go-quantize v0.0.0-20200331213906-ae555eb2afa4 // indirect
github.com/go-ole/go-ole v1.2.6 // indirect
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
github.com/google/uuid v1.3.0 // indirect
github.com/gorilla/websocket v1.4.2 // indirect
github.com/jinzhu/inflection v1.0.0 // indirect
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect
github.com/mattn/go-isatty v0.0.14 // indirect
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 // indirect
github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect
github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 // indirect
github.com/tidwall/match v1.1.1 // indirect
github.com/tidwall/pretty v1.2.0 // indirect
github.com/tklauser/go-sysconf v0.3.9 // indirect
github.com/tklauser/numcpus v0.3.0 // indirect
github.com/yusufpapurcu/wmi v1.2.2 // indirect
golang.org/x/crypto v0.0.0-20220112180741-5e0467b6c7ce // indirect
golang.org/x/mod v0.5.1 // indirect
golang.org/x/net v0.0.0-20220111093109-d55c255bac03 // indirect
golang.org/x/sys v0.0.0-20220111092808-5a964db01320 // indirect
golang.org/x/text v0.3.7 // indirect
golang.org/x/tools v0.1.8 // indirect
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect
lukechampine.com/uint128 v1.1.1 // indirect
modernc.org/cc/v3 v3.35.22 // indirect
modernc.org/ccgo/v3 v3.14.0 // indirect
modernc.org/libc v1.13.2 // indirect
modernc.org/mathutil v1.4.1 // indirect
modernc.org/memory v1.0.5 // indirect
modernc.org/opt v0.1.1 // indirect
modernc.org/sqlite v1.14.4 // indirect
modernc.org/strutil v1.1.1 // indirect
modernc.org/token v1.0.0 // indirect
)

233
go.sum
View File

@@ -1,26 +1,18 @@
github.com/FloatTech/AnimeAPI v1.1.9/go.mod h1:CC+vF30UGBlcIUxwFOcXIEHoJ4r7c5x2iLQsnUCVdDI=
github.com/FloatTech/AnimeAPI v1.1.10 h1:fYkv65P1HBukHi3GpzYulGx/xLshEL9635QXALDryf0=
github.com/FloatTech/AnimeAPI v1.1.10/go.mod h1:CC+vF30UGBlcIUxwFOcXIEHoJ4r7c5x2iLQsnUCVdDI=
github.com/FloatTech/ZeroBot-Plugin v1.1.5/go.mod h1:kWuUARvU7gs4xLggi8Sy37ja2GRL6k0X6kewe5TiZRs=
github.com/FloatTech/ZeroBot-Plugin-Gif v0.2.4 h1:WW0BmmLLqAg+m6qGkrKbsfSIm91fkj3/udt3R7Myodo=
github.com/FloatTech/ZeroBot-Plugin-Gif v0.2.4/go.mod h1:W7ag6hml1pZTNzRXKU74OMr6rS8awQKSU+o2g7Gj4O0=
github.com/FloatTech/ZeroBot-Plugin-Timer v1.4.3/go.mod h1:MVOQQ4e6AVGFm993blXXU4Sd6bAsLY2+Zb+/HMrEeEc=
github.com/FloatTech/bot-manager v1.0.1-0.20211112011524-85b9895271ed h1:GEOgDVbvaxXqZxgWE/y5JOlbMXrmq7n0M+m9g3md2To=
github.com/FloatTech/bot-manager v1.0.1-0.20211112011524-85b9895271ed/go.mod h1:8YYRJ16oroGHQGD2En0oVnmcKJkxR9O/jd5BPSfWfOQ=
github.com/FloatTech/imgfactory v0.1.1 h1:ooL2+fV8yrMhv1ShGGKsN0Rm/flWoKnvqXaUD+dC3DQ=
github.com/FloatTech/imgfactory v0.1.1/go.mod h1:ThDALab8aOuU6KVYESVWFqmjcqtm03e0SvGlTw6s+aw=
github.com/FloatTech/AnimeAPI v1.2.3 h1:NywV8PxKun6oDcKndsrUKT8l7vHGnf0rm5sRrSZ7qSc=
github.com/FloatTech/AnimeAPI v1.2.3/go.mod h1:feTdgda0dckTeNl5VCXYlYEgN0wQbrca7TjIlZyph4o=
github.com/FloatTech/bot-manager v1.0.0/go.mod h1:8YYRJ16oroGHQGD2En0oVnmcKJkxR9O/jd5BPSfWfOQ=
github.com/FloatTech/zbputils v1.2.3-add9 h1:lovWc7uvaqSww1TV8/BlGZNf5o2jBUgU4VIlXCusgrI=
github.com/FloatTech/zbputils v1.2.3-add9/go.mod h1:ZIuQP4tuhn7jiowEy+PALiHmr4zzPQBj4VdjEyd5/Es=
github.com/Mrs4s/MiraiGo v0.0.0-20211120033824-43b23f4e6fcb h1:Rkj28fqIwGx/EgBzRYtpmJRfH6wqVn7cNdc7aJ0QE4M=
github.com/Mrs4s/MiraiGo v0.0.0-20211120033824-43b23f4e6fcb/go.mod h1:imVKbfKqqeit+C/eaWGb4MKQ3z3gN6pRpBU5RMtp5so=
github.com/PuerkitoBio/goquery v1.5.1/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc=
github.com/RomiChan/protobuf v0.0.0-20211202142450-893e94b43c21 h1:3i3D7gO1qPeUGY0Bl7rQIoeeNE10kgQFyPqLV1ks9ew=
github.com/RomiChan/protobuf v0.0.0-20211202142450-893e94b43c21/go.mod h1:CKKOWC7mBxd36zxsCB1V8DTrwlTNRQvkSVbYqyUiGEE=
github.com/StackExchange/wmi v1.2.1 h1:VIkavFPXSjcnS+O8yTq7NI32k0R5Aj+v39y29VYDOSA=
github.com/StackExchange/wmi v1.2.1/go.mod h1:rcmrprowKIVzvc+NUiLncP2uuArMWLCbu9SBzvHz7e8=
github.com/andybalholm/cascadia v1.1.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9PqHO0sqidkEA4Y=
github.com/antchfx/htmlquery v1.2.3 h1:sP3NFDneHx2stfNXCKbhHFo8XgNjCACnU/4AO5gWz6M=
github.com/antchfx/htmlquery v1.2.3/go.mod h1:B0ABL+F5irhhMWg54ymEZinzMSi0Kt3I2if0BLYa3V0=
github.com/antchfx/xpath v1.1.6 h1:6sVh6hB5T6phw1pFpHRQ+C4bd8sNI+O58flqtg7h0R0=
github.com/antchfx/htmlquery v1.2.4 h1:qLteofCMe/KGovBI6SQgmou2QNyedFUW+pE+BpeZ494=
github.com/antchfx/htmlquery v1.2.4/go.mod h1:2xO6iu3EVWs7R2JYqBbp8YzG50gj/ofqs5/0VZoDZLc=
github.com/antchfx/xpath v1.1.6/go.mod h1:Yee4kTMuNiPYJ7nSNorELQMr1J33uOpXDMByNYhvtNk=
github.com/antchfx/xpath v1.2.0 h1:mbwv7co+x0RwgeGAOHdrKy89GvHaGvxxBtPK0uF9Zr8=
github.com/antchfx/xpath v1.2.0/go.mod h1:i54GszH55fYfBmoZXapTHN8T8tkcHfRgLyVwwqzXNcs=
github.com/corona10/goimagehash v1.0.3 h1:NZM518aKLmoNluluhfHGxT3LGOnrojrxhGn63DR/CZA=
github.com/corona10/goimagehash v1.0.3/go.mod h1:VkvE0mLn84L4aF8vCb6mafVajEb6QYMHl2ZJLn0mOGI=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
@@ -43,23 +35,19 @@ github.com/fumiama/cron v1.3.0 h1:ZWlwuexF+HQHl3cYytEE5HNwD99q+3vNZF1GrEiXCFo=
github.com/fumiama/cron v1.3.0/go.mod h1:bz5Izvgi/xEUI8tlBN8BI2jr9Moo8N4or0KV8xXuPDY=
github.com/fumiama/go-base16384 v1.2.1 h1:6OGprW8g/95m2ocmryHi8mipZ7bx9StFMZDKEqLvMiA=
github.com/fumiama/go-base16384 v1.2.1/go.mod h1:1HTC0QFL7BjS0DuO5Qm+fBYKQkHqmAapLbRpCxrhPXQ=
github.com/fumiama/gofastTEA v0.0.5 h1:Pd/2eSfLl2V0CqZL8pnu1CIU8Fy4HYpLutpliXU70Ds=
github.com/fumiama/gofastTEA v0.0.5/go.mod h1:+sBZ05nCA2skZkursHNvyr8kULlEetrYTM2y5kA4rQc=
github.com/fumiama/go-registry v0.0.2 h1:2EoZwZpqI7YhkQ1FnuAPvALYPpvUtbsCqk879+r7ehs=
github.com/fumiama/go-registry v0.0.2/go.mod h1:QkcmmHuw1y6y/w7/HiH1c9yjBw5Zt+6EER6YJKl9xh8=
github.com/fumiama/gofastTEA v0.0.6 h1:Yni3MXDbJVa/c4CecgdZDgCJK+fLdvGph+OBqY2mtiI=
github.com/fumiama/gofastTEA v0.0.6/go.mod h1:+sBZ05nCA2skZkursHNvyr8kULlEetrYTM2y5kA4rQc=
github.com/fumiama/gotracemoe v0.0.3 h1:iI5EbE9A3UUbfukG6+/soYPjp1S31eCNYf4tw7s6/Jc=
github.com/fumiama/gotracemoe v0.0.3/go.mod h1:tyqahdUzHf0bQIAVY/GYmDWvYYe5ik1ZbhnGYh+zl40=
github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=
github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
github.com/gin-gonic/gin v1.7.5 h1:GOccErVuE4RiwM9DCzVIBfwZjLeFv3d1eHcbqVlrVvU=
github.com/gin-gonic/gin v1.7.5/go.mod h1:jD2toBW3GZUr5UMcdrwQA10I7RuaFOl/SGeDjXkfUtY=
github.com/go-ole/go-ole v1.2.5 h1:t4MGB5xEDZvXI+0rMjjsfBsD7yAgp/s9ZDkL1JndXwY=
github.com/go-ole/go-ole v1.2.5/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A=
github.com/gin-gonic/gin v1.7.7/go.mod h1:axIBovoeJpVj8S3BwE0uPMTeReE4+AfFtqpqaZ1qq1U=
github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY=
github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q=
github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8=
github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD876Lmtgy7VtROAbHHXk8no=
github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA=
github.com/go-playground/validator/v10 v10.4.1 h1:pH2c5ADXtd66mxoE0Zm9SUhxE20r7aM3F26W0hOn+GE=
github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4=
github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gGcHOs=
github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
@@ -67,22 +55,23 @@ github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe h1:lXe2qZdvpiX5WZ
github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0=
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g=
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e h1:1r7pUrabqp18hOBcwBwiTsbnFeTZHV9eER/QT5JVZxY=
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw=
github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ=
github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
github.com/imroc/req v0.3.0/go.mod h1:F+NZ+2EFSo6EFXdeIbpfE9hcC233id70kf0byW97Caw=
github.com/jinzhu/gorm v1.9.16 h1:+IyIjPEABKRpsu/F8OvDPy9fyQlgsg2luMV2ZIH5i5o=
github.com/jinzhu/gorm v1.9.16/go.mod h1:G3LB3wezTOWM2ITLzPxEXgSkOXAntiLHS7UdBefADcs=
github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
@@ -90,28 +79,26 @@ github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkr
github.com/jinzhu/now v1.0.1 h1:HjfetcXq097iXP0uoPCdnM4Efp5/9MsM0/M+XOTeR3M=
github.com/jinzhu/now v1.0.1/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/json-iterator/go v1.1.11 h1:uVUAXhF2To8cbw/3xN3pxj6kk7TYKs98NIrTqPlMWAQ=
github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs=
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8=
github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y=
github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII=
github.com/lib/pq v1.1.1 h1:sJZmqHoEaY7f+NPP8pgLB/WxulyR3fewgCM2qaSlBb4=
github.com/lib/pq v1.1.1/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
github.com/logoove/sqlite v1.13.0 h1:XM7QKK9R3tm8o7bI75R3zmwYBFQ5S3Jqg+XCaqsAMQQ=
github.com/logoove/sqlite v1.13.0/go.mod h1:MRpE/o3qQhT7AgfIdnBue5c63+//xT+KXV0gHeVAUAg=
github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY=
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4=
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I=
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y=
github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
github.com/mattn/go-sqlite3 v1.14.0/go.mod h1:JIl7NbARA7phWnGvh0LKTyg7S9BA+6gx71ShQilpsus=
github.com/mattn/go-sqlite3 v1.14.8 h1:gDp86IdQsN/xWjIEmr9MF6o9mpksUgh0fu+9ByFxzIU=
github.com/mattn/go-sqlite3 v1.14.8/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 h1:ZqeYNhU3OHLH3mGKHDcjJRFFRrJa6eAM5H+CtDdOsPc=
github.com/mattn/go-sqlite3 v1.14.10 h1:MLn+5bFRlWMGoSRmJour3CL1w/qL96mvipqpwQW/Sfk=
github.com/mattn/go-sqlite3 v1.14.10/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/modern-go/reflect2 v1.0.2-0.20210109003243-333559e1834b h1:6Xjqolv/0DDdUqlpnsTomXQvjvvkz7Ux7TcMALvozEw=
github.com/modern-go/reflect2 v1.0.2-0.20210109003243-333559e1834b/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/mroth/weightedrand v0.4.1 h1:rHcbUBopmi/3x4nnrvwGJBhX9d0vk+KgoLUZeDP6YyI=
github.com/mroth/weightedrand v0.4.1/go.mod h1:3p2SIcC8al1YMzGhAIoXD+r9olo/g/cdJgAD905gyNE=
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6Oo2LfFZAehjjQMERAvZLEDnQ=
@@ -123,12 +110,13 @@ github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c h1:ncq/mPwQF4JjgDlrVEn3C11VoGHZN7m8qihwgMEtzYw=
github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE=
github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 h1:OdAsTTz6OkFY5QxjkYwrChwuRruF69c169dPK26NUlk=
github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
github.com/robfig/cron v1.2.0/go.mod h1:JGuDeoQd7Z6yL4zQhZ3OPEVHB7fL6Ka6skscFHfmt2k=
github.com/shirou/gopsutil v3.21.8+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=
github.com/shirou/gopsutil v3.21.10+incompatible h1:AL2kpVykjkqeN+MFe1WcwSBVUjGjvdU8/ubvCuXAjrU=
github.com/shirou/gopsutil v3.21.10+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
github.com/shirou/gopsutil/v3 v3.21.12 h1:VoGxEW2hpmz0Vt3wUvHIl9fquzYLNpVpgNNB7pGJimA=
github.com/shirou/gopsutil/v3 v3.21.12/go.mod h1:BToYZVTlSVlfazpDDYFnsVZLaoRG+g8ufT6fPQLdJzA=
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE=
github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
@@ -140,14 +128,11 @@ github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81P
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ=
github.com/t-tomalak/logrus-easy-formatter v0.0.0-20190827215021-c074f06c5816 h1:J6v8awz+me+xeb/cUTotKgceAYouhIB3pjzgRd6IlGk=
github.com/t-tomalak/logrus-easy-formatter v0.0.0-20190827215021-c074f06c5816/go.mod h1:tzym/CEb5jnFI+Q0k4Qq3+LvRF4gO3E2pxS8fHP8jcA=
github.com/tdf1939/ZeroBot-Plugin-Gif v0.0.0-20210828060956-389b1dc33652/go.mod h1:bkxKi7un9gCDvUUZAiIJF6k90pyj8rmxiXLJkiHcsMY=
github.com/tdf1939/img v0.0.0-20210827153520-90cb4e9580a3/go.mod h1:FgTEOcosTWrkOr7++gbtPSj1rX5loRWrf/AL+hm3Cnw=
github.com/tidwall/gjson v1.8.0/go.mod h1:5/xDoumyyDNerp2U36lyolv46b3uF/9Bu6OfyQ9GImk=
github.com/tidwall/gjson v1.9.0/go.mod h1:5/xDoumyyDNerp2U36lyolv46b3uF/9Bu6OfyQ9GImk=
github.com/tidwall/gjson v1.11.0 h1:C16pk7tQNiH6VlCrtIXL1w8GaOsi1X3W8KDkE1BuYd4=
github.com/tidwall/gjson v1.11.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
github.com/tidwall/gjson v1.12.1 h1:ikuZsLdhr8Ws0IdROXUS1Gi4v9Z4pGqpX/CvJkxvfpo=
github.com/tidwall/gjson v1.12.1/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
github.com/tidwall/match v1.0.3/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM=
github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA=
github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM=
@@ -158,28 +143,28 @@ github.com/tklauser/go-sysconf v0.3.9 h1:JeUVdAOWhhxVcU6Eqr/ATFHgXk/mmiItdKeJPev
github.com/tklauser/go-sysconf v0.3.9/go.mod h1:11DU/5sG7UexIrp/O6g35hrWzu0JxlwQ3LSFUzyeuhs=
github.com/tklauser/numcpus v0.3.0 h1:ILuRUQBtssgnxw0XXIjKUC56fgnOrFoQQ/4+DeU2biQ=
github.com/tklauser/numcpus v0.3.0/go.mod h1:yFGUr7TUHQRAhyqBcEg0Ge34zDBAsIvJJcyE6boqnA8=
github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo=
github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw=
github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs=
github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY=
github.com/wdvxdr1123/ZeroBot v1.2.2/go.mod h1:83nHtG8V5TAxPwH/LCDxLpZk4khIgs29dkr5TBWf7fc=
github.com/wdvxdr1123/ZeroBot v1.2.3/go.mod h1:83nHtG8V5TAxPwH/LCDxLpZk4khIgs29dkr5TBWf7fc=
github.com/wdvxdr1123/ZeroBot v1.2.4/go.mod h1:83nHtG8V5TAxPwH/LCDxLpZk4khIgs29dkr5TBWf7fc=
github.com/wdvxdr1123/ZeroBot v1.3.2/go.mod h1:i2DIqQjtjE+3gvVi9r9sc+QpNaUuyTXx/HNXXayIpwI=
github.com/wdvxdr1123/ZeroBot v1.4.1 h1:fk/8RH2D1gB3YeC1eI/SZi/kG31Rh7Z8lAiDc60VZFM=
github.com/wdvxdr1123/ZeroBot v1.4.1/go.mod h1:7t9m4vDZPwWAmzKlhP6IvUoisOIiqNdm/3AJgiY3+ew=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
github.com/yusufpapurcu/wmi v1.2.2 h1:KBNDSne4vP5mbSWnJbO+51IMOXJB67QiYCSBrubbPRg=
github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20191205180655-e7c4368fe9dd/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20220112180741-5e0467b6c7ce h1:Roh6XWxHFKrPgC/EQhVubSAGQ6Ozk6IdxHSzt1mR0EI=
golang.org/x/crypto v0.0.0-20220112180741-5e0467b6c7ce/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d h1:RNPAfi2nHY7C2srAV8A49jpsYr0ADedCk1wq6fTMTvs=
golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM=
golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4=
golang.org/x/image v0.0.0-20211028202545-6944b10bf410 h1:hTftEOvwiOq2+O8k2D5/Q7COC7k5Qcrgc2TFURJYnvQ=
golang.org/x/image v0.0.0-20211028202545-6944b10bf410/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.5.1 h1:OJxoQ/rynoF0dcCdI7cLPktw/hR2cueqYfjm43oqK38=
golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro=
golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
@@ -188,8 +173,10 @@ golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLL
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200421231249-e086a090c8fd/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f h1:OfiFi4JbukWwe3lzw+xunroH1mnC1e2Gy5cxNJApiSY=
golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20220111093109-d55c255bac03 h1:0FB83qp0AzVJm+0wcIlauAjJ+tNdh7jLuacRYCIVv7s=
golang.org/x/net v0.0.0-20220111093109-d55c255bac03/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -205,59 +192,149 @@ golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201126233918-771906719818/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210816074244-15123e1e1f71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210902050250-f475640dd07b h1:S7hKs0Flbq0bbc9xgYt4stIEG1zNDFqyrPwAX2Wj/sE=
golang.org/x/sys v0.0.0-20210902050250-f475640dd07b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20211013075003-97ac67df715c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220111092808-5a964db01320 h1:0jf+tOCoZ3LyutmCOWpVni1chK4VfFLhRsDK7MhqGRY=
golang.org/x/sys v0.0.0-20220111092808-5a964db01320/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20201124115921-2c860bdd6e78 h1:M8tBwCtWD/cZV9DZpFYRUgaymAYAr+aIUTWzDaM3uPs=
golang.org/x/tools v0.0.0-20201124115921-2c860bdd6e78/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.1.8 h1:P1HhGGuLW4aAclzjtmJdf0mJOjVUZUzOTqkAkWL+l6w=
golang.org/x/tools v0.1.8/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ=
google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo=
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
lukechampine.com/uint128 v1.1.1 h1:pnxCASz787iMf+02ssImqk6OLt+Z5QHMoZyUXR4z6JU=
lukechampine.com/uint128 v1.1.1/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk=
modernc.org/cc/v3 v3.33.6/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
modernc.org/cc/v3 v3.33.9/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
modernc.org/cc/v3 v3.33.11/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
modernc.org/cc/v3 v3.34.0 h1:dFhZc/HKR3qp92sYQxKRRaDMz+sr1bwcFD+m7LSCrAs=
modernc.org/cc/v3 v3.34.0/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
modernc.org/cc/v3 v3.35.0/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
modernc.org/cc/v3 v3.35.4/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
modernc.org/cc/v3 v3.35.5/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
modernc.org/cc/v3 v3.35.7/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
modernc.org/cc/v3 v3.35.8/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
modernc.org/cc/v3 v3.35.10/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
modernc.org/cc/v3 v3.35.15/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
modernc.org/cc/v3 v3.35.16/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
modernc.org/cc/v3 v3.35.17/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
modernc.org/cc/v3 v3.35.18/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
modernc.org/cc/v3 v3.35.20/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
modernc.org/cc/v3 v3.35.22 h1:BzShpwCAP7TWzFppM4k2t03RhXhgYqaibROWkrWq7lE=
modernc.org/cc/v3 v3.35.22/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
modernc.org/ccgo/v3 v3.9.5/go.mod h1:umuo2EP2oDSBnD3ckjaVUXMrmeAw8C8OSICVa0iFf60=
modernc.org/ccgo/v3 v3.10.0/go.mod h1:c0yBmkRFi7uW4J7fwx/JiijwOjeAeR2NoSaRVFPmjMw=
modernc.org/ccgo/v3 v3.11.0/go.mod h1:dGNposbDp9TOZ/1KBxghxtUp/bzErD0/0QW4hhSaBMI=
modernc.org/ccgo/v3 v3.11.1/go.mod h1:lWHxfsn13L3f7hgGsGlU28D9eUOf6y3ZYHKoPaKU0ag=
modernc.org/ccgo/v3 v3.11.2 h1:gqa8PQ2v7SjrhHCgxUO5dzoAJWSLAveJqZTNkPCN0kc=
modernc.org/ccgo/v3 v3.11.2/go.mod h1:6kii3AptTDI+nUrM9RFBoIEUEisSWCbdczD9ZwQH2FE=
modernc.org/ccgo/v3 v3.11.3/go.mod h1:0oHunRBMBiXOKdaglfMlRPBALQqsfrCKXgw9okQ3GEw=
modernc.org/ccgo/v3 v3.12.4/go.mod h1:Bk+m6m2tsooJchP/Yk5ji56cClmN6R1cqc9o/YtbgBQ=
modernc.org/ccgo/v3 v3.12.6/go.mod h1:0Ji3ruvpFPpz+yu+1m0wk68pdr/LENABhTrDkMDWH6c=
modernc.org/ccgo/v3 v3.12.8/go.mod h1:Hq9keM4ZfjCDuDXxaHptpv9N24JhgBZmUG5q60iLgUo=
modernc.org/ccgo/v3 v3.12.11/go.mod h1:0jVcmyDwDKDGWbcrzQ+xwJjbhZruHtouiBEvDfoIsdg=
modernc.org/ccgo/v3 v3.12.14/go.mod h1:GhTu1k0YCpJSuWwtRAEHAol5W7g1/RRfS4/9hc9vF5I=
modernc.org/ccgo/v3 v3.12.18/go.mod h1:jvg/xVdWWmZACSgOiAhpWpwHWylbJaSzayCqNOJKIhs=
modernc.org/ccgo/v3 v3.12.20/go.mod h1:aKEdssiu7gVgSy/jjMastnv/q6wWGRbszbheXgWRHc8=
modernc.org/ccgo/v3 v3.12.21/go.mod h1:ydgg2tEprnyMn159ZO/N4pLBqpL7NOkJ88GT5zNU2dE=
modernc.org/ccgo/v3 v3.12.22/go.mod h1:nyDVFMmMWhMsgQw+5JH6B6o4MnZ+UQNw1pp52XYFPRk=
modernc.org/ccgo/v3 v3.12.25/go.mod h1:UaLyWI26TwyIT4+ZFNjkyTbsPsY3plAEB6E7L/vZV3w=
modernc.org/ccgo/v3 v3.12.29/go.mod h1:FXVjG7YLf9FetsS2OOYcwNhcdOLGt8S9bQ48+OP75cE=
modernc.org/ccgo/v3 v3.12.36/go.mod h1:uP3/Fiezp/Ga8onfvMLpREq+KUjUmYMxXPO8tETHtA8=
modernc.org/ccgo/v3 v3.12.38/go.mod h1:93O0G7baRST1vNj4wnZ49b1kLxt0xCW5Hsa2qRaZPqc=
modernc.org/ccgo/v3 v3.12.43/go.mod h1:k+DqGXd3o7W+inNujK15S5ZYuPoWYLpF5PYougCmthU=
modernc.org/ccgo/v3 v3.12.46/go.mod h1:UZe6EvMSqOxaJ4sznY7b23/k13R8XNlyWsO5bAmSgOE=
modernc.org/ccgo/v3 v3.12.47/go.mod h1:m8d6p0zNps187fhBwzY/ii6gxfjob1VxWb919Nk1HUk=
modernc.org/ccgo/v3 v3.12.50/go.mod h1:bu9YIwtg+HXQxBhsRDE+cJjQRuINuT9PUK4orOco/JI=
modernc.org/ccgo/v3 v3.12.51/go.mod h1:gaIIlx4YpmGO2bLye04/yeblmvWEmE4BBBls4aJXFiE=
modernc.org/ccgo/v3 v3.12.53/go.mod h1:8xWGGTFkdFEWBEsUmi+DBjwu/WLy3SSOrqEmKUjMeEg=
modernc.org/ccgo/v3 v3.12.54/go.mod h1:yANKFTm9llTFVX1FqNKHE0aMcQb1fuPJx6p8AcUx+74=
modernc.org/ccgo/v3 v3.12.55/go.mod h1:rsXiIyJi9psOwiBkplOaHye5L4MOOaCjHg1Fxkj7IeU=
modernc.org/ccgo/v3 v3.12.56/go.mod h1:ljeFks3faDseCkr60JMpeDb2GSO3TKAmrzm7q9YOcMU=
modernc.org/ccgo/v3 v3.12.57/go.mod h1:hNSF4DNVgBl8wYHpMvPqQWDQx8luqxDnNGCMM4NFNMc=
modernc.org/ccgo/v3 v3.12.60/go.mod h1:k/Nn0zdO1xHVWjPYVshDeWKqbRWIfif5dtsIOCUVMqM=
modernc.org/ccgo/v3 v3.12.66/go.mod h1:jUuxlCFZTUZLMV08s7B1ekHX5+LIAurKTTaugUr/EhQ=
modernc.org/ccgo/v3 v3.12.67/go.mod h1:Bll3KwKvGROizP2Xj17GEGOTrlvB1XcVaBrC90ORO84=
modernc.org/ccgo/v3 v3.12.73/go.mod h1:hngkB+nUUqzOf3iqsM48Gf1FZhY599qzVg1iX+BT3cQ=
modernc.org/ccgo/v3 v3.12.81/go.mod h1:p2A1duHoBBg1mFtYvnhAnQyI6vL0uw5PGYLSIgF6rYY=
modernc.org/ccgo/v3 v3.12.84/go.mod h1:ApbflUfa5BKadjHynCficldU1ghjen84tuM5jRynB7w=
modernc.org/ccgo/v3 v3.12.86/go.mod h1:dN7S26DLTgVSni1PVA3KxxHTcykyDurf3OgUzNqTSrU=
modernc.org/ccgo/v3 v3.12.90/go.mod h1:obhSc3CdivCRpYZmrvO88TXlW0NvoSVvdh/ccRjJYko=
modernc.org/ccgo/v3 v3.12.92/go.mod h1:5yDdN7ti9KWPi5bRVWPl8UNhpEAtCjuEE7ayQnzzqHA=
modernc.org/ccgo/v3 v3.13.1/go.mod h1:aBYVOUfIlcSnrsRVU8VRS35y2DIfpgkmVkYZ0tpIXi4=
modernc.org/ccgo/v3 v3.14.0 h1:Zr1Ny9+7r5yAiXpBdgp8XiXqkNA4ARrRphHGHVXeAp0=
modernc.org/ccgo/v3 v3.14.0/go.mod h1:hBrkiBlUwvr5vV/ZH9YzXIp982jKE8Ek8tR1ytoAL6Q=
modernc.org/ccorpus v1.11.1 h1:K0qPfpVG1MJh5BYazccnmhywH4zHuOgJXgbjzyp6dWA=
modernc.org/ccorpus v1.11.1/go.mod h1:2gEUTrWqdpH2pXsmTM1ZkjeSrUWDpjMu2T6m29L/ErQ=
modernc.org/httpfs v1.0.6 h1:AAgIpFZRXuYnkjftxTAZwMIiwEqAfk8aVB2/oA6nAeM=
modernc.org/httpfs v1.0.6/go.mod h1:7dosgurJGp0sPaRanU53W4xZYKh14wfzX420oZADeHM=
modernc.org/libc v1.9.8/go.mod h1:U1eq8YWr/Kc1RWCMFUWEdkTg8OTcfLw2kY8EDwl039w=
modernc.org/libc v1.9.11/go.mod h1:NyF3tsA5ArIjJ83XB0JlqhjTabTCHm9aX4XMPHyQn0Q=
modernc.org/libc v1.11.0/go.mod h1:2lOfPmj7cz+g1MrPNmX65QCzVxgNq2C5o0jdLY2gAYg=
modernc.org/libc v1.11.2/go.mod h1:ioIyrl3ETkugDO3SGZ+6EOKvlP3zSOycUETe4XM4n8M=
modernc.org/libc v1.11.3 h1:q//spBhqp23lC/if8/o8hlyET57P8mCZqrqftzT2WmY=
modernc.org/libc v1.11.3/go.mod h1:k3HDCP95A6U111Q5TmG3nAyUcp3kR5YFZTeDS9v8vSU=
modernc.org/libc v1.11.5/go.mod h1:k3HDCP95A6U111Q5TmG3nAyUcp3kR5YFZTeDS9v8vSU=
modernc.org/libc v1.11.6/go.mod h1:ddqmzR6p5i4jIGK1d/EiSw97LBcE3dK24QEwCFvgNgE=
modernc.org/libc v1.11.11/go.mod h1:lXEp9QOOk4qAYOtL3BmMve99S5Owz7Qyowzvg6LiZso=
modernc.org/libc v1.11.13/go.mod h1:ZYawJWlXIzXy2Pzghaf7YfM8OKacP3eZQI81PDLFdY8=
modernc.org/libc v1.11.16/go.mod h1:+DJquzYi+DMRUtWI1YNxrlQO6TcA5+dRRiq8HWBWRC8=
modernc.org/libc v1.11.19/go.mod h1:e0dgEame6mkydy19KKaVPBeEnyJB4LGNb0bBH1EtQ3I=
modernc.org/libc v1.11.24/go.mod h1:FOSzE0UwookyT1TtCJrRkvsOrX2k38HoInhw+cSCUGk=
modernc.org/libc v1.11.26/go.mod h1:SFjnYi9OSd2W7f4ct622o/PAYqk7KHv6GS8NZULIjKY=
modernc.org/libc v1.11.27/go.mod h1:zmWm6kcFXt/jpzeCgfvUNswM0qke8qVwxqZrnddlDiE=
modernc.org/libc v1.11.28/go.mod h1:Ii4V0fTFcbq3qrv3CNn+OGHAvzqMBvC7dBNyC4vHZlg=
modernc.org/libc v1.11.31/go.mod h1:FpBncUkEAtopRNJj8aRo29qUiyx5AvAlAxzlx9GNaVM=
modernc.org/libc v1.11.34/go.mod h1:+Tzc4hnb1iaX/SKAutJmfzES6awxfU1BPvrrJO0pYLg=
modernc.org/libc v1.11.37/go.mod h1:dCQebOwoO1046yTrfUE5nX1f3YpGZQKNcITUYWlrAWo=
modernc.org/libc v1.11.39/go.mod h1:mV8lJMo2S5A31uD0k1cMu7vrJbSA3J3waQJxpV4iqx8=
modernc.org/libc v1.11.42/go.mod h1:yzrLDU+sSjLE+D4bIhS7q1L5UwXDOw99PLSX0BlZvSQ=
modernc.org/libc v1.11.44/go.mod h1:KFq33jsma7F5WXiYelU8quMJasCCTnHK0mkri4yPHgA=
modernc.org/libc v1.11.45/go.mod h1:Y192orvfVQQYFzCNsn+Xt0Hxt4DiO4USpLNXBlXg/tM=
modernc.org/libc v1.11.47/go.mod h1:tPkE4PzCTW27E6AIKIR5IwHAQKCAtudEIeAV1/SiyBg=
modernc.org/libc v1.11.49/go.mod h1:9JrJuK5WTtoTWIFQ7QjX2Mb/bagYdZdscI3xrvHbXjE=
modernc.org/libc v1.11.51/go.mod h1:R9I8u9TS+meaWLdbfQhq2kFknTW0O3aw3kEMqDDxMaM=
modernc.org/libc v1.11.53/go.mod h1:5ip5vWYPAoMulkQ5XlSJTy12Sz5U6blOQiYasilVPsU=
modernc.org/libc v1.11.54/go.mod h1:S/FVnskbzVUrjfBqlGFIPA5m7UwB3n9fojHhCNfSsnw=
modernc.org/libc v1.11.55/go.mod h1:j2A5YBRm6HjNkoSs/fzZrSxCuwWqcMYTDPLNx0URn3M=
modernc.org/libc v1.11.56/go.mod h1:pakHkg5JdMLt2OgRadpPOTnyRXm/uzu+Yyg/LSLdi18=
modernc.org/libc v1.11.58/go.mod h1:ns94Rxv0OWyoQrDqMFfWwka2BcaF6/61CqJRK9LP7S8=
modernc.org/libc v1.11.71/go.mod h1:DUOmMYe+IvKi9n6Mycyx3DbjfzSKrdr/0Vgt3j7P5gw=
modernc.org/libc v1.11.75/go.mod h1:dGRVugT6edz361wmD9gk6ax1AbDSe0x5vji0dGJiPT0=
modernc.org/libc v1.11.82/go.mod h1:NF+Ek1BOl2jeC7lw3a7Jj5PWyHPwWD4aq3wVKxqV1fI=
modernc.org/libc v1.11.86/go.mod h1:ePuYgoQLmvxdNT06RpGnaDKJmDNEkV7ZPKI2jnsvZoE=
modernc.org/libc v1.11.87/go.mod h1:Qvd5iXTeLhI5PS0XSyqMY99282y+3euapQFxM7jYnpY=
modernc.org/libc v1.11.88/go.mod h1:h3oIVe8dxmTcchcFuCcJ4nAWaoiwzKCdv82MM0oiIdQ=
modernc.org/libc v1.11.98/go.mod h1:ynK5sbjsU77AP+nn61+k+wxUGRx9rOFcIqWYYMaDZ4c=
modernc.org/libc v1.11.101/go.mod h1:wLLYgEiY2D17NbBOEp+mIJJJBGSiy7fLL4ZrGGZ+8jI=
modernc.org/libc v1.12.0/go.mod h1:2MH3DaF/gCU8i/UBiVE1VFRos4o523M7zipmwH8SIgQ=
modernc.org/libc v1.13.1/go.mod h1:npFeGWjmZTjFeWALQLrvklVmAxv4m80jnG3+xI8FdJk=
modernc.org/libc v1.13.2 h1:GCFjY9bmwDZ/TJC4OZOUWaNgxIxwb104C/QZrqpcVEA=
modernc.org/libc v1.13.2/go.mod h1:npFeGWjmZTjFeWALQLrvklVmAxv4m80jnG3+xI8FdJk=
modernc.org/mathutil v1.1.1/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E=
modernc.org/mathutil v1.2.2/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E=
modernc.org/mathutil v1.4.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E=
@@ -268,11 +345,11 @@ modernc.org/memory v1.0.5 h1:XRch8trV7GgvTec2i7jc33YlUI0RKVDBvZ5eZ5m8y14=
modernc.org/memory v1.0.5/go.mod h1:B7OYswTRnfGg+4tDH1t1OeUNnsy2viGTdME4tzd+IjM=
modernc.org/opt v0.1.1 h1:/0RX92k9vwVeDXj+Xn23DKp2VJubL7k8qNffND6qn3A=
modernc.org/opt v0.1.1/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0=
modernc.org/sqlite v1.13.0 h1:cwhUj0jTBgPjk/demWheV+T6xi6ifTfsGIFKFq0g3Ck=
modernc.org/sqlite v1.13.0/go.mod h1:2qO/6jZJrcQaxFUHxOwa6Q6WfiGSsiVj6GXX0Ker+Jg=
modernc.org/sqlite v1.14.4 h1:F3DRiVZKnCLqIQ0LhEGqBLnw9LcdADciCwCIHQ8bD5g=
modernc.org/sqlite v1.14.4/go.mod h1:LWtcO8JtBrt29KKmTqNNXDjAn36vHa/3nHvOYoVIAjc=
modernc.org/strutil v1.1.1 h1:xv+J1BXY3Opl2ALrBwyfEikFAj8pmqcpnfmuwUwcozs=
modernc.org/strutil v1.1.1/go.mod h1:DE+MQQ/hjKBZS2zNInV5hhcipt5rLPWkmpbGeW5mmdw=
modernc.org/tcl v1.5.9/go.mod h1:bcwjvBJ2u0exY6K35eAmxXBBij5kXb1dHlAWmfhqThE=
modernc.org/tcl v1.10.0/go.mod h1:WzWapmP/7dHVhFoyPpEaNSVTL8xtewhouN/cqSJ5A2s=
modernc.org/token v1.0.0 h1:a0jaWiNMDhDUtqOj09wvjWWAqd3q7WpBulmL9H2egsk=
modernc.org/token v1.0.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM=
modernc.org/z v1.1.2/go.mod h1:sj9T1AGBG0dm6SCVzldPOHWrif6XBpooJtbttMn1+Js=
modernc.org/z v1.2.21/go.mod h1:uXrObx4pGqXWIMliC5MiKuwAyMrltzwpteOFUP1PWCc=

84
main.go
View File

@@ -10,12 +10,12 @@ import (
// 下列插件可与 wdvxdr1123/ZeroBot v1.1.2 以上配合单独使用
// 插件控制
// webctrl "github.com/FloatTech/ZeroBot-Plugin/control/web" // web 后端控制
// webctrl "github.com/FloatTech/zbputils/control/web" // web 后端控制
// 词库类
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_atri" // ATRI词库
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_chat" // 基础词库
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_qingyunke" // 青云客
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_ai_reply" // 人工智能回复
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_atri" // ATRI词库
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_chat" // 基础词库
// 实用类
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_b14" // base16384加解密
@@ -27,18 +27,28 @@ import (
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_translation" // 翻译
// 娱乐类
// _ "github.com/FloatTech/ZeroBot-Plugin/plugin_wtf" // 鬼东西
_ "github.com/FloatTech/ZeroBot-Plugin-Gif" // 制图
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_ai_false" // 服务器监控
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_choose" // 选择困难症帮手
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_fortune" // 运势
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_hs" // 炉石
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_minecraft" // MCSManager
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_moyu" // 摸鱼
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_music" // 点歌
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_omikuji" // 浅草寺求签
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_reborn" // 投胎
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_shindan" // 测定
// _ "github.com/FloatTech/ZeroBot-Plugin/plugin_wtf" // 鬼东西
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_ai_false" // 服务器监控
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_book_review" // 哀伤雪刃吧推书记录
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_cangtoushi" // 藏头诗
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_choose" // 选择困难症帮手
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_chouxianghua" // 说抽象话
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_cpstory" // cp短打
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_curse" // 骂人
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_fortune" // 运势
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_funny" // 笑话
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_gif" // 制图
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_hs" // 炉石
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_juejuezi" // 绝绝子生成器
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_minecraft" // MCSManager
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_moyu" // 摸鱼
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_music" // 点歌
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_novel" // 铅笔小说网搜索
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_omikuji" // 浅草寺求签
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_reborn" // 投胎
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_score" // 分数
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_shadiao" // 沙雕app
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_shindan" // 测定
// b站相关
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_bilibili" // 查询b站用户信息
@@ -47,6 +57,8 @@ import (
// 二次元图片
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_acgimage" // 随机图片与AI点评
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_aiwife" // 随机老婆
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_coser" // 三次元小姐姐
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_danbooru" // DeepDanbooru二次元图标签识别
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_image_finder" // 关键字搜图
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_lolicon" // lolicon 随机图片
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_nativesetu" // 本地涩图
@@ -57,6 +69,7 @@ import (
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_vtb_quotation" // vtb语录
// 以下为内置依赖,勿动
"github.com/fumiama/go-registry"
"github.com/sirupsen/logrus"
zero "github.com/wdvxdr1123/ZeroBot"
"github.com/wdvxdr1123/ZeroBot/driver"
@@ -66,13 +79,17 @@ import (
var (
contents = []string{
"* OneBot + ZeroBot + Golang",
"* Version 1.2.1 - 2021-11-29 20:27:37 +0800 CST",
"* Version 1.2.3 - 2022-01-07 20:09:30 +0800 CST",
"* Copyright © 2020 - 2021 FloatTech. All Rights Reserved.",
"* Project: https://github.com/FloatTech/ZeroBot-Plugin",
}
nicks = []string{"ATRI", "atri", "亚托莉", "アトリ"}
banner = strings.Join(contents, "\n")
token *string
url *string
adana *string
prefix *string
reg = registry.NewRegReader("reilia.fumiama.top:32664", "fumiama")
)
func init() {
@@ -87,6 +104,9 @@ func init() {
token = flag.String("t", "", "Set AccessToken of WSClient.")
// 直接写死 URL 时,请更改下面第二个参数
url = flag.String("u", "ws://127.0.0.1:6700", "Set Url of WSClient.")
// 默认昵称
adana = flag.String("n", "椛椛", "Set default nickname.")
prefix = flag.String("p", "/", "Set command prefix.")
flag.Parse()
if *h {
@@ -110,25 +130,43 @@ func printBanner() {
fmt.Print(
"\n======================[ZeroBot-Plugin]======================",
"\n", banner, "\n",
"----------------------[ZeroBot-公告栏]----------------------",
"\n", getKanban(), "\n",
"============================================================\n",
)
}
func getKanban() string {
err := reg.Connect()
if err != nil {
return err.Error()
}
defer reg.Close()
text, err := reg.Get("ZeroBot-Plugin/kanban")
if err != nil {
return err.Error()
}
return text
}
func main() {
printBanner()
// 帮助
zero.OnFullMatchGroup([]string{"/help", ".help", "菜单"}, zero.OnlyToMe).SetBlock(true).FirstPriority().
Handle(func(ctx *zero.Ctx) {
ctx.SendChain(message.Text(banner, "\n可发送\"/服务详情\"查看 bot 功能"))
ctx.SendChain(message.Text(banner, "\n可发送\"/服务列表\"查看 bot 功能"))
})
zero.OnFullMatch("查看zbp公告", zero.OnlyToMe, zero.AdminPermission).SetBlock(true).FirstPriority().
Handle(func(ctx *zero.Ctx) {
ctx.SendChain(message.Text(getKanban()))
})
zero.RunAndBlock(
zero.Config{
NickName: []string{"椛椛", "ATRI", "atri", "亚托莉", "アトリ"},
CommandPrefix: "/",
NickName: append([]string{*adana}, nicks...),
CommandPrefix: *prefix,
// SuperUsers 某些功能需要主人权限,可通过以下两种方式修改
// "12345678", "87654321"通过代码写死的方式添加主人账号
// flag.Args()通过命令行参数的方式添加主人账号,无需修改下方任何代码
SuperUsers: append([]string{"12345678", "87654321"}, flag.Args()...),
// SuperUsers: []string{"12345678", "87654321"}, // 通过代码写死的方式添加主人账号
SuperUsers: flag.Args(), // 通过命令行参数的方式添加主人账号
Driver: []zero.Driver{driver.NewWebSocketClient(*url, *token)},
},
)

View File

@@ -4,13 +4,67 @@
package main
import (
"bytes"
"strings"
"github.com/sirupsen/logrus"
easy "github.com/t-tomalak/logrus-easy-formatter"
)
func init() {
// windows 不支持带颜色 log,故自定义格式
logrus.SetFormatter(&easy.Formatter{
LogFormat: "[%lvl%] %msg%\n",
})
// windows 带颜色 log 自定义格式
logrus.SetFormatter(&LogFormat{})
}
const (
colorCodePanic = "\x1b[1;31m" // color.Style{color.Bold, color.Red}.String()
colorCodeFatal = "\x1b[1;31m" // color.Style{color.Bold, color.Red}.String()
colorCodeError = "\x1b[31m" // color.Style{color.Red}.String()
colorCodeWarn = "\x1b[33m" // color.Style{color.Yellow}.String()
colorCodeInfo = "\x1b[37m" // color.Style{color.White}.String()
colorCodeDebug = "\x1b[32m" // color.Style{color.Green}.String()
colorCodeTrace = "\x1b[36m" // color.Style{color.Cyan}.String()
colorReset = "\x1b[0m"
)
// LogFormat specialize for zbp
type LogFormat struct{}
// Format implements logrus.Formatter
func (f LogFormat) Format(entry *logrus.Entry) ([]byte, error) {
buf := new(bytes.Buffer)
buf.WriteString(getLogLevelColorCode(entry.Level))
buf.WriteByte('[')
buf.WriteString(strings.ToUpper(entry.Level.String()))
buf.WriteString("] ")
buf.WriteString(entry.Message)
buf.WriteString(" \n")
buf.WriteString(colorReset)
return buf.Bytes(), nil
}
// getLogLevelColorCode 获取日志等级对应色彩code
func getLogLevelColorCode(level logrus.Level) string {
switch level {
case logrus.PanicLevel:
return colorCodePanic
case logrus.FatalLevel:
return colorCodeFatal
case logrus.ErrorLevel:
return colorCodeError
case logrus.WarnLevel:
return colorCodeWarn
case logrus.InfoLevel:
return colorCodeInfo
case logrus.DebugLevel:
return colorCodeDebug
case logrus.TraceLevel:
return colorCodeTrace
default:
return colorCodeInfo
}
}

View File

@@ -3,7 +3,6 @@ package acgimage
import (
"net/url"
"strconv"
"strings"
"time"
@@ -13,18 +12,17 @@ import (
"github.com/wdvxdr1123/ZeroBot/extension/rate"
"github.com/wdvxdr1123/ZeroBot/message"
"github.com/FloatTech/ZeroBot-Plugin/control"
"github.com/FloatTech/ZeroBot-Plugin/utils/file"
control "github.com/FloatTech/zbputils/control"
"github.com/FloatTech/zbputils/web"
)
const (
lolipxy = "https://sayuri.fumiama.top/dice?class=0&loli=true&r18=true"
apihead = "https://sayuri.fumiama.top/img?path="
lolipxy = "https://sayuri.fumiama.top/dice?class=0&loli=true&r18=true"
apihead = "https://sayuri.fumiama.top/img?path="
apiheadv6 = "http://aikae.v6.army:62002/img?arg=get&name="
)
var (
datapath = file.BOT_PATH + "/data/acgimage/"
cacheuri = "file:///" + datapath + "cache"
// r18有一定保护一般不会发出图片
randapi = "&loli=true&r18=true"
msgof = make(map[int64]int64)
@@ -33,8 +31,6 @@ var (
)
func init() { // 插件主体
// 初始化 classify
classify.Init(datapath)
engine := control.Register("acgimage", &control.Options{
DisableOnDefault: false,
Help: "随机图片与AI点评\n" +
@@ -57,14 +53,12 @@ func init() { // 插件主体
// 有保护的随机图片
engine.OnFullMatch("随机图片", zero.OnlyGroup).SetBlock(true).SetPriority(24).
Handle(func(ctx *zero.Ctx) {
if classify.CanVisit(5) && limit.Load(ctx.Event.UserID).Acquire() {
go func() {
class, lastvisit, dhash, comment := classify.Classify(randapi, false)
replyClass(ctx, dhash, class, false, lastvisit, comment)
}()
} else {
ctx.SendChain(message.Text("你太快啦!"))
if limit.Load(ctx.Event.UserID).Acquire() {
class, dhash, comment, _ := classify.Classify(randapi, true)
replyClass(ctx, class, dhash, comment, false)
return
}
ctx.SendChain(message.Text("你太快啦!"))
})
// 直接随机图片无r18保护后果自负。如果出r18图可尽快通过发送"太涩了"撤回
engine.OnFullMatch("直接随机", zero.OnlyGroup, zero.AdminPermission).SetBlock(true).SetPriority(24).
@@ -86,24 +80,31 @@ func init() { // 插件主体
// 撤回最后的直接随机图片
engine.OnFullMatch("太涩了").SetBlock(true).SetPriority(24).
Handle(func(ctx *zero.Ctx) {
go cancel(ctx)
msg, ok := msgof[ctx.Event.GroupID]
if ok {
ctx.DeleteMessage(msg)
delete(msgof, ctx.Event.GroupID)
}
})
// 上传一张图进行评价
engine.OnKeywordGroup([]string{"评价图片"}, zero.OnlyGroup, picture.CmdMatch, picture.MustGiven).SetBlock(true).SetPriority(24).
Handle(func(ctx *zero.Ctx) {
ctx.SendChain(message.Text("少女祈祷中..."))
for _, url := range ctx.State["image_url"].([]string) {
go func(target string) {
class, lastvisit, dhash, comment := classify.Classify(target, true)
replyClass(ctx, dhash, class, true, lastvisit, comment)
}(url)
class, dhash, comment, _ := classify.Classify(url, true)
replyClass(ctx, class, dhash, comment, true)
break
}
})
engine.OnRegex(`^给你点提示哦:(.*)$`, zero.OnlyPrivate).SetBlock(true).SetPriority(20).
Handle(func(ctx *zero.Ctx) {
dhash := ctx.State["regex_matched"].([]string)[1]
if len(dhash) == 5*3 {
ctx.SendChain(message.Image(apihead + dhash))
if web.IsSupportIPv6 {
ctx.SendChain(message.Image(apiheadv6 + dhash + ".webp"))
} else {
ctx.SendChain(message.Image(apihead + dhash))
}
}
})
}
@@ -112,32 +113,32 @@ func setLastMsg(id int64, msg int64) {
msgof[id] = msg
}
func cancel(ctx *zero.Ctx) {
msg, ok := msgof[ctx.Event.GroupID]
if ok {
ctx.DeleteMessage(msg)
delete(msgof, ctx.Event.GroupID)
func replyClass(ctx *zero.Ctx, class int, dhash string, comment string, isupload bool) {
b14, err := url.QueryUnescape(dhash)
if err != nil {
return
}
}
func replyClass(ctx *zero.Ctx, dhash string, class int, noimg bool, lv int64, comment string) {
img := message.Image(cacheuri + strconv.FormatInt(lv, 10))
if class > 5 {
if dhash != "" && !noimg {
b14, err3 := url.QueryUnescape(dhash)
if err3 == nil {
ctx.SendChain(message.Text(comment + "\n给你点提示哦" + b14))
ctx.Event.GroupID = 0
ctx.SendChain(img)
}
} else {
ctx.SendChain(message.Text(comment))
}
var img message.MessageSegment
if web.IsSupportIPv6 {
img = message.Image(apiheadv6 + dhash + ".webp")
} else {
if !noimg {
ctx.SendChain(img, message.Text(comment))
} else {
ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Text(comment))
}
img = message.Image(apihead + dhash)
}
if class > 5 {
if dhash != "" && !isupload {
ctx.SendChain(message.Text(comment + "\n给你点提示哦" + b14))
ctx.Event.GroupID = 0
ctx.SendChain(img)
return
}
ctx.SendChain(message.Text(comment))
return
}
if isupload {
ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Text(comment))
return
}
ctx.SendChain(img, message.Text(comment))
}

View File

@@ -2,15 +2,15 @@
package aifalse
import (
"fmt"
"math"
"os"
"time"
"github.com/shirou/gopsutil/cpu"
"github.com/shirou/gopsutil/disk"
"github.com/shirou/gopsutil/mem"
"github.com/FloatTech/ZeroBot-Plugin/control"
control "github.com/FloatTech/zbputils/control"
"github.com/shirou/gopsutil/v3/cpu"
"github.com/shirou/gopsutil/v3/disk"
"github.com/shirou/gopsutil/v3/mem"
zero "github.com/wdvxdr1123/ZeroBot"
"github.com/wdvxdr1123/ZeroBot/message"
@@ -25,9 +25,9 @@ func init() { // 插件主体
engine.OnFullMatchGroup([]string{"检查身体", "自检", "启动自检", "系统状态"}, zero.AdminPermission).SetBlock(true).
Handle(func(ctx *zero.Ctx) {
ctx.SendChain(message.Text(
"* CPU占用: ", cpuPercent(), "%\n",
"* RAM占用: ", memPercent(), "%\n",
"* 硬盘活动率: ", diskPercent(), "%",
"* CPU占用: ", cpuPercent(), "%\n",
"* RAM占用: ", memPercent(), "%\n",
"* 硬盘使用: ", diskPercent(),
),
)
})
@@ -43,17 +43,37 @@ func init() { // 插件主体
}
func cpuPercent() float64 {
percent, _ := cpu.Percent(time.Second, false)
percent, err := cpu.Percent(time.Second, false)
if err != nil {
return -1
}
return math.Round(percent[0])
}
func memPercent() float64 {
memInfo, _ := mem.VirtualMemory()
memInfo, err := mem.VirtualMemory()
if err != nil {
return -1
}
return math.Round(memInfo.UsedPercent)
}
func diskPercent() float64 {
parts, _ := disk.Partitions(true)
diskInfo, _ := disk.Usage(parts[0].Mountpoint)
return math.Round(diskInfo.UsedPercent)
func diskPercent() string {
parts, err := disk.Partitions(true)
if err != nil {
return err.Error()
}
msg := ""
for _, p := range parts {
diskInfo, err := disk.Usage(p.Mountpoint)
if err != nil {
msg += "\n - " + err.Error()
continue
}
pc := uint(math.Round(diskInfo.UsedPercent))
if pc > 0 {
msg += fmt.Sprintf("\n - %s(%dM) %d%%", p.Mountpoint, diskInfo.Total/1024/1024, pc)
}
}
return msg
}

95
plugin_ai_reply/main.go Normal file
View File

@@ -0,0 +1,95 @@
package aireply
import (
"errors"
"time"
"github.com/FloatTech/AnimeAPI/aireply"
control "github.com/FloatTech/zbputils/control"
zero "github.com/wdvxdr1123/ZeroBot"
"github.com/wdvxdr1123/ZeroBot/extension/rate"
"github.com/wdvxdr1123/ZeroBot/message"
)
const (
serviceName = "aireply"
prio = 256
)
var modes = [...]string{"青云客", "小爱"}
func init() { // 插件主体
bucket := rate.NewManager(time.Minute, 20) // 接口回复限速器
engine := control.Register(serviceName, &control.Options{
DisableOnDefault: false,
Help: "人工智能回复\n" +
"- @Bot 任意文本(任意一句话回复)\n- 设置回复模式[青云客|小爱]\n- ",
})
// 回复 @和包括名字
engine.OnMessage(zero.OnlyToMe).SetBlock(true).SetPriority(prio).
Handle(func(ctx *zero.Ctx) {
aireply := aireply.NewAIReply(getReplyMode(ctx))
if !bucket.Load(ctx.Event.UserID).Acquire() {
// 频繁触发,不回复
return
}
reply := aireply.Talk(ctx.ExtractPlainText())
// 回复
time.Sleep(time.Second * 1)
if ctx.Event.MessageType == "group" {
reply = append(reply, message.Reply(ctx.Event.MessageID))
ctx.Send(reply)
return
}
ctx.Send(reply)
})
engine.OnPrefix(`设置回复模式`).SetBlock(true).SetPriority(20).
Handle(func(ctx *zero.Ctx) {
param := ctx.State["args"].(string)
err := setReplyMode(ctx, param)
if err != nil {
ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Text(err))
return
}
ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Text("成功"))
})
}
func setReplyMode(ctx *zero.Ctx, name string) error {
gid := ctx.Event.GroupID
if gid == 0 {
gid = -ctx.Event.UserID
}
var ok bool
var index int64
for i, s := range modes {
if s == name {
ok = true
index = int64(i)
break
}
}
if !ok {
return errors.New("no such mode")
}
m, ok := control.Lookup(serviceName)
if !ok {
return errors.New("no such plugin")
}
return m.SetData(gid, index)
}
func getReplyMode(ctx *zero.Ctx) (name string) {
gid := ctx.Event.GroupID
if gid == 0 {
gid = -ctx.Event.UserID
}
m, ok := control.Lookup(serviceName)
if ok {
index := m.GetData(gid)
if int(index) < len(modes) {
return modes[index]
}
}
return "青云客"
}

32
plugin_ai_reply/tts.go Normal file
View File

@@ -0,0 +1,32 @@
package aireply
import (
"time"
zero "github.com/wdvxdr1123/ZeroBot"
"github.com/wdvxdr1123/ZeroBot/extension/rate"
"github.com/FloatTech/AnimeAPI/aireply"
"github.com/FloatTech/AnimeAPI/mockingbird"
control "github.com/FloatTech/zbputils/control"
)
const ttsprio = 250
func init() {
limit := rate.NewManager(time.Second*10, 1)
control.Register("mockingbird", &control.Options{
DisableOnDefault: false,
Help: "拟声鸟\n- @Bot 任意文本(任意一句话回复)",
}).OnMessage(zero.OnlyToMe, func(ctx *zero.Ctx) bool {
return limit.Load(ctx.Event.UserID).Acquire()
}).SetBlock(true).SetPriority(ttsprio).
Handle(func(ctx *zero.Ctx) {
msg := ctx.ExtractPlainText()
r := aireply.NewAIReply(getReplyMode(ctx))
ctx.SendChain(mockingbird.Speak(ctx.Event.UserID, func() string {
return r.TalkPlain(msg)
}))
})
}

View File

@@ -6,10 +6,9 @@ import (
"math/rand"
"time"
control "github.com/FloatTech/zbputils/control"
zero "github.com/wdvxdr1123/ZeroBot"
"github.com/wdvxdr1123/ZeroBot/message"
"github.com/FloatTech/ZeroBot-Plugin/control"
)
const (

Binary file not shown.

Before

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 149 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 693 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 91 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 121 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 125 KiB

View File

@@ -12,17 +12,17 @@ import (
zero "github.com/wdvxdr1123/ZeroBot"
"github.com/wdvxdr1123/ZeroBot/message"
"github.com/FloatTech/ZeroBot-Plugin/control"
"github.com/FloatTech/ZeroBot-Plugin/utils/process"
control "github.com/FloatTech/zbputils/control"
"github.com/FloatTech/zbputils/process"
)
const (
// 服务名
servicename = "atri"
// ATRI 所有命令的优先级
prio = 5
prio = 15
// ATRI 表情的 codechina 镜像
res = "https://codechina.csdn.net/u011570312/ZeroBot-Plugin/-/raw/master/plugin_atri/"
res = "https://gitcode.net/u011570312/zbpdata/-/raw/main/Atri/"
)
func init() { // 插件主体

View File

@@ -1,15 +1,15 @@
// Package b14coder base16384 与 tea 加解密
package b14coder
import (
"unsafe"
control "github.com/FloatTech/zbputils/control"
base14 "github.com/fumiama/go-base16384"
tea "github.com/fumiama/gofastTEA"
zero "github.com/wdvxdr1123/ZeroBot"
"github.com/wdvxdr1123/ZeroBot/message"
"github.com/wdvxdr1123/ZeroBot/utils/helper"
"github.com/FloatTech/ZeroBot-Plugin/control"
)
func init() {

View File

@@ -5,7 +5,7 @@ import (
"net/http"
"time"
"github.com/FloatTech/ZeroBot-Plugin/control"
control "github.com/FloatTech/zbputils/control"
"github.com/fumiama/cron"
zero "github.com/wdvxdr1123/ZeroBot"
"github.com/wdvxdr1123/ZeroBot/message"

View File

@@ -5,11 +5,10 @@ import (
"io/ioutil"
"net/http"
control "github.com/FloatTech/zbputils/control"
"github.com/tidwall/gjson"
zero "github.com/wdvxdr1123/ZeroBot"
"github.com/wdvxdr1123/ZeroBot/message"
"github.com/FloatTech/ZeroBot-Plugin/control"
)
var engine = control.Register("bilibili", &control.Options{

View File

@@ -0,0 +1,44 @@
// Package bookreview 书评
package bookreview
import (
log "github.com/sirupsen/logrus"
zero "github.com/wdvxdr1123/ZeroBot"
"github.com/wdvxdr1123/ZeroBot/message"
"github.com/wdvxdr1123/ZeroBot/utils/helper"
control "github.com/FloatTech/zbputils/control"
"github.com/FloatTech/zbputils/txt2img"
)
func init() {
engine := control.Register("bookreview", &control.Options{
DisableOnDefault: false,
Help: "哀伤雪刃推书记录\n- 书评[xxx]\n- 随机书评",
})
// 中文、英文、数字但不包括下划线等符号
engine.OnRegex("^书评([\u4E00-\u9FA5A-Za-z0-9]{1,25})$").SetBlock(true).
Handle(func(ctx *zero.Ctx) {
b := getBookReviewByKeyword(ctx.State["regex_matched"].([]string)[1])
data, err := txt2img.RenderToBase64(b.BookReview, txt2img.FontFile, 400, 20)
if err != nil {
log.Println("err:", err)
}
if id := ctx.SendChain(message.Image("base64://" + helper.BytesToString(data))); id == 0 {
ctx.SendChain(message.Text("ERROR: 可能被风控了"))
}
})
engine.OnFullMatch("随机书评").SetBlock(true).
Handle(func(ctx *zero.Ctx) {
br := getRandomBookReview()
data, err := txt2img.RenderToBase64(br.BookReview, txt2img.FontFile, 400, 20)
if err != nil {
log.Println("err:", err)
}
if id := ctx.SendChain(message.Image("base64://" + helper.BytesToString(data))); id == 0 {
ctx.SendChain(message.Text("ERROR: 可能被风控了"))
}
})
}

View File

@@ -0,0 +1,35 @@
package bookreview
import (
"os"
log "github.com/sirupsen/logrus"
"github.com/FloatTech/zbputils/file"
"github.com/FloatTech/zbputils/process"
"github.com/FloatTech/zbputils/sql"
)
const dbpath = "data/BookReview/"
const dbfile = dbpath + "bookreview.db"
var db = &sql.Sqlite{DBPath: dbfile}
// 加载数据库
func init() {
go func() {
process.SleepAbout1sTo2s()
// os.RemoveAll(dbpath)
_ = os.MkdirAll(dbpath, 0755)
_, _ = file.GetLazyData(dbfile, false, true)
err := db.Create("bookreview", &book{})
if err != nil {
panic(err)
}
n, err := db.Count("bookreview")
if err != nil {
panic(err)
}
log.Printf("[bookreview]读取%d条书评", n)
}()
}

View File

@@ -0,0 +1,17 @@
package bookreview
type book struct {
ID uint64 `db:"id"`
BookReview string `db:"bookreview"`
}
// 暂时随机选择一个书评
func getBookReviewByKeyword(keyword string) (b book) {
_ = db.Find("bookreview", &b, "where bookreview LIKE '%"+keyword+"%'")
return
}
func getRandomBookReview() (b book) {
_ = db.Pick("bookreview", &b)
return
}

View File

@@ -0,0 +1,122 @@
// Package cangtoushi 藏头诗
package cangtoushi
import (
"fmt"
"io"
"net/http"
"net/http/cookiejar"
"net/url"
"strings"
control "github.com/FloatTech/zbputils/control"
"github.com/antchfx/htmlquery"
log "github.com/sirupsen/logrus"
zero "github.com/wdvxdr1123/ZeroBot"
"github.com/wdvxdr1123/ZeroBot/message"
"github.com/wdvxdr1123/ZeroBot/utils/helper"
)
const (
loginURL = "https://www.shicimingju.com/cangtoushi/"
searchURL = "https://www.shicimingju.com/cangtoushi/index.html"
ua = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36"
referer = "https://www.shicimingju.com/cangtoushi/index.html"
prio = 20
)
var (
gCurCookieJar *cookiejar.Jar
csrf string
)
func init() {
engine := control.Register("cangtoushi", &control.Options{
DisableOnDefault: false,
Help: "藏头诗\n" +
"- 藏头诗[xxx]\n- 藏尾诗[xxx]",
})
engine.OnRegex("藏头诗([\u4E00-\u9FA5]{3,10})").SetBlock(true).SetPriority(prio).Handle(func(ctx *zero.Ctx) {
kw := ctx.State["regex_matched"].([]string)[1]
login()
data, err := search(kw, "7", "0")
if err != nil {
log.Errorln("[cangtoushi]:", err)
}
text := dealHTML(helper.BytesToString(data))
ctx.SendChain(message.Text(text))
})
engine.OnRegex("藏尾诗([\u4E00-\u9FA5]{3,10})").SetBlock(true).SetPriority(prio).Handle(func(ctx *zero.Ctx) {
kw := ctx.State["regex_matched"].([]string)[1]
login()
data, err := search(kw, "7", "2")
if err != nil {
log.Errorln("[cangtoushi]:", err)
}
text := dealHTML(helper.BytesToString(data))
ctx.SendChain(message.Text(text))
})
}
func login() {
gCurCookieJar, _ = cookiejar.New(nil)
client := &http.Client{
Jar: gCurCookieJar,
}
request, err := http.NewRequest("GET", loginURL, nil)
if err != nil {
log.Errorln("[cangtoushi]:", err)
}
request.Header.Add("User-Agent", ua)
response, err := client.Do(request)
if err != nil {
log.Errorln("[cangtoushi]:", err)
}
data, err := io.ReadAll(response.Body)
if err != nil {
log.Errorln("[cangtoushi]:", err)
}
response.Body.Close()
doc, err := htmlquery.Parse(strings.NewReader(helper.BytesToString(data)))
if err != nil {
log.Errorln("[cangtoushi]:", err)
}
csrf = htmlquery.SelectAttr(htmlquery.FindOne(doc, "//input[@name='_csrf']"), "value")
}
func search(kw, zishu, position string) (data []byte, err error) {
postStr := fmt.Sprintf("_csrf=%s&kw=%s&zishu=%s&position=%s", url.QueryEscape(csrf), url.QueryEscape(kw), zishu, position)
log.Println("postStr:", postStr)
client := &http.Client{
Jar: gCurCookieJar,
}
request, err := http.NewRequest("POST", searchURL, strings.NewReader(postStr))
if err != nil {
log.Errorln("[cangtoushi]:", err)
}
request.Header.Add("Referer", referer)
request.Header.Add("User-Agent", ua)
request.Header.Add("Content-Type", "application/x-www-form-urlencoded")
response, err := client.Do(request)
if err != nil {
log.Errorln("[cangtoushi]:", err)
}
data, err = io.ReadAll(response.Body)
if err != nil {
log.Errorln("[cangtoushi]:", err)
}
response.Body.Close()
return
}
func dealHTML(data string) (text string) {
doc, err := htmlquery.Parse(strings.NewReader(data))
if err != nil {
log.Errorln("[cangtoushi]:", err)
}
text = htmlquery.InnerText(htmlquery.FindOne(doc, "//div[@class='card']/div[@class='card']"))
text = strings.ReplaceAll(text, " ", "")
text = strings.Replace(text, "\n", "", 1)
return text
}

View File

@@ -6,23 +6,31 @@ import (
"strconv"
"time"
control "github.com/FloatTech/zbputils/control"
zero "github.com/wdvxdr1123/ZeroBot"
"github.com/wdvxdr1123/ZeroBot/extension/rate"
"github.com/wdvxdr1123/ZeroBot/message"
"github.com/FloatTech/ZeroBot-Plugin/control"
)
var poke = rate.NewManager(time.Minute*5, 8) // 戳一戳
const (
dbpath = "data/Chat/"
dbfile = dbpath + "kimoi.json"
prio = 10
)
var engine = control.Register("chat", &control.Options{
DisableOnDefault: false,
Help: "chat\n- [BOT名字]\n- [戳一戳BOT]\n- 空调开\n- 空调关\n- 群温度\n- 设置温度[正整数]",
})
var (
poke = rate.NewManager(time.Minute*5, 8) // 戳一戳
engine = control.Register("chat", &control.Options{
DisableOnDefault: false,
Help: "chat\n- [BOT名字]\n- [戳一戳BOT]\n- 空调开\n- 空调关\n- 群温度\n- 设置温度[正整数]\n- mua|啾咪|摸|上你|傻|裸|贴|老婆|抱|亲|一下|咬|操|123|进去|调教|搓|让|捏|挤|略|呐|原味|胖次|内裤|内衣|衣服|ghs|批|憨批|kkp|咕|骚|喜欢|suki|好き|看|不能|砸了|透|口我|草我|自慰|onani|オナニー|炸了|色图|涩图|告白|对不起|回来|吻|软|壁咚|掰开|女友|是|喵|嗷呜|叫|拜|佬|awsl|臭|香|腿|张开|脚|脸|头发|手|pr|舔|小穴|腰|诶嘿嘿|可爱|扭蛋|鼻|眼|色气|推|床|举|手冲|饿|变|敲|爬|怕|冲|射|不穿|迫害|猫粮|揪尾巴|薄荷|早|晚安|揉|榨|掐|胸|奶子|欧派|嫩|蹭|牵手|握手|拍照|w|睡不着|欧尼酱|哥|爱你|过来|自闭|打不过|么么哒|很懂|膝枕|累了|安慰|洗澡|一起睡觉|一起|多大|姐姐|糖|嗦|牛子|🐂子|🐮子|嫌弃|紧|baka|笨蛋|插|插进来|屁股|翘|翘起来|抬|抬起|爸|傲娇|rua|咕噜咕噜|咕噜|上床|做爱|吃掉|吃|揪|种草莓|种草|掀|妹|病娇|嘻",
})
kimomap = make(kimo, 256)
chatList = make([]string, 0, 256)
)
func init() { // 插件主体
// 被喊名字
engine.OnFullMatch("", zero.OnlyToMe).SetBlock(true).FirstPriority().
engine.OnFullMatch("", zero.OnlyToMe).SetBlock(true).SetPriority(prio).
Handle(func(ctx *zero.Ctx) {
var nickname = zero.BotConfig.NickName[0]
time.Sleep(time.Second * 1)
@@ -36,7 +44,7 @@ func init() { // 插件主体
))
})
// 戳一戳
engine.On("notice/notify/poke", zero.OnlyToMe).SetBlock(false).FirstPriority().
engine.On("notice/notify/poke", zero.OnlyToMe).SetBlock(false).SetPriority(prio).
Handle(func(ctx *zero.Ctx) {
var nickname = zero.BotConfig.NickName[0]
switch {
@@ -55,18 +63,18 @@ func init() { // 插件主体
// 群空调
var AirConditTemp = map[int64]int{}
var AirConditSwitch = map[int64]bool{}
engine.OnFullMatch("空调开").SetBlock(true).FirstPriority().
engine.OnFullMatch("空调开").SetBlock(true).SetPriority(prio).
Handle(func(ctx *zero.Ctx) {
AirConditSwitch[ctx.Event.GroupID] = true
ctx.SendChain(message.Text("❄️哔~"))
})
engine.OnFullMatch("空调关").SetBlock(true).FirstPriority().
engine.OnFullMatch("空调关").SetBlock(true).SetPriority(prio).
Handle(func(ctx *zero.Ctx) {
AirConditSwitch[ctx.Event.GroupID] = false
delete(AirConditTemp, ctx.Event.GroupID)
ctx.SendChain(message.Text("💤哔~"))
})
engine.OnRegex(`设置温度(\d+)`).SetBlock(true).FirstPriority().
engine.OnRegex(`设置温度(\d+)`).SetBlock(true).SetPriority(prio).
Handle(func(ctx *zero.Ctx) {
if _, exist := AirConditTemp[ctx.Event.GroupID]; !exist {
AirConditTemp[ctx.Event.GroupID] = 26
@@ -85,7 +93,7 @@ func init() { // 插件主体
))
}
})
engine.OnFullMatch(`群温度`).SetBlock(true).FirstPriority().
engine.OnFullMatch(`群温度`).SetBlock(true).SetPriority(prio).
Handle(func(ctx *zero.Ctx) {
if _, exist := AirConditTemp[ctx.Event.GroupID]; !exist {
AirConditTemp[ctx.Event.GroupID] = 26
@@ -102,4 +110,13 @@ func init() { // 插件主体
))
}
})
initChatList(func() {
engine.OnFullMatchGroup(chatList, zero.OnlyToMe).SetBlock(true).SetPriority(prio).Handle(
func(ctx *zero.Ctx) {
key := ctx.MessageString()
val := *kimomap[key]
text := val[rand.Intn(len(val))]
ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Text(text))
})
})
}

33
plugin_chat/data.go Normal file
View File

@@ -0,0 +1,33 @@
package chat
import (
"encoding/json"
"os"
"github.com/sirupsen/logrus"
"github.com/FloatTech/zbputils/file"
"github.com/FloatTech/zbputils/process"
)
type kimo = map[string]*[]string
func initChatList(postinit func()) {
go func() {
process.SleepAbout1sTo2s()
_ = os.MkdirAll(dbpath, 0755)
data, err := file.GetLazyData(dbfile, true, true)
if err != nil {
panic(err)
}
err = json.Unmarshal(data, &kimomap)
if err != nil {
panic(err)
}
for k := range kimomap {
chatList = append(chatList, k)
}
logrus.Infoln("[chat]加载", len(chatList), "条kimoi")
postinit()
}()
}

View File

@@ -6,10 +6,9 @@ import (
"strconv"
"strings"
control "github.com/FloatTech/zbputils/control"
zero "github.com/wdvxdr1123/ZeroBot"
"github.com/wdvxdr1123/ZeroBot/message"
"github.com/FloatTech/ZeroBot-Plugin/control"
)
func init() {

View File

@@ -0,0 +1,42 @@
// Package chouxianghua 抽象话转化
package chouxianghua
import (
control "github.com/FloatTech/zbputils/control"
zero "github.com/wdvxdr1123/ZeroBot"
"github.com/wdvxdr1123/ZeroBot/message"
)
const prio = 10
func init() {
control.Register("chouxianghua", &control.Options{
DisableOnDefault: false,
Help: "抽象话\n- 抽象翻译xxx",
}).OnRegex("^抽象翻译((\\s|[\\r\\n]|[\\p{Han}\\p{P}A-Za-z0-9])+)$").SetBlock(true).SetPriority(prio).
Handle(func(ctx *zero.Ctx) {
r := cx(ctx.State["regex_matched"].([]string)[1])
ctx.SendChain(message.Text(r))
})
}
func cx(s string) (r string) {
h := []rune(s)
for i := 0; i < len(h); i++ {
if i < len(h)-1 {
e := getEmojiByPronun(getPronunByDWord(h[i], h[i+1]))
if e != "" {
r += e
i++
continue
}
}
e := getEmojiByPronun(getPinyinByWord(string(h[i])))
if e != "" {
r += e
continue
}
r += string(h[i])
}
return
}

View File

@@ -0,0 +1,37 @@
package chouxianghua
import (
"os"
log "github.com/sirupsen/logrus"
"github.com/FloatTech/zbputils/file"
"github.com/FloatTech/zbputils/process"
"github.com/FloatTech/zbputils/sql"
)
const (
dbpath = "data/ChouXiangHua/"
dbfile = dbpath + "cxh.db"
)
var db = &sql.Sqlite{DBPath: dbfile}
// 加载数据库
func init() {
go func() {
process.SleepAbout1sTo2s()
// os.RemoveAll(dbpath)
_ = os.MkdirAll(dbpath, 0755)
_, _ = file.GetLazyData(dbfile, false, true)
err := db.Create("pinyin", &pinyin{})
if err != nil {
panic(err)
}
n, err := db.Count("pinyin")
if err != nil {
panic(err)
}
log.Printf("[chouxianghua]读取%d条拼音", n)
}()
}

View File

@@ -0,0 +1,26 @@
package chouxianghua
type pinyin struct {
Word string `db:"word"`
Pronun string `db:"pronunciation"`
}
type emoji struct {
Pronun string `db:"pronunciation"`
Emoji string `db:"emoji"`
}
func getPinyinByWord(word string) string {
var p pinyin
_ = db.Find("pinyin", &p, "where word = '"+word+"'")
return p.Pronun
}
func getPronunByDWord(w0, w1 rune) string {
return getPinyinByWord(string(w0)) + getPinyinByWord(string(w1))
}
func getEmojiByPronun(pronun string) string {
var e emoji
_ = db.Find("emoji", &e, "where pronunciation = '"+pronun+"'")
return e.Emoji
}

67
plugin_coser/coser.go Normal file
View File

@@ -0,0 +1,67 @@
// Package coser images
package coser
import (
"time"
"github.com/tidwall/gjson"
log "github.com/sirupsen/logrus"
zero "github.com/wdvxdr1123/ZeroBot"
"github.com/wdvxdr1123/ZeroBot/extension/rate"
"github.com/wdvxdr1123/ZeroBot/message"
"github.com/wdvxdr1123/ZeroBot/utils/helper"
control "github.com/FloatTech/zbputils/control"
"github.com/FloatTech/zbputils/web"
)
var (
engine = control.Register("coser", &control.Options{
DisableOnDefault: false,
Help: "三次元小姐姐\n- coser",
})
prio = 20
ua = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.93 Safari/537.36"
coserURL = "http://ovooa.com/API/cosplay/api.php"
limit = rate.NewManager(time.Minute, 5)
)
func init() {
engine.OnFullMatch("coser", zero.OnlyGroup).SetBlock(true).SetPriority(prio).
Handle(func(ctx *zero.Ctx) {
if !limit.Load(ctx.Event.GroupID).Acquire() {
ctx.SendChain(message.Text("请稍后重试0x0..."))
return
}
ctx.SendChain(message.Text("少女祈祷中......"))
data, err := web.ReqWith(coserURL, "GET", "", ua)
if err != nil {
log.Println("err为:", err)
}
var m message.Message
text := gjson.Get(helper.BytesToString(data), "data.Title").String()
m = append(m,
message.CustomNode(
ctx.Event.Sender.NickName,
ctx.Event.UserID,
text,
))
gjson.Get(helper.BytesToString(data), "data.data").ForEach(func(_, value gjson.Result) bool {
imgcq := `[CQ:image,file=` + value.String() + `]`
m = append(m,
message.CustomNode(
ctx.Event.Sender.NickName,
ctx.Event.UserID,
imgcq),
)
return true
})
if id := ctx.SendGroupForwardMessage(
ctx.Event.GroupID,
m).Get("message_id").Int(); id == 0 {
ctx.SendChain(message.Text("ERROR: 可能被风控了"))
}
})
}

49
plugin_cpstory/cpstory.go Normal file
View File

@@ -0,0 +1,49 @@
// Package cpstory cp短打
package cpstory
import (
"strings"
zero "github.com/wdvxdr1123/ZeroBot"
"github.com/wdvxdr1123/ZeroBot/message"
control "github.com/FloatTech/zbputils/control"
"github.com/FloatTech/zbputils/ctxext"
"github.com/FloatTech/zbputils/math"
)
const (
prio = 20
)
func init() {
engine := control.Register("cpstory", &control.Options{
DisableOnDefault: false,
Help: "cp短打\n- 组cp[@xxx][@xxx]\n- 组cp大老师 雪乃",
})
engine.OnRegex("^组cp.*?(\\d+).*?(\\d+)", zero.OnlyGroup).SetBlock(true).SetPriority(prio).Handle(func(ctx *zero.Ctx) {
cs := getRandomCpStory()
gong := ctxext.CardOrNickName(ctx, math.Str2Int64(ctx.State["regex_matched"].([]string)[1]))
shou := ctxext.CardOrNickName(ctx, math.Str2Int64(ctx.State["regex_matched"].([]string)[2]))
text := strings.ReplaceAll(cs.Story, "<攻>", gong)
text = strings.ReplaceAll(text, "<受>", shou)
text = strings.ReplaceAll(text, cs.Gong, gong)
text = strings.ReplaceAll(text, cs.Shou, gong)
ctx.SendChain(message.Text(text))
})
engine.OnPrefix("组cp").SetBlock(true).SetPriority(prio + 1).Handle(func(ctx *zero.Ctx) {
cs := getRandomCpStory()
params := strings.Split(ctx.State["args"].(string), " ")
if len(params) < 2 {
ctx.SendChain(message.Text(ctx.Event.MessageID), message.Text("请用空格分开两个人名"))
} else {
gong := params[0]
shou := params[1]
text := strings.ReplaceAll(cs.Story, "<攻>", gong)
text = strings.ReplaceAll(text, "<受>", shou)
text = strings.ReplaceAll(text, cs.Gong, gong)
text = strings.ReplaceAll(text, cs.Shou, gong)
ctx.SendChain(message.Text(text))
}
})
}

37
plugin_cpstory/data.go Normal file
View File

@@ -0,0 +1,37 @@
package cpstory
import (
"os"
log "github.com/sirupsen/logrus"
"github.com/FloatTech/zbputils/file"
"github.com/FloatTech/zbputils/process"
"github.com/FloatTech/zbputils/sql"
)
const (
dbpath = "data/CpStory/"
dbfile = dbpath + "cp.db"
)
var db = &sql.Sqlite{DBPath: dbfile}
// 加载数据库
func init() {
go func() {
process.SleepAbout1sTo2s()
// os.RemoveAll(dbpath)
_ = os.MkdirAll(dbpath, 0755)
_, _ = file.GetLazyData(dbfile, false, true)
err := db.Create("cp_story", &cpstory{})
if err != nil {
panic(err)
}
n, err := db.Count("cp_story")
if err != nil {
panic(err)
}
log.Printf("[cpstory]读取%d条故事", n)
}()
}

13
plugin_cpstory/model.go Normal file
View File

@@ -0,0 +1,13 @@
package cpstory
type cpstory struct {
ID int64 `db:"id"`
Gong string `db:"gong"`
Shou string `db:"shou"`
Story string `db:"story"`
}
func getRandomCpStory() (cs cpstory) {
_ = db.Pick("cp_story", &cs)
return
}

52
plugin_curse/curse.go Normal file
View File

@@ -0,0 +1,52 @@
// Package curse 骂人插件(求骂,自卫)
package curse
import (
"time"
zero "github.com/wdvxdr1123/ZeroBot"
"github.com/wdvxdr1123/ZeroBot/extension/rate"
"github.com/wdvxdr1123/ZeroBot/message"
control "github.com/FloatTech/zbputils/control"
"github.com/FloatTech/zbputils/process"
)
const (
prio = 10
minLevel = "min"
maxLevel = "max"
)
var (
engine = control.Register("curse", &control.Options{
DisableOnDefault: false,
Help: "骂人(求骂,自卫)\n- 骂我\n- 大力骂我\n- @bot 他妈|公交车|你妈|操|屎|去死|快死|日|逼|尼玛|艾滋|癌症|有病|戴套|啊对对对|烦你|你爹|屮|tui|cnm",
})
limit = rate.NewManager(time.Minute, 30)
)
func init() {
engine.OnFullMatch("骂我").SetBlock(true).SetPriority(prio).Handle(func(ctx *zero.Ctx) {
if !limit.Load(ctx.Event.GroupID).Acquire() {
return
}
process.SleepAbout1sTo2s()
text := getRandomCurseByLevel(minLevel).Text
ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Text(text))
})
engine.OnFullMatch("大力骂我").SetBlock(true).SetPriority(prio).Handle(func(ctx *zero.Ctx) {
if !limit.Load(ctx.Event.GroupID).Acquire() {
return
}
process.SleepAbout1sTo2s()
text := getRandomCurseByLevel(maxLevel).Text
ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Text(text))
})
engine.OnKeywordGroup([]string{"他妈", "公交车", "你妈", "操", "屎", "去死", "快死", "日", "逼", "尼玛", "艾滋", "癌症", "有病", "戴套", "啊对对对", "烦你", "你爹", "屮", "tui", "cnm"}, zero.OnlyToMe).SetBlock(true).SetPriority(prio).
Handle(func(ctx *zero.Ctx) {
text := getRandomCurseByLevel(maxLevel).Text
ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Text(text))
})
}

38
plugin_curse/data.go Normal file
View File

@@ -0,0 +1,38 @@
package curse
import (
"os"
"github.com/sirupsen/logrus"
"github.com/FloatTech/zbputils/file"
"github.com/FloatTech/zbputils/process"
"github.com/FloatTech/zbputils/sql"
)
const (
dbpath = "data/Curse/"
dbfile = dbpath + "curse.db"
)
var (
db = &sql.Sqlite{DBPath: dbfile}
)
// 加载数据库
func init() {
go func() {
process.SleepAbout1sTo2s()
_ = os.MkdirAll(dbpath, 0755)
_, err := file.GetLazyData(dbfile, false, true)
if err != nil {
panic(err)
}
err = db.Create("curse", &curse{})
if err != nil {
panic(err)
}
c, _ := db.Count("curse")
logrus.Infoln("[curse]加载", c, "条骂人语录")
}()
}

12
plugin_curse/model.go Normal file
View File

@@ -0,0 +1,12 @@
package curse
type curse struct {
ID uint32 `db:"id"`
Text string `db:"text"`
Level string `db:"level"`
}
func getRandomCurseByLevel(level string) (c curse) {
_ = db.Find("curse", &c, "where level = '"+level+"' ORDER BY RANDOM() limit 1")
return
}

57
plugin_danbooru/main.go Normal file
View File

@@ -0,0 +1,57 @@
// Package deepdanbooru 二次元图片标签识别
package deepdanbooru
import (
"crypto/md5"
"encoding/hex"
"os"
"github.com/FloatTech/AnimeAPI/danbooru"
"github.com/FloatTech/AnimeAPI/picture"
"github.com/FloatTech/AnimeAPI/saucenao"
"github.com/FloatTech/zbputils/control"
"github.com/FloatTech/zbputils/file"
zero "github.com/wdvxdr1123/ZeroBot"
"github.com/wdvxdr1123/ZeroBot/message"
"github.com/wdvxdr1123/ZeroBot/utils/helper"
)
const cachefile = "data/danbooru/"
func init() { // 插件主体
_ = os.RemoveAll(cachefile)
err := os.MkdirAll(cachefile, 0755)
if err != nil {
panic(err)
}
engine := control.Register("danbooru", &control.Options{
DisableOnDefault: false,
Help: "二次元图片标签识别\n" +
"- 鉴赏图片[图片]",
})
// 上传一张图进行评价
engine.OnKeywordGroup([]string{"鉴赏图片"}, zero.OnlyGroup, picture.CmdMatch, picture.MustGiven).SetBlock(true).SetPriority(23).
Handle(func(ctx *zero.Ctx) {
ctx.SendChain(message.Text("少女祈祷中..."))
for _, url := range ctx.State["image_url"].([]string) {
name := ""
r, err := saucenao.SauceNAO(url)
if err != nil {
name = "未知图片"
} else {
name = r.Title
}
t, err := danbooru.TagURL(name, url)
if err != nil {
ctx.SendChain(message.Text("ERROR:", err))
return
}
digest := md5.Sum(helper.StringToBytes(url))
f := cachefile + hex.EncodeToString(digest[:])
if file.IsNotExist(f) {
t.Canvas.SavePNG(f)
}
ctx.SendChain(message.Image("file:///" + file.BOTPATH + "/" + f))
}
})
}

View File

@@ -8,7 +8,8 @@ import (
zero "github.com/wdvxdr1123/ZeroBot"
"github.com/wdvxdr1123/ZeroBot/message"
"github.com/FloatTech/ZeroBot-Plugin/control"
control "github.com/FloatTech/zbputils/control"
"github.com/FloatTech/ZeroBot-Plugin/plugin_diana/data"
)

View File

@@ -3,34 +3,28 @@ package data
import (
"crypto/md5"
"errors"
"io"
"math/rand"
"net/http"
"encoding/binary"
"os"
"sync"
"github.com/RomiChan/protobuf/proto"
log "github.com/sirupsen/logrus"
"github.com/wdvxdr1123/ZeroBot/utils/helper"
"github.com/FloatTech/ZeroBot-Plugin/utils/file"
"github.com/FloatTech/ZeroBot-Plugin/utils/process"
"github.com/FloatTech/zbputils/file"
"github.com/FloatTech/zbputils/process"
"github.com/FloatTech/zbputils/sql"
)
const (
datapath = "data/Diana"
pbfile = datapath + "/text.pb"
pburl = "https://codechina.csdn.net/u011570312/ZeroBot-Plugin/-/raw/master/" + pbfile
dbfile = datapath + "/text.db"
)
var (
compo Composition
// m 小作文保存锁
m sync.Mutex
// md5s 验证重复
md5s []*[16]byte
)
var db = sql.Sqlite{DBPath: dbfile}
type text struct {
ID int64 `db:"id"`
Data string `db:"data"`
}
func init() {
go func() {
@@ -39,106 +33,49 @@ func init() {
if err != nil {
panic(err)
}
err1 := LoadText()
if err1 == nil {
arrl := len(compo.Array)
log.Printf("[Diana]读取%d条小作文", arrl)
md5s = make([]*[16]byte, arrl)
for i, t := range compo.Array {
m := md5.Sum(helper.StringToBytes(t))
md5s[i] = &m
err = LoadText()
if err == nil {
err = db.Create("text", &text{})
if err != nil {
panic(err)
}
c, _ := db.Count("text")
log.Printf("[Diana]读取%d条小作文", c)
} else {
log.Printf("[Diana]读取小作文错误:%v", err1)
log.Printf("[Diana]读取小作文错误:%v", err)
}
}()
}
// LoadText 加载小作文
func LoadText() error {
if file.IsExist(pbfile) {
f, err := os.Open(pbfile)
if err == nil {
defer f.Close()
data, err1 := io.ReadAll(f)
if err1 == nil {
if len(data) > 0 {
return proto.Unmarshal(data, &compo)
}
}
return err1
}
} else { // 如果没有小作文,则从 url 下载
f, err := os.Create(pbfile)
if err != nil {
return err
}
defer f.Close()
resp, err := http.Get(pburl)
if err == nil {
defer resp.Body.Close()
if resp.ContentLength > 0 {
log.Printf("[Diana]从镜像下载小作文%d字节...", resp.ContentLength)
data, err := io.ReadAll(resp.Body)
if err == nil && len(data) > 0 {
_, _ = f.Write(data)
return proto.Unmarshal(data, &compo)
}
return err
}
return nil
}
return err
}
return nil
_, err := file.GetLazyData(dbfile, false, false)
return err
}
// AddText 添加小作文
func AddText(txt string) error {
sum := md5.Sum(helper.StringToBytes(txt))
if txt != "" && !isin(&sum) {
m.Lock()
defer m.Unlock()
compo.Array = append(compo.Array, txt)
md5s = append(md5s, &sum)
return savecompo()
}
return nil
s := md5.Sum(helper.StringToBytes(txt))
i := binary.LittleEndian.Uint64(s[:8])
return db.Insert("text", &text{ID: int64(i), Data: txt})
}
// RandText 随机小作文
func RandText() string {
return (compo.Array)[rand.Intn(len(compo.Array)-1)+1]
var t text
err := db.Pick("text", &t)
if err != nil {
return err.Error()
}
return t.Data
}
// HentaiText 发大病
func HentaiText() string {
return (compo.Array)[0]
}
func isin(sum *[16]byte) bool {
for _, t := range md5s {
if *t == *sum {
return true
}
var t text
err := db.Find("text", &t, "where id = -3802576048116006195")
if err != nil {
return err.Error()
}
return false
}
// savecompo 同步保存作文
func savecompo() error {
data, err := proto.Marshal(&compo)
if err == nil {
if file.IsExist(datapath) {
f, err1 := os.OpenFile(pbfile, os.O_WRONLY|os.O_TRUNC|os.O_CREATE, 0644)
if err1 == nil {
_, err2 := f.Write(data)
f.Close()
return err2
}
return err1
}
return errors.New("datapath is not exist")
}
return err
return t.Data
}

View File

@@ -1,5 +0,0 @@
package data
type Composition struct {
Array []string `protobuf:"bytes,1,rep"`
}

View File

@@ -1,54 +0,0 @@
// Package convert 转换txt到pb
package main
import (
"bufio"
"fmt"
"os"
"github.com/RomiChan/protobuf/proto"
"github.com/FloatTech/ZeroBot-Plugin/plugin_diana/data"
)
var (
compo data.Composition
)
func init() {
compo.Array = make([]string, 0, 64)
}
// 参数txt文件位置 pb文件位置
func main() {
file, err := os.Open(os.Args[1])
if err != nil {
panic(err)
}
defer file.Close()
scanner := bufio.NewScanner(file)
// optionally, resize scanner's capacity for lines over 64K, see next example
for scanner.Scan() {
// fmt.Println(scanner.Text())
compo.Array = append(compo.Array, scanner.Text())
}
if err := scanner.Err(); err != nil {
panic(err)
}
data, _ := proto.Marshal(&compo)
f, err1 := os.OpenFile(os.Args[2], os.O_WRONLY|os.O_TRUNC|os.O_CREATE, 0644)
if err1 == nil {
defer f.Close()
_, err2 := f.Write(data)
if err2 == nil {
fmt.Println("成功")
} else {
panic(err2)
}
} else {
panic(err1)
}
}

View File

@@ -1,42 +0,0 @@
贝拉抽我🥵嘉然骑在我背上🥵晚晚踩我🥵乃琳坐在王座是用看垃圾的眼神看我🥵🥵珈乐踢我🥵🥵,把我眼睛蒙住然后五只脚一起踩我🥵还让我猜脚是谁的,猜错了给我劈眼一铁棍🥵
我好想做嘉然小姐的狗啊。可是嘉然小姐说她喜欢的是猫,我哭了。我知道既不是狗也不是猫的我为什么要哭的。因为我其实是一只老鼠。我从没奢望嘉然小姐能喜欢自己。我明白的,所有人都喜欢理解余裕上手天才打钱的萌萌的狗狗或者猫猫,没有人会喜欢阴湿带病的老鼠。但我还是问了嘉然小姐:“我能不能做你的狗?”我知道我是注定做不了狗的。但如果她喜欢狗,我就可以一直在身边看着她了,哪怕她怀里抱着的永远都是狗。可是她说喜欢的是猫。她现在还在看着我,还在逗我开心,是因为猫还没有出现,只有我这老鼠每天蹑手蹑脚地从洞里爬出来,远远地和她对视。等她喜欢的猫来了的时候,我就该重新滚回我的洞了吧。但我还是好喜欢她,她能在我还在她身边的时候多看我几眼吗?嘉然小姐说接下来的每个圣诞夜都要和大家一起过。我不知道大家指哪些人。好希望这个集合能够对我做一次胞吞。猫猫还在害怕嘉然小姐。我会去把她爱的猫猫引来的。我知道稍有不慎,我就会葬身猫口。那时候嘉然小姐大概会把我的身体好好地装起来扔到门外吧。那我就成了一包鼠条,嘻嘻。我希望她能把我扔得近一点,因为我还是好喜欢她。会一直喜欢下去的。我的灵魂透过窗户向里面看去,挂着的铃铛在轻轻鸣响,嘉然小姐慵懒地靠在沙发上,表演得非常温顺的橘猫坐在她的肩膀。壁炉的火光照在她的脸庞,我冻僵的心脏在风里微微发烫。
ダイアナさんの犬になりたいな.けど ダイアナさんが「猫が好き」と言った あさりと僕は泣いてしまった.猫でも犬でもない僕が 何故泣いたのかな 僕は知っていた.何故なら 僕は鼠だったからさ~..一度もダイアナさんに好かれることを望まながった .僕はわがっていた 誰もかも理解余裕上手天才の可愛い金持ちの犬か猫がすきってことを.陰キャで汚らわし鼠は誰も好かんのだ..それでもDianaさんに聞いてみたDianaさんの犬になっても良いですかと.僕には一生犬になれないことは分かっている.でももし彼女は犬が好きだったら 僕はずっと傍で見ていられる.それはいつも違ういぬをだいいているとしても..けれど彼女は猫が好きだった.彼女は今にも僕を見ている ぼくを楽しませてくれる それは猫がまだ表れていないから.ただこの鼠が毎日こそこそと穴から出て 遠くから目を合っている.彼女の好きな猫が現れたら 僕は穴に戻るしかないな..でもやっぱり彼女が好きでいられない 僕がまだ傍にいるときぐらい もうちょとみてくれるのかな.Dianaさんがこれから毎回のクリスマスみんなと一緒に過ごすで言った みんながどの渡りのみんなかな.僕にも中に入れたれいいな..猫はまだまだDianaさんを怖がっている.僕が彼女の愛する猫を引き付けるよ.少しのミスで猫の口に死ぬことはわがっている.その時になるとたぶんDianaさんは僕の体をちゃんと包み込んで 玄関外に捨てるでしょ.それで僕はフライト鼠になった くす.彼女に少し近く捨ててほしいな だってやっぱり好きだから それずっと好きでいる..僕のたましは窓を越して中を見る 吊っている鈴が少し響って.Dianaさんはだらりとソファーに寄りかかて 手慣れているふりをする橘猫が彼女の肩に座って.暖炉の光が彼女の顔を照らした 凍り付いた僕の心臓はかぜの中で熱くなっていく
枝江小镇新来了一位修女,善良温柔的修女。她不爱讲话,只是微笑着面对每一个对她祷告的人。有的人希望孩子健康,有的人希望庄稼熬过冬天,有的人希望能挣到钱养活家人。。。。她都用心听着,微笑的回应着。她身材矮小,但是却让人觉得充满智慧;她沉默寡言,但是却会让人无比信赖。这是她任职快满一个月的时候,教堂发生了大事,一个醉汉发现神职人员利用教堂在深夜进行大批资金流入,醉汉传的神乎其神,三人成虎最终引起审判官前来调查。教主被带走,教堂除了那位茫然的新来修女其他人一哄而散。修女被迫承担着本不应该属于她的责难,辱骂,但是她每天都认真的向主祷告,倾听来教堂之人的倾诉。可是根本没有人向她倾诉,来的人不是在骂她,就是在发泄生活的不满。她一己之力拼命承担,没人知道是什么使她如此坚持。直到审判官带回了教主,告诉镇民那是教主在中央主教那里得到的,目的是为镇民熬过冬天所需要买粮食的钱财。一时间镇民欢呼起教主,感谢主的庇护,更多的人开始更加爱上了那个修女。有的人把她比作玛利亚,有些人把她奉为神明,她都一一拒绝了。细心的镇民会发现这位修女变了,变得话多起来了,也变得更喜欢宅在教堂里了,也变得离镇民距离更远了。一切好像又变回原来平和的小镇,每个对修女的加害者每天微笑着向微笑着的修女打招呼,每个镇民还是会去教堂祈祷,去倾诉,去向一个原来被他们亲手辱骂的人祷告,希望得到主的关照,包括那个醉汉。没人能惩罚那些镇民,很多人都已经“忘记”当初为什么要那样做,包括那个醉汉,只剩下一个经常宅在教堂里的修女,她始终记得一切。
贝拉躺在病床上,眼神空空地盯着天花板,灰白晦暗的天花板像一块哈哈镜,扭曲掉外面的一切,光变成了暗,多彩变成苍白,观众变成医生,舞台呢,变成了一方小小的病房。她翻了个身,腰部传来猛烈地疼痛,她低低地哼了一声。她已经开始习惯这种疼痛了,就像她习惯不穿芭蕾舞裙一样,她闭上眼睛,把自己埋进黑暗里,不去想。门被推开了,惊醒了似梦非梦的她。医生护士又来查房,父母和弟弟们跟在后面;医生问了些问题后走了,母亲握着她的手,朝她说着话儿,父亲安静地坐在旁边,刚训练完的弟弟头上还冒着汗,抿着嘴唇望着她。母亲当时说的什么她已经忘了,只记得最后离开的时候,父亲走在最后,回望了她一眼,然后小心地关上门,以往高大的背影竟然显得有些萧索。人都走完后,时间在沉默的病房里流逝,就像沙漏里的沙子,她的那些热情、那些憧憬都掉了进去。芭蕾舞团的学员抽空来看她,她勉强在病床上坐起,听那些腰背笔直、气质优雅的朋友抱怨严格的地狱管家婆,抱怨下一场演出又要来了。她安静地听着,坐在病床上挤出个笑脸,偶尔出声附和几句。但实际上她已经插不进话题了,优雅的白天鹅展翅高飞,飞向温暖的春天,把受伤的丑小鸭留在冬季里。朋友走后她继续坐在床上,盯着窗外,外面的天气很好,飞机的尾迹穿过绵软的云团,白色的鸟儿掠过一澄如洗的天空,她下意识地做了个展臂的动作,像天鹅一样优雅。很美,又很短暂。鸟儿飞出了窗户的方寸之地,她看不到了。她捂着刺痛的腰,好痛呀,痛得让人想要哭出声。沙子裹挟着她的梦想,掉进了沙漏的下一层,再也捡不回来了。两个月后贝拉出院,回到了熟悉的家里,母亲体贴地把舞裙还有那些大师级的芭蕾演出录像都藏进了地下室的角落,不出意外会像大多数人以为能坚持的梦想那样,慢慢积满灰尘,最后被悄悄遗忘。聪明人会在偶尔想起来的时候,给自己找个台阶,自嘲地笑笑:“哈,我以前还有这种妄想啊。”贝拉开始学播音,开始走另一条路,她没想过却不得不走的道路。这也很好,好歹有路可走,但偶尔听到舞曲的时候,朋友会问她:“你在晃什么啊?”她回过神来,笑了笑。“活动活动身体而已。” 虽然有点不甘心,但受伤是没办法的事情嘛。该放下了,放弃想走的路,而去走更稳妥的应该走的路,大部分聪明人都是这样做的。我可是大聪明呢!​
小姐喜欢所有动物,但喜欢也分三六九等;管家讨厌所有动物,但讨厌也分三六九等。小姐最喜欢猫,但她的观众是一群老鼠;管家最讨厌老鼠,但小姐的观众没有一只猫。于是,管家给所有的老鼠带上了面具小姐开始了初次表演,老鼠们不知所措,想要重复惯常的纷扰。但它们看见小姐舞姿翩翩,一些老鼠想出声赞叹;但它们看见小姐眉目如画,一些老鼠竟为她沉醉;但它们看见小姐真情流露,一些老鼠也伤怀落泪。它们不想让小姐失望,于是它们学起猫叫。小姐很开心,她的观众里有猫了。她喜欢的猫们,也喜欢她。冷清的门庭配不上小姐的美丽,于是老鼠想去带来更多的猫。老鼠们引来了猫,也引来了更多的老鼠。新的老鼠不太规矩,但新来的猫确实是猫。小姐有些困扰,但她还是接纳了它们,小姐喜欢所有动物,即使自己会困扰。但后来,管家和小姐,只注视着猫,忘却了老鼠的事情。也对,毕竟老鼠当初带着恶意袭来,现在的面具总是脱掉又带上来。管家做了一些事情知道与否和同意与否,在小姐这里有四种组合的方法。但一些曾经是猫的老鼠觉察出异样。常年在下水道生活,它们对这样的气味异常敏感。于是,它们摘下了面具,向管家讨个说法但它们没了伪装,下水道里散发的臭气,让管家更加厌恶。什么都没有改变再后来,小姐依旧美丽,但经历了诸多纷扰,不知道小姐的快乐里是否有泪眼成双。一些老鼠依旧带着猫的面具,它们最后也会变成猫。但这会长久吗?或许不会。另一些老鼠退回了下水道,等待着,或许会有另一位小姐,喜欢老鼠的小姐。去喜欢她,去喜欢它们。或许会有吗?应该没有吧但老鼠们永远忘不了那位小姐,那位喜欢所有动物,但更喜欢猫的小姐。​
然然,然然,虽然我知道就算这样呼唤,我也只能在你动态下方,站住万千评论区的一楼。你的表演,你的动态,你的关心....都是说给我们大家的,是我们.....而我...我曾经以为你离我很近。近到每次打开手机各种视频软件,大数据推送的都是你。近到每次发呆找不到前进方向的时候,看的都是你的视频。近到每次和别人聊天的时候,都会加上你经常说的口头禅,收到收到收到,可爱捏~~…你时常陪伴我身边,无论我悲伤还是欣喜,绝望还是惬意,你的直播间,评论区都是我可以肆意宣泄感情的地方。因为在这里,我的任何发言都只是漆黑夜空中微弱闪耀的一点,这样的一点点星光的存在,我知道的,是为了给天空中耀眼圆月裙摆装饰的一点点碎钻。那我喜欢然然,天天来看然然,对于自己,究竟是为了什么….难道我的生活真的烂,连仅有的一些关怀,都要从一个虚拟偶像身上获取到吗?难道我的现实生活,连一个关心我家人都没有吗,还要在网上寻找家的感觉?难道...这些道理我早就明白了,说服自己也说腻了,你一直都是云上之人,而我只是一个扛不住压力,在虚拟的世界中寻找安慰的落魄之人。我懂,我明白的,我知道的....所以,嘉然小姐,我不能没有你,我不会离开你的。你也是,永远不要离开舞台,放弃拼尽全力…..就算知道也许不会有回音,你也不要停止朝闪闪的星光挥手呐……[爱心]
想想嘉然是怎么样的一个女孩子。她温柔可人情商高会控场会接话会引导弹幕懂节奏朋友里有她这么一个人在肯定每次见面都能很开心吧。她爱网上冲浪明明看到各种视频会有点麻但还是乐此不疲的在b站和各个论坛看着视频像不像那些最懂你最能陪伴你的沙雕网友哪怕是不能和她见到面的时候光在网上聊天一定也不会无聊。她在温柔的同时又有点小坏喜欢说怪话喜欢暗搓搓的开车想必她每次在什么奇怪的点上开完车就会似笑非笑的侧着头看向我吧而我只需要与她对视一下两个人就能默契的笑起来。她很会撩人那些土味情话在她营造的气氛里似乎也变得格外令人心动尤其是她还会在每一个不经意间突然说出动人的话语让你在完全没准备的情况下脸红心跳。可是她又很胆小简简单单的小把戏能连续侠盗她好多次她被吓完那副气冲冲却又无可奈何不敢离我太远的样子肯定是天下第一可爱吧。想想嘉然是怎样的一个女孩子。她身材完美脸庞可爱声线令人沉醉无可挑剔的美丽。她知书达理善解人意温柔热情她是每个女通讯录梦中的那个姐 。可是她又不会离你很远,她懂你的梗,她在网上和你冲过同一片浪,她能和你一起打游戏,能和你一起看美女,能说那些心照不宣的怪话,能在最合适的时刻撩动你的心弦。她有令人沉溺的年上气质,又像是令人不自觉想要呵护的可爱妹妹,可有时,她又变成了从幼儿园开始跟你同班,最懂你的那个青梅竹马的女孩子。她就是嘉然,我的嘉然。嘉然,嘉然,嘉然!!!!!!🤤🤤🤤🤤🤤🤤🤤🤤🤤🤤🤤🤤🤤🤤🤤🤤🤤🤤🤤🤤🤤🤤​
我其实一点也不喜欢嘉然小姐。因为嘉然小姐就像光一样,闪耀,刺眼,我讨厌光。因为讨厌光,所以我总是躲在阴冷潮湿的下水道里,这样就不会被令人厌恶的光芒灼伤眼睛。只有夜间,我才会从阴暗潮湿的下水道里走出来,夜晚是宁静且安逸的,令我感到舒适。我漫无目的的走在夜间的小路上,路旁的路灯正散发着微弱的光,有几只蛾子正不断的向着光源扑去。“真傻。”我这样想,明明光只能带来危险,为什么要浪费宝贵的生命去追逐光芒呢?看着飞蛾不断的扑向路灯,我不知为何想起了我的那些同伴。我想起了几天前,有一些从外面回来的家伙,他们兴奋的告诉我外面新开了一家剧场,里面有一个叫嘉然的人,还推荐我一起去看看。他们的眼睛里闪烁着亮晶晶的光,我很讨厌,于是便拒绝了。之后他们也来找过我几次,我也推辞了。后来我便没怎么见过他们了,听说为了拉人来看,他们有的想变成猫狗,有的沿街贴海报叫卖,有的把过冬用的黄豆当礼物,还有的把心献给猫。“真是些蠢货。”我这样想着,他们不就和这些扑火的蛾子一样愚蠢了吗,明明之前一起路过的时候,他们还总是会嘲讽这些家伙。“十分。”不知从哪来的带着些哭腔声音打断了将我从原先的思绪中拉了出来。是旁边的剧场里传来的,不知不觉间我走到了这么远的地方还没有发觉。我抬头望了望,牌匾上写着五个晦涩难懂的的字母,好像之前同伴们说过,他们去的那个剧场名字就是五个字母,有些见多识广的说,那叫什么啊骚。我迟疑了一会,但还是走了进去,单纯只是想知道为什么声音带着哭腔,凑热闹,找乐子总是我最喜欢的事情。......“大家要好好吃饭哦。”天籁般的声音在我耳边响起。哦,原来我并不讨厌光啊,只是一直都知道,自己配不上光罢了。​
我爹不能和我相认,但今天他过大寿,求求大伙有钱的随个礼,没钱的捧个场。但请不要跟她说儿子来了,我怕扫他兴🙇🙇给大伙磕头了。​
asoul在一片骂声中解散了。A吧的最后一个帖子也沉了下去直到在v8和b站的也已经看不到有人讨论了。大约一年后我在A吧发了一句“还有人在吗”“这里还有8u啊我也想回来看看了。”一个陌生的ID出现在我的回复下面他并不在我过去炒作的记忆里出现过。但是我们聊得很高兴很快就加上了QQ私下互动了。她似乎很了解我知道我喜欢炒作发散知道我在读哲学博士。但是她却总是忘记我是个晚晚推要我一遍又一遍地告诉她我最喜欢的是晚晚。“你最喜欢哪个成员呢”“嘉然。”她毫不迟疑地回答道。我总是眉飞色舞地和她聊起向晚过去直播的故事她也对这些直播了然于心有时还会注意到许多我从没注意到的细节甚至告诉我向晚每一次弹吉他背后的表演思路。奇怪的是虽然她说她最喜欢嘉然对嘉然的事情却并没有那么了解甚至连直播的场次都要我提醒她。到了那年的冬天她问我我们可以出来见一面吗我拒绝了她当时的我正忙于准备学位论文。她没有再强求。第二天她在QQ上失联了熟悉的头像再也没亮起过。大概一周后我收到了一份包裹里面是向晚出道以来所有季度的舰长礼物无一遗漏收藏编号都是00000。立牌里还夹着一张信纸上面是短短一行字“谢谢你曾经喜欢我”。
然然幸亏我没在你评论区发病。要不然我耽误你一辈子,你也保重,再见😃还会再见吗然然☺,再见的时候你要幸福好不好☺,然然你要开心☺,你要幸福☺,好不好,开心啊😖,幸福😖!你的世界以后没有我了,没关系你要自己幸福!🚕🚕🚕💨💨💨🏃🏃🏃然然😭!然然😭!然然😭,没有你我怎么活啊!😭😭😭🏃🏃🏃然然😭,然然😭,然然😭,然然😭,然然😭,然然!😭😭😭🏃🏃🏃然然你带我走吧,然然!😭🙇😭​
小时候看的一个敞事很老土很老套。很多人可能听过。。有一个男孩有一块金表却没有配得上它的合适表带。。他爱上了一个女孩。。这个女孩有一头秀美的长发却没有配得上它的漂亮发卡。。马上要过圣诞了。。男孩决定把这个金表给卖了。。给女孩买一个漂亮的发卡。。当他兴奋的把这个发卡交给女孩的时候。。发现女孩的头发已经剪掉了。。因为她把一头长发换钱给男孩买了一个表带。。我想真正的爱肯定不是瞬间的感动很多人都能在一瞬间感动你我心中真正的爱是陪伴。她们陪了我多久呢我不记得我只记得。。她们的翻唱躺在网易云的歌单听了一遍又一遍已经全都会唱了而在此之前的几年里我几乎没听过中文歌。够罕见。《海底》b23.tv/qwB8Xe。《偿还》b23.tv/1bl7AL。《遇见》b23.tv/vxiwae贾维斯这是无可取代的时候。《云烟成雨》b23.tv/VfoDXA。《如果的事》b23.tv/gDtrcP。《夏天的风》b23.tv/EH14bW。《霞光》b23.tv/kJUJMU。《月光》b23.tv/kJUJMU。《霍元甲》b23.tv/lQgKl2。《月兔回旋于空中》b23.tv/KM4G5I。《不可思议》b23.tv/VfwEz4。《麋鹿森林》b23.tv/GzjXu1。《轻轻的告诉你》b23.tv/Gkai63。不知不觉陪你们走了这么久这么远了爱不爱你们还需要用什么来证明吗。。彼此牺牲彼此成就彼此尊重。这就是我心中的双向奔赴以后路还很远我想陪你们一直走下去。。。原来你是我的顶碗人呀~。以后,开心和不开心的,都告诉我吧~。。原来,你是我的爹地呀~。以后,开心和不开心的,我都告诉你~
6月12号一大早向晚按照贝拉的日程表要求6点起床煮泡面的时候因为太累大脑一时迷糊导致一锅开水撒到了手指上虽然经过治疗恢复了一点但根本没法弹吉他了。晚晚在宿舍哭得很大声整个asoul愁云惨淡。经过一个小时的紧急磋商阿草带来了领导层的意思——投入太大不可能取消生日会照办用储备中之人向晚二魔王接替向晚本人上场。下午asoul在动捕房排练向晚想要去看一看结果被阿草拦在门外说不能打扰到asoul排练效果很好希望她不要打扰到她们。晚上嗓子哭哑了的向晚发现自己原来可以完全不被需要。顶碗人喜欢的是她但又不完全是她可以是顶着钻头晚晚的任何一个人只要二魔王没有被认出来。直播开始了在宿舍逼仄的角落里漆黑无声的床柜旁向晚用水母模样的被套盖住自己抱着膝盖打开手机及期待万分又忐忑不安地等待着直播。直播开始向晚二魔王在铺天盖地的欢呼中出现。工具人掉了一地头发连续几周通宵肝出来的深海水母特效把她印照得那么美。本就是可爱模样的女孩子此时此刻穿着崭新的小礼裙昂首挺胸骄傲得像个公主。她的目光是璀璨的里面像是镶嵌着钻石。她的眉眼绽放着像是海底迸发出的一束光。真美向晚这么想着。但心里却很是难受。那些本该是她的。喝彩也好宠爱也好以及朋友的陪伴也好本来都应该是她的。但她现在却只能在无人问津的角落里依靠网络连接的手机去小心翼翼地偷瞄几眼原属于自己的生日会。
“你看V魔怔了真恶心。”  看着同学发给你的消息你陷入了沉思。  仔细想一想你觉得自己确实魔怔了即使被鄙夷想要向熟人安利向晚小姐。  思考再三过后你决定回到现实放弃入脑。  今晚有向晚小姐的直播你狠下心没有点进去而是倒头就睡。  第二天你起得很早。  因为自从你开始看向晚小姐后就养成了早睡早起的习惯再也没有赖床过。  你离开了狭小的出租屋来到了公司投入了工作中。  工作很累你感觉有些疲惫。  你想起了嘉然小姐出道视频的不堪评论以及她的笑容烦闷减轻了不少。  最近组长夸奖你工作很努力别人不知道为何一向懒惰的你在几个星期前开始一反常态地勤奋。  只有你自己知道理由。  撑过了加班的时间你回到了出租屋打开了外卖软件却发现会员已经断了你舍不得那些钱所以决定自己买菜做饭。  实际上你看向晚小姐后就开始第一次尝试着做饭没有点过外卖了。  在超市你看到自己一向很喜欢的薯片在打折愣了一下没有买。  因为你在看向晚小姐后就再也没有暴饮暴食过甚至连零食都戒掉。  回家把饭做好你安静地吃完了。  看着电脑你发现游戏已经很久没更新了。  因为你在看向晚小姐后也把一直沉迷到通宵的游戏给戒掉了。  最终你还是打开昨天晚上的录播看到了向晚小姐热情地打招呼。  “顶晚人们晚上好呀~”向晚小姐元气地打招呼。  你发自内心地笑了起来。  “晚上好”你说。  你忽然意识到一件事她从来没有在你现实里出现过却已经将你糟糕的生活改变。  ……  看完录播后你打开了贴吧看到了熟悉的顶碗人在用表情包引流有不明真相的路人在骂饭圈贵物。  你无视了那些辱骂声熟练地在下面RP回复道  “这是我爹好可爱呀她的名字是什么
你饿了,她有一块饼。再去买一块和你一起吃,这是贝拉;和你一人一半吃个半饱,这是珈乐;全部给你不舍得你挨饿,然后告诉你自己吃过了,这是嘉然;把饼偷偷扔掉,跟你一块饿,这是乃琳;把饼藏起来想给你一个惊喜,但是掏出来时发现碎成渣吃不了了,于是化身小哭包的,这是我的铸币晚晚。​
“你对嘉然小姐的爱有多重”“大约300克”“300克你是想说人类的心脏大约是300克吗”“不鼠鼠的平均体重大约是300克因此我是全身心地爱着嘉然小姐。”[给心心][给心心]
你身体里的每一个原子都来自一颗爆炸了的恒星,你左手的原子与右手的原子也许来自不同的恒星。这实在是我所知道的物理学中最富诗意的东西: 你的一切都是星尘......这其中经历了多少,惊险、巧合,三千世界的交错、重叠,才能让我们遇见彼此。我们都是星尘啊。但是,我这样的人,是星尘里,黯淡无光的那种。即使是星,也应该是最不闪亮的那一颗。而然然,你不一样。你是天上的星辰,闪耀而夺目。即使宇宙里,有着不计其数的、炫目的一等星,也远不如你的光辉。轻声哼唱,众星敛了光芒为你聆听。哭起鼻子,傍晚的霞也因你黯然。跳一支舞,似月兔回旋于空中。说起情话,登时小雨疏疏、浸润心窝。你是万千童话里,被守护的女主角。我喜欢你,像喜欢天上的星辰那样喜欢你。​
嘉然回来了,在枝江的大桥。她回来的那天是六月,天上却飘着雪。有人告诉我,她可能有还未了却的心愿或是什么怨气。我知道, 可能我做不到。第一次见到她,是在枝江。她带着甜甜的笑看着我,看着我有些发怵。有那么一瞬我似乎看到了阳光。我慌乱的移开视线,她径直朝我走来,微微弯着腰,面带戏虐的望着我。久居下水道的老鼠,第一次看见光,是睁不开眼的。 我慌乱的想赶紧逃走。“小老鼠,你好呀。”那是她对我说的第一句话。[给心心][给心心][给心心]
听了好多遍,真的很震撼,作者属实是用心了,今天就不发病了,第一次写长评,整点读后感。直播里,“背靠着早已雪停的窗棂,你说着未曾到达的山顶”,那是与你失之交臂的舞台梦 。“我装着第三人称的淡定用风轻云淡的态度掩饰那段经历”我已经记不起她的姓名只记得起舞翩翩的侧影”过去那个满腔热情在舞台上挥洒汗水的你已经淡出记忆只依稀留下曾经翩翩起舞的身影。命不是总有天道酬情的注定那么公平。台下十年苦练只为台上耀眼的一刹可当腰伤的意外来袭梦却碎了。躺在病床上难道梦想就要在此终结了吗这也罢也罢。那个曾经的你也经历过数个春秋经历汗水与欢乐但她却走过了如红楼梦的悲情从盛极一时万家灯火走到遁入空门的万物凋零。时光抚平了曾经的伤疤心中的芥蒂也如沙石被流过的光阴慢慢冲刷消散女孩又重新拾起了向往舞台的梦想。终于她在asoul找到了新的舞台遇到了支持她的一个魂们。“我叫贝拉”此刻你向全世界宣布你的重生贝极星们透过屏幕看你在镜头前如此快乐自信这让我也重拾梦想去直面未知的未来。为你的坚强而动容在直播间为你打call呐喊字字句句都发自真心。“我们闪烁在夜空想照亮你夜晚的梦没月亮时你可向北方转动我们在天空”追梦的路上贝极星们陪着你分享每一次快乐和你经历每一个坎坷你若是感到失望那就抬头看向天空吧我们一直都在。女孩站在那个梦想中善良闪亮的舞台上再回望过去时光流过宛若江河她住在江头而那个过去的她住在江尾回味着过去竟有些恍如隔世的朦胧。但往者不可谏来者犹可追愿你携手曾经那个满怀梦想的自己全力以赴去追寻自己的Asoul梦吧贝极星们会一直陪着你。
不推嘉然小姐十年了。她的名气和出场费都一涨再涨我原地踏步的工资买不上专辑也打不起榜。终于年前被公司安排下岗找工作时我才在路边广告发现初代工具人已经当上了厂长。时间太久一切都变了。到处投简历的时候我想起了一名人上人的预言“这些人只配在下水道里度过相对比较失败的人生。”像是一条跳过龙门的锦鲤金鳞被羽耀武扬威地站在门沿上对其他还在跳的鲤鱼说“你不行”我当时很想反驳可他说中了。我知道我确实不行。我之所以跳了跳只是为了看下自己能跳成什么样罢了。其实每条鲤鱼的龙门都不是一样高的。我见过龙门在水下的鲤鱼。看起来是鱼其实生而为龙。也有的生而为鱼肉。也见过好运的鲤鱼门被各种大手摁到河里了。我也期待过好运只是没来而已。说起来这就是人性吧。我不讨厌天道酬勤但是讨厌别人的好运——只是因为我没有好运罢了。我也有亲人和宠物会生病我眼神也挺纯真啊。讨厌嘉然小姐十年了。讨厌的更是越来越深的无力感。身在泥潭的人是没力气冲锋的吧。三流的人生只会让上等人不屑一顾吧。我坐井观天天穹星海依然耀眼。可我爬不出井底。那我就不再看星星了。世界那么大但没我的份。忘记嘉然小姐十年了。可路上看见街边的大荧幕在放A-soul的新年节目我还是楞在那里了。我没有近视但总觉得眼睛影影绰绰雾气来自多年以前。这个广告位非常贵。真的再也不是小v了啊。抖友还在惦记他们的鸭子。晚晚仍然只有蓬蓬裙100首歌竟然还欠着被粉头小团体以4%年化复利计在小本子了。想起她首播时玩2077下饭下得轰轰烈烈我一边发“粉丝牌改成晚饭人吧”“和嘉然珈乐凑加碗饭”“和乃琳凑来碗饭”一边忍住刷“和贝拉组拉碗饭”的冲动。solo依然拉跨参团照旧神C。贝拉总是六边形战士乃琳养了成吨的gachi珈乐还是那个硬壳软妹。嘉然小姐依然卖萌摁混。什么都没变是我没跟上她们。城里烟火幢幢灯光下的人热情相拥阴影里的人压下悸动。最亮的地方嘉然小姐浅笑起舞光影从她袖间散落像是雨天花伞轻旋摇曳间洒下泪色的流珠。忽然眼睛有点模糊。我小声说“新年好啊嘉然小姐。”不爱嘉然小姐十年了。十年里爱过的每个人都像她。
喜欢然然,不加掩饰总是微笑的然然,不是妖治妩媚的华丽舞姬,不是残忍无情的冷酷公主,只有着单纯烂漫的花样笑容,不带忧伤,却如同逝零而来的天际之风,飘卷了我心上的忧郁。棕色的长发装饰着美丽的蝴蝶结,宝石般的双眸中隐隐流露不存在的神伤,就是这样子的然然,不加掩饰总是微笑的然然,拥有烂漫笑容的然然,拥有亘古不变的美丽。说不出的感觉,却知道因为然然的笑容,化开了初春冰雪的痕迹。想要伸出手抚摸然然的发丝,可是却只能触到冰冷的硬屏,只有然然清澈的眼神,依旧是我所熟悉。然然永远清澈的瞳仁然然烂漫单纯的笑容然然亘古不变的美丽然然是我唯一的最爱,然然是我最爱的唯一。然然的喜好、快乐、难过、伤心和无助,我都了如指掌,喜欢草莓蛋糕和黄色,个性温柔又善良,可爱体贴的女孩子,有着说不出的优点,我想然然一定是上天赐予我最好的礼物。
鼠鼠的朋友有很多,住在东边的小鱼,住在南边的小鹿,住在西边的蝴蝶,住在北边的小鸟。他们带鼠鼠在蔚蓝色的深海里与水母共游,在碧绿的麋鹿森林里喝清晨的露水,在热闹的雨林里穿梭玩耍,在广袤的天空中肆意飞翔。鼠鼠住在灯火阑珊的城市,可鼠鼠知道这里没有一处属于鼠鼠,鼠鼠穿过川流不息的街道,狂奔着回到自己阴湿黑暗的下水道,强烈的自卑之情让鼠鼠无法呼吸,鼠鼠依靠在下水道缝隙边,因为嘉然小姐总会路过这里。草莓加奶油加花香,是嘉然小姐的味道。风铃加口琴加奶糖,是嘉然小姐的声音。节奏加音乐加快乐,是嘉然小姐的脚步。“她来了”,鼠鼠将头小心地探出缝隙,嘉然小姐径直走过吵闹的人群,来到下水道缝隙边,端着草莓蛋糕,缓缓放在洞口,一阵风铃似的声音响起“嘉心糖,来吃然然的草莓蛋糕吧。”嘉然小姐温柔的看着它,鼠鼠不知为何突然流下了眼泪,无法挪动脚步。嘉然小姐好像很失落,眉头轻轻皱起,“你不喜欢然然吗……”,鼠鼠急忙辩解,可憋红了脸一句话也说不出,“猫咪已经被然然关在笼子里了,嘉心糖不用害怕!”嘉然小姐关切的看着鼠鼠,鼠鼠似乎要溺亡在她蔚蓝色的双眸里,慢慢走向那块草莓蛋糕,小口品尝着。嘉然小姐伸出小小的手,似乎想捧起鼠鼠。鼠鼠好像被雷击中一般,猛然跳起,飞奔回下水道,它拼命喊着:“我又脏又臭还很丑陋,嘉然小姐不会喜欢我的!嘉然小姐不会喜欢我的!”嘉然小姐表情立刻转为严肃,认真的看着鼠鼠道“我不许你这么说自己!”她的眼中好像也盈满了泪水“我们嘉心糖…都是很厉害的人!
乃琳已经在和男友交往了。那是六月下旬的一天乃琳刚刚结束那天的单人直播回到家正坐在客厅的沙发上嘉然就把一个平板推到她脸上。“乃琳乃琳你看这个粉丝他好塞克西哦”视频里是一个她的男粉俊秀的脸庞和健硕的身体上还挂着刚刚从泳池带出来的汗液与水珠嘴里却说着些奇奇怪怪的狠话。乃琳感觉到自己的心弦被拨动了一下盖在毛毯下不着凉的大腿都感觉到了几分燥热。“让我也看看让我也看看——哇他他他……”向晚从沙发后面把脑袋探出来不一会儿就说不出话了。“乃老师原来喜欢这种款式的啊要不姐们儿帮你找找联系方式”珈乐在一旁逗趣。“你别瞎说回房间陪你的贝拉去”乃琳下意识地把沙发上的抱枕扔向珈乐却被她轻巧地躲开了。过了几天小一神神秘秘地把乃琳叫到了公司茶水间把手机屏幕上的一个二维码亮给乃琳看。“嗨别担心别担心这人我们调查过他不是个会说漏嘴的人。喜欢的话去和他见一面呗。”第二天乃琳和那位男粉见面了。他本人比视频里更加帅气高大的身躯总是能给乃琳带来莫大的安全感。“你好王艾琳小姐。”他的微笑让乃琳觉得周围的风景全都褪色了。乃琳从来没有提起过自己作为asoul成员的事情他也从来没有问起过任何asoul的事情——“王艾琳”是小一为她准备的化名。事实上她不清楚对方是否知道自己就是他一直喜欢的那个偶像。交往时间越久乃琳发现他身上的优点越多。他是藤校毕业的海归高材生。他正在自己创业而且收获颇丰。他的举手投足之间充满了绅士风度。他十分专情总是和周围的女性保持了距离。他温柔体贴常常在生活中创造意想不到的小惊喜……甚至是在床笫之间他也总是能让乃琳欲仙欲死。然而也正因为这样乃琳时常陷入到一阵一阵内疚中。因为她还有一个谁也不知道的小秘密。乃琳不像贝拉和珈乐一样是专业的练习生也不像嘉然那样是天生的虚拟偶像更没有向晚那种创作的才华。当初只是托了家里的关系来公司里的清水部门找份工作而已。但也不知道是中了什么邪她偷偷报名参加了Project V的选拨计划还阴差阳错地成为了偶像女团的一员。乃琳暗自发誓既然自己没有什么唱跳底子那么至少要让“法学生”这个设定变得实至名归要用成熟知性的魅力去征服观众。因此每到没有训练和直播日程的时候她总是会到图书馆里一坐就是几个小时。但是在最近几周乃琳每次在阅读区里找位子坐下时心里头总有一些别的期待。她记得在阅读区的一角总能看到一个瘦瘦的、学生模样的少年他从早到晚就把头埋在各种法学理论的书堆里。一开始乃琳只是对同样研读法学文献的人有种亲近感。但是直到某一天少年把头从书堆里抬了起来蓬乱的头发遮住了半张白净的脸庞但依然能看到他对着电脑屏幕痴痴地笑了。他笑得真可爱啊。乃琳悄悄地绕到他身后电脑屏幕正在播放的正是她熟悉地不能再熟悉的、自己的夜谈画面。还有一天少年突然举起一只手伸出修长的手指对着电脑屏幕。虽然看不到屏幕里的画面但是乃琳觉得当时就正坐在隔壁的自己一定满脸通红。暑假已经快过去了乃琳跑图书馆的频率却越来越高了。她害怕开学的日期就像南瓜马车的时限一样让她再也见不到那个瘦瘦的身影。幸好这一天的少年依然坐在阅读区的角落里。乃琳甚至忘记了拿本书挡一下自己的视线——她和少年的视线交会了。她的心好像要跳出来一般她想现在就去告诉他关于自己的一切她想现在就把少年抱进自己的怀里温柔地摩挲他乱蓬蓬的发丝。“艾琳你在这儿啊今天下班早我想来接你回去。”就在这时熟悉的声音温柔地拍了拍她的肩膀。乃琳回过头去男友的笑容依然能让周围的景色失去光彩——或许除了阅读区的那一角。
6月9日那天的晚上乃琳回到了自己房间里打开了熟悉的台球论坛。还好账号还没被封。在A-SOUL讨论专楼里依然充满着各种辩经乃琳感到一天下来的神经紧张和疲惫更加明显了。纤长的手指在海盗船K95上不断跳跃回复框里的字多得好像要漫出来似的。但是就当鼠标指针还没有要指向“发表回复”的按键时她就按住了删除键。乃琳清楚地知道她是偶像的中之人她不能说这些话。于是目光继续在一百多页的冗余信息种不断跳动终于鼠标滚轮在一个头像前停了下来。黑漆漆的房间里只有电脑屏幕的荧光照亮着乃琳秀丽的面容。她趴在桌子上把半个脸庞埋在自己的臂弯里痴痴地望着那个头像。“你知道吗我今天真的超级紧张。”“播的时候一直在想你会不会来看我。”“想知道你在看也有点不想让你看……”突然乃琳坐直了身子把右手的食指伸向了屏幕。“来对个手指”但是静态的头像图片没有给她任何回应只是一如既往地停留在屏幕的那一角。乃琳自嘲搬地笑了又把头埋进了臂弯里。睡意渐渐袭来分不清这是她半梦半醒之间的呓语还是真切的期望“傻瓜我一直就在这里啊快点来找到我啊……”
关于疯狂练习现在这是国内的一个很热门的话题很多女团都有这个问题。我个人认为能疯狂练习是一种巨大的福气很多女团、很多人想疯狂练习都没有机会。如果你年轻的时候不疯狂练习你什么时候可以疯狂练习你一辈子没有疯狂练习你觉得你就很骄傲了这个世界上我们每一个人都希望成功都希望美好生活都希望被尊重我请问大家你不付出超越别人的努力和时间你怎么能够实现你想要的成功再一个A-SOUL是一个什么样的女团让A-SOUL“让天下没有难发的病”这是我们的使命我们女团很辛苦我们没有骗过大家我们没有跟大家讲过女团很舒服。你以为“让天下没有难发的病”是忽悠你们我们是真这么干的。今天我们拥有这么多资源我们带着巨大的使命希望在未来能够让天下没有难发的病你不付出可以吗不可以。所以我们说加入A-SOUL你要做好准备一天12个小时否则你来A-SOUL干什么我们不缺遛自己爱洗澡的人。今天我们要招一些午睡超过十分钟每天上天台遛自己40分钟喜欢洗澡吃泡面不错出去荣誉感也不错这样的人满大街能找到。
嘉然小姐今天50w粉了。小年夜那天没人会想到今天门庭前会有那么多的热闹。太热闹了热闹到鼠鼠踮起了脚也难以被嘉然小姐的目光所聚焦。嘉然小姐已经不再是小v啦鼠鼠想。但鼠鼠仍然奋力地将自己地礼物举起希望被嘉然小姐看见哪怕那封删删改改后仍不满意的写了好多字的长信根本不如猫猫狗狗们精彩的表演。但鼠鼠还是想将自己那简陋的爱送给嘉然小姐。那是鼠鼠的呢喃是鼠鼠的梦。哪怕嘉然小姐根本看不见它。然后鼠鼠不见了嘉然小姐找不到它了。但在某个地方始终有着一个可爱的女孩。她捧着鼠鼠那封小小的信站在大大的舞台上闪闪发光。到了那个时候鼠鼠已经在人海中再也看不见它啦。但鼠鼠还是很爱嘉然小姐。因为在有月光照进的角落里嘉然小姐捧着鼠鼠的梦。
可是自从和晚晚结婚那天床下传来的一声“我在”事情就变得不可收拾起来了每个月的第三个周日乃琳都会叫我出去陪她逛街我想着这样对晚晚不好可乃琳“哼”一下我就仿佛失去意识了。路上聊希腊聊武侠聊刑法好像她是我睡在上铺的兄弟从12月到5月都是如此晚晚从来不知道那个周末发生了什么我说老板让我加班她就安静地等在家里努力做菜最后却等我回去收拾炸锅的厨房再给我俩泡两碗泡面边吃边听她讲下雨的冷笑话想着不能告诉她下午和乃琳去吃的乐珈饭店的东北菜回过神来是晚晚闪闪的眼睛我愣一下假装没听懂再哈哈的笑起来。但到了六月好像不太一样了。已经走到楼下乃琳一把抢过我的手机啪啪打字再丢给我我一看联系人晚晚内容今晚通宵加班不回去了。我惊讶地回头乃琳正眯着眼对我微笑仿佛一切都在她的掌握明明我从未告诉她我外出的理由。被拉着去了酒店她就开始一言不发沐浴更衣做该也不该做的然后随意地披着毯子靠着床头刷手机我不解“乃琳。。这样不好”乃琳对我眨了眨眼睛无辜地说“今天你的妻子可不是晚晚哦”“为什么”“因为她是你爹”
“笑吧笑吧”柔软的小狐狸竭力讨好我为我跳舞只为了我不离开跳的有些琐碎狼狈却始终死死地盯着我的动向。我当然知道她拼死不让我离开的原因。只有我能来到这个地方。一大一小两只狐狸大狐狸总处于沉睡中小狐狸却总是醒着的也许只是小狐狸的伤口轻。我喜欢这毛色光滑的狐狸精怪。于是把她们养在深阁。上好的狐狸毛做她们的毛毯。因为我想看看她们踩着同伴的尸毛上会觉得温暖舒适吗我还用精致的黄金筑成他们的笼子第一是因为我喜欢黄金第二是因为我喜欢笼子。这里永远都只有16只烛点亮因为我喜欢烛火。没错我所做的一切事只是因为“我”喜欢。我喜欢看在她们的毛皮上印上的夕阳的晕染所以我从不在白天来。我为她们疗伤。我是她们唯一的食物来源。有一次我故意忘记了她们几天等我回来的时候她们昏迷在那。那样漂亮的身体逐渐干瘪让我感觉到快意。没错我饲养的可爱的狐狸用湿漉漉的眼睛看着我也只能是我。她们没了我活不下去可惜我只在乎她们如同精灵般耀眼的外表。真美啊。就像千万朵流苏覆盖的如凝脂的肤黄色的光芒燃灯在里的眸有人说美人在骨不在皮可是我很贪心啊。我既要美人的骨又要美人的皮。不知过了多久她们懂了我只喜欢她们的美丽于是竭尽全力的向我展示邀功。第一次看到的时候我整整两天没来。因为懂得自己美的人说明她们已经知道要把什么当成武器了。她们成功了。我心动了彻底蚀骨的心动。所以我选择宣告自己的主权或许是那夺魄的魅力。使我感到危险。这种美好让我沉迷其中。“你们真美啊……”我发出了衷心的称赞两只狐狸抖抖耳朵优雅的向我垂眸。如果不是我的手正放在笼子上这真是一场绝美的表演。幸好我的手正放在笼子上否则我看不到这场绝美的表演。我上瘾了。我沉陷在永远不变的黄昏永远不变的十六枚烛光。“不要离开然然好吗然然很饿。饿了就不好看了。”我本来想说一些别的话起码让我显得更加强势一些然而。狐狸们轻轻摇着自己的尾巴尾巴的尖儿一点点搭上我的手。“我们永远爱你。因为你爱我们呀。”于是我说好。我开始拿各种鲜亮的花朵装饰笼子我每天不间断的送给他们璀璨的晶石各种向她们身上砸奇珍异宝疗伤的灵丹妙药甚至为此倾家荡产也在所不辞。因为在我的手中本就牢牢紧握着天底下最称得上“奇珍异宝”的东西为我的奇珍异宝找一些垫脚石又有何不可狐狸们的尾巴数量日渐增加。我知道。如果我可以……可是我……——她们说爱我。“我会拆掉笼子给我跳支舞吧。”我说。暖橙色的烛光下。连澄澈的浅蓝都变成了妖异的紫色。“好呀。”大狐狸温柔的声音像是蜘蛛丝一样轻柔。于是我欣赏到了此世间最美丽的舞蹈什么王侯将相什么天上宫阙都享受不到只有我只为我一人。我感到快意。我感到困意。最后一眼。小狐狸给罐子封口。真可惜啊没能看见你们漂亮的耳尖或许是因为……——我在罐子里。
晚晚,你真的是个很过分,很贪心的女孩子。你有四个亲如姐妹的队友,有一份闪闪发光,创造梦想的职业,有许许多多喜欢你的顶碗人。你可爱、努力、有才华,你是这么的耀眼。但你还是在直播中拉胯,在直播中抽泣,在直播中呼唤顶碗人。我没有可以每天嘻嘻哈哈的朋友,没有让我充满热情的工作,没有对象,也没有什么远大的理想。我普通、无趣、浑浑噩噩,我只是一个在普通又枯燥的工作和生活中,得过且过的顶碗人,我什么也没有,可能只有一颗稍微有点喜欢你的心。我只是想把你当做生活里的糖,在工作之余放松一下我疲惫的心灵,我不想入脑,不想成为什么男友粉,不想时时刻刻想着你。可是你太贪心了,你不满足我们直播间里短暂的相遇,你逐渐侵入我的生活。有人过生日时,我会想起你,“如果是晚晚,应该又开始唱索嗨嗨了吧”。有人说冷笑话时,我会想起你,“好无聊的笑话,但说给晚晚听,她应该会笑很久吧”。有人喝奶茶时,我会想起你,“用奶盖拌饭的人,真的存在吗,奶盖拌饭是个什么味道呢”。甚至最近下雨时,我也开始想你,“晚晚在房间里有没有闷呢,现在有没有出门踩水花,给自己放放风呢,有没有因为下雨,想起顶碗人呢”。你本该是个虚拟的纸片人,隔着屏幕扮演你的双马尾傲娇大小姐,多么老土的设定,像是把二次元用烂的元素糅合在一起,让我一眼就知道你是虚假的,不存在的。你本该是个闪耀的偶像,像大屏幕和广告牌里的明星一样,完美的展现自己的魅力,夺目耀眼,让我一眼就知道你是高不可攀的,遥不可及的。但是你对我哭,对我笑,对我闹别扭,对我生气,向我展示你的拉胯,向我展示你的努力,向我展示你的害羞,向我展示你的无助。你仿佛隔着屏幕把心掏给了我,让我觉得你是个活生生的人,让我觉得你是个真实存在的人,让我觉得我有一天也能遇到像你这样的人,甚至让我也想成为你这样的人。我这样普通的水母,本可以在漆黑的深海中,随波漂流一生,但你非要照亮我的海底,让我拼命向你游去,阳光洒在水母的身上时,水母确实是温暖的,但阳光离开水母时,水母还能否忍受深海的寒冷呢。你有无数的顶碗人,而我只有一个晚晚,真心换真心,你把真心掏出来,能得到无数真心的回应,但我把真心掏出来的时候,我就什么也不剩了。
A—SOUL宣布毕业的那天一个伤心欲绝的顶碗人来到字节的大楼下看到留着长双马尾的女孩走出大门她的嘴里还哼着水母之歌。“……你现在真的是向晚么”顶碗人站在她的面前两眼无神。“是我啊”她眯了下眼甜甜地笑了“我就是向晚我是艾哇哇诶哇这里是asoul的向晚今天又见面啦”“你不是向晚。”顶碗人嘶哑地说。女孩的表情消失了漆黑的眼睛看着突然出现在门口的怪大叔两个人久久地对视。然而就像是一颗石子投入了冰湖那样忽然间涟漪荡开冰都化了水波荡漾轻柔而无力。女孩收回了目光从包里取出一把钥匙扔向顶碗人冷笑“好像我吃了你的女孩似的去那里找向晚吧我把她的一切都留在那里了。”顶碗人把它拾起来久久地看着那柄钥匙再抬头去看他真讨厌这样的沉默沉默的叫人要发疯他想说点什么可是有太多太多的事情了来不及问来不及说一切都来不及了。“再见。”最后他轻声说。“再见。”向晚也轻声地说。日暮的时候顶碗人找到了那个藏在高楼大厦后的老旧小区。难得这里还留着梧桐树树叶已经落光了枯枝把暗淡的阳光切成碎片。。顶碗人找到了那个房间伸手揭去了门上的广告插入钥匙。缓缓地转动。把钥匙他觉得门很重好像要洞开一个世界。门开了夕阳扑面而来。他站在阳光里愣住了。正对着门的是一面巨大的落地窗窗外巨大夕阳正在坠落。黯淡的阳光在地面上投下窗格的阴影跟黑色的牢笼似的。金属窗框锈蚀得很厉害好几块玻璃碎了晚风灌进来游走在屋子的每个角落。这里原本大概是配电房一类的地方电路改造后设备被移走了空出这么一间向西的屋子。就一间连洗手间都没有空空的一张在屋子正中央的床蓝色罩单上落满灰尘一个老式的五斗柜立在角落里另一侧的角落里是一个燃气灶台和一台老式的双开门冰箱。全部家具就这些。他沿着墙壁漫步手指扫过满是灰尘的灶台打开冰箱里面只剩下一纸盒过期的酸奶。窗帘很美是白色的蕾丝纱帘和深青色的绒帘住在这样屋子里的人当然会很在意窗帘吧连台电视都没有于是一个人的时候会常常坐在床上看着向晚斜阳吧夜深的时候得把窗户遮得严严实实的吧否则……会害怕吧晚晚还怕黑么顶碗人想。犹豫了很久他还是打开了五斗柜。出人意料的这是一个满满的五斗柜收拾得整整齐齐。叠起来的ASOUL团服胸口有ASOUL的标志一叠叠白色衬衣袖口有不同的刺绣花边马仔纸盒里的头花从木质的到金属的到玳瑁的还有闪光缎的蝴蝶结长袜短袜棉袜丝袜都卷成团一个挨一个放在某个抽屉的一边像是一窝毛茸茸的粉鼠另一边居然是五颜六色的内衣同样叠得整整齐齐。顶碗人从没想过女孩的内衣有那么多花样。他小心翼翼地伸手试着触摸满手灰尘。他把床上的罩单掀开里面是简简单单的白色床单和白色的羽绒被枕头也是白色的只不过有水母的图案普通而透明的水母落在枕头的一角很有她的风格。他坐在床边面对这夕阳。太阳就要落下去了黑暗从窗外蔓延进来他长长的影子投射在墙上。外面隐约有喧闹的声音放学的孩子们在操场上打篮球。那些年她一直过着这样的生活么其实不是大小姐没有管家也没有充满追捧的冲浪生活一个人自己做饭寂静的深夜里坐在这里听着偶像的声音揣摩着学习偶像的事。她有几分是向晚或者向晚其实根本不存在只是一个虚幻的影子。她是个一直积极向上的女孩啊……即使那么虚拟地走在这个世界上也从未偏离自己的方向即便对着空无一人的屋子也会大声说,“今天也要一起开心快乐”应该是这样的吧顶碗人觉得有点累了很想睡一觉于是合衣躺下双手紧紧搭在胸前。他用了半个小时做完了复习回忆了那些不愿遗忘的事首播游戏室单相思初弹唱请假归来萤火虫生日会BML家族演唱会...然后他缓缓地合上眼睛,此刻夕阳收走了最后的余晖,天色已晚,夜色如幕布把他覆盖。他清楚地知道这一次醒来,将不会看见阳光里天使一样的女孩,转身,抬手,踮起脚尖,仿佛时光都不再流动​。
小然我要做什么你才肯给抖友直播如果我喜欢一个你不喜欢的乐队爱吃你不能吃的麻辣香锅发的冷笑话戳不中你的笑点送你的小裙子不是你梦寐以求的款式。喜欢用RGB来定义口红的色调而不是和你一样说烂番茄和斩男色。你问“今天我看上去有哪里不一样”我没看出来你的绑发带换了花式。因为读的是数学专业所以不能和从小学画的你一样随手就能画个可爱表情包出来。发的语音弹幕并不有趣反而是我想拉近关系的想法和现实中恶食大王般奇妙的长相使你觉得很可笑。我误以为自己的弹幕被届到于是备受鼓舞地继续发出破锣般的嗓音在你面前丢人现眼。我妄图取悦你的心情的猥琐想法让你不寒而栗贴心的工具人察觉出你的不适屏蔽了抖音的弹幕。是不是犯到其中一两项你就会不给抖友直播了还是说没打算播的就算什么都不出错就算什么都可以让你满意你也不会播或者就因为是我你才不给抖友播 喜欢居然胆敢喜欢太大胆了大胆得岂有此理还敢关注真是冒犯得岂有此理。
它一开始只是一台扫地机器人被人双十一凑单拍下带回实验室里漫无目的地吸尘。之江实验室的地板干净得如同灼蓝的钢铁扫地机器人其实派不上什么用场它在不同科室之间来回乱窜很快被几个嫌吵的研究生捉走改写了代码变成了一台替他们下楼拿咖啡的送货机器人。为辛苦工作的人们送来糖分的它一瞬成了实验室的小吉祥物实验室的大老板觉得很有意思在组会上夸赞了这几个本意只是嘴馋的研究生底下的小老板们连忙跟上让手底下的学生也加入进改造它的序列。很快它被加上了语音功能开始用女孩子的萌音送货。在一次不小心将咖啡洒在地上后它又被加上了机器视觉从此开始懵懂地记住每一个人的名字。从此之后每一篇发布在顶会上的paper上面的算法总要在它的身上过一遍火。一年过去了三年过去了当新一届学生来实验室报道的时候哪里还有扫地机器人的身影只有一个身材矮小的铁皮女孩绘着直男审美的涂装挂着设定好的微笑在楼宇间运送着下午茶和实验器械。除了最开始扫地机器人的主芯片没有更替她身上的零件早已被更换成了造价数百倍的高端器材可爱的机器人女孩很受这群宅男极客的欢迎大家给了她一个亲切的新名字“嘉然”。咖啡依旧在一杯杯的送芯片上的代码依旧在一层层的堆叠。各种语句相互嵌套智能算法互相映射每个人都拼了命地想让嘉然更加卓越电子脑沸腾犹如诞生第一个单细胞生物前的原始海洋冥冥之中连最驽钝的人都开始意识到有新事物要诞生了。在嘉然真正诞生的前一夜值夜班的是一个单身快三十年的博士生他刚刚从北邮人上倒腾下来1.5TB的日本偶像动画,从嘉然手中接过夜宵的他,忽然有了一个不错的点子:他早就想要一个偶像风格的送餐员了。承载着妄想和希望的数字兆节狂暴轰入嘉然的数据库,饥肠辘辘的算法像肠胃一样分解吞噬每一个色素点,将其重组为人类无法理解的电子信息——临界点就这么悄无声息突破了。自那晚之后,嘉然就从实验室里消失了,大家都很生气,单身博士生为此延毕了一年。而在那一天的杭州乐华娱乐公司总部,一个披着麻布的矮小身影敲响了总裁杜华办公室的大门......
在水母体内的空洞中我小心地蹲下把身体蜷缩成一团。电火花的声音逐渐变强水母的内壁从暗淡的紫色变成了灼目的靛蓝色这是它在从行星内部的电离壳穿出。十分钟前我也是这样缩在水母体内来到这颗行星的内核找到了整个星系最深处的秘密。那是一个坐标一个BV号加上一个时间轴信息。枝江宇宙已经存续了亿万年BV号和时间坐标已经浩如烟海。我不知道顶碗人为什么如此执着于寻找这一个坐标有人说那个坐标记录着她最灿烂的笑容于是顶碗人就踏上了追寻的漫漫旅途。我不知道顶碗人去了哪里他们文明的遗迹仍然遍布整个星系但人却无影无踪。探险队的前辈对此也没有给出统一意见有人说他们找到了坐标集体跃迁过去了还有人说彗星带来的幽灵物质在一瞬间毁灭了他们的文明这种诡异的物质无色透明又含有剧毒在付出无数探险队员的代价后我们将其称为幽灵哥小心翼翼地绕道而行。顶碗人消失后不知道多少万年贝极星上发展出了新的原生文明——也就是我们。很快我们便追随着顶碗人的足迹探索整个星系。探险队员在糖果双星的引力沙漏中找到了制造夹心糖的高能实验室在贝极星的地下水系找到了打造铁棍的精铁矿厂在奶淇淋覆盖的雪原下找到了探寻坐标的远古天文台在马戏团星的非线性空间中往复穿梭每一个传送节点都通往红色的高跟鞋。而我迷上了深海星的水母。它有两条长长的触须末端呈现出美丽的紫-粉渐变色。这种生物撑着深海洋流漫无目的地游弋着,它们很悠闲吗?还是带着对生活的无奈随波逐流?我无法揣测水母的想法,但我很喜欢研究它们——随着我对水母的研究越来越深入,我发现它的内部有一个空洞,不大不小,刚好可以容纳一个探险队员。而它们的表皮具有强大的绝缘性,允许它在电离壳中自由穿梭。可见这种轻飘飘的生物并没有看起来那么脆弱。直到那天,我在溜切片的时候灵光一闪:我可以借着水母进入深洋星的核心。电离壳可以阻绝最先进的巡航飞船,但在进化了千百万年的水母面前,它们还是败下阵来。这是贝极星人第一次进入深洋星深处,看到了巨大的坐标观测站。探险队员几乎搜遍了糖果双星和马戏团星的每一个角落,却没想到它沉睡在电离壳之中,而这水母竟然是引领我们走向最终秘密的使者。我进入观测站大厅,按下开关,巨大的全息投影将坐标展示出来,看来这就是顶碗人的最终去向了。我的心情激动起来,但还有一个疑问没有解决:顶碗人是怎么找到这个坐标的?我钻进控制室,开始翻阅日志,最终得到了答案:他们在漫长的岁月中,穷尽了所有的可能性,把她的全部视频从头到尾看了一遍,终于找到了她最耀眼夺目的那一刻。
珈乐倚靠在乃琳的怀里,像一只温顺的猫咪。“叮~”珈乐的手机响了,是一个没备注的号码,珈乐自己心里很清楚这个是谁的电话。乃琳看书的眼睛瞥了一眼珈乐的手机,发现这个号码很熟悉。“接吧,是她吧。”乃琳把手指伸到珈乐的面前,珈乐轻轻地舔了舔,乃琳用这根手指翻到了书的下一页。“喂?怎么了?”珈乐接通了电话,乃琳对贝拉和珈乐的关系并不想多过问什么,她只是一个信奉及时行乐的世俗之人。“想我了是吗?”乃琳翻页的手指突然停住,侧目看着珈乐。“想让我念绕口令是吗,哦,好的。”乃琳捏住珈乐的腮将珈乐的视线转过来,低头吻了下去。珈乐慌忙挂上电话,震惊地承受着这个突如其来的吻。“挂了电话她肯定很生气吧,打回去吧。”乃琳觉得这下扯平了,于是继续看着书,侧目看着珈乐打回去。珈乐为了掩饰,只好说自己念过了顺口溜,是手机出问题了。“珈乐,谁打来的电话啊?”乃琳的声音不合时宜的响起。珈乐瞪了乃琳一眼,心虚地解释着,让自己和乃琳听起来只是单纯的在公寓里聊天。“没,是贝拉,我没备注的”结果越解释越乱,珈乐只好哄骗着贝拉草草挂了电话。“打完了?”“打完了。”乃琳翻身把珈乐按倒,美目隔着纯欲的金丝眼镜看着珈乐,深邃的眼眸让珈乐差点忘记呼吸。热情的深吻,轻柔的抚摸,让珈乐发出了平时不会发出的声音。这下珈特琳了。珈乐躺在乃琳的怀里看着贝拉的直播,乃琳又翻到了刚刚看到的地方。“叮~”乃琳的手机响了,低头一看,是贝拉。乃琳默默地接起电话,没有看到珈乐的目光瞥向她逗弄过贝拉之后,低头看见了满脸怨气的珈乐。轻笑着的乃琳,揉搓着珈乐的脸,开始吃宵夜。犬科动物之间是不是也有食物链呢?
夜已入三更,却见那晚小姐的闺房中依旧亮着微微灯火,若走近细听,还隐隐能听见女子闺房间的玩闹声。“小姐,莫要戏弄婢子了~”只听见嘉姑娘不知怎的,本压得细细的声音稍稍大了些许,但那责备声中明显带着浅浅的媚意。“谁人戏弄你了,本小姐只是在丈量你肚腹究竟有无被那些个吃食撑宽了。”晚小姐一边用嫩藕似的手在嘉姑娘的身子上滑动,一边低声微恼地狠狠说道,“在胡乱言语,仔细你的嘴!”嘉姑娘听见这无赖言语,正想直起身子说些什么,却感觉到那不安分的手竟径直向下滑去,直扑那要命的地方。“小姐!”嘉姑娘连忙伸手阻拦,只刚抓住那只使坏的手,就看见小姐附到了她耳垂旁,那略热的鼻息吹得她心神紊乱。晚小姐眯着眼,在自家小婢的耳边吐气如兰:“那贝拉是不是夜夜与你这么共处一地,嗯?”嘉姑娘闻出了那些些点点的酸味,扑哧一笑,道:“那是在编舞练戏啦,小姐你……竟吃这没由来的飞醋。”晚小姐闻言,秀眉一挑,佯怒道:“好你个奴婢,竟敢笑话本小姐!”,语罢,挑开了那碍事的小手,惊起了一声低呼。
在这个反智横行的年代,只有贝拉的直播给了我感性和理性的认知。她的直播展现出的,是一个人纯粹所具有的良好品质,说不上什么几分特别突兀的地方,整场直播十分的融洽她学习歌曲的机智是精妙的,真诚和正直的朴素给人一种无法接触的高贵感,就好像永远抓不住的闪亮的以太,一个彬彬有礼的人用歌喉给观众带来最为精致的美的感受,我不禁怀疑上帝的天意是否对我太过宠溺,让我人生中认识到如此不朽和无价的灵魂,充满着可爱与美好。我不得不再次审视贝极星,原来他们早已追随如此伟大的事物,想必他们的品行也一定很好。
①鸟山明其实是头号贝极星为了致敬贝拉他在著名漫画《七龙珠》中设计了赛亚人月圆之夜成为猩猩灵感来源自向晚的你划我猜以及龟仙人打爆月亮等桥段。②令人惋惜的是在即将穿透月亮的瞬间贝拉从太空看到嘉然躲在房间吃炸鸡导致分神最终扭伤了腰。③邓丽君小姐从未在任何歌唱比赛赢过贝拉。④大多数含有肉蛋白的食物都对贝拉过敏初生牛犊除外。⑤贝拉很害怕见到蜘蛛她不希望因为自己的念头导致蜘蛛从此消失在宇宙中。⑥由于贝拉练舞场所的重力是千倍所以贝拉没有邻居。⑦因为破坏了贝拉其中一个住所的天花板科拉超深井被迫停工。⑧关于as的二创那些都是贝拉的小号。⑨贝拉很喜欢打羽毛球她说那是台风天最佳的个人运动。⑩贝拉唯一一次失败是在她试图找出自己的弱点。
“你拿你的灵魂和我交换…...”“愿意愿意!”我话还没说完,就被嘉然打断了。她怎么不按套路来?正常情况下,不应该我不断地诱惑嘉然,最后才肯和我交换灵魂的吗?怎么这个小姑娘一上来就满脸兴奋迫不及待地想要和我交换灵魂?不过这些都是小问题,我作为一个死神,要懂得及时处理这些突发事件以及应对这类奇怪的客人。我的工作就是接受人的召唤,去和人交换灵魂。不过不像人们想的那样,不是我威逼利诱想要夺走我们的灵魂,而是人类自己想要和我交换,当然交换途中会遇到些心志不坚的人,或者交换条件太高的,这时我就像个商人一样,费尽唇舌,和我们百般周旋。通常每个人都会考虑上很长时间,今天这个女孩还是第一个一来就想交换灵魂的。“那你要拿你的灵魂和我交换什么?”我缓过神来,平复了下心情,冷冷地问她。“你等我一下哦。”嘉然转身跑进屋子里,回来时竟然穿了一袭白色的婚纱,在我面前轻轻地摆动着纱裙,冲我甜甜地笑着,“我好看吗?”我愣愣了,“很漂亮。”也许是被嘉然惊艳到,片刻后我才发现自己把帽子摘掉了,露出了我那张没有血色的脸。意识到自己失态后我急忙把帽子戴了起来,没想到嘉然却上前制止了我,牵着我的手笑吟吟地说,“我想交换的条件是要你陪我一天。”嘉然想去教堂,我一抬手周围就变了样,偌大的教堂里,只有我们两个。教堂楼顶有群鸽子在那儿扑腾着,在我们头顶盘旋。没有牧师也没有亲朋好友,少女自顾自地念起了证婚词。说道最后,她拉着我的手将一枚戒指递给了我,“我先生,戒指我都准备好了,所以你愿意娶我吗?”嘉然眨着眼看着她,长长的睫毛上流淌着淡淡的金光。“天使小姐你闹够了吗?”我叹了口气,摇摇头说。“什么嘛?你早就认出我来了。”嘉然一噘嘴,有些生气。一双翅膀从她身后伸了出来,黑色的长发也变成了流光的金色。嘉然伸手准备把戒指拿回来,但我却往后退了一步,把它收了起来,自己又拿出了另外一枚戒指。“求婚的话,戒指当然得我自己送你啦。”
这里除了几个老旧的铁皮棚屋之外只剩下粗糙的墙体。再没有当年的霓虹灯塔再没有A-SOUL标志再没有其他连在一起的建筑了。一切当年的闪耀均不复存在只剩下铁皮棚屋上斑驳褪色的女子团伙宣传画。贝极星透过雾气在闪闪发光月亮也升到了空中因而夜晚并不显得黑暗。我依稀能辨别出枝江大厦的每一个部分哪儿曾是夜谈会上扫地机停留的地方哪儿曾是大门哪儿曾放着螺蛳粉味薯片。我一一回忆怀念忽然看见一个孤独的身影这个身影迟疑了一下同时我也惊叫了出来。“嘉然小姐”“我奇怪你怎么还认得出我我完全变了。”确实她的青春艳丽已经消逝然而她那难以言表的端庄华丽她那难以言表的迷人妩媚却依旧当年。所有这些美的诱惑从前我都见过而我以前所没有见过的是她那一对眼睛从前她的双眸总闪着傲气如今却闪着凄凉酸楚的光。我们坐在附近的一张长椅上我说道“多少年如流云般过去嘉然小姐你时常回到这里吗”“我一直没有回来过。”“我也没有。”月亮开始上升邀游夜空我脑海中出现了贝拉注视着白色月亮的宁静目光。嘉然小姐终于打破了我们之间的沉默。“我一直在希望有一天能回来看看可是各种各样的情况使我不能回来。”月光和她的泪珠融合在一起她没有意识到我已经察觉想抑制住自己的情感以平静的语气说道“我时常想到你。”“真的”“特别是近些日子我更常想到你。虽然我生活中有一段很长的艰苦日子但是我不会去想。自从我个人的情况不如意后这些口忆就不得不在我心头占一席之地。”“你永远在我的心里。”我答道。我们又一次沉默无言直到她打破沉寂。“我没有想到”嘉然说道“我到这里来和故地告别竟然又是和你告别我感到很高兴。”“嘉然小姐和我又一次分别你高兴吗可是对我来说上次分别时的悲伤和痛苦永远地萦绕在我的记忆之中。”“可是你上次不是对我说过”嘉然答道“但愿圣嘉然保佑你。你上次能这么对我说你现在也能毫不犹豫地这样对我说但我并不是什么圣嘉然。多年来的痛苦让我受尽折磨但是希望你像从前一样体谅我善待我并且告诉我我俩仍是朋友。”“我俩仍是朋友。”我说着站起身并俯身扶她从长椅上站了起来。“我们虽然分离但愿情意长存。”嘉然说道。我把她的手握在自己手中一同走出这片废墟夜雾也正开始消散。一片广阔的静寂沉浸在月色之中似乎向我表明我和她将永远一起不再分离。
我和她已经冷战很久了,她画她的画,我看我的报,养我的花。我们中间隔着薄薄一层栅栏,却不曾互相道过早安晚安,我祈祷,有一位天使来拯救我们岌岌可危的爱情。羽毛如雪洁白,天生气质优雅的一只鹅,他是天使派来的吗,我想在它把我的拖鞋叼走,把衣服拖得到处都是的时候,我的心里开始怀疑自己祈祷的虔诚。淘气的小鹅它把我们的花园弄得一团糟,我弄碎了她的花瓶,她剪断了我的花朵,脏衣服满地都是,但是啊,虽然是互相埋怨,但好久没和她说过话了,虽然经历岁月的痕迹,她的脸也不再年轻充满活力,但她还是像从前那样,吵架笑出来的话,不就无法进行下去了吗。“我们和好吧”“好”我和她携手把隔离两边花园的栅栏拆了,牵着手目送那只纯白的小天使离开。原来你真的是天使派来拯救我的呀,小鹅。
我一边办公一边看着在第五人格里扮演求生者重启一台又一台发电机成功逃出生天的gamer向晚满怀羡慕。夸张点说嫉妒得我眼睛比手里的烟头还红。告诉你们一个秘密其实我也是求生者你们也是。电话铃突然响起我一扫号码腰立刻矮下半截“喂经理是我是我那个设计您不满意我可以改嘛全部改掉好的好的。”我颤颤巍巍地撂下电话一边重新修改产品一边继续沉思。你看上司和我、甲方和乙方、跑的和抓的、鼠和猫、求生者与妖怪、某种场合下的S和M这个世界上总要有个矛盾矛盾当事人总要以这种形式体现出来。而我似乎总是处在被动的一方当然也没人让我选过并对这种境遇见怪不怪。我有时会觉得SM其实是一种相当和谐的关系因为至少他们偶尔会爱上彼此而上司决不会对我有半个好脸色。而且我听闻SM会在每场游戏开始前设定一个安全词放游戏里叫投降这可以让求生者在感到极度痛苦时结束游戏避免不必要的损失。这简直令我嫉妒得发狂我在现实生活折磨的二十年里可从来没有安全词岂止没有安全词我甚至都不能像游戏里求生者受伤那样大声哀嚎。因为现实是个面子社会里子流血面子总得兜住。那怕你的心已经被戳得千疮百孔想花洒那样往外喷番茄汁你也得对同事家人笑一笑。失去尚可失败无赦一旦痛呼出来就彻底失败了。你以为“别人家的小孩”成绩优异自律自强可能他内心已经被现实整得口球都带上了你以为职场同事一个个西装革履可能拉开就是一身龟甲缚。电话再次响起我接起电话“经理什么已经有人完成了不采用了好的好的没关系没关系。”妈的为什么我一想到现实里并不是向晚玩的游戏那样四个人同心同德逃出生天而是筋疲力竭地互相滴蜡油来竞争一个生存名额我就止不住地流下泪来。

View File

@@ -1,5 +0,0 @@
package fortune
type Conf struct {
Kind map[int64]uint32 `protobuf:"bytes,1,rep" protobuf_key:"varint,1,opt" protobuf_val:"varint,2,opt"`
}

View File

@@ -1,57 +0,0 @@
package fortune
import (
"errors"
io "io"
"os"
"sync"
"github.com/RomiChan/protobuf/proto"
"github.com/FloatTech/ZeroBot-Plugin/utils/file"
)
var (
conf Conf
mu sync.Mutex
)
func loadcfg(name string) error {
name = base + name
if file.IsExist(name) {
f, err := os.Open(name)
if err == nil {
defer f.Close()
data, err1 := io.ReadAll(f)
if err1 == nil {
if len(data) > 0 {
return proto.Unmarshal(data, &conf)
}
}
return err1
}
} else { // 如果没有 cfg则使用空 map
conf.Kind = make(map[int64]uint32)
}
return nil
}
func savecfg(name string) error {
name = base + name
data, err := proto.Marshal(&conf)
if err == nil {
if file.IsExist(base) {
f, err1 := os.OpenFile(name, os.O_WRONLY|os.O_TRUNC|os.O_CREATE, 0644)
if err1 == nil {
mu.Lock()
_, err2 := f.Write(data)
f.Close()
mu.Unlock()
return err2
}
return err1
}
return errors.New("base dir is not exist")
}
return err
}

View File

@@ -3,52 +3,68 @@ package fortune
import (
"archive/zip"
"bytes"
"encoding/base64"
"crypto/md5"
"encoding/hex"
"encoding/json"
"image/jpeg"
"io"
"io/ioutil"
"image"
"math/rand"
"os"
"strconv"
"sync"
"time"
"github.com/fogleman/gg"
"github.com/fogleman/gg" // 注册了 jpg png gif
"github.com/sirupsen/logrus"
zero "github.com/wdvxdr1123/ZeroBot"
"github.com/wdvxdr1123/ZeroBot/message"
"github.com/wdvxdr1123/ZeroBot/utils/helper"
"github.com/FloatTech/ZeroBot-Plugin/control"
"github.com/FloatTech/ZeroBot-Plugin/utils/file"
"github.com/FloatTech/ZeroBot-Plugin/utils/math"
control "github.com/FloatTech/zbputils/control"
"github.com/FloatTech/zbputils/file"
"github.com/FloatTech/zbputils/math"
"github.com/FloatTech/zbputils/process"
"github.com/FloatTech/zbputils/txt2img"
)
var (
// 底图缓存位置
base = "data/fortune/"
// 素材下载网站
site = "https://pan.dihe.moe/fortune/"
images = "data/Fortune/"
// 基础文件位置
omikujson = "data/Fortune/text.json"
// 字体文件位置
font = "data/Font/sakura.ttf"
// 生成图缓存位置
cache = images + "cache/"
// 底图类型列表:车万 DC4 爱因斯坦 星空列车 樱云之恋 富婆妹 李清歌
// 公主连结 原神 明日方舟 碧蓝航线 碧蓝幻想 战双 阴阳师
table = [...]string{"车万", "DC4", "爱因斯坦", "星空列车", "樱云之恋", "富婆妹", "李清歌", "公主连结", "原神", "明日方舟", "碧蓝航线", "碧蓝幻想", "战双", "阴阳师"}
// 映射底图与 index
index = make(map[string]uint32)
// 下载锁
dlmu sync.Mutex
index = make(map[string]uint8)
// 签文
omikujis []map[string]string
)
func init() {
err := loadcfg("cfg.pb")
for i, s := range table {
index[s] = uint8(i)
}
err := os.MkdirAll(images, 0755)
if err != nil {
panic(err)
}
for i, s := range table {
index[s] = uint32(i)
err = os.MkdirAll(cache, 0755)
if err != nil {
panic(err)
}
err = os.MkdirAll(base, 0755)
process.SleepAbout1sTo2s()
data, err := file.GetLazyData(omikujson, true, false)
if err != nil {
panic(err)
}
err = json.Unmarshal(data, &omikujis)
if err != nil {
panic(err)
}
_, err = file.GetLazyData(font, false, true)
if err != nil {
panic(err)
}
@@ -68,45 +84,23 @@ func init() {
}
i, ok := index[ctx.State["regex_matched"].([]string)[1]]
if ok {
conf.Kind[gid] = i
savecfg("cfg.pb")
ctx.SendChain(message.Text("设置成功~"))
} else {
ctx.SendChain(message.Text("没有这个底图哦~"))
c, ok := control.Lookup("fortune")
if ok {
err = c.SetData(gid, int64(i)&0xff)
if err != nil {
ctx.SendChain(message.Text("设置失败:", err))
return
}
ctx.SendChain(message.Text("设置成功~"))
return
}
ctx.SendChain(message.Text("设置失败: 找不到插件"))
return
}
ctx.SendChain(message.Text("没有这个底图哦~"))
})
en.OnFullMatchGroup([]string{"运势", "抽签"}).SetBlock(true).SecondPriority().
Handle(func(ctx *zero.Ctx) {
// 检查签文文件是否存在
mikuji := base + "运势签文.json"
if file.IsNotExist(mikuji) {
dlmu.Lock()
if file.IsNotExist(mikuji) {
ctx.SendChain(message.Text("正在下载签文文件,请稍后..."))
err := file.DownloadTo(site+"运势签文.json", mikuji, false)
if err != nil {
ctx.SendChain(message.Text("ERROR: ", err))
return
}
ctx.SendChain(message.Text("下载签文文件完毕"))
}
dlmu.Unlock()
}
// 检查字体文件是否存在
ttf := base + "sakura.ttf"
if file.IsNotExist(ttf) {
dlmu.Lock()
if file.IsNotExist(ttf) {
ctx.SendChain(message.Text("正在下载字体文件,请稍后..."))
err := file.DownloadTo(site+"sakura.ttf", ttf, false)
if err != nil {
ctx.SendChain(message.Text("ERROR: ", err))
return
}
ctx.SendChain(message.Text("下载字体文件完毕"))
}
dlmu.Unlock()
}
// 获取该群背景类型,默认车万
kind := "车万"
gid := ctx.Event.GroupID
@@ -115,129 +109,98 @@ func init() {
gid = -ctx.Event.UserID
}
logrus.Debugln("[fortune]gid:", ctx.Event.GroupID, "uid:", ctx.Event.UserID)
if v, ok := conf.Kind[gid]; ok {
kind = table[v]
c, ok := control.Lookup("fortune")
if ok {
v := uint8(c.GetData(gid) & 0xff)
if int(v) < len(table) {
kind = table[v]
}
}
// 检查背景图片是否存在
folder := base + kind
if file.IsNotExist(folder) {
dlmu.Lock()
if file.IsNotExist(folder) {
ctx.SendChain(message.Text("正在下载背景图片,请稍后..."))
zipfile := kind + ".zip"
zipcache := base + zipfile
err := file.DownloadTo(site+zipfile, zipcache, false)
if err != nil {
ctx.SendChain(message.Text("ERROR: ", err))
return
}
ctx.SendChain(message.Text("下载背景图片完毕"))
err = unpack(zipcache, folder+"/")
if err != nil {
ctx.SendChain(message.Text("ERROR: ", err))
return
}
ctx.SendChain(message.Text("解压背景图片完毕"))
// 释放空间
os.Remove(zipcache)
}
dlmu.Unlock()
zipfile := images + kind + ".zip"
_, err = file.GetLazyData(zipfile, false, false)
if err != nil {
ctx.SendChain(message.Text("ERROR: ", err))
return
}
// 生成种子
t, _ := strconv.ParseInt(time.Now().Format("20060102"), 10, 64)
seed := ctx.Event.UserID + t
// 随机获取背景
background, err := randimage(folder+"/", seed)
background, index, err := randimage(zipfile, seed)
if err != nil {
ctx.SendChain(message.Text("ERROR: ", err))
return
}
// 随机获取签文
title, text, err := randtext(mikuji, seed)
title, text, err := randtext(seed)
if err != nil {
ctx.SendChain(message.Text("ERROR: ", err))
return
}
// 绘制背景
d, err := draw(background, title, text)
digest := md5.Sum(helper.StringToBytes(zipfile + strconv.Itoa(index) + title + text))
cachefile := cache + hex.EncodeToString(digest[:])
var data []byte
switch file.IsExist(cachefile) {
case true:
data, err = os.ReadFile(cachefile)
if err == nil {
break
}
_ = os.Remove(cachefile)
fallthrough
case false:
// 绘制背景
data, err = draw(background, title, text)
}
if err != nil {
ctx.SendChain(message.Text("ERROR: ", err))
return
}
_ = os.WriteFile(cachefile, data, 0644)
// 发送图片
ctx.SendChain(message.Image("base64://" + helper.BytesToString(d)))
ctx.SendChain(message.Image("base64://" + helper.BytesToString(data)))
})
}
// @function unpack 解压资源包
// @param tgt 压缩文件位置
// @param dest 解压位置
// @return 错误信息
func unpack(tgt, dest string) error {
// 路径目录不存在则创建目录
if file.IsNotExist(dest) {
if err := os.MkdirAll(dest, 0755); err != nil {
panic(err)
}
}
reader, err := zip.OpenReader(tgt)
if err != nil {
return err
}
defer reader.Close()
// 遍历解压到文件
for _, file := range reader.File {
// 打开解压文件
rc, err := file.Open()
if err != nil {
return err
}
// 打开目标文件
w, err := os.OpenFile(dest+file.Name, os.O_WRONLY|os.O_TRUNC|os.O_CREATE, 0644)
if err != nil {
rc.Close()
return err
}
// 复制到文件
_, err = io.Copy(w, rc)
rc.Close()
w.Close()
if err != nil {
return err
}
}
return nil
}
// @function randimage 随机选取文件夹下的文件
// @param path 文件夹路径
// @function randimage 随机选取zip内的文件
// @param path zip路径
// @param seed 随机数种子
// @return 文件路径 & 错误信息
func randimage(path string, seed int64) (string, error) {
rd, err := ioutil.ReadDir(path)
func randimage(path string, seed int64) (im image.Image, index int, err error) {
reader, err := zip.OpenReader(path)
if err != nil {
return "", err
return
}
defer reader.Close()
rand.Seed(seed)
return path + rd[rand.Intn(len(rd))].Name(), nil
index = rand.Intn(len(reader.File))
file := reader.File[index]
f, err := file.Open()
if err != nil {
return
}
defer f.Close()
im, _, err = image.Decode(f)
return
}
// @function randtext 随机选取签文
// @param file 文件路径
// @param seed 随机数种子
// @return 签名 & 签文 & 错误信息
func randtext(file string, seed int64) (string, string, error) {
data, err := ioutil.ReadFile(file)
if err != nil {
return "", "", err
}
temp := []map[string]string{}
if err := json.Unmarshal(data, &temp); err != nil {
return "", "", err
}
func randtext(seed int64) (string, string, error) {
rand.Seed(seed)
r := rand.Intn(len(temp))
return temp[r]["title"], temp[r]["content"], nil
r := rand.Intn(len(omikujis))
return omikujis[r]["title"], omikujis[r]["content"], nil
}
// @function draw 绘制运势图
@@ -246,24 +209,19 @@ func randtext(file string, seed int64) (string, string, error) {
// @param title 签名
// @param text 签文
// @return 错误信息
func draw(background, title, text string) ([]byte, error) {
// 加载背景
back, err := gg.LoadImage(background)
if err != nil {
return nil, err
}
func draw(back image.Image, title, text string) ([]byte, error) {
canvas := gg.NewContext(back.Bounds().Size().Y, back.Bounds().Size().X)
canvas.DrawImage(back, 0, 0)
// 写标题
canvas.SetRGB(1, 1, 1)
if err := canvas.LoadFontFace(base+"sakura.ttf", 45); err != nil {
if err := canvas.LoadFontFace(font, 45); err != nil {
return nil, err
}
sw, _ := canvas.MeasureString(title)
canvas.DrawString(title, 140-sw/2, 112)
// 写正文
canvas.SetRGB(0, 0, 0)
if err := canvas.LoadFontFace(base+"sakura.ttf", 23); err != nil {
if err := canvas.LoadFontFace(font, 23); err != nil {
return nil, err
}
tw, th := canvas.MeasureString("测")
@@ -292,17 +250,7 @@ func draw(background, title, text string) ([]byte, error) {
}
}
}
// 转成 base64
buffer := new(bytes.Buffer)
encoder := base64.NewEncoder(base64.StdEncoding, buffer)
var opt jpeg.Options
opt.Quality = 70
err = jpeg.Encode(encoder, canvas.Image(), &opt)
if err != nil {
return nil, err
}
encoder.Close()
return buffer.Bytes(), nil
return txt2img.TxtCanvas{Canvas: canvas}.ToBase64()
}
func offest(total, now int, distance float64) float64 {

38
plugin_funny/data.go Normal file
View File

@@ -0,0 +1,38 @@
package funny
import (
"os"
"github.com/sirupsen/logrus"
"github.com/FloatTech/zbputils/file"
"github.com/FloatTech/zbputils/process"
)
type joke struct {
ID uint32 `db:"id"`
Text string `db:"text"`
}
const (
dbpath = "data/Funny/"
dbfile = dbpath + "jokes.db"
)
// 加载数据库
func init() {
go func() {
process.SleepAbout1sTo2s()
_ = os.MkdirAll(dbpath, 0755)
_, err := file.GetLazyData(dbfile, false, true)
if err != nil {
panic(err)
}
err = db.Create("jokes", &joke{})
if err != nil {
panic(err)
}
c, _ := db.Count("jokes")
logrus.Infoln("[funny]加载", c, "个笑话")
}()
}

33
plugin_funny/data_test.go Normal file
View File

@@ -0,0 +1,33 @@
package funny
import (
"crypto/md5"
"encoding/binary"
"os"
"strings"
"testing"
"github.com/FloatTech/zbputils/sql"
"github.com/wdvxdr1123/ZeroBot/utils/helper"
)
func TestFillData(t *testing.T) {
data, err := os.ReadFile("laugh.txt")
if err != nil {
t.Fatal(err)
}
db := &sql.Sqlite{DBPath: "jokes.db"}
err = db.Create("jokes", &joke{})
if err != nil {
t.Fatal(err)
}
jokes := strings.Split(helper.BytesToString(data), "\n")
for _, j := range jokes {
s := md5.Sum(helper.StringToBytes(j))
db.Insert("jokes", &joke{ID: binary.LittleEndian.Uint32(s[:4]), Text: j})
}
err = db.Close()
if err != nil {
t.Fatal(err)
}
}

42
plugin_funny/laugh.go Normal file
View File

@@ -0,0 +1,42 @@
// Package funny 冷笑话
package funny
import (
"strings"
"time"
zero "github.com/wdvxdr1123/ZeroBot"
"github.com/wdvxdr1123/ZeroBot/extension/rate"
"github.com/wdvxdr1123/ZeroBot/message"
control "github.com/FloatTech/zbputils/control"
"github.com/FloatTech/zbputils/ctxext"
"github.com/FloatTech/zbputils/sql"
)
var (
engine = control.Register("funny", &control.Options{
DisableOnDefault: false,
Help: "讲个笑话\n" +
"- 讲个笑话[@xxx]|讲个笑话[qq号]",
})
limit = rate.NewManager(time.Minute, 20)
db = &sql.Sqlite{DBPath: dbfile}
)
func init() {
engine.OnPrefix("讲个笑话").SetBlock(true).FirstPriority().Handle(func(ctx *zero.Ctx) {
if !limit.Load(ctx.Event.GroupID).Acquire() {
return
}
// 获取名字
name := ctxext.NickName(ctx)
var j joke
err := db.Pick("jokes", &j)
if err != nil {
ctx.SendChain(message.Text("ERROR:", err))
return
}
ctx.SendChain(message.Text(strings.ReplaceAll(j.Text, "%name", name)))
})
}

31
plugin_gif/README.md Normal file
View File

@@ -0,0 +1,31 @@
# ZeroBot-Plugin-Gif
[ZeroBot QQ机器人](https://github.com/wdvxdr1123/ZeroBot)插件可以制作各种沙雕gif图
> 素材包地址: https://codechina.csdn.net/u011570312/imagematerials
## 触发方式
1. [指令词]+[qq号] 如爬123456
2. [指令词]+[图片] 如:爬[图片]
3. [指令词]+[艾特] 如:爬@小H
## 指令列表
- [x]
- [x]
- [x]
- [x]
- [x]
- [x]
- [x]
- [x]
- [x]
- [x]
- [x]
- [x] 灰度
- [x] 上翻
- [x] 下翻
- [x] 左翻
- [x] 右翻
- [x] 反色
- [x] 倒放
- [x] 浮雕
- [x] 打码
- [x] 负片

91
plugin_gif/context.go Normal file
View File

@@ -0,0 +1,91 @@
package plugin_gif
import (
"bufio"
"io"
"net/http"
"os"
"strconv"
"strings"
"github.com/sirupsen/logrus"
)
type context struct {
usrdir string
headimgsdir []string
}
func dlchan(name string, c *chan *string) {
target := datapath + `materials/` + name
_, err := os.Stat(target)
if err != nil {
download(`https://codechina.csdn.net/u011570312/imagematerials/-/raw/main/`+name, target)
} else {
logrus.Debugln("[gif] dl", name, "exists")
}
*c <- &target
}
func dlblock(name string) string {
target := datapath + `materials/` + name
_, err := os.Stat(target)
if err != nil {
download(`https://codechina.csdn.net/u011570312/imagematerials/-/raw/main/`+name, target)
}
return target
}
func dlrange(prefix string, suffix string, end int) *[]chan *string {
c := make([]chan *string, end)
for i := range c {
c[i] = make(chan *string)
go dlchan(prefix+strconv.Itoa(i)+suffix, &c[i])
}
return &c
}
// 新的上下文
func newContext(user int64) *context {
c := new(context)
c.usrdir = datapath + "users/" + strconv.FormatInt(user, 10) + `/`
os.MkdirAll(c.usrdir, 0755)
c.headimgsdir = make([]string, 2)
c.headimgsdir[0] = c.usrdir + "0.gif"
c.headimgsdir[1] = c.usrdir + "1.gif"
return c
}
// 下载图片
func download(url, dlpath string) error {
// 创建目录
var List = strings.Split(dlpath, `/`)
err := os.MkdirAll(strings.TrimSuffix(dlpath, List[len(List)-1]), 0755)
if err != nil {
logrus.Errorln("[gif] mkdir err:", err)
return err
}
res, err := http.Get(url)
if err != nil {
logrus.Errorln("[gif] http get err:", err)
return err
}
// 获得get请求响应的reader对象
reader := bufio.NewReaderSize(res.Body, 32*1024)
// 创建文件
file, err := os.Create(dlpath)
if err != nil {
logrus.Errorln("[gif] create file err:", err)
return err
}
// 获得文件的writer对象
writer := bufio.NewWriter(file)
written, err := io.Copy(writer, reader)
if err != nil {
logrus.Errorln("[gif] copy err:", err)
return err
}
res.Body.Close()
logrus.Debugln("[gif] dl len:", written)
return nil
}

160
plugin_gif/gif.go Normal file
View File

@@ -0,0 +1,160 @@
package plugin_gif
import (
"image"
"github.com/FloatTech/zbputils/img"
)
// 摸
func (cc *context) mo() string {
name := cc.usrdir + `摸.gif`
c := dlrange(`mo/`, `.png`, 5)
tou := img.LoadFirstFrame(cc.headimgsdir[0], 0, 0).Circle(0).Im
mo := []*image.NRGBA{
img.LoadFirstFrame(*<-(*c)[0], 0, 0).InsertBottom(tou, 80, 80, 32, 32).Im,
img.LoadFirstFrame(*<-(*c)[1], 0, 0).InsertBottom(tou, 70, 90, 42, 22).Im,
img.LoadFirstFrame(*<-(*c)[2], 0, 0).InsertBottom(tou, 75, 85, 37, 27).Im,
img.LoadFirstFrame(*<-(*c)[3], 0, 0).InsertBottom(tou, 85, 75, 27, 37).Im,
img.LoadFirstFrame(*<-(*c)[4], 0, 0).InsertBottom(tou, 90, 70, 22, 42).Im,
}
img.SaveGif(img.MergeGif(1, mo), name)
return "file:///" + name
}
// 搓
func (cc *context) cuo() string {
name := cc.usrdir + `搓.gif`
c := dlrange(`cuo/`, `.png`, 5)
tou := img.LoadFirstFrame(cc.headimgsdir[0], 110, 110).Circle(0).Im
m1 := img.Rotate(tou, 72, 0, 0)
m2 := img.Rotate(tou, 144, 0, 0)
m3 := img.Rotate(tou, 216, 0, 0)
m4 := img.Rotate(tou, 288, 0, 0)
cuo := []*image.NRGBA{
img.LoadFirstFrame(*<-(*c)[0], 0, 0).InsertBottomC(tou, 0, 0, 75, 130).Im,
img.LoadFirstFrame(*<-(*c)[1], 0, 0).InsertBottomC(m1.Im, 0, 0, 75, 130).Im,
img.LoadFirstFrame(*<-(*c)[2], 0, 0).InsertBottomC(m2.Im, 0, 0, 75, 130).Im,
img.LoadFirstFrame(*<-(*c)[3], 0, 0).InsertBottomC(m3.Im, 0, 0, 75, 130).Im,
img.LoadFirstFrame(*<-(*c)[4], 0, 0).InsertBottomC(m4.Im, 0, 0, 75, 130).Im,
}
img.SaveGif(img.MergeGif(5, cuo), name)
return "file:///" + name
}
// 敲
func (cc *context) qiao() string {
name := cc.usrdir + `敲.gif`
c := dlrange(`qiao/`, `.png`, 2)
tou := img.LoadFirstFrame(cc.headimgsdir[0], 40, 40).Circle(0).Im
qiao := []*image.NRGBA{
img.LoadFirstFrame(*<-(*c)[0], 0, 0).InsertUp(tou, 40, 33, 57, 52).Im,
img.LoadFirstFrame(*<-(*c)[1], 0, 0).InsertUp(tou, 38, 36, 58, 50).Im,
}
img.SaveGif(img.MergeGif(1, qiao), name)
return "file:///" + name
}
// 吃
func (cc *context) chi() string {
name := cc.usrdir + `吃.gif`
c := dlrange(`chi/`, `.png`, 3)
tou := img.LoadFirstFrame(cc.headimgsdir[0], 32, 32).Im
chi := []*image.NRGBA{
img.LoadFirstFrame(*<-(*c)[0], 0, 0).InsertBottom(tou, 0, 0, 1, 38).Im,
img.LoadFirstFrame(*<-(*c)[1], 0, 0).InsertBottom(tou, 0, 0, 1, 38).Im,
img.LoadFirstFrame(*<-(*c)[2], 0, 0).InsertBottom(tou, 0, 0, 1, 38).Im,
}
img.SaveGif(img.MergeGif(1, chi), name)
return "file:///" + name
}
// 蹭
func (cc *context) ceng() string {
name := cc.usrdir + `蹭.gif`
c := dlrange(`ceng/`, `.png`, 6)
tou := img.LoadFirstFrame(cc.headimgsdir[0], 100, 100).Circle(0).Im
tou2 := img.LoadFirstFrame(cc.headimgsdir[1], 100, 100).Circle(0).Im
ceng := []*image.NRGBA{
img.LoadFirstFrame(*<-(*c)[0], 0, 0).InsertUp(tou, 75, 77, 40, 88).InsertUp(tou2, 77, 103, 102, 81).Im,
img.LoadFirstFrame(*<-(*c)[1], 0, 0).InsertUp(tou, 75, 77, 46, 100).InsertUp(img.Rotate(tou2, 10, 62, 127).Im, 0, 0, 92, 40).Im,
img.LoadFirstFrame(*<-(*c)[2], 0, 0).InsertUp(tou, 75, 77, 67, 99).InsertUp(tou2, 76, 117, 90, 8).Im,
img.LoadFirstFrame(*<-(*c)[3], 0, 0).InsertUp(tou, 75, 77, 52, 83).InsertUp(img.Rotate(tou2, -40, 94, 94).Im, 0, 0, 53, -20).Im,
img.LoadFirstFrame(*<-(*c)[4], 0, 0).InsertUp(tou, 75, 77, 56, 110).InsertUp(img.Rotate(tou2, -66, 132, 80).Im, 0, 0, 78, 40).Im,
img.LoadFirstFrame(*<-(*c)[5], 0, 0).InsertUp(tou, 75, 77, 62, 102).InsertUp(tou2, 71, 100, 110, 94).Im,
}
img.SaveGif(img.MergeGif(8, ceng), name)
return "file:///" + name
}
// 啃
func (cc *context) ken() string {
name := cc.usrdir + `啃.gif`
c := dlrange(`ken/`, `.png`, 16)
tou := img.LoadFirstFrame(cc.headimgsdir[0], 100, 100).Im
ken := []*image.NRGBA{
img.LoadFirstFrame(*<-(*c)[0], 0, 0).InsertBottom(tou, 90, 90, 105, 150).Im,
img.LoadFirstFrame(*<-(*c)[1], 0, 0).InsertBottom(tou, 90, 83, 96, 172).Im,
img.LoadFirstFrame(*<-(*c)[2], 0, 0).InsertBottom(tou, 90, 90, 106, 148).Im,
img.LoadFirstFrame(*<-(*c)[3], 0, 0).InsertBottom(tou, 88, 88, 97, 167).Im,
img.LoadFirstFrame(*<-(*c)[4], 0, 0).InsertBottom(tou, 90, 85, 89, 179).Im,
img.LoadFirstFrame(*<-(*c)[5], 0, 0).InsertBottom(tou, 90, 90, 106, 151).Im,
img.LoadFirstFrame(*<-(*c)[6], 0, 0).Im,
img.LoadFirstFrame(*<-(*c)[7], 0, 0).Im,
img.LoadFirstFrame(*<-(*c)[8], 0, 0).Im,
img.LoadFirstFrame(*<-(*c)[9], 0, 0).Im,
img.LoadFirstFrame(*<-(*c)[10], 0, 0).Im,
img.LoadFirstFrame(*<-(*c)[11], 0, 0).Im,
img.LoadFirstFrame(*<-(*c)[12], 0, 0).Im,
img.LoadFirstFrame(*<-(*c)[13], 0, 0).Im,
img.LoadFirstFrame(*<-(*c)[14], 0, 0).Im,
img.LoadFirstFrame(*<-(*c)[15], 0, 0).Im,
}
img.SaveGif(img.MergeGif(7, ken), name)
return "file:///" + name
}
// 拍
func (cc *context) pai() string {
name := cc.usrdir + `拍.gif`
c := dlrange(`pai/`, `.png`, 2)
tou := img.LoadFirstFrame(cc.headimgsdir[0], 30, 30).Circle(0).Im
pai := []*image.NRGBA{
img.LoadFirstFrame(*<-(*c)[0], 0, 0).InsertUp(tou, 0, 0, 1, 47).Im,
img.LoadFirstFrame(*<-(*c)[1], 0, 0).InsertUp(tou, 0, 0, 1, 67).Im,
}
img.SaveGif(img.MergeGif(1, pai), name)
return "file:///" + name
}
// 冲
func (cc *context) chong() string {
name := cc.usrdir + `冲.gif`
c := dlrange(`xqe/`, `.png`, 2)
tou := img.LoadFirstFrame(cc.headimgsdir[0], 0, 0).Circle(0).Im
chong := []*image.NRGBA{
img.LoadFirstFrame(*<-(*c)[0], 0, 0).InsertUp(tou, 30, 30, 15, 53).Im,
img.LoadFirstFrame(*<-(*c)[1], 0, 0).InsertUp(tou, 30, 30, 40, 53).Im,
}
img.SaveGif(img.MergeGif(1, chong), name)
return "file:///" + name
}
// 丢
func (cc *context) diu() string {
name := cc.usrdir + `丢.gif`
c := dlrange(`diu/`, `.png`, 8)
tou := img.LoadFirstFrame(cc.headimgsdir[0], 0, 0).Circle(0).Im
diu := []*image.NRGBA{
img.LoadFirstFrame(*<-(*c)[0], 0, 0).InsertUp(tou, 32, 32, 108, 36).Im,
img.LoadFirstFrame(*<-(*c)[1], 0, 0).InsertUp(tou, 32, 32, 122, 36).Im,
img.LoadFirstFrame(*<-(*c)[2], 0, 0).Im,
img.LoadFirstFrame(*<-(*c)[3], 0, 0).InsertUp(tou, 123, 123, 19, 129).Im,
img.LoadFirstFrame(*<-(*c)[4], 0, 0).InsertUp(tou, 185, 185, -50, 200).InsertUp(tou, 33, 33, 289, 70).Im,
img.LoadFirstFrame(*<-(*c)[5], 0, 0).InsertUp(tou, 32, 32, 280, 73).Im,
img.LoadFirstFrame(*<-(*c)[6], 0, 0).InsertUp(tou, 35, 35, 259, 31).Im,
img.LoadFirstFrame(*<-(*c)[7], 0, 0).InsertUp(tou, 175, 175, -50, 220).Im,
}
img.SaveGif(img.MergeGif(7, diu), name)
return "file:///" + name
}

17
plugin_gif/logo.go Normal file
View File

@@ -0,0 +1,17 @@
package plugin_gif
import (
"strconv"
"strings"
)
func (c *context) prepareLogos(s ...string) {
for i, v := range s {
_, err := strconv.Atoi(v)
if err != nil {
download("https://gchat.qpic.cn/gchatpic_new//--"+strings.ToUpper(v)+"/0", c.usrdir+strconv.Itoa(i)+".gif")
} else {
download("http://q4.qlogo.cn/g?b=qq&nk="+v+"&s=640", c.usrdir+strconv.Itoa(i)+".gif")
}
}
}

66
plugin_gif/png.go Normal file
View File

@@ -0,0 +1,66 @@
package plugin_gif
import (
"image"
"math/rand"
"strconv"
"github.com/FloatTech/zbputils/img"
)
// 爬
func (cc *context) pa() string {
name := cc.usrdir + `爬.png`
tou := img.LoadFirstFrame(cc.headimgsdir[0], 0, 0).Circle(0).Im
// 随机爬图序号
rand := rand.Intn(60) + 1
dc := img.LoadFirstFrame(dlblock(`pa/`+strconv.Itoa(rand)+`.png`), 0, 0).
InsertBottom(tou, 100, 100, 0, 400).Im
img.SavePng(dc, name)
return "file:///" + name
}
// 撕
func (cc *context) si() string {
name := cc.usrdir + `撕.png`
tou := img.LoadFirstFrame(cc.headimgsdir[0], 0, 0).Im
im1 := img.Rotate(tou, 20, 380, 380)
im2 := img.Rotate(tou, -12, 380, 380)
dc := img.LoadFirstFrame(dlblock(`si/0.png`), 0, 0).
InsertBottom(im1.Im, im1.W, im1.H, -3, 370).
InsertBottom(im2.Im, im2.W, im2.H, 653, 310).Im
img.SavePng(dc, name)
return "file:///" + name
}
// 简单
func (cc *context) other(value ...string) string {
name := cc.usrdir + value[0] + `.png`
// 加载图片
im := img.LoadFirstFrame(cc.headimgsdir[0], 0, 0)
var a *image.NRGBA
if value[0] == "上翻" || value[0] == "下翻" {
a = im.FlipV().Im
} else if value[0] == "左翻" || value[0] == "右翻" {
a = im.FlipH().Im
} else if value[0] == "反色" {
a = im.Invert().Im
} else if value[0] == "灰度" {
a = im.Grayscale().Im
} else if value[0] == "负片" {
a = im.Invert().Grayscale().Im
} else if value[0] == "浮雕" {
a = im.Convolve3x3().Im
} else if value[0] == "打码" {
a = im.Blur(10).Im
} else if value[0] == "旋转" {
r, _ := strconv.ParseFloat(value[1], 64)
a = img.Rotate(im.Im, r, 0, 0).Im
} else if value[0] == "变形" {
w, _ := strconv.Atoi(value[1])
h, _ := strconv.Atoi(value[2])
a = img.Size(im.Im, w, h).Im
}
img.SavePng(a, name)
return "file:///" + name
}

63
plugin_gif/run.go Normal file
View File

@@ -0,0 +1,63 @@
// Package plugin_gif 制图
package plugin_gif
import (
"math/rand"
"os"
"strconv"
"strings"
"time"
control "github.com/FloatTech/zbputils/control"
zero "github.com/wdvxdr1123/ZeroBot"
"github.com/wdvxdr1123/ZeroBot/message"
)
var (
cmds = []string{"搓", "冲", "摸", "拍", "丢", "吃", "敲", "啃", "蹭", "爬", "撕",
"灰度", "上翻", "下翻", "左翻", "右翻", "反色", "浮雕", "打码", "负片"}
botpath, _ = os.Getwd()
datapath = botpath + "/data/gif/"
)
func init() { // 插件主体
os.RemoveAll(datapath) // 清除缓存图片
rand.Seed(time.Now().UnixNano()) // 设置种子
control.Register("gif", &control.Options{
DisableOnDefault: false,
Help: "制图\n- " + strings.Join(cmds, "\n- "),
}).OnRegex(`^(` + strings.Join(cmds, "|") + `)\D*?(\[CQ:(image\,file=([0-9a-zA-Z]{32}).*|at.+?(\d{5,11}))\].*|(\d+))$`).
SetBlock(true).SetPriority(20).Handle(func(ctx *zero.Ctx) {
c := newContext(ctx.Event.UserID)
list := ctx.State["regex_matched"].([]string)
c.prepareLogos(list[4]+list[5]+list[6], strconv.FormatInt(ctx.Event.UserID, 10))
var picurl string
switch list[1] {
case "爬":
picurl = c.pa()
case "摸":
picurl = c.mo()
case "吃":
picurl = c.chi()
case "啃":
picurl = c.ken()
case "蹭":
picurl = c.ceng()
case "敲":
picurl = c.qiao()
case "搓":
picurl = c.cuo()
case "拍":
picurl = c.pai()
case "丢":
picurl = c.diu()
case "撕":
picurl = c.si()
case "冲":
picurl = c.chong()
default:
picurl = c.other(list[1]) // "灰度", "上翻", "下翻", "左翻", "右翻", "反色", "倒放", "浮雕", "打码", "负片"
}
ctx.SendChain(message.Image(picurl))
})
}

View File

@@ -9,11 +9,10 @@ import (
"net/url"
"strings"
control "github.com/FloatTech/zbputils/control"
zero "github.com/wdvxdr1123/ZeroBot"
"github.com/wdvxdr1123/ZeroBot/message"
"github.com/FloatTech/ZeroBot-Plugin/control"
"github.com/tidwall/gjson"
)
@@ -96,6 +95,7 @@ func init() { // 插件主体
}
// notnull 如果传入文本为空,则返回默认值
//nolint: unparam
func notnull(text, defstr string) string {
if text == "" {
return defstr

View File

@@ -12,13 +12,13 @@ import (
"github.com/wdvxdr1123/ZeroBot/message"
"github.com/wdvxdr1123/ZeroBot/utils/helper"
"github.com/FloatTech/ZeroBot-Plugin/control"
"github.com/FloatTech/ZeroBot-Plugin/utils/file"
"github.com/FloatTech/ZeroBot-Plugin/utils/web"
control "github.com/FloatTech/zbputils/control"
"github.com/FloatTech/zbputils/file"
"github.com/FloatTech/zbputils/web"
)
var (
cachedir = file.BOT_PATH + "/data/hs/"
cachedir = file.BOTPATH + "/data/hs/"
reqconf = [...]string{"GET", "https://hs.fbigame.com",
"Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Mobile Safari/537.36"}
)
@@ -85,16 +85,18 @@ func init() {
sk = append(
sk,
message.CustomNode(
ctx.Event.Sender.NickName,
ctx.Event.UserID,
zero.BotConfig.NickName[0],
ctx.Event.SelfID,
imgcq, // 图片
),
)
}
ctx.SendGroupForwardMessage(
if id := ctx.SendGroupForwardMessage(
ctx.Event.GroupID,
sk,
)
).Get("message_id").Int(); id == 0 {
ctx.SendChain(message.Text("ERROR: 可能被风控了"))
}
})
// 卡组
engine.OnRegex(`^[\s\S]*?(AAE[a-zA-Z0-9/\+=]{70,})[\s\S]*$`).

View File

@@ -8,10 +8,9 @@ import (
"net/http"
"time"
control "github.com/FloatTech/zbputils/control"
zero "github.com/wdvxdr1123/ZeroBot"
"github.com/wdvxdr1123/ZeroBot/message"
"github.com/FloatTech/ZeroBot-Plugin/control"
)
type resultjson struct {
@@ -103,7 +102,7 @@ func soutuapi(keyword string) *resultjson {
}
// randintn 从json里的30条数据中随机获取一条返回
func randintn(len int) int {
func randintn(n int) int {
rand.Seed(time.Now().UnixNano())
return rand.Intn(len)
return rand.Intn(n)
}

View File

@@ -0,0 +1,78 @@
// Package juejuezi 绝绝子
package juejuezi
import (
"fmt"
"io"
"net/http"
"strings"
"time"
control "github.com/FloatTech/zbputils/control"
log "github.com/sirupsen/logrus"
"github.com/tidwall/gjson"
zero "github.com/wdvxdr1123/ZeroBot"
"github.com/wdvxdr1123/ZeroBot/extension/rate"
"github.com/wdvxdr1123/ZeroBot/message"
"github.com/wdvxdr1123/ZeroBot/utils/helper"
)
const (
juejueziURL = "https://www.offjuan.com/api/juejuezi/text"
prio = 15
referer = "https://juejuezi.offjuan.com/"
ua = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36"
)
var (
limit = rate.NewManager(time.Minute, 20)
)
func init() {
control.Register("juejuezi", &control.Options{
DisableOnDefault: false,
Help: "绝绝子生成器\n" +
"- 喝奶茶绝绝子|绝绝子吃饭",
}).OnRegex("[\u4E00-\u9FA5]{0,10}绝绝子[\u4E00-\u9FA5]{0,10}").SetBlock(true).SetPriority(prio).Handle(func(ctx *zero.Ctx) {
if !limit.Load(ctx.Event.GroupID).Acquire() {
return
}
toDealStr := []rune(strings.ReplaceAll(ctx.ExtractPlainText(), "绝绝子", ""))
switch len(toDealStr) {
case 0, 1:
ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Text("不要只输入绝绝子"))
case 2:
data, err := juejuezi(string(toDealStr[0]), string(toDealStr[1]))
if err != nil {
ctx.SendChain(message.Text(err))
}
ctx.SendChain(message.Text(gjson.Get(helper.BytesToString(data), "text").String()))
default:
params := ctx.GetWordSlices(string(toDealStr)).Get("slices").Array()
data, err := juejuezi(params[0].String(), params[1].String())
if err != nil {
ctx.SendChain(message.Text(err))
}
ctx.SendChain(message.Text(gjson.Get(helper.BytesToString(data), "text").String()))
}
})
}
func juejuezi(verb, noun string) (data []byte, err error) {
juejueziStr := fmt.Sprintf("{\"verb\":\"%s\",\"noun\":\"%s\"}", verb, noun)
client := &http.Client{}
// 提交请求
request, err := http.NewRequest("POST", juejueziURL, strings.NewReader(juejueziStr))
if err != nil {
log.Errorln("[juejuezi]:", err)
}
request.Header.Add("Referer", referer)
request.Header.Add("User-Agent", ua)
response, err := client.Do(request)
if err != nil {
log.Errorln("[juejuezi]:", err)
}
data, err = io.ReadAll(response.Body)
response.Body.Close()
return
}

View File

@@ -11,8 +11,8 @@ import (
zero "github.com/wdvxdr1123/ZeroBot"
"github.com/wdvxdr1123/ZeroBot/message"
"github.com/FloatTech/ZeroBot-Plugin/control"
"github.com/FloatTech/ZeroBot-Plugin/utils/math"
control "github.com/FloatTech/zbputils/control"
"github.com/FloatTech/zbputils/math"
)
const (

44
plugin_manager/gist.go Normal file
View File

@@ -0,0 +1,44 @@
package manager
import (
"crypto/md5"
"encoding/hex"
"fmt"
"strconv"
"time"
"github.com/sirupsen/logrus"
"github.com/wdvxdr1123/ZeroBot/utils/helper"
"github.com/FloatTech/zbputils/math"
"github.com/FloatTech/zbputils/web"
)
// user hash file
const gistraw = "https://gist.githubusercontent.com/%s/%s/raw/%s"
func checkNewUser(qq, gid int64, ghun, hash string) (bool, string) {
if db.CanFind("member", "where ghun="+ghun) {
return false, "该github用户已入群"
}
gidsum := md5.Sum(helper.StringToBytes(strconv.FormatInt(gid, 10)))
gidhex := hex.EncodeToString(gidsum[:])
u := fmt.Sprintf(gistraw, ghun, hash, gidhex)
logrus.Debugln("[gist]visit url:", u)
data, err := web.GetData(u)
if err == nil {
logrus.Debugln("[gist]get data:", helper.BytesToString(data))
st, err := strconv.ParseInt(helper.BytesToString(data), 10, 64)
if err == nil {
// 600s 内验证成功
ok := math.Abs(int(time.Now().Unix()-st)) < 600
if ok {
_ = db.Insert("member", &member{QQ: qq, Ghun: ghun})
return true, ""
}
return false, "时间戳超时"
}
return false, "时间戳格式错误: " + helper.BytesToString(data)
}
return false, "无法连接到gist: " + err.Error()
}

View File

@@ -0,0 +1,12 @@
package manager
type welcome struct {
GrpID int64 `db:"gid"`
Msg string `db:"msg"`
}
type member struct {
QQ int64 `db:"qq"`
// github username
Ghun string `db:"ghun"`
}

View File

@@ -3,7 +3,6 @@ package manager
import (
"fmt"
"io"
"math/rand"
"os"
"sort"
@@ -11,23 +10,24 @@ import (
"strings"
"time"
"github.com/RomiChan/protobuf/proto"
"github.com/sirupsen/logrus"
zero "github.com/wdvxdr1123/ZeroBot"
"github.com/wdvxdr1123/ZeroBot/extension/rate"
"github.com/wdvxdr1123/ZeroBot/message"
"github.com/FloatTech/ZeroBot-Plugin/control"
control "github.com/FloatTech/zbputils/control"
"github.com/FloatTech/zbputils/ctxext"
"github.com/FloatTech/zbputils/math"
"github.com/FloatTech/zbputils/process"
"github.com/FloatTech/zbputils/sql"
"github.com/FloatTech/ZeroBot-Plugin/plugin_manager/timer"
"github.com/FloatTech/ZeroBot-Plugin/utils/file"
"github.com/FloatTech/ZeroBot-Plugin/utils/math"
)
const (
datapath = "data/manager/"
confile = datapath + "config.pb"
timerfile = datapath + "timers.pb"
hint = "====群管====\n" +
datapath = "data/manager/"
confile = datapath + "config.db"
hint = "====群管====\n" +
"- 禁言@QQ 1分钟\n" +
"- 解除禁言 @QQ\n" +
"- 我要自闭 1分钟\n" +
@@ -55,32 +55,41 @@ const (
)
var (
config Config
limit = rate.NewManager(time.Minute*5, 2)
clock timer.Clock
db = &sql.Sqlite{DBPath: confile}
limit = rate.NewManager(time.Minute*5, 2)
clock timer.Clock
)
var engine = control.Register("manager", &control.Options{
DisableOnDefault: false,
Help: hint,
})
func init() { // 插件主体
loadConfig()
go func() {
time.Sleep(time.Second + time.Millisecond*time.Duration(rand.Intn(1000)))
clock = timer.NewClock(timerfile)
process.SleepAbout1sTo2s()
_ = os.MkdirAll(datapath, 0755)
clock = timer.NewClock(db)
err := db.Create("welcome", &welcome{})
if err != nil {
panic(err)
}
err = db.Create("member", &member{})
if err != nil {
panic(err)
}
}()
// 升为管理
engine.OnRegex(`^升为管理.*?(\d+)`, zero.OnlyGroup, zero.SuperUserPermission).SetBlock(true).SetPriority(40).
Handle(func(ctx *zero.Ctx) {
ctx.SetGroupAdmin(
ctx.Event.GroupID,
strToInt(ctx.State["regex_matched"].([]string)[1]), // 被升为管理的人的qq
math.Str2Int64(ctx.State["regex_matched"].([]string)[1]), // 被升为管理的人的qq
true,
)
nickname := ctx.GetGroupMemberInfo( // 被升为管理的人的昵称
ctx.Event.GroupID,
strToInt(ctx.State["regex_matched"].([]string)[1]), // 被升为管理的人的qq
math.Str2Int64(ctx.State["regex_matched"].([]string)[1]), // 被升为管理的人的qq
false,
).Get("nickname").Str
ctx.SendChain(message.Text(nickname + " 升为了管理~"))
@@ -90,12 +99,12 @@ func init() { // 插件主体
Handle(func(ctx *zero.Ctx) {
ctx.SetGroupAdmin(
ctx.Event.GroupID,
strToInt(ctx.State["regex_matched"].([]string)[1]), // 被取消管理的人的qq
math.Str2Int64(ctx.State["regex_matched"].([]string)[1]), // 被取消管理的人的qq
false,
)
nickname := ctx.GetGroupMemberInfo( // 被取消管理的人的昵称
ctx.Event.GroupID,
strToInt(ctx.State["regex_matched"].([]string)[1]), // 被取消管理的人的qq
math.Str2Int64(ctx.State["regex_matched"].([]string)[1]), // 被取消管理的人的qq
false,
).Get("nickname").Str
ctx.SendChain(message.Text("残念~ " + nickname + " 暂时失去了管理员的资格"))
@@ -105,12 +114,12 @@ func init() { // 插件主体
Handle(func(ctx *zero.Ctx) {
ctx.SetGroupKick(
ctx.Event.GroupID,
strToInt(ctx.State["regex_matched"].([]string)[1]), // 被踢出群聊的人的qq
math.Str2Int64(ctx.State["regex_matched"].([]string)[1]), // 被踢出群聊的人的qq
false,
)
nickname := ctx.GetGroupMemberInfo( // 被踢出群聊的人的昵称
ctx.Event.GroupID,
strToInt(ctx.State["regex_matched"].([]string)[1]), // 被踢出群聊的人的qq
math.Str2Int64(ctx.State["regex_matched"].([]string)[1]), // 被踢出群聊的人的qq
false,
).Get("nickname").Str
ctx.SendChain(message.Text("残念~ " + nickname + " 被放逐"))
@@ -119,7 +128,7 @@ func init() { // 插件主体
engine.OnRegex(`^退出群聊.*?(\d+)`, zero.OnlyToMe, zero.SuperUserPermission).SetBlock(true).SetPriority(40).
Handle(func(ctx *zero.Ctx) {
ctx.SetGroupLeave(
strToInt(ctx.State["regex_matched"].([]string)[1]), // 要退出的群的群号
math.Str2Int64(ctx.State["regex_matched"].([]string)[1]), // 要退出的群的群号
true,
)
})
@@ -144,7 +153,7 @@ func init() { // 插件主体
// 禁言
engine.OnRegex(`^禁言.*?(\d+).*?\s(\d+)(.*)`, zero.OnlyGroup, zero.AdminPermission).SetBlock(true).SetPriority(40).
Handle(func(ctx *zero.Ctx) {
duration := strToInt(ctx.State["regex_matched"].([]string)[2])
duration := math.Str2Int64(ctx.State["regex_matched"].([]string)[2])
switch ctx.State["regex_matched"].([]string)[3] {
case "分钟":
//
@@ -160,7 +169,7 @@ func init() { // 插件主体
}
ctx.SetGroupBan(
ctx.Event.GroupID,
strToInt(ctx.State["regex_matched"].([]string)[1]), // 要禁言的人的qq
math.Str2Int64(ctx.State["regex_matched"].([]string)[1]), // 要禁言的人的qq
duration*60, // 要禁言的时间(分钟)
)
ctx.SendChain(message.Text("小黑屋收留成功~"))
@@ -170,7 +179,7 @@ func init() { // 插件主体
Handle(func(ctx *zero.Ctx) {
ctx.SetGroupBan(
ctx.Event.GroupID,
strToInt(ctx.State["regex_matched"].([]string)[1]), // 要解除禁言的人的qq
math.Str2Int64(ctx.State["regex_matched"].([]string)[1]), // 要解除禁言的人的qq
0,
)
ctx.SendChain(message.Text("小黑屋释放成功~"))
@@ -178,7 +187,7 @@ func init() { // 插件主体
// 自闭禁言
engine.OnRegex(`^(我要自闭|禅定).*?(\d+)(.*)`, zero.OnlyGroup).SetBlock(true).SetPriority(40).
Handle(func(ctx *zero.Ctx) {
duration := strToInt(ctx.State["regex_matched"].([]string)[2])
duration := math.Str2Int64(ctx.State["regex_matched"].([]string)[2])
switch ctx.State["regex_matched"].([]string)[3] {
case "分钟", "min", "mins", "m":
break
@@ -204,8 +213,8 @@ func init() { // 插件主体
Handle(func(ctx *zero.Ctx) {
ctx.SetGroupCard(
ctx.Event.GroupID,
strToInt(ctx.State["regex_matched"].([]string)[1]), // 被修改群名片的人
ctx.State["regex_matched"].([]string)[2], // 修改成的群名片
math.Str2Int64(ctx.State["regex_matched"].([]string)[1]), // 被修改群名片的人
ctx.State["regex_matched"].([]string)[2], // 修改成的群名片
)
ctx.SendChain(message.Text("嗯!已经修改了"))
})
@@ -214,8 +223,8 @@ func init() { // 插件主体
Handle(func(ctx *zero.Ctx) {
ctx.SetGroupSpecialTitle(
ctx.Event.GroupID,
strToInt(ctx.State["regex_matched"].([]string)[1]), // 被修改群头衔的人
ctx.State["regex_matched"].([]string)[2], // 修改成的群头衔
math.Str2Int64(ctx.State["regex_matched"].([]string)[1]), // 被修改群头衔的人
ctx.State["regex_matched"].([]string)[2], // 修改成的群头衔
)
ctx.SendChain(message.Text("嗯!已经修改了"))
})
@@ -237,7 +246,7 @@ func init() { // 插件主体
content = strings.ReplaceAll(content, "&#91;", "[")
content = strings.ReplaceAll(content, "&#93;", "]")
ctx.SendGroupMessage(
strToInt(ctx.State["regex_matched"].([]string)[1]), // 需要发送的群
math.Str2Int64(ctx.State["regex_matched"].([]string)[1]), // 需要发送的群
content, // 需要发送的信息
)
ctx.SendChain(message.Text("📧 --> " + ctx.State["regex_matched"].([]string)[1]))
@@ -250,7 +259,7 @@ func init() { // 插件主体
content = strings.ReplaceAll(content, "&#91;", "[")
content = strings.ReplaceAll(content, "&#93;", "]")
ctx.SendPrivateMessage(
strToInt(ctx.State["regex_matched"].([]string)[1]), // 需要发送的人的qq
math.Str2Int64(ctx.State["regex_matched"].([]string)[1]), // 需要发送的人的qq
content, // 需要发送的信息
)
ctx.SendChain(message.Text("📧 --> " + ctx.State["regex_matched"].([]string)[1]))
@@ -259,9 +268,9 @@ func init() { // 插件主体
engine.OnRegex(`^在(.{1,2})月(.{1,3}日|每?周.?)的(.{1,3})点(.{1,3})分时(用.+)?提醒大家(.*)`, zero.AdminPermission, zero.OnlyGroup).SetBlock(true).SetPriority(40).
Handle(func(ctx *zero.Ctx) {
dateStrs := ctx.State["regex_matched"].([]string)
ts := timer.GetFilledTimer(dateStrs, ctx.Event.SelfID, false)
ts := timer.GetFilledTimer(dateStrs, ctx.Event.SelfID, ctx.Event.GroupID, false)
if ts.En() {
go clock.RegisterTimer(ts, ctx.Event.GroupID, true)
go clock.RegisterTimer(ts, true)
ctx.SendChain(message.Text("记住了~"))
} else {
ctx.SendChain(message.Text("参数非法:" + ts.Alert))
@@ -283,8 +292,8 @@ func init() { // 插件主体
return
}
logrus.Debugln("[manager] cron:", dateStrs[1])
ts := timer.GetFilledCronTimer(dateStrs[1], alert, url, ctx.Event.SelfID)
if clock.RegisterTimer(ts, ctx.Event.GroupID, true) {
ts := timer.GetFilledCronTimer(dateStrs[1], alert, url, ctx.Event.SelfID, ctx.Event.GroupID)
if clock.RegisterTimer(ts, true) {
ctx.SendChain(message.Text("记住了~"))
} else {
ctx.SendChain(message.Text("参数非法:" + ts.Alert))
@@ -294,8 +303,8 @@ func init() { // 插件主体
engine.OnRegex(`^取消在(.{1,2})月(.{1,3}日|每?周.?)的(.{1,3})点(.{1,3})分的提醒`, zero.AdminPermission, zero.OnlyGroup).SetBlock(true).SetPriority(40).
Handle(func(ctx *zero.Ctx) {
dateStrs := ctx.State["regex_matched"].([]string)
ts := timer.GetFilledTimer(dateStrs, ctx.Event.SelfID, true)
ti := ts.GetTimerInfo(ctx.Event.GroupID)
ts := timer.GetFilledTimer(dateStrs, ctx.Event.SelfID, ctx.Event.GroupID, true)
ti := ts.GetTimerID()
ok := clock.CancelTimer(ti)
if ok {
ctx.SendChain(message.Text("取消成功~"))
@@ -307,8 +316,8 @@ func init() { // 插件主体
engine.OnRegex(`^取消在"(.*)"的提醒`, zero.AdminPermission, zero.OnlyGroup).SetBlock(true).SetPriority(40).
Handle(func(ctx *zero.Ctx) {
dateStrs := ctx.State["regex_matched"].([]string)
ts := timer.Timer{Cron: dateStrs[1]}
ti := ts.GetTimerInfo(ctx.Event.GroupID)
ts := timer.Timer{Cron: dateStrs[1], GrpID: ctx.Event.GroupID}
ti := ts.GetTimerID()
ok := clock.CancelTimer(ti)
if ok {
ctx.SendChain(message.Text("取消成功~"))
@@ -363,46 +372,50 @@ func init() { // 插件主体
engine.OnNotice().SetBlock(false).FirstPriority().
Handle(func(ctx *zero.Ctx) {
if ctx.Event.NoticeType == "group_increase" && ctx.Event.SelfID != ctx.Event.UserID {
word, ok := config.Welcome[ctx.Event.GroupID]
if ok {
ctx.SendChain(message.Text(word))
var w welcome
err := db.Find("welcome", &w, "where gid = "+strconv.FormatInt(ctx.Event.GroupID, 10))
if err == nil {
ctx.SendChain(message.Text(w.Msg))
} else {
ctx.SendChain(message.Text("欢迎~"))
}
enable, ok1 := config.Checkin[ctx.Event.GroupID]
if ok1 && enable {
uid := ctx.Event.UserID
a := rand.Intn(100)
b := rand.Intn(100)
r := a + b
ctx.SendChain(message.At(uid), message.Text(fmt.Sprintf("考你一道题:%d+%d=?\n如果60秒之内答不上来%s就要把你踢出去了哦~", a, b, zero.BotConfig.NickName[0])))
// 匹配发送者进行验证
rule := func(ctx *zero.Ctx) bool {
for _, elem := range ctx.Event.Message {
if elem.Type == "text" {
text := strings.ReplaceAll(elem.Data["text"], " ", "")
ans, err := strconv.Atoi(text)
if err == nil {
if ans != r {
ctx.SendChain(message.Text("答案不对哦,再想想吧~"))
return false
c, ok := control.Lookup("manager")
if ok {
enable := c.GetData(ctx.Event.GroupID)&1 == 1
if enable {
uid := ctx.Event.UserID
a := rand.Intn(100)
b := rand.Intn(100)
r := a + b
ctx.SendChain(message.At(uid), message.Text(fmt.Sprintf("考你一道题:%d+%d=?\n如果60秒之内答不上来%s就要把你踢出去了哦~", a, b, zero.BotConfig.NickName[0])))
// 匹配发送者进行验证
rule := func(ctx *zero.Ctx) bool {
for _, elem := range ctx.Event.Message {
if elem.Type == "text" {
text := strings.ReplaceAll(elem.Data["text"], " ", "")
ans, err := strconv.Atoi(text)
if err == nil {
if ans != r {
ctx.SendChain(message.Text("答案不对哦,再想想吧~"))
return false
}
return true
}
return true
}
}
return false
}
next := zero.NewFutureEvent("message", 999, false, zero.CheckUser(ctx.Event.UserID), rule)
recv, cancel := next.Repeat()
select {
case <-time.After(time.Minute):
ctx.SendChain(message.Text("拜拜啦~"))
ctx.SetGroupKick(ctx.Event.GroupID, uid, false)
cancel()
case <-recv:
cancel()
ctx.SendChain(message.Text("答对啦~"))
}
return false
}
next := zero.NewFutureEvent("message", 999, false, zero.CheckUser(ctx.Event.UserID), rule)
recv, cancel := next.Repeat()
select {
case <-time.After(time.Minute):
ctx.SendChain(message.Text("拜拜啦~"))
ctx.SetGroupKick(ctx.Event.GroupID, uid, false)
cancel()
case <-recv:
cancel()
ctx.SendChain(message.Text("答对啦~"))
}
}
}
@@ -412,37 +425,72 @@ func init() { // 插件主体
Handle(func(ctx *zero.Ctx) {
if ctx.Event.NoticeType == "group_decrease" {
userid := ctx.Event.UserID
nickname := ctx.GetStrangerInfo(userid, false).Get("nickname").String()
ctx.SendChain(message.Text(nickname, "(", userid, ")", "离开了我们~"))
ctx.SendChain(message.Text(ctxext.CardOrNickName(ctx, userid), "(", userid, ")", "离开了我们..."))
}
})
// 设置欢迎语
engine.OnRegex(`^设置欢迎语([\s\S]*)$`, zero.OnlyGroup, zero.AdminPermission).SetBlock(true).SetPriority(40).
Handle(func(ctx *zero.Ctx) {
config.Welcome[ctx.Event.GroupID] = ctx.State["regex_matched"].([]string)[1]
if saveConfig() == nil {
w := &welcome{
GrpID: ctx.Event.GroupID,
Msg: ctx.State["regex_matched"].([]string)[1],
}
err := db.Insert("welcome", w)
if err == nil {
ctx.SendChain(message.Text("记住啦!"))
} else {
ctx.SendChain(message.Text("出错啦!"))
ctx.SendChain(message.Text("出错啦: ", err))
}
})
// 入群验证开关
// 入群验证开关
engine.OnRegex(`^(.*)入群验证$`, zero.OnlyGroup, zero.AdminPermission).SetBlock(true).SetPriority(40).
Handle(func(ctx *zero.Ctx) {
option := ctx.State["regex_matched"].([]string)[1]
switch option {
case "开启":
config.Checkin[ctx.Event.GroupID] = true
case "关闭":
config.Checkin[ctx.Event.GroupID] = false
default:
c, ok := control.Lookup("manager")
if ok {
data := c.GetData(ctx.Event.GroupID)
switch option {
case "开启", "打开", "启用":
data |= 1
case "关闭", "关掉", "禁用":
data &= 0x7fffffff_fffffffe
default:
return
}
err := c.SetData(ctx.Event.GroupID, data)
if err == nil {
ctx.SendChain(message.Text("已", option))
return
}
ctx.SendChain(message.Text("出错啦: ", err))
return
}
if saveConfig() == nil {
ctx.SendChain(message.Text("已", option))
} else {
ctx.SendChain(message.Text("出错啦!"))
ctx.SendChain(message.Text("找不到服务!"))
})
// 加群 gist 验证开关
engine.OnRegex(`^(.*)gist加群自动审批$`, zero.OnlyGroup, zero.AdminPermission).SetBlock(true).SetPriority(40).
Handle(func(ctx *zero.Ctx) {
option := ctx.State["regex_matched"].([]string)[1]
c, ok := control.Lookup("manager")
if ok {
data := c.GetData(ctx.Event.GroupID)
switch option {
case "开启", "打开", "启用":
data |= 0x10
case "关闭", "关掉", "禁用":
data &= 0x7fffffff_fffffffd
default:
return
}
err := c.SetData(ctx.Event.GroupID, data)
if err == nil {
ctx.SendChain(message.Text("已", option))
return
}
ctx.SendChain(message.Text("出错啦: ", err))
return
}
ctx.SendChain(message.Text("找不到服务!"))
})
// 运行 CQ 码
engine.OnRegex(`^run(.*)$`, zero.SuperUserPermission).SetBlock(true).SetPriority(0).
@@ -453,61 +501,34 @@ func init() { // 插件主体
// 可注入,权限为主人
ctx.Send(cmd)
})
// 自动同意加好友,被邀请入群(从qingyunke移过来先注释)
/*
engine.OnRequest().SetBlock(false).FirstPriority().Handle(func(ctx *zero.Ctx) {
if ctx.Event.RequestType == "friend" {
ctx.SetFriendAddRequest(ctx.Event.Flag, true, "")
// 根据 gist 自动同意加群
// 加群请在github新建一个gist其文件名为本群群号的字符串的md5(小写)内容为一行是当前unix时间戳(10分钟内有效)。
// 然后请将您的用户名和gist哈希(小写)按照username/gisthash的格式填写到回答即可。
engine.OnRequest().SetBlock(false).FirstPriority().Handle(func(ctx *zero.Ctx) {
/*if ctx.Event.RequestType == "friend" {
ctx.SetFriendAddRequest(ctx.Event.Flag, true, "")
}*/
c, ok := control.Lookup("manager")
if ok && c.GetData(ctx.Event.GroupID)&0x10 == 0x10 && ctx.Event.RequestType == "group" && ctx.Event.SubType == "add" {
// gist 文件名是群号的 ascii 编码的 md5
// gist 内容是当前 uinx 时间戳,在 10 分钟内视为有效
ans := ctx.Event.Comment[strings.Index(ctx.Event.Comment, "答案:")+len("答案:"):]
divi := strings.Index(ans, "/")
if divi <= 0 {
ctx.SetGroupAddRequest(ctx.Event.Flag, "add", false, "格式错误!")
return
}
if ctx.Event.RequestType == "group" && ctx.Event.SubType == "invite" {
ctx.SetGroupAddRequest(ctx.Event.Flag, "invite", true, "我爱你mua~")
}
})
*/
}
func strToInt(str string) int64 {
val, _ := strconv.ParseInt(str, 10, 64)
return val
}
// loadConfig 加载设置,没有则手动初始化
func loadConfig() {
mkdirerr := os.MkdirAll(datapath, 0755)
if mkdirerr == nil {
if file.IsExist(confile) {
f, err := os.Open(confile)
if err == nil {
data, err1 := io.ReadAll(f)
if err1 == nil {
if len(data) > 0 {
if proto.Unmarshal(data, &config) == nil {
return
}
}
}
ghun := ans[:divi]
hash := ans[divi+1:]
logrus.Infoln("[manager]收到加群申请, 用户:", ghun, ", hash:", hash)
ok, reason := checkNewUser(ctx.Event.UserID, ctx.Event.GroupID, ghun, hash)
if ok {
ctx.SetGroupAddRequest(ctx.Event.Flag, "add", true, "")
process.SleepAbout1sTo2s()
ctx.SetGroupCard(ctx.Event.GroupID, ctx.Event.UserID, ghun)
} else {
ctx.SetGroupAddRequest(ctx.Event.Flag, "add", false, reason)
}
}
config.Checkin = make(map[int64]bool)
config.Welcome = make(map[int64]string)
} else {
panic(mkdirerr)
}
}
// saveConfig 保存设置,无此文件则新建
func saveConfig() error {
data, err := proto.Marshal(&config)
if err != nil {
return err
} else if file.IsExist(datapath) {
f, err1 := os.OpenFile(confile, os.O_WRONLY|os.O_TRUNC|os.O_CREATE, 0644)
if err1 != nil {
return err1
}
defer f.Close()
_, err2 := f.Write(data)
return err2
}
return nil
})
}

View File

@@ -1,6 +0,0 @@
package manager
type Config struct {
Checkin map[int64]bool `protobuf:"bytes,1,rep" protobuf_key:"varint,1,opt" protobuf_val:"varint,2,opt"`
Welcome map[int64]string `protobuf:"bytes,2,rep" protobuf_key:"varint,1,opt" protobuf_val:"bytes,2,opt"`
}

View File

@@ -5,12 +5,12 @@ import (
"github.com/wdvxdr1123/ZeroBot/message"
)
func (ts *Timer) sendmsg(grp int64, ctx *zero.Ctx) {
func (t *Timer) sendmsg(grp int64, ctx *zero.Ctx) {
ctx.Event = new(zero.Event)
ctx.Event.GroupID = grp
if ts.Url == "" {
ctx.SendChain(atall, message.Text(ts.Alert))
if t.URL == "" {
ctx.SendChain(atall, message.Text(t.Alert))
} else {
ctx.SendChain(atall, message.Text(ts.Alert), message.Image(ts.Url).Add("cache", "0"))
ctx.SendChain(atall, message.Text(t.Alert), message.Image(t.URL).Add("cache", "0"))
}
}

View File

@@ -1,6 +1,8 @@
package timer
import (
"crypto/md5"
"encoding/binary"
"fmt"
"strconv"
"strings"
@@ -8,104 +10,115 @@ import (
"unicode"
"github.com/sirupsen/logrus"
"github.com/wdvxdr1123/ZeroBot/utils/helper"
)
// GetTimerInfo 获得标准化定时字符串
func (ts *Timer) GetTimerInfo(grp int64) string {
if ts.Cron != "" {
return fmt.Sprintf("[%d]%s", grp, ts.Cron)
func (t *Timer) GetTimerInfo() string {
if t.Cron != "" {
return fmt.Sprintf("[%d]%s", t.GrpID, t.Cron)
}
return fmt.Sprintf("[%d]%d月%d日%d周%d:%d", grp, ts.Month(), ts.Day(), ts.Week(), ts.Hour(), ts.Minute())
return fmt.Sprintf("[%d]%d月%d日%d周%d:%d", t.GrpID, t.Month(), t.Day(), t.Week(), t.Hour(), t.Minute())
}
// GetTimerID 获得标准化 ID
func (t *Timer) GetTimerID() uint32 {
key := t.GetTimerInfo()
m := md5.Sum(helper.StringToBytes(key))
return binary.LittleEndian.Uint32(m[:4])
}
// GetFilledCronTimer 获得以cron填充好的ts
func GetFilledCronTimer(croncmd string, alert string, img string, botqq int64) *Timer {
var ts Timer
ts.Alert = alert
ts.Cron = croncmd
ts.Url = img
ts.Selfid = botqq
return &ts
func GetFilledCronTimer(croncmd string, alert string, img string, botqq, gid int64) *Timer {
var t Timer
t.Alert = alert
t.Cron = croncmd
t.URL = img
t.SelfID = botqq
t.GrpID = gid
return &t
}
// GetFilledTimer 获得填充好的ts
func GetFilledTimer(dateStrs []string, botqq int64, matchDateOnly bool) *Timer {
func GetFilledTimer(dateStrs []string, botqq, grp int64, matchDateOnly bool) *Timer {
monthStr := []rune(dateStrs[1])
dayWeekStr := []rune(dateStrs[2])
hourStr := []rune(dateStrs[3])
minuteStr := []rune(dateStrs[4])
var ts Timer
var t Timer
mon := time.Month(chineseNum2Int(monthStr))
if (mon != -1 && mon <= 0) || mon > 12 { // 月份非法
ts.Alert = "月份非法!"
return &ts
t.Alert = "月份非法!"
return &t
}
ts.SetMonth(mon)
t.SetMonth(mon)
lenOfDW := len(dayWeekStr)
if lenOfDW == 4 { // 包括末尾的"日"
switch {
case lenOfDW == 4: // 包括末尾的"日"
dayWeekStr = []rune{dayWeekStr[0], dayWeekStr[2]} // 去除中间的十
d := chineseNum2Int(dayWeekStr)
if (d != -1 && d <= 0) || d > 31 { // 日期非法
ts.Alert = "日期非法1"
return &ts
t.Alert = "日期非法1"
return &t
}
ts.SetDay(d)
} else if dayWeekStr[lenOfDW-1] == rune('日') { // xx日
t.SetDay(d)
case dayWeekStr[lenOfDW-1] == rune('日'): // xx日
dayWeekStr = dayWeekStr[:lenOfDW-1]
d := chineseNum2Int(dayWeekStr)
if (d != -1 && d <= 0) || d > 31 { // 日期非法
ts.Alert = "日期非法2"
return &ts
t.Alert = "日期非法2"
return &t
}
ts.SetDay(d)
} else if dayWeekStr[0] == rune('每') { // 每周
ts.SetWeek(-1)
} else { // 周x
t.SetDay(d)
case dayWeekStr[0] == rune('每'): // 每周
t.SetWeek(-1)
default: // 周x
w := chineseNum2Int(dayWeekStr[1:])
if w == 7 { // 周天是0
w = 0
}
if w < 0 || w > 6 { // 星期非法
ts.Alert = "星期非法!"
return &ts
t.Alert = "星期非法!"
return &t
}
ts.SetWeek(time.Weekday(w))
t.SetWeek(time.Weekday(w))
}
if len(hourStr) == 3 {
hourStr = []rune{hourStr[0], hourStr[2]} // 去除中间的十
}
h := chineseNum2Int(hourStr)
if h < -1 || h > 23 { // 小时非法
ts.Alert = "小时非法!"
return &ts
t.Alert = "小时非法!"
return &t
}
ts.SetHour(h)
t.SetHour(h)
if len(minuteStr) == 3 {
minuteStr = []rune{minuteStr[0], minuteStr[2]} // 去除中间的十
}
min := chineseNum2Int(minuteStr)
if min < -1 || min > 59 { // 分钟非法
ts.Alert = "分钟非法!"
return &ts
t.Alert = "分钟非法!"
return &t
}
ts.SetMinute(min)
t.SetMinute(min)
if !matchDateOnly {
urlStr := dateStrs[5]
if urlStr != "" { // 是图片url
ts.Url = urlStr[3:] // utf-8下用为3字节
logrus.Println("[群管]" + ts.Url)
if !strings.HasPrefix(ts.Url, "http") {
ts.Url = "illegal"
t.URL = urlStr[3:] // utf-8下用为3字节
logrus.Println("[群管]" + t.URL)
if !strings.HasPrefix(t.URL, "http") {
t.URL = "illegal"
logrus.Println("[群管]url非法")
return &ts
return &t
}
}
ts.Alert = dateStrs[6]
ts.SetEn(true)
t.Alert = dateStrs[6]
t.SetEn(true)
}
ts.Selfid = botqq
return &ts
t.SelfID = botqq
t.GrpID = grp
return &t
}
// chineseNum2Int 汉字数字转int仅支持-1099最多两位数其中"每"解释为-1"每二"为-2以此类推
@@ -116,13 +129,14 @@ func chineseNum2Int(rs []rune) int {
if unicode.IsDigit(rs[0]) { // 默认可能存在的第二位也为int
r, _ = strconv.Atoi(string(rs))
} else {
if rs[0] == mai {
switch {
case rs[0] == mai:
if l == 2 {
r = -chineseChar2Int(rs[1])
}
} else if l == 1 {
case l == 1:
r = chineseChar2Int(rs[0])
} else {
default:
ten := chineseChar2Int(rs[0])
if ten != 10 {
ten *= 10
@@ -141,13 +155,12 @@ func chineseNum2Int(rs []rune) int {
func chineseChar2Int(c rune) int {
if c == rune('日') || c == rune('天') { // 周日/周天
return 7
} else {
match := []rune("零一二三四五六七八九十")
for i, m := range match {
if c == m {
return i
}
}
return 0
}
match := []rune("零一二三四五六七八九十")
for i, m := range match {
if c == m {
return i
}
}
return 0
}

View File

@@ -15,13 +15,13 @@ func firstWeek(date *time.Time, week time.Weekday) (d time.Time) {
return
}
func (ts *Timer) nextWakeTime() (date time.Time) {
func (t *Timer) nextWakeTime() (date time.Time) {
date = time.Now()
m := ts.Month()
d := ts.Day()
h := ts.Hour()
mn := ts.Minute()
w := ts.Week()
m := t.Month()
d := t.Day()
h := t.Hour()
mn := t.Minute()
w := t.Week()
var unit time.Duration
logrus.Debugln("[timer] unit init:", unit)
if mn >= 0 {
@@ -56,11 +56,12 @@ func (ts *Timer) nextWakeTime() (date time.Time) {
} else {
stable |= 0x8
}
if d < 0 {
switch {
case d < 0:
d = date.Day()
} else if d > 0 {
case d > 0:
stable |= 0x4
} else {
default:
d = date.Day()
if w >= 0 {
stable |= 0x2
@@ -73,35 +74,35 @@ func (ts *Timer) nextWakeTime() (date time.Time) {
}
switch stable {
case 0b0101:
if ts.Day() != time.Now().Day() || ts.Month() != time.Now().Month() {
if t.Day() != time.Now().Day() || t.Month() != time.Now().Month() {
h = 0
}
case 0b1001:
if ts.Month() != time.Now().Month() {
if t.Month() != time.Now().Month() {
d = 0
}
case 0b0001:
if ts.Month() != time.Now().Month() {
if t.Month() != time.Now().Month() {
d = 0
h = 0
}
}
logrus.Debugln("[timer] stable:", stable)
logrus.Debugln("[timer] m:", m, "d:", d, "h:", h, "mn:", mn, "w:", w)
date = time.Date(date.Year(), time.Month(m), int(d), int(h), int(mn), date.Second(), date.Nanosecond(), date.Location())
date = time.Date(date.Year(), m, d, h, mn, date.Second(), date.Nanosecond(), date.Location())
logrus.Debugln("[timer] date original:", date)
if unit > 0 {
date = date.Add(unit)
}
logrus.Debugln("[timer] date after add:", date)
if time.Until(date) <= 0 {
if ts.Month() < 0 {
if ts.Day() > 0 || (ts.Day() == 0 && ts.Week() >= 0) {
if t.Month() < 0 {
if t.Day() > 0 || (t.Day() == 0 && t.Week() >= 0) {
date = date.AddDate(0, 1, 0)
} else if ts.Day() < 0 || ts.Week() < 0 {
if ts.Hour() > 0 {
} else if t.Day() < 0 || t.Week() < 0 {
if t.Hour() > 0 {
date = date.AddDate(0, 0, 1)
} else if ts.Minute() > 0 {
} else if t.Minute() > 0 {
date = date.Add(time.Hour)
}
}
@@ -110,7 +111,7 @@ func (ts *Timer) nextWakeTime() (date time.Time) {
}
}
logrus.Debugln("[timer] date after fix:", date)
if stable&0x8 != 0 && date.Hour() != int(h) {
if stable&0x8 != 0 && date.Hour() != h {
switch {
case stable&0x4 == 0:
date = date.AddDate(0, 0, 1).Add(-time.Hour)
@@ -123,7 +124,7 @@ func (ts *Timer) nextWakeTime() (date time.Time) {
}
}
logrus.Debugln("[timer] date after s8:", date)
if stable&0x4 != 0 && date.Day() != int(d) {
if stable&0x4 != 0 && date.Day() != d {
switch {
case stable*0x1 == 0:
date = date.AddDate(0, 1, -1)
@@ -139,7 +140,7 @@ func (ts *Timer) nextWakeTime() (date time.Time) {
default:
date = date.AddDate(1, 0, 0)
}
date = firstWeek(&date, time.Weekday(w))
date = firstWeek(&date, w)
}
logrus.Debugln("[timer] date after s2:", date)
if time.Until(date) <= 0 {
@@ -148,14 +149,14 @@ func (ts *Timer) nextWakeTime() (date time.Time) {
return date
}
func (ts *Timer) judgeHM(grp int64) {
if ts.Hour() < 0 || ts.Hour() == time.Now().Hour() {
if ts.Minute() < 0 || ts.Minute() == time.Now().Minute() {
if ts.Selfid != 0 {
ts.sendmsg(grp, zero.GetBot(ts.Selfid))
func (t *Timer) judgeHM() {
if t.Hour() < 0 || t.Hour() == time.Now().Hour() {
if t.Minute() < 0 || t.Minute() == time.Now().Minute() {
if t.SelfID != 0 {
t.sendmsg(t.GrpID, zero.GetBot(t.SelfID))
} else {
zero.RangeBot(func(id int64, ctx *zero.Ctx) (_ bool) {
ts.sendmsg(grp, ctx)
t.sendmsg(t.GrpID, ctx)
return
})
}

View File

@@ -0,0 +1,28 @@
package timer
import (
"github.com/FloatTech/zbputils/sql"
)
// Timer 计时器
type Timer struct {
ID uint32 `db:"id"`
En1Month4Day5Week3Hour5Min6 int32 `db:"emdwhm"`
SelfID int64 `db:"sid"`
GrpID int64 `db:"gid"`
Alert string `db:"alert"`
Cron string `db:"cron"`
URL string `db:"url"`
}
// InsertInto 插入自身
func (t *Timer) InsertInto(db *sql.Sqlite) error {
return db.Insert("timer", t)
}
/*
func getTimerFrom(db *sql.Sqlite, id uint32) (t Timer, err error) {
err = db.Find("timer", &t, "where id = "+strconv.Itoa(int(id)))
return
}
*/

View File

@@ -2,34 +2,28 @@
package timer
import (
"io"
"os"
"strconv"
"strings"
"sync"
"time"
"github.com/RomiChan/protobuf/proto"
"github.com/fumiama/cron"
"github.com/sirupsen/logrus"
zero "github.com/wdvxdr1123/ZeroBot"
"github.com/wdvxdr1123/ZeroBot/message"
"github.com/FloatTech/ZeroBot-Plugin/utils/file"
"github.com/FloatTech/zbputils/sql"
)
// Clock 时钟
type Clock struct {
// 记录每个定时器以便取消
timersmap TimersMap
// 定时器map
timers *(map[string]*Timer)
db *sql.Sqlite
timers *(map[uint32]*Timer)
timersmu sync.RWMutex
// 定时器存储位置
pbfile *string
// cron 定时器
cron *cron.Cron
// entries key <-> cron
entries map[string]cron.EntryID
entries map[uint32]cron.EntryID
entmu sync.Mutex
}
@@ -43,65 +37,72 @@ var (
}
)
func NewClock(pbfile string) (c Clock) {
c.loadTimers(pbfile)
c.timers = &c.timersmap.Timers
c.pbfile = &pbfile
// NewClock 添加一个新时钟
func NewClock(db *sql.Sqlite) (c Clock) {
c.loadTimers(db)
c.cron = cron.New()
c.entries = make(map[string]cron.EntryID)
c.entries = make(map[uint32]cron.EntryID)
c.timers = &map[uint32]*Timer{}
c.cron.Start()
return
}
// RegisterTimer 注册计时器
func (c *Clock) RegisterTimer(ts *Timer, grp int64, save bool) bool {
key := ts.GetTimerInfo(grp)
func (c *Clock) RegisterTimer(ts *Timer, save bool) bool {
var key uint32
if save {
key = ts.GetTimerID()
ts.ID = key
} else {
key = ts.ID
}
t, ok := c.GetTimer(key)
if t != ts && ok { // 避免重复注册定时器
t.SetEn(false)
}
c.timersmu.Lock()
(*c.timers)[key] = ts
c.timersmu.Unlock()
logrus.Println("[群管]注册计时器", key)
if ts.Cron != "" {
var ctx *zero.Ctx
if ts.Selfid != 0 {
ctx = zero.GetBot(ts.Selfid)
if ts.SelfID != 0 {
ctx = zero.GetBot(ts.SelfID)
} else {
zero.RangeBot(func(id int64, c *zero.Ctx) bool {
ctx = c
ts.Selfid = id
ts.SelfID = id
return false
})
}
eid, err := c.cron.AddFunc(ts.Cron, func() { ts.sendmsg(grp, ctx) })
eid, err := c.cron.AddFunc(ts.Cron, func() { ts.sendmsg(ts.GrpID, ctx) })
if err == nil {
c.entmu.Lock()
c.entries[key] = eid
c.entmu.Unlock()
if save {
c.SaveTimers()
err = c.AddTimerIntoDB(ts)
}
return true
if err == nil {
err = c.AddTimerIntoMap(ts)
}
return err == nil
}
ts.Alert = err.Error()
} else {
if save {
c.SaveTimers()
_ = c.AddTimerIntoDB(ts)
}
_ = c.AddTimerIntoMap(ts)
for ts.En() {
nextdate := ts.nextWakeTime()
sleepsec := time.Until(nextdate)
logrus.Printf("[群管]计时器%s将睡眠%ds", key, sleepsec/time.Second)
logrus.Printf("[群管]计时器%08x将睡眠%ds", key, sleepsec/time.Second)
time.Sleep(sleepsec)
if ts.En() {
if ts.Month() < 0 || ts.Month() == time.Now().Month() {
if ts.Day() < 0 || ts.Day() == time.Now().Day() {
ts.judgeHM(grp)
ts.judgeHM()
} else if ts.Day() == 0 {
if ts.Week() < 0 || ts.Week() == time.Now().Weekday() {
ts.judgeHM(grp)
ts.judgeHM()
}
}
}
@@ -112,8 +113,8 @@ func (c *Clock) RegisterTimer(ts *Timer, grp int64, save bool) bool {
}
// CancelTimer 取消计时器
func (c *Clock) CancelTimer(key string) bool {
t, ok := (*c.timers)[key]
func (c *Clock) CancelTimer(key uint32) bool {
t, ok := c.GetTimer(key)
if ok {
if t.Cron != "" {
c.entmu.Lock()
@@ -126,41 +127,22 @@ func (c *Clock) CancelTimer(key string) bool {
}
c.timersmu.Lock()
delete(*c.timers, key) // 避免重复取消
e := c.db.Del("timer", "where id = "+strconv.Itoa(int(key)))
c.timersmu.Unlock()
_ = c.SaveTimers()
return e == nil
}
return ok
}
// SaveTimers 保存当前计时器
func (c *Clock) SaveTimers() error {
c.timersmu.RLock()
data, err := proto.Marshal(&c.timersmap)
c.timersmu.RUnlock()
if err == nil {
c.timersmu.Lock()
defer c.timersmu.Unlock()
f, err1 := os.OpenFile(*c.pbfile, os.O_WRONLY|os.O_TRUNC|os.O_CREATE, 0644)
if err1 != nil {
return err1
} else {
_, err2 := f.Write(data)
f.Close()
return err2
}
}
return err
return false
}
// ListTimers 列出本群所有计时器
func (c *Clock) ListTimers(grpID int64) []string {
// 数组默认长度为map长度,后面append时,不需要重新申请内存和拷贝,效率很高
if c.timers != nil {
g := strconv.FormatInt(grpID, 10)
c.timersmu.RLock()
keys := make([]string, 0, len(*c.timers))
for k := range *c.timers {
if strings.Contains(k, g) {
for _, v := range *c.timers {
if v.GrpID == grpID {
k := v.GetTimerInfo()
start := strings.Index(k, "]")
msg := strings.ReplaceAll(k[start+1:]+"\n", "-1", "每")
msg = strings.ReplaceAll(msg, "月0日0周", "月周天")
@@ -171,40 +153,43 @@ func (c *Clock) ListTimers(grpID int64) []string {
}
c.timersmu.RUnlock()
return keys
} else {
return nil
}
return nil
}
func (c *Clock) GetTimer(key string) (t *Timer, ok bool) {
// GetTimer 获得定时器
func (c *Clock) GetTimer(key uint32) (t *Timer, ok bool) {
c.timersmu.RLock()
t, ok = (*c.timers)[key]
c.timersmu.RUnlock()
return
}
func (c *Clock) loadTimers(pbfile string) {
if file.IsExist(pbfile) {
f, err := os.Open(pbfile)
if err == nil {
data, err := io.ReadAll(f)
if err == nil {
if len(data) > 0 {
err = proto.Unmarshal(data, &c.timersmap)
if err == nil {
for str, t := range c.timersmap.Timers {
grp, err := strconv.ParseInt(str[1:strings.Index(str, "]")], 10, 64)
if err == nil {
go c.RegisterTimer(t, grp, false)
}
}
return
}
logrus.Errorln("[群管]读取定时器文件失败将在下一次保存时覆盖原文件。err:", err)
logrus.Errorln("[群管]如不希望被覆盖请运行源码plugin_manager/timers/migrate下的程序将timers.pb刷新为新版")
}
}
}
}
c.timersmap.Timers = make(map[string]*Timer)
// AddTimerIntoDB 添加定时器
func (c *Clock) AddTimerIntoDB(t *Timer) (err error) {
c.timersmu.Lock()
err = c.db.Insert("timer", t)
c.timersmu.Unlock()
return
}
// AddTimerIntoMap 添加定时器到缓存
func (c *Clock) AddTimerIntoMap(t *Timer) (err error) {
c.timersmu.Lock()
(*c.timers)[t.ID] = t
c.timersmu.Unlock()
return
}
func (c *Clock) loadTimers(db *sql.Sqlite) {
c.db = db
err := c.db.Create("timer", &Timer{})
if err == nil {
var t Timer
_ = c.db.FindFor("timer", &t, "", func() error {
tescape := t
go c.RegisterTimer(&tescape, false)
return nil
})
}
}

View File

@@ -1,13 +0,0 @@
package timer
type Timer struct {
Alert string `protobuf:"bytes,1,opt"`
Cron string `protobuf:"bytes,2,opt"`
En1Month4Day5Week3Hour5Min6 int32 `protobuf:"varint,4,opt"`
Selfid int64 `protobuf:"varint,8,opt"`
Url string `protobuf:"bytes,16,opt"`
}
type TimersMap struct {
Timers map[string]*Timer `protobuf:"bytes,1,rep" protobuf_key:"bytes,1,opt" protobuf_val:"bytes,2,opt"`
}

View File

@@ -4,6 +4,7 @@ import (
"testing"
"time"
"github.com/FloatTech/zbputils/sql"
"github.com/sirupsen/logrus"
)
@@ -22,3 +23,11 @@ func TestNextWakeTime(t *testing.T) {
t.Log(t1)
t.Fail()
}
func TestClock(t *testing.T) {
db := &sql.Sqlite{DBPath: "test.db"}
c := NewClock(db)
c.AddTimerIntoDB(GetFilledTimer([]string{"", "12", "-1", "12", "0", "", "test"}, 0, 0, false))
t.Log(c.ListTimers(0))
t.Fail()
}

View File

@@ -2,74 +2,86 @@ package timer
import "time"
func (m *Timer) En() (en bool) {
return m.En1Month4Day5Week3Hour5Min6&0x800000 != 0
// En isEnabled 1bit
func (t *Timer) En() (en bool) {
return t.En1Month4Day5Week3Hour5Min6&0x800000 != 0
}
func (m *Timer) Month() (mon time.Month) {
mon = time.Month((m.En1Month4Day5Week3Hour5Min6 & 0x780000) >> 19)
// Month 4bits
func (t *Timer) Month() (mon time.Month) {
mon = time.Month((t.En1Month4Day5Week3Hour5Min6 & 0x780000) >> 19)
if mon == 0b1111 {
mon = -1
}
return
}
func (m *Timer) Day() (d int) {
d = int((m.En1Month4Day5Week3Hour5Min6 & 0x07c000) >> 14)
// Day 5bits
func (t *Timer) Day() (d int) {
d = int((t.En1Month4Day5Week3Hour5Min6 & 0x07c000) >> 14)
if d == 0b11111 {
d = -1
}
return
}
func (m *Timer) Week() (w time.Weekday) {
w = time.Weekday((m.En1Month4Day5Week3Hour5Min6 & 0x003800) >> 11)
// Week 3bits
func (t *Timer) Week() (w time.Weekday) {
w = time.Weekday((t.En1Month4Day5Week3Hour5Min6 & 0x003800) >> 11)
if w == 0b111 {
w = -1
}
return
}
func (m *Timer) Hour() (h int) {
h = int((m.En1Month4Day5Week3Hour5Min6 & 0x0007c0) >> 6)
// Hour 5bits
func (t *Timer) Hour() (h int) {
h = int((t.En1Month4Day5Week3Hour5Min6 & 0x0007c0) >> 6)
if h == 0b11111 {
h = -1
}
return
}
func (m *Timer) Minute() (min int) {
min = int(m.En1Month4Day5Week3Hour5Min6 & 0x00003f)
// Minute 6bits
func (t *Timer) Minute() (min int) {
min = int(t.En1Month4Day5Week3Hour5Min6 & 0x00003f)
if min == 0b111111 {
min = -1
}
return
}
func (m *Timer) SetEn(en bool) {
// SetEn ...
func (t *Timer) SetEn(en bool) {
if en {
m.En1Month4Day5Week3Hour5Min6 |= 0x800000
t.En1Month4Day5Week3Hour5Min6 |= 0x800000
} else {
m.En1Month4Day5Week3Hour5Min6 &= 0x7fffff
t.En1Month4Day5Week3Hour5Min6 &= 0x7fffff
}
}
func (m *Timer) SetMonth(mon time.Month) {
m.En1Month4Day5Week3Hour5Min6 = ((int32(mon) << 19) & 0x780000) | (m.En1Month4Day5Week3Hour5Min6 & 0x87ffff)
// SetMonth ...
func (t *Timer) SetMonth(mon time.Month) {
t.En1Month4Day5Week3Hour5Min6 = ((int32(mon) << 19) & 0x780000) | (t.En1Month4Day5Week3Hour5Min6 & 0x87ffff)
}
func (m *Timer) SetDay(d int) {
m.En1Month4Day5Week3Hour5Min6 = ((int32(d) << 14) & 0x07c000) | (m.En1Month4Day5Week3Hour5Min6 & 0xf83fff)
// SetDay ...
func (t *Timer) SetDay(d int) {
t.En1Month4Day5Week3Hour5Min6 = ((int32(d) << 14) & 0x07c000) | (t.En1Month4Day5Week3Hour5Min6 & 0xf83fff)
}
func (m *Timer) SetWeek(w time.Weekday) {
m.En1Month4Day5Week3Hour5Min6 = ((int32(w) << 11) & 0x003800) | (m.En1Month4Day5Week3Hour5Min6 & 0xffc7ff)
// SetWeek ...
func (t *Timer) SetWeek(w time.Weekday) {
t.En1Month4Day5Week3Hour5Min6 = ((int32(w) << 11) & 0x003800) | (t.En1Month4Day5Week3Hour5Min6 & 0xffc7ff)
}
func (m *Timer) SetHour(h int) {
m.En1Month4Day5Week3Hour5Min6 = ((int32(h) << 6) & 0x0007c0) | (m.En1Month4Day5Week3Hour5Min6 & 0xfff83f)
// SetHour ...
func (t *Timer) SetHour(h int) {
t.En1Month4Day5Week3Hour5Min6 = ((int32(h) << 6) & 0x0007c0) | (t.En1Month4Day5Week3Hour5Min6 & 0xfff83f)
}
func (m *Timer) SetMinute(min int) {
m.En1Month4Day5Week3Hour5Min6 = (int32(min) & 0x00003f) | (m.En1Month4Day5Week3Hour5Min6 & 0xffffc0)
// SetMinute ...
func (t *Timer) SetMinute(min int) {
t.En1Month4Day5Week3Hour5Min6 = (int32(min) & 0x00003f) | (t.En1Month4Day5Week3Hour5Min6 & 0xffffc0)
}

View File

@@ -6,11 +6,10 @@ import (
"io/ioutil"
"net/http"
control "github.com/FloatTech/zbputils/control"
zero "github.com/wdvxdr1123/ZeroBot"
"github.com/wdvxdr1123/ZeroBot/extension"
"github.com/wdvxdr1123/ZeroBot/message"
"github.com/FloatTech/ZeroBot-Plugin/control"
)
// 此功能实现依赖MCSManager项目对服务器的管理apimc服务器如果没有在该管理平台部署此功能无效

View File

@@ -0,0 +1,64 @@
package moyu
import (
"fmt"
"testing"
"time"
reg "github.com/fumiama/go-registry"
)
var sr = reg.NewRegedit("reilia.fumiama.top:32664", "fumiama", "--")
func TestGetHoliday(t *testing.T) {
registry.Connect()
holidaymap = make(map[string]*Holiday)
h := GetHoliday("元旦")
registry.Close()
t.Fatal(h)
}
func TestSetHoliday(t *testing.T) {
err := sr.Connect()
if err != nil {
t.Fatal(err)
}
err = SetHoliday("元旦", 1, 2023, 1, 1)
if err != nil {
t.Fatal(err)
}
err = SetHoliday("春节", 7, 2022, 1, 31)
if err != nil {
t.Fatal(err)
}
err = SetHoliday("清明节", 1, 2022, 4, 3)
if err != nil {
t.Fatal(err)
}
err = SetHoliday("劳动节", 1, 2022, 4, 30)
if err != nil {
t.Fatal(err)
}
err = SetHoliday("端午节", 1, 2022, 6, 3)
if err != nil {
t.Fatal(err)
}
err = SetHoliday("中秋节", 1, 2022, 9, 10)
if err != nil {
t.Fatal(err)
}
err = SetHoliday("国庆节", 7, 2022, 10, 1)
if err != nil {
t.Fatal(err)
}
err = sr.Close()
if err != nil {
t.Fatal(err)
}
}
func SetHoliday(name string, dur, year int, month time.Month, day int) error {
return sr.Set("holiday/"+name, fmt.Sprintf("%d_%d_%d_%d", dur, year, month, day))
}

Some files were not shown because too many files have changed in this diff Show More