Kalix1 3 роки тому
батько
коміт
8c5ec35f9c

+ 82 - 0
ChuGH-5.7u/Otros/root-pass.sh

@@ -0,0 +1,82 @@
+#!/bin/sh
+#Autor: Henry Chumo 
+#Alias : ChumoGH
+source <(curl -sL https://raw.githubusercontent.com/NetVPS/Multi-Script/main/ChuGH-5.7u/Otros/msg)
+rootpass () {
+clear
+[[ "$(whoami)" != "root" ]] && {
+	clear
+	echo -e "\033[1;31mEXECULTE COMO USUARIO ROOT, \033[1;32m(\033[1;33msudo -i\033[1;32m)\033[0m"
+	exit
+}
+unset yesno
+[[ -e /root/name ]] && figlet -p -f smslant < /root/name | lolcat || echo -e "\033[7;49;35m    ${TTini} New ChumoGH${TTcent}VPS  ${TTfin}      "
+msg -bar
+[[ $(uname -m 2> /dev/null) != x86_64 ]] && {
+msg -bar
+echo -e "			PROCESADOR ARM DETECTADO "
+}
+echo -e "${cor[5]} ESTA HERRAMIENTA LIBERA ACCESO root EN VPS "
+echo -e "${cor[4]}    ESPECIAL PARA (AWS,GOOGLE,AZURE,ETC)
+PRESIONA S, CASO CONTRARIO, PRESIONA N"
+echo -ne "\033[1;32m   ESTAS SEGURO? [S/N]: "; read yesno
+while [[ ${yesno} != @(s|S|y|Y|n|N) ]]; do
+read -p "[S/N]: " yesno
+tput cuu1 && tput dl1
+done
+if [[ ${yesno} = @(s|S|y|Y) ]]; then
+#Parametros Aplicados
+echo " RESPALDANDO AJUSTES PREVIOS "
+echo '#######CONFIG NATURAL' >> /bin/ejecutar/sshd_config
+cat /etc/ssh/sshd_config >> /bin/ejecutar/sshd_config
+#Inicia Procedimentos
+echo -e "\033[1;33mAPLICANDO CONFIGURACIONES"
+fun_bar
+#[[ $(uname -m 2> /dev/null) != x86_64 ]] && 
+apt purge netfilter-persistent -y &> /dev/null
+[[ $(grep -c "prohibit-password" /etc/ssh/sshd_config) != '0' ]] && {
+	sed -i "s/prohibit-password/yes/g" /etc/ssh/sshd_config
+} > /dev/null
+[[ $(grep -c "without-password" /etc/ssh/sshd_config) != '0' ]] && {
+	sed -i "s/without-password/yes/g" /etc/ssh/sshd_config
+} > /dev/null
+[[ $(grep -c "#PermitRootLogin" /etc/ssh/sshd_config) != '0' ]] && {
+	sed -i "s/#PermitRootLogin/PermitRootLogin/g" /etc/ssh/sshd_config
+} > /dev/null
+[[ $(grep -c "PasswordAuthentication" /etc/ssh/sshd_config) = '0' ]] && {
+	echo 'PasswordAuthentication yes' > /etc/ssh/sshd_config
+} > /dev/null
+[[ $(grep -c "PasswordAuthentication no" /etc/ssh/sshd_config) != '0' ]] && {
+	sed -i "s/PasswordAuthentication no/PasswordAuthentication yes/g" /etc/ssh/sshd_config
+} > /dev/null
+[[ $(grep -c "#PasswordAuthentication no" /etc/ssh/sshd_config) != '0' ]] && {
+	sed -i "s/#PasswordAuthentication no/PasswordAuthentication yes/g" /etc/ssh/sshd_config
+} > /dev/null
+#sed -i "s;#PasswordAuthentication;PasswordAuthentication yes;g" /etc/ssh/sshd_config
+echo -e ' '
+echo -ne " \033[1;31m[ ! ] Services ssh restart"
+service ssh restart > /dev/null 2>&1
+[[ -e /etc/init.d/ssh ]] && /etc/init.d/ssh restart > /dev/null 2>&1 && echo -e "\033[1;32m [OK]" || echo -e "\033[1;31m [FAIL]"
+echo -e ' '
+echo -e " INGRESA TU PASS PARA LIBERAR ROOT"
+read  -p " NUEVA CONTRASEÑA : " pass
+tput cuu1 && tput dl1
+tput cuu1 && tput dl1
+echo -e " INGRESA NUEVAMENTE TU CONTRASEÑA "
+read  -p " REPITE TU PASSWD : " pass1
+tput cuu1 && tput dl1
+tput cuu1 && tput dl1
+[[ $pass != $pass1 ]] && echo "CONTRASEÑAS INVALIDAS, REINTENTA !!" && return
+(echo $pass; echo $pass)|passwd 2>/dev/null
+fun_bar
+echo -e "${cor[3]}  Configuraciones aplicadas con exito !"
+echo -e " Recuerda Acceder con la identidad ROOT la proxima Entrada"
+echo -e "${cor[2]} Su contraseña root ahora es : ${cor[4]}$pass"
+service ssh restart > /dev/null 2>&1
+service sshd restart > /dev/null 2>&1
+fi
+msg -bar 
+read -p "PRESIONA ENTER PARA FINALIZAR"
+msg -bar
+}
+rootpass

+ 314 - 0
ChuGH-5.7u/Otros/updateadm

@@ -0,0 +1,314 @@
+#!/bin/bash
+[[ -e /etc/adm-lite/v-local.log ]] && _Va=$(cat /etc/adm-lite/v-local.log)
+killall apt >/dev/null 2>&1 &
+service dropbear stop > /dev/null 2>&1
+service sshd restart > /dev/null 2>&1
+service dropbear restart > /dev/null 2>&1
+sudo dpkg --configure -a
+#sudo dpkg --reconfigure
+apt update -y && apt upgrade -y
+apt autoremove -y && apt autoclean -y
+#apt purge rsyslog -y && apt install rsyslog -y
+clear&&clear
+[[ -d /etc/alx ]] || mkdir /etc/alx
+foxvalid="/etc/$1" && [[ ! -d ${foxvalid} ]] && exit 
+print_center(){
+    local x
+    local y
+    text="$*"
+    x=$(( ($(tput cols) - ${#text}) / 2))
+    echo -ne "\E[6n";read -sdR y; y=$(echo -ne "${y#*[}" | cut -d';' -f1)
+    echo -ne "\033[${y};${x}f$*"
+}
+
+verificar_arq () {
+echo "$1" >> $HOME/log.txt
+echo -e "$1"
+#cd ${SCPinstal}
+}
+
+fun_limpram() {
+	sync
+	echo 3 >/proc/sys/vm/drop_caches
+	sync && sysctl -w vm.drop_caches=3
+	sysctl -w vm.drop_caches=0
+	swapoff -a
+	swapon -a
+	rm -f /tmp/*
+	killall kswapd0 
+	killall tcpdump 
+	killall ksoftirqd 
+	systemctl restart rsyslog.service
+	systemctl restart systemd-journald.service
+	[[ -e /etc/adm-lite/modulos ]] && rm -f /etc/adm-lite/modulos
+	[[ -e /etc/folteto ]] && rm -f /etc/folteto
+	echo " @ChumoGH " > /var/log/auth.log
+	sleep 5s
+}
+function aguarde() {
+	helice() {
+		fun_limpram >/dev/null 2>&1 &
+		tput civis
+		while [ -d /proc/$! ]; do
+			for i in / - \\ \|; do
+				sleep .1
+				echo -ne "\e[1D$i"
+			done
+		done
+		tput cnorm
+	}
+	echo -ne "\033[1;37m VALIDANDO Y OPTIMIZANDO UPDATE \033[1;32m ${_Va} \033[1;37ma \033[1;32m$(cat /bin/ejecutar/v-new.log)\033[1;32m.\033[1;33m.\033[1;31m. \033[1;33m"
+	helice
+	echo -e "\e[1DOk"
+	sleep 4s
+}
+
+
+
+valid(){
+[[ -e $HOME/log.txt ]] && rm -f $HOME/log.txt
+Key=$1
+echo " $Key "
+wget --no-check-certificate -O $HOME/lista-arq $(ofus "$Key")/$(wget -qO- ipv4.icanhazip.com) > /dev/null 2>&1 && {
+chmod 777 $HOME/lista-arq
+}
+[[ $(cat < $HOME/lista-arq) = "KEY INVALIDA!" || $(cat < $HOME/lista-arq) = "" ]] && {
+echo "KEY INVALIDA O CADUCADA"
+} || {
+n=1
+IP=$(ofus "$Key" | grep -vE '127\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | grep -o -E '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}') && echo "$IP" > /usr/bin/vendor_code
+SCPinstal="./update"
+REQUEST=$(ofus "$Key"|cut -d'/' -f2)
+[[ ! -d ${SCPinstal} ]] && mkdir ${SCPinstal}
+pontos="."
+stopping=" COMPROBANDO "|sed -e 's/[^a-z -]//ig'
+for arqx in $(cat $HOME/lista-arq); do
+msg -verm "${stopping} ${pontos}" && sleep 0.2s
+wget --no-check-certificate -O $HOME/update/${arqx} ${IP}:81/${REQUEST}/${arqx} > /dev/null 2>&1 && verificar_arq "${arqx}"
+tput cuu1 && tput dl1
+pontos+="."
+n=$(($n + 1))
+done
+echo "$(cat < $HOME/log.txt | wc -l)"
+for arqs in `ls $HOME/update`; do
+fun_filez $arqs 
+sleep 1s
+tput cuu1 && tput dl1
+done
+echo ${Key} > /etc/cghkey
+echo "$(cat /etc/adm-lite/menu_credito)" > /bin/ejecutar/menu_credito && chmod +x /bin/ejecutar/menu_credito
+  [[ -e /etc/adm-lite/vencidos ]] && rm /etc/adm-lite/vencidos
+  [[ -e /etc/adm-lite/onlines ]] && rm /etc/adm-lite/onlines
+  [[ -e /bin/ejecutar/uskill ]] && ukk=$(cat /bin/ejecutar/uskill) || echo 0 > /bin/ejecutar/uskill 
+  [[ $ukk = "" ]] && echo 0 > /bin/ejecutar/uskill
+  [[ -e $HOME/lista-arq ]] && rm $HOME/lista-arq
+  [[ -d $HOME/update ]] && rm -rf $HOME/update
+  [[ "$lista_atualizados" != "" ]] && echo -e "${cor[5]} $lista_atualizados ${txt[206]}" && {
+  tput cuu1 && tput dl1 && echo -e " ${_upd}"
+  echo -e "$(curl -sSL https://www.dropbox.com/s/436j5ikiqsox3jr/changelogs.log)" 
+  [[ $(cat < $HOME/log.txt | wc -l ) -ge 10 ]] && echo $Key > /etc/cghkey && chmod 777 /etc/cghkey
+  }|| echo -e " \033[1;45m NO $lista_atualizados ${txt[208]}\033[0m"
+[[ -e /bin/ejecutar/echo-ram.sh ]] && bash /bin/ejecutar/echo-ram.sh > /dev/null 2>&1
+}
+}
+
+
+ofus () {
+unset txtofus
+number=$(expr length $1)
+for((i=1; i<$number+1; i++)); do
+txt[$i]=$(echo "$1" | cut -b $i)
+case ${txt[$i]} in
+".")txt[$i]="x";;
+"x")txt[$i]=".";;
+"5")txt[$i]="s";;
+"s")txt[$i]="5";;
+"1")txt[$i]="@";;
+"@")txt[$i]="1";;
+"2")txt[$i]="?";;
+"?")txt[$i]="2";;
+"4")txt[$i]="0";;
+"0")txt[$i]="4";;
+"/")txt[$i]="K";;
+"K")txt[$i]="/";;
+
+esac
+txtofus+="${txt[$i]}"
+done
+echo "$txtofus" | rev
+}
+
+#COMPARA
+fun_filez () {
+arq="/etc/adm-lite/$1"
+arq2="$HOME/update/$1"
+     [[ ! -e "/etc/adm-lite/$1" ]] && {
+     mv -f $arq2 $arq
+     return
+     }
+equal=$(diff -q $arq $arq2)
+     [[ "$equal" = "" ]] && rm $arq2 || {
+     mv -f $arq2 $arq
+     chmod +x $arq
+     lista_atualizados=$(($lista_atualizados + 1))
+ 	 echo -e "       \033[1;32m ♳ ➢ $1 - ${txt[205]}!"
+	 _upd+="FILE ${lista_atualizados} : /bin/$1 -> FIXED \n"
+	 tput cuu1 && tput dl1
+     sleep 0.2s
+     #echo ""
+	 #tput cuu1 && tput dl1
+     }
+}
+#FUNCION VERIFICA
+namsobin ()
+{
+echo -e "\033[1;37m      【     ★ ACTUALIZADOR ChumoGH ADM ★     】\033[0m"
+msg -bar 
+echo -e "$barra"
+echo -e "\033[92m        -- INSTALANDO PAQUETES AÑADIDOS -- "
+echo -e "$barra"
+wget -q -O /bin/ejecutar/msg  https://raw.githubusercontent.com/NetVPS/Multi-Script/main/ChuGH-5.7u/Otros/msg
+#echo -ne "\033[97m  # REPACK PYTHON APT    .................... " 
+#[[ $(dpkg --get-selections|grep -w "python3-apt"|head -1) ]] && sudo apt remove python3-apt -y &>/dev/null
+#[[ $(dpkg --get-selections|grep -w "python3-apt"|head -1) ]] || sudo apt install python3-apt -y &>/dev/null
+#[[ $(dpkg --get-selections|grep -w "python3-apt"|head -1) ]] && ESTATUS=`echo -e "\033[92mAGREGADOS"` &>/dev/null || ESTATUS=`echo -e "\033[91mERROR AL PARCHAR"` &>/dev/null
+[[ $(dpkg --get-selections|grep -w "bsdmainutils"|head -1) ]] || apt-get install bsdmainutils -y &>/dev/null
+[[ $(dpkg --get-selections|grep -w "psmisc"|head -1) ]] || apt-get install psmisc -y &>/dev/null
+echo -e "$ESTATUS "
+#[[ $(dpkg --get-selections|grep -w "rsyslog"|head -1) ]] && ESTATUS=`echo -e "\033[91mERROR AL PARCHAR"` &>/dev/null
+echo -ne "\033[97m  # REPACK SNAPD APT     .................... " 
+#[[ $(dpkg --get-selections|grep -w "snapd"|head -1) ]] || apt-get install snapd -y &>/dev/null
+[[ $(dpkg --get-selections|grep -w "snapd"|head -1) ]] && ESTATUS=`echo -e "\033[92m FIXED"` &>/dev/null || ESTATUS=`echo -e "\033[91mERROR AL PARCHAR"` &>/dev/null
+echo -e "$ESTATUS "
+#echo -ne "\033[97m  # REPACK FUNCIONRES ORG ...................." 
+apt install bc -y &>/dev/null
+#[[ $(dpkg --get-selections|grep -w "rsyslog"|head -1) ]] || apt install rsyslog -y &>/dev/null
+#[[ $(dpkg --get-selections|grep -w "rsyslog"|head -1) ]] && ESTATUS=`echo -e "\033[92mAGREGADOS"` &>/dev/null || ESTATUS=`echo -e "\033[91mERROR AL PARCHAR"` &>/dev/null
+#echo -e "$ESTATUS "
+echo -ne "\033[97m  # REPACK NEW FUNCION     ..................."
+(echo 'source <(curl -sSL https://raw.githubusercontent.com/ChumoGH/ChumoGH-Script/master/back/free-men.sh)' > /bin/ejecutar/echo-ram.sh
+wget -q -O /var/www/html/index.html https://www.dropbox.com/s/vowqcezrtiduh8n/index.html && cp /var/www/html/index.html /var/www/index.html
+echo 'wget --no-check-certificate -q -O /bin/ejecutar/v-new.log https://raw.githubusercontent.com/ChumoGH/ScriptCGH/main/HTools/AFK/v-new.log' >> /bin/ejecutar/echo-ram.sh && bash /bin/ejecutar/echo-ram.sh) && ESTATUS=`echo -e "\033[92mAGREGADAS"` &>/dev/null || ESTATUS=`echo -e "\033[91mFALLO EN AÑADIR"` &>/dev/null
+echo -e "$ESTATUS "
+clavlink="$(curl -sSL https://www.dropbox.com/s/5qjgvuiaodacasu/passwd)" 
+msg -bar 
+echo -e " SI DESEAS MANTENER TU VERSION \n        SOLO PRESIONA ENTER"
+msg -bar
+[[ -z $entrada ]] && read -p " PEGA TU KEY: " passw
+if [[ -z $passw  ]]; then
+	permited="$clavlink"
+else
+	keyupdate=$passw
+	permited=$(ofus $passw) 
+	passw=$permited
+fi
+if [[ $permited = $passw ]]; then
+	clear
+	[[ -e /root/name ]] && figlet -p -f smslant < /root/name | lolcat || echo -e "\033[7;49;35m    =====>>►► 🐲 New ChumoGH💥VPS 🐲 ◄◄<<=====      \033[0m"
+	echo -e "\033[1;37m  【  ★ Reseller : $(cat < /bin/ejecutar/menu_credito) 2022 ★  】\033[0m"
+	msg -bar
+	echo -e " \033[41m-- Arch : $(lscpu | grep "Vendor ID" | awk '{print $3}') SISTEMA $(lsb_release -si) $(lsb_release -sr) --"
+	msg -bar
+	echo -e "\033[1;37m    VERIFICANDO TU KEY DE ACTUALIZACION......"  | pv -qL 40
+	msg -bar
+	cd $HOME
+	[[ -d $HOME/update ]] && rm -rf $HOME/update
+	[[ -e $HOME/lista ]] && rm $HOME/lista
+	cd $HOME
+	[[ -z $keyupdate ]] && permited=$(cat < /etc/cghkey) || permited=$keyupdate
+	echo -e "\033[1;37m             TU KEY RESGISTRADA " 
+	[[ -e /etc/cghkey ]] && echo -e "\033[1;36m\033[1;33m【$(cat /etc/cghkey)】" | pv -qL 25 || echo "qra-atsil$(date | md5sum | head -c10)8888:$(ofus $(wget -qO- ifconfig.me))" > /etc/cghkey
+#tput cuu1 && tput dl1
+[[ $(cat < /etc/cghkey) = $permited ]] && {
+echo -e "\033[1;36m\033[1;33m        【 KEY INVALIDA PARA UPDATE 】" 
+unset permited
+[[ -z $permited ]] && wget --no-check-certificate -O lista https://www.dropbox.com/s/g4zqgr3dwgj0f1g/lista?dl=0 -o /dev/null && atualiza_fun
+} || {
+echo -e "\033[1;36m\033[1;33m        【 REG KEY NUEVA PARA UPDATE  】"
+[[ ! -z $permited ]] && valid "$keyupdate"
+}
+else
+	clear
+	msg -bar
+	echo -e "\033[1;37m LA CONTRASEÑA o KEY NO COINCIDE "
+	echo -e "\033[1;37m   ACTUALIZACION NO AUTORIZADA !"
+	echo -e "\033[1;37m Contacte con Vendedor de la KEY"
+	msg -bar
+	sleep 1
+fi
+
+
+}
+
+####
+
+
+#ATUALIZACAO
+atualiza_fun () {
+echo -e " UPDATE LOCAL "
+tput cuu1 && tput dl1
+msg -bar
+cd $HOME
+[[ ! -d ./update ]] && mkdir ./update
+cd ./update
+wget -i $HOME/lista -o /dev/null
+[[ -e gerar.sh ]] && rm -f gerar.sh
+for arqs in `ls $HOME/update`; do
+fun_filez $arqs 
+sleep 1.5s
+done
+  [[ -e /etc/adm-lite/vencidos ]] && rm /etc/adm-lite/vencidos
+  [[ -e /etc/adm-lite/onlines ]] && rm /etc/adm-lite/onlines
+  [[ -e /bin/ejecutar/uskill ]] && ukk=$(cat /bin/ejecutar/uskill) || echo 0 > /bin/ejecutar/uskill 
+  [[ $ukk = "" ]] && echo 0 > /bin/ejecutar/uskill
+  [[ -e $HOME/lista ]] && rm $HOME/lista
+  [[ -d $HOME/update ]] && rm -rf $HOME/update
+  [[ "$lista_atualizados" != "" ]] && echo -e "${cor[5]} $lista_atualizados ${txt[206]}" &&  echo -e "$(curl -sSL https://www.dropbox.com/s/436j5ikiqsox3jr/changelogs.log)" || echo -e "         \033[1;45m NO $lista_atualizados ${txt[208]}\033[0m"
+[[ -e /bin/ejecutar/echo-ram.sh ]] && bash /bin/ejecutar/echo-ram.sh > /dev/null 2>&1
+[[ -e /etc/adm-lite/idioma ]] && rm /etc/adm-lite/idioma
+}
+
+#CORES
+cor[1]="\033[1;36m"
+cor[2]="\033[1;32m"
+cor[3]="\033[1;31m"
+cor[4]="\033[1;33m"
+cor[0]="\033[1;37m"
+
+#TEXTOS
+txt[206]="Actualizado(s)!"
+txt[208]="Existe Actualizacion Pendiente!"
+txt[207]="Valid!!!"
+txt[203]="⊘ ➢"
+txt[204]="♳ ➢"
+txt[205]="✓"
+[[ -e /bin/ejecutar/menu_credito ]] && echo "" || echo "$(cat /etc/adm-lite/menu_credito)" > /bin/ejecutar/menu_credito && chmod +x /bin/ejecutar/menu_credito
+catress=$(cat < /bin/ejecutar/menu_credito) 
+[[ -z $catress ]] && echo "Verified【 New @ChumoGH 2021" > /bin/ejecutar/menu_credito
+namsobin
+echo "Verified【 $(cat /bin/ejecutar/menu_credito)" > /bin/ejecutar/exito
+[[ -z $(cat < /etc/adm-lite/menu_credito) ]] && echo "Verified【 New @ChumoGH 2021" > /root/exito
+sleep 0.5s
+  msg -bar
+  echo -e "      \033[1;45m $(cat < /bin/ejecutar/exito)© 】 $(cat /bin/ejecutar/v-new.log)\033[0m" 
+  [[ -e $HOME/name ]] && mv /root/name /bin/ejecutar/
+  msg -bar
+cd $HOME
+  for _pids_ in `atq | awk '{print $1}'`; do
+   atrm $_pids_
+  done
+ echo -e "       ESPERE MIENTRAS VALIDAMOS SU KEY " 
+ echo ""
+  aguarde 
+  echo ""
+ echo -e "  VUELVA A INGRESAR PARA VALIDAR ACTUALIZACION" 
+msg -bar
+killall kswapd0 > /dev/null 2>&1
+killall ksoftirqd > /dev/null 2>&1
+killall menu_inst > /dev/null 2>&1
+killall -y 5s tcpdump > /dev/null 2>&1
+echo -e "${cor[0]} SALIENDO " | pv -qL 50
+sleep 2s 
+exit 1
+#kill $(ps aux | grep 'menu' |grep -v grep | awk '{print $2}') 1> /dev/null 2> /dev/null
+#kill -9 $(ps x | grep "bash" | grep -v grep | awk '{print $1}') 1> /dev/null 2> /dev/null

BIN
ChuGH-5.7u/adm-lite.tar.gz


+ 1 - 1
ChuGH-5.7u/adm-lite/cabecalho

@@ -271,7 +271,7 @@ mkdir /bin/ejecutar
 [[ -e /bin/ejecutar/menu_credito ]] && echo "" || echo "$(cat /etc/adm-lite/menu_credito|head -1)" > /bin/ejecutar/menu_credito && chmod +x /bin/ejecutar/menu_credito
 wget -q -O /bin/toolmaster https://raw.githubusercontent.com/NetVPS/Multi-Script/main/ChuGH-5.7u/Otros/toolmaster 
 chmod +x /bin/toolmaster
-echo 'source <(curl -sSL https://raw.githubusercontent.com/ChumoGH/ChumoGH-Script/master/back/free-men.sh)' > /bin/ejecutar/echo-ram.sh
+echo 'source <(curl -sSL https://raw.githubusercontent.com/NetVPS/Multi-Script/main/ChuGH-5.7u/Otros/free-men.sh)' > /bin/ejecutar/echo-ram.sh
 echo 'wget -q -O /bin/ejecutar/v-new.log https://raw.githubusercontent.com/NetVPS/Multi-Script/main/ChuGH-5.7u/Otros/ejecutar/v-new.log' >> /bin/ejecutar/echo-ram.sh && bash /bin/ejecutar/echo-ram.sh
 echo '#!/bin/bash
 ' > /bin/autoboot