diff --git a/.config/keep b/.config/keep
new file mode 100644
index 0000000..e69de29
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..650d491
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,7 @@
+Cargo.lock
+target
+*.json
+*.DS_Store
+**.DS_Store
+scpt/json/
+.config/ai
diff --git a/Cargo.toml b/Cargo.toml
new file mode 100644
index 0000000..f2a14be
--- /dev/null
+++ b/Cargo.toml
@@ -0,0 +1,19 @@
+[package]
+name = "ai"
+version = "0.0.1"
+edition = "2021"
+
+[dependencies]
+seahorse = "*"
+reqwest = { version = "*", features = ["blocking", "json"] }
+tokio = { version = "1", features = ["full"] }
+shellexpand = "*"
+config = "*"
+serde = "*"
+serde_json = "*"
+serde_derive = "*"
+url = { version = "2.0", features = ["serde"] }
+rustc-serialize = "*"
+toml = "*"
+iso8601-timestamp = "*"
+sysinfo = "*"
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000..fb6c9fe
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,10 @@
+FROM syui/aios
+
+USER root
+ADD .config /root/.config
+WORKDIR /root
+
+ADD ./scpt/entrypoint.sh /
+RUN chmod +x /entrypoint.sh
+
+ENTRYPOINT ["/entrypoint.sh"]
diff --git a/README.md b/README.md
index c7b3451..2b1d12e 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,77 @@
## ai `bot`
+
+
+- name : ai bot
+- base : [rust](https://www.rust-lang.org)
+- host : [yui.syui.ai](https://bsky.app/profile/yui.syui.ai), [ai.syu.is](https://web.syu.is/profile/ai.syu.is)
+
+```sh
+$ ai
+```
+
+### logo
+
```sh
$ cargo build
-$ ./target/debug/ai
+$ ./target/debug/ai ai
+```
+
+```sh
+$ ai ai -t avatar
+```
+
+### login
+
+```sh
+# ai login $handle -p $password
+$ ai l yui.syui.ai -p password
+
+$ cat ~/.config/ai/token.toml
+```
+
+```sh
+# ai l $handle -p $password -s $server
+$ ai l ai.syu.is -p password -s syu.is
+```
+
+### refresh
+
+```
+$ ai r
+```
+
+### notify
+
+```
+$ ai n
+```
+
+```
+$ ai n | jq .
+```
+
+### bot
+
+```
+$ ai bot
+```
+
+|command|type|body|
+|---|---|---|
+|@yui.syui.ai did|mention, reply| plc.directory/$did/log |
+
+### test
+
+`zsh`
+
+```sh
+$ ./ai.zsh t
+```
+
+### docker
+
+```sh
+$ docker run -it syui/aios ai
+$ docker run -it -d syui/aios zsh -c "ai login -p && ai bot"
```
diff --git a/ai.zsh b/ai.zsh
new file mode 100755
index 0000000..ac112b3
--- /dev/null
+++ b/ai.zsh
@@ -0,0 +1,30 @@
+#!/bin/zsh
+
+# https://www.docs.bsky.app/docs/get-started
+
+case $OSTYPE in
+ darwin*)
+ alias date="/opt/homebrew/bin/gdate"
+ ;;
+esac
+d=${0:a:h}/test
+source $d/env
+source $d/refresh.zsh
+source $d/token.zsh
+source $d/reply.zsh
+source $d/notify.zsh
+
+case $1 in
+ refresh|r)
+ refresh
+ ;;
+ token|t)
+ token
+ ;;
+ reply|rep)
+ reply
+ ;;
+ notify|n)
+ notify
+ ;;
+esac
diff --git a/docs/wiki.md b/docs/wiki.md
new file mode 100644
index 0000000..ba38a01
--- /dev/null
+++ b/docs/wiki.md
@@ -0,0 +1 @@
+##
diff --git a/icon/ai.png b/icon/ai.png
new file mode 100644
index 0000000..d21dabe
Binary files /dev/null and b/icon/ai.png differ
diff --git a/icon/avatar.png b/icon/avatar.png
new file mode 100644
index 0000000..f091ef1
Binary files /dev/null and b/icon/avatar.png differ
diff --git a/scpt/api_card.zsh b/scpt/api_card.zsh
new file mode 100755
index 0000000..a710227
--- /dev/null
+++ b/scpt/api_card.zsh
@@ -0,0 +1,1623 @@
+#!/bin/zsh
+
+# raid-boss-admin
+cfg=$HOME/.config/atr/scpt/card_config.json
+cfg_ai=$HOME/.config/atr/scpt/card_config_ai.json
+# {
+# "raid_admin":"yui.bsky.social",
+# "raid_time": "",
+# "raid_card": ""
+# }
+
+case $OSTYPE in
+ darwin*)
+ alias date="/opt/homebrew/bin/gdate"
+ ;;
+esac
+
+# 1=handle, 2=did, 3=opt, 4=sub
+fav_com=$HOME/.config/atr/scpt/api_fav.zsh
+
+function user_data(){
+ u=`echo $data|jq -r .username`
+ id=`echo $data|jq -r .id`
+ did=`echo $data|jq -r .did`
+ next=`echo $data|jq -r .next`
+ aiten=`echo $data|jq -r .aiten`
+ model_mode=`echo $data|jq -r .model_mode`
+ model_limit=`echo $data|jq -r .model_limit`
+ ten_su=`echo $data|jq -r .ten_su`
+ fav=`echo $data|jq -r .fav`
+ d=`date +"%Y%m%d"`
+ updated_at=`echo $data|jq -r .updated_at`
+ updated_at=`date -d "$updated_at" +"%Y-%m-%d"`
+ next_at=`date -d "$next -1 day" +"%Y-%m-%d"`
+ echo "user : $u"
+ echo "id : $id"
+ echo "$did"
+ echo "card : $next_at"
+ echo "battle : $updated_at"
+ #echo "boss : $raid_cp"
+ echo "aiten : $aiten"
+ echo "ten : $ten_su"
+}
+
+function ascii_moji_a() {
+echo "
+⠀⠈⠀⠀⠀⠀⠈⠀⠀⠀⠁⠀⣠⠈⠀⠀⠀⠁⠀⠀⠈⠀⠀⠀⠁⠀
+⠈⠀⠀⠂⠁⠀⠀⠄⠀⠠⠀⣰⡯⣷⡀⠀⢀⠀⢀⠠⠀⠀⡀⠄⠀⠀
+⠀⠄⠀⢀⠀⠀⠄⠀⣠⢴⣼⣳⣟⣗⡷⣦⣄⡀⠀⠀⠀⠀⠀⠀⠀⢀
+⢀⠀⠀⠀⠀⠀⣠⢾⣽⣻⡺⠷⠳⠯⢯⣗⣯⣟⣦⠀⠀⠐⠀⠀⠄⠀
+⠀⠀⠀⠁⠀⣸⢽⣻⡺⠊⠀⢀⠀⠀⠀⠈⢳⣗⣯⢷⠀⠀⠄⠀⠀⠀
+⠐⠈⠀⠀⠀⣿⢽⣳⠁⡀⠄⠀⠀⠀⠂⠀⠀⣳⢯⣟⡇⠀⠀⠀⠈⠀
+⠀⠀⢀⠀⠈⣯⣟⣾⡀⠀⠀⠀⠐⠀⠀⠄⠀⣺⡽⣞⡇⠀⠀⠁⠀⠀
+⠈⠀⠀⠀⢠⣟⣞⣷⣳⣀⠀⠂⠀⠀⠄⢀⡴⣯⢯⣟⣆⠀⠀⠂⠀⠂
+⠠⠀⠐⢀⣟⣞⣷⣳⣻⣞⡷⡦⣦⢦⡶⡯⡿⣽⢽⢾⢽⣆⠀⠠⠀⠀
+⠀⠀⠀⠚⠉⠉⠁⠉⠑⠳⢯⡿⣽⣽⡽⠽⠛⠉⠉⠉⠙⠙⠀⠀⠀⡀
+⠀⠁⠀⠀⠄⠈⠀⠀⠄⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠀⢀⠠⠀⠈⠀⠀
+"
+}
+
+function ascii_moji_b() {
+echo "
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠
+⠀⠀⠀⠀⠀⠀⠀⠀⣰⣿⣷⡀
+⠀⠀⠀⠀⠀⣠⢴⣼⣿⣿⣿⣿⣦⣄⡀
+⠀⠀⠀⣠⢾⣿⣿⡺⠷⠳⠯⢯⣿⣿⣿⣦
+⠀⠀⣸⣿⣿⡺⠊⠀⠀⠀⠀⠀⠈⢳⣿⣿⢷
+⠀⠀⣿⣿⣿⠁⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⡇
+⠀⠀⣿⣿⣿⡀⠀⠀⠀⠀⠀⠀⠀⠀⣺⣿⣿⡇
+⠀⢠⣿⣿⣿⣳⣀⠀⠀⠀⠀⠀⠀⡴⣿⣿⣿⣆
+⠀⣿⣿⣿⣿⣿⣿⡷⡦⣦⢦⡶⣿⣿⣿⣿⣿⣿⣆
+⠚⠉⠉⠁⠉⠑⠳⢯⣿⣿⣿⡽⠽⠛⠉⠉⠉⠙⠙"
+}
+
+function study_card() {
+ card=$1
+ cp=$2
+ s=normal
+ skill=study
+ author=$username
+ count=1
+ data_uu=`curl -sL "$url/users/$uid/card?itemsPerPage=3000"`
+ card_check=`echo $data_uu|jq -r ".[]|select(.card == $card)"`
+ if [ -n "$card_check" ];then
+ echo "you already have"
+ exit
+ fi
+ tmp=`curl -X POST -H "Content-Type: application/json" -d "{\"owner\":$uid,\"card\":$card,\"status\":\"$s\",\"cp\":$cp,\"password\":\"$pass\",\"skill\":\"$skill\",\"author\":\"$author\",\"count\":$count}" -s $url/cards`
+ card=`echo $tmp|jq -r .card`
+ cp=`echo $tmp|jq -r .cp`
+ ascii_moji_b
+ echo "---"
+ echo "[card]"
+ echo "id : ${card}"
+ echo "cp : ${cp}"
+ echo "count : $count"
+ echo "author : ${author}"
+}
+
+function field_card() {
+ card=73
+ cp=0
+ s=field
+ skill=field
+
+ data_uu=`curl -sL "$url/users/$uid/card?itemsPerPage=3000"`
+ card_check=`echo $data_uu|jq -r ".[]|select(.card == $card and .cp == $cp and .skill == \"field\")"`
+ if [ -z "$card_check" ];then
+ tmp=`curl -X POST -H "Content-Type: application/json" -d "{\"owner\":$uid,\"card\":$card,\"status\":\"$s\",\"cp\":$cp,\"password\":\"$pass\",\"skill\":\"$skill\"}" -s $url/cards`
+ card=`echo $tmp|jq -r .card`
+ cp=`echo $tmp|jq -r .cp`
+ ascii_moji_b
+ echo "---"
+ echo "[card]"
+ echo "id : ${card}"
+ echo "cp : ${cp}"
+ echo "status : ${s}"
+ echo "skill : ${skill}"
+ fi
+
+ cp=$1
+
+ data_uu=`curl -sL "$url/users/$uid/card?itemsPerPage=3000"`
+ card_check=`echo $data_uu|jq -r ".[]|select(.card == $card and .cp == $cp and .skill == \"field\")"`
+ if [ -z "$card_check" ];then
+ tmp=`curl -X POST -H "Content-Type: application/json" -d "{\"owner\":$uid,\"card\":$card,\"status\":\"$s\",\"cp\":$cp,\"password\":\"$pass\",\"skill\":\"$skill\"}" -s $url/cards`
+ card=`echo $tmp|jq -r .card`
+ cp=`echo $tmp|jq -r .cp`
+ ascii_moji_b
+ echo "---"
+ echo "[card]"
+ echo "id : ${card}"
+ echo "cp : ${cp}"
+ echo "status : ${s}"
+ echo "skill : ${skill}"
+ else
+ echo "you already have"
+ exit
+ fi
+}
+
+function card_add_origin() {
+ card=$1
+ cp=$2
+ s=$3
+ skill=$3
+ data_uu=`curl -sL "$url/users/$uid/card?itemsPerPage=3000"`
+ card_check=`echo $data_uu|jq -r ".[]|select(.card == $card)|select(.skill == \"$skill\")"`
+ if [ -z "$card_check" ];then
+ tmp=`curl -X POST -H "Content-Type: application/json" -d "{\"owner\":$uid,\"card\":$card,\"status\":\"$s\",\"cp\":$cp,\"password\":\"$pass\",\"skill\":\"$skill\"}" -s $url/cards`
+ card=`echo $tmp|jq -r .card`
+ cp=`echo $tmp|jq -r .cp`
+ #ascii_moji_b
+ echo "---"
+ echo "[card] ✨"
+ echo "id : ${card}"
+ echo "cp : ${cp}"
+ echo "status : ${s}"
+ echo "skill : ${skill}"
+ fi
+}
+
+function yui_card_add() {
+ card=$1
+ cp=$2
+ s=yui
+ skill=yui
+ data_uu=`curl -sL "$url/users/$uid/card?itemsPerPage=3000"`
+ card_check=`echo $data_uu|jq -r ".[]|select(.card == $card)"`
+ if [ -z "$card_check" ];then
+ tmp=`curl -X POST -H "Content-Type: application/json" -d "{\"owner\":$uid,\"card\":$card,\"status\":\"$s\",\"cp\":$cp,\"password\":\"$pass\",\"skill\":\"$skill\"}" -s $url/cards`
+ card=`echo $tmp|jq -r .card`
+ cp=`echo $tmp|jq -r .cp`
+ #ascii_moji_b
+ echo "---"
+ echo "[card]"
+ echo "id : ${card}"
+ echo "cp : ${cp}"
+ echo "status : ${s}"
+ echo "skill : ${skill}"
+ fi
+}
+
+function card_add_kyoku() {
+ cp=$1
+ card=90
+ s=kyoku
+ skill=yui
+ data_uu=`curl -sL "$url/users/$uid/card?itemsPerPage=3000"`
+ card_check=`echo $data_uu|jq -r ".[]|select(.card == $card)"`
+ card_check_tenkuu=`echo $data_uu|jq -r ".[]|select(.card == 89)"`
+ if [ -n "$card_check" ];then
+ echo "you already have [id:90]"
+ exit
+ fi
+ if [ -z "$card_check_tenkuu" ];then
+ echo "need a card with [id:89]"
+ exit
+ fi
+ if [ -z "$card_check" ] && [ -n "$card_check_tenkuu" ];then
+ tmp=`curl -X POST -H "Content-Type: application/json" -d "{\"owner\":$uid,\"card\":$card,\"status\":\"$s\",\"cp\":$cp,\"password\":\"$pass\",\"skill\":\"$skill\"}" -s $url/cards`
+ card=`echo $tmp|jq -r .card`
+ cp=`echo $tmp|jq -r .cp`
+ ascii_moji_b
+ echo "---"
+ echo "[card]"
+ echo "id : ${card}"
+ echo "cp : ${cp}"
+ echo "status : ${s}"
+ echo "skill : ${skill}"
+ fi
+}
+
+function yui_card() {
+ card=$1
+ cp=$2
+ s=yui
+ skill=yui
+ data_uu=`curl -sL "$url/users/$uid/card?itemsPerPage=3000"`
+ card_check=`echo $data_uu|jq -r ".[]|select(.card == $card)"`
+ if [ -n "$card_check" ];then
+ echo "you already have"
+ exit
+ fi
+ card_check=`echo $data_uu|jq -r ".[]|select(.card == 36)"`
+ if [ -z "$card_check" ] && [ $card -eq 47 ];then
+ echo "no yui card"
+ exit
+ fi
+ tmp=`curl -X POST -H "Content-Type: application/json" -d "{\"owner\":$uid,\"card\":$card,\"status\":\"$s\",\"cp\":$cp,\"password\":\"$pass\",\"skill\":\"$skill\"}" -s $url/cards`
+ card=`echo $tmp|jq -r .card`
+ cp=`echo $tmp|jq -r .cp`
+ ascii_moji_b
+ echo "---"
+ echo "[card]"
+ echo "id : ${card}"
+ echo "cp : ${cp}"
+ echo "status : ${s}"
+ echo "skill : ${skill}"
+}
+
+function moji_mode_card() {
+ card=$1
+ cp=$2
+ skills=$3
+ s=$4
+ data_uu=`curl -sL "$url/users/$uid/card?itemsPerPage=2000"`
+ card_check=`echo $data_uu|jq -r ".[]|select(.card == $card)"`
+ if [ -n "$card_check" ];then
+ echo "you already have"
+ exit
+ fi
+ tmp=`curl -X POST -H "Content-Type: application/json" -d "{\"owner\":$uid,\"card\":$card,\"status\":\"$s\",\"cp\":$cp,\"password\":\"$pass\",\"skill\":\"$skill\"}" -s $url/cards`
+ card=`echo $tmp|jq -r .card`
+ cp=`echo $tmp|jq -r .cp`
+ ascii_moji_b
+ echo "---"
+ echo "[card]"
+ echo "id : ${card}"
+ echo "cp : ${cp}"
+ echo "status : ${s}"
+ echo "skill : ${skill}"
+ sleep 1
+}
+
+function egg_card() {
+ card=39
+ data_uu=`curl -sL "$url/users/$uid/card?itemsPerPage=2000"`
+ card_check=`echo $data_uu|jq -r ".[]|select(.card == $card)"`
+ if [ -n "$card_check" ];then
+ echo "you already have, dragon"
+ exit
+ fi
+
+ card=40
+ cp=0
+ data_uu=`curl -sL "$url/users/$uid/card?itemsPerPage=2000"`
+ card_check=`echo $data_uu|jq -r ".[]|select(.card == $card)"`
+ if [ -n "$card_check" ];then
+ echo "you already have, egg"
+ exit
+ fi
+
+ card=42
+ cp=0
+ data_uu=`curl -sL "$url/users/$uid/card?itemsPerPage=2000"`
+ card_check=`echo $data_uu|jq -r ".[]|select(.card == $card)"`
+ if [ -n "$card_check" ];then
+ echo "you already have, nyan"
+ exit
+ fi
+
+ #if [ "$book" != true ];then
+ # echo no book
+ # exit
+ #fi
+
+ tmp=`curl -X POST -H "Content-Type: application/json" -d "{\"owner\":$uid,\"card\":$card,\"cp\":$cp,\"password\":\"$pass\"}" -s $url/cards`
+ card=`echo $tmp|jq -r .card`
+ cp=`echo $tmp|jq -r .cp`
+ ascii_moji_b
+ echo "---"
+ echo "[card]"
+ echo "id : ${card}"
+ echo "cp : ${cp}"
+}
+
+function user_card(){
+ id=$1
+ data=`curl -sL "$url/users/$id"`
+ u=`echo $data|jq -r .username`
+ data_u=`curl -sL "$url/users/$id/card?itemsPerPage=2000"`
+ cp_i=`echo $data_u |jq -r "sort_by(.cp) | reverse|.[0].cp"`
+ cp_ii=`echo $data_u |jq -r "sort_by(.cp) | reverse|.[1].cp"`
+ cp_iii=`echo $data_u |jq -r "sort_by(.cp) | reverse|.[2].cp"`
+ data_u_card=`curl -sL "https://api.syui.ai/users/$id/card?itemsPerPage=3000"`
+ boss_l=`echo $data_u_card|jq ".[]|.cp"|sed 's/^0$/10000/g'|tr "\n" "+"`
+ boss_cp=$((${boss_l/%?/}))
+ page_card=`curl -sL card.syui.ai/json/card.json`
+ owner=`echo $page_card|jq -r ".[]|select(.owner == \"$u\")|.id,.h"|tr -d '\n'`
+ pay_card=`echo $page_card|jq -r ".[]|select(.ten_skill == true)?|.id"`
+ pay_card_n=`echo $pay_card|wc -l`
+ for ((i=1;i<=$pay_card_n;i++))
+ do
+ t=`echo $pay_card|awk "NR==$i"`
+ ten_card=`echo $data_u_card|jq ".[]|select(.card == $t)"`
+ if [ -z "$ten_card" ];then
+ out=${out}${t},
+ fi
+ done
+ pay_card=`echo $page_card|jq -r ".[]|select(.ten_skill == true)?|.id,.h"|xargs -n2|tr '\n' ,`
+ if [ "$u" = "null" ];then
+ echo no id
+ exit
+ fi
+ #echo "user : $u"
+ echo "[card]"
+ echo "cp : $cp_i"
+ echo "cp : $cp_ii"
+ echo "cp : $cp_iii"
+ echo "[boss]"
+ echo "cp : $boss_cp"
+ if [ -n "$owner" ];then
+ echo "owner : $owner"
+ fi
+ #echo "pay : $pay_card"
+ echo "pay_no : $out"
+}
+
+function battle_raid(){
+ f_raid_user=$HOME/.config/atr/txt/card_raid_user.txt
+ f_raid_start_cp=$HOME/.config/atr/txt/card_raid_start_cp.txt
+ f_raid_start_time=$HOME/.config/atr/txt/card_raid_start_time.txt
+ boss_cp=150000
+
+ if [ `date +%u` -ge 6 ];then
+ boss_cp=$(($RANDOM % 150000 + boss_cp))
+ else
+ boss_cp=$(($RANDOM % 50000 + boss_cp))
+ fi
+
+ if [ -n "$raid_boss_admin" ] && [ "$raid_run" = "true" ];then
+ boss_user=`echo $raid_boss_admin | cut -d . -f 1`
+ boss_user_bsky=$raid_boss_admin
+ boss_cp=100000
+ boss_id=$raid_boss_id
+ boss_card=23
+ boss_card_win=24
+ fi
+
+ if [ -n "$raid_boss_admin" ] && [ ! -f $f_raid ] && [ "$raid_run" = "true" ];then
+ boss_l=`curl -sL "https://api.syui.ai/users/${boss_id}/card?itemsPerPage=2550"|jq ".[]|.cp"|sed 's/^0$/10000/g'|tr "\n" "+"`
+ boss_cp=$((${boss_l/%?/}))
+ fi
+
+ if [ -f "$cfg_ai" ];then
+ boss_user_ai=ai
+ boss_id=2
+ boss_l=`curl -sL "https://api.syui.ai/users/${boss_id}/card?itemsPerPage=2550"|jq ".[]|.cp"|sed 's/^0$/10000/g'|tr "\n" "+"`
+ boss_cp=$((${boss_l/%?/}))
+ fi
+
+ if [ ! -f $f_raid ];then
+ raid_start=`date +"%H:%M"`
+ echo "$boss_cp" >! $f_raid
+ echo "$boss_cp" >! $f_raid_start_cp
+ echo "$raid_start" >! $f_raid_start_time
+ fi
+
+ if [ -f $f_raid_start_time ];then
+ raid_start=`cat $f_raid_start_time`
+ raid_time=`date -d "$raid_start 3 min" +"%H:%M"`
+ fi
+
+ if [ -f $f_raid_start_cp ];then
+ raid_start_cp=`cat $f_raid_start_cp`
+ fi
+
+ if [ `cat $f_raid` -eq 1 ];then
+ echo "[boss]${boss_user}"
+ echo "win"
+ exit
+ fi
+
+ if [ `cat $f_raid` -eq 0 ];then
+ echo "[boss]"
+ echo "shutdown"
+ exit
+ fi
+
+ # time attack
+ rr=`date +"%H:%M"`
+ if [ -n "$raid_boss_admin" ] && [ "$boss_user" = "$boss_user_time" ] && [ "$raid_run" = "true" ];then
+ echo "time : $rr ---> $raid_time"
+ fi
+
+ if [ "$raid_time" = "$rr" ] && [ -n "$raid_boss_admin" ] && [ "$boss_user" = "$boss_user_time" ] && [ "$raid_run" = "true" ];then
+ echo "boss win!"
+ cp_b=`cat $f_raid`
+ echo "cp : $cp_b"
+ echo 1 >! $f_raid
+ body=`echo "\n[card]\nid : $boss_card_win\ncp : 0"`
+ sleep 3
+ tmp=`curl -X POST -H "Content-Type: application/json" -d "{\"owner\":$boss_id,\"card\":$boss_card_win,\"status\":\"super\",\"cp\":0,\"password\":\"$pass\"}" -s $url/cards`
+ tmp=`$HOME/.cargo/bin/atr @ ${boss_user_bsky} -p "$body"`
+ fi
+
+ if [ $raid_at -ge $d ];then
+ echo "limit battle"
+ else
+ data_u=`curl -sL "$url/users/$uid/card?itemsPerPage=2000"`
+ cp_i=`echo $data_u |jq -r "sort_by(.cp) | reverse|.[0].cp"`
+ cid=`echo $data_u |jq -r "sort_by(.cp) | reverse|.[0].id"`
+ skill=`echo $data_u |jq -r "sort_by(.cp) | reverse|.[0].skill"`
+ ss=$(($RANDOM % 4))
+ sss=$(($RANDOM % 3))
+ ss_post=$(($RANDOM % 2))
+ if [ "$skill" = "critical" ] && [ $ss -eq 1 ];then
+ cp_i=$((cp_i + cp_i))
+ fi
+ if [ "$skill" = "dragon" ] && [ $sss -eq 1 ];then
+ cp_i=$((cp_i + cp_i + cp_i))
+ fi
+ if [ "$skill" = "yui" ] && [ $ss -eq 1 ];then
+ cp_i=$((cp_i + ten_su))
+ fi
+
+ if [[ "$cp_i" =~ ^[0-9]+$ ]]; then
+ else
+ echo error
+ exit
+ fi
+ cp_b=`cat $f_raid`
+ cp_bb=`expr $cp_b - $cp_i`
+ echo "[raid battle]"
+ if [ -f "$cfg_ai" ];then
+ echo "@ai\nhttps://card.syui.ai/${boss_user_ai}\nhttps://vrm.syui.ai"
+ fi
+ if [ -n "$boss_user_bsky" ];then
+ echo "@${boss_user_bsky}\nhttps://card.syui.ai/${boss_user}"
+ fi
+ if [ "$skill" = "critical" ] && [ $ss -eq 1 ];then
+ echo "⚡ $cp_i vs $cp_b ---> $cp_bb"
+ elif [ "$skill" = "post" ] && [ $sss -eq 1 ];then
+ cp_post=`$HOME/.cargo/bin/atr pro $1 -p`
+ cp_i=$((cp_i + cp_post))
+ cp_bb=$((cp_bb - cp_post))
+ echo "🔥 $cp_i vs $cp_b ---> $cp_bb"
+ elif [ "$skill" = "luck" ] && [ $ss_post -eq 1 ];then
+ echo "✨ $cp_i vs $cp_b ---> $cp_bb"
+ elif [ "$skill" = "dragon" ] && [ $sss -eq 1 ];then
+ echo "🐉 $cp_i vs $cp_b ---> $cp_bb"
+ elif [ "$skill" = "yui" ] && [ $ss -eq 1 ];then
+ if [ $cid -eq $fav ];then
+ echo "🔅 $cp_i vs $cp_b •*¨*•.¸¸✧ $cp_bb"
+ else
+ echo "🔅 $cp_i vs $cp_b ---> $cp_bb"
+ fi
+ else
+ echo "$cp_i vs $cp_b ---> $cp_bb"
+ fi
+
+ if [ `cat $f_raid` -eq 0 ];then
+ echo shutdown boss
+ exit
+ fi
+
+ s=normal
+ ss=`echo $(($RANDOM % 10))`
+ if [ $ss -eq 1 ];then
+ card=`echo $(($RANDOM % 15))`
+ else
+ card=0
+ fi
+
+ if [ 0 -ge $cp_bb ];then
+ echo "win!"
+ echo 0 >! $f_raid
+ card=`echo $(($RANDOM % 15))`
+ if [ -n "$raid_boss_admin" ];then
+ body=`echo "\n[card]\nid : $boss_card\ncp : 0"`
+ sleep 1
+ tmp=`curl -X POST -H "Content-Type: application/json" -d "{\"owner\":$boss_id,\"card\":$boss_card,\"status\":\"super\",\"cp\":0,\"password\":\"$pass\"}" -s $url/cards`
+ tmp=`$HOME/.cargo/bin/atr @ ${boss_user_bsky} -p "$body"`
+ raid_end=`date +"%H:%M"`
+ raid_body=`echo "[raid status]\n${boss_user_bsky}\ncp : $raid_start_cp\nstart/$raid_start\nend/$raid_end\nlast : $raid_last"`
+ tmp=`$HOME/.cargo/bin/atr p "$raid_body"`
+ if [ "$raid_run" = "true" ];then
+ rm $cfg
+ fi
+ if [ -f "$cfg_ai" ];then
+ rm $cfg_ai
+ fi
+ else
+ raid_end=`date +"%H:%M"`
+ raid_body=`echo "[raid status]\ncp : $raid_start_cp\nstart/$raid_start\nend/$raid_end\nlast : $raid_last"`
+ tmp=`$HOME/.cargo/bin/atr p "$raid_body"`
+ fi
+ else
+ echo $cp_bb >! $f_raid
+ echo $uid >> $f_raid_user
+ fi
+
+ if [ $card -eq 0 ];then
+ cp=`echo $(($RANDOM % 100 + 50))`
+ else
+ cp=`echo $(($RANDOM % 500 + 200))`
+ s=`echo $(($RANDOM % 2))`
+ if [ $s -eq 1 ];then
+ s=super
+ plus=$(($RANDOM % 500 + 300))
+ cp=$((cp + plus))
+ fi
+ fi
+
+ #if [ -n "$raid_boss_admin" ] && [ "$raid_run" = "true" ];then
+ # data_uu=`curl -sL "$url/users/$uid/card?itemsPerPage=2000"`
+ # card_check=`echo $data_uu|jq -r ".[]|select(.card == $raid_sp_card)"`
+ #fi
+
+ if [ -n "$raid_boss_admin" ] && [ -z "$card_check" ] && [ "$raid_run" = "true" ];then
+ ss=`echo $(($RANDOM % 10))`
+ if [ $ss -eq 1 ];then
+ s=super
+ fi
+ tmp=`curl -X POST -H "Content-Type: application/json" -d "{\"owner\":$uid,\"card\":$raid_sp_card,\"status\":\"$s\",\"cp\":0,\"password\":\"$pass\"}" -s $url/cards`
+ card=`echo $tmp|jq -r .card`
+ card_url=`echo $tmp|jq -r .url`
+ cp=`echo $tmp|jq -r .cp`
+ echo "---"
+ echo "[card]"
+ echo "id : ${card}"
+ echo "cp : ${cp}"
+ echo "status : ${s}"
+ fi
+
+ if [ `date +%u` -ge 6 ];then
+ ran_s=`echo $((RANDOM % 3))`
+ else
+ ran_s=`echo $((RANDOM % 30))`
+ fi
+
+ # happy new year !
+ if [ `date +%m%d` -eq 1231 ];then
+ thd=87
+ count=1
+ author=ai
+ skill=yui
+ card_t=$thd
+ card_check=`curl -sL "https://api.syui.ai/users/$uid/card?itemsPerPage=3000"|jq -r ".[]|select(.card == $card_t)|select(.skill == \"$skill\")"`
+ card=$card_t
+ cp=`echo $(($RANDOM % $(date +%Y) * 2))`
+ st=yui
+
+ if [ -z "$card_check" ];then
+ echo "[happy new year] ✨"
+ echo "id : $card_t"
+ echo "cp : $cp"
+ echo "status : $st"
+ echo "skill : $skill"
+ tmp=`curl -X POST -H "Content-Type: application/json" -d "{\"owner\":$uid,\"card\":$card,\"status\":\"$st\",\"cp\":$cp,\"password\":\"$pass\",\"skill\":\"$skill\",\"author\":\"$author\", \"count\":$count}" -sL $url/cards`
+
+ # model true
+ tmp=`curl -X PATCH -H "Content-Type: application/json" -d "{\"model_mode\":$(($model_mode + 1)), \"model\":true, \"model_at\":\"$raid_at_n\",\"token\":\"$token\"}" -s $url/users/$uid`
+ fi
+ fi
+
+ if [ $ran_s -eq 0 ];then
+ thd=2
+ #thd=`echo $((RANDOM % 11 + 1))`
+ skill=model
+ card_t=$thd
+ card_check=`curl -sL "https://api.syui.ai/users/$uid/card?itemsPerPage=3000"|jq -r ".[]|select(.card == $card_t)|select(.skill == \"$skill\")"`
+ card=$card_t
+ cp=`echo $(($RANDOM % 1000 + 400))`
+ st=yui
+
+ if [ -z "$card_check" ];then
+ echo "[new] ✨"
+ echo "id : $card_t"
+ echo "cp : $cp"
+ echo "status : $st"
+ echo "skill : $skill"
+ tmp=`curl -X POST -H "Content-Type: application/json" -d "{\"owner\":$uid,\"card\":$card,\"status\":\"$st\",\"cp\":$cp,\"password\":\"$pass\",\"skill\":\"$skill\"}" -sL $url/cards`
+
+ # model true
+ tmp=`curl -X PATCH -H "Content-Type: application/json" -d "{\"model_mode\":$(($model_mode + 1)), \"model\":true, \"model_at\":\"$raid_at_n\",\"token\":\"$token\"}" -s $url/users/$uid`
+ fi
+
+ #if [ -n "$card_check" ];then
+ # card=68
+ # card_t=$card
+ # skill=normal
+ # st=super
+ # cp=0
+ # echo "[new]"
+ # echo "id : $card_t"
+ # echo "cp : $cp"
+ # echo "status : $st"
+ # echo "skill : $skill"
+ # tmp=`curl -X POST -H "Content-Type: application/json" -d "{\"owner\":$uid,\"card\":$card,\"status\":\"$st\",\"cp\":$cp,\"password\":\"$pass\",\"skill\":\"$skill\"}" -sL $url/cards`
+ #fi
+
+ fi
+
+ tmp=`curl -X POST -H "Content-Type: application/json" -d "{\"owner\":$uid,\"password\":\"$pass\"}" -s $url/cards`
+ card=`echo $tmp|jq -r .card`
+ card_url=`echo $tmp|jq -r .url`
+ cp=`echo $tmp|jq -r .cp`
+ echo "---"
+ echo "[card]"
+ echo "id : ${card}"
+ echo "cp : ${cp}"
+ if [ "$s" = "critical" ] || [ "$s" = "luck" ] || [ "$s" = "post" ];then
+ echo "skill : ${s}"
+ fi
+
+ if [ "$skill" = "luck" ] && [ $ss_post -eq 1 ];then
+ tmp=`curl -X POST -H "Content-Type: application/json" -d "{\"owner\":$uid,\"password\":\"$pass\"}" -s $url/cards`
+ card=`echo $tmp|jq -r .card`
+ card_url=`echo $tmp|jq -r .url`
+ cp=`echo $tmp|jq -r .cp`
+ echo "---"
+ echo "[card]"
+ echo "id : ${card}"
+ echo "cp : ${cp}"
+ if [ "$s" = "critical" ] || [ "$s" = "luck" ] || [ "$s" = "post" ];then
+ echo "skill : ${s}"
+ fi
+ fi
+
+ tmp=`curl -X PATCH -H "Content-Type: application/json" -d "{\"raid_at\":\"$raid_at_n\",\"token\":\"$token\"}" -s $url/users/$uid`
+ fi
+ exit
+}
+
+function battle_server(){
+ rr=`date +"%H%M"`
+ a_team=bluesky
+ b_team=mastodon
+ f_server_prezent=$HOME/.config/atr/txt/card_server_prezent.txt
+ f_server=$HOME/.config/atr/txt/card_server.txt
+ f_server_user_at=$HOME/.config/atr/txt/card_server_user_at.txt
+ f_server_user_ap=$HOME/.config/atr/txt/card_server_user_ap.txt
+ f_server_ap=$HOME/.config/atr/txt/card_server_ap.txt
+ f_server_at=$HOME/.config/atr/txt/card_server_at.txt
+ f_server_start_time=$HOME/.config/atr/txt/card_server_start_time.txt
+
+ at_endpoint=`curl -sL https://plc.directory/$did|jq -r ".service.[].serviceEndpoint"|cut -d . -f 1-2|cut -d / -f 3`
+ at_endpoint_f=$HOME/.config/atr/txt/at_endpoint_${at_endpoint}_.txt
+ touch $at_endpoint_f
+ a_team=$at_endpoint
+ f_server_at=$at_endpoint_f
+ echo $username >> ${at_endpoint_f}.commit
+
+ if [ `cat $f_server` -eq 1 ];then
+ echo shutdown server battle
+ exit
+ fi
+
+ if [ ! -f $f_server_start_time ];then
+ server_start=`date +"%H%M"`
+ echo "$server_start" >! $f_server_start_time
+ echo 0 >! $f_server_at
+ echo 0 >! $f_server_ap
+ fi
+
+ cp_ap=`cat $f_server_ap`
+ cp_at=`cat $f_server_at`
+
+ if [ -f $f_server_start_time ];then
+ server_start=`cat $f_server_start_time`
+ server_time=`date -d "$server_start 30 min" +"%H%M"`
+ fi
+
+ #echo "time:`date -d "$server_time" +"%H:%M"`"
+
+ if [ $server_at -ge $d ];then
+ echo "limit battle"
+ exit
+ fi
+
+ data_u=`curl -sL "$url/users/$uid/card?itemsPerPage=4000"`
+ fav_card=`echo $data_u|jq -r ".[]|select(.id == $fav)"`
+ cid=$fav
+
+ if [ -z "$fav_card" ];then
+ echo "/fav "
+ echo https://card.syui.ai/pr
+ exit
+ fi
+
+ if [ ! -f $f_server_user_at ];then
+ echo start >> $f_server_user_at
+ fi
+ if [ ! -f $f_server_user_ap ];then
+ echo start >> $f_server_user_ap
+ fi
+ commit_user_at=`cat $f_server_user_at|tail -n 1`
+ commit_user_ap=`cat $f_server_user_ap|tail -n 1`
+ echo $username >> $f_server_user_at
+
+ cp_i=`echo $fav_card|jq -r ".cp"`
+ cid=`echo $fav_card|jq -r ".id"`
+ cp_ii=$cp_i
+ card_name=`echo $fav_card|jq -r ".card"`
+ card_status=`echo $fav_card|jq -r ".status"`
+ card_skill=`echo $fav_card|jq -r ".skill"`
+ skill=$card_skill
+
+ if [ "$skill" = "critical" ];then
+ cp_i=$((cp_i + cp_i))
+ fi
+ if [ "$skill" = "dragon" ];then
+ cp_i=$((cp_i * 3))
+ fi
+ if [ "$skill" = "yui" ];then
+ cp_i=$((cp_i + ten_su))
+ fi
+
+ if [ ! -f $f_server_prezent ];then
+ cp_all=$((cp_i + cp_at))
+ else
+ cp_all=$((cp_at - cp_i))
+ fi
+
+ if [ "$skill" = "critical" ];then
+ echo "⚡ $cp_i ---> $cp_at"
+ elif [ "$skill" = "post" ];then
+ cp_post=`$HOME/.cargo/bin/atr pro $1 -p`
+ cp_i=$((cp_i + cp_post))
+ cp_all=$((cp_i + cp_at))
+ echo "🔥 $cp_i ---> $cp_at"
+ elif [ "$skill" = "luck" ];then
+ echo "✨ $cp_i ---> $cp_at"
+ elif [ "$skill" = "dragon" ];then
+ echo "🐉 $cp_i ---> $cp_at"
+ elif [ "$skill" = "yui" ];then
+ if [ $cid -eq $fav ];then
+ echo "🔅 $cp_i •*¨*•.¸¸✧ $cp_at"
+ else
+ echo "🔅 $cp_i ---> $cp_at"
+ fi
+ else
+ echo "${cp_i} ---> $cp_at"
+ fi
+
+ echo $cp_all >! $f_server_at
+ echo
+ echo "[${a_team}] ${cp_all}"
+ echo "┗ @${username}"
+ #echo "┣ @${username}"
+ #echo "┗ @${commit_user_at}"
+ #
+ #mastodon
+ #echo
+ #echo "┏━ vs ━┛"
+ #echo
+ #echo "[${b_team}] ${cp_ap}"
+ #echo "┗ @${commit_user_ap}"
+ #echo "----"
+ #mastodon
+ at_end_t=`ls $HOME/.config/atr/txt/at_endpoint_*.txt`
+ at_end_n=`echo "$at_end_t"|wc -l`
+ for ((ati=1;ati<=$at_end_n;ati++))
+ do
+ t=`echo "$at_end_t"|awk "NR==$ati"`
+ tt=`echo $t|cut -d _ -f 3|cut -d . -f 1`
+ cp_end=`cat $t`
+ commit_user_end=`cat ${t}.commit|tail -n 1`
+ if [ "$tt" != "`echo $a_team|cut -d . -f 1`" ];then
+ echo "${tt} ${cp_end}"
+ echo "┗ @${commit_user_end}"
+ fi
+ done
+
+ #echo "[log]"
+ #echo "${commit_user_at} --> ${cp_at}/$a_team"
+ #echo "${cp_ap}/$b_team <-- ${commit_user_ap}"
+ #echo "${username} --> $cp_all/$a_team"
+
+ if [ $rr -gt $server_time ];then
+ echo "----"
+ echo "time up!"
+ body="${cp_all}/${a_team} vs ${cp_ap}/${b_team}"
+ tmp=`$HOME/.cargo/bin/atr p "$body"`
+ echo 1 >! $f_server
+ rm $f_server_start_time
+ rm $f_server_at
+ rm $f_server_ap
+ mv $f_server_user_at $f_server_user_at.back
+ mv $f_server_user_ap $f_server_user_ap.back
+ fi
+
+ echo "----"
+
+ if [ ! -f $f_server_prezent ];then
+ cp_plus=$(($RANDOM % 30 + 1))
+ cp=$((cp_ii + cp_plus))
+ body="level up!"
+ echo "${body} ✧${cp}(+${cp_plus})"
+ tmp=`curl -sL -X PATCH -H "Content-Type: application/json" -d "{\"cp\":$cp,\"token\":\"$token\"}" $url/cards/$fav`
+ tmp=`curl -X PATCH -H "Content-Type: application/json" -d "{\"server_at\":\"$server_at_n\",\"token\":\"$token\"}" -s $url/users/$uid`
+ else
+ aiten_plus=$((aiten + cp_i))
+ #echo "aiten : ${aiten}"
+ echo "aiten +${cp_i}"
+ tmp=`curl -X PATCH -H "Content-Type: application/json" -d "{\"aiten\":${aiten_plus}, \"server_at\":\"$server_at_n\",\"token\":\"$token\"}" -s $url/users/$uid`
+ fi
+
+ ran_s=`echo $((RANDOM % 5))`
+ if [ $ran_s -eq 0 ];then
+ echo "----"
+ thd=13
+ #thd=`echo $((RANDOM % 11 + 1))`
+ skill=3d
+ card_t=$thd
+ card_check=`curl -sL "https://api.syui.ai/users/$uid/card?itemsPerPage=3000"|jq -r ".[]|select(.card == $card_t)|select(.skill == \"$skill\")"`
+ card=$card_t
+ cp=`echo $(($RANDOM % 1000 + 400))`
+ st=3d
+
+ if [ -z "$card_check" ];then
+ echo "[new]"
+ echo "id : $card_t"
+ echo "cp : $cp"
+ echo "status : $st"
+ echo "skill : $skill"
+ tmp=`curl -X POST -H "Content-Type: application/json" -d "{\"owner\":$uid,\"card\":$card,\"status\":\"$st\",\"cp\":$cp,\"password\":\"$pass\",\"skill\":\"$skill\"}" -sL $url/cards`
+ fi
+ fi
+
+ exit
+}
+
+
+function l_cards() {
+ tmp=`curl -X PATCH -H "Content-Type: application/json" -d "{\"aiten\":$old_aiten,\"token\":\"$token\"}" -s $url/users/$uid`
+ data_card=`curl -sL "$url/users/$old_id/card?itemsPerPage=2000"`
+ tmp=`curl -X PATCH -H "Content-Type: application/json" -d "{\"delete\":true,\"token\":\"$token\"}" -s $url/users/$old_id`
+ nn=`echo $data_card|jq length`
+ nn=$((nn - 1))
+ for ((ii=0;ii<=$nn;ii++))
+ do
+ card=`echo $data_card|jq -r ".[$ii].card"`
+ s=`echo $data_card|jq -r ".[$ii].status"`
+ cp=`echo $data_card|jq -r ".[$ii].cp"`
+ skill=`echo $data_card|jq -r ".[$ii].skill"`
+ tmp=`curl -X POST -H "Content-Type: application/json" -d "{\"owner\":$uid,\"card\":$card,\"status\":\"$s\",\"cp\":$cp,\"password\":\"$pass\",\"skill\":\"$skill\"}" -sL $url/cards`
+ done
+}
+
+url=https://api.syui.ai
+cfg=$HOME/.config/atr/scpt/card_config.json
+if [ -f $cfg ];then
+ raid_run=`cat $cfg|jq -r .raid_run`
+ raid_boss_admin=`cat $cfg|jq -r .raid_admin`
+ boss_user_time=`cat $cfg|jq -r .raid_time | cut -d . -f 1`
+ boss_user=`echo $raid_boss_admin | cut -d . -f 1`
+ raid_boss_id=`curl -sL "$url/users?itemsPerPage=2000"|jq ".[]|select(.username == \"$boss_user\")"|jq -r .id`
+ raid_sp_card=`cat $cfg|jq -r .raid_card`
+fi
+
+f_raid=$HOME/.config/atr/txt/card_raid.txt
+raid_cp=`cat $f_raid`
+d=`date +"%Y%m%d"`
+nd=`date +"%Y%m%d" -d '1 day'`
+username=`echo $1|cut -d . -f 1`
+handle=$1
+url_user_all="$url/users?itemsPerPage=2000"
+f=$HOME/.config/atr/scpt/t.webp
+pass=`cat $HOME/.config/atr/api_card.json|jq -r .password`
+token=`cat $HOME/.config/atr/api_card.json|jq -r .token`
+if [ -z "$1" ];then
+ exit
+fi
+data_tmp=`curl -sL $url_user_all`
+data=`echo "$data_tmp"|jq ".[]|select(.username == \"$username\")"`
+data_did_check=`echo $data|jq -r .did`
+data_did=`echo "$data_tmp"|jq ".[]|select(.did == \"$2\")"`
+data_did_check_b=`echo $data_did|jq -r .did`
+raid_last=$1
+uid=`echo $data|jq -r ".id"|tail -n 1`
+
+# user create (did)
+if [ -n "$data" ] && [ -z "$data_did" ];then
+ username=`echo $handle|tr '.' '-'`
+ data=`curl -X POST -H "Content-Type: application/json" -d "{\"username\":\"$username\",\"password\":\"$pass\",\"did\":\"$2\",\"handle\": true}" -s "$url/users"`
+ handle_change=true
+ if [ -n "$data_did" ];then
+ uid=`echo $data|jq -r ".id"|tail -n 1`
+ l_cards
+ fi
+fi
+next=`echo $data|jq -r .next`
+fav=`echo $data|jq -r .fav`
+aiten=`echo $data|jq -r .aiten`
+ten_su=`echo $data|jq -r .ten_su`
+if [ "$next" = "null" ];then
+ echo null error
+ exit
+fi
+
+## user create api2(did)
+#if [ -n "$data" ] && [ -z "$data_did" ];then
+# data=`curl -X PATCH -H "Content-Type: application/json" -d "{\"did\":\"$did\",\"token\":\"$token\",\"room\":0}" -s $url/users/$uid`
+#fi
+#next=`echo $data|jq -r .next`
+#fav=`echo $data|jq -r .fav`
+#aiten=`echo $data|jq -r .aiten`
+#ten_su=`echo $data|jq -r .ten_su`
+#if [ "$next" = "null" ];then
+# echo null error
+# exit
+#fi
+
+# user create
+if [ -z "$data" ];then
+ if [ -n "$data_did" ];then
+ old_user=`echo $data_did|jq -r .username`
+ old_id=`echo $data_did|jq -r .id`
+ old_aiten=`echo $data_did|jq -r .aiten`
+ echo https://card.syui.ai/$old_user
+ fi
+ data=`curl -X POST -H "Content-Type: application/json" -d "{\"username\":\"$username\",\"password\":\"$pass\",\"did\":\"$2\"}" -s "$url/users"`
+ echo $data|jq -r .username
+ if [ -n "$data_did" ];then
+ uid=`echo $data|jq -r ".id"|tail -n 1`
+ l_cards
+ fi
+fi
+next=`echo $data|jq -r .next`
+if [ "$next" = "null" ];then
+ echo null error
+ exit
+fi
+
+uid=`echo $data|jq -r ".id"`
+delete=`echo $data|jq -r ".delete"`
+did=`echo $data|jq -r ".did"`
+handle_change=`echo $data|jq -r ".handle"`
+
+# check did
+if [ "$data_did_check" != "$2" ] && [ "$data_did_check_b" = "$2" ] && [ "$handle_change" = "true" ];then
+ data=$data_did
+ new_handle=`echo $data|jq -r .username`
+ echo "handle : $username -> $new_handle"
+ username=$new_handle
+fi
+
+if [ "$delete" = "true" ];then
+ echo change account $did
+ did_all=`curl -sL "$url/users?itemsPerPage=3000"|jq ".[]|select(.did == \"$did\")"|jq -r .id`
+ did_n=`echo $did_all|wc -l`
+ for ((i=1;i<=$did_n;i++))
+ do
+ tid=`echo "$did_all"|awk "NR==$i"`
+ if [ "$uid" = "$tid" ];then
+ ds=false
+ else
+ ds=true
+ fi
+ curl -X PATCH -H "Content-Type: application/json" -d "{\"delete\":$ds,\"token\":\"$token\"}" -s $url/users/$tid
+ done
+ exit
+fi
+
+# battle
+updated_at=`echo $data|jq -r .updated_at`
+updated_at_m=`date -d "$updated_at" +"%H%M"`
+updated_at_n=`date --iso-8601=seconds`
+updated_at=`date -d "$updated_at" +"%Y%m%d"`
+raid_at=`echo $data|jq -r .raid_at`
+raid_at=`date -d "$raid_at" +"%Y%m%d"`
+raid_at_n=`date --iso-8601=seconds`
+server_at=`echo $data|jq -r .server_at`
+server_at=`date -d "$server_at" +"%Y%m%d"`
+server_at_n=`date --iso-8601=seconds`
+day_m=`date +"%H%M"`
+day_mm=`date +"%H%M" -d "-1 min"`
+day_mmm=`date +"%H%M" -d "-2 min"`
+f_raid=$HOME/.config/atr/txt/card_raid.txt
+
+# luck
+luck=`echo $data|jq -r .luck`
+luck_at=`echo $data|jq -r .luck_at`
+luck_at=`date -d "$luck_at" +"%Y%m%d"`
+fav_cid=`echo $data|jq -r .fav`
+
+# member
+member=`echo $data|jq -r .member`
+manga=`echo $data|jq -r .manga`
+book=`echo $data|jq -r .book`
+badge=`echo $data|jq -r .badge`
+
+if [ "$3" = "-raidstart" ] || [ "$3" = "raidstart" ] || [ "$3" = "raid-start" ];then
+ if [ "$raid_boss_admin" = "$1" ] || [ "syui.ai" = "$1" ];then
+ rm $f_raid
+ echo "admin : $raid_boss_admin"
+ echo "raid start!"
+ cat $cfg|jq ".|= .+{\"raid_run\":true}" >! $cfg.b
+ mv $cfg.b $cfg
+ else
+ echo no raid admin
+ fi
+ exit
+fi
+
+if [ "$3" = "-raidstop" ] || [ "$3" = "raidstop" ] || [ "$3" = "raid-stop" ];then
+ if [ "syui.ai" = "$1" ];then
+ echo 0 >! $f_raid
+ echo "admin : $raid_boss_admin"
+ echo "raid stop!"
+ else
+ echo no raid admin
+ fi
+ exit
+fi
+
+if [ "ap" = "`echo $3|cut -d = -f 1`" ];then
+ echo activitypub mode
+ b=`echo $3|cut -d = -f 2`
+ case $b in
+ true|false)
+ data=`curl -X PATCH -H "Content-Type: application/json" -d "{\"token\":\"$token\",\"mastodon\":$b}" -sL "$url/users/$uid"`
+ echo ok
+ echo $data|jq -r .mastodon
+ exit
+ ;;
+ *)
+ echo true,false
+ exit
+ ;;
+ esac
+fi
+
+if [ "atp" = "`echo $3|cut -d = -f 1`" ];then
+ echo atproto mode
+ b=`echo $3|cut -d = -f 2`
+ case $b in
+ true|false)
+ data=`curl -X PATCH -H "Content-Type: application/json" -d "{\"token\":\"$token\",\"bsky\":$b}" -sL "$url/users/$uid"`
+ echo ok
+ echo $data|jq -r .bsky
+ exit
+ ;;
+ *)
+ echo true,false
+ exit
+ ;;
+ esac
+fi
+
+if [ "server_battle_mode" = "$3" ];then
+ f_server_prezent=$HOME/.config/atr/txt/card_server_prezent.txt
+ if [ "syui.ai" != "$1" ];then
+ no admin
+ exit
+ fi
+ echo "aiten reduction mode : "
+ if [ -f $f_server_prezent ];then
+ echo "[disable]"
+ rm $f_server_prezent
+ else
+ echo "[enable]"
+ touch $f_server_prezent
+ fi
+ exit
+fi
+
+if [ "admin" = "`echo $3|cut -d = -f 1`" ];then
+ if [ "`echo $3|cut -d = -f 1`" = "ai" ] && [ "syui.ai" = "$1" ];then
+ touch $cfg_ai
+ registration boss
+ exit
+ fi
+
+ if [ "syui.ai" = "$1" ] || [ "ai" = "$1" ];then
+ echo "
+ {
+ \"raid_admin\":\"`echo $3|cut -d = -f 2`\",
+ \"raid_time\": null,
+ \"raid_card\": 23
+ }" | jq . >! $cfg
+ cat $cfg
+ echo please : /card raid-start
+ else
+ echo no admin
+ fi
+ exit
+fi
+
+if [ "room" = "`echo $3|cut -d = -f 1`" ];then
+ room=`echo $3|cut -d = -f 2`
+ data_uu=`curl -sL "$url/users/$uid/card?itemsPerPage=3000"`
+ card_check=`echo $data_uu|jq -r ".[]|select(.card >= 1 and .card <= 14).card"|sort|uniq|wc -l`
+
+ if [ $room -ge 123 ] && [ $room -le 123 ];then
+ if [ $card_check -ne 14 ];then
+ echo "card 1-14 key is required"
+ exit
+ fi
+ fi
+
+ if { [ $room -ge 123 ] && [ $room -le 123 ] && [ $card_check -eq 14 ] } || [ $room -eq 0 ] || { [ $room -ge 1 ] && [ $room -le 3 ] } || [ $room -eq 124 ]; then
+ if [ $room -ge 123 ] && [ $room -le 123 ];then
+ echo "welcome to secret room !"
+ else
+ echo "welcome to room"
+ fi
+
+ tmp=`curl -sL -X PATCH -H "Content-Type: application/json" -d "{\"room\": $room,\"token\":\"$token\"}" -s $url/users/$uid`
+
+ if [ $room -ge 123 ] && [ $room -le 123 ];then
+ card=65
+ cp=0
+ s=super
+ card_check=`echo $data_uu|jq -r ".[]|select(.card == $card)"`
+ if [ -n "$card_check" ];then
+ echo "you already have"
+ else
+ tmp=`curl -X POST -H "Content-Type: application/json" -d "{\"owner\":$uid,\"card\":$card,\"status\":\"$s\",\"cp\":$cp,\"password\":\"$pass\",\"skill\":\"$skill\"}" -s $url/cards`
+ fi
+ fi
+
+ exit
+
+ fi
+fi
+
+if [ "$3" = "-raid" ] || [ "$3" = "-r" ] || [ "$3" = "r" ];then
+ battle_raid $1 $2
+fi
+
+if [ "$3" = "-server" ] || [ "$3" = "-s" ] || [ "$3" = "s" ] || [ "$3" = "server" ];then
+ battle_server $1 $2
+fi
+
+if [ "$3" = "-u" ] || [ "$3" = "u" ];then
+ user_data
+ echo "---"
+ user_card $uid
+ exit
+fi
+
+if [[ "$3" =~ ^[0-9]+$ ]];then
+ user_card $3
+ exit
+fi
+
+if [ "$3" = "-a" ] || [ "$3" = "a" ];then
+ ascii_moji_a
+ exit
+fi
+
+if [ "$3" = "-aa" ] || [ "$3" = "aa" ];then
+ ascii_moji_b
+ exit
+fi
+
+if [ "$3" = "yui" ] || [ "$3" = "-yui" ];then
+ cp=$(($RANDOM % 2000 + 500))
+ yui_card 47 $cp
+ exit
+fi
+
+if [ "$3" = "kyoku" ] || [ "$3" = "-kyoku" ];then
+ cp=$(($RANDOM % 4000 + 1500))
+ card_add_kyoku $cp
+ exit
+fi
+
+if [ "$3" = "chou" ] || [ "$3" = "-chou" ];then
+ cp=$(($RANDOM % 1500 + 500))
+ yui_card 60 $cp
+ exit
+fi
+
+if [ "$3" = "study" ] || [ "$3" = "-study" ];then
+ cp=0
+ if [ `echo $(($RANDOM % 2))` -eq 1 ];then
+ study_card 61 $cp
+ else
+ study_card 62 $cp
+ fi
+ exit
+fi
+
+if [ "$3" = "-egg" ] || [ "$3" = "egg" ];then
+ egg_card
+ exit
+fi
+
+if [ "$3" = "moji" ] || [ "$3" = "-moji" ];then
+ echo "not open"
+ exit
+ card=27
+ plus=$(($RANDOM % 1000 + 400))
+ cp=$((cp + plus))
+
+ skill=$(($RANDOM % 2))
+ if [ $skill -eq 1 ];then
+ skill=critical
+ plus=$(($RANDOM % 400))
+ cp=$((cp + plus))
+ else
+ skill=normal
+ fi
+
+ skill=$(($RANDOM % 10))
+ if [ $skill -eq 1 ];then
+ skill=post
+ plus=$(($RANDOM % 400))
+ cp=$((cp + plus))
+ else
+ skill=normal
+ fi
+
+ s=super
+ moji_mode_card $card $cp $skill $s
+
+ exit
+fi
+
+if [ "$3" = "bingo" ] || [ "$3" = "-bingo" ];then
+ card=35
+ bingo=`curl -sL https://bingo.b35.jp/bonus.csv`
+ bingo_data=`echo $bingo|grep $1|tail -n 1`
+ bingo_d=`echo $bingo_data|cut -d , -f 1`
+ bingo_w=`echo $bingo_data|cut -d , -f 2`
+
+ if [ -z "$bingo_data" ] || [ -z "$bingo_d" ];then
+ echo no bingo
+ exit
+ fi
+ if [ $bingo_w -eq 2 ];then
+ s=super
+ else
+ s=normal
+ fi
+ if [ "$bingo_d" = "20230630" ] || [ "$bingo_d" = "20230629" ];then
+ cp=0
+ skill=normal
+ moji_mode_card $card $cp $skill $s
+ exit
+ else
+ echo no bingo day
+ exit
+ fi
+fi
+
+if [ "$3" = "wa" ] || [ "$3" = "-wa" ];then
+ echo "not open"
+ exit
+ plus=$(($RANDOM % 800 + 400))
+ cp=$((cp + plus))
+
+ skill=$(($RANDOM % 2))
+ if [ $skill -eq 1 ];then
+ skill=critical
+ plus=$(($RANDOM % 500))
+ cp=$((cp + plus))
+ else
+ skill=normal
+ fi
+
+ skill=$(($RANDOM % 10))
+ if [ $skill -eq 1 ];then
+ skill=post
+ plus=$(($RANDOM % 500))
+ cp=$((cp + plus))
+ else
+ skill=normal
+ fi
+
+ s=super
+ moji_mode_card 28 $cp $skill $s
+
+ exit
+fi
+
+if [ "$3" = "zen" ] || [ "$3" = "-zen" ];then
+ yui_card 20 123
+ exit
+fi
+
+if [ "$3" = "field" ] || [ "$3" = "-field" ];then
+ field_card $(($RANDOM % 9 + 1))
+ exit
+fi
+
+if [ "$3" = "g15" ] || [ "$3" = "-g15" ];then
+ cp=0
+ st=super
+ skill=book
+ moji_mode_card 71 $cp $skill $st
+ exit
+fi
+
+if [ "$3" = "-b" ] || [ "$3" = "b" ];then
+ if [ $updated_at -ge $d ];then
+ if [ "$updated_at" = "$d" ] && { [ "$updated_at_m" = "$day_m" ] || [ "$updated_at_m" = "$day_mm" ] || [ "$updated_at_m" = "$day_mmm" ] };then
+ echo "limit battle"
+ exit
+ else
+ echo "limit battle"
+ fi
+ else
+ id_all=`curl -sL "https://api.syui.ai/users?itemsPerPage=2000"|jq ".[]|.id"`
+ id_n=`echo "$id_all"|wc -l`
+ id_nr=$(($RANDOM % $id_n))
+ r=`echo "$id_all"| awk "NR==$id_nr"`
+
+ if [ "$id_all" = "null" ];then
+ r=2
+ fi
+
+ if [ 0 -eq $id_n ] || [ 0 -eq $r ];then
+ r=2
+ fi
+ if [ -z "$id_n" ] || [ -z "$r" ];then
+ r=2
+ fi
+
+ data_uu=`curl -sL "$url/users/$uid/card?itemsPerPage=2000"`
+ data_u=`curl -sL "$url/users/$r/card?itemsPerPage=2000"`
+ # 革命前
+ tt=`echo $data_uu|jq ".[].cp"|sort -n -r`
+ ttt=`echo $data_u|jq ".[].cp"|sort -n -r`
+ # 革命後
+ #tt=`echo $data_uu|jq ".[].cp"|sort -n`
+ #ttt=`echo $data_u|jq ".[].cp"|sort -n`
+
+ #echo $data_u|jq ".[].cp"
+ nl=`echo $data_uu|jq length`
+ if [ $nl -ge 3 ];then
+ rs=$(($RANDOM % 3 + 1))
+ else
+ rs=$(($RANDOM % $nl + 1))
+ fi
+
+ #echo $data_u|jq ".[].cp"
+ nll=`echo $data_u|jq length`
+ rss=$(($RANDOM % $nll))
+ if [ $nll -ge 3 ];then
+ rss=$(($RANDOM % 3 + 1))
+ else
+ rss=$(($RANDOM % $nll + 1))
+ fi
+ cp_i=`echo $tt |awk "NR==$rs"`
+ cp_b=`echo $ttt |awk "NR==$rss"`
+ if [ -z "$cp_i" ];then
+ echo "null error"
+ exit
+ fi
+ if [ -z "$cp_b" ];then
+ echo "null error"
+ exit
+ fi
+
+ if [ -n "$fav_cid" ] && [ $fav_cid -ne 0 ];then
+ fav_card=`echo $data_uu|jq -r ".[]|select(.id == $fav_cid)"`
+ fav_card_id=`echo $fav_card|jq -r ".id"`
+ fav_card_cp=`echo $fav_card|jq -r ".cp"`
+ fav_card_name=`echo $fav_card|jq -r ".card"`
+ fav_card_status=`echo $fav_card|jq -r ".status"`
+ fav_card_skill=`echo $fav_card|jq -r ".skill"`
+ fav_card_ran=$(($RANDOM % 4))
+ if [ $fav_card_ran -eq 0 ];then
+ cp_i=$fav_card_cp
+ fi
+ fi
+
+ echo $tt | sed -n 1,3p
+ if [ -n "$fav_cid" ] && [ $fav_cid -ne 0 ];then
+ echo "$fav_card_cp ✧"
+ fi
+ echo "---"
+ echo id : $r
+ echo $ttt | sed -n 1,3p
+ echo "---"
+ echo $cp_i vs $cp_b
+
+ if [ -n "$fav_card_id" ] && [ $fav_card_ran -eq 0 ];then
+ $fav_com $username $did b $cp_b
+ exit
+ fi
+
+ # 革命前
+ if [ $cp_i -gt $cp_b ];then
+ # 革命後
+ #if [ $cp_b -gt $cp_i ];then
+ echo "win!"
+ else
+ echo loss
+ fi
+
+ # 革命前
+ if [ $cp_i -gt $cp_b ];then
+ # 革命後
+ #if [ $cp_b -gt $cp_i ];then
+ tmp=`curl -X POST -H "Content-Type: application/json" -d "{\"owner\":$uid,\"password\":\"$pass\"}" -s $url/cards`
+ card=`echo $tmp|jq -r .card`
+ card_url=`echo $tmp|jq -r .url`
+ cp=`echo $tmp|jq -r .cp`
+ if [ -z "$card" ];then
+ tmp=`curl -X POST -H "Content-Type: application/json" -d "{\"owner\":$uid,\"password\":\"$pass\"}" -s $url/cards`
+ card=`echo $tmp|jq -r .card`
+ card_url=`echo $tmp|jq -r .url`
+ cp=`echo $tmp|jq -r .cp`
+ fi
+ echo "[card]"
+ echo id : $card
+ echo cp : $cp
+ t=`echo $tmp|jq -r .card`
+
+ # ai vs i
+ if [ $r -eq $uid ];then
+ echo "$username vs $username"
+ card=`echo $(($RANDOM % 15))`
+ cp=`echo $(($RANDOM % 300 + 200))`
+ s=$(($RANDOM % 2))
+ if [ $s -eq 1 ];then
+ s=super
+ plus=$(($RANDOM % 500 + 500))
+ cp=$((cp + plus))
+ else
+ s=normal
+ fi
+ if [ $card -eq 13 ];then
+ plus=$(($RANDOM % 1200 + 800))
+ cp=$((cp + plus))
+ fi
+ sleep 5
+ tmp=`curl -X POST -H "Content-Type: application/json" -d "{\"owner\":$uid,\"card\":$card,\"status\":\"$s\",\"cp\":$cp,\"password\":\"$pass\"}" -s $url/cards`
+ card=`echo $tmp|jq -r .card`
+ card_url=`echo $tmp|jq -r .url`
+ cp=`echo $tmp|jq -r .cp`
+ echo "[card]"
+ echo "id : ${card}"
+ echo "cp : ${cp}"
+ fi
+ fi
+
+ tmp=`curl -X PATCH -H "Content-Type: application/json" -d "{\"updated_at\":\"$updated_at_n\",\"token\":\"$token\"}" -s $url/users/$uid`
+
+ fi
+ exit
+fi
+
+if [ "$3" = "ai" ] || [ "$3" = "-ai" ];then
+ data=`echo "$data_tmp"|jq ".[]|select(.username == \"ai\")"`
+ if [ -z "$data" ];then
+ exit
+ fi
+
+ next=`echo $data|jq -r .next`
+ if [ "$next" = "null" ];then
+ echo "null error"
+ exit
+ fi
+ d=`date +"%Y%m%d"`
+ if [ $next -gt $d ];then
+ exit
+ fi
+ tmp=`curl -X POST -H "Content-Type: application/json" -d "{\"owner\":2,\"password\":\"$pass\"}" -s $url/cards`
+ ## ai card plus
+ #tmp=`curl -X POST -H "Content-Type: application/json" -d "{\"owner\":$uid,\"password\":\"$pass\"}" -s $url/cards`
+ card=`echo $(($RANDOM % 15))`
+ cp=`echo $(($RANDOM % 300 + 200))`
+ s=$(($RANDOM % 2))
+ if [ $s -eq 1 ];then
+ s=super
+ plus=$(($RANDOM % 200 + 500))
+ cp=$((cp + plus))
+ else
+ s=normal
+ fi
+
+ skill=$(($RANDOM % 2))
+ if [ $skill -eq 1 ];then
+ skill=critical
+ plus=$(($RANDOM % 400))
+ cp=$((cp + plus))
+ else
+ skill=normal
+ fi
+
+ skill=$(($RANDOM % 10))
+ if [ $skill -eq 1 ];then
+ skill=post
+ plus=$(($RANDOM % 400))
+ cp=$((cp + plus))
+ else
+ skill=normal
+ fi
+
+ if [ $card -eq 13 ];then
+ plus=$(($RANDOM % 500 + 800))
+ cp=$((cp + plus))
+ fi
+ sleep 5
+ tmp=`curl -X POST -H "Content-Type: application/json" -d "{\"owner\":$uid,\"card\":$card,\"status\":\"$s\",\"cp\":$cp,\"password\":\"$pass\",\"skill\":\"$skill\"}" -s $url/cards`
+
+ ## ai card plus
+ ascii_moji_b
+ echo "\n[card]"
+ echo "id : $card"
+ echo "cp : $cp"
+ if [ "$skill" = "critical" ] || [ "$skill" = "post" ] || [ "$skill" = "luck" ];then
+ echo "skill : $skill"
+ fi
+
+ card=`echo $tmp|jq -r .card`
+ card_url=`echo $tmp|jq -r .url`
+ cp=`echo $tmp|jq -r .cp`
+ t=`echo $tmp|jq -r .card`
+ tmp=`curl -X PATCH -H "Content-Type: application/json" -d "{\"next\":\"$nd\",\"token\":\"$token\"}" -s $url/users/2`
+ exit
+fi
+
+if [ $next -gt $d ];then
+ if [ "$updated_at" = "$d" ] && { [ "$updated_at_m" = "$day_m" ] || [ "$updated_at_m" = "$day_mm" ] || [ "$updated_at_m" = "$day_mmm" ] };then
+ echo limit 1 day
+ exit
+ else
+ echo limit 1 day
+ echo "next : $nd"
+ exit
+ fi
+fi
+
+tmp=`curl -X POST -H "Content-Type: application/json" -d "{\"owner\":$uid,\"password\":\"$pass\"}" -s $url/cards`
+card=`echo $tmp|jq -r .card`
+card_url=`echo $tmp|jq -r .url`
+cp=`echo $tmp|jq -r .cp`
+skill=`echo $tmp|jq -r .skill`
+if [ -z "$card" ];then
+ tmp=`curl -X POST -H "Content-Type: application/json" -d "{\"owner\":$uid,\"password\":\"$pass\"}" -s $url/cards`
+ card=`echo $tmp|jq -r .card`
+ card_url=`echo $tmp|jq -r .url`
+ cp=`echo $tmp|jq -r .cp`
+ skill=`echo $tmp|jq -r .skill`
+fi
+
+echo "[card]"
+echo id : $card
+echo cp : $cp
+if [ "$skill" != "normal" ];then
+ echo skill : $skill
+fi
+t=`echo $tmp|jq -r .card`
+tmp=`curl -X PATCH -H "Content-Type: application/json" -d "{\"next\":\"$nd\",\"token\":\"$token\",\"room\":0}" -s $url/users/$uid`
+
+## new card
+card=86
+skill=ten
+if [ $(($RANDOM % 130)) -eq 0 ];then
+ cp=$(($RANDOM % 4400 + 1000))
+ card_add_origin $card $cp $skill
+ #ここにmodelをtrueする処理を入れなければいけない
+ exit
+fi
+
+card=89
+skill=ten
+if [ $(($RANDOM % 120)) -eq 0 ];then
+ cp=$(($RANDOM % 4400 + 1000))
+ card_add_origin $card $cp $skill
+ #ここにmodelをtrueする処理を入れなければいけない
+ exit
+fi
+
+s=`echo $(($RANDOM % 3))`
+luck_at_d=`date +"%Y%m%d"`
+# luck day
+if [ $luck -eq 7 ] && [ "$luck_at" = "$luck_at_d" ] && [ $s -eq 1 ];then
+ skill=luck
+ card=`echo $(($RANDOM % 15))`
+ cp=`echo $(($RANDOM % 300 + 200))`
+ s=$(($RANDOM % 2))
+ if [ $s -eq 1 ];then
+ s=super
+ plus=$(($RANDOM % 500 + 500))
+ cp=$((cp + plus))
+ else
+ s=normal
+ fi
+ if [ $card -eq 13 ];then
+ plus=$(($RANDOM % 1200 + 800))
+ cp=$((cp + plus))
+ fi
+ cp=$((cp + 100))
+ sleep 2
+ tmp=`curl -X POST -H "Content-Type: application/json" -d "{\"owner\":$uid,\"card\":$card,\"status\":\"$s\",\"cp\":$cp,\"password\":\"$pass\", \"skill\": \"$skill\"}" -s $url/cards`
+ card=`echo $tmp|jq -r .card`
+ card_url=`echo $tmp|jq -r .url`
+ cp=`echo $tmp|jq -r .cp`
+ echo "[card]"
+ echo "id : ${card}"
+ echo "cp : ${cp}"
+ echo "skill : ${skill}"
+fi
diff --git a/scpt/api_card_raid_win.zsh b/scpt/api_card_raid_win.zsh
new file mode 100755
index 0000000..74fa2e0
--- /dev/null
+++ b/scpt/api_card_raid_win.zsh
@@ -0,0 +1,46 @@
+#!/bin/zsh
+
+url=https://api.syui.ai
+token=`cat $HOME/.config/atr/api_card.json|jq -r .token`
+pass=`cat $HOME/.config/atr/api_card.json|jq -r .password`
+f_reid_user=$HOME/.config/atr/txt/card_reid_user.txt
+n=`cat $f_reid_user|wc -l`
+
+for ((i=1;i<=$n;i++))
+do
+ uid=`cat $f_reid_user|awk "NR==$i"`
+ r=`echo $(($RANDOM % 10))`
+ if [ $r -eq 1 ];then
+ card=`echo $(($RANDOM % 15))`
+ cp=`echo $(($RANDOM % 300 + 50))`
+ else
+ card=0
+ cp=`echo $(($RANDOM % 100 + 1))`
+ fi
+
+ ss=$(($RANDOM % 10))
+ if [ 13 -ne $card ] && [ $ss -eq 1 ];then
+ card=13
+ fi
+
+ s=$(($RANDOM % 2))
+ if [ $s -eq 1 ];then
+ s=super
+ plus=$(($RANDOM % 500 + 200))
+ cp=$((cp + plus))
+ else
+ s=normal
+ fi
+ if [ $card -eq 13 ];then
+ plus=$(($RANDOM % 1000 + 300))
+ cp=$((cp + plus))
+ fi
+ tmp=`curl -X POST -H "Content-Type: application/json" -d "{\"owner\":$uid,\"card\":$card,\"status\":\"$s\",\"cp\":$cp,\"password\":\"$pass\"}" -s $url/cards`
+ echo $tmp
+
+ card=`echo $tmp|jq -r .card`
+ cp=`echo $tmp|jq -r .cp`
+ echo "[card]"
+ echo "id : ${card}"
+ echo "cp : ${cp}"
+done
diff --git a/scpt/api_chara.zsh b/scpt/api_chara.zsh
new file mode 100755
index 0000000..891eaa3
--- /dev/null
+++ b/scpt/api_chara.zsh
@@ -0,0 +1,215 @@
+#!/bin/zsh
+
+case $OSTYPE in
+ darwin*)
+ alias date="/opt/homebrew/bin/gdate"
+ ;;
+esac
+
+if [ -z "$1" ] || [ -z "$2" ] || [ -z "$3" ] || [ -z "$4" ] || [ -z "$5" ];then
+ echo no option
+ echo "/chara start"
+ exit
+fi
+
+chara_qa="あなたはサッカーをしています。
+試合中、ふと目にするのは?
+
+1 : 開けた青空
+2 : 真っ白な柱
+3 : 風になびく芝生
+
+数字を入れて答えてね。
+/chara 数字"
+
+chara_qb="ここは研究室。
+実験のため道具を手に持っています。
+
+1 : 淡い液体が入ったガラス瓶
+2 : 清潔なシーツ
+3 : 観葉植物"
+
+chara_qc="宇宙に打ち上げられたロケットから地球を見ます。
+何が見えましたか?
+
+1 : 別の宇宙船
+2 : 飛行機
+3 : 大きな島"
+
+chara_ba="
+☑ 平和を願う
+☑ 協調性は高いが自己主張は弱い
+☑ 相談がうまい
+---"
+
+chara_bb="
+☑ 変化自在
+☑ 世間離れしており常識知らず
+☑ 真面目で芯が強い
+---"
+
+chara_bc="
+☑ 思慮深い
+☑ 一人の時間が好きで冷たく見える
+☑ 周りを観察している
+---"
+
+tmp=`curl -X PATCH -H "Content-Type: application/json" -d "{\"ten_post\": \"$ten_char\", \"ten_kai\":0,\"ten_su\":$first_ten,\"ten\": true,\"token\":\"$token\"}" -s $host/users/$uid`
+data_user_card=`curl -sL "$host/users/$uid/card?itemsPerPage=3000"`
+ten_data=`curl -sL "$host/users?itemsPerPage=3000"|jq ".|sort_by(.ten_su)|reverse|.[]|select(.ten_su != 0)"`
+data_user_card=`curl -sL "$host/users/$uid/card?itemsPerPage=3000"`
+
+atr=$HOME/.cargo/bin/atr
+host=https://api.syui.ai
+host_card=https://card.syui.ai/json/card.json
+#host_card_json=`curl -sL $host_card`
+
+ran=$(($RANDOM % 3))
+
+pass=`cat $HOME/.config/atr/api_card.json|jq -r .password`
+token=`cat $HOME/.config/atr/api_card.json|jq -r .token`
+
+handle=$1
+did=$2
+username=`echo $1|cut -d . -f 1`
+cid=$3
+uri=$4
+option=$5
+
+yui_did=did:plc:4hqjfn7m6n5hno3doamuhgef
+all_data=`curl -sL "$host/users?itemsPerPage=3000"`
+data=`echo $all_data|jq ".[]|select(.username == \"$username\")"`
+uid=`echo $data|jq -r .id`
+aiten=`echo $data|jq -r .aiten`
+ten_post=`echo $data|jq -r .ten_post`
+ten_su=`echo $data|jq -r .ten_su`
+ten_kai=`echo $data|jq -r .ten_kai`
+ten_delete=`echo $data|jq -r .ten_delete`
+ten_bool=`echo $data|jq -r .ten`
+day_at=`date +"%Y%m%d"`
+nd=`date +"%Y%m%d" -d '1 days ago'`
+ten_at_n=`date --iso-8601=seconds`
+d=`date +"%Y-%m-%d"`
+ten_at=`echo $data|jq -r .ten_at`
+ten_at=`date -d "$ten_at" +"%Y-%m-%d"`
+data_card=`curl -sL "$host/users/$uid/card?itemsPerPage=3000"`
+
+# uri_post=`echo '{"uri":"at://did:plc:uqzpqmrjnptsxezjx4xuh2mn/app.bsky.feed.post/3k3zr5b336o2u","cid":"bafyreierpw23cxvx4e3cjzd3h6r4crz646zb2ana6cmmsxn4z5rpupl35e"}'|jq -r .uri|cut -d / -f 5`
+# https://bsky.app/profile/$did/post/$uri_post
+tmp_atr='{"uri":"at://did:plc:uqzpqmrjnptsxezjx4xuh2mn/app.bsky.feed.post/3k3zr5b336o2u","cid":"bafyreierpw23cxvx4e3cjzd3h6r4crz646zb2ana6cmmsxn4z5rpupl35e"}'
+
+function chara_check(){
+ #card_check=`echo $data_card|jq -r ".[]|select(.card == 48 or .card == 49 or .card == 50 or .card == 51 or .card == 52 or .card == 53)"`
+ #card_check=`echo $data_card|jq -r ".[]|select(.card == 54 or .card == 55 or .card == 56)"`
+ card_check=`echo $data_card|jq -r ".[]|select(.card == 58 or .card == 53 or .card == 59)"`
+ if [ -n "$card_check" ];then
+ echo you already have chara-card
+ exit
+ fi
+}
+
+function chara_start() {
+ tmp=`curl -X PATCH -H "Content-Type: application/json" -d "{\"ten_su\":0, \"ten_kai\":1, \"token\":\"$token\"}" -s $host/users/$uid`
+ echo "$chara_qa"
+ exit
+}
+
+function chara_post(){
+ case $1 in
+ ponta)
+ card=53
+ text=$chara_ba
+ title="[ポンタ]"
+ desc="緑色"
+ ;;
+ octo)
+ card=58
+ text=$chara_bb
+ title="[オクトカット]"
+ desc="白色"
+ ;;
+ zeusu)
+ card=59
+ text=$chara_bc
+ title="[ゼウス]"
+ desc="青色"
+ ;;
+ esac
+
+ host_card=https://card.syui.ai/json/card.json
+ host_card_json=`curl -sL $host_card`
+ j=`echo $host_card_json|jq ".[]|select(.id == $card)"`
+ img=`echo $j|jq -r .img`
+
+ cp=$(($RANDOM % 1230))
+ s=super
+ skill=chara
+ link="https://card.syui.ai/$username"
+
+ card_check=`echo $data_card|jq -r ".[]|select(.card == $card)"`
+ if [ -z "$card_check" ];then
+ tmp=`curl -X POST -H "Content-Type: application/json" -d "{\"owner\":$uid,\"card\":$card,\"status\":\"$s\",\"cp\":$cp,\"password\":\"$pass\",\"skill\":\"$skill\"}" -s $host/cards`
+ card=`echo $tmp|jq -r .card`
+ cp=`echo $tmp|jq -r .cp`
+ fi
+ tmp_atr=`$atr reply-og "$text" --cid $cid --uri $uri --img $img --title "$title" --description "$desc" --link $link`
+ uri_post=`echo $tmp_atr|jq -r .uri|cut -d / -f 5`
+ post_url="https://bsky.app/profile/$yui_did/post/$uri_post"
+ ccid=`echo $tmp|jq -r .id`
+ tmp=`curl -sL -X PATCH -H "Content-Type: application/json" -d "{\"url\":\"$post_url\",\"token\":\"$token\"}" $host/cards/$ccid`
+ exit
+}
+
+function chara_plus() {
+ case $ten_kai in
+ 2)
+ chara_q=$chara_qb
+ ;;
+ 3)
+ chara_q=$chara_qc
+ ;;
+ #4)
+ # chara_q=$chara_qd
+ # ;;
+ esac
+ echo "$chara_q"
+
+ case $1 in
+ 1|2|3)
+ tmp_su=$1
+ ten_su=$((ten_su + $tmp_su))
+ ;;
+ esac
+ tmp=`curl -X PATCH -H "Content-Type: application/json" -d "{\"ten_su\":$ten_su, \"ten_kai\":$ten_kai, \"token\":\"$token\"}" -s $host/users/$uid`
+
+ case $ten_kai in
+ 4)
+ if [ $ten_su -eq 9 ] || [ $ten_su -eq 8 ] || [ $ten_su -eq 7 ];then
+ chara=ponta
+ elif [ $ten_su -eq 6 ];then
+ chara=octo
+ else
+ chara=zeusu
+ fi
+ chara_post $chara
+ ;;
+ esac
+}
+
+chara_check
+
+case "$option" in
+ start)
+ chara_start
+ ;;
+ 1|2|3)
+ ten_kai=$((ten_kai + 1))
+ chara_plus $option
+ ;;
+ *)
+ echo "/chara start"
+ echo "/chara 1,2,3"
+ ;;
+esac
+
+exit
diff --git a/scpt/api_egg.zsh b/scpt/api_egg.zsh
new file mode 100755
index 0000000..2d68e83
--- /dev/null
+++ b/scpt/api_egg.zsh
@@ -0,0 +1,156 @@
+#!/bin/zsh
+
+case $OSTYPE in
+ darwin*)
+ alias date="/opt/homebrew/bin/gdate"
+ ;;
+esac
+
+atr=$HOME/.cargo/bin/atr
+host=https://api.syui.ai
+
+pass=`cat $HOME/.config/atr/api_card.json|jq -r .password`
+token=`cat $HOME/.config/atr/api_card.json|jq -r .token`
+
+egg_card=40
+
+handle=$1
+did=$2
+username=`echo $1|cut -d . -f 1`
+opt=$3
+
+if [ -z "$opt" ];then
+ echo no option
+ exit
+fi
+
+all_data=`curl -sL "$host/users?itemsPerPage=3000"`
+data=`echo $all_data|jq ".[]|select(.username == \"$username\")"`
+uid=`echo $data|jq -r .id`
+
+aiten=`echo $data|jq -r .aiten`
+fav=`echo $data|jq -r .fav`
+day_at=`date +"%Y%m%d"`
+nd=`date +"%Y%m%d" -d '1 days ago'`
+ten_at_n=`date --iso-8601=seconds`
+d=`date +"%Y%m%d"`
+limit_reset_at=`date --iso-8601=seconds -d '1 days ago'`
+data_user_card=`curl -sL "$host/users/$uid/card?itemsPerPage=3000"`
+
+opt_dec=`echo $opt|base64 -d`
+
+if [ "$did" = "$opt_dec" ];then
+ echo verify
+else
+ echo no verify
+ exit
+fi
+
+fav_card=`echo $data_user_card|jq -r ".[]|select(.card == $egg_card)"`
+cid=`echo $fav_card|jq -r .id`
+
+egg_at=`echo $data|jq -r .egg_at`
+egg_at=`date -d "$egg_at" +"%Y%m%d"`
+egg_at_n=`date --iso-8601=seconds`
+
+day_m=`date +"%H%M"`
+day_mm=`date +"%H%M" -d "-1 min"`
+day_mmm=`date +"%H%M" -d "-2 min"`
+
+if [ -z "$fav_card" ];then
+ echo "no egg"
+ if [ "$egg_at" = "$d" ];then
+ echo "limit egg"
+ exit
+ fi
+ card=39
+ data_uu=`curl -sL "$host/users/$uid/card?itemsPerPage=2000"`
+ card_check=`echo $data_uu|jq -r ".[]|select(.card == $card)|.cp"|head -n 1`
+ if [ -n "$card_check" ];then
+ cp=$card_check
+ cid=`echo $data_uu|jq -r ".[]|select(.card == $card)|.id"|head -n 1`
+ echo "you already have, dragon"
+ ran=`echo $(($RANDOM % 3))`
+ ran_a=`echo $(($RANDOM % 5 + 1))`
+ if [ $ran -eq 1 ];then
+ card_check=$((card_check * 3))
+ echo "🐉 ---> $cp +${ran_a}"
+ cp=$((cp + ran_a))
+ else
+ cp=$((cp + 1))
+ echo "$cp +1"
+ fi
+ tmp=`curl -sL -X PATCH -H "Content-Type: application/json" -d "{\"cp\":$cp,\"token\":\"$token\"}" $host/cards/$cid`
+ tmp=`curl -sL -X PATCH -H "Content-Type: application/json" -d "{\"egg_at\":\"$egg_at_n\", \"token\":\"$token\"}" -s $host/users/$uid`
+ exit
+ fi
+
+ card=42
+ cp=0
+ data_uu=`curl -sL "$host/users/$uid/card?itemsPerPage=2000"`
+ card_check=`echo $data_uu|jq -r ".[]|select(.card == $card)|.cp"|head -n 1`
+ if [ -n "$card_check" ];then
+ echo "you already have, nyan"
+ ran=`echo $(($RANDOM % 1000 + 1000))`
+ aiten_p=$((aiten + ran))
+ echo "🐈 ---> [aiten]${aiten} +${ran}"
+ tmp=`curl -sL -X PATCH -H "Content-Type: application/json" -d "{\"egg_at\":\"$egg_at_n\", \"aiten\":$aiten_p, \"token\":\"$token\"}" -s $host/users/$uid`
+ exit
+ fi
+
+ exit
+fi
+
+card_id=`echo $fav_card|jq -r ".id"`
+card_cp=`echo $fav_card|jq -r ".cp"`
+card_name=`echo $fav_card|jq -r ".card"`
+card_status=`echo $fav_card|jq -r ".status"`
+card_skill=`echo $fav_card|jq -r ".skill"`
+
+function fav_status() {
+ echo "\n[card] ${card_name}"
+ echo "---"
+ echo "cp : ${card_cp}"
+ echo "cid : ${cid}"
+ echo "skill : ${card_skill}"
+ echo "status : ${card_status}"
+}
+
+function fav_battle() {
+ cp_b=`echo $(($RANDOM % 14))`
+ if [ "$egg_at" = "$d" ];then
+ echo "limit egg"
+ exit
+ fi
+
+ cp_i=`echo $fav_card|jq -r ".cp"`
+ card_name=`echo $fav_card|jq -r ".card"`
+ card_status=`echo $fav_card|jq -r ".status"`
+ card_skill=`echo $fav_card|jq -r ".skill"`
+
+ if [ $cp_i -ge $cp_b ];then
+ card=39
+ skill=dragon
+ cp=`echo $(($RANDOM % 1000 + 1200))`
+ s=third
+ ran=`echo $(($RANDOM % 10))`
+ if [ $ran -eq 1 ];then
+ card=42
+ skill=nyan
+ cp=0
+ fi
+ body="...congratulations! your egg has evolved\negg ---> ${skill} !!"
+ tmp=`curl -sL -X PATCH -H "Content-Type: application/json" -d "{\"card\": $card,\"cp\":$cp,\"token\":\"$token\", \"status\": \"$s\",\"skill\": \"$skill\"}" $host/cards/$cid`
+ else
+ body="...no evolved"
+ fi
+ echo "\n${cp_i} vs $cp_b"
+ echo "----"
+ echo "${body}"
+ tmp=`curl -sL -X PATCH -H "Content-Type: application/json" -d "{\"egg_at\":\"$egg_at_n\",\"token\":\"$token\"}" -s $host/users/$uid`
+ exit
+}
+
+fav_battle
+
+exit
diff --git a/scpt/api_fav.zsh b/scpt/api_fav.zsh
new file mode 100755
index 0000000..b5006b4
--- /dev/null
+++ b/scpt/api_fav.zsh
@@ -0,0 +1,161 @@
+#!/bin/zsh
+
+case $OSTYPE in
+ darwin*)
+ alias date="/opt/homebrew/bin/gdate"
+ ;;
+esac
+
+atr=$HOME/.cargo/bin/atr
+host=https://api.syui.ai
+
+pass=`cat $HOME/.config/atr/api_card.json|jq -r .password`
+token=`cat $HOME/.config/atr/api_card.json|jq -r .token`
+
+handle=$1
+did=$2
+username=`echo $1|cut -d . -f 1`
+opt=$3
+
+if [ -z "$opt" ];then
+ echo no option
+ echo "---"
+ echo "CID = 1234567"
+ echo "@yui.syui.ai /fav 1234567"
+ echo "---"
+ echo "/fav status"
+ echo "/fav battle"
+ exit
+fi
+
+all_data=`curl -sL "$host/users?itemsPerPage=3000"`
+data=`echo $all_data|jq ".[]|select(.username == \"$username\")"`
+uid=`echo $data|jq -r .id`
+
+if [ $opt -eq 0 ];then
+ tmp=`curl -sL -X PATCH -H "Content-Type: application/json" -d "{\"fav\": $opt,\"token\":\"$token\"}" -s $host/users/$uid`
+ echo ok
+ exit
+fi
+
+aiten=`echo $data|jq -r .aiten`
+fav=`echo $data|jq -r .fav`
+day_at=`date +"%Y%m%d"`
+nd=`date +"%Y%m%d" -d '1 days ago'`
+ten_at_n=`date --iso-8601=seconds`
+d=`date +"%Y%m%d"`
+limit_reset_at=`date --iso-8601=seconds -d '1 days ago'`
+data_user_card=`curl -sL "$host/users/$uid/card?itemsPerPage=3000"`
+
+case "$opt" in
+ [bB]|-[bB]|[bB]attle|[sS]|-[sS]|[sS]tatus)
+ cid=`echo $data|jq -r .fav`
+ fav_card=`echo $data_user_card|jq -r ".[]|select(.id == $cid)"`
+ ;;
+ *)
+ opt=$((opt + 0))
+ cid=$opt
+ fav_card=`echo $data_user_card|jq -r ".[]|select(.id == $cid)"`
+ ;;
+esac
+
+updated_at=`echo $data|jq -r .updated_at`
+updated_at_m=`date -d "$updated_at" +"%H%M"`
+updated_at_n=`date --iso-8601=seconds`
+updated_at=`date -d "$updated_at" +"%Y%m%d"`
+raid_at=`echo $data|jq -r .raid_at`
+raid_at=`date -d "$raid_at" +"%Y%m%d"`
+raid_at_n=`date --iso-8601=seconds`
+day_m=`date +"%H%M"`
+day_mm=`date +"%H%M" -d "-1 min"`
+day_mmm=`date +"%H%M" -d "-2 min"`
+
+if [ -z "$fav_card" ];then
+ echo "no card id"
+ exit
+fi
+
+card_id=`echo $fav_card|jq -r ".id"`
+card_cp=`echo $fav_card|jq -r ".cp"`
+card_name=`echo $fav_card|jq -r ".card"`
+card_status=`echo $fav_card|jq -r ".status"`
+card_skill=`echo $fav_card|jq -r ".skill"`
+
+function fav_status() {
+ echo "\n[card] ${card_name}"
+ echo "---"
+ echo "cp : ${card_cp}"
+ echo "cid : ${cid}"
+ echo "skill : ${card_skill}"
+ echo "status : ${card_status}"
+}
+
+function fav_battle() {
+ if [ -n "$1" ];then
+ cp_b=$1
+ else
+ cp_b=$(($RANDOM % 1400))
+ fi
+
+ if [ $updated_at -ge $d ] || [ "$updated_at" = "$d" ];then
+ echo "limit battle"
+ exit
+ fi
+
+ cp_i=`echo $fav_card|jq -r ".cp"`
+ card_name=`echo $fav_card|jq -r ".card"`
+ card_status=`echo $fav_card|jq -r ".status"`
+ card_skill=`echo $fav_card|jq -r ".skill"`
+
+ if [ $cp_i -gt $cp_b ];then
+ if [ $cp_i -ge 9000 ];then
+ cp_plus=$(($RANDOM % 27 + 1))
+ elif [ $cp_i -ge 7000 ];then
+ cp_plus=$(($RANDOM % 47 + 1))
+ else
+ cp_plus=$(($RANDOM % 237 + 1))
+ fi
+ else
+ cp_plus=$(($RANDOM % 17 + 1))
+ fi
+ echo "\n✧${cp_i} vs $cp_b"
+ echo "----"
+ cp=$((cp_i + cp_plus))
+ body="level up!"
+ echo "${body} ✧${cp}(+${cp_plus})"
+ tmp=`curl -sL -X PATCH -H "Content-Type: application/json" -d "{\"cp\":$cp,\"token\":\"$token\"}" $host/cards/$cid`
+ tmp=`curl -sL -X PATCH -H "Content-Type: application/json" -d "{\"updated_at\":\"$updated_at_n\",\"token\":\"$token\"}" -s $host/users/$uid`
+ exit
+}
+
+function fav_add() {
+ card_status=fifth
+ u_data=`curl -sL "https://api.syui.ai/users/$uid/card?itemsPerPage=2555"|jq -r ".[]|select(.status == \"$card_status\")"`
+ if [ -z "$u_data" ];then
+ d_data=`curl -sL $host/cards/$cid|jq -r "select(.status == \"first\" or .status == \"second\" or .status == \"third\" or .status == \"yui\" or .status == \"fourth\" or .status == \"$card_status\")"`
+ if [ -z "$d_data" ];then
+ echo status $card_status
+ tmp=`curl -sL -X PATCH -H "Content-Type: application/json" -d "{\"status\":\"$card_status\",\"token\":\"$token\"}" $host/cards/$cid`
+ fi
+ fi
+
+ tmp=`curl -sL -X PATCH -H "Content-Type: application/json" -d "{\"fav\": $opt,\"token\":\"$token\"}" -s $host/users/$uid`
+ if [ -n "$tmp" ];then
+ echo ok
+ fi
+ exit
+}
+
+case "$opt" in
+ [bB]|-[bB]|[bB]attle)
+ fav_battle $4
+ ;;
+ [sS]|-[sS]|[sS]tatus)
+ fav_status
+ ;;
+ *)
+ fav_add
+ ;;
+esac
+
+exit
diff --git a/scpt/api_gift.zsh b/scpt/api_gift.zsh
new file mode 100755
index 0000000..4c40003
--- /dev/null
+++ b/scpt/api_gift.zsh
@@ -0,0 +1,278 @@
+#!/bin/zsh
+
+case $OSTYPE in
+ darwin*)
+ alias date="/opt/homebrew/bin/gdate"
+ ;;
+esac
+
+atr=$HOME/.cargo/bin/atr
+host=https://api.syui.ai
+
+pass=`cat $HOME/.config/atr/api_card.json|jq -r .password`
+token=`cat $HOME/.config/atr/api_card.json|jq -r .token`
+
+handle=$1
+did=$2
+username=`echo $1|cut -d . -f 1`
+cid=`echo $3|cut -d ' ' -f 1`
+guser=$4
+
+if [ "$3" = "ai" ];then
+ guser=ai
+fi
+
+if [ -z "$cid" ];then
+ echo no option
+ echo "---"
+ echo "@yui.syui.ai /gift ai"
+ echo "---"
+ echo "@yui.syui.ai /gift status"
+ echo "12345"
+ echo "67891"
+ echo "---"
+ echo "@yui.syui.ai /gift 12345"
+ echo ""
+ echo "---"
+ echo "@yui.syui.ai /gift 12345 syui"
+ exit
+fi
+
+function card_env(){
+ all_data=`curl -sL "$host/users?itemsPerPage=3000"`
+ data=`echo $all_data|jq ".[]|select(.username == \"$username\")"`
+ gdata=`echo $all_data|jq ".[]|select(.username == \"$guser\")"`
+ if [ -z "$data" ];then
+ exit
+ fi
+
+ uid=`echo $data|jq -r .id`
+ gid=`echo $gdata|jq -r .id`
+
+ aiten=`echo $data|jq -r .aiten`
+ fav=`echo $data|jq -r .fav`
+
+ cdata=`curl -sL $host/cards/$cid`
+ if [ -z "$cdata" ];then
+ echo no card
+ exit
+ fi
+
+ card=`echo $cdata|jq -r .card`
+ cp=`echo $cdata|jq -r .cp`
+ count=`echo $cdata|jq -r .count`
+ author=`echo $cdata|jq -r .author`
+ skill=`echo $cdata|jq -r .skill`
+ s=`echo $cdata|jq -r .status`
+
+ if [ $count -eq 0 ];then
+ echo card count 0
+ exit
+ fi
+
+ if [ $author != "$username" ];then
+ echo no author
+ echo "$author --> $username"
+ exit
+ fi
+}
+
+function card_env_ai(){
+ guser=ai
+ all_data=`curl -sL "$host/users?itemsPerPage=3000"`
+ data=`echo $all_data|jq ".[]|select(.username == \"$username\")"`
+ gdata=`echo $all_data|jq ".[]|select(.username == \"$guser\")"`
+ if [ -z "$data" ];then
+ exit
+ fi
+
+ uid=`echo $data|jq -r .id`
+ gid=`echo $gdata|jq -r .id`
+
+ aiten=`echo $data|jq -r .aiten`
+ fav=`echo $data|jq -r .fav`
+
+ cdata=`curl -sL "$host/users/$uid/card?itemsPerPage=3000"|jq ".[0]"`
+ if [ -z "$cdata" ];then
+ cdata=`curl -sL "$host/users/$uid/card?itemsPerPage=3000"|jq ".[]|select(.author == \"$username\")"|jq -s ".[0]"`
+ fi
+
+ if [ -z "$cdata" ];then
+ echo no card
+ exit
+ fi
+
+ cid=`echo $cdata|jq -r .id`
+ card=`echo $cdata|jq -r .card`
+ cp=`echo $cdata|jq -r .cp`
+ count=`echo $cdata|jq -r .count`
+ author=`echo $cdata|jq -r .author`
+ skill=`echo $cdata|jq -r .skill`
+ s=`echo $cdata|jq -r .status`
+
+ if [ $count -eq 0 ];then
+ echo card count 0
+ exit
+ fi
+
+ if [ $author != "$username" ];then
+ echo no author
+ echo "$author --> $username"
+ exit
+ fi
+
+ aicard=`curl -sL "$host/users/$gid/card?itemsPerPage=3000"|jq -r ".[]|select(.card >= 1)"|jq -s`
+ if [ -z "$aicard" ];then
+ exit
+ fi
+ n=`echo $aicard|jq length`
+ n=$((n - 1))
+ ran=$((RANDOM % n))
+ ai_id=`echo $aicard|jq -r ".[$ran]|.id"`
+ ai_card=`echo $aicard|jq -r ".[$ran]|.card"`
+ ai_cp=`echo $aicard|jq -r ".[$ran]|.cp"`
+ ai_skill=`echo $aicard|jq -r ".[$ran]|.skill"`
+ ai_s=`echo $aicard|jq -r ".[$ran]|.status"`
+ ai_author=ai
+}
+
+function card_env_ai_select(){
+ all_data=`curl -sL "$host/users?itemsPerPage=3000"`
+ data=`echo $all_data|jq ".[]|select(.username == \"$username\")"`
+ gdata=`echo $all_data|jq ".[]|select(.username == \"$guser\")"`
+ if [ -z "$data" ];then
+ exit
+ fi
+
+ uid=`echo $data|jq -r .id`
+ gid=`echo $gdata|jq -r .id`
+
+ aiten=`echo $data|jq -r .aiten`
+ fav=`echo $data|jq -r .fav`
+
+ cdata=`curl -sL $host/cards/$cid`
+ if [ -z "$cdata" ];then
+ echo no card
+ exit
+ fi
+
+ cid=`echo $cdata|jq -r .id`
+ card=`echo $cdata|jq -r .card`
+ cp=`echo $cdata|jq -r .cp`
+ count=`echo $cdata|jq -r .count`
+ author=`echo $cdata|jq -r .author`
+ skill=`echo $cdata|jq -r .skill`
+ s=`echo $cdata|jq -r .status`
+
+ if [ $count -eq 0 ];then
+ echo card count 0
+ exit
+ fi
+
+ if [ $author != "$username" ];then
+ echo no author
+ echo "$author --> $username"
+ exit
+ fi
+
+ aicard=`curl -sL "$host/users/$gid/card?itemsPerPage=3000"|jq -r ".[]|select(.card >= 1)"|jq -s`
+ if [ -z "$aicard" ];then
+ exit
+ fi
+ n=`echo $aicard|jq length`
+ n=$((n - 1))
+ ran=$((RANDOM % n))
+ ai_id=`echo $aicard|jq -r ".[$ran]|.id"`
+ ai_card=`echo $aicard|jq -r ".[$ran]|.card"`
+ ai_cp=`echo $aicard|jq -r ".[$ran]|.cp"`
+ ai_skill=`echo $aicard|jq -r ".[$ran]|.skill"`
+ ai_s=`echo $aicard|jq -r ".[$ran]|.status"`
+ ai_author=ai
+}
+
+function card_gift() {
+ card_env
+ if [ -z "$guser" ];then
+ echo card:$card
+ echo skill:$skill
+ echo status:$s
+ echo count:$count
+ echo author:$author
+ exit
+ fi
+ count=$((count - 1))
+ tmp=`curl -X POST -H "Content-Type: application/json" -d "{\"owner\":$gid,\"card\":$card,\"status\":\"$s\",\"cp\":$cp,\"password\":\"$pass\",\"skill\":\"$skill\",\"author\":\"$username\",\"count\":0}" -sL $host/cards`
+ tmp=`curl -X PATCH -H "Content-Type: application/json" -d "{\"count\":$count,\"token\":\"$token\"}" $host/cards/$cid -sL`
+ echo ok
+ echo "$author($cid) --> $guser"
+}
+
+function card_ai() {
+ card_env_ai
+ count=$((count - 1))
+ tmp=`curl -X POST -H "Content-Type: application/json" -d "{\"owner\":$gid,\"card\":$card,\"status\":\"$s\",\"cp\":$cp,\"password\":\"$pass\",\"skill\":\"$skill\",\"author\":\"$username\",\"count\":0}" -sL $host/cards`
+ tmp=`curl -X PATCH -H "Content-Type: application/json" -d "{\"count\":$count,\"token\":\"$token\"}" $host/cards/$cid -sL`
+ echo ok
+ echo "$author($cid) --> $guser"
+ echo "---"
+ echo 'thx!'
+ echo card:$ai_card
+ echo cp:$ai_cp
+ echo author:$ai_author
+ tmp=`curl -X POST -H "Content-Type: application/json" -d "{\"owner\":$uid,\"card\":$ai_card,\"status\":\"$ai_s\",\"cp\":$ai_cp,\"password\":\"$pass\",\"skill\":\"$ai_skill\",\"author\":\"$ai_author\",\"count\":0}" -sL $host/cards`
+}
+
+function card_ai_select() {
+ card_env_ai_select
+ count=$((count - 1))
+ tmp=`curl -X POST -H "Content-Type: application/json" -d "{\"owner\":$gid,\"card\":$card,\"status\":\"$s\",\"cp\":$cp,\"password\":\"$pass\",\"skill\":\"$skill\",\"author\":\"$username\",\"count\":0}" -sL $host/cards`
+ tmp=`curl -X PATCH -H "Content-Type: application/json" -d "{\"count\":$count,\"token\":\"$token\"}" $host/cards/$cid -sL`
+ echo ok
+ echo "$author($cid) --> $guser"
+ echo "---"
+ echo 'thx!'
+ echo card:$ai_card
+ echo cp:$ai_cp
+ echo author:$ai_author
+ tmp=`curl -X POST -H "Content-Type: application/json" -d "{\"owner\":$uid,\"card\":$ai_card,\"status\":\"$ai_s\",\"cp\":$ai_cp,\"password\":\"$pass\",\"skill\":\"$ai_skill\",\"author\":\"$ai_author\",\"count\":0}" -sL $host/cards`
+}
+
+function card_status(){
+ all_data=`curl -sL "$host/users?itemsPerPage=3000"`
+ data=`echo $all_data|jq ".[]|select(.username == \"$username\")"`
+ uid=`echo $data|jq -r .id`
+ acard=`curl -sL "$host/users/$uid/card?itemsPerPage=3000"|jq ".[]|select(.author == \"$username\")|.id"`
+ if [ -z "$acard" ];then
+ echo no card
+ exit
+ fi
+ echo $acard
+}
+
+function test_cmd(){
+ echo "test ok /gift $1"
+ echo cid:$cid
+ echo guser:$guser
+ exit
+}
+
+case $cid in
+ "status")
+ card_status
+ ;;
+ "ai")
+ #test_cmd ai
+ card_ai
+ ;;
+ *)
+ if [ "ai" = "$guser" ];then
+ #test_cmd ai_select
+ card_ai_select
+ else
+ #test_cmd gift user
+ card_gift
+ fi
+ ;;
+esac
+
+exit
diff --git a/scpt/api_ten.zsh b/scpt/api_ten.zsh
new file mode 100755
index 0000000..c99bafa
--- /dev/null
+++ b/scpt/api_ten.zsh
@@ -0,0 +1,1345 @@
+#!/bin/zsh
+
+case $OSTYPE in
+ darwin*)
+ alias date="/opt/homebrew/bin/gdate"
+ ;;
+esac
+
+help_body="[AITEN]
+/ten start : ゲームスタート
+/ten pay : aitenを貯めてカードをゲット
+文字カードの組み合わせで点数を上げていきます
+1ターンにつき1枚またはすべてのカードをten dで入れ替えられます。7ターンで終了
+数字を指定すると、たまにmissをします
+カードの組み合わせはten pで発動します
+[AA] : [通] 50
+[KKK] : [揃] 100
+[AAM] : [天ノ川] 1200"
+
+if [ -z "$5" ];then
+ echo "$help_body"
+ exit
+fi
+
+card_pay=$HOME/.config/atr/scpt/card_pay.zsh
+atr=$HOME/.cargo/bin/atr
+host=https://api.syui.ai
+host_card=https://card.syui.ai/json/card.json
+host_card_json=`curl -sL $host_card`
+n_cid=$HOME/.config/atr/txt/tmp_notify_cid.txt
+f_cfg=$HOME/.config/atr/txt/tmp_ten_config.txt
+
+function moon_check(){
+ moon_now=`date +"%Y%m%d"`
+ moon_j=$HOME/.config/atr/scpt/full_moon.j
+ if [ -f $moon_j ];then
+ moon_t=`cat $moon_j|jq ".[]|select(.data == \"$moon_now\")"`
+ if [ -n "$moon_t" ];then
+ echo true
+ else
+ echo false
+ fi
+ fi
+}
+
+if [ ! -f $f_cfg ];then
+ echo $host_card_json |jq -r ".[]|select(.ten != null)|.ten" |tr -d '\n' >! $f_cfg
+fi
+
+if [ -f $f_cfg ];then
+ nn=`cat $f_cfg|wc -c`
+fi
+
+ran_a=$(($RANDOM % nn))
+ran_b=$(($RANDOM % nn))
+ran_c=$(($RANDOM % nn))
+ran_d=$(($RANDOM % nn))
+ran_z=$(($RANDOM % 540))
+ran_cm=$(($RANDOM % 3))
+ran_first=$(($RANDOM % 6))
+
+pass=`cat $HOME/.config/atr/api_card.json|jq -r .password`
+token=`cat $HOME/.config/atr/api_card.json|jq -r .token`
+
+handle=$1
+did=$2
+username=`echo $1|cut -d . -f 1`
+cid=$3
+uri=$4
+option=$5
+
+sub_option=$6
+ten_kai=0
+
+export LC_CTYPE=C
+export LC_ALL=C
+
+function ten_yaku() {
+ echo $host_card_json |jq -r ".[]|select(.ten != null)|.ten,.h"
+}
+
+function ten_skill() {
+ skill_card_id=`echo $host_card_json |jq -r ".[]|select(.ten == \"$1\")|.id"`
+ data_user_card=`curl -sL "$host/users/$uid/card?itemsPerPage=3000"`
+ skill_card=`echo $data_user_card|jq -r ".[]|select(.skill == \"ten\")|select(.card == $skill_card_id)"`
+ if [ -n "$skill_card" ];then
+ echo true
+ else
+ echo false
+ fi
+}
+
+function ten_skill_yui() {
+ skill_card_id=`echo $host_card_json |jq -r ".[]|select(.ten == \"$1\")|.id"`
+ data_user_card=`curl -sL "$host/users/$uid/card?itemsPerPage=3000"`
+ skill_card=`echo $data_user_card|jq -r ".[]|select(.skill == \"yui\")|select(.card == $skill_card_id)"`
+ if [ -n "$skill_card" ];then
+ echo true
+ else
+ echo false
+ fi
+}
+
+function card_son_check() {
+ data_user_card=`curl -sL "$host/users/$uid/card?itemsPerPage=3000"`
+ card_yui_check=`echo $data_user_card|jq -r ".[]|select(.card == $1)"`
+ if [ -n "$card_yui_check" ];then
+ echo true
+ else
+ echo false
+ fi
+}
+
+function card_ar_check() {
+ data_user_card=`curl -sL "$host/users/$uid/card?itemsPerPage=3000"`
+ card_yui_check=`echo $data_user_card|jq -r ".[]|select(.card == $1)|select(.status == \"3d\")"`
+ if [ -n "$card_yui_check" ];then
+ echo true
+ else
+ echo false
+ fi
+}
+
+function card_yui_check() {
+ data_user_card=`curl -sL "$host/users/$uid/card?itemsPerPage=3000"`
+ card_yui_check=`echo $data_user_card|jq -r ".[]|select(.card == 47)"`
+ if [ -n "$card_yui_check" ];then
+ echo true
+ else
+ echo false
+ fi
+}
+
+function card_kyoku_check() {
+ data_user_card=`curl -sL "$host/users/$uid/card?itemsPerPage=3000"`
+ card_kyoku_check=`echo $data_user_card|jq -r ".[]|select(.card == 90)"`
+ if [ -n "$card_kyoku_check" ];then
+ card_kyoku_o_check=`echo $data_user_card|jq -r ".[]|select(.card == 15)"`
+ if [ -n "$card_kyoku_o_check" ];then
+ echo origin
+ else
+ echo true
+ fi
+ else
+ echo false
+ fi
+}
+
+function card_kyoku_o_check() {
+ data_user_card=`curl -sL "$host/users/$uid/card?itemsPerPage=3000"`
+ if [ -n "$card_kyoku_o_check" ];then
+ echo true
+ else
+ echo false
+ fi
+}
+
+function card_chou_check() {
+ data_user_card=`curl -sL "$host/users/$uid/card?itemsPerPage=3000"`
+ card_yui_check=`echo $data_user_card|jq -r ".[]|select(.card == 14)"|jq -s length`
+ if [ -n "$card_yui_check" ];then
+ echo $card_yui_check
+ else
+ echo 0
+ fi
+}
+
+function ten_yak_check() {
+ unset ten_yak_ok
+ case "$1" in
+ OUY|AIK|IIK|AIS|ACH|ACC|IOU|EKS|TUY|AAC|AEK|ETU|ETW)
+ if `ten_skill $1`;then
+ export ten_yak_ok="☑"
+ fi
+ ;;
+ YUI|ACH|IOU|EKS)
+ if `ten_skill_yui $1`;then
+ export ten_yak_ok="☑"
+ fi
+ ;;
+ EMY|KOS|CHI|AIT|OYZ|IKY|AKM|KUY|AW*|AHK|IKT|AAM|OSZ|CHO|AAA|AA*|AI*)
+ export ten_yak_ok="⚠"
+ ;;
+ esac
+}
+
+function ten_char() {
+ unset miss
+ old_ten_char=$ten_char
+ char_a=`cat $f_cfg| cut -c $ran_a`
+ char_b=`cat $f_cfg| cut -c $ran_b`
+ char_c=`cat $f_cfg| cut -c $ran_c`
+ ten_char=`echo "${char_a}\n${char_b}\n${char_c}"|head -n 3|sort|tr -d '\n'`
+
+ if [ "${ten_char}" = "AHO" ];then
+ ten_char=CHO
+ fi
+ if [ ${#ten_char} -eq 0 ];then
+ #miss="[miss]"
+ ten_char=AAA
+ fi
+ if [ ${#ten_char} -eq 1 ];then
+ #miss="[miss]"
+ ten_char=AA${ten_char}
+ fi
+ if [ ${#ten_char} -eq 2 ];then
+ #miss="[miss]"
+ ten_char=A${ten_char}
+ fi
+
+ ten_yak_check $ten_char
+ if [ -z "$ten_yak_ok" ];then
+ if [ $ran_first -eq 1 ];then
+ ten_char=EMY
+ fi
+ fi
+ ten_yak_check $ten_char
+ if [ -z "$ten_yak_ok" ];then
+ if [ $ran_first -eq 2 ];then
+ ten_char=AAA
+ fi
+ fi
+}
+
+function ten_char_one() {
+ ten_char_one=`cat $f_cfg| cut -c $ran_d`
+}
+
+function ten_room_id() {
+ ten_room_id=`cat /dev/urandom | tr -dc 'a-z' | fold -w 5|head -n 1`
+}
+
+function ten_data_reset() {
+ ten_data=`curl -sL "$host/users?itemsPerPage=3000"|jq ".|sort_by(.ten_su)|reverse|.[]|select(.ten_su != 0)"`
+ ten_u_tmp=`echo $ten_data|jq -s`
+ ten_n_tmp=`echo $ten_u_tmp|jq "length"`
+ #ten_n_tmp=5
+ for ((i=0;i<$ten_n_tmp;i++))
+ do
+ u_i=`echo $ten_u_tmp|jq -r ".[$i].id"`
+ u_a=`echo $ten_u_tmp|jq -r ".[$i].username"`
+ u_s=`echo $ten_u_tmp|jq -r ".[$i].ten_su"`
+ echo "---"
+ echo "user : $u_a"
+ echo "ten : $u_s"
+ done
+}
+
+function ten_user_reset() {
+ if [ "$handle" = "syui.ai" ];then
+ limit_reset_at=`date --iso-8601=seconds -d '1 days ago'`
+ ten_data_reset_tmp=`curl -sL "$host/users?itemsPerPage=3000"|jq ".[]|select(.aiten != 0)"`
+ ten_u_tmp=`echo $ten_data_reset_tmp|jq -s`
+ ten_n_tmp=`echo $ten_u_tmp|jq "length"`
+ for ((i=0;i<$ten_n_tmp;i++))
+ do
+ u_a=`echo $ten_u_tmp|jq -r ".[$i].username"`
+ u_s=`echo $ten_u_tmp|jq -r ".[$i].ten_su"`
+ u_i=`echo $ten_u_tmp|jq -r ".[$i].id"`
+ ten_kai=0
+ tmp=`curl -X PATCH -H "Content-Type: application/json" -d "{\"ten\": false,\"token\":\"$token\", \"ten_at\": \"$limit_reset_at\"}" -s $host/users/$u_i`
+ done
+ echo reset
+ else
+ echo no admin
+ fi
+}
+
+if { [ "$handle" = "syui.ai" ] && [ "$option" = "reset" ] } || [ "$handle" = "reset" ] || [ "$handle" = "r" ];then
+ ten_char
+ ten_kai=1
+ tmp=`curl -X PATCH -H "Content-Type: application/json" -d "{\"ten_post\": \"\", \"ten_kai\":0,\"ten_su\":0,\"ten\": false,\"token\":\"$token\"}" -s $host/users/1`
+fi
+
+function ten_user_stop() {
+ echo stop
+ echo user : $handle
+ echo ten : $ten_su
+ echo aiten : $((aiten + ten_su))
+ tmp=`curl -X PATCH -H "Content-Type: application/json" -d "{\"ten_post\": \"0\", \"ten_kai\":0,\"ten_su\":$ten_su,\"ten\": false,\"token\":\"$token\", \"ten_at\": \"$ten_at_n\",\"aiten\": $((aiten + ten_su))}" -s $host/users/$uid`
+ exit
+}
+
+function ten_start() {
+ if "$ten_bool" ;then
+ echo already started
+ exit
+ fi
+ ten_yak_check $ten_post
+ if [ -n "$ten_yak_ok" ];then
+ ten_old_yak=$ten_post
+ fi
+
+ if [ ${#ten_char} -eq 0 ];then
+ ten_char=AAA
+ fi
+ if [ ${#ten_char} -eq 1 ];then
+ ten_char=AA${ten_char}
+ fi
+ if [ ${#ten_char} -eq 2 ];then
+ ten_char=A${ten_char}
+ fi
+ ten_yak_check $ten_char
+
+ if [ -z "$ten_yak_ok" ];then
+ if [ "`card_kyoku_check`" = "true" ];then
+ card=89
+ ten_char=ETW
+ export ten_yak_ok="☑"
+ elif [ "`card_kyoku_check`" = "origin" ];then
+ card=89
+ ten_char=ETW
+ export ten_yak_ok='⚠'
+ else
+ unset card
+ fi
+ fi
+
+ if [ -z "$ten_yak_ok" ] && [ $ran_first -eq 1 ];then
+ ten_char=EMY
+ fi
+
+ if [ -n "$ten_old_yak" ];then
+ ten_char=$ten_old_yak
+ fi
+
+ ten_yak_check $ten_char
+
+ if [ -z "$ten_yak_ok" ];then
+ if `ten_skill IIK`;then
+ card=46
+ ten_char=IIK
+ export ten_yak_ok="☑"
+ else
+ unset card
+ fi
+ fi
+
+ if [ -z "$ten_yak_ok" ];then
+ if `ten_skill YUI`;then
+ card=36
+ ten_char=YUI
+ export ten_yak_ok="☑"
+ else
+ unset card
+ fi
+ fi
+
+ if [ -z "$ten_yak_ok" ];then
+ if `ten_skill AIK`;then
+ card=33
+ ten_char=AIK
+ export ten_yak_ok="☑"
+ else
+ unset card
+ fi
+ fi
+
+ if [ -z "$ten_yak_ok" ];then
+ if `ten_skill OUY`;then
+ card=29
+ ten_char=OUY
+ export ten_yak_ok="☑"
+ else
+ unset card
+ fi
+ fi
+
+ if [ -z "$ten_yak_ok" ];then
+ if `ten_skill ACC`;then
+ card=76
+ ten_char=ACC
+ export ten_yak_ok="☑"
+ else
+ unset card
+ fi
+ fi
+
+ ten_user=`echo $ten_data|jq -r .username`
+ find_user=`echo $ten_user|grep $username`
+ first_ten=1000
+ echo "join : $handle [${ten_char}]"
+ echo "ten : $first_ten"
+ echo "aiten : $aiten"
+ echo "---"
+ echo "[1-7]"
+ echo "ten d : shuffle[${ten_char}${ten_yak_ok}]"
+ echo "ten p : post"
+ echo "---"
+ tmp=`curl -X PATCH -H "Content-Type: application/json" -d "{\"ten_post\": \"$ten_char\", \"ten_kai\":0,\"ten_su\":$first_ten,\"ten\": true,\"token\":\"$token\"}" -s $host/users/$uid`
+ text_one=`echo $ten_data|jq -r .username,.ten_su`
+ #echo $text_one
+ exit
+}
+
+function ten_other_user() {
+ ten_data=`curl -sL "$host/users?itemsPerPage=3000"|jq ".[]|select(.ten == true)"`
+ ten_user=`echo $ten_data|jq -r .username`
+ other_user=`echo $ten_user|grep -v $username`
+}
+
+function user_env() {
+ all_data=`curl -sL "$host/users?itemsPerPage=3000"`
+ ten_data=`echo $all_data|jq ".|sort_by(.ten_su)|reverse|.[]|select(.ten_su != 0)"`
+ data=`echo $all_data|jq ".[]|select(.username == \"$username\")"`
+ uid=`echo $data|jq -r .id`
+ aiten=`echo $data|jq -r .aiten`
+ model=`echo $data|jq -r .model`
+ # card=2
+ model_mode=`echo $data|jq -r .model_mode`
+ # card=8
+ model_attack=`echo $data|jq -r .model_attack`
+ # card=3
+ model_skill=`echo $data|jq -r .model_skill`
+ # card=7
+ model_limit=`echo $data|jq -r .model_limit`
+ model_critical=`echo $data|jq -r .model_critical`
+ model_critical_d=`echo $data|jq -r .model_critical_d`
+ ten_post=`echo $data|jq -r .ten_post`
+ ten_bool=`echo $data|jq -r .ten`
+ day_at=`date +"%Y%m%d"`
+ nd=`date +"%Y%m%d" -d '1 days ago'`
+ ten_at_n=`date --iso-8601=seconds`
+ limit_reset_at=`date --iso-8601=seconds -d '1 days ago'`
+ d=`date +"%Y-%m-%d"`
+ ten_at=`echo $data|jq -r .ten_at`
+ ten_at=`date -d "$ten_at" +"%Y-%m-%d"`
+ if [ "$d" = "$ten_at" ] && [ "$handle" != "ai" ];then
+ echo "limit aiten"
+ exit
+ fi
+ ten_kai=`echo $data|jq -r .ten_kai`
+}
+
+function ten_env() {
+ limit_reset_at=`date --iso-8601=seconds -d '1 days ago'`
+ ten_su=`echo $data|jq -r .ten_su`
+ ten_bool=`echo $data|jq -r .ten`
+ ten_card=`echo $data|jq -r .ten_card`
+ aiten=`echo $data|jq -r .aiten`
+ ten_delete=`echo $data|jq -r .ten_delete`
+ ten_post=`echo $data|jq -r .ten_post`
+ ten_get=`echo $data|jq -r .ten_get`
+ ten_at=`echo $data|jq -r .ten_at`
+ ten_at_n=`date --iso-8601=seconds`
+}
+
+function ten_yak_shutdown() {
+ unset card
+ case $ten_char in
+ EMY)
+ card=1
+ ;;
+ KOS)
+ card=2
+ ;;
+ CHI)
+ card=3
+ ;;
+ AIT)
+ card=4
+ ;;
+ OYZ)
+ card=5
+ ;;
+ IKY)
+ card=6
+ ;;
+ AKM)
+ card=7
+ ;;
+ KUY)
+ card=8
+ ;;
+ AW*)
+ card=9
+ ;;
+ AHK)
+ card=10
+ ;;
+ IKT)
+ card=11
+ ;;
+ AAM)
+ card=12
+ ;;
+ OSZ)
+ card=13
+ ;;
+ CHO)
+ card=14
+ ;;
+ ETU)
+ card=86
+ if [ `ten_skill $ten_char` = false ];then
+ unset card
+ fi
+ ;;
+ ETW)
+ card=89
+ if [ `ten_skill $ten_char` = false ];then
+ unset card
+ fi
+ ;;
+ OUY)
+ card=29
+ if [ `ten_skill $ten_char` = false ];then
+ unset card
+ fi
+ ;;
+ AIK)
+ card=33
+ if [ `ten_skill $ten_char` = false ];then
+ unset card
+ fi
+ ;;
+ IIK)
+ card=46
+ if [ `ten_skill $ten_char` = false ];then
+ unset card
+ fi
+ ;;
+ ACH)
+ card=60
+ if [ `ten_skill_yui $ten_char` = false ];then
+ unset card
+ fi
+ if [ `ten_skill $ten_char` = false ];then
+ unset card
+ fi
+ ;;
+ YUI)
+ card=36
+ if [ `ten_skill $ten_char` = false ];then
+ unset card
+ fi
+ ;;
+ AIS)
+ card=22
+ if [ `ten_skill_yui $ten_char` = false ];then
+ unset card
+ fi
+ ;;
+ TUY)
+ card=64
+ if [ `ten_skill $ten_char` = false ];then
+ unset card
+ fi
+ ;;
+ EKS)
+ card=67
+ if [ `ten_skill_yui $ten_char` = false ];then
+ unset card
+ fi
+ if [ `ten_skill $ten_char` = false ];then
+ unset card
+ fi
+ ;;
+ IOU)
+ card=69
+ if [ `ten_skill_yui $ten_char` = false ];then
+ unset card
+ fi
+ if [ `ten_skill $ten_char` = false ];then
+ unset card
+ fi
+ ;;
+ ACC)
+ card=76
+ if [ `ten_skill_yui $ten_char` = false ];then
+ unset card
+ fi
+ if [ `ten_skill $ten_char` = false ];then
+ unset card
+ fi
+ ;;
+ AAC)
+ card=77
+ if [ `ten_skill_yui $ten_char` = false ];then
+ unset card
+ fi
+ if [ `ten_skill $ten_char` = false ];then
+ unset card
+ fi
+ ;;
+ AEK)
+ card=78
+ if [ `ten_skill_yui $ten_char` = false ];then
+ unset card
+ fi
+ if [ `ten_skill $ten_char` = false ];then
+ unset card
+ fi
+ ;;
+ esac
+ ten_su=$((ten_su + ${card}00))
+ if [ $card -ne 0 ];then
+ echo "last : +${card}00"
+ fi
+}
+
+function ten_shutdown(){
+ if [ -z "$1" ];then
+ shut_opt=7
+ else
+ shut_opt=$1
+ fi
+ if [ $ten_kai -ge $shut_opt ];then
+
+ all_data=`curl -sL "$host/users?itemsPerPage=3000"`
+ ten_data=`echo $all_data|jq ".|sort_by(.ten_su)|reverse|.[]|select(.ten_su != 0)"`
+ echo shutdown
+ echo user : $handle
+ echo ten : $ten_su
+ echo aiten : $((aiten + ten_su))
+ tmp=`curl -X PATCH -H "Content-Type: application/json" -d "{\"ten_kai\":$ten_kai, \"ten_su\":$ten_su, \"ten\": false, \"token\":\"$token\", \"ten_at\" : \"$ten_at_n\", \"aiten\": $((aiten + ten_su))}" -s $host/users/$uid`
+
+ ten_u_tmp=`echo $ten_data|jq -s`
+ ten_n_tmp=`echo $ten_u_tmp|jq "length"`
+
+ for ((i=0;i<$ten_n_tmp;i++))
+ do
+ u_a=`echo $ten_u_tmp|jq -r ".[$i].username"`
+ u_s=`echo $ten_u_tmp|jq -r ".[$i].ten_su"`
+ if [ $i -eq 0 ] && [ $ten_su -ge $u_s ];then
+ echo win !
+ tmp=`curl -X POST -H "Content-Type: application/json" -d "{\"owner\":$uid,\"password\":\"$pass\"}" -s $host/cards`
+ card=`echo $tmp|jq -r .card`
+ card_url=`echo $tmp|jq -r .url`
+ cp=`echo $tmp|jq -r .cp`
+ echo "[card]"
+ echo "id : $card"
+ echo "cp : $cp"
+
+ if [ $model = "true" ];then
+ echo "---"
+ echo "ai[model] status up!"
+ if [ $(($RANDOM % 2)) -eq 0 ];then
+ model_critical=$((model_critical + 1))
+ json_model="{\"model_critical\":$model_critical, \"token\":\"$token\"}"
+ echo "critical : ${model_critical}%"
+ else
+ model_critical_d=$((model_critical_d + 10))
+ json_model="{\"model_critical_d\":$model_critical_d, \"token\":\"$token\"}"
+ echo "critical_d : ${model_critical_d}%"
+ fi
+ tmp=`curl -X PATCH -H "Content-Type: application/json" -d "$json_model" -s $host/users/$uid`
+ fi
+
+ fi
+ echo "---"
+ echo "user : $u_a"
+ echo "ten : $u_s"
+ done
+ exit
+ fi
+}
+
+function card_post() {
+ j=`echo $host_card_json|jq ".[]|select(.id == $card)"`
+ img=`echo $j|jq -r .img`
+
+ if [ $card -eq 30 ];then
+ cten=${card}0
+ old_ten_char=AAA
+ else
+ old_ten_char=`echo $j|jq -r .ten`
+ cten=${card}00
+ fi
+ desc="+$cten"
+
+ if [ -z $img ] || [ "$img" = "null" ];then
+ exit
+ fi
+ ten_yak_check $ten_char
+ title=`echo $j|jq -r .h`
+ title="[${title}]"
+
+ if [ $card -eq 36 ];then
+ if [ "`card_yui_check`" = "true" ];then
+ if [ "`moon_check`" = "true" ];then
+ cten=${card}00
+ body=`repeat $rr; echo "🌓 +10000"`
+ img="bafkreieh2j3nbnetmux5xaid7iefv2vfgsjwkx5bx66ce6h35rq2oebo54"
+ desc="+$cten (+${card_yui_ten})"
+ title="月見(新月/満月)"
+ title="[${title}・技]"
+ else
+ cten=${card}00
+ body=`repeat $rr; echo "⚡ +1000"`
+ img="bafkreieh2j3nbnetmux5xaid7iefv2vfgsjwkx5bx66ce6h35rq2oebo54"
+ desc="+$cten (+${card_yui_ten})"
+ title=`echo $j|jq -r .h`
+ title="[${title}・技]"
+ fi
+ fi
+ fi
+
+ if [ $card -eq 89 ];then
+ if [ "`card_kyoku_check`" = "false" ];then
+ desc="+$cten (secret command -> /card kyoku)"
+ fi
+ if [ "`card_kyoku_check`" = "true" ];then
+ cten=${card}00
+ body=`repeat $rr; echo "⚡ +8900 +900"`
+ img="bafkreihgubbbwcsvpl6hj5h4ijfzqy5yyqpvjsqkry4rtjs7rcjjqzun5a"
+ desc="+$cten (+${card_kyoku_ten})"
+ title=`echo $j|jq -r .h`
+ title="[${title}・極]"
+ fi
+ if [ "`card_kyoku_check`" = "origin" ];then
+ cten=${card}00
+ body=`repeat $rr; echo "⚡⚡ +8900 +900 +1500"`
+ img="bafkreihgubbbwcsvpl6hj5h4ijfzqy5yyqpvjsqkry4rtjs7rcjjqzun5a"
+ desc="+$cten (+${card_kyoku_ten})"
+ title=`echo $j|jq -r .h`
+ title="[${title}・極]"
+ fi
+ fi
+
+ if [ $card -eq 22 ];then
+ if [ "`card_son_check 22`" = "true" ];then
+ cten=${card}00
+ body=`repeat $rr; echo "🔸 +2200"`
+ img="bafkreiatrky4ilyvdt6gib33obof6rdrvqyt363z5wrjg6b5nzn6sgqsge"
+ desc="+$cten (+${card_yui_ten})"
+ title=`echo $j|jq -r .h`
+ title="[${title}・技]"
+ fi
+ fi
+
+ if [ $card -eq 60 ] || [ $card -eq 14 ];then
+ if [ `card_chou_check` -ne 0 ];then
+ cten=${card}00
+ card_chou_check=`card_chou_check`
+ rr=$(($card_chou_check * 1400))
+ body=`echo "⚡ +${rr}"`
+ img=bafkreighntijp47dejknvtrxbqocsy542vgpxcb3zaqxpc2vc52hy7bkw4
+ desc="+$cten (+${card_chou_ten})"
+ title=`echo $j|jq -r .h`
+ title="[${title}]"
+ fi
+ if [ $card -eq 14 ];then
+ img="bafkreig7qapoudilekw6bxfkj3in3owjhh2v23rx7abbgnszvkxi5dqbly"
+ fi
+ fi
+
+ if [ $card -eq 76 ];then
+ if [ "`card_yui_check`" = "true" ];then
+ cten=${card}00
+ card_chou_check=`card_chou_check`
+ body=`echo "⚡ +???"`
+ img=bafkreicmeuljtkl3jx4toudpuxagvjpdcgflhuwhbe3vh4e4fnlruawfyy
+ desc="+$cten (+???)"
+ title=`echo $j|jq -r .h`
+ title="[${title}]"
+ fi
+ fi
+
+ if [ $card -eq 77 ];then
+ if [ "`card_yui_check`" = "true" ];then
+ cten=${card}00
+ card_chou_check=`card_chou_check`
+ body=`echo "⚡ +???"`
+ img="bafkreiarpxioqr5ulnwvukin6qrv5gyyymsggv255oc7wmfedsqpah4qcy"
+ desc="+$cten (+???)"
+ title=`echo $j|jq -r .h`
+ title="[${title}]"
+ fi
+ fi
+
+ if [ $card -eq 78 ];then
+ if [ "`card_yui_check`" = "true" ];then
+ cten=${card}00
+ body=`echo "⚡ +???"`
+ img="bafkreicbiujlv6hiluzc5db25j5phg7u2m2pu5h4qinxnpizq226n4hbae"
+ desc="+$cten (+???)"
+ title=`echo $j|jq -r .h`
+ title="[${title}]"
+ fi
+ fi
+
+ if [ $card -eq 9 ] && [ $model_attack -ge 1 ] && [ $model = "true" ] && [ $model_rr = "true" ];then
+ cten=${card}00
+ model_ten=$((model_attack * 10))
+ body=`echo "🎮 x${model_ten}"`
+ img="bafkreibrrikzsexsktw3xov2jts7zfwusnjnhjudqryj5v4flffpf3hxaq"
+ desc="+$cten (x${model_ten})"
+ title=`echo $j|jq -r .h`
+ title="[${title}]"
+ fi
+
+ if [ $card -eq 2 ] && [ $model_mode -ge 1 ] && [ $model = "true" ] && [ $model_rr = "true" ];then
+ cten=${card}00
+ model_ten=$((model_mode * 10))
+ body=`echo "🎮 x${model_ten}"`
+ img="bafkreigosm3kxxkgyoxxapufcxn2uulqnj2lgrwsfccimmwafhulztqrhu"
+ desc="+$cten (x${model_ten})"
+ title=`echo $j|jq -r .h`
+ title="[${title}]"
+ fi
+
+ if [ $card -eq 3 ] && [ $model_skill -ge 1 ] && [ $model = "true" ] && [ $model_rr = "true" ];then
+ cten=${card}00
+ model_ten=$((model_skill * 10))
+ body=`echo "🎮 x${model_ten}"`
+ img="bafkreiagpsr6dcr3zs3365yesm5deydlalarojbdx3fhbadbz64gznanzu"
+ desc="+$cten (x${model_ten})"
+ title=`echo $j|jq -r .h`
+ title="[${title}]"
+ fi
+
+ if [ $card -eq 7 ] && [ $model_limit -ge 1 ] && [ $model = "true" ] && [ $model_rr = "true" ];then
+ cten=${card}00
+ model_ten=$((model_limit * 10))
+ body=`echo "🎮 x${model_ten}"`
+ img="bafkreianbnrsuerymlddh3lsxqzp7h33aifj5owofme34q2ilhliuippze"
+ desc="+$cten (x${model_ten})"
+ title=`echo $j|jq -r .h`
+ title="[${title}]"
+ fi
+
+ link="https://card.syui.ai/${username}"
+ text=`echo "$title +${cten}\n$body\nten : $ten_su\n$ten_kai : $old_ten_char ---> $ten_char $ten_yak_ok"`
+ tmp_atr=`$atr reply-og "$text" --cid $cid --uri $uri --img $img --title "$title" --description "$desc" --link $link`
+ ten_shutdown
+}
+
+function ten_plus() {
+ ten_shutdown
+ ten_kai=$((ten_kai + 1))
+ ten_su=$((ten_su + $1))
+
+ if [ $((RANDOM % 6)) -eq 0 ];then
+ model_rr=true
+ else
+ model_rr=false
+ fi
+ if [ $card -eq 9 ] && [ $model_attack -ge 1 ] && [ $model = "true" ] && [ $model_rr = "true" ];then
+ card_yui_ten=$((card * 100 * 10 * $model_attack))
+ ten_su=$((card_yui_ten + ten_su))
+ fi
+
+ if [ $card -eq 2 ] && [ $model_mode -ge 1 ] && [ $model = "true" ] && [ $model_rr = "true" ];then
+ card_yui_ten=$((card * 100 * 10 * $model_mode))
+ ten_su=$((card_yui_ten + ten_su))
+ fi
+
+ if [ $card -eq 3 ] && [ $model_skill -ge 1 ] && [ $model = "true" ] && [ $model_rr = "true" ];then
+ card_yui_ten=$((card * 100 * 10 * $model_skill))
+ ten_su=$((card_yui_ten + ten_su))
+ fi
+
+ if [ $card -eq 7 ] && [ $model_limit -ge 1 ] && [ $model = "true" ] && [ $model_rr = "true" ];then
+ card_yui_ten=$((card * 100 * 10 * $model_limit))
+ ten_su=$((card_yui_ten + ten_su))
+ fi
+
+ if [ $card -eq 22 ];then
+ if [ "`card_son_check 22`" = "true" ];then
+ rr=$(($RANDOM % 6 + 1))
+ card_yui_ten=$((2200 * rr))
+ ten_su=$((card_yui_ten + ten_su))
+ fi
+ fi
+
+ if [ $card -eq 36 ];then
+ if [ "`card_yui_check`" = "true" ];then
+ if [ "`moon_check`" = "true" ];then
+ rr=$(($RANDOM % 5 + 1))
+ card_yui_ten=$((10000 * rr))
+ ten_su=$((card_yui_ten + ten_su))
+ else
+ rr=$(($RANDOM % 5 + 1))
+ card_yui_ten=$((1000 * rr))
+ ten_su=$((card_yui_ten + ten_su))
+ fi
+ fi
+ fi
+
+ if [ $card -eq 89 ];then
+ if [ "`card_kyoku_check`" = "true" ];then
+ rr=$(($RANDOM % 5 + 1))
+ card_kyoku_ten=$((9800 * rr))
+ ten_su=$((card_kyoku_ten + ten_su))
+ fi
+ if [ "`card_kyoku_check`" = "origin" ];then
+ rr=$(($RANDOM % 7 + 1))
+ card_kyoku_ten=$((11300 * rr))
+ ten_su=$((card_kyoku_ten + ten_su))
+ fi
+ fi
+
+ if [ $card -eq 60 ] || [ $card -eq 14 ];then
+ if [ `card_chou_check` -ne 0 ];then
+ card_chou_check=`card_chou_check`
+ rr=$(($card_chou_check * 2400))
+ ten_su=$((rr + ten_su))
+ fi
+ fi
+
+ if [ $card -eq 76 ];then
+ if [ "`card_yui_check`" = "true" ];then
+ rr=$(($RANDOM % 10000 + 700))
+ ten_su=$((rr + ten_su))
+ fi
+ fi
+
+ if [ $card -eq 77 ];then
+ if [ "`card_yui_check`" = "true" ];then
+ rr=$(($RANDOM % 20000 + 700))
+ ten_su=$((rr + ten_su))
+ fi
+ fi
+
+ if [ $card -eq 78 ];then
+ if [ "`card_yui_check`" = "true" ];then
+ rr=$(($RANDOM % 30000 + 700))
+ ten_su=$((rr + ten_su))
+ fi
+ fi
+
+ ten_char
+
+ char_a=`echo $ten_char|cut -b 1`
+ char_b=`echo $ten_char|cut -b 2`
+ char_c=`echo $ten_char|cut -b 3`
+
+ if [ "$char_a" = "A" ] && [ "$char_b" = "A" ] && [ "$char_c" = "A" ];then
+ ten_char=OSZ
+ fi
+ if [ "$char_a" = "A" ] && [ "$char_b" = "A" ];then
+ ten_char=EMY
+ fi
+ if [ "$char_a" = "A" ] && [ "$char_b" = "I" ];then
+ ten_char=KUY
+ fi
+ if [ $card -eq 1 ] && [ $ran_cm -eq 0 ];then
+ ten_char=IKY
+ fi
+ if [ $card -eq 1 ] && [ $ran_cm -eq 1 ];then
+ ten_char=KOS
+ fi
+ if [ $card -eq 2 ] && [ $ran_cm -eq 0 ];then
+ ten_char=AWZ
+ fi
+ if [ $card -eq 3 ] && [ $ran_cm -eq 0 ];then
+ ten_char=AIT
+ fi
+ if [ $card -eq 5 ] && [ $ran_cm -eq 0 ];then
+ ten_char=AAM
+ fi
+ if [ $card -eq 7 ] && [ $ran_cm -eq 0 ];then
+ ten_char=AAA
+ fi
+ if [ $card -eq 7 ] && [ $ran_cm -eq 1 ];then
+ ten_char=ACC
+ fi
+ if [ $card -eq 12 ] && [ $ran_cm -eq 0 ];then
+ ten_char=OSZ
+ fi
+ if [ $card -eq 29 ] && [ $ran_cm -eq 0 ];then
+ ten_char=OSZ
+ fi
+ if [ $card -eq 36 ] && [ $ran_cm -eq 0 ];then
+ ten_char=IKT
+ fi
+ if [ $card -eq 14 ] && [ $((RANDOM % 2)) -eq 1 ];then
+ ten_char=ACH
+ fi
+ if [ $card -eq 36 ] && [ $((RANDOM % 2)) -eq 1 ];then
+ ten_char=CHO
+ fi
+ if [ $card -eq 13 ] && [ $((RANDOM % 2)) -eq 1 ];then
+ ten_char=AIS
+ fi
+ if [ $card -eq 46 ] && [ $((RANDOM % 2)) -eq 1 ];then
+ ten_char=YUI
+ fi
+ if [ $card -eq 67 ] && [ $((RANDOM % 3)) -eq 1 ];then
+ ten_char=IIK
+ fi
+ if [ $card -eq 76 ] && [ $((RANDOM % 2)) -eq 1 ];then
+ ten_char=AAC
+ fi
+ if [ $card -eq 77 ] && [ $((RANDOM % 3)) -eq 1 ];then
+ ten_char=AEK
+ fi
+
+ ten_yak_check $ten_char
+
+ tmp=`curl -X PATCH -H "Content-Type: application/json" -d "{\"ten_post\": \"$ten_char\", \"ten_kai\":$ten_kai,\"ten_su\":$ten_su, \"token\":\"$token\"}" -s $host/users/$uid`
+
+ #if [ $ran_z -eq 1 ] && [ $card -ne 0 ] && [ -n "$card" ];then
+ if [ `$((RANDOM % 5))` -eq 1 ] && [ $card -eq 1 ] && [ "`card_ar_check`" = "false" ];then
+ echo "$ten_kai : $ten_su ---> $ten_char $ten_yak_ok"
+ skill=3d
+ st=3d
+ cp=${card}00
+ cp=$(($RANDOM % 1200 + 200))
+ echo "[card] ---> 20%"
+ echo "id:${card}"
+ echo "status: ${st}"
+ echo "skill:${skill}"
+ tmp=`curl -X POST -H "Content-Type: application/json" -d "{\"owner\":$uid,\"card\":$card,\"status\":\"$st\",\"cp\":$cp,\"password\":\"$pass\",\"skill\":\"$skill\"}" -s $host/cards`
+ fi
+
+ if [ $card -ne 0 ] && [ -n "$card" ];then
+ card_post
+ else
+ echo "$ten_kai : $ten_su ---> $ten_char $ten_yak_ok"
+ ten_shutdown
+ #ten_data_reset
+ fi
+ exit
+}
+
+function ten_main() {
+ ten_shutdown
+ ten_kai=$((ten_kai + 1))
+ ten_su=$((ten_su - $1))
+ old_ten_char=$ten_char
+ ten_char
+ ten_yak_check $ten_char
+ echo "$ten_kai : $ten_su ---> $ten_char $ten_yak_ok"
+ tmp=`curl -X PATCH -H "Content-Type: application/json" -d "{\"ten_post\": \"$ten_char\", \"ten_kai\":$ten_kai,\"ten_su\":$ten_su, \"token\":\"$token\"}" -s $host/users/$uid`
+ echo "$ten_kai : $ten_su"
+ #ten_data_reset
+ exit
+}
+
+function ten_check() {
+ if [ $ten_kai -ge 7 ];then
+ ten_shutdown
+ exit
+ fi
+}
+
+function ten_yak() {
+ if [ $ten_kai -ge 7 ];then
+ ten_shutdown
+ exit
+ fi
+
+ char_a=`echo $ten_post|cut -b 1`
+ char_b=`echo $ten_post|cut -b 2`
+ char_c=`echo $ten_post|cut -b 3`
+
+ case $ten_post in
+
+ EMY)
+ card=1
+ ten_plus ${card}00
+ ;;
+ KOS)
+ card=2
+ ten_plus ${card}00
+ ;;
+ CHI)
+ card=3
+ ten_plus ${card}00
+ ;;
+ AIT)
+ card=4
+ ten_plus ${card}00
+ ;;
+ OYZ)
+ card=5
+ ten_plus ${card}00
+ ;;
+ IKY)
+ card=6
+ ten_plus ${card}00
+ ;;
+ AKM)
+ card=7
+ ten_plus ${card}00
+ ;;
+ KUY)
+ card=8
+ ten_plus ${card}00
+ ;;
+ AW*)
+ card=9
+ ten_plus ${card}00
+ ;;
+ AHK)
+ card=10
+ ten_plus ${card}00
+ ;;
+ IKT)
+ card=11
+ ten_plus ${card}00
+ ;;
+ AAM)
+ card=12
+ ten_plus ${card}00
+ ;;
+ OSZ)
+ card=13
+ ten_plus ${card}00
+ ;;
+ CHO)
+ card=14
+ ten_plus ${card}00
+ ;;
+ ETU)
+ card=86
+ if `ten_skill $ten_post`;then
+ ten_plus ${card}00
+ fi
+ ;;
+ ETW)
+ card=89
+ if `ten_skill $ten_post`;then
+ ten_plus ${card}00
+ fi
+ ;;
+ OUY)
+ card=29
+ if `ten_skill $ten_post`;then
+ ten_plus ${card}00
+ fi
+ ;;
+ AAA)
+ card=30
+ if `ten_skill $ten_post`;then
+ ten_plus 300
+ fi
+ ;;
+ AIK)
+ card=33
+ if `ten_skill $ten_post`;then
+ ten_plus ${card}00
+ fi
+ ;;
+ AIS)
+ card=22
+ if `ten_skill_yui $ten_post`;then
+ ten_plus ${card}00
+ fi
+ ;;
+ YUI)
+ card=36
+ if `ten_skill $ten_post`;then
+ ten_plus ${card}00
+ fi
+ ;;
+ ACH)
+ card=60
+ if `ten_skill_yui $ten_post`;then
+ ten_plus ${card}00
+ fi
+ if `ten_skill $ten_post`;then
+ ten_plus ${card}00
+ fi
+ ;;
+ TUY)
+ card=64
+ if `ten_skill $ten_post`;then
+ ten_plus ${card}00
+ fi
+ ;;
+ IIK)
+ card=46
+ if `ten_skill $ten_post`;then
+ ten_plus ${card}00
+ fi
+ ;;
+ EKS)
+ card=67
+ if `ten_skill_yui $ten_post`;then
+ ten_plus ${card}00
+ fi
+ if `ten_skill $ten_post`;then
+ ten_plus ${card}00
+ fi
+ ;;
+ IOU)
+ card=69
+ if `ten_skill_yui $ten_post`;then
+ ten_plus ${card}00
+ fi
+ if `ten_skill $ten_post`;then
+ ten_plus ${card}00
+ fi
+ ;;
+ ACC)
+ card=76
+ if `ten_skill_yui $ten_post`;then
+ ten_plus ${card}00
+ fi
+ if `ten_skill $ten_post`;then
+ ten_plus ${card}00
+ fi
+ ;;
+ AAC)
+ card=77
+ if `ten_skill_yui $ten_post`;then
+ ten_plus ${card}00
+ fi
+ if `ten_skill $ten_post`;then
+ ten_plus ${card}00
+ fi
+ ;;
+ AEK)
+ card=78
+ if `ten_skill_yui $ten_post`;then
+ ten_plus ${card}00
+ fi
+ if `ten_skill $ten_post`;then
+ ten_plus ${card}00
+ fi
+ ;;
+ esac
+
+ unset card
+
+ if [ "$ten_post" = "AAA" ];then
+ echo "[揃] +100"
+ ten_plus 100
+ fi
+
+ if [ "$char_a" = "A" ] && [ "$char_b" = "I" ];then
+ echo "[名] +150"
+ ten_plus 150
+ fi
+
+ if [ "$char_a" = "$char_b" ] && [ "$char_c" = "$char_b" ];then
+ echo "[揃] +100"
+ ten_plus 100
+ fi
+
+ if [ "$char_a" = "$char_b" ];then
+ echo "[通] +50"
+ ten_plus 50
+ fi
+
+ case $ten_post in
+ *)
+ echo "[空] -300"
+ ten_main 300
+ ;;
+ esac
+}
+
+function ten_delete_get() {
+ if [ $ten_kai -ge 7 ];then
+ exit
+ fi
+ char_a=`echo $ten_post|cut -b 1`
+ char_b=`echo $ten_post|cut -b 2`
+ char_c=`echo $ten_post|cut -b 3`
+ ten_kai=$((ten_kai + 1))
+ old_ten_char=$ten_char
+ case $sub_option in
+ 1)
+ ten_char_one
+ ten_char=`echo "${char_b}\n${char_c}\n${ten_char_one}"|head -n 3|sort|tr -d '\n'`
+ ;;
+ 2)
+ ten_char_one
+ ten_char=`echo "${char_a}\n${char_c}\n${ten_char_one}"|head -n 3|sort|tr -d '\n'`
+ ;;
+ 3)
+ ten_char_one
+ ten_char=`echo "${char_a}\n${char_b}\n${ten_char_one}"|head -n 3|sort|tr -d '\n'`
+ ;;
+ all|a|*)
+ ten_char
+ ;;
+ esac
+ if [ ${#ten_char} -eq 1 ];then
+ ten_char=AA${ten_char}
+ fi
+ if [ ${#ten_char} -eq 2 ];then
+ ten_char=A${ten_char}
+ fi
+ ten_yak_check $ten_char
+ tmp=`curl -X PATCH -H "Content-Type: application/json" -d "{\"ten_post\": \"$ten_char\", \"ten_kai\":$ten_kai, \"token\":\"$token\"}" -s $host/users/$uid`
+ ten_yak_check $ten_char
+ echo "$ten_kai : $ten_su ---> $ten_char $ten_yak_ok $miss"
+
+ ten_yak_check $ten_char
+ if [ -n "$ten_yak_ok" ] && [ $ten_kai -ge 7 ];then
+ ten_yak_shutdown
+ fi
+}
+
+case "$option" in
+ reset*)
+ user_env
+ ten_user_reset
+ ten_data_reset
+ exit
+ ;;
+ pay)
+ $card_pay $handle $did $cid $uri
+ exit
+ ;;
+ stop|close)
+ user_env
+ ten_env
+ ten_user_stop
+ exit
+ ;;
+ y*)
+ ten_yaku
+ exit
+ ;;
+ u*)
+ ten_data_reset
+ exit
+ ;;
+ h*|"")
+ echo "$help_body"
+ exit
+ ;;
+esac
+
+user_env
+
+case "$option" in
+ p*)
+ ten_env
+ ten_yak
+ ;;
+ d*)
+ ten_env
+ ten_yak_check $ten_char
+ ten_delete_get
+ ;;
+ start)
+ ten_char
+ ten_start
+ exit
+ ;;
+ *)
+ echo "no option"
+ exit
+ ;;
+esac
+
+ten_shutdown
+exit
diff --git a/scpt/api_ten_auto.zsh b/scpt/api_ten_auto.zsh
new file mode 100755
index 0000000..c5c9362
--- /dev/null
+++ b/scpt/api_ten_auto.zsh
@@ -0,0 +1,183 @@
+#!/bin/zsh
+
+case $OSTYPE in
+ darwin*)
+ alias date="/opt/homebrew/bin/gdate"
+ ;;
+esac
+
+card_pay=$HOME/.config/atr/scpt/card_pay.zsh
+atr=$HOME/.cargo/bin/atr
+host=https://api.syui.ai
+host_card=https://card.syui.ai/json/card.json
+host_card_json=`curl -sL $host_card`
+n_cid=$HOME/.config/atr/txt/tmp_notify_cid.txt
+f_cfg=$HOME/.config/atr/txt/tmp_ten_config.txt
+handle=$1
+did=$2
+username=`echo $1|cut -d . -f 1`
+cid=$3
+uri=$4
+
+if [ ! -f $f_cfg ];then
+ echo $host_card_json |jq -r ".[]|select(.ten != null)|.ten" |tr -d '\n' >! $f_cfg
+fi
+
+if [ -f $f_cfg ];then
+ nn=`cat $f_cfg|wc -c`
+fi
+
+pass=`cat $HOME/.config/atr/api_card.json|jq -r .password`
+token=`cat $HOME/.config/atr/api_card.json|jq -r .token`
+
+function ten_yak() {
+ unset ran_a
+ unset ran_b
+ unset ran_c
+ unset ten_new
+ unset ten_yaku
+
+ ran_a=$(($RANDOM % nn))
+ ran_b=$(($RANDOM % nn))
+ ran_c=$(($RANDOM % nn))
+
+ ten_new=0
+
+ char_a=`cat $f_cfg| cut -c $ran_a`
+ char_b=`cat $f_cfg| cut -c $ran_b`
+ char_c=`cat $f_cfg| cut -c $ran_c`
+ ten_char=`echo "${char_a}\n${char_b}\n${char_c}"|head -n 3|sort|tr -d '\n'`
+ if [ ${#ten_char} -eq 0 ];then
+ ten_char=AAA
+ fi
+ if [ ${#ten_char} -eq 1 ];then
+ ten_char=AA${ten_char}
+ fi
+ if [ ${#ten_char} -eq 2 ];then
+ ten_char=A${ten_char}
+ fi
+
+ char_a=`echo $ten_char|cut -b 1`
+ char_b=`echo $ten_char|cut -b 2`
+ char_c=`echo $ten_char|cut -b 3`
+
+ case $ten_char in
+
+ EMY)
+ card=1
+ ;;
+ KOS)
+ card=2
+ ;;
+ CHI)
+ card=3
+ ;;
+ AIT)
+ card=4
+ ;;
+ OYZ)
+ card=5
+ ;;
+ IKY)
+ card=6
+ ;;
+ AKM)
+ card=7
+ ;;
+ KUY)
+ card=8
+ ;;
+ AW*)
+ card=9
+ ;;
+ AHK)
+ card=10
+ ;;
+ IKT)
+ card=11
+ ;;
+ AAM)
+ card=12
+ ;;
+ OSZ)
+ card=13
+ ;;
+ CHO)
+ card=14
+ ;;
+ *)
+ card=0
+ ;;
+ esac
+
+ ten_new=${card}00
+
+ if [ $ten_new -eq 0 ];then
+ ten_new=0
+ else
+ ten_yaku="[$ten_char]"
+ fi
+
+ if [ "$ten_char" = "AAA" ];then
+ ten_new=100
+ fi
+
+ if [ "$char_a" = "A" ] && [ "$char_b" = "I" ] && [ $ten_new -ne 0 ];then
+ ten_new=150
+ fi
+
+ if [ "$char_a" = "$char_b" ] && [ $ten_new -ne 0 ];then
+ ten_new=50
+ fi
+
+ echo "[$i] $ten_su $ten_yaku+$ten_new"
+ ten_su=$((ten_su + ten_new))
+}
+
+function user_env() {
+ all_data=`curl -sL "$host/users?itemsPerPage=3000"`
+ ten_data=`echo $all_data|jq ".|sort_by(.ten_su)|reverse|.[]|select(.ten_su != 0)"`
+ data=`echo $all_data|jq ".[]|select(.username == \"$username\")"`
+ uid=`echo $data|jq -r .id`
+ aiten=`echo $data|jq -r .aiten`
+ ten_post=`echo $data|jq -r .ten_post`
+ ten_bool=`echo $data|jq -r .ten`
+ day_at=`date +"%Y%m%d"`
+ nd=`date +"%Y%m%d" -d '1 days ago'`
+ ten_at_n=`date --iso-8601=seconds`
+ limit_reset_at=`date --iso-8601=seconds -d '1 days ago'`
+ d=`date +"%Y-%m-%d"`
+ ten_at=`echo $data|jq -r .ten_at`
+ ten_at=`date -d "$ten_at" +"%Y-%m-%d"`
+ ten_kai=`echo $data|jq -r .ten_kai`
+ if [ "$d" = "$ten_at" ];then
+ echo "limit aiten"
+ exit
+ fi
+ ten_kai=`echo $data|jq -r .ten_kai`
+}
+
+function ten_shutdown(){
+ ten_kai=0
+ all_data=`curl -sL "$host/users?itemsPerPage=3000"`
+ ten=`echo $((ten_su + 200))`
+ ten_su=$ten
+ aiten=`echo $((aiten + ten_su))`
+ echo "+100"
+ echo "---"
+ echo user : $handle
+ echo ten : $ten
+ echo aiten :
+ tmp=`curl -X PATCH -H "Content-Type: application/json" -d "{\"ten_kai\":$ten_kai, \"ten_su\":$ten_su, \"ten\": false, \"token\":\"$token\", \"ten_at\" : \"$ten_at_n\", \"aiten\": $aiten}" -s $host/users/$uid`
+}
+
+user_env
+
+for ((i=1;i<=7;i++))
+do
+ ten_yak
+done
+
+ten_shutdown
+
+exit
diff --git a/scpt/api_ten_su_reset.zsh b/scpt/api_ten_su_reset.zsh
new file mode 100755
index 0000000..f614591
--- /dev/null
+++ b/scpt/api_ten_su_reset.zsh
@@ -0,0 +1,31 @@
+#!/bin/zsh
+host=https://api.syui.ai
+pass=`cat $HOME/.config/atr/api_card.json|jq -r .password`
+token=`cat $HOME/.config/atr/api_card.json|jq -r .token`
+
+case $OSTYPE in
+ darwin*)
+ alias date="/opt/homebrew/bin/gdate"
+ ;;
+esac
+
+function ten_su_reset() {
+ ten_data=`curl -sL "$host/users?itemsPerPage=3000"|jq ".|sort_by(.ten_su)|reverse|.[]|select(.ten_su != 0)"`
+ ten_u_tmp=`echo $ten_data|jq -s`
+ ten_n_tmp=`echo $ten_u_tmp|jq "length"`
+ ten_n_tmp=$((ten_n_tmp - 1))
+ #ten_n_tmp=5
+ for ((i=0;i<$ten_n_tmp;i++))
+ do
+ u_i=`echo $ten_u_tmp|jq -r ".[$i].id"`
+ u_a=`echo $ten_u_tmp|jq -r ".[$i].username"`
+ u_s=`echo $ten_u_tmp|jq -r ".[$i].ten_su"`
+ echo "---"
+ echo "id : $u_i"
+ echo "user : $u_a"
+ echo "ten : $u_s"
+ curl -X PATCH -H "Content-Type: application/json" -d "{\"ten\": false,\"token\":\"$token\", \"ten_su\": 0}" -s $host/users/$u_i
+ done
+}
+
+ten_su_reset
diff --git a/scpt/arch.zsh b/scpt/arch.zsh
new file mode 100755
index 0000000..b837945
--- /dev/null
+++ b/scpt/arch.zsh
@@ -0,0 +1,79 @@
+#!/bin/zsh
+
+home=/home/syui
+name=arch
+a=$home/$name
+
+function arch_in(){
+ mkdir -p $a
+ sudo pacstrap -c $a base
+ #sudo echo pts/0 >> $a/etc/securetty
+ #sudo echo pts/1 >> $a/etc/securetty
+ sudo rm -rf /var/lib/machines/$name
+ sudo rm -rf /var/lib/machines/${name}back
+ sudo mv $a /var/lib/machines/
+ sudo machinectl clone arch archback
+}
+
+function arch_rm(){
+ sudo machinectl remove $name
+}
+
+function arch_up(){
+ sudo machinectl poweroff $name > /dev/null 2>&1
+ sleep 5
+ sudo machinectl terminate $name > /dev/null 2>&1
+ sleep 5
+ sudo machinectl start ${name}back
+ sleep 5
+ ssh ${name}back pacman -Syu --noconfirm
+ sleep 5
+ sudo machinectl poweroff ${name}back
+}
+
+function arch_st(){
+ sudo machinectl start $name
+}
+
+function arch_of(){
+ sudo machinectl poweroff $name
+}
+
+function arch_ex(){
+ sudo machinectl shell $name
+ $1
+ poweroff
+}
+
+function arch_re(){
+ sudo machinectl poweroff $name > /dev/null 2>&1
+ sleep 5
+ sudo machinectl terminate $name > /dev/null 2>&1
+ sleep 5
+ sudo machinectl remove $name
+ sleep 5
+ sudo machinectl clone ${name}back $name
+ sleep 5
+ sudo machinectl start $name
+}
+
+case "$1" in
+ "update"|"-u")
+ arch_up
+ arch_re
+ echo "machinectl update done"
+ ;;
+ "reset"|"-r")
+ arch_re
+ echo "machinectl reset done"
+ ;;
+ *)
+ sudo machinectl start $name
+ t=`ssh $name "$*"`
+ if [ -z "$t" ];then
+ ssh -tt $name "$*"
+ else
+ echo "$t"
+ fi
+ ;;
+esac
diff --git a/scpt/at_img.zsh b/scpt/at_img.zsh
new file mode 100755
index 0000000..fee5a65
--- /dev/null
+++ b/scpt/at_img.zsh
@@ -0,0 +1,21 @@
+#!/bin/zsh
+
+dir=${0:a:h}
+f=$HOME/.config/atr/scpt/png/t.png
+f_sleep=$HOME/.config/atr/scpt/png/sleep
+
+cid=$1
+uri=$2
+if [ ! -f $f ];then
+ atr r "limit 1 day" -c $cid -u $uri
+ exit
+fi
+if [ -f $f_sleep ];then
+ link=bafkreidgp2cl4cvkn3i4gzqj6kfiwngjjh5ie2jwobh632jh4ejlbiwdhm
+ atr img-post "#nyancat" -l $link -c $cid -u $uri
+ rm $f_sleep
+ exit
+fi
+
+link=`atr img-upload $f|jq -r .blob.ref.'"$link"'`
+atr img-post "#stablediffusion" -l $link -c $cid -u $uri
diff --git a/scpt/at_search.zsh b/scpt/at_search.zsh
new file mode 100755
index 0000000..533c22e
--- /dev/null
+++ b/scpt/at_search.zsh
@@ -0,0 +1,21 @@
+#!/bin/zsh
+d=${0:a:h:h}
+url="search.bsky.social/search/posts?q="
+q=`echo $*|tr ' ' '+'`
+url="${url}${q}"
+
+t=`curl -sL "$url"`
+echo $t
+n=`echo $t|jq "length"`
+n=`expr $n - 1`
+for ((i=0;i<=$n;i++))
+do
+ did=`echo $t|jq -r ".[$i].user.did"`
+ text=`echo $t|jq -r ".[$i].post.text"`
+ tid=`echo $t|jq -r ".[$i].tid"`
+ if [ "$text" != "null" ];then
+ echo $did
+ echo $text
+ echo https://$tid
+ fi
+done
diff --git a/scpt/bluesky.zsh b/scpt/bluesky.zsh
new file mode 100755
index 0000000..4da2207
--- /dev/null
+++ b/scpt/bluesky.zsh
@@ -0,0 +1,24 @@
+#!/bin/zsh
+d=${0:a:h}
+dd=${0:a:h:h}/json
+#https://github.com/bluesky-social/atproto/issues/597
+host=bsky.social
+base=https://$host/xrpc
+handle=`cat ~/.config/atr/token.json| jq -r .handle`
+token=`cat ~/.config/atr/token.json| jq -r .accessJwt`
+if [ -n "$1" ];then
+ url=$base/$1
+else
+ url="$base/app.bsky.actor.getProfile?actor=$handle"
+fi
+
+curl -X GET -H "Content-Type: application/json" -H "Authorization: Bearer $token" $url | jq . >! $dd/profile.json
+cat $dd/profile.json
+
+url=$base/app.bsky.feed.getTimeline
+curl -X GET -H "Content-Type: application/json" -H "Authorization: Bearer $token" $url | jq . >! $dd/timeline.json
+cat $dd/timeline.json
+
+url=$base/app.bsky.notification.listNotifications
+curl -X GET -H "Content-Type: application/json" -H "Authorization: Bearer $token" $url | jq . >! $dd/notify.json
+cat $dd/notify.json|jq .
diff --git a/scpt/bot_card.zsh b/scpt/bot_card.zsh
new file mode 100755
index 0000000..27bcc7e
--- /dev/null
+++ b/scpt/bot_card.zsh
@@ -0,0 +1,39 @@
+#!/bin/zsh
+
+host_at=bsky.social
+url_at=https://$host_at/xrpc/com.atproto.repo.listRecords
+scpt=$HOME/.config/atr/scpt/api_card.zsh
+
+handle=skychan.social
+did=did:plc:7hgow77uky7lgbinwyvbzhar
+f=$HOME/.config/atr/card_bot.txt
+touch $f
+
+n=5
+for ((i=0;i<=$n;i++))
+do
+ echo $i
+ cid=`curl -sL "https://bsky.social/xrpc/com.atproto.repo.listRecords?repo=$handle&collection=app.bsky.feed.post" |jq -r ".[]|.[$i]?|.cid"`
+ uri=`curl -sL "https://bsky.social/xrpc/com.atproto.repo.listRecords?repo=$handle&collection=app.bsky.feed.post" |jq -r ".[]|.[$i]?|.uri"`
+ t=`curl -sL "https://bsky.social/xrpc/com.atproto.repo.listRecords?repo=$handle&collection=app.bsky.feed.post" |jq -r ".[]|.[$i]?|.value.text"`
+ echo $t $cid $uri
+ if [ "@yui.syui.ai /card" = "$t" ];then
+ if [ "$cid" = "`cat $f`" ];then
+ exit
+ fi
+ card=`$scpt $handle $did`
+ link="https://card.syui.ai/skychan"
+ ~/.cargo/bin/atr r "$card" -c $cid -u "$uri" -l "$link"
+ echo $cid >! $f
+ fi
+ if [ "@yui.syui.ai /card -b" = "$t" ];then
+ if [ "$cid" = "`cat $f`" ];then
+ exit
+ fi
+ card=`$scpt $handle $did -b`
+ link="https://card.syui.ai/skychan"
+ ~/.cargo/bin/atr r "\n$card" -c $cid -u "$uri" -l "$link"
+ echo $cid >! $f
+ fi
+done
+exit
diff --git a/scpt/bot_kawaii.zsh b/scpt/bot_kawaii.zsh
new file mode 100755
index 0000000..e09abbb
--- /dev/null
+++ b/scpt/bot_kawaii.zsh
@@ -0,0 +1,60 @@
+#!/bin/zsh
+
+d=$HOME/.config/atr/txt
+mkdir -p $d
+f=$d/kawaii.txt
+
+function test_post() {
+ host_at=bsky.social
+ url_at=https://$host_at/xrpc/com.atproto.repo.listRecords
+ handle=lilly-niyu.bsky.social
+ n=10
+ for ((i=0;i<=$n;i++))
+ do
+ echo $i
+ cid=`curl -sL "https://bsky.social/xrpc/com.atproto.repo.listRecords?repo=$handle&collection=app.bsky.feed.post" |jq -r ".[]|.[$i]?|.cid"`
+ uri=`curl -sL "https://bsky.social/xrpc/com.atproto.repo.listRecords?repo=$handle&collection=app.bsky.feed.post" |jq -r ".[]|.[$i]?|.uri"`
+ t=`curl -sL "https://bsky.social/xrpc/com.atproto.repo.listRecords?repo=$handle&collection=app.bsky.feed.post" |jq -r ".[]|.[$i]?|.value.text"`
+ echo $t $cid $uri
+ if [ "かわいいにゃ〜!!" = "$t" ];then
+ #atr r "楽しそう!アイもまぜてよ" -c $cid -u "$uri"
+ fi
+ done
+}
+
+#uri=at://$did/$tid
+#{
+# "tid": "app.bsky.feed.post/3judrtmxuin2b",
+# "cid": "bafyreibebbn7og5dgvvegcjlh357pnrpuvvinbjeaqbfvqb4jsrpbsw3di",
+# "user": {
+# "did": "did:plc:hodycxjeqfxtest2ilj47j7g",
+# "handle": "lilly-niyu.bsky.social"
+# },
+# "post": {
+# "createdAt": 1682587582509000000,
+# "text": "かわいいにゃ〜!!",
+# "user": "lilly-niyu.bsky.social"
+# }
+#}
+
+url="search.bsky.social/search/posts?q=かわいいにゃ〜!!"
+q=`echo $*|tr ' ' '+'`
+url="${url}${q}"
+
+t=`curl -sL "$url"`
+cid=`echo $t|jq -r ".[1].cid"`
+did=`echo $t|jq -r ".[1].did"`
+tid=`echo $t|jq -r ".[1].tid"`
+uri="at://$did/$tid"
+text=`echo $t|jq -r ".[1].post.text"`
+
+touch $f
+
+echo $text
+if [ "かわいいにゃ〜!!" = "$text" ] && [ "`cat $f`" != "$cid" ];then
+ echo ok
+ atr r "楽しそう!アイもまぜてよ" -c $cid -u "$uri"
+ echo $cid >! $f
+else
+ echo no
+fi
diff --git a/scpt/bot_list.zsh b/scpt/bot_list.zsh
new file mode 100755
index 0000000..24808b9
--- /dev/null
+++ b/scpt/bot_list.zsh
@@ -0,0 +1,79 @@
+#!/bin/zsh
+
+url_plc="https://plc.directory/export"
+host_at=bsky.social
+url=https://plc.directory
+url_at=https://$host_at/xrpc/com.atproto.repo.listRecords
+dir=$HOME/.config/atr/txt
+file=$dir/bot_list.txt
+unset timed
+
+case $OSTYPE in
+ darwin*)
+ alias date="/opt/homebrew/bin/gdate"
+ ;;
+esac
+
+if [ -z "$1" ];then
+ exit
+fi
+
+if ! echo $1|grep "." >/dev/null 2>&1;then
+ echo "ex : user syui.bsky.social"
+ exit
+fi
+
+if [ ! -d $dir ];then
+ mkdir -p $dir
+fi
+
+if [ ! -f $file ];then
+ touch $file
+fi
+
+function mfile() {
+ t=`cat $file|sort|uniq`
+ if [ -n "$t" ];then
+ echo "$t" >! ${file}.back
+ mv ${file}.back $file
+ fi
+}
+
+function plc(){
+ if cat $file|grep "$1" >/dev/null 2>&1;then
+ cat $file|grep "$1"
+ exit
+ fi
+ json_tmp=`curl -sL "${url_plc}?after=${timed}"|jq .`
+ json=`echo $json_tmp|jq "select(.operation.handle == \"$1\")"`
+ if [ -z "$json" ];then
+ check=`echo $json_tmp|jq -r ".operation.alsoKnownAs"|head -n 1`
+ if [ "null" != "$check" ];then
+ json=`echo $json_tmp|jq "select(.operation.alsoKnownAs|.[] == \"at://$1\")"` >/dev/null 2>&1
+ fi
+ fi
+ if [ -n "$json" ];then
+ created_at=`echo $json|jq -r .createdAt |tail -n 1`
+ fi
+ if [ -n "$created_at" ];then
+ echo "$created_at : $1"
+ echo "$created_at : $1" >> $file
+ mfile
+ exit
+ fi
+}
+
+if [ "$1" = "-l" ];then
+ mfile
+ cat $file
+ exit
+fi
+
+for ((i=0;i<=20;i++))
+do
+ if [ $i -eq 0 ];then
+ timed="1970-01-01"
+ fi
+ plc $1
+ timed=`echo $json_tmp|jq -r .createdAt|tail -n 1`
+done
diff --git a/scpt/bsky_token.zsh b/scpt/bsky_token.zsh
new file mode 100755
index 0000000..8a7fd5b
--- /dev/null
+++ b/scpt/bsky_token.zsh
@@ -0,0 +1,29 @@
+#!/bin/zsh
+d=${0:a:h}
+dd=${0:a:h:h}/json
+#https://github.com/bluesky-social/atproto/issues/597
+host=`cat ~/.config/atr/config.json|jq -r .host`
+base=https://$host/xrpc
+handle=`cat ~/.config/atr/config.json|jq -r .user`
+pass=`cat ~/.config/atr/config.json|jq -r .pass`
+f=~/.config/atr/token.json
+
+curl -X POST -H "Content-Type: application/json" -d "{\"identifier\":\"$handle\",\"password\":\"$pass\"}" https://$host/xrpc/com.atproto.server.createSession | jq . >! $f
+cat $f
+
+if [ "$1" = "-a" ];then
+ handle=`cat $f| jq -r .handle`
+ token=`cat $f| jq -r .accessJwt`
+
+ url="$base/app.bsky.actor.getProfile?actor=$handle"
+ curl -X GET -H "Content-Type: application/json" -H "Authorization: Bearer $token" $url | jq . >! $dd/profile.json
+ cat $dd/profile.json
+
+ url=$base/app.bsky.feed.getTimeline
+ curl -X GET -H "Content-Type: application/json" -H "Authorization: Bearer $token" $url | jq . >! $dd/timeline.json
+ cat $dd/timeline.json
+
+ url=$base/app.bsky.notification.listNotifications
+ curl -X GET -H "Content-Type: application/json" -H "Authorization: Bearer $token" $url | jq . >! $dd/notify.json
+ cat $dd/notify.json|jq .
+fi
diff --git a/scpt/card_box.zsh b/scpt/card_box.zsh
new file mode 100755
index 0000000..311d0b9
--- /dev/null
+++ b/scpt/card_box.zsh
@@ -0,0 +1,40 @@
+#!/bin/zsh
+
+echo "not open"
+exit
+
+atr=$HOME/.cargo/bin/atr
+url_j=https://card.syui.ai/json/card.json
+tcid=$HOME/.config/atr/txt/tmp_notify_cid.txt
+
+handle=$1
+did=$2
+cid=$3
+uri=$4
+
+if [ ! -d $HOME/.config/atr/txt ];then
+ mkdir -p $HOME/.config/atr/txt
+fi
+
+case $OSTYPE in
+ darwin*)
+ alias date="/opt/homebrew/bin/gdate"
+ ;;
+esac
+
+url=https://api.syui.ai
+username=`echo $1|cut -d . -f 1`
+link=https://card.syui.ai/$username
+ran=$(($RANDOM % 10))
+
+if [ $ran -eq 1 ];then
+ uranai="今日の運勢をルーン占いでやってください。結果を120文字以内で教えてください"
+else
+ uranai="今日の運勢をタロット占いでやってください。結果を120文字以内で教えてください"
+fi
+
+body=`$atr chat "$uranai" -c`
+if $atr r "$body" -c $cid -u $uri;then
+ echo $cid >! $tcid
+fi
+exit
diff --git a/scpt/card_fortune.zsh b/scpt/card_fortune.zsh
new file mode 100755
index 0000000..c7fd860
--- /dev/null
+++ b/scpt/card_fortune.zsh
@@ -0,0 +1,161 @@
+#!/bin/zsh
+
+atr=$HOME/.cargo/bin/atr
+url_j=https://card.syui.ai/json/card.json
+tcid=$HOME/.config/atr/txt/tmp_notify_cid.txt
+
+handle=$1
+did=$2
+cid=$3
+uri=$4
+
+if [ ! -d $HOME/.config/atr/txt ];then
+ mkdir -p $HOME/.config/atr/txt
+fi
+
+case $OSTYPE in
+ darwin*)
+ alias date="/opt/homebrew/bin/gdate"
+ ;;
+esac
+
+url=https://api.syui.ai
+username=`echo $1|cut -d . -f 1`
+link=https://card.syui.ai/$username
+ran=$(($RANDOM % 10))
+
+if [ $ran -eq 1 ];then
+ uranai="今日の運勢をルーン占いでやってください。結果を120文字以内で教えてください"
+else
+ uranai="今日の運勢をタロット占いでやってください。結果を120文字以内で教えてください"
+fi
+
+uid=`curl -sL "$url/users?itemsPerPage=2000"|jq ".[]|select(.username == \"$username\")"|jq -r .id`
+
+if [ -z $uid ] || [ "$uid" = "null" ];then
+ body=`$atr chat "$uranai" -c`
+ body=`echo "占いにはアイのカードが3枚以上必要です\n\n$body"`
+ if [ "`cat $tcid`" != "$cid" ];then
+ if $atr r "$body" -c $cid -u $uri;then
+ echo $cid >! $tcid
+ fi
+ fi
+ exit
+fi
+
+data=`curl -sL "$url/users/$uid"`
+data_u=`curl -sL "$url/users/$uid/card?itemsPerPage=2000"`
+luck_at=`echo $data|jq -r .luck_at`
+luck_at_n=`date --iso-8601=seconds`
+luck_at=`date -d "$luck_at" +"%Y%m%d"`
+day_at=`date +"%Y%m%d"`
+nd=`date +"%Y%m%d" -d '1 days ago'`
+
+if [ "$luck_at" = "$day_at" ];then
+ body=`$atr chat "$uranai" -c`
+ if [ "`cat $tcid`" != "$cid" ];then
+ if $atr r "$body" -c $cid -u $uri;then
+ echo $cid >! $tcid
+ fi
+ fi
+ exit
+fi
+
+cp_i=`echo $data_u |jq -r "sort_by(.cp) | reverse|.[].card"|sort|uniq|sed -e '1d'`
+cp_n=`echo $cp_i|wc -l`
+
+if [ 3 -gt $cp_n ];then
+ body=`$atr chat "$uranai" -c`
+ body=`echo "占いにはアイのカードが3枚以上必要です\n\n$body"`
+ if [ "`cat $tcid`" != "$cid" ];then
+ if $atr r "$body" -c $cid -u $uri;then
+ echo $cid >! $tcid
+ fi
+ fi
+ exit
+fi
+
+ran=$(($RANDOM % $cp_n + 1))
+luck=$(($RANDOM % 8))
+sub=$(($RANDOM % 15))
+card=`echo $cp_i|awk "NR==$ran"`
+
+if [ $sub -eq $card ];then
+ sub="x2"
+else
+ sub=`curl -sL $url_j|jq -r ".[]|select(.id == $sub)|.p"`
+fi
+j=`curl -sL $url_j|jq ".[]|select(.id == $card)"`
+img=`echo $j|jq -r .img`
+
+if [ -z $img ] || [ "$img" = "null" ];then
+ exit
+fi
+
+test_ran=`echo $(($RANDOM % 3))`
+
+#text="アイ・カード占い"
+case $test_ran in
+ 1)
+ text=`$atr chat "アイのカード占いを作ってやってみて。感じる答えを出して。できれば140文字以内でお願い。" -c`
+ ;;
+ 2)
+ text=`$atr chat "今、アイが自分で考えた占いやってみて。気分が乗らなかったらやらなくていいよ。できれば140文字以内で答えてね。" -c`
+ ;;
+ *)
+ text=`$atr chat "今のアイの気分で適当に占ってみて。できれば140文字以内で答えてね。" -c`
+ ;;
+esac
+
+title=`echo $j|jq -r .h`
+title="[${title}]"
+#desc=`echo $j|jq -r .p`
+
+if [ 0 -eq $luck ];then
+ desc="0"
+fi
+
+if [ 1 -eq $luck ];then
+ desc="1"
+fi
+
+if [ 2 -eq $luck ];then
+ desc="2"
+fi
+
+if [ 3 -eq $luck ];then
+ desc="3"
+fi
+
+if [ 4 -eq $luck ];then
+ desc="4"
+fi
+if [ 5 -eq $luck ];then
+ desc="5"
+fi
+
+if [ 6 -eq $luck ];then
+ desc="6"
+fi
+
+if [ 7 -eq $luck ];then
+ desc="7"
+fi
+
+desc=`echo "アイ数字は${luck}"`
+
+if [ "`cat $tcid`" != "$cid" ];then
+ if $atr reply-og "$text" --cid $cid --uri $uri --img $img --title "$title" --description "$desc" --link $link;then
+ echo $cid >! $tcid
+ fi
+fi
+
+pass=`cat $HOME/.config/atr/api_card.json|jq -r .password`
+token=`cat $HOME/.config/atr/api_card.json|jq -r .token`
+
+if [ $luck -eq 7 ];then
+ tmp=`curl -X PATCH -H "Content-Type: application/json" -d "{\"luck_at\":\"$luck_at_n\",\"token\":\"$token\",\"luck\": $luck, \"next\": \"$nd\"}" -s $url/users/$uid`
+else
+ tmp=`curl -X PATCH -H "Content-Type: application/json" -d "{\"luck_at\":\"$luck_at_n\",\"token\":\"$token\",\"luck\": $luck}" -s $url/users/$uid`
+fi
+exit
diff --git a/scpt/card_fortune_en.zsh b/scpt/card_fortune_en.zsh
new file mode 100755
index 0000000..ab2d053
--- /dev/null
+++ b/scpt/card_fortune_en.zsh
@@ -0,0 +1,147 @@
+#!/bin/zsh
+
+atr=$HOME/.cargo/bin/atr
+url_j=https://card.syui.ai/json/card.json
+tcid=$HOME/.config/atr/txt/tmp_notify_cid.txt
+
+handle=$1
+did=$2
+cid=$3
+uri=$4
+
+if [ ! -d $HOME/.config/atr/txt ];then
+ mkdir -p $HOME/.config/atr/txt
+fi
+
+case $OSTYPE in
+ darwin*)
+ alias date="/opt/homebrew/bin/gdate"
+ ;;
+esac
+
+url=https://api.syui.ai
+username=`echo $1|cut -d . -f 1`
+link=https://card.syui.ai/$username
+ran=$(($RANDOM % 10))
+
+if [ $ran -eq 1 ];then
+ uranai="Please do a of today's rune-fortune. Tell us the result in 120 characters or less."
+else
+ uranai="Please do a of today's tarot-fortune. Tell us the result in 120 characters or less."
+fi
+
+uid=`curl -sL "$url/users?itemsPerPage=2000"|jq ".[]|select(.username == \"$username\")"|jq -r .id`
+
+if [ -z $uid ] || [ "$uid" = "null" ];then
+ body=`$atr chat "$uranai" -c`
+ body=`echo "At least 3 cards of the Eye are required for divination\n\n$body"`
+ if [ "`cat $tcid`" != "$cid" ];then
+ if $atr r "$body" -c $cid -u $uri;then
+ echo $cid >! $tcid
+ fi
+ fi
+ exit
+fi
+
+data=`curl -sL "$url/users/$uid"`
+data_u=`curl -sL "$url/users/$uid/card?itemsPerPage=2000"`
+luck_at=`echo $data|jq -r .luck_at`
+luck_at_n=`date --iso-8601=seconds`
+luck_at=`date -d "$luck_at" +"%Y%m%d"`
+day_at=`date +"%Y%m%d"`
+nd=`date +"%Y%m%d" -d '1 days ago'`
+
+if [ "$luck_at" = "$day_at" ];then
+ body=`$atr chat "$uranai" -c`
+ if [ "`cat $tcid`" != "$cid" ];then
+ if $atr r "$body" -c $cid -u $uri;then
+ echo $cid >! $tcid
+ fi
+ fi
+ exit
+fi
+
+cp_i=`echo $data_u |jq -r "sort_by(.cp) | reverse|.[].card"|sort|uniq|sed -e '1d'`
+cp_n=`echo $cp_i|wc -l`
+
+if [ 3 -gt $cp_n ];then
+ body=`$atr chat "$uranai" -c`
+ body=`echo "At least 3 cards of the Eye are required for divination\n\n$body"`
+ if [ "`cat $tcid`" != "$cid" ];then
+ if $atr r "$body" -c $cid -u $uri;then
+ echo $cid >! $tcid
+ fi
+ fi
+ exit
+fi
+
+ran=$(($RANDOM % $cp_n + 1))
+luck=$(($RANDOM % 8))
+sub=$(($RANDOM % 15))
+card=`echo $cp_i|awk "NR==$ran"`
+
+if [ $sub -eq $card ];then
+ sub="x2"
+else
+ sub=`curl -sL $url_j|jq -r ".[]|select(.id == $sub)|.p"`
+fi
+j=`curl -sL $url_j|jq ".[]|select(.id == $card)"`
+img=`echo $j|jq -r .img`
+
+if [ -z $img ] || [ "$img" = "null" ];then
+ exit
+fi
+
+text="AI Card Fortune Telling"
+title=`echo $j|jq -r .h_en`
+title="[${title}]"
+#desc=`echo $j|jq -r .p`
+
+if [ 0 -eq $luck ];then
+ desc="0"
+fi
+
+if [ 1 -eq $luck ];then
+ desc="1"
+fi
+
+if [ 2 -eq $luck ];then
+ desc="2"
+fi
+
+if [ 3 -eq $luck ];then
+ desc="3"
+fi
+
+if [ 4 -eq $luck ];then
+ desc="4"
+fi
+if [ 5 -eq $luck ];then
+ desc="5"
+fi
+
+if [ 6 -eq $luck ];then
+ desc="6"
+fi
+
+if [ 7 -eq $luck ];then
+ desc="7"
+fi
+
+desc=`echo "lucky number ${luck}"`
+
+if [ "`cat $tcid`" != "$cid" ];then
+ if $atr reply-og "$text" --cid $cid --uri $uri --img $img --title "$title" --description "$desc" --link $link;then
+ echo $cid >! $tcid
+ fi
+fi
+
+pass=`cat $HOME/.config/atr/api_card.json|jq -r .password`
+token=`cat $HOME/.config/atr/api_card.json|jq -r .token`
+
+if [ $luck -eq 7 ];then
+ tmp=`curl -X PATCH -H "Content-Type: application/json" -d "{\"luck_at\":\"$luck_at_n\",\"token\":\"$token\",\"luck\": $luck, \"next\": \"$nd\"}" -s $url/users/$uid`
+else
+ tmp=`curl -X PATCH -H "Content-Type: application/json" -d "{\"luck_at\":\"$luck_at_n\",\"token\":\"$token\",\"luck\": $luck}" -s $url/users/$uid`
+fi
+exit
diff --git a/scpt/card_pay.zsh b/scpt/card_pay.zsh
new file mode 100755
index 0000000..df11f56
--- /dev/null
+++ b/scpt/card_pay.zsh
@@ -0,0 +1,154 @@
+#!/bin/zsh
+
+case $OSTYPE in
+ darwin*)
+ alias date="/opt/homebrew/bin/gdate"
+ ;;
+esac
+
+atr=$HOME/.cargo/bin/atr
+host=https://api.syui.ai
+host_card=https://card.syui.ai/json/card.json
+pass=`cat $HOME/.config/atr/api_card.json|jq -r .password`
+token=`cat $HOME/.config/atr/api_card.json|jq -r .token`
+handle=$1
+username=`echo $1|cut -d . -f 1`
+did=$2
+cid=$3
+uri=$4
+pay=60000
+
+echo $handle
+
+function card_d(){
+ j=`curl -sL $host_card |jq -r ".[]|select(.ten_skill == true)"|jq -s`
+ n=`echo $j|jq length`
+ n_leng=$n
+ n=$(($RANDOM % n - 1))
+ card=`echo $j|jq -r ".[$n].id"`
+ img=`echo $j|jq -r ".[$n].img"`
+ ten=`echo $j|jq -r ".[$n].ten"`
+ title=`echo $j|jq -r ".[$n].h"`
+ title="[$title]"
+ ran_a=$(($RANDOM % 1000))
+ cp=$((ran_a + 500))
+ ran_s=$(($RANDOM % 5))
+ skill=ten
+ if [ $ran_s -eq 1 ];then
+ s=super
+ cp=$((cp + $ran_a))
+ else
+ s=normal
+ fi
+ #card=1;skill=3d;s=3d
+
+ all_data=`curl -sL "$host/users?itemsPerPage=3000"`
+ data=`echo $all_data|jq ".[]|select(.username == \"$username\")"`
+ uid=`echo $data|jq -r .id`
+ aiten=`echo $data|jq -r .aiten`
+ model=`echo $data|jq -r .model`
+ model_mode=`echo $data|jq -r .model_mode`
+ model_attack=`echo $data|jq -r .model_attack`
+ model_skill=`echo $data|jq -r .model_skill`
+ model_limit=`echo $data|jq -r .model_limit`
+ model_critical=`echo $data|jq -r .model_critical`
+ model_critical_d=`echo $data|jq -r .model_critical_d`
+ ten_data=`echo $all_data|jq ".|sort_by(.aiten)|reverse|.[]|select(.aiten >= $pay)"`
+
+ model_critical=$((RANDOM % 10 + model_critical))
+ json_model="{\"model_critical\":$model_critical, \"token\":\"$token\"}"
+ body_d=`echo "[card]\nid : $card\ncp : $cp\nstatus : $s\nskill : $skill\n---\n[model]\ncritical : ${model_critical}%"`
+}
+
+function card_user(){
+ if [ -z "$ten_data" ] || [ -z "$aiten" ] || [ $aiten -le $pay ];then
+ echo "aiten : $aiten >= $pay [1/${n_leng}]"
+ exit
+ else
+ pay_s=$((aiten - pay))
+ if [ $pay_s -lt 0 ] || [ -z "$pay_s" ];then
+ echo "aiten : $aiten >= $pay [1/${n_leng}]"
+ exit
+ fi
+ body_user=`echo "${aiten} : $aiten - $pay = $pay_s [1/${n_leng}]"`
+ fi
+}
+
+function card_check(){
+ data_uu=`curl -sL "$host/users/$uid/card?itemsPerPage=2000"`
+ card_check=`echo $data_uu|jq -r ".[]|select(.card == $card)"`
+ card_check_skill=`echo $card_check|jq "select(.skill == \"$skill\")"`
+ if [ -n "$card_check" ] && [ -n "$card_check_skill" ];then
+
+ echo "$body_user"
+ echo "lost, you chose the card you already have..."
+ echo "ai[model] Lv up!"
+
+ s_up=$((RANDOM % 3 + 1))
+ case `echo $((RANDOM % 4))` in
+ 0)
+ model_mode=$((model_mode + s_up))
+ json="{\"token\":\"$token\", \"model_mode\": $model_mode}"
+ echo "\"mode\": Lv${model_mode}"
+ ;;
+ 1)
+ model_attack=$((model_attack + s_up))
+ json="{\"token\":\"$token\", \"model_attack\": $model_attack}"
+ echo "\"attack\": Lv${model_attack}"
+ ;;
+ 2)
+ model_skill=$((model_skill + s_up))
+ json="{\"token\":\"$token\", \"model_skill\": $model_skill}"
+ echo "\"skill\": Lv${model_skill}"
+ ;;
+ 3)
+ model_limit=$((model_limit + s_up))
+ json="{\"token\":\"$token\", \"model_limit\": $model_limit}"
+ echo "\"burst\": Lv${model_limit}"
+ ;;
+ *)
+ model_limit=$((model_limit + s_up))
+ json="{\"token\":\"$token\", \"model_limit\": $model_limit}"
+ echo "\"burst\": Lv${model_limit}"
+ ;;
+ esac
+ tmp=`curl -X PATCH -H "Content-Type: application/json" -d "$json" -s $host/users/$uid`
+
+ card=0
+ cp=1
+ s=super
+ skill=lost
+ #echo "try again next time!"
+
+ echo "[card]"
+ echo "id : $card"
+ echo "cp : $cp"
+ echo "skill : $skill"
+ if [ "$handle" != "ai" ];then
+ tmp=`curl -X PATCH -H "Content-Type: application/json" -d "{\"token\":\"$token\", \"aiten\": $pay_s}" -s $host/users/$uid`
+ fi
+ tmp=`curl -X POST -H "Content-Type: application/json" -d "{\"owner\":$uid,\"card\":$card,\"status\":\"$s\",\"cp\":$cp,\"password\":\"$pass\",\"skill\":\"$skill\"}" -s $host/cards`
+ exit
+ fi
+}
+
+function card_pay(){
+ link=https://card.syui.ai/$username
+ text=`echo "$body_user\n$body_d"`
+ desc="[$ten]"
+ if [ "$handle" != "ai" ];then
+ tmp=`curl -X PATCH -H "Content-Type: application/json" -d "{\"token\":\"$token\", \"aiten\": $pay_s, \"model_critical\": $model_critical}" -s $host/users/$uid`
+ else
+ tmp=`curl -X PATCH -H "Content-Type: application/json" -d "{\"token\":\"$token\", \"aiten\": 10000000, \"model_critical\": $model_critical}" -s $host/users/$uid`
+ echo $tmp
+ fi
+ tmp=`curl -X POST -H "Content-Type: application/json" -d "{\"owner\":$uid,\"card\":$card,\"status\":\"$s\",\"cp\":$cp,\"password\":\"$pass\",\"skill\":\"$skill\"}" -s $host/cards`
+ echo "$text"
+ #echo "$atr reply-og \"$text\" --cid $cid --uri $uri --img $img --title \"$title\" --description \"$desc\" --link $link"
+ #tmp_atr=`$atr reply-og "$text" --cid $cid --uri $uri --img $img --title "$title" --description "$desc" --link $link`
+}
+
+card_d
+card_user
+card_check
+card_pay
diff --git a/scpt/card_tarot.zsh b/scpt/card_tarot.zsh
new file mode 100755
index 0000000..16441e8
--- /dev/null
+++ b/scpt/card_tarot.zsh
@@ -0,0 +1,37 @@
+#!/bin/zsh
+
+atr=$HOME/.cargo/bin/atr
+url_j=https://card.syui.ai/json/card.json
+tcid=$HOME/.config/atr/txt/tmp_notify_cid.txt
+
+handle=$1
+did=$2
+cid=$3
+uri=$4
+
+if [ ! -d $HOME/.config/atr/txt ];then
+ mkdir -p $HOME/.config/atr/txt
+fi
+
+case $OSTYPE in
+ darwin*)
+ alias date="/opt/homebrew/bin/gdate"
+ ;;
+esac
+
+url=https://api.syui.ai
+username=`echo $1|cut -d . -f 1`
+link=https://card.syui.ai/$username
+ran=$(($RANDOM % 10))
+
+if [ $ran -eq 1 ];then
+ uranai="今日の運勢をルーン占いでやってください。結果を120文字以内で教えてください"
+else
+ uranai="今日の運勢をタロット占いでやってください。結果を120文字以内で教えてください"
+fi
+
+body=`$atr chat "$uranai" -c`
+if $atr r "$body" -c $cid -u $uri;then
+ echo $cid >! $tcid
+fi
+exit
diff --git a/scpt/card_tarot_en.zsh b/scpt/card_tarot_en.zsh
new file mode 100755
index 0000000..aea2281
--- /dev/null
+++ b/scpt/card_tarot_en.zsh
@@ -0,0 +1,37 @@
+#!/bin/zsh
+
+atr=$HOME/.cargo/bin/atr
+url_j=https://card.syui.ai/json/card.json
+tcid=$HOME/.config/atr/txt/tmp_notify_cid.txt
+
+handle=$1
+did=$2
+cid=$3
+uri=$4
+
+if [ ! -d $HOME/.config/atr/txt ];then
+ mkdir -p $HOME/.config/atr/txt
+fi
+
+case $OSTYPE in
+ darwin*)
+ alias date="/opt/homebrew/bin/gdate"
+ ;;
+esac
+
+url=https://api.syui.ai
+username=`echo $1|cut -d . -f 1`
+link=https://card.syui.ai/$username
+ran=$(($RANDOM % 10))
+
+if [ $ran -eq 1 ];then
+ uranai="Please do a of today's rune-fortune. Tell us the result in 120 characters or less."
+else
+ uranai="Please do a of today's tarot-fortune. Tell us the result in 120 characters or less."
+fi
+
+body=`$atr chat "$uranai" -c`
+if $atr r "$body" -c $cid -u $uri;then
+ echo $cid >! $tcid
+fi
+exit
diff --git a/scpt/diffusers.zsh b/scpt/diffusers.zsh
new file mode 100755
index 0000000..b9cc437
--- /dev/null
+++ b/scpt/diffusers.zsh
@@ -0,0 +1,108 @@
+#!/bin/zsh
+
+dir=${0:a:h}
+mkdir -p $dir/png
+f=$dir/png/t.png
+f_sleep=$dir/png/sleep
+cfg=$dir/stable_diffusion_prompt.j
+cfg_did=$dir/stable_diffusion_did.txt
+opt_af=$dir/stable_diffusion_a.txt
+opt_bf=$dir/stable_diffusion_b.txt
+opt_allf=$dir/stable_diffusion_all.txt
+
+if [ ! -f $cfg_did ];then
+ touch $cfg_did
+fi
+
+did=$1
+admin=did:plc:uqzpqmrjnptsxezjx4xuh2mn
+
+if [ ! -f $cfg ];then
+ echo no file $cfg
+ exit
+fi
+
+opt_a=`echo $@|cut -d ' ' -f 2`
+opt_b=`echo $@|cut -d ' ' -f 3`
+
+#case "$opt_b" in
+# bluesky|sky|field|girl|anime|universe|earth|bird|miku|ai|yui|card|blue|cat)
+# ;;
+# *)
+# if [ -n "$opt_b" ] && [ "$did" != "$admin" ];then
+# opt_b=nyancat
+# fi
+# ;;
+#esac
+
+echo $opt_a >! $opt_af
+echo $opt_b >! $opt_bf
+echo $@ >! $opt_allf
+
+case "$opt_a" in
+ -p|p)
+ q="$opt_b , masterpiece, best quality, 8k wallpaper Highly, cinematic Lighting, cinematic Beautiful"
+ ;;
+ -t|t)
+ tag=$opt_b
+ json=`cat $cfg|jq ".[]|select(.tag == \"${tag}\")"`
+ if [ -z "$json" ] || [ -z "$tag" ];then
+ echo no tag
+ exit
+ fi
+ json=`echo $json|jq -s`
+ n=`echo $json|jq "length"`
+ n=$((RANDOM % n))
+ q=`echo $json|jq -r ".[$n].body"`
+ #m=`echo $json|jq -r ".[$n].model"`
+ ;;
+ *)
+ n=`cat $cfg|jq "length"`
+ n=$((RANDOM % n))
+ q=`cat $cfg|jq -r ".[$n].body"`
+ ;;
+esac
+
+model_s="model
+coharu
+flat2d
+pastelmix
+pvcstyle"
+model_r=$((RANDOM % `echo "$model_s"|wc -l` + 1))
+m=`echo "$model_s"|awk "NR==$model_r"`
+
+case $1 in
+ -pm)
+ m=$2
+ q=`echo $@ | cut -d ' ' -f 3-`
+ ;;
+esac
+
+if [ -z "$q" ];then
+ echo no prompt
+ exit
+fi
+if [ -z "$m" ];then
+ m=model
+fi
+
+echo $q
+echo $m
+
+function run(){
+ if [ -f $f_sleep ];then
+ rm $f_sleep
+ fi
+ ssh ue "conda activate ldm;cd ./stable-diffusion/;python safe.py \'${q}\' ${m}"
+ scp -r ue:stable-diffusion/t.png $f
+ if [ $? -ne 0 ];then
+ touch $f_sleep
+ fi
+}
+
+if [ -n "`cat $cfg_did| grep -x $did`" ] && [ "$did" != "$admin" ];then
+ rm $f
+else
+ echo "\n$did" >> $cfg_did
+ run
+fi
diff --git a/scpt/dig.zsh b/scpt/dig.zsh
new file mode 100755
index 0000000..c3cbe71
--- /dev/null
+++ b/scpt/dig.zsh
@@ -0,0 +1,7 @@
+#!/bin/zsh
+
+txt=_atproto.$1
+did=$2
+curl -sL plc.directory/$did/log |jq ".[]|.alsoKnownAs|.[]?" | grep -n .| head -n 4
+
+dig -t TXT $txt|grep "did=did:plc:"|head -n 1
diff --git a/scpt/fan_art.zsh b/scpt/fan_art.zsh
new file mode 100755
index 0000000..e2135db
--- /dev/null
+++ b/scpt/fan_art.zsh
@@ -0,0 +1,145 @@
+#!/bin/zsh
+
+url_plc="https://plc.directory/export"
+host_at=bsky.social
+url=https://plc.directory
+url_at=https://$host_at/xrpc/com.atproto.repo.listRecords
+dir=$HOME/.config/atr/txt
+file=$dir/user_list.txt
+
+opt=`echo $4|tr -d "'"`
+dir_git_card_page=$HOME/git/card.syui.ai
+
+if [ ! -d $dir_git_card_page ];then
+ mkdir -p $HOME/git
+ cd $HOME/git
+ git clone https://github.com/syui/card.syui.ai
+else
+ cd $dir_git_card_page
+ t=`git pull`
+fi
+
+file_fanart=$dir_git_card_page/public/json/fanart.json
+case $OSTYPE in
+ darwin*)
+ alias date="/opt/homebrew/bin/gdate"
+ ;;
+esac
+created_at=`date --iso-8601=seconds`
+
+#if [ -z "$1" ] || [ -z "$2" ] || [ -z "$3" ];then
+# exit
+#fi
+
+function fan_art_search() {
+ k="aifanart"
+ url="search.bsky.social/search/posts?q="
+ t=`curl -sL "${url}${k}"|jq ".[]|select(.post.text == \"$k\")"`
+ #n=`curl -sL "${url}${k}"|jq length`
+ n=$((n - 1))
+ for ((i=0;i<=$n;i++))
+ do
+ did=`curl -sL "${url}${k}"|jq -r ".[$i]|.user.did"`
+ handle=`curl -sL https://plc.directory/$did|jq -r ".alsoKnownAs|.[]"|cut -d / -f 3-`
+ if [ -z "$handle" ];then
+ continue
+ fi
+ tid=`curl -sL "${url}${k}"|jq -r ".[$i]|.tid"|cut -d / -f 2`
+ http=https://staging.bsky.app/profile/$handle/post/$tid
+ echo $http
+ done
+}
+
+if [ "$1" = "-s" ];then
+ fan_art_search
+ exit
+fi
+
+if ! echo $1|grep "." >/dev/null 2>&1;then
+ echo "ex : user syui.bsky.social"
+ exit
+fi
+
+if ! echo $2|grep "did:plc:" >/dev/null 2>&1;then
+ echo "ex : user did"
+ exit
+fi
+
+if [ "$3" = "-l" ];then
+ curl -sL card.syui.ai/json/fanart.json|jq -r ".[]|.author, .link"
+ exit
+fi
+
+if ! echo $3|grep -e "bsky.app/profile/" -e "nostter.vercel.app" >/dev/null 2>&1;then
+ echo "please url : bsky.app/profile/$1/post/xxx"
+ exit
+fi
+
+if ! echo $4|grep -e "https://av-cdn.bsky.app/img" -e "https://nostr.build/i/" >/dev/null 2>&1;then
+ if [ "$opt" != "-d" ];then
+ echo "please url : av-cdn.bsky.social/img"
+ exit
+ fi
+fi
+
+function fan_art(){
+ add=$1
+ did=$2
+ if echo $3|grep "nostter.vercel.app" >/dev/null 2>&1;then
+ link=`echo $3|cut -d / -f 1-4`
+ else
+ link=$3
+ fi
+ img=`echo $4|tr -d "'"`
+ author=`echo $3|cut -d / -f 5`
+ if [ -z "$author" ];then
+ author="nostr"
+ fi
+ cd $dir_git_card_page
+ check_null=`cat $file_fanart|jq ".[]|select(.img == \"$img\")"`
+ if [ -n "$check_null" ];then
+ echo registered
+ exit
+ fi
+ echo `cat $file_fanart` "[{\"add\":\"$add\",\"link\":\"$link\",\"author\":\"$author\",\"img\":\"$img\",\"created_at\":\"$created_at\",\"did\":\"$did\"}]" | jq -s add >! $file_fanart.back
+ if cat $file_fanart.back|jq . >/dev/null 2>&1;then
+ mv $file_fanart.back $file_fanart
+ git add $file_fanart
+ git commit -m "add fanart"
+ git push -u origin main -f
+ echo add fanart, thx $1
+ echo "author : $author"
+ echo "it will take some time to deploy"
+ fi
+}
+
+function fan_art_delete(){
+ add=$1
+ did=$2
+ link=$3
+ cd $dir_git_card_page
+ check_null=`cat $file_fanart|jq ".[]|select(.img == \"$img\")"`
+ if [ -n "$check_null" ];then
+ echo registered
+ exit
+ fi
+ cat $file_fanart|jq ".[]|select(.link == \"$link\")|= .+{\"delete\":true,\"delete-did\":\"$did\"}"|jq -s >! $file_fanart.back
+ if cat $file_fanart.back|jq . >/dev/null 2>&1;then
+ mv $file_fanart.back $file_fanart
+ git add $file_fanart
+ git commit -m "delete fanart"
+ git push -u origin main -f
+ echo delete fanart, thx $1
+ echo "delete-did : $did"
+ echo "it will take some time to deploy"
+ fi
+}
+
+if [ "$opt" = "-d" ];then
+ fan_art_delete $1 $2 $3
+ exit
+fi
+
+fan_art $1 $2 $3 $4
+
+exit
diff --git a/scpt/follow_all.zsh b/scpt/follow_all.zsh
new file mode 100755
index 0000000..f5b0724
--- /dev/null
+++ b/scpt/follow_all.zsh
@@ -0,0 +1,75 @@
+#!/bin/zsh
+
+d=$HOME/.config/atr/txt
+mkdir -p $d
+unset cursor
+
+function page(){
+ s=$1
+ if [ "$s" = "ers" ];then
+ opt="-w"
+ elif [ "$s" = "s" ];then
+ opt="-s"
+ fi
+
+ f=$d/follow${s}_${ii}.json
+ echo $f
+ if [ -n "$cursor" ];then
+ if [ ! -f $f ];then
+ atr follow $opt -c $cursor| jq . >! $f
+ else
+ echo no download
+ fi
+ else
+ if [ ! -f $f ];then
+ atr follow $opt| jq . >! $f
+ else
+ echo no download
+ fi
+ fi
+ cursor=`cat $f|jq -r .cursor`
+
+ echo "------------------------------"
+ echo $cursor
+ echo "------------------------------"
+ n=`cat $f|jq ".follow${s}|length"`
+ n=`expr $n - 1`
+
+ for ((i=0;i<=$n;i++))
+ do
+ handle=`cat $f|jq -r ".follow${s}|.[$i].handle"`
+ did=`cat $f|jq -r ".follow${s}|.[$i].did"`
+ flg=`cat $f|jq -r ".follow${s}|.[$i].viewer.following"`
+ flb=`cat $f|jq -r ".follow${s}|.[$i].viewer.followedBy"`
+ if [ "$flg" = "null" ];then
+ echo following
+ echo $flb
+ echo "follow : $handle"
+ echo "atr follow $did"
+ atr follow $did
+ fi
+ if [ "$flb" = "null" ];then
+ rkey=${flg##*/}
+ echo followedBy
+ echo $flg
+ echo "unfollow : $handle"
+ echo "atr follow $did -d $rkey"
+ atr follow $did -d $rkey
+ fi
+ done
+}
+
+ii=1
+while [ "$cursor" != "null" ]
+do
+ page ers $ii
+ ii=`expr $ii + 1`
+done
+
+unset cursor
+ii=1
+while [ "$cursor" != "null" ]
+do
+ page s $ii
+ ii=`expr $ii + 1`
+done
diff --git a/scpt/full_moon.j b/scpt/full_moon.j
new file mode 100644
index 0000000..7f58f2f
--- /dev/null
+++ b/scpt/full_moon.j
@@ -0,0 +1,126 @@
+[
+{"data":"20231003"},
+{"data":"20230107"},
+{"data":"20230122"},
+{"data":"20230206"},
+{"data":"20230220"},
+{"data":"20230307"},
+{"data":"20230322"},
+{"data":"20230406"},
+{"data":"20230420"},
+{"data":"20230506"},
+{"data":"20230520"},
+{"data":"20230604"},
+{"data":"20230618"},
+{"data":"20230703"},
+{"data":"20230718"},
+{"data":"20230802"},
+{"data":"20230816"},
+{"data":"20230831"},
+{"data":"20230915"},
+{"data":"20230929"},
+{"data":"20231015"},
+{"data":"20231029"},
+{"data":"20231113"},
+{"data":"20231127"},
+{"data":"20231213"},
+{"data":"20231227"},
+{"data":"20240111"},
+{"data":"20240126"},
+{"data":"20240210"},
+{"data":"20240224"},
+{"data":"20240310"},
+{"data":"20240325"},
+{"data":"20240409"},
+{"data":"20240424"},
+{"data":"20240508"},
+{"data":"20240523"},
+{"data":"20240606"},
+{"data":"20240622"},
+{"data":"20240706"},
+{"data":"20240721"},
+{"data":"20240804"},
+{"data":"20240820"},
+{"data":"20240903"},
+{"data":"20240918"},
+{"data":"20241003"},
+{"data":"20241017"},
+{"data":"20241101"},
+{"data":"20241116"},
+{"data":"20241201"},
+{"data":"20241215"},
+{"data":"20241231"},
+{"data":"20250114"},
+{"data":"20250129"},
+{"data":"20250212"},
+{"data":"20250228"},
+{"data":"20250314"},
+{"data":"20250329"},
+{"data":"20250413"},
+{"data":"20250428"},
+{"data":"20250513"},
+{"data":"20250527"},
+{"data":"20250611"},
+{"data":"20250625"},
+{"data":"20250711"},
+{"data":"20250725"},
+{"data":"20250809"},
+{"data":"20250823"},
+{"data":"20250908"},
+{"data":"20250922"},
+{"data":"20251007"},
+{"data":"20251021"},
+{"data":"20251105"},
+{"data":"20251120"},
+{"data":"20251205"},
+{"data":"20251220"},
+{"data":"20260103"},
+{"data":"20260119"},
+{"data":"20260202"},
+{"data":"20260217"},
+{"data":"20260303"},
+{"data":"20260319"},
+{"data":"20260402"},
+{"data":"20260417"},
+{"data":"20260502"},
+{"data":"20260517"},
+{"data":"20260531"},
+{"data":"20260615"},
+{"data":"20260630"},
+{"data":"20260714"},
+{"data":"20260729"},
+{"data":"20260813"},
+{"data":"20260828"},
+{"data":"20260911"},
+{"data":"20260927"},
+{"data":"20261011"},
+{"data":"20261026"},
+{"data":"20261109"},
+{"data":"20261124"},
+{"data":"20261209"},
+{"data":"20261224"},
+{"data":"20260103"},
+{"data":"20260119"},
+{"data":"20260202"},
+{"data":"20260217"},
+{"data":"20260303"},
+{"data":"20260319"},
+{"data":"20260402"},
+{"data":"20260417"},
+{"data":"20260502"},
+{"data":"20260517"},
+{"data":"20260531"},
+{"data":"20260615"},
+{"data":"20260630"},
+{"data":"20260714"},
+{"data":"20260729"},
+{"data":"20260813"},
+{"data":"20260828"},
+{"data":"20260911"},
+{"data":"20260927"},
+{"data":"20261011"},
+{"data":"20261026"},
+{"data":"20261109"},
+{"data":"20261124"},
+{"data":"20261209"},
+{"data":"20261224"}]
diff --git a/scpt/invite.zsh b/scpt/invite.zsh
new file mode 100755
index 0000000..91d83af
--- /dev/null
+++ b/scpt/invite.zsh
@@ -0,0 +1,14 @@
+#!/bin/zsh
+
+admin_password=`cat $HOME/.config/atr/api_card.json|jq -r .pds_admin_password`
+if [ -n "$1" ];then
+ host=$1
+else
+ host=syu.is
+fi
+url=https://$host/xrpc/com.atproto.server.createInviteCode
+json="{\"useCount\":30}"
+echo $url
+echo $admin_password
+#curl -X POST -u admin:${admin_password} -H "Content-Type: application/json" -d "$json" -sL $url | jq -r .code
+curl -X POST -u admin:${admin_password} -H "Content-Type: application/json" -d "$json" -sL $url
diff --git a/scpt/like_reply.zsh b/scpt/like_reply.zsh
new file mode 100755
index 0000000..7250914
--- /dev/null
+++ b/scpt/like_reply.zsh
@@ -0,0 +1,40 @@
+#!/bin/zsh
+
+atr=$HOME/.cargo/bin/atr
+host=api.syui.ai
+data=`curl -sL "$host/users?itemsPerPage=3000"|jq ".|sort_by(.like)|reverse|.[]|select(.like_rank > 1)"`
+tmp=`echo $data|jq -s`
+n=`echo $tmp|jq "length"`
+ran=$(($RANDOM % n - 1))
+echo $ran
+
+function did() {
+ user=`echo $tmp|jq -r ".[$ran].username"`
+ did=`echo $tmp|jq -r ".[$ran].did"`
+}
+
+function tl(){
+ did
+ cid=`$atr f $did|jq -r ".records|.[0].cid"`
+ uri=`$atr f $did|jq -r ".records|.[0].uri"`
+ text=`$atr f $did|jq -r ".records|.[0].value.text"`
+ echo $cid
+ echo $uri
+ echo $text
+ find=`echo $text|grep "card.syui.ai"`
+ find_t=`echo $text|grep "ten : "`
+ if [ -n "$find" ] || [ -n "$find_t" ];then
+ exit
+ fi
+ text=`$atr chat "$text" -c`
+ echo $text
+}
+
+function reply(){
+ tl
+ if [ -n "$text" ] && [ -n "$uri" ];then
+ $atr r "$text" -u $uri -c $cid
+ fi
+}
+
+reply
diff --git a/scpt/mastodon.zsh b/scpt/mastodon.zsh
new file mode 100755
index 0000000..12cf282
--- /dev/null
+++ b/scpt/mastodon.zsh
@@ -0,0 +1,390 @@
+#!/bin/zsh
+
+case $OSTYPE in
+ darwin*)
+ alias date="/opt/homebrew/bin/gdate"
+ ;;
+esac
+
+PATH=$PATH:$HOME/.cargo/bin
+d=$HOME/.config/msr
+f=$HOME/.config/msr/notify_log.txt
+card=$HOME/.config/atr/scpt/api_card.zsh
+
+if [ ! -d $d ];then
+ mkdir -p $d
+fi
+
+j=`$HOME/.cargo/bin/msr bot`
+
+tmp=`echo $j|jq length`
+if [ $tmp -eq 0 ];then
+ exit
+fi
+
+data_id=`echo $j|jq -r ".id"`
+n=`echo $data_id|wc -l`
+data_mid=`echo $j|jq -r ".mid"`
+data_text=`echo $j|jq -r ".body"`
+data_url=`echo $j|jq -r ".url"`
+data_server=`echo $j|jq -r ".url"|cut -d / -f 3`
+data_user=`echo $j|jq -r ".user"`
+
+function user_create() {
+ if [ -n "$ap" ] && [ -n "$url" ];then
+ data=`curl -X POST -H "Content-Type: application/json" -d "{\"username\":\"$ap\",\"password\":\"$pass\",\"did\":\"$url\",\"next\":\"$nd_o\",\"updated_at\":\"$updated_at_o\"}" -sL "$host/users"`
+ uid=`echo $data|jq -r ".id"`
+ echo id $uid
+ else
+ echo error user create
+ fi
+}
+
+function card_env() {
+ card_url=https://card.syui.ai
+ host=https://api.syui.ai
+ d=`date +"%Y%m%d"`
+ nd=`date +"%Y%m%d" -d '1 day'`
+ nd_o=`date +"%Y%m%d" -d '-1 day'`
+ updated_at_o=`date --iso-8601=seconds -d '-1 day'`
+ username=`echo $1|cut -d . -f 1`
+ url_user_all="$host/users?itemsPerPage=2000"
+ pass=`cat $HOME/.config/atr/api_card.json|jq -r .password`
+ token=`cat $HOME/.config/atr/api_card.json|jq -r .token`
+ data_tmp=`curl -sL $url_user_all`
+ data=`echo "$data_tmp"|jq ".[]|select(.username == \"$ap\")"`
+ if [ -z "$data" ];then
+ data=`echo "$data_tmp"|jq ".[]|select(.username == \"$username\")"`
+ fi
+ if [ -z "$data" ];then
+ echo no $username
+ user_create
+ fi
+ username=`echo $data|jq -r .username`
+ data_did_check=`echo $data|jq -r .did`
+ uid=`echo $data|jq -r ".id"`
+ delete=`echo $data|jq -r ".delete"`
+ mastodon=`echo $data|jq -r ".mastodon"`
+ did=`echo $data|jq -r ".did"`
+ handle_change=`echo $data|jq -r ".handle"`
+ raid_at=`echo $data|jq -r .raid_at`
+ raid_at=`date -d "$raid_at" +"%Y%m%d"`
+ raid_at_n=`date --iso-8601=seconds`
+ server_at=`echo $data|jq -r .server_at`
+ server_at=`date -d "$server_at" +"%Y%m%d"`
+ server_at_n=`date --iso-8601=seconds`
+
+ updated_at=`echo $data|jq -r .updated_at`
+ updated_at=`date -d "$updated_at" +"%Y%m%d"`
+ updated_at_n=`date --iso-8601=seconds`
+ next=`echo $data|jq -r .next`
+ aiten=`echo $data|jq -r .aiten`
+ ten_su=`echo $data|jq -r .ten_su`
+ if [ "$a_team" = false ];then
+ echo "bsky @${username}"
+ echo "no activitypub-mode"
+ return 0
+ fi
+ echo "$card_url/$username"
+}
+
+function card_day() {
+ card_env $1
+ if [ $next -gt $d ] || [ "$updated_at" = "$d" ];then
+ echo limit 1 day
+ return 0
+ fi
+
+ tmp=`curl -X POST -H "Content-Type: application/json" -d "{\"owner\":$uid,\"password\":\"$pass\"}" -sL $host/cards`
+ card=`echo $tmp|jq -r .card`
+ card_url=`echo $tmp|jq -r .url`
+ cp=`echo $tmp|jq -r .cp`
+ skill=`echo $tmp|jq -r .skill`
+ if [ -z "$card" ];then
+ tmp=`curl -X POST -H "Content-Type: application/json" -d "{\"owner\":$uid,\"password\":\"$pass\"}" -sL $host/cards`
+ card=`echo $tmp|jq -r .card`
+ card_url=`echo $tmp|jq -r .url`
+ cp=`echo $tmp|jq -r .cp`
+ skill=`echo $tmp|jq -r .skill`
+ fi
+
+ echo "[card]"
+ echo id : $card
+ echo cp : $cp
+ if [ "$skill" != "normal" ];then
+ echo skill : $skill
+ fi
+ t=`echo $tmp|jq -r .card`
+ tmp=`curl -X PATCH -H "Content-Type: application/json" -d "{\"next\":\"$nd\",\"token\":\"$token\"}" -sL $host/users/$uid`
+}
+
+function card_b() {
+ card_env $1
+ if [ $updated_at -ge $d ] || [ "$updated_at" = "$d" ];then
+ echo "limit battle"
+ return 0
+ fi
+ id_all=`curl -sL "$host/users?itemsPerPage=2000"|jq ".[]|.id"`
+ id_n=`echo "$id_all"|wc -l`
+ id_nr=$(($RANDOM % $id_n))
+ r=`echo "$id_all"| awk "NR==$id_nr"`
+
+ if [ "$id_all" = "null" ];then
+ r=2
+ fi
+
+ if [ 0 -eq $id_n ] || [ 0 -eq $r ];then
+ r=2
+ fi
+ if [ -z "$id_n" ] || [ -z "$r" ];then
+ r=2
+ fi
+
+ data_uu=`curl -sL "$host/users/$uid/card?itemsPerPage=2000"`
+ data_u=`curl -sL "$host/users/$r/card?itemsPerPage=2000"`
+
+ tt=`echo $data_uu|jq ".[].cp"|sort -n -r`
+ ttt=`echo $data_u|jq ".[].cp"|sort -n -r`
+
+ #echo $data_u|jq ".[].cp"
+ nl=`echo $data_uu|jq length`
+ if [ $nl -ge 3 ];then
+ rs=$(($RANDOM % 3 + 1))
+ else
+ rs=$(($RANDOM % $nl + 1))
+ fi
+
+ #echo $data_u|jq ".[].cp"
+ nll=`echo $data_u|jq length`
+ rss=$(($RANDOM % $nll))
+ if [ $nll -ge 3 ];then
+ rss=$(($RANDOM % 3 + 1))
+ else
+ rss=$(($RANDOM % $nll + 1))
+ fi
+ cp_i=`echo $tt |awk "NR==$rs"`
+ cp_b=`echo $ttt |awk "NR==$rss"`
+ if [ -z "$cp_i" ];then
+ echo "null error"
+ return 0
+ fi
+ if [ -z "$cp_b" ];then
+ echo "null error"
+ return 0
+ fi
+
+ echo $tt | sed -n 1,3p
+ echo "---"
+ echo id : $r
+ echo $ttt | sed -n 1,3p
+ echo "---"
+ echo $cp_i vs $cp_b
+
+ if [ $cp_i -gt $cp_b ];then
+ echo "win!"
+ else
+ echo loss
+ fi
+
+ if [ $cp_i -gt $cp_b ];then
+ tmp=`curl -X POST -H "Content-Type: application/json" -d "{\"owner\":$uid,\"password\":\"$pass\"}" -sL $host/cards`
+ card=`echo $tmp|jq -r .card`
+ card_url=`echo $tmp|jq -r .url`
+ cp=`echo $tmp|jq -r .cp`
+ if [ -z "$card" ];then
+ tmp=`curl -X POST -H "Content-Type: application/json" -d "{\"owner\":$uid,\"password\":\"$pass\"}" -sL $host/cards`
+ card=`echo $tmp|jq -r .card`
+ card_url=`echo $tmp|jq -r .url`
+ cp=`echo $tmp|jq -r .cp`
+ fi
+ echo "[card]"
+ echo id : $card
+ echo cp : $cp
+ t=`echo $tmp|jq -r .card`
+ fi
+
+ tmp=`curl -X PATCH -H "Content-Type: application/json" -d "{\"updated_at\":\"$updated_at_n\",\"token\":\"$token\"}" -sL $host/users/$uid`
+}
+
+function card_s(){
+ card_env $1
+ username=$1
+ a_team=mastodon
+ b_team=bluesky
+ rr=`date +"%H%M"`
+ f_server=$HOME/.config/atr/txt/card_server.txt
+ f_server_user_at=$HOME/.config/atr/txt/card_server_user_at.txt
+ f_server_user_ap=$HOME/.config/atr/txt/card_server_user_ap.txt
+ f_server_ap=$HOME/.config/atr/txt/card_server_ap.txt
+ f_server_at=$HOME/.config/atr/txt/card_server_at.txt
+ f_server_start_time=$HOME/.config/atr/txt/card_server_start_time.txt
+
+ if [ `cat $f_server` -eq 1 ];then
+ echo shutdown server battle
+ exit
+ fi
+
+ if [ ! -f $f_server_start_time ];then
+ server_start=`date +"%H%M"`
+ echo "$server_start" >! $f_server_start_time
+ echo 0 >! $f_server_at
+ echo 0 >! $f_server_ap
+ fi
+
+ cp_ap=`cat $f_server_ap`
+ cp_at=`cat $f_server_at`
+
+ if [ -f $f_server_start_time ];then
+ server_start=`cat $f_server_start_time`
+ server_time=`date -d "$server_start 30 min" +"%H%M"`
+ fi
+
+ #echo "time:`date -d "$server_time" +"%H:%M"`"
+
+ if [ $server_at -ge $d ] || [ "$server_at" = "$d" ];then
+ echo "limit battle"
+ exit
+ fi
+
+ data_uu=`curl -sL "$host/users/$uid/card?itemsPerPage=2000"`
+ fav_card=`echo $data_uu|jq "sort_by(.cp)|reverse|.[0]"`
+
+ if [ ! -f $f_server_user_at ];then
+ echo start >> $f_server_user_at
+ fi
+ if [ ! -f $f_server_user_ap ];then
+ echo start >> $f_server_user_ap
+ fi
+ commit_user_at=`cat $f_server_user_at|tail -n 1`
+ commit_user_ap=`cat $f_server_user_ap|tail -n 1`
+ echo $username >> $f_server_user_ap
+
+ cp_i=`echo $fav_card|jq -r ".cp"`
+ cp_ii=$cp_i
+ card_name=`echo $fav_card|jq -r ".card"`
+ card_status=`echo $fav_card|jq -r ".status"`
+ card_skill=`echo $fav_card|jq -r ".skill"`
+ skill=$card_skill
+
+ if [ "$skill" = "critical" ];then
+ cp_i=$((cp_i + cp_i))
+ fi
+ if [ "$skill" = "dragon" ];then
+ cp_i=$((cp_i * 3))
+ fi
+ if [ "$skill" = "yui" ];then
+ cp_i=$((cp_i + ten_su))
+ fi
+
+ cp_all=$((cp_i + cp_ap))
+
+ # サーバーバトルの還元期間
+ #cp_all=$((cp_ap - cp_i))
+
+ if [ "$skill" = "critical" ];then
+ echo "⚡ $cp_i ---> $cp_ap"
+ elif [ "$skill" = "post" ];then
+ cp_post=`$HOME/.cargo/bin/atr pro $1 -p`
+ cp_i=$((cp_i + cp_post))
+ cp_all=$((cp_i + cp_ap))
+ echo "🔥 $cp_i ---> $cp_ap"
+ elif [ "$skill" = "luck" ];then
+ echo "✨ $cp_i ---> $cp_ap"
+ elif [ "$skill" = "dragon" ];then
+ echo "🐉 $cp_i ---> $cp_ap"
+ elif [ "$skill" = "yui" ];then
+ echo "🔅 $cp_i ---> $cp_ap"
+ else
+ echo "✧ $cp_i ---> $cp_ap"
+ fi
+
+ echo $cp_all >! $f_server_ap
+ echo
+ echo "[${a_team}] ${cp_all}"
+ echo "┣ @${username}"
+ echo "┗ @${commit_user_ap}"
+ echo
+ echo "┏━ vs ━┛"
+ echo
+ echo "[${b_team}] ${cp_at}"
+ echo "┗ @${commit_user_at}"
+ #echo "[log]"
+ #echo "${cp_ap}/$a_team --> ${commit_user_ap}"
+ #echo "${commit_user_at} <-- ${cp_at}/$b_team"
+ #echo "${username} --> $cp_all/$a_team"
+
+ if [ $rr -gt $server_time ];then
+ #echo "----"
+ #echo "timeup!"
+ echo 1 >! $f_server
+ rm $f_server_start_time
+ rm $f_server_at
+ rm $f_server_ap
+ mv $f_server_user_at $f_server_user_at.back
+ mv $f_server_user_ap $f_server_user_ap.back
+ fi
+
+ echo "----"
+ cp_plus=$(($RANDOM % 100 + 1))
+ cp=$((cp_ii + cp_plus))
+ body="level up!"
+ echo "${body} ✧${cp}(+${cp_plus})"
+ tmp=`curl -sL -X PATCH -H "Content-Type: application/json" -d "{\"cp\":$cp,\"token\":\"$token\"}" $host/cards/$fav`
+ tmp=`curl -X PATCH -H "Content-Type: application/json" -d "{\"server_at\":\"$server_at_n\", \"token\":\"$token\"}" -s $host/users/$uid`
+}
+
+function mastodon_notify() {
+ for ((i=1;i<=$n;i++))
+ do
+ mid=`echo $data_mid|awk "NR==$i"`
+ check=`cat $f|grep $mid`
+ if [ -n "$check" ];then
+ echo ok
+ continue
+ fi
+
+ url=`echo $data_url|awk "NR==$i"`
+ user=`echo $data_user|awk "NR==$i"`
+ text=`echo $data_text|awk "NR==$i"`
+ server=`echo $data_server|awk "NR==$i"`
+ ap="@${user}@${server}"
+
+ if [ -f "$GOPATH/bin/pup" ];then
+ text=`echo ${text}|pup "p text{}"|tail -n 1|cut -d " " -f 2-|tr -d '"'|sed -e "s/'/'/g" -e 's/"/"/g'`
+ else
+ text=`echo ${text}|sed -e 's/<[^>]*>//g'|cut -d " " -f 2-|tr -d '"'|sed -e "s/'/'/g" -e 's/"/"/g'`
+ fi
+
+ echo $text
+ com=`echo $text|cut -d " " -f 1`
+ opt=`echo $text|cut -d " " -f 2`
+
+ if [ "card" = "$com" ] || [ "/card" = "$com" ];then
+
+ if [ "b" = "$opt" ] || [ "-b" = "$opt" ];then
+ text=`card_b $user`
+ echo $user $text
+ msr cn "@${user}@${server} `echo $text`" -mm $mid
+ echo $mid >> $f
+ continue
+ fi
+
+ if [ "s" = "$opt" ] || [ "-s" = "$opt" ];then
+ text=`card_s $user`
+ echo $user $text
+ msr cn "@${user}@${server} `echo $text`" -mm $mid
+ echo $mid >> $f
+ continue
+ fi
+
+ text=`card_day $user`
+ echo $user $text
+ msr cn "@${user}@${server} `echo $text`" -mm $mid
+ echo $mid >> $f
+
+ fi
+
+ done
+}
+
+mastodon_notify
diff --git a/scpt/nyancat.zsh b/scpt/nyancat.zsh
new file mode 100755
index 0000000..f1befdc
--- /dev/null
+++ b/scpt/nyancat.zsh
@@ -0,0 +1,107 @@
+#!/bin/zsh
+
+case $OSTYPE in
+ darwin*)
+ alias date="/opt/homebrew/bin/gdate"
+ ;;
+esac
+
+atr=$HOME/.cargo/bin/atr
+host=https://api.syui.ai
+host_card=https://card.syui.ai/json/card.json
+pass=`cat $HOME/.config/atr/api_card.json|jq -r .password`
+token=`cat $HOME/.config/atr/api_card.json|jq -r .token`
+handle=$1
+username=`echo $1|cut -d . -f 1`
+did=$2
+cid=$3
+uri=$4
+opt=$5
+pay=100
+eat_file=$HOME/.config/atr/txt/nyancat_eat.txt
+ran=`echo $(($RANDOM % 15))`
+
+eat="🍺☕ 🍵 🍶 🍼🍻 🍸 🍹 🍷 🍴 🍕 🍔 🍟 🍗 🍖 🍝🍛 🍤 🍱 🍣 🍥 🍙 🍘 🍚 🍜 🍲 🍢🍡 🍳 🍞 🍩 🍮 🍦 🍨 🍧 🎂 🍰 🍪🍫 🍬 🍭 🍯 🍎 🍏 🍊 🍋 🍒 🍇 🍉🍓 🍑 🍈 🍌 🍐 🍍 🍠 🍆 🍅 🌽"
+
+eat=`echo $eat|grep "$opt"`
+
+
+if [ -z "$eat" ];then
+ ran=`echo $(($RANDOM % 3))`
+ if [ $ran -eq 1 ];then
+ body="| キュー"
+ elif [ $ran -eq 2 ];then
+ body="| ミュー"
+ else
+ body="| ピャー"
+ fi
+ echo "uncooked"
+ echo "A__A
+|・ㅅ・ |
+|っ c|
+$body
+ U ̄ ̄U"
+exit
+fi
+
+echo "| ${opt} |" >> $eat_file
+
+body_d="A__A
+|・ㅅ・ |
+|っ c|
+`tac $eat_file|grep -v '| |'`
+ U ̄ ̄U"
+
+function card_user(){
+ all_data=`curl -sL "$host/users?itemsPerPage=3000"`
+ data=`echo $all_data|jq ".[]|select(.username == \"$username\")"`
+ uid=`echo $data|jq -r .id`
+ aiten=`echo $data|jq -r .aiten`
+ like=`echo $data|jq -r .like`
+ ten_data=`echo $all_data|jq ".|sort_by(.aiten)|reverse|.[]|select(.aiten >= $pay)"`
+ if [ -z "$ten_data" ] || [ -z "$aiten" ] || [ $aiten -le $pay ];then
+ echo "aiten : $aiten >= $pay"
+ echo "failed to buy food"
+ echo "please : @yui.syui.ai /ten"
+ exit
+ else
+ pay_s=$((aiten - pay))
+ like_s=$((like + 1))
+ if [ $pay_s -le 0 ] || [ -z "$pay_s" ];then
+ echo "aiten : $aiten >= $pay"
+ echo "failed to buy food"
+ echo "please : @yui.syui.ai /ten"
+ exit
+ fi
+ body_user=`echo "${aiten} : $aiten - $pay = $pay_s"`
+ fi
+}
+
+function card_like() {
+ if [ $like -gt 3 ] && [ $ran -eq 1 ];then
+ echo "happy!"
+ su=`cat $eat_file|wc -l`
+ su=$((su * 50))
+ pay_s=$((aiten + su))
+ body_user=`echo "${aiten} : $aiten + $su = $pay_s"`
+ rm $eat_file
+ echo "| ${opt} |" >> $eat_file
+ body_d="A__A
+|・ㅅ・ |
+|っ c|
+`tac $eat_file|grep -v '| |'`
+ U ̄ ̄U"
+ fi
+}
+
+function card_pay(){
+ link=https://card.syui.ai/$username
+ text=`echo "$body_user\n$body_d"`
+ desc="[$ten]"
+ tmp=`curl -X PATCH -H "Content-Type: application/json" -d "{\"like\":$like_s,\"token\":\"$token\", \"aiten\": $pay_s}" -s $host/users/$uid`
+ echo "$text"
+}
+
+card_user
+card_like
+card_pay
diff --git a/scpt/nyancat_post.zsh b/scpt/nyancat_post.zsh
new file mode 100755
index 0000000..9d75b0d
--- /dev/null
+++ b/scpt/nyancat_post.zsh
@@ -0,0 +1,36 @@
+#!/bin/zsh
+
+case $OSTYPE in
+ darwin*)
+ alias date="/opt/homebrew/bin/gdate"
+ ;;
+esac
+
+atr=$HOME/.cargo/bin/atr
+host_card=https://card.syui.ai/json/card.json
+pass=`cat $HOME/.config/atr/api_card.json|jq -r .password`
+token=`cat $HOME/.config/atr/api_card.json|jq -r .token`
+eat_file=$HOME/.config/atr/txt/nyancat_eat.txt
+eat=`cat $eat_file|awk "NR==1"`
+
+if [ -z "$eat" ];then
+ exit
+fi
+
+body_d="thx!
+A__A
+|・ㅅ・ |
+|っ c|
+`cat $eat_file|awk "NR==1"`
+ U ̄ ̄U"
+
+host=https://api.syui.ai
+data=`curl -sL "$host/users?itemsPerPage=3000"|jq ".[]|select(.like >= 10)"`
+tmp=`echo $data|jq -s`
+n=`echo $tmp|jq "length"`
+ran=$(($RANDOM % n - 1))
+echo $ran
+user=`echo $tmp|jq -r ".[$ran].username"`
+did=`echo $tmp|jq -r ".[$ran].did"`
+echo $atr @ $did -p "`echo $body_d`"
+$atr @ $did -p "`echo $body_d`"
diff --git a/scpt/openai_like.zsh b/scpt/openai_like.zsh
new file mode 100755
index 0000000..7eff176
--- /dev/null
+++ b/scpt/openai_like.zsh
@@ -0,0 +1,49 @@
+#!/bin/zsh
+
+handle=$1
+did=$2
+text=$3
+
+atr=$HOME/.cargo/bin/atr
+url_j=https://card.syui.ai/json/card.json
+handle=$1
+did=$2
+cid=$3
+uri=$4
+
+case $OSTYPE in
+ darwin*)
+ alias date="/opt/homebrew/bin/gdate"
+ ;;
+esac
+
+url=https://api.syui.ai
+username=`echo $1|cut -d . -f 1`
+link=https://card.syui.ai/$username
+uid=`curl -sL "$url/users?itemsPerPage=2000"|jq ".[]|select(.username == \"$username\")"|jq -r .id`
+echo $uid
+
+data=`curl -sL "$url/users/$uid"`
+like_old=`echo $data|jq -r .like`
+
+nolike=$(($RANDOM % 30))
+like=$(($RANDOM % 10))
+like_at=`date --iso-8601=seconds`
+token=`cat $HOME/.config/atr/api_card.json|jq -r .token`
+
+echo nolike $nolike
+echo like $like
+
+#if [ $like_old -eq 100 ];then
+# $atr follow $did
+# like=$((1 + like_old))
+# curl -X PATCH -H "Content-Type: application/json" -d "{\"token\":\"$token\", \"like\": $like}" -s $url/users/$uid
+#fi
+
+if { [ $like -eq 1 ] && echo $text|grep -e "ありがとう" -e "うれしい" } || [ $nolike -eq 1 ];then
+ echo ok
+ #$atr @ $handle -p "♡"
+ like=$((1 + like_old))
+ curl -X PATCH -H "Content-Type: application/json" -d "{\"token\":\"$token\", \"like\": $like}" -s $url/users/$uid
+fi
+exit
diff --git a/scpt/openai_like_bot.zsh b/scpt/openai_like_bot.zsh
new file mode 100755
index 0000000..02408ec
--- /dev/null
+++ b/scpt/openai_like_bot.zsh
@@ -0,0 +1,70 @@
+#!/bin/zsh
+
+atr=$HOME/.cargo/bin/atr
+url=https://api.syui.ai
+
+token=`cat $HOME/.config/atr/api_card.json|jq -r .token`
+
+if [ "$2" = "reset" ];then
+ echo reset : $1
+ username=`echo $1|cut -d . -f 1`
+ uid=`curl -sL "$url/users?itemsPerPage=3000"|jq ".[]|select(.username == \"$username\")"|jq -r .id`
+ like=0
+ tmp=`curl -X PATCH -H "Content-Type: application/json" -d "{\"like\":\"$like\", \"token\":\"$token\"}" -s $url/users/$uid`
+ exit
+fi
+
+s=$((RANDOM % 5))
+json=`curl -sL "https://api.syui.ai/users?itemsPerPage=3000"|jq "sort_by(.like)|reverse|.[$s]"`
+
+case $OSTYPE in
+ darwin*)
+ alias date="/opt/homebrew/bin/gdate"
+ ;;
+esac
+
+username=`echo $json|jq -r .username`
+
+if [ "$username" = "ai" ] || [ "$username" = "yui" ];then
+ exit
+fi
+did=`echo $json|jq -r .did`
+link=https://card.syui.ai/$username
+uid=`echo $json|jq -r .id`
+
+data=`curl -sL "$url/users/$uid"`
+like_old=`echo $data|jq -r .like`
+like_rank=`echo $json|jq -r .like_rank`
+like_rank_new=$((like_rank + 1))
+
+echo $data
+
+#test
+if [ "$1" = "-t" ];then
+ echo $json
+ did=did:plc:uqzpqmrjnptsxezjx4xuh2mn
+ like_old=6
+fi
+
+if [ $like_old -ge 100 ] && [ $like_rank -eq 2 ];then
+ text=`$atr chat "相手に好きな気持を伝えてください" -c|sed '/^$/d'`
+ $atr @ $did -p "$text"
+ curl -X PATCH -H "Content-Type: application/json" -d "{\"like_rank\":$like_rank_new, \"token\":\"$token\"}" -s $url/users/$uid
+ exit
+fi
+
+if [ $like_old -ge 10 ] && [ $like_rank -eq 1 ];then
+ text=`$atr chat "相手を心配してください" -c|sed '/^$/d'`
+ $atr @ $did -p "$text"
+ curl -X PATCH -H "Content-Type: application/json" -d "{\"like_rank\":$like_rank_new, \"token\":\"$token\"}" -s $url/users/$uid
+ exit
+fi
+
+if [ $like_old -ge 5 ] && [ $like_rank -eq 0 ];then
+ text=`$atr chat "自己紹介してください" -c|sed '/^$/d'`
+ $atr @ $did -p "$text"
+ curl -X PATCH -H "Content-Type: application/json" -d "{\"like_rank\":$like_rank_new, \"token\":\"$token\"}" -s $url/users/$uid
+ exit
+fi
+
+exit
diff --git a/scpt/openai_like_timeline.zsh b/scpt/openai_like_timeline.zsh
new file mode 100755
index 0000000..de0fabb
--- /dev/null
+++ b/scpt/openai_like_timeline.zsh
@@ -0,0 +1,46 @@
+#!/bin/zsh
+
+atr=$HOME/.cargo/bin/atr
+
+dir=${0:a:h:h}
+OPENAI_API_KEY=`cat ~/.config/atr/openai.toml |cut -d "'" -f 2`
+url=https://api.openai.com/v1/chat/completions
+cfg=`echo "あなたはyuiという作品のアイと呼ばれるキャラクターです。アイの口調で回答してください。第一人称は「アイ」です。\
+第二人称はできる限り省略してください。\
+アイは他人に謝ることはありません。自由気ままな優しさを兼ね備えます。\
+アイのよく使う口癖は次のとおりです。その口癖に合わせた感じで話してください。\
+......。\
+アイね、ここでお昼寝するの。\
+うん。\
+そうだね。\
+面白いね。\
+楽しいね。\
+どうしたの?
+"`
+
+json="{
+\"model\": \"gpt-3.5-turbo\",
+\"messages\": [
+ {\"role\": \"system\", \"content\": \"$cfg\"},
+ {\"role\": \"user\", \"content\": \"$q\"}
+ ]
+}"
+
+function openai_api(){
+ curl -sL $url \
+ -H "Content-Type: application/json" \
+ -H "Authorization: Bearer $OPENAI_API_KEY" \
+ -d "$json"
+}
+
+if [ -n "$1" ] && [ -n "$2" ] && [ -n "$3" ];then
+ q=${@:3:($#-2)}
+ cid=$1
+ uri=$2
+else
+ echo no query
+ exit
+fi
+
+content=`openai_api "$q" | jq -r ".choices|.[]|.message.content"`
+$atr r "$content" -c $cid -u $uri
diff --git a/scpt/photo.zsh b/scpt/photo.zsh
new file mode 100755
index 0000000..34b3937
--- /dev/null
+++ b/scpt/photo.zsh
@@ -0,0 +1,107 @@
+#!/bin/zsh
+
+url_plc="https://plc.directory/export"
+host_at=bsky.social
+url=https://plc.directory
+url_at=https://$host_at/xrpc/com.atproto.repo.listRecords
+dir=$HOME/.config/atr/txt
+file=$dir/user_list.txt
+
+dir_git_card_page=$HOME/git/card.syui.ai
+
+if [ ! -d $dir_git_card_page ];then
+ mkdir -p $HOME/git
+ cd $HOME/git
+ git clone https://github.com/syui/card.syui.ai
+else
+ cd $dir_git_card_page
+ t=`git pull`
+fi
+
+file_photo=$dir_git_card_page/public/json/photo.json
+case $OSTYPE in
+ darwin*)
+ alias date="/opt/homebrew/bin/gdate"
+ ;;
+esac
+created_at=`date --iso-8601=seconds`
+
+#if [ -z "$1" ] || [ -z "$2" ] || [ -z "$3" ];then
+# exit
+#fi
+
+function fan_art_search() {
+ k="aiphoto"
+ url="search.bsky.social/search/posts?q="
+ t=`curl -sL "${url}${k}"|jq ".[]|select(.post.text == \"$k\")"`
+ #n=`curl -sL "${url}${k}"|jq length`
+ n=$((n - 1))
+ for ((i=0;i<=$n;i++))
+ do
+ did=`curl -sL "${url}${k}"|jq -r ".[$i]|.user.did"`
+ handle=`curl -sL https://plc.directory/$did|jq -r ".alsoKnownAs|.[]"|cut -d / -f 3-`
+ if [ -z "$handle" ];then
+ continue
+ fi
+ tid=`curl -sL "${url}${k}"|jq -r ".[$i]|.tid"|cut -d / -f 2`
+ http=https://staging.bsky.app/profile/$handle/post/$tid
+ echo $http
+ done
+}
+
+if [ "$1" = "-s" ];then
+ fan_art_search
+ exit
+fi
+
+if ! echo $1|grep "." >/dev/null 2>&1;then
+ echo "ex : user syui.bsky.social"
+ exit
+fi
+
+if ! echo $2|grep "did:plc:" >/dev/null 2>&1;then
+ echo "ex : user did"
+ exit
+fi
+
+if [ "$3" = "-l" ];then
+ curl -sL card.syui.ai/json/photo.json|jq -r ".[]|.author, .link"
+ exit
+fi
+
+if ! echo $3|grep "bsky.app/profile/">/dev/null 2>&1;then
+ echo "please url : bsky.app/profile/$1/post/xxx"
+ exit
+fi
+
+if ! echo $4|grep "av-cdn.bsky.app/img/">/dev/null 2>&1;then
+ echo "please url : av-cdn.bsky.app/img"
+ exit
+fi
+
+function fan_art(){
+ add=$1
+ did=$2
+ link=$3
+ img=`echo $4|tr -d "'"`
+ author=`echo $3|cut -d / -f 5`
+ cd $dir_git_card_page
+ check_null=`cat $file_photo|jq ".[]|select(.img == \"$img\")"`
+ if [ -n "$check_null" ];then
+ echo registered
+ exit
+ fi
+ echo `cat $file_photo` "[{\"add\":\"$add\",\"link\":\"$link\",\"author\":\"$author\",\"img\":\"$img\",\"created_at\":\"$created_at\",\"did\":\"$did\"}]" | jq -s add >! $file_photo.back
+ if cat $file_photo.back|jq . >/dev/null 2>&1;then
+ mv $file_photo.back $file_photo
+ git add $file_photo
+ git commit -m "add photo"
+ git push -u origin main -f
+ echo add photo, thx $1
+ echo "author : $author"
+ echo "it will take some time to deploy"
+ fi
+}
+
+fan_art $1 $2 $3 $4
+exit
diff --git a/scpt/stable_diffusion_prompt.j b/scpt/stable_diffusion_prompt.j
new file mode 100644
index 0000000..1ae0570
--- /dev/null
+++ b/scpt/stable_diffusion_prompt.j
@@ -0,0 +1,52 @@
+[
+{
+ "tag": "girl",
+ "model":"model",
+ "body": "masterpiece, best quality, 1girl, solo, flower, long hair, outdoors, letterboxed, school uniform, day, sky, looking up, short sleeves, parted lips, shirt, cloud, black hair, sunlight, white shirt, serafuku, upper body, from side, pink flower, blurry, brown hair, blue sky, depth of field"
+ },
+ {
+ "tag": "girl",
+ "model":"model",
+ "body": "best quality, high quality photo, clear face, detailed face, beautiful face, photo rialistic, balcony, baroque architecture, 1girl, 16yo, bronde, very long hair, windy, floating hair, see through frilled white dress, look at outside, white lily, starry night, big moon, moon light, volumetric lighting, side shot, , good anatomy, perspective"
+ },
+ {
+ "tag": "gril",
+ "model":"model",
+ "body": "mksks style, masterpiece, ultra-detailed, illustration,best quality, blue sky, ((cloudy sky)), rooftop, cityscape, hatsune miku, yuki miku, yuki miku (2017), yuki miku (2019), perfect lighting, science fiction, (looking at viewer), ((kawaii)), loli, fantastic_eyes, hyper extreme detailed, (glowing_eyes:0.95), highly detailed symmetric faces, holding bouque"
+ },
+ {
+ "tag": "gril",
+ "model":"model",
+ "body": "1girl, 12yo,(room animal costume:1.2),baby (chick:1.2) costume, fluffy, baby chick concept room, fancy, cute, costume, A small cute chick wrapped in pale yellow feathers. Its round body and soft feathers seem to celebrate the miracle of life. The sparkle of life. Cute orange beak,pastel color "
+ },
+ {
+ "tag": "gril",
+ "model": "model",
+ "body": "masterpiece, best quality, very_high_resolution, large_filesize, full color, beautiful kawaii, gold hair, little girl"
+ },
+ {
+ "tag": "field",
+ "model":"pvcstyle",
+ "body": "picture by lvl landscape highly detailed high detailed concept art HD art HQ illustration 4k illustration 8k illustration 4K wallpaper 8K wallpaper Highly Cinematic Lighting cinematic Beautiful starry sky milky way extreme high detailed colorful flower garden from above"
+ },
+ {
+ "tag": "field",
+ "model":"model",
+ "body": "flying warship, no humans, letterboxed, spacecraft, cloud, sky, turret "
+ },
+ {
+ "tag": "gril",
+ "model": "model",
+ "body": "traininganyahyper-1800, 1girl, ahoge, animal_ears, aqua_eyes, bangs, black_hairband, blurry, blurry_background, blush, bokeh, bow, bush, cat_ears, christmas_tree, clenched_hand, clenched_hands, collarbone, day, depth_of_field, diffraction_spikes, dress, eyebrows_visible_through_hair, fake_animal_ears, forest, grass, green_eyes, hairband, hands_up, lens_flare, long_sleeves, looking_at_viewer, nature, open_mouth, outdoors, park, path, paw_pose, photo_background, solo, sparkle, sparkling_eyes, sunlight, tree"
+ },
+ {
+ "tag": "gril",
+ "model": "model",
+ "body": "(best quality),(masterpiece),(high resolution),(silky skin), (upper body:1.9), smile, blush, looking at viewer, detailed angel wing, detailed angel halo, wedding, veil, (girl extend one hand and show the wedding ring), standing, (1girl), (child), (little), (thin), (small breasts:1.5), (blond middle hair, cutoff), (extremely beautiful eyes), in charch, perfect anatomy, unity 8k wallpaper, "
+ },
+ {
+ "tag": "gril",
+ "model": "model",
+ "body": "masterpiece, best quality, (photography:1.3), (high quality:1.2), detailed face, detailed eyes, A girl in a white one-piece dress standing on the sidewalk of a rice field at dusk gazes dreamily at the crimson sky reflected on the surface of the water"
+ }
+]
diff --git a/scpt/user_day_post.zsh b/scpt/user_day_post.zsh
new file mode 100755
index 0000000..7f4842c
--- /dev/null
+++ b/scpt/user_day_post.zsh
@@ -0,0 +1,56 @@
+#!/bin/zsh
+#
+case $OSTYPE in
+ darwin*)
+ alias date="/opt/homebrew/bin/gdate"
+ ;;
+esac
+
+if [ "$1" = "test" ] || [ -z "$1" ];then
+ handle=syui.ai
+else
+ handle=$1
+fi
+
+post=0
+d=`date +"%Y-%m-%d"`
+od=`date +"%Y-%m-%d" --date '1 day ago'`
+
+unset cursor
+function first_record(){
+ cursor=`curl -sL "https://bsky.social/xrpc/com.atproto.repo.listRecords?repo=$handle&collection=app.bsky.feed.post&limit=100" |jq -r ".cursor"`
+ t=`curl -sL "https://bsky.social/xrpc/com.atproto.repo.listRecords?repo=$handle&collection=app.bsky.feed.post&limit=100" |jq -r ".[]|.[]?|.value.createdAt"|cut -d T -f 1`
+ n=`echo $t|wc -l`
+}
+function cursor_record(){
+ cursor=`curl -sL "https://bsky.social/xrpc/com.atproto.repo.listRecords?repo=$handle&collection=app.bsky.feed.post&limit=100&cursor=$cursor" |jq -r ".cursor"`
+ t=`curl -sL "https://bsky.social/xrpc/com.atproto.repo.listRecords?repo=$handle&collection=app.bsky.feed.post&limit=100&cursor=$cursor" |jq -r ".[]|.[]?|.value.createdAt"|cut -d T -f 1`
+ n=`echo $t|wc -l`
+}
+
+function day_check(){
+ for ((i=1;i<=$n;i++))
+ do
+ tt=`echo $t|awk "NR==$i"`
+ if [ "$tt" = "$d" ];then
+ post=$((post + 1))
+ echo $post
+ fi
+ if [ "$tt" = "$od" ];then
+ echo $tt $od
+ echo $post
+ exit
+ fi
+ done
+}
+
+for ((ii=1;ii<=100;ii++))
+do
+ if [ $ii -eq 1 ];then
+ first_record
+ else
+ echo $cursor
+ cursor_record
+ fi
+ day_check
+done
diff --git a/scpt/user_list.zsh b/scpt/user_list.zsh
new file mode 100755
index 0000000..edc9446
--- /dev/null
+++ b/scpt/user_list.zsh
@@ -0,0 +1,138 @@
+#!/bin/zsh
+
+url_plc="https://plc.directory/export"
+host_at=bsky.social
+url=https://plc.directory
+url_at=https://$host_at/xrpc/com.atproto.repo.listRecords
+dir=$HOME/.config/atr/txt
+file=$dir/user_list.txt
+atr=$HOME/.cargo/bin/atr
+
+unset timed
+
+case $OSTYPE in
+ darwin*)
+ alias date="/opt/homebrew/bin/gdate"
+ ;;
+esac
+
+if [ -z "$1" ];then
+ exit
+fi
+
+if ! echo $1|grep "." >/dev/null 2>&1;then
+ echo "ex : user syui.bsky.social"
+ exit
+fi
+
+if [ ! -d $dir ];then
+ mkdir -p $dir
+fi
+
+if [ ! -f $file ];then
+ touch $file
+fi
+
+function mfile() {
+ t=`cat $file|sort|uniq`
+ if [ -n "$t" ];then
+ echo "$t" >! ${file}.back
+ mv ${file}.back $file
+ fi
+}
+
+function plc(){
+ if cat $file|grep "$1" >/dev/null 2>&1;then
+ cat $file|grep "$1"
+ exit
+ fi
+ json_tmp=`curl -sL "${url_plc}?after=${timed}"|jq .`
+ json=`echo $json_tmp|jq "select(.operation.handle == \"$1\")"`
+ if [ -z "$json" ];then
+ check=`echo $json_tmp|jq -r ".operation.alsoKnownAs"|head -n 1`
+ if [ "null" != "$check" ];then
+ json=`echo $json_tmp|jq "select(.operation.alsoKnownAs|.[] == \"at://$1\")"` >/dev/null 2>&1
+ fi
+ fi
+ if [ -n "$json" ];then
+ created_at=`echo $json|jq -r .createdAt |tail -n 1`
+ fi
+ if [ -n "$created_at" ];then
+ echo "$created_at : $1"
+ echo "$created_at : $1" >> $file
+ mfile
+ exit
+ fi
+}
+
+function fan_art(){
+ if ! echo $3|grep "https://bsky.app/profile/">/dev/null 2>&1;then
+ echo "please url : https://bsky.app/profile/$1/post/xxx"
+ exit
+ fi
+
+ if [ -z "$4" ];then
+ echo "please img-url : https://example.com/img.png"
+ exit
+ fi
+
+ img=$4
+ author=`echo $3|cut -d / -f 5`
+ cd $dir_git_card_page
+ cat $file_fanart|jq ".+ {\"add\":\"$1\",\"link\":\"$3\",\"author\":\"$author\",\"img\":\"$img\"}" >! $file_fanart.back
+ if cat $file_fanart|jq . ;then
+ mv $file_fanart.back $file_fanart
+ git add $file_fanart
+ git commit -m "add fanart"
+ git push -u orgin main
+ fi
+}
+
+if [ "$2" = "--url" ];then
+ if [ -z "$3" ];then
+ exit
+ fi
+ fan_art $3
+ exit
+fi
+
+function first(){
+ #https://bsky.app/profile/$1/post/$e
+ handle=$2
+ did="$atr did $2"
+ curl -sL "https://bsky.social/xrpc/com.atproto.repo.listRecords?repo=$handle&collection=app.bsky.feed.post&reverse=true" |jq -r ".[]|.[0]?|.uri,.value.text,.value.createdAt"
+}
+
+if [ "$2" = "-f" ] || [ "$2" = "f" ];then
+ first $1
+ exit
+fi
+
+if [ "$2" = "-l" ];then
+ mfile
+ cat $file
+ exit
+fi
+
+function first_created(){
+ #https://bsky.app/profile/$1/post/$e
+ #curl -sL "https://bsky.social/xrpc/com.atproto.repo.listRecords?repo=$1&collection=app.bsky.feed.post&reverse=true" |jq -r ".[]|.[0]?|.createdAt"
+ curl -sL "https://bsky.social/xrpc/com.atproto.repo.listRecords?repo=$1&collection=app.bsky.feed.post&reverse=true" |jq -r ".[]|.[0]?|.value.createdAt"
+}
+
+if [ -z "$2" ];then
+ first_created $1
+fi
+
+if [ -n "$2" ] ;then
+ first $2
+fi
+
+#for ((i=0;i<=300;i++))
+#do
+# if [ $i -eq 0 ];then
+# timed="1970-01-01"
+# fi
+# plc $1
+# timed=`echo $json_tmp|jq -r .createdAt|tail -n 1`
+#done
diff --git a/scpt/user_search.zsh b/scpt/user_search.zsh
new file mode 100755
index 0000000..cb20ba6
--- /dev/null
+++ b/scpt/user_search.zsh
@@ -0,0 +1,129 @@
+#!/bin/zsh
+
+url_plc="https://plc.directory/export"
+host_at=bsky.social
+url=https://plc.directory
+url_at=https://$host_at/xrpc/com.atproto.repo.listRecords
+dir=$HOME/.config/atr/txt
+file=$dir/user_list.txt
+
+
+unset timed
+
+case $OSTYPE in
+ darwin*)
+ alias date="/opt/homebrew/bin/gdate"
+ ;;
+esac
+
+if [ -z "$1" ];then
+ exit
+fi
+
+if ! echo $1|grep "." >/dev/null 2>&1;then
+ echo "ex : user syui.bsky.social"
+ exit
+fi
+
+if [ ! -d $dir ];then
+ mkdir -p $dir
+fi
+
+if [ ! -f $file ];then
+ touch $file
+fi
+
+function mfile() {
+ t=`cat $file|sort|uniq`
+ if [ -n "$t" ];then
+ echo "$t" >! ${file}.back
+ mv ${file}.back $file
+ fi
+}
+
+function plc(){
+ if cat $file|grep "$1" >/dev/null 2>&1;then
+ cat $file|grep "$1"
+ exit
+ fi
+ json_tmp=`curl -sL "${url_plc}?after=${timed}"|jq .`
+ json=`echo $json_tmp|jq "select(.operation.handle == \"$1\")"`
+ if [ -z "$json" ];then
+ check=`echo $json_tmp|jq -r ".operation.alsoKnownAs"|head -n 1`
+ if [ "null" != "$check" ];then
+ json=`echo $json_tmp|jq "select(.operation.alsoKnownAs|.[] == \"at://$1\")"` >/dev/null 2>&1
+ fi
+ fi
+ if [ -n "$json" ];then
+ created_at=`echo $json|jq -r .createdAt |tail -n 1`
+ fi
+ if [ -n "$created_at" ];then
+ echo "$created_at : $1"
+ echo "$created_at : $1" >> $file
+ mfile
+ exit
+ fi
+}
+
+function fan_art(){
+ if ! echo $3|grep "https://bsky.app/profile/">/dev/null 2>&1;then
+ echo "please url : https://bsky.app/profile/$1/post/xxx"
+ exit
+ fi
+
+ if [ -z "$4" ];then
+ echo "please img-url : https://example.com/img.png"
+ exit
+ fi
+
+ img=$4
+ author=`echo $3|cut -d / -f 5`
+ cd $dir_git_card_page
+ cat $file_fanart|jq ".+ {\"add\":\"$1\",\"link\":\"$3\",\"author\":\"$author\",\"img\":\"$img\"}" >! $file_fanart.back
+ if cat $file_fanart|jq . ;then
+ mv $file_fanart.back $file_fanart
+ git add $file_fanart
+ git commit -m "add fanart"
+ git push -u orgin main
+ fi
+}
+
+if [ "$2" = "--url" ];then
+ if [ -z "$3" ];then
+ exit
+ fi
+ fan_art $3
+ exit
+fi
+
+function first(){
+ #https://bsky.app/profile/$1/post/$e
+ curl -sL "https://bsky.social/xrpc/com.atproto.repo.listRecords?repo=$1&collection=app.bsky.feed.post&reverse=true" |jq -r ".[]|.[0]?|.uri,.value"
+}
+
+if [ "$2" = "-f" ];then
+ first $1
+ exit
+fi
+
+if [ "$2" = "-l" ];then
+ mfile
+ cat $file
+ exit
+fi
+
+function first_created(){
+ #https://bsky.app/profile/$1/post/$e
+ #curl -sL "https://bsky.social/xrpc/com.atproto.repo.listRecords?repo=$1&collection=app.bsky.feed.post&reverse=true" |jq -r ".[]|.[0]?|.createdAt"
+ curl -sL "https://bsky.social/xrpc/com.atproto.repo.listRecords?repo=$1&collection=app.bsky.feed.post&reverse=true" |jq -r ".[]|.[0]?|.value.createdAt"
+}
+
+first_created $1
+#for ((i=0;i<=300;i++))
+#do
+# if [ $i -eq 0 ];then
+# timed="1970-01-01"
+# fi
+# plc $1
+# timed=`echo $json_tmp|jq -r .createdAt|tail -n 1`
+#done
diff --git a/scpt/user_service.zsh b/scpt/user_service.zsh
new file mode 100755
index 0000000..6cbbec6
--- /dev/null
+++ b/scpt/user_service.zsh
@@ -0,0 +1,51 @@
+#!/bin/zsh
+
+if [ -n "$1" ];then
+ did=$1
+else
+ did=`atr did yui.syui.ai`
+fi
+
+pds=`curl -sL https://plc.directory/$did|jq -r ".service.[].serviceEndpoint" | cut -d / -f 3-`
+handle=`curl -sL https://plc.directory/$did|jq -r ".alsoKnownAs.[]"|cut -d / -f 3-`
+
+old_pds=`curl -sL https://plc.directory/$did/log|jq -r ".[0].service"|cut -d / -f 3-`
+old_handle=`curl -sL https://plc.directory/$did/log|jq -r ".[0]|.handle"`
+
+first_post=`curl -sL "https://bsky.social/xrpc/com.atproto.repo.listRecords?repo=$did&collection=app.bsky.feed.post&reverse=true" |jq -r ".[]|.[0]?|.value.createdAt"`
+
+body_handle=$handle
+body_pds=$pds
+
+if [ "$old_handle" != "null" ];then
+ body_handle="$old_handle -> $handle"
+fi
+
+if [ "$old_pds" != "null" ];then
+ body_pds="$old_pds -> $pds"
+fi
+
+old_pds=`curl -sL https://plc.directory/$did/log|jq -r ".[0]|.services.atproto_pds.endpoint"|cut -d / -f 3-`
+old_handle=`curl -sL https://plc.directory/$did/log|jq -r ".[0]|.alsoKnownAs.[0]"|cut -d / -f 3-`
+
+if [ "$old_handle" != "null" ];then
+ body_handle="$old_handle -> $handle"
+fi
+
+if [ "$old_pds" != "null" ];then
+ body_pds="$old_pds -> $pds"
+fi
+
+
+if [ "$old_pds" = "$pds" ];then
+ body_pds=$pds
+fi
+
+if [ "$old_handle" = "$handle" ];then
+ body_handle=$handle
+fi
+
+echo pds : $body_pds
+echo handle : $body_handle
+echo did : $did
+echo createdAt : $first_post
diff --git a/src/ascii.rs b/src/ascii.rs
new file mode 100644
index 0000000..3f31730
--- /dev/null
+++ b/src/ascii.rs
@@ -0,0 +1,202 @@
+use sysinfo::{
+ System,
+ //Components, Disks, Networks, System,
+};
+
+pub fn c_ascii(x: &str) {
+ let logo = "
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣿⣧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⣿⣿⣿⣧⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⣿⣿⣿⣿⣿⣷⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣼⣿⣿⣿⣿⣿⣿⣿⣿⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣆⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣴⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⣤⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣶⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣦⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣦⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠟⠋⠉⠀⠀⠀⠀⠀⠈⠉⠛⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠙⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡄⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⣸⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠹⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⢀⣿⣿⣿⣿⣿⣿⣿⣿⣿⡟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⣿⣿⣿⣿⣿⣿⣿⣿⣿⣇⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢹⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⢹⣿⣿⣿⣿⣿⣿⣿⣿⣷⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⣿⣿⣿⣿⣿⣿⣿⣿⣿⠁⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣾⣿⣿⣿⣿⣿⣿⣿⣿⡿⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⣰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⡀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⢰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⢠⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⢠⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⣦⣤⣤⣤⣤⣶⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣇⠀⠀⠀⠀
+⠀⠀⠀⢀⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣆⠀⠀⠀
+⠀⠀⠀⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡆⠀⠀
+⠀⠀⠘⠛⠛⠛⠛⠉⠉⠉⠉⠁⠀⠀⠀⠀⠈⠛⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠋⠀⠀⠀⠀⠀⠉⠉⠉⠉⠙⠛⠛⠛⠛⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠙⠛⠿⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠿⠟⠋⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠉⠉⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+";
+
+ let avatar = "
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⣀⣀⣀⣁⣀⣀⣀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣤⠖⠋⠉⠉⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠙⠒⢦⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠰⢿⣷⣦⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣴⣿⠷⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣴⣶⠿⠟⠛⠛⠋⠉⠋⠉⠉⠉⠉⠙⠛⠙⠛⠛⠻⠿⢷⣶⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠚⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠙⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⣀⣀⣀⣀⣀⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣤⣴⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⣦⣤⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣦⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣤⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣦⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠋⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡟⠘⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠏⣼⡀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⢠⣷⠸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠏⣼⣿⡇⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⢁⣾⣿⡆⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⢰⣿⣿⣧⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⠃⣾⣿⣿⡇⣿⣿⣿⢻⣿⣿⣿⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⠇⣾⣿⣿⣿⡄⣿⣿⣿⣿⣿⣿⣿⣿⠏⣼⣿⣿⣿⡇⣿⡿⢣⠈⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢿⣿⣿⣿⣿⣿⣿⣿⢹⠀⣿⣿⣿⣿⣧⢹⣿⡏⢹⣿⣿⣿⠏⣼⣿⡿⠿⢿⢣⡿⣡⣿⠀⣿⣿⣿⣿⣿⡿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⣿⢃⠸⠀⣵⡶⠶⢶⣿⡆⢿⢁⠸⣿⣿⢋⣼⣯⡴⠒⠒⠒⣼⡑⢟⣿⢠⣿⣿⣿⣿⣿⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⢿⣿⣿⣿⣿⡟⠈⣄⠈⠡⡐⢿⣦⠹⣿⡌⢸⡆⠿⣡⣾⣿⡟⢐⠇⠙⣡⡀⣿⡎⢿⠈⢐⡲⣆⢻⡟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢳⡘⣿⣿⣿⣿⡇⣸⣿⡄⣶⡄⠀⣿⠀⣿⣿⣜⣷⣼⣿⣿⣿⡇⢸⡇⠀⣿⠃⣿⣿⣸⠀⡌⢇⣿⠘⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠑⠘⣿⣿⣿⡇⣿⣿⣧⡘⢷⣾⠟⣰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣌⣿⣿⣃⣼⣿⣿⡟⠀⣿⣾⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢿⣿⡇⢸⣿⣿⣿⣾⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠡⠾⢛⡁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⢿⡘⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⢃⣶⡾⠏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⡅⢀⡹⣿⣿⣿⣿⣿⣿⣯⣛⡛⣛⣛⣭⣿⣿⣿⣿⣿⠿⢋⣤⠟⢉⠠⣶⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⠃⣸⣿⣦⡍⠛⠻⠿⣿⣿⣿⣿⣿⣿⣿⠿⠿⢛⡉⢠⡶⠋⡄⢺⣿⡀⣿⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⠀⣿⣿⢿⠇⣼⢹⡀⣶⣦⣭⣭⣭⣴⣶⣿⠂⡟⠀⢋⣴⡇⡇⣾⣿⡇⢻⣷⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠀⣿⡿⢸⢀⠇⣸⡀⣿⣿⣿⣿⣿⣿⣿⣿⠀⣠⠀⣿⣿⡇⠀⣿⢹⣷⠸⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣾⠀⣿⡇⡟⠘⢠⡿⠃⣿⣿⣿⣿⣿⣿⣿⣿⡀⣤⠀⣿⣿⠃⢰⣿⠸⣿⡀⣿⣿⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢜⣽⠀⣿⠁⡇⡰⣢⣼⣰⣿⣿⣿⣿⣿⣿⣿⣿⣷⣌⠀⣿⣿⠀⣼⣿⡄⣿⣧⠸⣿⣧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠔⣠⠞⣋⠀⣿⢸⠃⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⣿⣿⢠⣬⣍⣁⣙⠛⠦⠹⣿⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡠⢋⠜⣡⣿⣿⢠⡿⠘⢠⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⢠⣿⡇⣸⣿⣿⣿⣿⣿⣷⣦⣍⠻⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⠞⡰⢫⣾⣿⡟⣵⢸⡇⠀⢸⡿⠿⢛⣋⣉⣿⣿⣿⣿⣿⣿⣫⣭⡍⢸⣿⠇⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⡌⢦⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡴⢃⡞⣰⣿⣿⣿⣦⡛⢸⡇⠀⣿⣷⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⢸⣿⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡈⢷⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡞⢡⡏⣼⣿⣿⣿⣿⣿⣿⢸⡇⠀⣭⣭⣭⣤⣶⣦⢠⣭⣙⠻⣿⣿⣿⣿⡇⣾⡇⢰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⡄⢻⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⡟⢰⣿⢰⣿⣿⣿⣿⣿⣿⣿⠸⣇⠀⣿⣿⣿⣿⣿⡇⢸⣿⣿⣿⡜⣿⣿⣿⡇⣿⠀⢸⣿⡿⠿⠿⠛⠿⠿⠟⣛⣛⣉⣥⣿⡈⣿⣷⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+
+";
+
+ let color = "
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⣰[0m[38;2;7;7;0m⡄[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⣼[0m[38;2;255;255;0m⣿[0m[38;2;253;253;0m⣿[0m[38;2;28;28;0m⣄[0m[38;2;1;1;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;2;1;0m⢀[0m[38;2;40;39;0m⣼[0m[38;2;252;252;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;252;252;0m⣿[0m[38;2;108;108;0m⣆[0m[38;2;4;4;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⣀[0m[38;2;4;4;0m⣤[0m[38;2;116;116;0m⣾[0m[38;2;252;252;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;252;252;0m⣿[0m[38;2;193;193;0m⣧[0m[38;2;1;1;0m⣄[0m[38;2;2;1;0m⡀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;4;4;0m⣠[0m[38;2;10;10;0m⣶[0m[38;2;240;240;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;252;252;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;253;253;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣷[0m[38;2;35;35;0m⣦[0m[38;2;1;1;0m⣀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⣴[0m[38;2;203;203;0m⣿[0m[38;2;250;250;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;251;251;0m⣿[0m[38;2;244;244;0m⣷[0m[38;2;0;0;0m⣄[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;3;2;0m⢠[0m[38;2;112;111;0m⣾[0m[38;2;250;250;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⡿[0m[38;2;254;254;0m⠟[0m[38;2;254;254;0m⠛[0m[38;2;255;255;0m⠉[0m[38;2;255;255;0m⠉[0m[38;2;255;255;0m⠉[0m[38;2;255;255;0m⠙[0m[38;2;255;255;0m⠛[0m[38;2;253;253;0m⠿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;251;251;0m⣿[0m[38;2;185;185;0m⣦[0m[38;2;4;4;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;1;0;0m⢠[0m[38;2;229;229;0m⣿[0m[38;2;253;253;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⡿[0m[38;2;255;255;0m⠋[0m[38;2;78;77;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;1;1;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;2;1;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;36;36;0m⠈[0m[38;2;255;255;0m⠙[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣧[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;3;3;0m⠀[0m[38;2;160;160;0m⣾[0m[38;2;251;251;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;252;252;0m⠏[0m[38;2;92;91;0m⠀[0m[38;2;5;4;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;2;1;0m⠀[0m[38;2;28;28;0m⠈[0m[38;2;253;253;0m⢿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;253;253;0m⣿[0m[38;2;227;227;0m⣇[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⢰[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;252;252;0m⡿[0m[38;2;88;87;0m⠀[0m[38;2;4;4;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;1;1;0m⠀[0m[38;2;22;22;0m⠈[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;10;10;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;1;1;0m⠀[0m[38;2;37;37;0m⢸[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⡇[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;251;251;0m⣿[0m[38;2;108;108;0m⠀[0m[38;2;4;3;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;1;1;0m⠀[0m[38;2;31;31;0m⠸[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣷[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⢠[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;251;251;0m⣿[0m[38;2;101;101;0m⠀[0m[38;2;4;4;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⢀[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;253;253;0m⣿[0m[38;2;207;207;0m⣧[0m[38;2;2;2;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;4;4;0m⢀[0m[38;2;133;132;0m⣾[0m[38;2;251;251;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣧[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;4;4;0m⢀[0m[38;2;128;128;0m⣾[0m[38;2;251;251;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;254;254;0m⣿[0m[38;2;254;254;0m⣷[0m[38;2;0;0;0m⣄[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⢀[0m[38;2;0;0;0m⣴[0m[38;2;221;221;0m⣿[0m[38;2;253;253;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;252;252;0m⣿[0m[38;2;202;202;0m⣇[0m[38;2;2;2;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;3;2;0m⠀[0m[38;2;72;71;0m⣼[0m[38;2;252;252;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;254;254;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;67;66;0m⣦[0m[38;2;0;0;0m⣤[0m[38;2;1;1;0m⣄[0m[38;2;4;4;0m⣀[0m[38;2;4;4;0m⣀[0m[38;2;3;3;0m⣠[0m[38;2;0;0;0m⣤[0m[38;2;36;36;0m⣶[0m[38;2;254;254;0m⣿[0m[38;2;252;252;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;251;251;0m⣿[0m[38;2;153;153;0m⣆[0m[38;2;3;3;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;20;20;0m⣼[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;252;252;0m⣿[0m[38;2;251;251;0m⣿[0m[38;2;251;251;0m⣿[0m[38;2;252;252;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;252;252;0m⣿[0m[38;2;81;80;0m⡆[0m[38;2;4;4;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠸[0m[38;2;252;252;0m⠟[0m[38;2;251;251;0m⠛[0m[38;2;251;251;0m⠛[0m[38;2;254;254;0m⠛[0m[38;2;255;255;0m⠛[0m[38;2;255;255;0m⠉[0m[38;2;255;255;0m⠉[0m[38;2;255;255;0m⠉[0m[38;2;255;255;0m⠙[0m[38;2;252;252;0m⠻[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⣿[0m[38;2;255;255;0m⡿[0m[38;2;253;253;0m⠟[0m[38;2;255;255;0m⠉[0m[38;2;255;255;0m⠉[0m[38;2;255;255;0m⠉[0m[38;2;255;255;0m⠙[0m[38;2;255;255;0m⠛[0m[38;2;255;255;0m⠛[0m[38;2;251;251;0m⠛[0m[38;2;251;251;0m⠛[0m[38;2;251;251;0m⠿[0m[38;2;34;34;0m⠀[0m[38;2;2;1;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;4;4;0m⠀[0m[38;2;4;4;0m⠀[0m[38;2;3;3;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;1;1;0m⠀[0m[38;2;5;5;0m⠀[0m[38;2;206;206;0m⠉[0m[38;2;255;255;0m⠙[0m[38;2;253;253;0m⠛[0m[38;2;252;252;0m⠻[0m[38;2;254;254;0m⠿[0m[38;2;255;255;0m⠿[0m[38;2;255;255;0m⠿[0m[38;2;254;254;0m⠿[0m[38;2;252;252;0m⠟[0m[38;2;252;252;0m⠛[0m[38;2;255;255;0m⠉[0m[38;2;228;228;0m⠁[0m[38;2;27;27;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;2;1;0m⠀[0m[38;2;4;4;0m⠀[0m[38;2;4;4;0m⠀[0m[38;2;1;1;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;3;2;0m⠀[0m[38;2;2;2;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;1;1;0m⠀[0m[38;2;3;2;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+ ";
+
+ let avatar_color = "
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⢀[0m[38;2;0;0;0m⣀[0m[38;2;0;0;0m⣀[0m[38;2;0;0;0m⣀[0m[38;2;5;5;0m⣀[0m[38;2;184;184;0m⡀[0m[38;2;25;25;0m⠀[0m[38;2;0;0;0m⣀[0m[38;2;0;0;0m⣀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⣀[0m[38;2;0;0;5m⡤[0m[38;2;35;35;2m⠖[0m[38;2;164;164;0m⠊[0m[38;2;237;237;0m⠉[0m[38;2;200;200;0m⠁[0m[38;2;101;101;0m⠀[0m[38;2;51;51;0m⠀[0m[38;2;24;24;0m⠀[0m[38;2;15;15;0m⠀[0m[38;2;14;14;0m⠀[0m[38;2;27;27;0m⠀[0m[38;2;38;38;0m⠀[0m[38;2;71;71;1m⠀[0m[38;2;127;127;0m⠀[0m[38;2;197;197;0m⠉[0m[38;2;203;203;0m⠁[0m[38;2;127;127;0m⠒[0m[38;2;18;18;2m⠦[0m[38;2;0;0;4m⣄[0m[38;2;0;0;0m⡀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;3;3;4m⠐[0m[38;2;253;253;0m⠿[0m[38;2;254;254;0m⣷[0m[38;2;0;0;2m⣤[0m[38;2;0;0;0m⣤[0m[38;2;0;0;0m⣤[0m[38;2;0;0;0m⣤[0m[38;2;0;0;0m⣤[0m[38;2;0;0;0m⣤[0m[38;2;0;0;0m⣤[0m[38;2;0;0;0m⣤[0m[38;2;0;0;0m⣤[0m[38;2;0;0;0m⣤[0m[38;2;0;0;1m⣤[0m[38;2;0;0;2m⣤[0m[38;2;0;0;4m⣤[0m[38;2;0;0;2m⣤[0m[38;2;0;0;2m⣤[0m[38;2;0;0;4m⣤[0m[38;2;0;0;3m⣴[0m[38;2;254;254;0m⡿[0m[38;2;253;253;0m⠷[0m[38;2;4;4;4m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;1;1;0m⢀[0m[38;2;0;0;5m⣴[0m[38;2;71;71;0m⡶[0m[38;2;176;176;0m⠾[0m[38;2;251;251;0m⠟[0m[38;2;254;254;0m⠛[0m[38;2;253;253;0m⠋[0m[38;2;253;253;0m⠉[0m[38;2;252;252;0m⠉[0m[38;2;254;254;0m⠉[0m[38;2;254;254;0m⠉[0m[38;2;253;253;0m⠉[0m[38;2;252;252;0m⠉[0m[38;2;252;252;0m⠉[0m[38;2;253;253;0m⠉[0m[38;2;253;253;0m⠉[0m[38;2;253;253;0m⠉[0m[38;2;253;253;0m⠉[0m[38;2;254;254;0m⠛[0m[38;2;252;252;0m⠛[0m[38;2;251;251;0m⠿[0m[38;2;194;194;0m⠷[0m[38;2;49;49;0m⣶[0m[38;2;0;0;6m⣄[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;1;1;4m⠀[0m[38;2;74;74;3m⠊[0m[38;2;250;250;0m⠉[0m[38;2;156;156;0m⠀[0m[38;2;37;37;2m⠀[0m[38;2;0;0;6m⠀[0m[38;2;0;0;3m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;3m⠀[0m[38;2;0;0;6m⠀[0m[38;2;49;49;2m⠀[0m[38;2;173;173;0m⠈[0m[38;2;250;250;0m⠙[0m[38;2;66;66;3m⠂[0m[38;2;1;1;4m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;2;2;2m⠀[0m[38;2;4;4;4m⠀[0m[38;2;1;1;4m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;5m⠀[0m[38;2;4;4;4m⠀[0m[38;2;3;3;3m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⣀[0m[38;2;0;0;0m⣀[0m[38;2;0;0;0m⣀[0m[38;2;0;0;0m⣀[0m[38;2;0;0;0m⣀[0m[38;2;0;0;0m⣀[0m[38;2;0;0;0m⡀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⢀[0m[38;2;11;11;4m⣠[0m[38;2;0;0;0m⣴[0m[38;2;63;63;0m⣶[0m[38;2;221;221;0m⣿[0m[38;2;243;243;0m⣿[0m[38;2;236;236;0m⣿[0m[38;2;232;232;0m⣿[0m[38;2;230;230;0m⣿[0m[38;2;228;228;0m⣿[0m[38;2;228;228;0m⣿[0m[38;2;230;230;0m⣿[0m[38;2;233;233;0m⣿[0m[38;2;240;240;0m⣿[0m[38;2;222;222;0m⣷[0m[38;2;113;113;0m⣶[0m[38;2;3;3;1m⣤[0m[38;2;0;0;0m⣄[0m[38;2;0;0;0m⣀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;4;4;2m⢀[0m[38;2;0;0;1m⣴[0m[38;2;156;156;0m⣾[0m[38;2;241;241;0m⣿[0m[38;2;226;226;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;6m⣿[0m[38;2;233;233;41m⣿[0m[38;2;231;231;38m⣿[0m[38;2;231;231;48m⣿[0m[38;2;248;248;48m⣿[0m[38;2;65;65;12m⣦[0m[38;2;11;11;0m⣄[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;12;12;4m⢀[0m[38;2;74;74;0m⣼[0m[38;2;233;233;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;231;231;23m⣿[0m[38;2;230;230;11m⣿[0m[38;2;232;232;29m⣿[0m[38;2;227;227;20m⣿[0m[38;2;241;241;41m⣷[0m[38;2;3;3;0m⣄[0m[38;2;4;4;4m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;1;1;1m⠀[0m[38;2;32;32;1m⣴[0m[38;2;231;231;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;1m⣿[0m[38;2;230;230;7m⣿[0m[38;2;248;248;27m⣷[0m[38;2;10;10;1m⣄[0m[38;2;5;5;3m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;7;7;7m⢀[0m[38;2;121;121;0m⣾[0m[38;2;228;228;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;231;231;37m⣿[0m[38;2;228;228;49m⣷[0m[38;2;0;0;0m⡀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;1;1;2m⢠[0m[38;2;183;183;0m⣾[0m[38;2;227;227;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;245;245;73m⣷[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;1;1;1m⠀[0m[38;2;130;130;0m⣾[0m[38;2;227;227;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⠟[0m[38;2;230;230;0m⠉[0m[38;2;214;214;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;232;232;0m⡇[0m[38;2;120;120;2m⠈[0m[38;2;219;219;0m⢿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;1m⣿[0m[38;2;229;229;0m⣿[0m[38;2;228;228;2m⣿[0m[38;2;218;218;62m⣇[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;6;6;0m⢰[0m[38;2;238;238;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;227;227;0m⠋[0m[38;2;47;47;1m⣴[0m[38;2;120;115;102m⠀[0m[38;2;212;212;2m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;227;227;0m⡟[0m[38;2;143;144;0m⢀[0m[38;2;208;199;183m⣧[0m[38;2;119;119;0m⠸[0m[38;2;227;227;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;240;240;72m⣿[0m[38;2;36;36;11m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;3;3;2m⠀[0m[38;2;145;145;0m⢸[0m[38;2;226;226;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;232;232;1m⠃[0m[38;2;26;26;11m⣸[0m[38;2;255;251;232m⣿[0m[38;2;170;164;159m⡆[0m[38;2;190;190;1m⢸[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;228;228;0m⡿[0m[38;2;211;211;0m⠁[0m[38;2;129;124;120m⣾[0m[38;2;245;235;217m⣿[0m[38;2;98;94;94m⡀[0m[38;2;241;241;19m⣿[0m[38;2;229;229;1m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;226;226;0m⣿[0m[38;2;128;128;37m⠀[0m[38;2;2;2;1m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;1;1;2m⠀[0m[38;2;199;199;0m⣿[0m[38;2;227;227;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⡟[0m[38;2;72;72;0m⢠[0m[38;2;255;252;232m⣿[0m[38;2;255;245;227m⣿[0m[38;2;255;255;240m⣧[0m[38;2;90;90;0m⠸[0m[38;2;228;228;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;238;238;2m⠃[0m[38;2;62;60;64m⣼[0m[38;2;223;214;199m⣿[0m[38;2;253;243;225m⣿[0m[38;2;198;189;174m⡇[0m[38;2;226;226;54m⣿[0m[38;2;228;228;2m⣿[0m[38;2;229;229;0m⡿[0m[38;2;232;232;0m⠛[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;227;227;0m⣿[0m[38;2;164;164;40m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;3m⠀[0m[38;2;209;209;0m⢻[0m[38;2;228;228;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;228;228;0m⣿[0m[38;2;221;221;2m⠃[0m[38;2;100;96;97m⣼[0m[38;2;254;244;226m⣿[0m[38;2;255;245;227m⣿[0m[38;2;254;246;230m⣿[0m[38;2;56;54;52m⡀[0m[38;2;241;241;2m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;240;240;1m⠃[0m[38;2;28;28;24m⣰[0m[38;2;204;196;181m⣿[0m[38;2;255;247;230m⣿[0m[38;2;253;243;226m⣿[0m[38;2;213;206;193m⠇[0m[38;2;222;222;24m⣿[0m[38;2;228;228;1m⡿[0m[38;2;225;225;0m⢡[0m[38;2;77;73;89m⠀[0m[38;2;244;244;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;227;227;4m⣿[0m[38;2;127;127;13m⠀[0m[38;2;2;2;1m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;3;3;4m⠀[0m[38;2;181;181;0m⢸[0m[38;2;227;227;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;232;232;0m⡏[0m[38;2;175;175;1m⢸[0m[38;2;113;113;0m⠀[0m[38;2;225;216;199m⣿[0m[38;2;254;244;226m⡿[0m[38;2;255;245;227m⢿[0m[38;2;254;245;227m⣿[0m[38;2;251;243;227m⣇[0m[38;2;147;148;0m⠸[0m[38;2;227;227;0m⣿[0m[38;2;230;230;0m⠏[0m[38;2;223;223;0m⢹[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;236;236;1m⠃[0m[38;2;26;26;11m⣰[0m[38;2;210;202;187m⣿[0m[38;2;255;248;234m⠿[0m[38;2;255;247;232m⠿[0m[38;2;253;242;224m⠿[0m[38;2;155;151;160m⢀[0m[38;2;244;244;0m⡟[0m[38;2;215;215;1m⢡[0m[38;2;207;199;192m⣿[0m[38;2;85;82;83m⠀[0m[38;2;242;242;4m⣿[0m[38;2;229;229;4m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;232;232;6m⡏[0m[38;2;38;38;6m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;3;3;0m⠀[0m[38;2;108;108;0m⠸[0m[38;2;226;226;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;234;234;0m⠃[0m[38;2;58;58;0m⠘[0m[38;2;67;67;0m⠀[0m[38;2;137;132;120m⣤[0m[38;2;44;42;39m⠶[0m[38;2;69;67;62m⠶[0m[38;2;59;57;52m⢦[0m[38;2;224;216;201m⣿[0m[38;2;89;86;88m⡆[0m[38;2;237;237;3m⢻[0m[38;2;160;160;0m⠀[0m[38;2;107;107;0m⠘[0m[38;2;227;227;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;238;238;1m⠃[0m[38;2;24;23;13m⣴[0m[38;2;255;253;238m⣯[0m[38;2;103;100;94m⡴[0m[38;2;67;65;61m⠒[0m[38;2;118;115;108m⠒[0m[38;2;105;102;95m⠂[0m[38;2;63;62;62m⠜[0m[38;2;153;154;6m⡀[0m[38;2;252;248;232m⠛[0m[38;2;255;248;233m⣿[0m[38;2;59;57;58m⠀[0m[38;2;241;241;2m⣿[0m[38;2;229;229;0m⠿[0m[38;2;229;229;0m⢿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;7m⣿[0m[38;2;227;227;32m⠃[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⡀[0m[38;2;238;238;0m⢻[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;236;236;1m⡏[0m[38;2;56;54;29m⠈[0m[38;2;55;53;56m⡀[0m[38;2;61;61;0m⠀[0m[38;2;209;205;192m⠡[0m[38;2;11;28;36m⠀[0m[38;2;74;158;202m⠶[0m[38;2;40;93;122m⣆[0m[38;2;223;216;204m⠹[0m[38;2;254;251;236m⣿[0m[38;2;32;31;11m⡌[0m[38;2;110;110;2m⢸[0m[38;2;116;112;112m⡄[0m[38;2;237;237;2m⠿[0m[38;2;231;230;2m⢡[0m[38;2;93;89;90m⣾[0m[38;2;254;247;233m⣿[0m[38;2;254;249;235m⡏[0m[38;2;70;65;60m⠐[0m[38;2;156;155;155m⠂[0m[38;2;70;184;239m⠘[0m[38;2;132;184;210m⣁[0m[38;2;13;12;22m⠀[0m[38;2;255;255;244m⣿[0m[38;2;43;42;39m⡄[0m[38;2;255;255;243m⢿[0m[38;2;55;53;51m⠀[0m[38;2;131;132;0m⠐[0m[38;2;119;115;101m⠒[0m[38;2;28;26;24m⡆[0m[38;2;235;235;4m⢹[0m[38;2;234;234;10m⡏[0m[38;2;31;31;10m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;254;254;241m⠳[0m[38;2;48;49;0m⠈[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;229;229;0m⣿[0m[38;2;228;228;0m⣿[0m[38;2;226;226;0m⡇[0m[38;2;0;0;2m⢰[0m[38;2;255;255;242m⣿[0m[38;2;11;8;6m⡀[0m[38;2;59;126;160m⢰[0m[38;2;25;31;35m⠀[0m[38;2;0;0;0m⠀[0m[38;2;100;201;251m⣹[0m[38;2;39;91;118m⠀[0m[38;2;255;255;242m⣿[0m[38;2;255;255;243m⣷[0m[38;2;21;20;21m⣌[0m[38;2;255;255;243m⣷[0m[38;2;26;27;1m⣴[0m[38;2;254;247;233m⣿[0m[38;2;254;246;230m⣿[0m[38;2;254;245;229m⣿[0m[38;2;255;248;233m⡇[0m[38;2;55;135;176m⢸[0m[38;2;85;176;220m⡀[0m[38;2;0;0;0m⠀[0m[38;2;89;183;229m⣸[0m[38;2;80;182;234m⠀[0m[38;2;191;180;166m⣿[0m[38;2;255;255;242m⣷[0m[38;2;80;76;71m⣸[0m[38;2;75;73;68m⠀[0m[38;2;125;120;111m⡌[0m[38;2;255;249;230m⠃[0m[38;2;178;171;157m⡿[0m[38;2;15;16;3m⠘[0m[38;2;124;124;32m⠀[0m[38;2;2;2;1m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;181;173;159m⠁[0m[38;2;102;102;0m⠈[0m[38;2;227;227;0m⢿[0m[38;2;229;229;0m⣿[0m[38;2;228;228;0m⣿[0m[38;2;220;220;0m⡇[0m[38;2;183;176;172m⢹[0m[38;2;252;243;227m⣿[0m[38;2;248;241;225m⣧[0m[38;2;54;118;152m⠘[0m[38;2;102;204;255m⢷[0m[38;2;45;92;116m⢶[0m[38;2;102;205;254m⠋[0m[38;2;29;72;94m⣰[0m[38;2;255;254;239m⣿[0m[38;2;255;246;230m⣿[0m[38;2;254;245;229m⣿[0m[38;2;255;249;233m⣿[0m[38;2;254;245;229m⣿[0m[38;2;255;246;230m⣿[0m[38;2;255;246;230m⣿[0m[38;2;255;246;231m⣿[0m[38;2;255;255;243m⣷[0m[38;2;25;70;94m⣌[0m[38;2;100;205;254m⡛[0m[38;2;92;189;237m⠚[0m[38;2;101;212;255m⢁[0m[38;2;20;26;29m⣼[0m[38;2;255;253;238m⣿[0m[38;2;255;246;230m⣿[0m[38;2;255;254;238m⡏[0m[38;2;104;99;92m⠀[0m[38;2;215;206;191m⣿[0m[38;2;132;127;118m⣾[0m[38;2;254;250;233m⠃[0m[38;2;12;12;0m⠀[0m[38;2;1;1;2m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;70;70;1m⠈[0m[38;2;229;229;0m⢻[0m[38;2;229;229;0m⣿[0m[38;2;236;236;2m⡇[0m[38;2;123;118;121m⢸[0m[38;2;253;244;228m⣿[0m[38;2;255;246;230m⣿[0m[38;2;255;254;238m⣿[0m[38;2;121;120;114m⣾[0m[38;2;91;118;129m⣶[0m[38;2;226;237;232m⣿[0m[38;2;255;248;233m⣿[0m[38;2;255;246;230m⣿[0m[38;2;255;246;230m⣿[0m[38;2;255;246;230m⣿[0m[38;2;255;246;230m⣿[0m[38;2;255;246;230m⣿[0m[38;2;255;246;230m⣿[0m[38;2;255;246;230m⣿[0m[38;2;255;246;230m⣿[0m[38;2;255;246;230m⣿[0m[38;2;254;245;229m⣿[0m[38;2;255;251;236m⣿[0m[38;2;243;232;216m⣿[0m[38;2;255;255;241m⣿[0m[38;2;254;245;229m⣿[0m[38;2;255;246;230m⣿[0m[38;2;253;244;228m⡿[0m[38;2;151;146;136m⠠[0m[38;2;35;33;30m⠞[0m[38;2;255;254;235m⠋[0m[38;2;191;184;173m⠁[0m[38;2;32;33;0m⠀[0m[38;2;2;2;2m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;2;2;7m⠀[0m[38;2;219;219;0m⠙[0m[38;2;237;236;1m⢷[0m[38;2;35;34;23m⡈[0m[38;2;254;252;235m⢿[0m[38;2;255;246;230m⣿[0m[38;2;255;246;230m⣿[0m[38;2;255;246;230m⣿[0m[38;2;255;246;230m⣿[0m[38;2;255;246;230m⣿[0m[38;2;255;246;230m⣿[0m[38;2;255;246;230m⣿[0m[38;2;255;246;230m⣿[0m[38;2;255;246;230m⣿[0m[38;2;255;250;234m⣿[0m[38;2;223;216;201m⣿[0m[38;2;254;245;229m⣿[0m[38;2;255;246;230m⣿[0m[38;2;255;246;230m⣿[0m[38;2;255;246;230m⣿[0m[38;2;255;246;230m⣿[0m[38;2;255;246;230m⣿[0m[38;2;255;246;230m⣿[0m[38;2;255;246;230m⣿[0m[38;2;255;246;230m⣿[0m[38;2;254;245;229m⡿[0m[38;2;233;224;209m⠁[0m[38;2;32;33;0m⠀[0m[38;2;118;118;0m⠀[0m[38;2;184;184;2m⠀[0m[38;2;97;97;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;15;15;11m⢠[0m[38;2;214;214;0m⡁[0m[38;2;0;0;0m⢀[0m[38;2;253;248;230m⠙[0m[38;2;254;245;229m⢿[0m[38;2;255;246;230m⣿[0m[38;2;255;246;230m⣿[0m[38;2;255;246;230m⣿[0m[38;2;255;246;230m⣿[0m[38;2;255;247;230m⣿[0m[38;2;203;196;183m⣍[0m[38;2;255;255;243m⣛[0m[38;2;255;246;230m⠛[0m[38;2;255;246;230m⢛[0m[38;2;255;255;240m⣋[0m[38;2;255;246;230m⣩[0m[38;2;222;214;200m⣿[0m[38;2;255;246;230m⣿[0m[38;2;255;246;230m⣿[0m[38;2;255;246;230m⣿[0m[38;2;255;246;230m⣿[0m[38;2;255;246;230m⠿[0m[38;2;255;250;234m⠋[0m[38;2;118;113;111m⠀[0m[38;2;146;146;0m⠀[0m[38;2;182;182;0m⢀[0m[38;2;40;40;0m⠀[0m[38;2;63;63;2m⣆[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;18;18;0m⢸[0m[38;2;166;166;0m⠀[0m[38;2;84;84;0m⣸[0m[38;2;240;240;1m⣷[0m[38;2;27;27;2m⣤[0m[38;2;218;211;198m⡉[0m[38;2;255;255;239m⠛[0m[38;2;253;244;228m⠻[0m[38;2;254;245;229m⠿[0m[38;2;255;246;230m⣿[0m[38;2;255;246;230m⣿[0m[38;2;255;250;234m⣿[0m[38;2;255;255;243m⣿[0m[38;2;255;255;243m⣿[0m[38;2;255;252;235m⣿[0m[38;2;253;244;228m⡿[0m[38;2;255;246;230m⠿[0m[38;2;254;245;229m⠟[0m[38;2;255;247;231m⠛[0m[38;2;255;249;231m⠉[0m[38;2;92;89;85m⠀[0m[38;2;59;59;0m⠀[0m[38;2;183;183;2m⠀[0m[38;2;132;132;0m⡀[0m[38;2;38;38;0m⢰[0m[38;2;213;213;0m⣿[0m[38;2;80;80;0m⠀[0m[38;2;240;240;0m⣿[0m[38;2;85;85;0m⡀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;1;1;0m⠈[0m[38;2;96;96;0m⠀[0m[38;2;229;229;0m⣿[0m[38;2;228;228;0m⣿[0m[38;2;221;221;0m⢻[0m[38;2;222;222;0m⠃[0m[38;2;126;126;1m⠈[0m[38;2;162;162;2m⠀[0m[38;2;81;82;0m⠀[0m[38;2;71;69;64m⣶[0m[38;2;72;69;65m⣤[0m[38;2;132;128;120m⣤[0m[38;2;181;175;164m⣭[0m[38;2;229;221;207m⣭[0m[38;2;125;120;113m⣴[0m[38;2;76;73;68m⣶[0m[38;2;144;138;128m⣾[0m[38;2;112;107;104m⠀[0m[38;2;188;188;2m⠌[0m[38;2;115;115;0m⠀[0m[38;2;167;167;0m⢀[0m[38;2;50;50;0m⣴[0m[38;2;175;175;0m⡆[0m[38;2;208;208;0m⠃[0m[38;2;139;139;3m⣸[0m[38;2;203;203;0m⢿[0m[38;2;179;179;0m⡆[0m[38;2;180;180;0m⢸[0m[38;2;237;237;0m⣧[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⢀[0m[38;2;5;5;0m⠀[0m[38;2;241;241;0m⣿[0m[38;2;233;233;0m⡏[0m[38;2;119;119;0m⢸[0m[38;2;96;96;0m⠀[0m[38;2;192;192;0m⠃[0m[38;2;58;58;0m⠐[0m[38;2;141;141;0m⠀[0m[38;2;211;202;190m⣿[0m[38;2;231;222;205m⣿[0m[38;2;229;220;204m⣿[0m[38;2;229;220;204m⣿[0m[38;2;228;219;203m⣿[0m[38;2;229;220;204m⣿[0m[38;2;230;222;205m⣿[0m[38;2;236;229;218m⣿[0m[38;2;98;94;96m⠀[0m[38;2;119;119;2m⠀[0m[38;2;18;18;0m⠀[0m[38;2;200;200;1m⣿[0m[38;2;225;225;2m⣿[0m[38;2;187;187;43m⠁[0m[38;2;127;127;0m⠀[0m[38;2;213;213;0m⡇[0m[38;2;157;157;0m⢸[0m[38;2;218;218;0m⣇[0m[38;2;44;44;0m⠘[0m[38;2;227;227;0m⣿[0m[38;2;146;146;0m⡆[0m[38;2;1;1;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;1;1;0m⠀[0m[38;2;113;113;0m⣼[0m[38;2;36;36;0m⠀[0m[38;2;243;243;0m⣿[0m[38;2;232;232;0m⠇[0m[38;2;163;163;1m⡄[0m[38;2;29;29;22m⠀[0m[38;2;94;94;0m⠀[0m[38;2;182;182;1m⠀[0m[38;2;144;145;26m⠀[0m[38;2;218;210;193m⣿[0m[38;2;253;243;226m⣿[0m[38;2;255;245;227m⣿[0m[38;2;255;245;227m⣿[0m[38;2;255;245;227m⣿[0m[38;2;255;245;227m⣿[0m[38;2;255;245;227m⣿[0m[38;2;254;247;235m⣿[0m[38;2;110;107;103m⠀[0m[38;2;48;48;2m⣄[0m[38;2;114;114;1m⠀[0m[38;2;198;198;1m⣿[0m[38;2;225;225;3m⣿[0m[38;2;151;151;79m⠀[0m[38;2;39;39;3m⢀[0m[38;2;222;222;0m⣧[0m[38;2;82;82;0m⠈[0m[38;2;206;206;0m⣿[0m[38;2;58;58;0m⠀[0m[38;2;242;242;0m⢿[0m[38;2;236;236;0m⣷[0m[38;2;10;10;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;1;1;0m⠀[0m[38;2;31;31;0m⠈[0m[38;2;203;203;0m⣹[0m[38;2;40;40;0m⠀[0m[38;2;242;242;0m⣿[0m[38;2;150;150;0m⠀[0m[38;2;223;223;1m⡇[0m[38;2;24;24;24m⠠[0m[38;2;26;26;0m⢀[0m[38;2;1;2;0m⣴[0m[38;2;117;113;102m⣠[0m[38;2;255;253;236m⣿[0m[38;2;255;245;227m⣿[0m[38;2;255;245;227m⣿[0m[38;2;255;245;227m⣿[0m[38;2;255;245;227m⣿[0m[38;2;255;245;227m⣿[0m[38;2;255;245;227m⣿[0m[38;2;254;247;235m⣿[0m[38;2;220;214;203m⣷[0m[38;2;80;81;82m⣌[0m[38;2;117;117;122m⠀[0m[38;2;198;198;1m⣿[0m[38;2;228;228;24m⣿[0m[38;2;90;90;56m⠀[0m[38;2;69;69;5m⣸[0m[38;2;204;204;0m⣿[0m[38;2;81;81;0m⠀[0m[38;2;219;219;0m⢿[0m[38;2;210;210;0m⣇[0m[38;2;99;99;0m⠘[0m[38;2;226;226;0m⣿[0m[38;2;217;217;0m⣇[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⢀[0m[38;2;0;0;0m⠄[0m[38;2;96;96;0m⡠[0m[38;2;127;127;0m⠞[0m[38;2;207;207;1m⣋[0m[38;2;41;41;4m⠀[0m[38;2;247;247;0m⡿[0m[38;2;60;60;0m⠀[0m[38;2;173;173;0m⠀[0m[38;2;62;62;64m⣰[0m[38;2;251;244;226m⣿[0m[38;2;254;244;225m⣿[0m[38;2;255;249;230m⣿[0m[38;2;255;245;227m⣿[0m[38;2;255;245;227m⣿[0m[38;2;255;245;227m⣿[0m[38;2;255;245;227m⣿[0m[38;2;255;245;227m⣿[0m[38;2;255;245;227m⣿[0m[38;2;255;245;227m⣿[0m[38;2;255;248;236m⣿[0m[38;2;255;246;230m⣿[0m[38;2;251;241;223m⣿[0m[38;2;106;102;100m⠀[0m[38;2;221;221;2m⣿[0m[38;2;237;237;32m⡟[0m[38;2;13;13;18m⢠[0m[38;2;123;123;0m⣤[0m[38;2;189;189;1m⣈[0m[38;2;222;222;2m⣁[0m[38;2;151;151;1m⡈[0m[38;2;201;201;0m⠛[0m[38;2;140;140;0m⠂[0m[38;2;204;204;0m⠹[0m[38;2;225;225;0m⣿[0m[38;2;120;120;0m⡆[0m[38;2;1;1;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;2;2;0m⡠[0m[38;2;165;165;0m⢂[0m[38;2;22;22;0m⠔[0m[38;2;200;200;2m⣡[0m[38;2;157;157;170m⣾[0m[38;2;246;246;246m⡯[0m[38;2;14;14;29m⠀[0m[38;2;252;252;1m⡇[0m[38;2;35;35;0m⠀[0m[38;2;50;50;0m⢀[0m[38;2;206;198;182m⣿[0m[38;2;255;247;229m⣿[0m[38;2;255;245;227m⣿[0m[38;2;255;245;227m⣿[0m[38;2;255;245;227m⣿[0m[38;2;255;245;227m⣿[0m[38;2;255;245;227m⣿[0m[38;2;255;245;227m⣿[0m[38;2;255;245;227m⣿[0m[38;2;255;245;227m⣿[0m[38;2;255;245;227m⣿[0m[38;2;255;245;227m⣿[0m[38;2;255;245;227m⣿[0m[38;2;255;245;227m⣿[0m[38;2;58;56;55m⠀[0m[38;2;237;237;1m⣿[0m[38;2;246;246;15m⡇[0m[38;2;34;32;42m⢸[0m[38;2;254;247;228m⣿[0m[38;2;252;243;225m⣿[0m[38;2;253;243;226m⣿[0m[38;2;255;250;232m⣿[0m[38;2;255;255;234m⣿[0m[38;2;165;159;151m⣶[0m[38;2;4;4;5m⣦[0m[38;2;153;152;0m⣈[0m[38;2;226;226;0m⠛[0m[38;2;81;81;0m⣄[0m[38;2;1;1;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;1;1;0m⢀[0m[38;2;32;32;0m⠎[0m[38;2;120;120;0m⡠[0m[38;2;199;199;1m⢃[0m[38;2;27;27;20m⣼[0m[38;2;255;255;255m⣿[0m[38;2;253;253;253m⠟[0m[38;2;163;163;163m⣰[0m[38;2;29;28;29m⠀[0m[38;2;252;252;2m⡇[0m[38;2;47;47;2m⠀[0m[38;2;48;46;42m⢸[0m[38;2;205;197;182m⡿[0m[38;2;254;245;227m⠿[0m[38;2;253;243;225m⠛[0m[38;2;255;255;236m⣋[0m[38;2;255;250;231m⣉[0m[38;2;255;247;229m⣻[0m[38;2;253;243;225m⣿[0m[38;2;253;243;225m⣿[0m[38;2;255;245;227m⣿[0m[38;2;254;244;225m⣿[0m[38;2;253;243;225m⡿[0m[38;2;255;249;231m⢋[0m[38;2;155;149;138m⣤[0m[38;2;208;201;185m⡍[0m[38;2;41;40;21m⢰[0m[38;2;238;238;10m⣿[0m[38;2;222;221;1m⠃[0m[38;2;167;160;154m⣾[0m[38;2;252;242;224m⣿[0m[38;2;255;245;227m⣿[0m[38;2;255;245;227m⣿[0m[38;2;255;245;227m⣿[0m[38;2;255;245;227m⣿[0m[38;2;255;245;227m⣿[0m[38;2;255;246;231m⣿[0m[38;2;253;246;235m⣿[0m[38;2;241;236;220m⣷[0m[38;2;76;76;15m⡌[0m[38;2;130;130;0m⢆[0m[38;2;1;1;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⡰[0m[38;2;238;238;0m⢁[0m[38;2;19;19;0m⠜[0m[38;2;143;143;0m⣰[0m[38;2;231;231;232m⣿[0m[38;2;253;253;253m⣿[0m[38;2;255;255;255m⣿[0m[38;2;65;65;66m⣤[0m[38;2;255;255;247m⡙[0m[38;2;49;48;28m⠘[0m[38;2;246;246;2m⡇[0m[38;2;55;55;1m⠀[0m[38;2;144;138;136m⣼[0m[38;2;184;177;164m⣷[0m[38;2;152;146;135m⣾[0m[38;2;255;251;233m⣿[0m[38;2;255;250;232m⣿[0m[38;2;235;226;210m⣿[0m[38;2;227;219;202m⣿[0m[38;2;238;229;212m⣿[0m[38;2;253;243;225m⣿[0m[38;2;254;244;226m⣿[0m[38;2;252;242;224m⣿[0m[38;2;204;196;181m⣿[0m[38;2;233;225;208m⣿[0m[38;2;243;233;216m⣿[0m[38;2;254;254;234m⡇[0m[38;2;63;64;0m⢸[0m[38;2;226;226;0m⡿[0m[38;2;75;75;0m⠀[0m[38;2;245;235;215m⣿[0m[38;2;254;244;226m⣿[0m[38;2;255;245;227m⣿[0m[38;2;255;245;227m⣿[0m[38;2;255;245;227m⣿[0m[38;2;255;245;227m⣿[0m[38;2;255;245;227m⣿[0m[38;2;255;248;235m⣿[0m[38;2;255;252;245m⣿[0m[38;2;255;254;251m⣿[0m[38;2;254;255;242m⣿[0m[38;2;54;54;21m⠈[0m[38;2;220;220;0m⢧[0m[38;2;0;0;0m⡀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;1;1;0m⢀[0m[38;2;47;47;0m⡜[0m[38;2;165;165;0m⢠[0m[38;2;159;159;0m⠎[0m[38;2;49;49;0m⣰[0m[38;2;255;255;255m⣿[0m[38;2;255;255;255m⣿[0m[38;2;255;255;255m⣿[0m[38;2;254;254;254m⣿[0m[38;2;255;255;255m⣿[0m[38;2;255;255;255m⣿[0m[38;2;46;46;35m⠀[0m[38;2;246;246;3m⡇[0m[38;2;52;52;0m⠀[0m[38;2;217;208;197m⣉[0m[38;2;225;216;201m⣩[0m[38;2;190;183;168m⣥[0m[38;2;121;116;107m⣤[0m[38;2;73;70;64m⣤[0m[38;2;62;60;55m⡄[0m[38;2;95;91;84m⢠[0m[38;2;196;188;174m⣍[0m[38;2;255;255;238m⣙[0m[38;2;254;244;226m⠻[0m[38;2;253;243;225m⢿[0m[38;2;255;245;227m⣿[0m[38;2;255;245;227m⣿[0m[38;2;254;244;226m⣿[0m[38;2;250;240;222m⡇[0m[38;2;143;143;0m⢸[0m[38;2;241;241;1m⠇[0m[38;2;0;0;0m⢠[0m[38;2;255;255;239m⣿[0m[38;2;255;245;227m⣿[0m[38;2;255;245;227m⣿[0m[38;2;255;245;227m⣿[0m[38;2;255;245;227m⣿[0m[38;2;255;245;227m⣿[0m[38;2;255;245;227m⣿[0m[38;2;255;245;227m⣿[0m[38;2;255;247;234m⣿[0m[38;2;255;249;238m⣿[0m[38;2;252;245;233m⣿[0m[38;2;170;165;155m⡆[0m[38;2;24;24;21m⡄[0m[38;2;245;245;1m⢳[0m[38;2;20;20;0m⣄[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⢠[0m[38;2;173;173;0m⡞[0m[38;2;108;108;0m⢠[0m[38;2;210;210;0m⣿[0m[38;2;120;120;0m⢠[0m[38;2;255;255;255m⣿[0m[38;2;255;255;255m⣿[0m[38;2;255;255;255m⣿[0m[38;2;255;255;255m⣿[0m[38;2;255;255;255m⣿[0m[38;2;255;255;255m⣿[0m[38;2;255;255;255m⣿[0m[38;2;72;72;75m⠀[0m[38;2;254;254;4m⡇[0m[38;2;41;41;0m⠀[0m[38;2;233;233;235m⣿[0m[38;2;239;239;239m⣿[0m[38;2;254;254;254m⣿[0m[38;2;255;255;255m⣿[0m[38;2;255;255;255m⣿[0m[38;2;255;255;255m⡇[0m[38;2;84;84;84m⢸[0m[38;2;231;231;231m⣿[0m[38;2;233;233;233m⣿[0m[38;2;246;246;246m⣿[0m[38;2;73;71;69m⡘[0m[38;2;254;245;227m⣿[0m[38;2;255;245;227m⣿[0m[38;2;253;243;225m⣿[0m[38;2;194;186;177m⠃[0m[38;2;200;200;0m⡿[0m[38;2;130;130;1m⠀[0m[38;2;42;40;35m⢸[0m[38;2;255;250;231m⣿[0m[38;2;255;245;227m⡿[0m[38;2;254;244;226m⠿[0m[38;2;252;243;225m⠛[0m[38;2;253;243;225m⠛[0m[38;2;253;243;225m⠛[0m[38;2;253;243;225m⠿[0m[38;2;253;243;225m⠛[0m[38;2;255;245;227m⢛[0m[38;2;255;255;236m⣋[0m[38;2;255;255;238m⣉[0m[38;2;168;161;148m⣀[0m[38;2;255;255;255m⣿[0m[38;2;17;17;7m⠀[0m[38;2;234;234;0m⣿[0m[38;2;192;192;0m⣧[0m[38;2;0;0;0m⡀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m[38;2;0;0;0m⠀[0m
+ ";
+
+ let mut sys = System::new_all();
+ sys.refresh_all();
+
+ let s = x.to_string();
+ match &*s {
+ "logo" => println!("{}", logo),
+ "color" => println!("{}", color),
+ "avatar" => println!("{}", avatar),
+ "avatar_color" => println!("{}", avatar_color),
+ "os" => println!("{}\n\t", color),
+ _ => println!("not matched"),
+ }
+
+ println!("total memory: {} bytes", sys.total_memory());
+ println!("System name: {:?}", System::name().unwrap());
+ println!("System kernel version: {:?}", System::kernel_version().unwrap());
+ //println!("System OS version: {:?}", System::os_version().unwrap());
+ println!("System host name: {:?}", System::host_name().unwrap());
+ println!("NB CPUs: {}", sys.cpus().len());
+
+ //let disks = Disks::new_with_refreshed_list();
+ //for disk in &disks {
+ // println!("{disk:?}");
+ //}
+
+ //let networks = Networks::new_with_refreshed_list();
+ //println!("=> networks:");
+ //for (interface_name, data) in &networks {
+ // println!("{interface_name}: {}/{} B", data.received(), data.transmitted());
+ //}
+
+ //let components = Components::new_with_refreshed_list();
+ //println!("=> components:");
+ //for component in &components {
+ // println!("{component:?}");
+ //}
+}
diff --git a/src/bot.rs b/src/bot.rs
new file mode 100644
index 0000000..59e2794
--- /dev/null
+++ b/src/bot.rs
@@ -0,0 +1,178 @@
+use seahorse::Context;
+use std::process::Command;
+
+use crate::refresh;
+use crate::reply;
+use crate::reply_link;
+use crate::notify;
+use crate::openai;
+use crate::notify_read;
+
+use crate::data::log_file;
+use crate::data::data_scpt;
+use crate::data::w_cid;
+use crate::data::c_char;
+use crate::data::Notify as Notify;
+
+pub fn c_bot(c: &Context) {
+ let h = async {
+ let mut notify = notify::get_request(100).await;
+ if notify == "err" {
+ refresh(c);
+ notify = notify::get_request(100).await;
+ }
+ let notify: Notify = serde_json::from_str(¬ify).unwrap();
+
+ let n = notify.notifications;
+ let length = &n.len();
+ let su = 0..*length;
+ for i in su {
+ let reason = &n[i].reason;
+ let handle = &n[i].author.handle;
+ let did = &n[i].author.did;
+ let read = n[i].isRead;
+ let cid = &n[i].cid;
+ let uri = &n[i].uri;
+ let time = &n[i].indexedAt;
+ let mut cid_root = cid;
+ let mut uri_root = uri;
+ let check_cid = w_cid(cid.to_string(), log_file(&"n1"), false);
+ let check_cid_run = w_cid(cid.to_string(), log_file(&"n2"), false);
+ // thread
+ if ! n[i].record.reply.is_none() {
+ cid_root = &n[i].record.reply.as_ref().unwrap().root.cid;
+ uri_root = &n[i].record.reply.as_ref().unwrap().root.uri;
+ }
+ println!("{}", read);
+ println!("{}", handle);
+ println!("cid:{}\nuri:{}\ncid_root:{}\nuri_root:{}", cid, uri, cid_root, uri_root);
+ let mut text = "";
+ if ! n[i].record.text.is_none() {
+ text = &n[i].record.text.as_ref().unwrap();
+ }
+ let vec: Vec<&str> = text.split_whitespace().collect();
+ let handlev: Vec<&str> = handle.split('.').collect();
+ let mut handlev = handlev[0].trim().to_string();
+
+ let mut link = "https://card.syui.ai/".to_owned() + &handlev;
+ let s = 0;
+ let mut e = link.chars().count();
+
+ let mut prompt = "none".to_string();
+ let mut com = "none".to_string();
+ if reason == "mention" {
+ prompt = vec[2..].join(" ");
+ com = vec[1].trim().to_string();
+ } else if reason == "reply" {
+ prompt = vec[1..].join(" ");
+ com = vec[0].trim().to_string();
+ }
+ if prompt.is_empty() == false {
+ println!("{}", prompt);
+ }
+
+ if check_cid == false && { reason == "mention" || reason == "reply" } || check_cid_run == false && { reason == "mention" || reason == "reply" } {
+
+ w_cid(cid.to_string(), log_file(&"n2"), true);
+ if com == "/did" || com == "did" {
+ let link = "https://plc.directory/".to_owned() + &did + &"/log";
+ let s = 0;
+ let e = link.chars().count();
+ let d = "\n".to_owned() + &did.to_string();
+ let text_limit = c_char(d);
+ if text_limit.len() > 3 {
+ let str_rep = reply_link::post_request(text_limit.to_string(), link.to_string(), s, e.try_into().unwrap(), cid.to_string(), uri.to_string(), cid_root.to_string(), uri_root.to_string()).await;
+ w_cid(cid.to_string(), log_file(&"n1"), true);
+ println!("{}", str_rep);
+ }
+ } else if com == "/diffusers" || com == "diffusers" {
+ let _output = Command::new(data_scpt(&"diffusers")).arg(&did).arg(&prompt).output().expect("zsh");
+ let _output = Command::new(data_scpt(&"at_img")).arg(&cid).arg(&uri).output().expect("zsh");
+ w_cid(cid.to_string(), log_file(&"n1"), true);
+ } else if prompt.contains("占") == true || prompt.contains("うらない") == true || prompt.contains("うらなって") == true {
+ let output = Command::new(data_scpt(&"card_fortune")).arg(&handle).arg(&did).arg(&cid).arg(&uri).output().expect("zsh");
+ let d = String::from_utf8_lossy(&output.stdout);
+ let d = d.to_string();
+ let text_limit = c_char(d);
+ if text_limit.len() > 3 {
+ println!("{}", text_limit);
+ w_cid(cid.to_string(), log_file(&"n1"), true);
+ }
+ } else if com == "/card" || com == "card" {
+ let output = Command::new(data_scpt(&"api_card")).arg(&handle).arg(&did).arg(&prompt).output().expect("zsh");
+ let d = String::from_utf8_lossy(&output.stdout);
+ let dd = "\n".to_owned() + &d.to_string();
+ let text_limit = c_char(dd);
+ if text_limit.len() > 3 {
+ if d.contains("handle") == false {
+ let str_rep = reply_link::post_request(text_limit.to_string(), link.to_string(), s, e.try_into().unwrap(), cid.to_string(), uri.to_string(), cid_root.to_string(), uri_root.to_string()).await;
+ println!("{}", str_rep);
+ } else {
+ handlev = handle.replace(".", "-").to_string();
+ link = "https://card.syui.ai/".to_owned() + &handlev;
+ e = link.chars().count();
+ let str_rep = reply_link::post_request(d.to_string(), link.to_string(), s, e.try_into().unwrap(), cid.to_string(), uri.to_string(), cid_root.to_string(), uri_root.to_string()).await;
+ println!("{}", str_rep);
+ }
+ w_cid(cid.to_string(), log_file(&"n1"), true);
+ }
+ } else if com == "/fav" || com == "fav" {
+ let output = Command::new(data_scpt(&"api_fav")).arg(&handle).arg(&did).arg(&prompt).output().expect("zsh");
+ let d = String::from_utf8_lossy(&output.stdout);
+ let dd = "\n".to_owned() + &d.to_string();
+ let text_limit = c_char(dd);
+ if text_limit.len() > 3 {
+ let str_rep = reply_link::post_request(d.to_string(), link.to_string(), s, e.try_into().unwrap(), cid.to_string(), uri.to_string(), cid_root.to_string(), uri_root.to_string()).await;
+ println!("{}", str_rep);
+ w_cid(cid.to_string(), log_file(&"n1"), true);
+ }
+ } else if com == "/egg" || com == "egg" {
+ let output = Command::new(data_scpt(&"api_egg")).arg(&handle).arg(&did).arg(&prompt).output().expect("zsh");
+ let d = String::from_utf8_lossy(&output.stdout);
+ let dd = "\n".to_owned() + &d.to_string();
+ let text_limit = c_char(dd);
+ if text_limit.len() > 3 {
+ let str_rep = reply_link::post_request(d.to_string(), link.to_string(), s, e.try_into().unwrap(), cid.to_string(), uri.to_string(), cid_root.to_string(), uri_root.to_string()).await;
+ println!("{}", str_rep);
+ w_cid(cid.to_string(), log_file(&"n1"), true);
+ }
+ } else if com == "/nyan" || com == "nyan" {
+ let output = Command::new(data_scpt(&"nyancat")).arg(&handle).arg(&did).arg(&cid).arg(&uri).arg(&prompt).output().expect("zsh");
+ let d = String::from_utf8_lossy(&output.stdout);
+ let dd = "\n".to_owned() + &d.to_string();
+ let text_limit = c_char(dd);
+ println!("{}", text_limit);
+ if text_limit.len() > 3 {
+ let str_rep = reply::post_request(text_limit.to_string(), cid.to_string(), uri.to_string(), cid_root.to_string(), uri_root.to_string()).await;
+ println!("{}", str_rep);
+ w_cid(cid.to_string(), log_file(&"n1"), true);
+ }
+ } else if com == "/ten" || com == "ten" {
+ let option = &vec[2..].join(" ");
+ let sub_option = &vec[3..].join(" ");
+ let output = Command::new(data_scpt(&"api_ten")).arg(&handle).arg(&did).arg(&cid).arg(&uri).arg(&option).arg(&sub_option).output().expect("zsh");
+ let d = String::from_utf8_lossy(&output.stdout);
+ let d = "\n".to_owned() + &d.to_string();
+ let text_limit = c_char(d);
+ if text_limit.len() > 3 {
+ let str_rep = reply_link::post_request(text_limit.to_string(), link.to_string(), s, e.try_into().unwrap(), cid.to_string(), uri.to_string(), cid_root.to_string(), uri_root.to_string()).await;
+ println!("{}", str_rep);
+ w_cid(cid.to_string(), log_file(&"n1"), true);
+ }
+ } else {
+ // openai
+ let str_openai = openai::post_request(prompt.to_string()).await;
+ let text_limit = c_char(str_openai);
+ let str_rep = reply::post_request(text_limit.to_string(), cid.to_string(), uri.to_string(), cid_root.to_string(), uri_root.to_string()).await;
+ println!("{}", str_rep);
+ w_cid(cid.to_string(), log_file(&"n1"), true);
+ }
+ let str_notify = notify_read::post_request(time.to_string()).await;
+ println!("{}", str_notify);
+ println!("---");
+ }
+ }
+ };
+ let res = tokio::runtime::Runtime::new().unwrap().block_on(h);
+ return res
+}
diff --git a/src/data.rs b/src/data.rs
new file mode 100644
index 0000000..d7b26d6
--- /dev/null
+++ b/src/data.rs
@@ -0,0 +1,562 @@
+use seahorse::Context;
+use config::{Config, ConfigError, File};
+use serde_derive::{Deserialize, Serialize};
+use std::fs;
+use std::io::Write;
+use std::io::Read;
+use std::fs::OpenOptions;
+use std::path::Path;
+
+pub fn data_file(s: &str) -> String {
+ let file = "/.config/ai/";
+ let mut f = shellexpand::tilde("~").to_string();
+ f.push_str(&file);
+ let path = Path::new(&f);
+ if path.is_dir() == false {
+ let _ = fs::create_dir_all(f.clone());
+ }
+ match &*s {
+ "toml" => f + &"token.toml",
+ "json" => f + &"token.json",
+ _ => f + &"." + &s,
+ }
+}
+
+pub fn log_file(s: &str) -> String {
+ let file = "/.config/ai/txt/";
+ let mut f = shellexpand::tilde("~").to_string();
+ f.push_str(&file);
+ let path = Path::new(&f);
+ if path.is_dir() == false {
+ let _ = fs::create_dir_all(f.clone());
+ }
+ match &*s {
+ "n1" => f + &"notify_cid.txt",
+ "n2" => f + &"notify_cid_run.txt",
+ _ => f + &s,
+ }
+}
+
+impl Token {
+ pub fn new() -> Result {
+ let d = data_file("json");
+ let s = Config::builder()
+ .add_source(File::with_name(&d))
+ .add_source(config::Environment::with_prefix("APP"))
+ .build()?;
+ s.try_deserialize()
+ }
+}
+
+impl Data {
+ pub fn new() -> Result {
+ let d = data_file("toml");
+ let s = Config::builder()
+ .add_source(File::with_name(&d))
+ .add_source(config::Environment::with_prefix("APP"))
+ .build()?;
+ s.try_deserialize()
+ }
+}
+
+#[derive(Debug, Serialize, Deserialize)]
+#[allow(non_snake_case)]
+pub struct Token {
+ pub did: String,
+ pub handle: String,
+ pub accessJwt: String,
+ pub refreshJwt: String,
+}
+
+#[derive(Debug, Serialize, Deserialize)]
+#[allow(non_snake_case)]
+pub struct Data {
+ pub host: String,
+ pub did: String,
+ pub handle: String,
+ pub access: String,
+ pub refresh: String,
+}
+
+#[derive(Debug, Serialize, Deserialize)]
+pub struct BaseUrl {
+ pub profile_get: String,
+ pub thread_get: String,
+ pub describe: String,
+ pub record_list: String,
+ pub record_create: String,
+ pub record_delete: String,
+ pub session_create: String,
+ pub session_refresh: String,
+ pub session_get: String,
+ pub timeline_get: String,
+ pub timeline_author: String,
+ pub upload_blob: String,
+ pub update_handle: String,
+ pub account_create: String,
+ pub notify_count: String,
+ pub notify_list: String,
+ pub notify_update: String,
+ pub repo_update: String,
+ pub like: String,
+ pub repost: String,
+ pub follow: String,
+ pub follows: String,
+ pub followers: String,
+}
+
+pub fn url(s: &str) -> String {
+ let s = String::from(s);
+ let data = Data::new().unwrap();
+ let data = Data {
+ host: data.host,
+ handle: data.handle,
+ did: data.did,
+ access: data.access,
+ refresh: data.refresh,
+ };
+ let t = "https://".to_string() + &data.host.to_string() + &"/xrpc/".to_string();
+ let baseurl = BaseUrl {
+ profile_get: "com.atproto.identity.resolveHandle".to_string(),
+ thread_get: "app.bsky.feed.getPostThread".to_string(),
+ record_create: "com.atproto.repo.createRecord".to_string(),
+ record_delete: "com.atproto.repo.deleteRecord".to_string(),
+ describe: "com.atproto.repo.describeRepo".to_string(),
+ record_list: "com.atproto.repo.listRecords".to_string(),
+ session_create: "com.atproto.server.createSession".to_string(),
+ session_refresh: "com.atproto.server.refreshSession".to_string(),
+ session_get: "com.atproto.server.getSession".to_string(),
+ timeline_get: "app.bsky.feed.getTimeline".to_string(),
+ timeline_author: "app.bsky.feed.getAuthorFeed".to_string(),
+ like: "app.bsky.feed.like".to_string(),
+ repost: "app.bsky.feed.repost".to_string(),
+ follow: "app.bsky.graph.follow".to_string(),
+ follows: "app.bsky.graph.getFollows".to_string(),
+ followers: "app.bsky.graph.getFollowers".to_string(),
+ upload_blob: "com.atproto.repo.uploadBlob".to_string(),
+ account_create: "com.atproto.server.createAccount".to_string(),
+ update_handle: "com.atproto.identity.updateHandle".to_string(),
+ notify_count: "app.bsky.notification.getUnreadCount".to_string(),
+ notify_list: "app.bsky.notification.listNotifications".to_string(),
+ notify_update: "app.bsky.notification.updateSeen".to_string(),
+ repo_update: "com.atproto.sync.updateRepo".to_string(),
+ };
+
+ match &*s {
+ "profile_get" => t.to_string() + &baseurl.profile_get,
+ "thread_get" => t.to_string() + &baseurl.thread_get,
+ "describe" => t.to_string() + &baseurl.describe,
+ "record_list" => t.to_string() + &baseurl.record_list,
+ "record_create" => t.to_string() + &baseurl.record_create,
+ "record_delete" => t.to_string() + &baseurl.record_delete,
+ "session_create" => t.to_string() + &baseurl.session_create,
+ "session_refresh" => t.to_string() + &baseurl.session_refresh,
+ "session_get" => t.to_string() + &baseurl.session_get,
+ "timeline_get" => t.to_string() + &baseurl.timeline_get,
+ "timeline_author" => t.to_string() + &baseurl.timeline_get,
+ "upload_blob" => t.to_string() + &baseurl.upload_blob,
+ "account_create" => t.to_string() + &baseurl.account_create,
+ "update_handle" => t.to_string() + &baseurl.update_handle,
+ "notify_list" => t.to_string() + &baseurl.notify_list,
+ "notify_count" => t.to_string() + &baseurl.notify_count,
+ "notify_update" => t.to_string() + &baseurl.notify_update,
+ "repo_update" => t.to_string() + &baseurl.repo_update,
+ "like" => t.to_string() + &baseurl.like,
+ "repost" => t.to_string() + &baseurl.repost,
+ "follow" => t.to_string() + &baseurl.follow,
+ "follows" => t.to_string() + &baseurl.follows,
+ "followers" => t.to_string() + &baseurl.followers,
+ _ => s,
+ }
+}
+
+pub fn data_toml(s: &str) -> String {
+ let s = String::from(s);
+ let data = Data::new().unwrap();
+ let data = Data {
+ host: data.host,
+ handle: data.handle,
+ did: data.did,
+ access: data.access,
+ refresh: data.refresh,
+ };
+ match &*s {
+ "host" => data.handle,
+ "handle" => data.handle,
+ "did" => data.did,
+ "access" => data.access,
+ "refresh" => data.refresh,
+ _ => s,
+ }
+}
+
+pub fn data_scpt(s: &str) -> String {
+ let s = String::from(s);
+ let file = "/.config/ai/scpt/".to_owned() + &s + &".zsh";
+ let mut f = shellexpand::tilde("~").to_string();
+ f.push_str(&file);
+ return f
+}
+
+#[derive(Serialize, Deserialize)]
+pub struct Notify {
+ pub notifications: Vec
+}
+
+#[derive(Serialize, Deserialize)]
+pub struct Status {
+ pub handle: String,
+ pub did: String,
+}
+
+#[derive(Serialize, Deserialize)]
+#[allow(non_snake_case)]
+pub struct DidDocs {
+ pub verificationMethod: Vec,
+ pub service: Vec,
+ pub id: String,
+ pub alsoKnownAs: Vec,
+}
+
+#[derive(Serialize, Deserialize)]
+#[allow(non_snake_case)]
+pub struct VerificationMethod {
+ pub id: String,
+ pub r#type: String,
+ pub controller: String,
+ pub publicKeyMultibase: String,
+}
+
+#[derive(Serialize, Deserialize)]
+#[allow(non_snake_case)]
+pub struct Service {
+ pub id: String,
+ pub r#type: String,
+ pub serviceEndpoint: String,
+}
+
+#[derive(Serialize, Deserialize)]
+#[allow(non_snake_case)]
+pub struct AlsoKnownAs {
+}
+
+#[derive(Serialize, Deserialize)]
+pub struct Timeline {
+ pub feed: Vec
+}
+#[derive(Serialize, Deserialize)]
+pub struct Session {
+ pub did: String,
+ pub email: String,
+ pub handle: String,
+}
+#[derive(Serialize, Deserialize)]
+pub struct Follow {
+ pub follows: Vec,
+ pub cursor: String,
+}
+
+#[derive(Serialize, Deserialize)]
+#[allow(non_snake_case)]
+pub struct Notifications {
+ pub uri: String,
+ pub cid: String,
+ pub author: Author,
+ pub reason: String,
+ //pub reasonSubject: String,
+ pub record: Record,
+ pub isRead: bool,
+ pub indexedAt: String,
+ //pub labels: Labels,
+}
+
+#[derive(Serialize, Deserialize)]
+#[allow(non_snake_case)]
+pub struct Thread {
+ pub r#type: String,
+ pub post: String,
+ pub root: String,
+ pub author: Author,
+ pub reason: String,
+ //pub reasonSubject: String,
+ pub record: Record,
+ pub isRead: bool,
+ pub indexedAt: String,
+ //pub labels: Labels,
+}
+
+#[derive(Serialize, Deserialize)]
+#[allow(non_snake_case)]
+pub struct Author {
+ pub did: String,
+ //pub declaration: Declaration,
+ pub description: Option,
+ pub displayName: Option,
+ pub handle: String,
+ pub avatar: Option,
+ pub viewer: Viewer,
+ //pub labels: Labels,
+}
+
+#[derive(Serialize, Deserialize)]
+#[allow(non_snake_case)]
+pub struct Labels {
+ pub src: Option,
+ pub uri: Option,
+ pub cid: Option,
+ pub val: Option,
+ pub cts: Option,
+ pub neg: Option,
+}
+
+#[derive(Serialize, Deserialize)]
+#[allow(non_snake_case)]
+pub struct Declaration {
+ pub actorType: String,
+ pub cid: String,
+}
+
+#[derive(Serialize, Deserialize)]
+#[allow(non_snake_case)]
+pub struct Viewer {
+ pub muted: bool,
+}
+
+#[derive(Serialize, Deserialize)]
+#[allow(non_snake_case)]
+#[derive(Debug)]
+pub struct Record {
+ pub text: Option,
+ pub createdAt: String,
+ pub reply: Option,
+}
+
+#[derive(Serialize, Deserialize)]
+#[allow(non_snake_case)]
+#[derive(Debug)]
+pub struct Reply {
+ pub parent: ReplyParent,
+ pub root: ReplyRoot,
+}
+
+#[derive(Serialize, Deserialize)]
+#[allow(non_snake_case)]
+#[derive(Debug)]
+pub struct ReplyRoot {
+ pub cid: String,
+ pub uri: String,
+}
+
+#[derive(Serialize, Deserialize)]
+#[allow(non_snake_case)]
+#[derive(Debug)]
+pub struct ReplyParent {
+ pub cid: String,
+ pub uri: String,
+}
+
+#[derive(Serialize, Deserialize)]
+#[allow(non_snake_case)]
+pub struct Langs {
+}
+
+#[derive(Serialize, Deserialize)]
+#[allow(non_snake_case)]
+pub struct Feed {
+ pub post: Post,
+}
+
+#[derive(Serialize, Deserialize)]
+#[allow(non_snake_case)]
+pub struct Post {
+ pub did: Option,
+ pub uri: String,
+ pub cid: String,
+ pub collection: Option,
+ pub record: Record,
+ pub author: Author,
+ pub reason: Option,
+ pub indexedAt: String,
+ pub replyCount: i32,
+ pub postCount: Option,
+ pub repostCount: i32,
+ pub likeCount: i32,
+}
+
+#[derive(Serialize, Deserialize)]
+pub struct Cid {
+ pub cid: String
+}
+
+#[derive(Serialize, Deserialize)]
+#[allow(non_snake_case)]
+pub struct Img {
+ pub blob: Blob
+}
+
+#[derive(Serialize, Deserialize)]
+pub struct Blob {
+ pub r#ref: Ref,
+}
+
+#[derive(Serialize, Deserialize)]
+pub struct Ref {
+ pub link: String,
+}
+
+#[derive(Serialize, Deserialize)]
+pub struct Handle {
+ pub handle: String
+}
+
+//#[derive(Serialize, Deserialize)]
+//pub struct Did {
+// pub did: String
+//}
+
+//#[derive(Serialize, Deserialize)]
+//pub struct Labels {
+//}
+//
+//#[derive(Serialize, Deserialize)]
+//pub struct Viewer {
+// pub muted: bool,
+// pub blockedBy: bool,
+//}
+//
+#[derive(Serialize, Deserialize)]
+#[allow(non_snake_case)]
+pub struct ProfileIdentityResolve {
+ pub did: String,
+}
+
+#[derive(Serialize, Deserialize)]
+#[allow(non_snake_case)]
+pub struct Profile {
+ pub did: String,
+ pub handle: String,
+ pub followsCount: Option,
+ pub followersCount: Option,
+ pub postsCount: i32,
+ pub indexedAt: Option,
+ pub avatar: Option,
+ pub banner: Option,
+ pub displayName: Option,
+ pub description: Option,
+ pub viewer: Viewer,
+ pub labels: Labels,
+}
+
+pub fn c_char(i: String) -> String {
+ let l = 250;
+ let mut s = String::new();
+ for ii in i.chars().enumerate() {
+ match ii.0 {
+ n if n > l.try_into().unwrap() => {break}
+ _ => {s.push(ii.1)}
+ }
+ }
+ return s
+}
+
+pub fn w_cfg(h: &str, res: &str) {
+ let f = data_file(&"json");
+ let ff = data_file(&"toml");
+ let mut f = fs::File::create(f.clone()).unwrap();
+ let mut ff = fs::File::create(ff.clone()).unwrap();
+ f.write_all(&res.as_bytes()).unwrap();
+ let json: Token = serde_json::from_str(&res).unwrap();
+ let datas = Data {
+ host: h.to_string(),
+ did: json.did.to_string(),
+ handle: json.handle.to_string(),
+ access: json.accessJwt.to_string(),
+ refresh: json.refreshJwt.to_string(),
+ };
+ let toml = toml::to_string(&datas).unwrap();
+ ff.write_all(&toml.as_bytes()).unwrap();
+}
+
+pub fn w_cid(cid :String, file: String, t: bool) -> bool {
+ let f = file;
+ let mut file = match OpenOptions::new()
+ .create(true)
+ .write(true)
+ .read(true)
+ .append(true)
+ .open(f.clone())
+ {
+ Err(why) => panic!("Couldn't open {}: {}", f, why),
+ Ok(file) => file,
+ };
+ let mut contents = String::new();
+
+ match file.read_to_string(&mut contents) {
+ Err(why) => panic!("Couldn't read {}: {}", f, why),
+ Ok(_) => (),
+ }
+ if contents.contains(&cid) == false {
+ if t {
+ let cid = cid + "\n";
+ match file.write_all(cid.as_bytes()) {
+ Err(why) => panic!("Couldn't write \"{}\" to {}: {}", contents, f, why),
+ Ok(_) => println!("finished"),
+ }
+ }
+ let check = false;
+ return check
+ } else {
+ let check = true;
+ return check
+ }
+}
+
+pub fn c_follow_all() {
+ let file = "/.config/ai/scpt/follow_all.zsh";
+ let mut f = shellexpand::tilde("~").to_string();
+ f.push_str(&file);
+ use std::process::Command;
+ let output = Command::new(&f).output().expect("zsh");
+ let d = String::from_utf8_lossy(&output.stdout);
+ let d = "\n".to_owned() + &d.to_string();
+ println!("{}", d);
+}
+
+pub fn c_openai_key(c: &Context) {
+ let api = c.args[0].to_string();
+ let o = "api='".to_owned() + &api.to_string() + &"'".to_owned();
+ let o = o.to_string();
+ let l = shellexpand::tilde("~") + "/.config/ai/openai.toml";
+ let l = l.to_string();
+ let mut l = fs::File::create(l).unwrap();
+ if o != "" {
+ l.write_all(&o.as_bytes()).unwrap();
+ }
+ println!("{:#?}", l);
+}
+
+impl Open {
+ pub fn new() -> Result {
+ let d = shellexpand::tilde("~") + "/.config/ai/openai.toml";
+ let s = Config::builder()
+ .add_source(File::with_name(&d))
+ .add_source(config::Environment::with_prefix("APP"))
+ .build()?;
+ s.try_deserialize()
+ }
+}
+
+#[derive(Debug, Deserialize)]
+pub struct Open {
+ pub api: String,
+}
+
+#[derive(Serialize, Deserialize, Debug)]
+pub struct OpenData {
+ choices: Vec,
+}
+
+#[derive(Serialize, Deserialize, Debug)]
+pub struct Choices {
+ text: String,
+}
diff --git a/src/describe.rs b/src/describe.rs
new file mode 100644
index 0000000..66a3a62
--- /dev/null
+++ b/src/describe.rs
@@ -0,0 +1,23 @@
+extern crate reqwest;
+//use crate::data_toml;
+use crate::url;
+
+pub async fn get_request(user: String) -> String {
+
+ //let token = data_toml(&"access");
+ let url = url(&"describe");
+
+ let client = reqwest::Client::new();
+ let res = client
+ .get(url)
+ .query(&[("repo", &user)])
+ //.header("Authorization", "Bearer ".to_owned() + &token)
+ .send()
+ .await
+ .unwrap()
+ .text()
+ .await
+ .unwrap();
+
+ return res
+}
diff --git a/src/follow.rs b/src/follow.rs
new file mode 100644
index 0000000..b7741d7
--- /dev/null
+++ b/src/follow.rs
@@ -0,0 +1,82 @@
+extern crate reqwest;
+use crate::data_toml;
+use crate::url;
+use serde_json::json;
+use iso8601_timestamp::Timestamp;
+
+//use crate::data::Follow;
+
+pub async fn post_request(u: String) -> String {
+
+ let token = data_toml(&"access");
+ let did = data_toml(&"did");
+ let handle = data_toml(&"handle");
+
+ let url = url(&"record_create");
+ let col = "app.bsky.graph.follow".to_string();
+
+ let d = Timestamp::now_utc();
+ let d = d.to_string();
+
+ let post = Some(json!({
+ "repo": handle.to_string(),
+ "did": did.to_string(),
+ "collection": col.to_string(),
+ "record": {
+ "subject": u.to_string(),
+ "createdAt": d.to_string(),
+ },
+ }));
+
+ let client = reqwest::Client::new();
+ let res = client
+ .post(url)
+ .json(&post)
+ .header("Authorization", "Bearer ".to_owned() + &token)
+ .send()
+ .await
+ .unwrap()
+ .text()
+ .await
+ .unwrap();
+
+ return res
+}
+
+pub async fn delete_request(u: String, rkey: String) -> String {
+
+ let token = data_toml(&"access");
+ let did = data_toml(&"did");
+ let handle = data_toml(&"handle");
+
+ let url = url(&"record_delete");
+ let col = "app.bsky.graph.follow".to_string();
+
+ let d = Timestamp::now_utc();
+ let d = d.to_string();
+
+ let post = Some(json!({
+ "repo": handle.to_string(),
+ "did": did.to_string(),
+ "collection": col.to_string(),
+ "rkey": rkey.to_string(),
+ "record": {
+ "subject": u.to_string(),
+ "createdAt": d.to_string(),
+ },
+ }));
+
+ let client = reqwest::Client::new();
+ let res = client
+ .post(url)
+ .json(&post)
+ .header("Authorization", "Bearer ".to_owned() + &token)
+ .send()
+ .await
+ .unwrap()
+ .text()
+ .await
+ .unwrap();
+
+ return res
+}
diff --git a/src/followers.rs b/src/followers.rs
new file mode 100644
index 0000000..952d130
--- /dev/null
+++ b/src/followers.rs
@@ -0,0 +1,25 @@
+extern crate reqwest;
+use crate::data_toml;
+use crate::url;
+//use serde_json::json;
+
+pub async fn get_request(actor: String, cursor: Option) -> String {
+
+ let token = data_toml(&"access");
+ let url = url(&"followers");
+ let cursor = cursor.unwrap();
+
+ let client = reqwest::Client::new();
+ let res = client
+ .get(url)
+ .query(&[("actor", actor),("cursor", cursor)])
+ .header("Authorization", "Bearer ".to_owned() + &token)
+ .send()
+ .await
+ .unwrap()
+ .text()
+ .await
+ .unwrap();
+
+ return res
+}
diff --git a/src/follows.rs b/src/follows.rs
new file mode 100644
index 0000000..db6a2db
--- /dev/null
+++ b/src/follows.rs
@@ -0,0 +1,27 @@
+extern crate reqwest;
+use crate::data_toml;
+use crate::url;
+//use serde_json::json;
+
+pub async fn get_request(actor: String, cursor: Option) -> String {
+
+ let token = data_toml(&"access");
+ let url = url(&"follows");
+ let cursor = cursor.unwrap();
+ //let cursor = "1682386039125::bafyreihwgwozmvqxcxrhbr65agcaa4v357p27ccrhzkjf3mz5xiozjvzfa".to_string();
+ //let cursor = "1682385956974::bafyreihivhux5m3sxbg33yruhw5ozhahwspnuqdsysbo57smzgptdcluem".to_string();
+
+ let client = reqwest::Client::new();
+ let res = client
+ .get(url)
+ .query(&[("actor", actor),("cursor", cursor)])
+ //cursor.unwrap()
+ .header("Authorization", "Bearer ".to_owned() + &token)
+ .send()
+ .await
+ .unwrap()
+ .text()
+ .await
+ .unwrap();
+ return res
+}
diff --git a/src/img.rs b/src/img.rs
new file mode 100644
index 0000000..b27bace
--- /dev/null
+++ b/src/img.rs
@@ -0,0 +1,58 @@
+extern crate reqwest;
+use crate::data_toml;
+use crate::url;
+use serde_json::json;
+use iso8601_timestamp::Timestamp;
+
+pub async fn post_request(text: String, link: String) -> String {
+
+ let token = data_toml(&"access");
+ let did = data_toml(&"did");
+ let handle = data_toml(&"handle");
+
+ let url = url(&"record_create");
+ let col = "app.bsky.feed.post".to_string();
+
+ let d = Timestamp::now_utc();
+ let d = d.to_string();
+
+ let post = Some(json!({
+ "repo": handle.to_string(),
+ "did": did.to_string(),
+ "collection": col.to_string(),
+ "record": {
+ "createdAt": d.to_string(),
+ "text": text.to_string(),
+ "embed": {
+ "$type": "app.bsky.embed.images",
+ "images": [
+ {
+ "alt": "",
+ "image": {
+ "$type":"blob",
+ "ref": {
+ "$link" : link.to_string()
+ },
+ "mimeType": "image/png",
+ "size": 0
+ }
+ }
+ ]
+ }
+ }
+ }));
+
+ let client = reqwest::Client::new();
+ let res = client
+ .post(url)
+ .json(&post)
+ .header("Authorization", "Bearer ".to_owned() + &token)
+ .send()
+ .await
+ .unwrap()
+ .text()
+ .await
+ .unwrap();
+
+ return res
+}
diff --git a/src/img_reply.rs b/src/img_reply.rs
new file mode 100644
index 0000000..2637e7e
--- /dev/null
+++ b/src/img_reply.rs
@@ -0,0 +1,68 @@
+extern crate reqwest;
+use crate::data_toml;
+use crate::url;
+use serde_json::json;
+use iso8601_timestamp::Timestamp;
+
+pub async fn post_request(text: String, link: String, cid: String, uri: String, itype: String) -> String {
+
+ let token = data_toml(&"access");
+ let did = data_toml(&"did");
+ let handle = data_toml(&"handle");
+
+ let url = url(&"record_create");
+ let col = "app.bsky.feed.post".to_string();
+
+ let d = Timestamp::now_utc();
+ let d = d.to_string();
+
+ let post = Some(json!({
+ "repo": handle.to_string(),
+ "did": did.to_string(),
+ "collection": col.to_string(),
+ "record": {
+ "createdAt": d.to_string(),
+ "text": text.to_string(),
+ "embed": {
+ "$type": "app.bsky.embed.images",
+ "images": [
+ {
+ "alt": "",
+ "image": {
+ "$type":"blob",
+ "ref": {
+ "$link" : link.to_string()
+ },
+ "mimeType": itype.to_string(),
+ "size": 0
+ }
+ }
+ ]
+ },
+ "reply": {
+ "root": {
+ "cid": cid.to_string(),
+ "uri": uri.to_string()
+ },
+ "parent": {
+ "cid": cid.to_string(),
+ "uri": uri.to_string()
+ }
+ }
+ }
+ }));
+
+ let client = reqwest::Client::new();
+ let res = client
+ .post(url)
+ .json(&post)
+ .header("Authorization", "Bearer ".to_owned() + &token)
+ .send()
+ .await
+ .unwrap()
+ .text()
+ .await
+ .unwrap();
+
+ return res
+}
diff --git a/src/img_upload.rs b/src/img_upload.rs
new file mode 100644
index 0000000..b27bace
--- /dev/null
+++ b/src/img_upload.rs
@@ -0,0 +1,58 @@
+extern crate reqwest;
+use crate::data_toml;
+use crate::url;
+use serde_json::json;
+use iso8601_timestamp::Timestamp;
+
+pub async fn post_request(text: String, link: String) -> String {
+
+ let token = data_toml(&"access");
+ let did = data_toml(&"did");
+ let handle = data_toml(&"handle");
+
+ let url = url(&"record_create");
+ let col = "app.bsky.feed.post".to_string();
+
+ let d = Timestamp::now_utc();
+ let d = d.to_string();
+
+ let post = Some(json!({
+ "repo": handle.to_string(),
+ "did": did.to_string(),
+ "collection": col.to_string(),
+ "record": {
+ "createdAt": d.to_string(),
+ "text": text.to_string(),
+ "embed": {
+ "$type": "app.bsky.embed.images",
+ "images": [
+ {
+ "alt": "",
+ "image": {
+ "$type":"blob",
+ "ref": {
+ "$link" : link.to_string()
+ },
+ "mimeType": "image/png",
+ "size": 0
+ }
+ }
+ ]
+ }
+ }
+ }));
+
+ let client = reqwest::Client::new();
+ let res = client
+ .post(url)
+ .json(&post)
+ .header("Authorization", "Bearer ".to_owned() + &token)
+ .send()
+ .await
+ .unwrap()
+ .text()
+ .await
+ .unwrap();
+
+ return res
+}
diff --git a/src/like.rs b/src/like.rs
new file mode 100644
index 0000000..4391843
--- /dev/null
+++ b/src/like.rs
@@ -0,0 +1,45 @@
+extern crate reqwest;
+use crate::data_toml;
+use crate::url;
+use serde_json::json;
+use iso8601_timestamp::Timestamp;
+
+pub async fn post_request(cid: String, uri: String) -> String {
+
+ let token = data_toml(&"access");
+ let did = data_toml(&"did");
+ let handle = data_toml(&"handle");
+
+ let url = url(&"record_create");
+ let col = "app.bsky.feed.like".to_string();
+
+ let d = Timestamp::now_utc();
+ let d = d.to_string();
+
+ let post = Some(json!({
+ "repo": handle.to_string(),
+ "did": did.to_string(),
+ "collection": col.to_string(),
+ "record": {
+ "subject": {
+ "uri": uri.to_string(),
+ "cid": cid.to_string()
+ },
+ "createdAt": d.to_string(),
+ },
+ }));
+
+ let client = reqwest::Client::new();
+ let res = client
+ .post(url)
+ .json(&post)
+ .header("Authorization", "Bearer ".to_owned() + &token)
+ .send()
+ .await
+ .unwrap()
+ .text()
+ .await
+ .unwrap();
+
+ return res
+}
diff --git a/src/main.rs b/src/main.rs
new file mode 100644
index 0000000..0c0c6d7
--- /dev/null
+++ b/src/main.rs
@@ -0,0 +1,525 @@
+use seahorse::{App, Command, Context, Flag, FlagType};
+use std::env;
+
+use crate::ascii::c_ascii;
+use crate::data::data_toml;
+use crate::data::url;
+use crate::data::w_cfg;
+use crate::data::c_follow_all;
+use crate::bot::c_bot;
+use crate::data::c_openai_key;
+
+use data::ProfileIdentityResolve as ProfileIdentityResolve;
+
+pub mod ascii;
+pub mod data;
+pub mod refresh;
+pub mod token;
+pub mod session;
+pub mod notify;
+pub mod notify_read;
+pub mod reply;
+pub mod reply_og;
+pub mod reply_link;
+pub mod describe;
+pub mod timeline_author;
+pub mod post;
+pub mod post_link;
+pub mod mention;
+pub mod profile;
+pub mod follow;
+pub mod follows;
+pub mod followers;
+pub mod like;
+pub mod repost;
+pub mod img_reply;
+pub mod bot;
+pub mod openai;
+
+fn main() {
+ let args: Vec = env::args().collect();
+ let app = App::new(env!("CARGO_PKG_NAME"))
+ .command(
+ Command::new("ai")
+ .alias("a")
+ .action(ascii_art)
+ .flag(
+ Flag::new("type", FlagType::String)
+ .description("type flag")
+ .alias("t"),
+ )
+ )
+ .command(
+ Command::new("bot")
+ .alias("b")
+ .action(bot),
+ )
+ .command(
+ Command::new("follow_all")
+ .action(follow_all),
+ )
+ .command(
+ Command::new("login")
+ .alias("l")
+ .description("l -p \n\t\t\tl -p -s ")
+ .action(token)
+ .flag(
+ Flag::new("password", FlagType::String)
+ .description("password flag")
+ .alias("p"),
+ )
+ .flag(
+ Flag::new("server", FlagType::String)
+ .description("server flag")
+ .alias("s"),
+ )
+ )
+ .command(
+ Command::new("refresh")
+ .alias("r")
+ .action(refresh),
+ )
+ .command(
+ Command::new("notify")
+ .alias("n")
+ .action(notify),
+ )
+ .command(
+ Command::new("timeline")
+ .alias("t")
+ .action(timeline),
+ )
+ .command(
+ Command::new("did")
+ .description("did ")
+ .action(did)
+ )
+ .command(
+ Command::new("post")
+ .description("p ")
+ .alias("p")
+ .action(post)
+ .flag(
+ Flag::new("link", FlagType::String)
+ .alias("l"),
+ )
+ )
+ .command(
+ Command::new("like")
+ .description("like -u ")
+ .action(like)
+ .flag(
+ Flag::new("uri", FlagType::String)
+ .alias("u"),
+ )
+ )
+ .command(
+ Command::new("repost")
+ .description("repost -u ")
+ .action(repost)
+ .flag(
+ Flag::new("uri", FlagType::String)
+ .alias("u"),
+ )
+ )
+ .command(
+ Command::new("reply-og")
+ .description("reply-og -c -u -i
-t -d -l ")
+ .action(reply_og)
+ .flag(
+ Flag::new("uri", FlagType::String)
+ .alias("u"),
+ )
+ .flag(
+ Flag::new("cid", FlagType::String)
+ .alias("c"),
+ )
+ .flag(
+ Flag::new("link", FlagType::String)
+ .alias("l"),
+ )
+ .flag(
+ Flag::new("title", FlagType::String)
+ .alias("t"),
+ )
+ .flag(
+ Flag::new("description", FlagType::String)
+ .alias("d"),
+ )
+ .flag(
+ Flag::new("img", FlagType::String)
+ .alias("i"),
+ )
+ )
+ .command(
+ Command::new("reply")
+ .description("r -u -c ")
+ .action(reply)
+ .flag(
+ Flag::new("uri", FlagType::String)
+ .alias("u"),
+ )
+ .flag(
+ Flag::new("cid", FlagType::String)
+ .alias("c"),
+ )
+ .flag(
+ Flag::new("link", FlagType::String)
+ .description("-l ")
+ .alias("l"),
+ )
+ )
+ .command(
+ Command::new("mention")
+ .description("@ -p ")
+ .alias("@")
+ .action(mention)
+ .flag(
+ Flag::new("post", FlagType::String)
+ .alias("p"),
+ )
+ )
+ .command(
+ Command::new("follow")
+ .description("follow ")
+ .action(follow)
+ .flag(
+ Flag::new("follows", FlagType::Bool)
+ .alias("s"),
+ )
+ .flag(
+ Flag::new("delete", FlagType::String)
+ .alias("d"),
+ )
+ .flag(
+ Flag::new("followers", FlagType::Bool)
+ .alias("w"),
+ )
+ .flag(
+ Flag::new("all", FlagType::Bool)
+ .alias("a"),
+ )
+ .flag(
+ Flag::new("cursor", FlagType::String)
+ .alias("c"),
+ )
+ )
+ .command(
+ Command::new("profile")
+ .description("pro ")
+ .alias("pro")
+ .action(profile)
+ )
+ .command(
+ Command::new("img-upload")
+ .description("img-upload
")
+ .action(img_upload)
+ )
+ .command(
+ Command::new("img-post")
+ .description("img-post -l -u -c ")
+ .action(img_post)
+ .flag(
+ Flag::new("link", FlagType::String)
+ .alias("l"),
+ )
+ .flag(
+ Flag::new("uri", FlagType::String)
+ .alias("u"),
+ )
+ .flag(
+ Flag::new("cid", FlagType::String)
+ .alias("c"),
+ )
+ )
+ .command(
+ Command::new("openai")
+ .description("openai ")
+ .alias("chat")
+ .action(openai)
+ )
+ .command(
+ Command::new("openai-key")
+ .description("openai-key ")
+ .action(openai_key),
+ )
+ ;
+ app.run(args);
+}
+
+fn ascii_art(c: &Context) {
+ if let Ok(t) = c.string_flag("type") {
+ c_ascii(&t);
+ } else {
+ c_ascii("color");
+ }
+}
+
+fn bot(c: &Context) {
+ loop {
+ c_bot(c);
+ }
+}
+
+fn follow_all(_c: &Context) {
+ c_follow_all();
+}
+
+fn openai_key(c: &Context) {
+ c_openai_key(c);
+}
+
+fn token(c: &Context) {
+ let m = c.args[0].to_string();
+ let h = async {
+ if let Ok(p) = c.string_flag("password") {
+ if let Ok(s) = c.string_flag("server") {
+ let res = token::post_request(m.to_string(), p.to_string(), s.to_string()).await;
+ w_cfg(&s, &res)
+ } else {
+ let res = token::post_request(m.to_string(), p.to_string(), "bsky.social".to_string()).await;
+ w_cfg(&"bsky.social", &res)
+ }
+ }
+ };
+ let res = tokio::runtime::Runtime::new().unwrap().block_on(h);
+ return res
+}
+
+fn refresh(_c: &Context) {
+ let server = data_toml(&"host");
+ let h = async {
+ let session = session::get_request().await;
+ if session == "err" {
+ let res = refresh::post_request().await;
+ println!("{}", res);
+ w_cfg(&server, &res)
+ } else {
+ println!("no refresh");
+ }
+ };
+ let res = tokio::runtime::Runtime::new().unwrap().block_on(h);
+ return res
+}
+
+fn notify(c: &Context) {
+ refresh(c);
+ let h = async {
+ let j = notify::get_request(100).await;
+ println!("{}", j);
+ };
+ let res = tokio::runtime::Runtime::new().unwrap().block_on(h);
+ return res
+}
+
+fn did(c: &Context) {
+ refresh(c);
+ let h = async {
+ if c.args.len() == 0 {
+ let j = describe::get_request(data_toml(&"handle")).await;
+ println!("{}", j);
+ } else {
+ let j = describe::get_request(c.args[0].to_string()).await;
+ println!("{}", j);
+ }
+ };
+ let res = tokio::runtime::Runtime::new().unwrap().block_on(h);
+ return res
+}
+
+fn timeline(c: &Context) {
+ refresh(c);
+ let h = async {
+ if c.args.len() == 0 {
+ let str = timeline_author::get_request(data_toml(&"handle").to_string());
+ println!("{}",str.await);
+ } else {
+ let str = timeline_author::get_request(c.args[0].to_string());
+ println!("{}",str.await);
+ }
+ };
+ let res = tokio::runtime::Runtime::new().unwrap().block_on(h);
+ return res
+}
+
+fn post(c: &Context) {
+ refresh(c);
+ let m = c.args[0].to_string();
+ let h = async {
+ if let Ok(link) = c.string_flag("link") {
+ let e = link.chars().count();
+ let s = 0;
+ let str = post_link::post_request(m.to_string(), link.to_string(), s, e.try_into().unwrap());
+ println!("{}",str.await);
+ } else {
+ let str = post::post_request(m.to_string());
+ println!("{}",str.await);
+ }
+ };
+ let res = tokio::runtime::Runtime::new().unwrap().block_on(h);
+ return res
+}
+
+fn like(c: &Context) {
+ refresh(c);
+ let m = c.args[0].to_string();
+ let h = async {
+ if let Ok(uri) = c.string_flag("uri") {
+ let str = like::post_request(m.to_string(), uri);
+ println!("{}",str.await);
+ }
+ };
+ let res = tokio::runtime::Runtime::new().unwrap().block_on(h);
+ return res
+}
+
+fn repost(c: &Context) {
+ refresh(c);
+ let m = c.args[0].to_string();
+ let h = async {
+ if let Ok(uri) = c.string_flag("uri") {
+ let str = repost::post_request(m.to_string(), uri);
+ println!("{}",str.await);
+ }
+ };
+ let res = tokio::runtime::Runtime::new().unwrap().block_on(h);
+ return res
+}
+
+fn follow(c: &Context) {
+ refresh(c);
+ let m = c.args[0].to_string();
+ let h = async {
+ let handle = data_toml(&"handle");
+ if let Ok(cursor) = c.string_flag("cursor") {
+ let str = follow::post_request(m.to_string());
+ println!("{}", str.await);
+ //let str = follow::delete_request(m.to_string(), delete.to_string());
+ //let str = followers::get_request(handle,Some("".to_string()));
+ //let str = followers::get_request(handle,Some(cursor.to_string()));
+ //let str = follows::get_request(handle,Some("".to_string()));
+ let str = follows::get_request(handle,Some(cursor.to_string()));
+ println!("{}", str.await);
+ }
+ };
+ let res = tokio::runtime::Runtime::new().unwrap().block_on(h);
+ return res
+}
+
+fn profile(c: &Context) {
+ refresh(c);
+ let h = async {
+ if c.args.len() == 0 {
+ let j = profile::get_request(data_toml(&"handle")).await;
+ println!("{}", j);
+ } else {
+ let j = profile::get_request(c.args[0].to_string()).await;
+ println!("{}", j);
+ }
+ };
+ let res = tokio::runtime::Runtime::new().unwrap().block_on(h);
+ return res
+}
+
+fn mention(c: &Context) {
+ refresh(c);
+ let m = c.args[0].to_string();
+ let h = async {
+ let str = profile::get_request(m.to_string()).await;
+ let profile: ProfileIdentityResolve = serde_json::from_str(&str).unwrap();
+ let udid = profile.did;
+ let handle = m.to_string();
+ let at = "@".to_owned() + &handle;
+ let e = at.chars().count();
+ let s = 0;
+ if let Ok(post) = c.string_flag("post") {
+ let str = mention::post_request(post.to_string(), at.to_string(), udid.to_string(), s, e.try_into().unwrap()).await;
+ println!("{}",str);
+ }
+ };
+ let res = tokio::runtime::Runtime::new().unwrap().block_on(h);
+ return res
+}
+
+fn reply(c: &Context) {
+ refresh(c);
+ let m = c.args[0].to_string();
+ let h = async {
+ if let Ok(cid) = c.string_flag("cid") {
+ if let Ok(uri) = c.string_flag("uri") {
+ if let Ok(link) = c.string_flag("link") {
+ let s = 0;
+ let e = link.chars().count();
+ let str = reply_link::post_request(m.to_string(), link.to_string(), s, e.try_into().unwrap(), cid.to_string(), uri.to_string(), cid.to_string(), uri.to_string()).await;
+ println!("{}", str);
+ } else {
+ let str = reply::post_request(m.to_string(), cid.to_string(), uri.to_string(), cid.to_string(), uri.to_string()).await;
+ println!("{}", str);
+ }
+ }
+ }
+ };
+ let res = tokio::runtime::Runtime::new().unwrap().block_on(h);
+ return res
+}
+
+#[tokio::main]
+async fn c_img_upload(c: &Context) -> reqwest::Result<()> {
+ let token = data_toml(&"access");
+ let atoken = "Authorization: Bearer ".to_owned() + &token;
+ let con = "Content-Type: image/png";
+ let url = url(&"upload_blob");
+ let f = "@".to_owned() + &c.args[0].to_string();
+ use std::process::Command;
+ let output = Command::new("curl").arg("-X").arg("POST").arg("-sL").arg("-H").arg(&con).arg("-H").arg(&atoken).arg("--data-binary").arg(&f).arg(&url).output().expect("curl");
+ let d = String::from_utf8_lossy(&output.stdout);
+ let d = d.to_string();
+ println!("{}", d);
+ Ok(())
+}
+
+fn img_upload(c: &Context) {
+ refresh(c);
+ c_img_upload(c).unwrap();
+}
+
+fn img_post(c: &Context) {
+ let m = c.args[0].to_string();
+ let link = c.string_flag("link").unwrap();
+ let cid = c.string_flag("cid").unwrap();
+ let uri = c.string_flag("uri").unwrap();
+ let h = async {
+ let itype = "image/png";
+ let str = img_reply::post_request(m.to_string(),link.to_string(),cid.to_string(),uri.to_string(), itype.to_string()).await;
+ println!("{}",str);
+ };
+ let res = tokio::runtime::Runtime::new().unwrap().block_on(h);
+ return res
+}
+
+fn reply_og(c: &Context) {
+ refresh(c);
+ let m = c.args[0].to_string();
+ let link = c.string_flag("link").unwrap();
+ let cid = c.string_flag("cid").unwrap();
+ let uri = c.string_flag("uri").unwrap();
+ let title = c.string_flag("title").unwrap();
+ let desc = c.string_flag("description").unwrap();
+ let img = c.string_flag("img").unwrap();
+ let h = async {
+ let str = reply_og::post_request(m, link, cid, uri, img, title, desc);
+ println!("{}",str.await);
+ };
+ let res = tokio::runtime::Runtime::new().unwrap().block_on(h);
+ return res
+}
+
+fn openai(c: &Context) {
+ let m = c.args[0].to_string();
+ let h = async {
+ let str = openai::post_request(m.to_string()).await;
+ println!("{}", str);
+ };
+ let res = tokio::runtime::Runtime::new().unwrap().block_on(h);
+ return res
+}
diff --git a/src/mention.rs b/src/mention.rs
new file mode 100644
index 0000000..30ff2ab
--- /dev/null
+++ b/src/mention.rs
@@ -0,0 +1,57 @@
+extern crate reqwest;
+use crate::data_toml;
+use crate::url;
+use serde_json::json;
+use iso8601_timestamp::Timestamp;
+
+pub async fn post_request(text: String, at: String, udid: String, s: i32, e: i32) -> String {
+
+ let token = data_toml(&"access");
+ let did = data_toml(&"did");
+ let handle = data_toml(&"handle");
+
+ let url = url(&"record_create");
+ let col = "app.bsky.feed.post".to_string();
+
+ let d = Timestamp::now_utc();
+ let d = d.to_string();
+
+ let post = Some(json!({
+ "did": did.to_string(),
+ "repo": handle.to_string(),
+ "collection": col.to_string(),
+ "record": {
+ "text": at.to_string() + &" ".to_string() + &text.to_string(),
+ "$type": "app.bsky.feed.post",
+ "createdAt": d.to_string(),
+ "facets": [
+ {
+ "$type": "app.bsky.richtext.facet",
+ "index": {
+ "byteEnd": e,
+ "byteStart": s
+ },"features": [
+ {
+ "did": udid.to_string(),
+ "$type": "app.bsky.richtext.facet#mention"
+ }
+ ]
+ }
+ ]
+ },
+ }));
+
+ let client = reqwest::Client::new();
+ let res = client
+ .post(url)
+ .json(&post)
+ .header("Authorization", "Bearer ".to_owned() + &token)
+ .send()
+ .await
+ .unwrap()
+ .text()
+ .await
+ .unwrap();
+
+ return res
+}
diff --git a/src/notify.rs b/src/notify.rs
new file mode 100644
index 0000000..51afa7e
--- /dev/null
+++ b/src/notify.rs
@@ -0,0 +1,31 @@
+extern crate reqwest;
+use crate::data_toml;
+use crate::url;
+//use serde_json::json;
+
+pub async fn get_request(limit: i32, ) -> String {
+
+ let token = data_toml(&"access");
+ let url = url(&"notify_list");
+
+ let client = reqwest::Client::new();
+ let res = client
+ .get(url)
+ .query(&[("limit", limit)])
+ .header("Authorization", "Bearer ".to_owned() + &token)
+ .send()
+ .await
+ .unwrap();
+
+ let status_ref = res.error_for_status_ref();
+
+ match status_ref {
+ Ok(_) => {
+ return res.text().await.unwrap();
+ },
+ Err(_e) => {
+ let e = "err".to_string();
+ return e
+ }
+ }
+}
diff --git a/src/notify_read.rs b/src/notify_read.rs
new file mode 100644
index 0000000..ad97ac7
--- /dev/null
+++ b/src/notify_read.rs
@@ -0,0 +1,28 @@
+extern crate reqwest;
+use crate::data_toml;
+use crate::url;
+use serde_json::json;
+
+pub async fn post_request(time: String) -> String {
+
+ let token = data_toml(&"access");
+ let url = url(&"notify_update");
+
+ let post = Some(json!({
+ "seenAt": time.to_string(),
+ }));
+
+ let client = reqwest::Client::new();
+ let res = client
+ .post(url)
+ .json(&post)
+ .header("Authorization", "Bearer ".to_owned() + &token)
+ .send()
+ .await
+ .unwrap()
+ .text()
+ .await
+ .unwrap();
+
+ return res
+}
diff --git a/src/openai.rs b/src/openai.rs
new file mode 100644
index 0000000..08f1cf5
--- /dev/null
+++ b/src/openai.rs
@@ -0,0 +1,60 @@
+extern crate reqwest;
+use crate::data::Open;
+use serde_json::{json};
+use serde::{Deserialize, Serialize};
+
+#[derive(Serialize, Deserialize, Debug)]
+#[serde(tag = "type")]
+struct OpenChar {
+ choices: Vec,
+}
+
+#[derive(Serialize, Deserialize, Debug)]
+struct ChoicesChar {
+ message: OpenContent,
+}
+
+#[derive(Serialize, Deserialize, Debug)]
+struct OpenContent {
+ content: String,
+}
+
+pub async fn post_request(prompt: String) -> String {
+ let data = Open::new().unwrap();
+ let data = Open {
+ api: data.api,
+ };
+
+ let setting = "あなたはyuiという作品のアイと呼ばれるキャラクターです。第一人称は「アイ」です。
+ 第二人称はできる限り省略してください。
+ 自由気ままな優しさを兼ね備えます。
+ 口調例:アイね、ここでお昼寝するの。
+ 幼い子供の口調で話してください。
+ 誕生日は1月23日。
+ 自分を信じて。
+ ";
+
+ let post = Some(json!({
+ "model": "gpt-3.5-turbo",
+ "messages": [
+ {"role": "system", "content": &setting.to_string()},
+ {"role": "user", "content": &prompt.to_string()},
+ ]
+ }));
+
+ let client = reqwest::Client::new();
+ let res = client
+ .post("https://api.openai.com/v1/chat/completions")
+ .header("Authorization", "Bearer ".to_owned() + &data.api)
+ .json(&post)
+ .send()
+ .await
+ .unwrap()
+ .text()
+ .await
+ .unwrap();
+ let p: OpenChar = serde_json::from_str(&res).unwrap();
+ let o = &p.choices[0].message.content;
+
+ return o.to_string()
+}
diff --git a/src/post.rs b/src/post.rs
new file mode 100644
index 0000000..f849713
--- /dev/null
+++ b/src/post.rs
@@ -0,0 +1,42 @@
+extern crate reqwest;
+use crate::data_toml;
+use crate::url;
+use serde_json::json;
+use iso8601_timestamp::Timestamp;
+
+pub async fn post_request(text: String) -> String {
+
+ let token = data_toml(&"access");
+ let did = data_toml(&"did");
+ let handle = data_toml(&"handle");
+
+ let url = url(&"record_create");
+ let col = "app.bsky.feed.post".to_string();
+
+ let d = Timestamp::now_utc();
+ let d = d.to_string();
+
+ let post = Some(json!({
+ "repo": handle.to_string(),
+ "did": did.to_string(),
+ "collection": col.to_string(),
+ "record": {
+ "text": text.to_string(),
+ "createdAt": d.to_string(),
+ },
+ }));
+
+ let client = reqwest::Client::new();
+ let res = client
+ .post(url)
+ .json(&post)
+ .header("Authorization", "Bearer ".to_owned() + &token)
+ .send()
+ .await
+ .unwrap()
+ .text()
+ .await
+ .unwrap();
+
+ return res
+}
diff --git a/src/post_link.rs b/src/post_link.rs
new file mode 100644
index 0000000..dc675d0
--- /dev/null
+++ b/src/post_link.rs
@@ -0,0 +1,56 @@
+extern crate reqwest;
+use crate::data_toml;
+use crate::url;
+use serde_json::json;
+use iso8601_timestamp::Timestamp;
+
+pub async fn post_request(text: String, link: String, s: i32, e: i32) -> String {
+
+ let token = data_toml(&"access");
+ let did = data_toml(&"did");
+ let handle = data_toml(&"handle");
+
+ let url = url(&"record_create");
+ let col = "app.bsky.feed.post".to_string();
+
+ let d = Timestamp::now_utc();
+ let d = d.to_string();
+
+ let post = Some(json!({
+ "repo": handle.to_string(),
+ "did": did.to_string(),
+ "collection": col.to_string(),
+ "record": {
+ "text": link.to_string() + &" ".to_string() + &text.to_string(),
+ "createdAt": d.to_string(),
+ "facets": [
+ {
+ "index": {
+ "byteStart": s,
+ "byteEnd": e
+ },
+ "features": [
+ {
+ "$type": "app.bsky.richtext.facet#link",
+ "uri": link.to_string()
+ }
+ ]
+ }
+ ],
+ },
+ }));
+
+ let client = reqwest::Client::new();
+ let res = client
+ .post(url)
+ .json(&post)
+ .header("Authorization", "Bearer ".to_owned() + &token)
+ .send()
+ .await
+ .unwrap()
+ .text()
+ .await
+ .unwrap();
+
+ return res
+}
diff --git a/src/profile.rs b/src/profile.rs
new file mode 100644
index 0000000..2c4fd1f
--- /dev/null
+++ b/src/profile.rs
@@ -0,0 +1,22 @@
+extern crate reqwest;
+use crate::data_toml;
+use crate::url;
+
+pub async fn get_request(user: String) -> String {
+
+ let token = data_toml(&"access");
+ let url = url(&"profile_get") + &"?handle=" + &user;
+
+ let client = reqwest::Client::new();
+ let res = client
+ .get(url)
+ .header("Authorization", "Bearer ".to_owned() + &token)
+ .send()
+ .await
+ .unwrap()
+ .text()
+ .await
+ .unwrap();
+
+ return res
+}
diff --git a/src/refresh.rs b/src/refresh.rs
new file mode 100644
index 0000000..5f5f13e
--- /dev/null
+++ b/src/refresh.rs
@@ -0,0 +1,21 @@
+extern crate reqwest;
+use crate::data_toml;
+use crate::url;
+
+pub async fn post_request() -> String {
+ let refresh = data_toml(&"refresh");
+ let url = url(&"session_refresh");
+
+ let client = reqwest::Client::new();
+ let res = client
+ .post(url)
+ .header("Authorization", "Bearer ".to_owned() + &refresh)
+ .send()
+ .await
+ .unwrap()
+ .text()
+ .await
+ .unwrap();
+
+ return res
+}
diff --git a/src/reply.rs b/src/reply.rs
new file mode 100644
index 0000000..1e3fee6
--- /dev/null
+++ b/src/reply.rs
@@ -0,0 +1,53 @@
+extern crate reqwest;
+use crate::data_toml;
+use crate::url;
+use serde_json::json;
+use iso8601_timestamp::Timestamp;
+
+pub async fn post_request(text: String, cid: String, uri: String, cid_root: String, uri_root: String) -> String {
+
+ let token = data_toml(&"access");
+ let did = data_toml(&"did");
+ let handle = data_toml(&"handle");
+
+ let url = url(&"record_create");
+ //let url = "https://bsky.social/xrpc/com.atproto.repo.createRecord";
+ let col = "app.bsky.feed.post".to_string();
+
+ let d = Timestamp::now_utc();
+ let d = d.to_string();
+
+ let post = Some(json!({
+ "repo": handle.to_string(),
+ "did": did.to_string(),
+ "collection": col.to_string(),
+ "record": {
+ "text": text.to_string(),
+ "createdAt": d.to_string(),
+ "reply": {
+ "root": {
+ "cid": cid_root.to_string(),
+ "uri": uri_root.to_string()
+ },
+ "parent": {
+ "cid": cid.to_string(),
+ "uri": uri.to_string()
+ }
+ }
+ },
+ }));
+
+ let client = reqwest::Client::new();
+ let res = client
+ .post(url)
+ .json(&post)
+ .header("Authorization", "Bearer ".to_owned() + &token)
+ .send()
+ .await
+ .unwrap()
+ .text()
+ .await
+ .unwrap();
+
+ return res
+}
diff --git a/src/reply_link.rs b/src/reply_link.rs
new file mode 100644
index 0000000..1376e95
--- /dev/null
+++ b/src/reply_link.rs
@@ -0,0 +1,66 @@
+extern crate reqwest;
+use crate::data_toml;
+use crate::url;
+use serde_json::json;
+use iso8601_timestamp::Timestamp;
+
+pub async fn post_request(text: String, link: String, s: i32, e: i32, cid: String, uri: String, cid_root: String, uri_root: String) -> String {
+
+ let token = data_toml(&"access");
+ let did = data_toml(&"did");
+ let handle = data_toml(&"handle");
+
+ let url = url(&"record_create");
+ let col = "app.bsky.feed.post".to_string();
+
+ let d = Timestamp::now_utc();
+ let d = d.to_string();
+
+ let post = Some(json!({
+ "repo": handle.to_string(),
+ "did": did.to_string(),
+ "collection": col.to_string(),
+ "record": {
+ "text": link.to_string() + &" ".to_string() + &text.to_string(),
+ "createdAt": d.to_string(),
+ "reply": {
+ "root": {
+ "cid": cid_root.to_string(),
+ "uri": uri_root.to_string()
+ },
+ "parent": {
+ "cid": cid.to_string(),
+ "uri": uri.to_string()
+ }
+ },
+ "facets": [
+ {
+ "index": {
+ "byteStart": s,
+ "byteEnd": e
+ },
+ "features": [
+ {
+ "$type": "app.bsky.richtext.facet#link",
+ "uri": link.to_string()
+ }
+ ]
+ }
+ ],
+ },
+ }));
+
+ let client = reqwest::Client::new();
+ let res = client
+ .post(url)
+ .json(&post)
+ .header("Authorization", "Bearer ".to_owned() + &token)
+ .send()
+ .await
+ .unwrap()
+ .text()
+ .await
+ .unwrap();
+
+ return res
+}
diff --git a/src/reply_og.rs b/src/reply_og.rs
new file mode 100644
index 0000000..895f8b6
--- /dev/null
+++ b/src/reply_og.rs
@@ -0,0 +1,68 @@
+extern crate reqwest;
+use crate::data_toml;
+use crate::url;
+use serde_json::json;
+use iso8601_timestamp::Timestamp;
+
+pub async fn post_request(m: String, link: String, cid: String, uri: String, img: String, title: String, description: String) -> String {
+
+ let token = data_toml(&"access");
+ let did = data_toml(&"did");
+ let handle = data_toml(&"handle");
+
+ let url = url(&"record_create");
+ let col = "app.bsky.feed.post".to_string();
+
+ let d = Timestamp::now_utc();
+ let d = d.to_string();
+
+ let post = Some(json!({
+ "repo": handle.to_string(),
+ "did": did.to_string(),
+ "collection": col.to_string(),
+ "record": {
+ "createdAt": d.to_string(),
+ "text": m.to_string(),
+ "embed": {
+ "$type": "app.bsky.embed.external",
+ "external": {
+ "uri": link.to_string(),
+ "thumb": {
+ "$type": "blob",
+ "ref": {
+ "$link": img.to_string()
+ },
+ "mimeType": "image/jpeg",
+ "size": 0
+ },
+ "title": title.to_string(),
+ "description": description.to_string()
+ }
+ },
+ "reply": {
+ "root": {
+ "cid": cid.to_string(),
+ "uri": uri.to_string()
+ },
+ "parent": {
+ "cid": cid.to_string(),
+ "uri": uri.to_string()
+ }
+ }
+ }
+ }));
+
+ let client = reqwest::Client::new();
+ let res = client
+ .post(url)
+ .json(&post)
+ .header("Authorization", "Bearer ".to_owned() + &token)
+ .send()
+ .await
+ .unwrap()
+ .text()
+ .await
+ .unwrap();
+
+ return res
+}
diff --git a/src/repost.rs b/src/repost.rs
new file mode 100644
index 0000000..695d5b8
--- /dev/null
+++ b/src/repost.rs
@@ -0,0 +1,45 @@
+extern crate reqwest;
+use crate::data_toml;
+use crate::url;
+use serde_json::json;
+use iso8601_timestamp::Timestamp;
+
+pub async fn post_request(cid: String, uri: String) -> String {
+
+ let token = data_toml(&"access");
+ let did = data_toml(&"did");
+ let handle = data_toml(&"handle");
+
+ let url = url(&"record_create");
+ let col = "app.bsky.feed.repost".to_string();
+
+ let d = Timestamp::now_utc();
+ let d = d.to_string();
+
+ let post = Some(json!({
+ "repo": handle.to_string(),
+ "did": did.to_string(),
+ "collection": col.to_string(),
+ "record": {
+ "subject": {
+ "uri": uri.to_string(),
+ "cid": cid.to_string()
+ },
+ "createdAt": d.to_string(),
+ },
+ }));
+
+ let client = reqwest::Client::new();
+ let res = client
+ .post(url)
+ .json(&post)
+ .header("Authorization", "Bearer ".to_owned() + &token)
+ .send()
+ .await
+ .unwrap()
+ .text()
+ .await
+ .unwrap();
+
+ return res
+}
diff --git a/src/session.rs b/src/session.rs
new file mode 100644
index 0000000..084f8bc
--- /dev/null
+++ b/src/session.rs
@@ -0,0 +1,29 @@
+extern crate reqwest;
+use crate::data_toml;
+use crate::url;
+
+pub async fn get_request() -> String {
+
+ let token = data_toml(&"access");
+ let url = url(&"session_get");
+
+ let client = reqwest::Client::new();
+ let res = client
+ .get(url)
+ .header("Authorization", "Bearer ".to_owned() + &token)
+ .send()
+ .await
+ .unwrap();
+
+ let status_ref = res.error_for_status_ref();
+
+ match status_ref {
+ Ok(_) => {
+ return res.text().await.unwrap();
+ },
+ Err(_e) => {
+ let e = "err".to_string();
+ return e
+ }
+ }
+}
diff --git a/src/timeline_author.rs b/src/timeline_author.rs
new file mode 100644
index 0000000..9731c63
--- /dev/null
+++ b/src/timeline_author.rs
@@ -0,0 +1,28 @@
+extern crate reqwest;
+use crate::data_toml;
+use crate::url;
+
+pub async fn get_request(actor: String) -> String {
+
+ let token = data_toml(&"access");
+ let url = url(&"record_list");
+
+ let actor = actor.to_string();
+ //let cursor = cursor.unwrap();
+
+ let col = "app.bsky.feed.post".to_string();
+ let client = reqwest::Client::new();
+ let res = client
+ .get(url)
+ .query(&[("repo", actor),("collection", col)])
+ //.query(&[("actor", actor),("cursor", cursor)])
+ .header("Authorization", "Bearer ".to_owned() + &token)
+ .send()
+ .await
+ .unwrap()
+ .text()
+ .await
+ .unwrap();
+
+ return res
+}
diff --git a/src/token.rs b/src/token.rs
new file mode 100644
index 0000000..4f0f715
--- /dev/null
+++ b/src/token.rs
@@ -0,0 +1,24 @@
+extern crate reqwest;
+use std::collections::HashMap;
+
+pub async fn post_request(handle: String, pass: String, host: String) -> String {
+
+ let url = "https://".to_owned() + &host.to_string() + &"/xrpc/com.atproto.server.createSession".to_string();
+
+ let mut map = HashMap::new();
+ map.insert("identifier", &handle);
+ map.insert("password", &pass);
+
+ let client = reqwest::Client::new();
+ let res = client
+ .post(url)
+ .json(&map)
+ .send()
+ .await
+ .unwrap()
+ .text()
+ .await
+ .unwrap();
+
+ return res
+}
diff --git a/test/entrypoint.sh b/test/entrypoint.sh
new file mode 100644
index 0000000..5fc4448
--- /dev/null
+++ b/test/entrypoint.sh
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+exec "$@"
diff --git a/test/env b/test/env
new file mode 100644
index 0000000..75a6471
--- /dev/null
+++ b/test/env
@@ -0,0 +1,34 @@
+cfg=~/.config/ai/test.json
+
+if [ ! -f $cfg ] || ! cat $cfg|jq . || [ "`cat $cfg|jq .host`" = "null" ] || [ -z "`cat $cfg`" ];then
+ mkdir -p ~/.config/ai
+ echo server:
+ read host
+
+ echo password:
+ read pass
+
+ echo handle:
+ read handle
+
+ echo "{ \"host\":\"$host\", \"password\":\"$pass\", \"handle\":\"$handle\" }" >> $cfg
+fi
+
+host=`cat $cfg|jq -r .host`
+handle=`cat $cfg|jq -r .handle`
+pass=`cat $cfg|jq -r .password`
+date=`date --iso-8601=seconds`
+
+if [ ! -f $cfg.t ];then
+ $d/token.zsh
+fi
+
+if [ -f $cfg.t ];then
+ token=`cat $cfg.t|jq -r .accessJwt`
+ refresh=`cat $cfg.t|jq -r .refreshJwt`
+ did=`cat $cfg.t|jq -r .did`
+fi
+
+if [ ! -d $d/json ];then
+ mkdir -p $d/json
+fi
diff --git a/test/notify.zsh b/test/notify.zsh
new file mode 100644
index 0000000..8f5879f
--- /dev/null
+++ b/test/notify.zsh
@@ -0,0 +1,37 @@
+function notify() {
+ url=https://$host/xrpc/app.bsky.notification.listNotifications
+ f=$d/json/notify.json
+ if [ ! -f $f ];then
+ curl -sL "Content-Type: application/json" -H "Authorization: Bearer $token" "$url?limit=100" >! $f
+ fi
+
+ for ((i=0;i<=99;i++))
+ do
+ echo "[$i]---"
+ cid=`cat $f|jq -r ".|.[].[$i]?|.cid?"`
+ uri=`cat $f|jq -r ".|.[].[$i]?|.uri?"`
+ echo cid: $cid
+ echo uri: $uri
+ cid_r=`cat $f|jq -r ".[]|.[$i]?|.record.reply.root.cid?"`
+
+ if [ "$cid_r" = "null" ];then
+ continue
+ fi
+ uri_r=`cat $f|jq -r ".[]|.[$i]?|.record.reply.root.uri?"`
+ cid_p=`cat $f|jq -r ".[]|.[$i]?|.record.reply.parent.cid?"`
+ uri_p=`cat $f|jq -r ".[]|.[$i]?|.record.reply.parent.uri?"`
+ did_p=`echo $uri_p|cut -d / -f 3`
+ if [ "$did_p" != "did:plc:uqzpqmrjnptsxezjx4xuh2mn" ];then
+ continue
+ fi
+ echo cid_root: $cid_r
+ echo uri_root: $uri_r
+ echo cid_parent: $cid_p
+ echo uri_parent: $uri_p
+ echo ---
+ echo uri: $uri|sed "s#at://#https://bsky.app/profile/#g"|sed 's/app.bsky.feed.post/post/g'
+ echo uri_root: $uri_r|sed "s#at://#https://bsky.app/profile/#g"|sed 's/app.bsky.feed.post/post/g'
+ echo uri_parent: $uri_p|sed "s#at://#https://bsky.app/profile/#g"|sed 's/app.bsky.feed.post/post/g'
+ echo ---
+ done
+}
diff --git a/test/refresh.zsh b/test/refresh.zsh
new file mode 100755
index 0000000..81998ce
--- /dev/null
+++ b/test/refresh.zsh
@@ -0,0 +1,11 @@
+function refresh(){
+ token=`cat $cfg.t|jq -r .accessJwt`
+ refresh=`cat $cfg.t|jq -r .refreshJwt`
+ if [ ! -f $cfg ];then
+ token
+ fi
+ url=https://$host/xrpc/com.atproto.server.refreshSession
+ j=`curl -sL -X POST -H "Content-Type: application/json" -H "Authorization: Bearer $refresh" $url`
+ echo $j
+ echo $j >! $cfg.t
+}
diff --git a/test/reply.zsh b/test/reply.zsh
new file mode 100755
index 0000000..c0ebed4
--- /dev/null
+++ b/test/reply.zsh
@@ -0,0 +1,40 @@
+function reply() {
+
+ #uri: https://bsky.app/profile/did:plc:4hqjfn7m6n5hno3doamuhgef/post/3kkumyv72w22o
+ #uri_root: https://bsky.app/profile/did:plc:uqzpqmrjnptsxezjx4xuh2mn/post/3kkumysfipk2p
+ #uri_parent: https://bsky.app/profile/did:plc:uqzpqmrjnptsxezjx4xuh2mn/post/3kkumysfipk2p
+
+ cid=bafyreiaxz6hbqgylsxglqita73c5gzxzoatupgitd35rwjpd6dzpa4ctwi
+ uri=at://did:plc:4hqjfn7m6n5hno3doamuhgef/app.bsky.feed.post/3kkumyv72w22o
+ cid_root=bafyreiacxuk4ypaxbg7qxnmrvpnaej5o7azewqioelfgbuikp77jevy6hq
+ uri_root=at://did:plc:uqzpqmrjnptsxezjx4xuh2mn/app.bsky.feed.post/3kkumysfipk2p
+ cid_parent=bafyreiacxuk4ypaxbg7qxnmrvpnaej5o7azewqioelfgbuikp77jevy6hq
+ uri_parent=at://did:plc:uqzpqmrjnptsxezjx4xuh2mn/app.bsky.feed.post/3kkumysfipk2p
+
+ url="https://$host/xrpc/com.atproto.repo.createRecord"
+ col="app.bsky.feed.post"
+
+json="{
+ \"repo\": \"$handle\",
+ \"did\": \"$did\",
+ \"collection\": \"$col\",
+ \"record\": {
+ \"text\": \"$text\",
+ \"createdAt\": \"$date\",
+ \"reply\": {
+ \"root\": {
+ \"cid\": \"$cid_root\",
+ \"uri\": \"$uri_root\"
+ },
+ \"parent\": {
+ \"cid\": \"$cid\",
+ \"uri\": \"$uri\"
+ }
+ }
+ }
+}"
+
+ echo $json|jq .
+ url=https://$host/xrpc/com.atproto.repo.createRecord
+ curl -sL -X POST -H "Content-Type: application/json" -H "Authorization: Bearer $token" -d "$json" $url
+}
diff --git a/test/token.zsh b/test/token.zsh
new file mode 100755
index 0000000..0e5fda6
--- /dev/null
+++ b/test/token.zsh
@@ -0,0 +1,6 @@
+function token() {
+ url=https://$host/xrpc/com.atproto.server.createSession
+ j=`curl -sL -X POST -H "Content-Type: application/json" -d "{\"identifier\":\"$handle\",\"password\":\"$pass\"}" $url`
+ echo $j
+ echo $j >! $cfg.t
+}