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..72c5913
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,10 @@
+FROM syui/aios
+
+USER root
+ADD .config /root/.config
+WORKDIR /root
+
+ADD ./test/entrypoint.sh /
+RUN chmod +x /entrypoint.sh
+
+ENTRYPOINT ["/entrypoint.sh"]
diff --git a/README.md b/README.md
index c7b3451..1136f8f 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,85 @@
 ## ai `bot`
 
+<img src="./icon/avatar.png" width="100">
+
+- 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|sub|type|body|
+|---|---|---|---|
+|@yui.syui.ai did||mention, reply| [plc.directory](https://plc.directory)/$did/log |
+|@yui.syui.ai card|r, s, b|mention, reply| https://card.syui.ai |
+|@yui.syui.ai ten|start, d, p|mention, reply| https://card.syui.ai |
+|@yui.syui.ai fav|{cid}|mention, reply| https://card.syui.ai |
+|@yui.syui.ai egg|{password}|mention, reply| https://card.syui.ai |
+|@yui.syui.ai 占い||mention, reply| https://yui.syui.ai |
+|@yui.syui.ai nyan|🍰|mention, reply| https://yui.syui.ai |
+|@yui.syui.ai diffusers|{keyword}|mention, reply| [diffusers](https://huggingface.co/docs/diffusers/index) |
+|@yui.syui.ai sh(admin)|{command}|mention, reply| [archlinux](https://wiki.archlinux.org/title/Systemd-nspawn) |
+
+### test
+
+`zsh`
+
+```sh
+$ ./test/ai.zsh t
+```
+
+### docker
+
+```sh
+$ docker run -it syui/aios ai
+$ docker run -it -d syui/aios zsh -c "ai login <handle> -p <password> && ai bot"
 ```
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 <CID>"
+		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/&#39;/'/g" -e 's/&quot;/"/g'`
+		else
+			text=`echo ${text}|sed -e 's/<[^>]*>//g'|cut -d " " -f 2-|tr -d '"'|sed -e "s/&#39;/'/g" -e 's/&quot;/"/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 <lora:luckyStarStyleLora_offset:0.8>"
+	},
+	{
+		"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 <lora:flying warship-noise:0.7>"
+	},
+	{
+		"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<hypernet:traininganyahyper-1800:1.0>"
+	},
+	{
+		"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, <lora:toddler-xl-v2_last:-2>"
+	},
+	{
+		"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 = "
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣼⣿⣿⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣼⣿⣿⣿⣿⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣤⣾⣿⣿⣿⣿⣿⣿⣧⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣶⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣦⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣾⣿⣿⣿⣿⣿⣿⡿⠟⠛⠉⠉⠉⠙⠛⠿⣿⣿⣿⣿⣿⣿⣿⣦⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣿⣿⣿⣿⣿⣿⡿⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠙⣿⣿⣿⣿⣿⣿⣧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣾⣿⣿⣿⣿⣿⠏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢿⣿⣿⣿⣿⣿⣇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⣿⣿⣿⣿⣿⡿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⣿⣿⣿⣿⣿⣷⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣿⣿⣿⣿⣿⣿⣧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣾⣿⣿⣿⣿⣿⣧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣾⣿⣿⣿⣿⣿⣿⣿⣷⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⣿⣿⣿⣿⣿⣿⣿⣿⣇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣦⣤⣄⣀⣀⣠⣤⣶⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⠟⠛⠛⠛⠛⠉⠉⠉⠙⠻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠟⠉⠉⠉⠙⠛⠛⠛⠛⠿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠙⠛⠻⠿⠿⠿⠿⠟⠛⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+    ";
+
+    let avatar_color = "
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⣀⣀⣀⡀⠀⣀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⡤⠖⠊⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠁⠒⠦⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠐⠿⣷⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣴⡿⠷⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⡶⠾⠟⠛⠋⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠛⠛⠿⠷⣶⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠊⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠙⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣀⣀⣀⣀⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣴⣶⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣶⣤⣄⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣦⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠉⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠈⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠋⣴⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡟⢀⣧⠸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⠃⣸⣿⡆⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠁⣾⣿⡀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⡟⢠⣿⣿⣧⠸⣿⣿⣿⣿⣿⣿⣿⣿⣿⠃⣼⣿⣿⡇⣿⣿⡿⠛⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⣿⣿⣿⣿⣿⣿⣿⣿⠃⣼⣿⣿⣿⡀⣿⣿⣿⣿⣿⣿⣿⣿⠃⣰⣿⣿⣿⠇⣿⡿⢡⠀⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⣿⡏⢸⠀⣿⡿⢿⣿⣇⠸⣿⠏⢹⣿⣿⣿⠃⣰⣿⠿⠿⠿⢀⡟⢡⣿⠀⣿⣿⣿⣿⣿⡏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⣿⣿⣿⣿⣿⣿⠃⠘⠀⣤⠶⠶⢦⣿⡆⢻⠀⠘⣿⣿⠃⣴⣯⡴⠒⠒⠂⠜⡀⠛⣿⠀⣿⠿⢿⣿⣿⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⢻⣿⣿⣿⣿⡏⠈⡀⠀⠡⠀⠶⣆⠹⣿⡌⢸⡄⠿⢡⣾⣿⡏⠐⠂⠘⣁⠀⣿⡄⢿⠀⠐⠒⡆⢹⡏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠳⠈⣿⣿⣿⣿⡇⢰⣿⡀⢰⠀⠀⣹⠀⣿⣷⣌⣷⣴⣿⣿⣿⡇⢸⡀⠀⣸⠀⣿⣷⣸⠀⡌⠃⡿⠘⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠁⠈⢿⣿⣿⡇⢹⣿⣧⠘⢷⢶⠋⣰⣿⣿⣿⣿⣿⣿⣿⣿⣷⣌⡛⠚⢁⣼⣿⣿⡏⠀⣿⣾⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢻⣿⡇⢸⣿⣿⣿⣾⣶⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠠⠞⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⢷⡈⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⡁⢀⠙⢿⣿⣿⣿⣿⣿⣍⣛⠛⢛⣋⣩⣿⣿⣿⣿⣿⠿⠋⠀⠀⢀⠀⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⠀⣸⣷⣤⡉⠛⠻⠿⣿⣿⣿⣿⣿⣿⡿⠿⠟⠛⠉⠀⠀⠀⡀⢰⣿⠀⣿⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠀⣿⣿⢻⠃⠈⠀⠀⣶⣤⣤⣭⣭⣴⣶⣾⠀⠌⠀⢀⣴⡆⠃⣸⢿⡆⢸⣧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠀⣿⡏⢸⠀⠃⠐⠀⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀⠀⣿⣿⠁⠀⡇⢸⣇⠘⣿⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣼⠀⣿⠇⡄⠀⠀⠀⠀⣿⣿⣿⣿⣿⣿⣿⣿⠀⣄⠀⣿⣿⠀⢀⣧⠈⣿⠀⢿⣷⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣹⠀⣿⠀⡇⠠⢀⣴⣠⣿⣿⣿⣿⣿⣿⣿⣿⣷⣌⠀⣿⣿⠀⣸⣿⠀⢿⣇⠘⣿⣇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠄⡠⠞⣋⠀⡿⠀⠀⣰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⣿⡟⢠⣤⣈⣁⡈⠛⠂⠹⣿⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡠⢂⠔⣡⣾⡯⠀⡇⠀⢀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⣿⡇⢸⣿⣿⣿⣿⣿⣶⣦⣈⠛⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠎⡠⢃⣼⣿⠟⣰⠀⡇⠀⢸⡿⠿⠛⣋⣉⣻⣿⣿⣿⣿⡿⢋⣤⡍⢰⣿⠃⣾⣿⣿⣿⣿⣿⣿⣿⣿⣷⡌⢆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡰⢁⠜⣰⣿⣿⣿⣤⡙⠘⡇⠀⣼⣷⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⢸⡿⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠈⢧⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡜⢠⠎⣰⣿⣿⣿⣿⣿⣿⠀⡇⠀⣉⣩⣥⣤⣤⡄⢠⣍⣙⠻⢿⣿⣿⣿⡇⢸⠇⢠⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡆⡄⢳⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⡞⢠⣿⢠⣿⣿⣿⣿⣿⣿⣿⠀⡇⠀⣿⣿⣿⣿⣿⡇⢸⣿⣿⣿⡘⣿⣿⣿⠃⡿⠀⢸⣿⡿⠿⠛⠛⠛⠿⠛⢛⣋⣉⣀⣿⠀⣿⣧⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+    ";
+
+    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..1fd0d89
--- /dev/null
+++ b/src/bot.rs
@@ -0,0 +1,200 @@
+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(&notify).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;
+            }
+
+            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 com = "".to_string();
+            let mut prompt = "".to_string();
+            let mut prompt_sub = "".to_string();
+            if reason == "mention" {
+                com = vec[1].trim().to_string();
+                prompt = vec[2..].join(" ");
+                if vec.len() > 2 {
+                    prompt_sub = vec[3..].join(" ");
+                }
+            } else if reason == "reply" {
+                com = vec[0].trim().to_string();
+                prompt = vec[1..].join(" ");
+                if vec.len() > 1 {
+                    prompt_sub = vec[2..].join(" ");
+                }
+            }
+
+            if prompt.is_empty() == false || com.is_empty() == false {
+                println!("{}", read);
+                println!("{}", handle);
+                println!("cid:{}\nuri:{}\ncid_root:{}\nuri_root:{}", cid, uri, cid_root, uri_root);
+                println!("reason:{}\ncom:{}\nprompt:{}", reason, com, prompt);
+                println!("prompt_sub:{}", prompt_sub);
+            }
+
+            let mut admin = "".to_string();
+            if c.string_flag("admin").is_ok() {
+                admin = c.string_flag("admin").unwrap();
+            }
+
+            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 output = Command::new(data_scpt(&"api_ten")).arg(&handle).arg(&did).arg(&cid).arg(&uri).arg(&prompt).arg(&prompt_sub).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 if { com == "sh" || com == "/sh" } && handle == &admin {
+                    println!("admin:{}", admin);
+                    let output = Command::new(data_scpt(&"arch")).arg(&prompt).output().expect("zsh");
+                    let d = String::from_utf8_lossy(&output.stdout);
+                    let d =  d.to_string();
+                    let text_limit = c_char(d);
+                    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 {
+                    // 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<Self, ConfigError> {
+        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<Self, ConfigError> {
+        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<Notifications>
+}
+
+#[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<VerificationMethod>,
+    pub service: Vec<Service>,
+    pub id: String,
+    pub alsoKnownAs: Vec<AlsoKnownAs>,
+}
+
+#[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<Feed>
+}
+#[derive(Serialize, Deserialize)]
+pub struct Session {
+    pub did: String,
+    pub email: String,
+    pub handle: String,
+}
+#[derive(Serialize, Deserialize)]
+pub struct Follow {
+    pub follows: Vec<Author>,
+    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<String>,
+    pub displayName: Option<String>,
+    pub handle: String,
+    pub avatar: Option<String>,
+    pub viewer: Viewer,
+    //pub labels: Labels,
+}
+
+#[derive(Serialize, Deserialize)]
+#[allow(non_snake_case)]
+pub struct Labels {
+    pub src: Option<String>,
+    pub uri: Option<String>,
+    pub cid: Option<String>,
+    pub val: Option<String>,
+    pub cts: Option<String>,
+    pub neg: Option<bool>,
+}
+
+#[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<String>,
+    pub createdAt: String,
+    pub reply: Option<Reply>,
+}
+
+#[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<String>,
+    pub uri: String,
+    pub cid: String,
+    pub collection: Option<String>,
+    pub record: Record,
+    pub author: Author,
+    pub reason: Option<String>,
+    pub indexedAt: String,
+    pub replyCount: i32,
+    pub postCount: Option<i32>,
+    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<i32>,
+    pub followersCount: Option<i32>,
+    pub postsCount: i32,
+    pub indexedAt: Option<String>,
+    pub avatar: Option<String>,
+    pub banner: Option<String>,
+    pub displayName: Option<String>,
+    pub description: Option<String>,
+    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<Self, ConfigError> {
+        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<Choices>,
+}
+
+#[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>) -> 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>) -> 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..d47d4ac
--- /dev/null
+++ b/src/main.rs
@@ -0,0 +1,536 @@
+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<String> = 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)
+            .flag(
+                Flag::new("admin", FlagType::String)
+                .alias("a"),
+            )
+        )
+        .command(
+            Command::new("follow_all")
+            .action(follow_all),
+        )
+        .command(
+            Command::new("login")
+            .alias("l")
+            .description("l <handle> -p <password>\n\t\t\tl <handle> -p <password> -s <server>")
+            .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 <handle>")
+            .action(did)
+            )
+        .command(
+            Command::new("post")
+            .description("p <text>")
+            .alias("p")
+            .action(post)
+            .flag(
+                Flag::new("link", FlagType::String)
+                .alias("l"),
+            )
+        )
+        .command(
+            Command::new("like")
+            .description("like <cid> -u <uri>")
+            .action(like)
+            .flag(
+                Flag::new("uri", FlagType::String)
+                .alias("u"),
+                )
+            )
+        .command(
+            Command::new("repost")
+            .description("repost <cid> -u <uri>")
+            .action(repost)
+            .flag(
+                Flag::new("uri", FlagType::String)
+                .alias("u"),
+            )
+        )
+        .command(
+            Command::new("reply-og")
+            .description("reply-og <text> -c <cid> -u <uri> -i <img> -t <title> -d <description> -l <link>")
+            .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 <text> -u <uri> -c <cid>")
+            .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 <link>")
+                .alias("l"),
+            )
+        )
+        .command(
+            Command::new("mention")
+            .description("@ <handle> -p <text>")
+            .alias("@")
+            .action(mention)
+            .flag(
+                Flag::new("post", FlagType::String)
+                .alias("p"),
+            )
+        )
+        .command(
+            Command::new("follow")
+            .description("follow <did>")
+            .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 <handle>")
+            .alias("pro")
+            .action(profile)
+        )
+        .command(
+            Command::new("img-upload")
+            .description("img-upload <img>")
+            .action(img_upload)
+        )
+        .command(
+            Command::new("img-post")
+            .description("img-post <text> -l <link> -u <uri> -c <cid>")
+            .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 <text>")
+            .alias("chat")
+            .action(openai)
+        )
+        .command(
+            Command::new("openai-key")
+            .description("openai-key <API_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) {
+    refresh(c);
+    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 mut admin = "".to_string();
+    //if c.string_flag("admin").is_ok() {
+    //    admin = c.string_flag("admin").unwrap();
+    //}
+    
+    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<ChoicesChar>,
+}
+
+#[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/ai.zsh b/test/ai.zsh
new file mode 100755
index 0000000..5743479
--- /dev/null
+++ b/test/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}
+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/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
+}