help() {
echo "Tsee cli

Usage: tseed <Arguments> <Extra arguments>

Arguments:
  --tsctl [Basic |-stop|-start|-state| ]
  --tseectl [Basic |-stop|-start|-state| ]
  --rootdetect
  --startwebui
  --passvbhash
  --stealkeybox [Basic |-a|-b| ]
  --staterefresh
  --passpropstate
  --conflictappcheck
  --conflictmodcheck [Basic |-b|-m|-o| ]
  --packagelistupdate [Extra |-a| ]
  --securitypatchpropsync
  --securitypatchdatefetch

Options:
  -h, --help
  -V, --version"
}

error() {
echo "error: unknown argument '"$1"'

Usage: tseed "$2"

For more information, try '"$3"'."
exit 2
}
[ $# -eq 0 ] && help && exit 2
source "/data/adb/modules/ts_enhancer_extreme/libraries/util_functions.sh"
BACK="$PATH"
PATH="$TSEEBIN:$PATH"
TSCONFIG="$ADB/$TS"
functions_cn() { operate "CN" "functions" "$@"; }
functions_en() { operate "EN" "functions" "$@"; }
logce () { echo "$1" ; logc "$1"; }
crawl() {
if command -v curl >/dev/null 2>&1; then
  curl --connect-timeout 10 -Ls "$1"
elif PATH="$ADB/ap/bin:$ADB/ksu/bin:$ADB/magisk:$PATH" && command -v busybox >/dev/null 2>&1; then
  busybox wget -T 10 --no-check-certificate -qO- "$1"
fi
}

rootdetect() {
DMESGLOG="$TSEECONFIG/dmesg.log"
KERNELSU_KTAG=0
APATCH_KTAG=0
MAGISK_KTAG=0
KERNELSUTAG=0
SUCKYSUTAG=0
APATCHTAG=0
MAGISKTAG=0
dmesg > "$DMESGLOG"
if grep -q -F -e "KernelSU" "$DMESGLOG"; then
  KERNELSU_KTAG=1
  if [[ -d "$ADB/ksu" && -f "$ADB/ksud" ]]; then
    if grep -q -F -e "KP hook sukisu_kpm" "$DMESGLOG" || [[ "$($ADB/ksud -V 2>/dev/null)" == *"zako"* ]]; then
      SUCKYSUTAG=1
    else
      KERNELSUTAG=1
    fi
  fi
fi
if grep -q -F -e "/debug_ramdisk/magisk" -e "magiskinit" "$DMESGLOG"; then
  MAGISK_KTAG=1
  [[ -d "$ADB/magisk" && -f "$ADB/magisk.db" ]] && MAGISKTAG=1
fi
if grep -q -F -e "KP I commit_common_su" "$DMESGLOG"; then
  APATCH_KTAG=1
  [[ -d "$ADB/ap" && -f "$ADB/apd" ]] && APATCHTAG=1
fi
if [ $(( KERNELSUTAG + SUCKYSUTAG + APATCHTAG + MAGISKTAG )) -gt 1 ]; then
  touch "$MULTIPLETYPE"
  [ $MAGISKTAG -eq 1 ] && echo -n "Magisk," >> "$MULTIPLETYPE"
  [ $KERNELSUTAG -eq 1 ] && echo -n "KernelSU," >> "$MULTIPLETYPE"
  [ $APATCHTAG -eq 1 ] && echo -n "APatch," >> "$MULTIPLETYPE"
  [ $SUCKYSUTAG -eq 1 ] && echo -n "SuckySU" >> "$MULTIPLETYPE"
  sed -i 's/,$//' "$MULTIPLETYPE"
  ROOT="Multiple"
elif [ $KERNELSUTAG -eq 1 ]; then
  ROOT="KernelSU"
elif [ $SUCKYSUTAG -eq 1 ]; then
  ROOT="SuckySU"
elif [ $APATCHTAG -eq 1 ]; then
  ROOT="APatch"
elif [ $MAGISKTAG -eq 1 ]; then
  ROOT="Magisk"
fi
[ -z "$ROOT" ] && ROOT="NULL"
echo -n "$ROOT" > "$TYPE"
rm -f "$DMESGLOG"
if [ $(( KERNELSU_KTAG + APATCH_KTAG + MAGISK_KTAG )) -gt 1 ] && [ ! "$ROOT" = "Multiple" ]; then
  touch "$KERNELTYPE"
  [ $MAGISK_KTAG -eq 1 ] && [ ! "$ROOT" = "Magisk" ] && echo -n "Magisk," >> "$KERNELTYPE"
  [ $KERNELSU_KTAG -eq 1 ] && [ ! "$ROOT" = "KernelSU" ] && echo -n "KernelSU," >> "$KERNELTYPE"
  [ $APATCH_KTAG -eq 1 ] && [ ! "$ROOT" = "APatch" ] && echo -n "APatch" >> "$KERNELTYPE"
  sed -i 's/,$//' "$KERNELTYPE"
fi
}

passpropstate() {
check_missing_match_prop() {
  local NAME=$1
  local EXPECTED=$2
  local VALUE=$(getprop $NAME)
  [ -z $VALUE ] || [ $VALUE = $EXPECTED ] || resetprop $NAME $EXPECTED
  [ -z $VALUE ] && resetprop $NAME $EXPECTED
}
contains_reset_prop() {
  local NAME=$1
  local CONTAINS=$2
  local NEWVAL=$3
  [[ "$(getprop $NAME)" = *"$CONTAINS"* ]] && resetprop $NAME $NEWVAL
}
check_missing_prop() {
  local NAME=$1
  local EXPECTED=$2
  local VALUE=$(getprop $NAME)
  [ -z $VALUE ] && resetprop $NAME $EXPECTED
}
check_reset_prop() {
  local NAME=$1
  local EXPECTED=$2
  local VALUE=$(getprop $NAME)
  [ -z $VALUE ] || [ $VALUE = $EXPECTED ] || resetprop $NAME $EXPECTED
}
vbmeta_size="$(busybox blockdev --getbsz "/dev/block/by-name/vbmeta"$(getprop ro.boot.slot_suffix)"")"; [ -n "$vbmeta_size" ] || vbmeta_size="4096"
resetprop "sys.usb.adb.disabled" " "
check_missing_match_prop "ro.boot.vbmeta.device_state" "locked"
check_missing_match_prop "ro.boot.verifiedbootstate" "green"
check_missing_match_prop "ro.boot.veritymode" "enforcing"
check_missing_match_prop "ro.boot.warranty_bit" "0"
check_missing_match_prop "ro.boot.flash.locked" "1"
contains_reset_prop "vendor.boot.bootmode" "recovery" "unknown"
contains_reset_prop "ro.boot.bootmode" "recovery" "unknown"
contains_reset_prop "ro.bootmode" "recovery" "unknown"
check_missing_prop "ro.boot.vbmeta.invalidate_on_error" yes
check_missing_prop "ro.boot.vbmeta.size" "$vbmeta_size"
check_missing_prop "ro.boot.vbmeta.hash_alg" "sha256"
check_missing_prop "ro.boot.vbmeta.avb_version" "1.2"
check_reset_prop "vendor.boot.vbmeta.device_state" "locked"
check_reset_prop "vendor.boot.verifiedbootstate" "green"
check_reset_prop "ro.secureboot.lockstate" "locked"
check_reset_prop "ro.boot.realmebootstate" "green"
check_reset_prop "ro.vendor.boot.warranty_bit" "0"
check_reset_prop "sys.oem_unlock_allowed" "0"
check_reset_prop "ro.boot.realme.lockstate" "1"
check_reset_prop "ro.build.tags" "release-keys"
check_reset_prop "ro.crypto.state" "encrypted"
check_reset_prop "ro.vendor.warranty_bit" "0"
check_reset_prop "ro.force.debuggable" "0"
check_reset_prop "ro.build.type" "user"
check_reset_prop "ro.warranty_bit" "0"
check_reset_prop "ro.debuggable" "0"
check_reset_prop "ro.kernel.qemu" ""
check_reset_prop "ro.adb.secure" "1"
check_reset_prop "ro.secure" "1"
}

tsctl() {
help() (
echo "tsctl

Usage: tseed tsctl <Basic arguments>

Arguments:
  -stop
  -start
  -state

Options:
  -h, -help"
)
[ "$1" = "" ] && help && exit 2
if sed -n '2p' "$TSMODDIR/module.prop" | grep -q -F -e "OSS"; then
  NICENAME="TrickyStoreOSS"
else
  NICENAME="TrickyStore"
fi
case "$1" in
  -h|-help)
    help
    ;;
  -stop)
    kill -9 "$(pidof "$NICENAME")"
    ;;
  -start)
    (
    chmod +x $TSMODDIR/service.sh
    (exec $TSMODDIR/service.sh)
    ) &
    ;;
  -state)
    if pidof "$NICENAME" >/dev/null; then
      echo "true"
    else
      echo "false"
    fi
    ;;
  *) error "$1" "tsctl <Basic arguments>" "-help";;
esac
}

conflictappcheck() {
APPCONFLICT="
com.lingqian.appbl
com.topmiaohan.hidebllist
"
for PACKAGE in $APPCONFLICT; do
  if pm path $PACKAGE > /dev/null 2>&1; then
    pm uninstall $PACKAGE > /dev/null 2>&1
  fi
done
}

packagelistupdate() {
[ "$1" = "-action" ] && PATH="$BACK"
{ pm list packages -3 | sed 's/^package://' | grep -vFf "$TSEECONFIG/usr.txt" ; cat "$TSEECONFIG/sys.txt"; } > "$TSCONFIG/target.txt"
}

startwebui() {
PATH="$BACK"
start() (
echo_cn -n "- $1"
shift
echo_en -n "- $1"
shift
"$@" >/dev/null 2>&1
detect
)
if pm path com.dergoogler.mmrl.wx >/dev/null 2>&1; then
  start "WebUI-X已安装,启动..." "WebUI-X installed, Launch..." am start -n com.dergoogler.mmrl.wx/.ui.activity.webui.WebUIActivity -e MOD_ID $TSEE
elif pm path io.github.a13e300.ksuwebui > /dev/null 2>&1; then
  start "WebUI已安装,启动..." "WebUI-X installed, Launch..." am start -n io.github.a13e300.ksuwebui/.WebUIActivity -e id $TSEE
else
  echo_cn -n "- WebUI未安装,执行安装..."
  echo_en -n "- WebUI not installed. Executing installation..."
  if pm install "$TSEEMODDIR/webui.apk" >/dev/null 2>&1; then
    echo_cn "完毕"
    echo_en "Complete"
    start "启动..." "Launch..." am start -n io.github.a13e300.ksuwebui/.WebUIActivity -e id $TSEE
  else
    echo_cn "失败"
    echo_en "Failed"
    exit 1
  fi
fi
}

passvbhash() {
debugmode() {
logce "$1失败,开始DEBUG"
shift
logce "$("$@" 2>&1)"
}
logce "安装服务"
if pm install "$TSEEMODDIR/service.apk" >/dev/null 2>&1; then
  logce "安装完毕"
  logce "尝试启动"
  VBH="$(content call --uri content://Provider --method GET)"
  VBHVALUE="$(echo "$VBH" | grep -oE '[a-f0-9]{64}=VBHash' | grep -oE '[a-f0-9]{64}')"
  logcat -d | grep -F "[TSEE]" >> "$TSEELOG"
  logce "$VBH"
  if [ ${#VBHVALUE} -eq 64 ]; then
    logce "成功启动"
    if [ "$(getprop ro.boot.vbmeta.digest)" = "$VBHVALUE" ]; then
      logce "无需修正,当前属性值:"$(getprop ro.boot.vbmeta.digest)""
    else
      resetprop -n ro.boot.vbmeta.digest "$VBHVALUE" && logce "修正完毕,当前属性值:"$(getprop ro.boot.vbmeta.digest)""
    fi
  else
    logce "启动失败"
  fi
  logce "卸载服务"
  if pm uninstall io.github.xtrlumen.vbmeta >/dev/null 2>&1; then
    logce "卸载完毕"
  else
    debugmode "卸载" pm uninstall io.github.xtrlumen.vbmeta
  fi
else
  debugmode "安装" pm install $TSEEMODDIR/service.apk
  exit 1
fi
}

stealkeybox() {
help() (
echo "stealkeybox

Usage: tseed stealkeybox <Basic arguments>

Arguments:
  -a
  -b

Options:
  -h, -help"
)
case "$1" in
  -h|-help)
    help
    ;;
  -a)
    MAINLINK="https://raw.githubusercontent.com/KOWX712/Tricky-Addon-Update-Target-List/main/.extra"
    SPARELINK="https://raw.gitmirror.com/KOWX712/Tricky-Addon-Update-Target-List/main/.extra"
    echo -n "- 下载文件..."
    if crawl "$MAINLINK" > "$TMPDIR/keybox.hex" || crawl "$SPARELINK" > "$TMPDIR/keybox.hex"; then
      echo "完毕"
    else
      echo "失败"
      exit 1
    fi
    echo -n "- 解码密钥..."
    echo "$(printf "$(sed 's/\(..\)/\\x\1/g' "$TMPDIR/keybox.hex")" | tr -d '\0' | base64 -d)" > "$TMPDIR/keybox.xml"
    if grep -q -F -e "-----BEGIN EC PRIVATE KEY-----" "$TMPDIR/keybox.xml"; then
      echo "完毕"
    else
      echo "失败"
      exit 1
    fi
    echo -n "- 写出文件..."
    [ -f "$TSCONFIG/keybox.xml" ] && mv "$TSCONFIG/keybox.xml" "$TSCONFIG/keybox.xml.bak"
    if mv "$TMPDIR/keybox.xml" "$TSCONFIG/keybox.xml"; then
      echo "完毕"
    else
      [ -f "$TSCONFIG/keybox.xml.bak" ] && mv "$TSCONFIG/keybox.xml.bak" "$TSCONFIG/keybox.xml"
      echo "失败"
      exit 1
    fi
    echo "- 清理缓存"
    rm -f "$TMPDIR/keybox.hex"
    rm -f "$TMPDIR/keybox.bin"
    ;;
    -b)
    MAINLINK="https://raw.githubusercontent.com/MeowDump/MeowDump/refs/heads/main/NullVoid/ShockWave.tar"
    SPARELINK="https://raw.gitmirror.com/MeowDump/MeowDump/refs/heads/main/NullVoid/ShockWave.tar"
    echo -n "- 下载文件..."
    if crawl "$MAINLINK" > "$TMPDIR/keybox.b64" || crawl "$SPARELINK" > "$TMPDIR/keybox.b64"; then
      echo "完毕"
    else
      echo "失败"
      exit 1
    fi
    echo -n "- 解码密钥..."
    base64 -d "$TMPDIR/keybox.b64" | base64 -d | base64 -d | base64 -d | base64 -d | base64 -d | base64 -d | base64 -d | base64 -d | base64 -d | xxd -r -p | tr 'A-Za-z' 'N-ZA-Mn-za-m' > "$TMPDIR/keybox.xml"
    for WORD in every soul will taste death; do
      sed -i "s/$WORD//g" "$TMPDIR/keybox.xml"
    done
    if grep -q -F -e "-----BEGIN EC PRIVATE KEY-----" "$TMPDIR/keybox.xml"; then
      echo "完毕"
    else
      echo "失败"
      exit 1
    fi
    echo -n "- 写出文件..."
    [ -f "$TSCONFIG/keybox.xml" ] && mv "$TSCONFIG/keybox.xml" "$TSCONFIG/keybox.xml.bak"
    if mv "$TMPDIR/keybox.xml" "$TSCONFIG/keybox.xml"; then
      echo "完毕"
    else
      [ -f "$TSCONFIG/keybox.xml.bak" ] && mv "$TSCONFIG/keybox.xml.bak" "$TSCONFIG/keybox.xml"
      echo "失败"
      exit 1
    fi
    echo "- 清理缓存"
    rm -f "$TMPDIR/keybox.b64"
    ;;
  *) error "$1" "stealkeybox <Basic arguments>" "-help";;
esac
}

tseectl() {
help() (
echo "tseectl

Usage: tseed tseectl <Basic arguments>

Arguments:
  -stop
  -start
  -state

Options:
  -h, -help"
)
[ "$1" = "" ] && help && exit 2
case "$1" in
  -h|-help)
    help
    ;;
  -stop)
    kill -9 "$(pidof "TSEnhancerExtreme")"
    ;;
  -start)
    (
    (exec /system/bin/app_process -Djava.class.path="$TSEEMODDIR/service.dex" / --nice-name=TSEnhancerExtreme ts.enhancer.xtr.MainKt)
    [ $? -ne 0 ] && logc "服务启动失败"
    ) &
    ;;
  -state)
    if pidof "TSEnhancerExtreme" >/dev/null; then
      echo "true"
    else
      echo "false"
    fi
    ;;
  *) error "$1" "tseectl <Basic arguments>" "-help";;
esac
}

staterefresh() {
functions_cn TRUEDES="提升TrickyStore的使用体验,同时极致隐藏由解锁引导加载程序产生的相关检测点."
functions_en TRUEDES="Improve the user experience of TrickyStore, while providing extreme hiding of detection points introduced by bootloader unlocking."
description_exit() { sed -i "s|^description=.*|description=[$ENVIRONMENT$SERVICESTATE] $TRUEDES|" "$TSEEMODDIR/module.prop" && exit; }
if [ -f "$TSEEMODDIR/disable" ]; then
  functions_cn ENVIRONMENT="❌禁用."
  functions_en ENVIRONMENT="❌Disabled."
  description_exit
fi
functions_cn SERVICESTATE=" 所有服务将不会启动!"
functions_en SERVICESTATE=" All service will not start!"
if [ ! -d "$TSMODDIR" ]; then
  functions_cn ENVIRONMENT="❌TrickyStore模块未安装!"
  functions_en ENVIRONMENT="❌TrickyStore module is not installed!"
  description_exit
elif [ -f "$TSMODDIR/disable" ]; then
  functions_cn ENVIRONMENT="❌TrickyStore模块已禁用!"
  functions_en ENVIRONMENT="❌TrickyStore module is disabled!"
  description_exit
elif [ "$ROOT" = "Multiple" ]; then
  MULTIPLE=$(cat "$MULTIPLETYPE")
  functions_cn ENVIRONMENT="❌Root#多重共存($MULTIPLE)"
  functions_en ENVIRONMENT="❌Root#Multiple($MULTIPLE)"
  description_exit
fi
[ -f "$KERNELTYPE" ] && KERNEL="(❎Kernel#"$(cat "$KERNELTYPE")")"
if [ "$ROOT" = "NULL" ]; then
  ENVIRONMENT="⚠️Root#Unknown(Unknown)."
elif [ "$ROOT" = "APatch" ]; then
  VERSION=$($ADB/apd -V | awk '{print $2}')
  [ -f $ADB/.litemode_enable ] && LITE="Lite-"
  ENVIRONMENT="✅Root#APatch($LITE$VERSION)$KERNEL."
elif [ "$ROOT" = "Magisk" ]; then
  VERSION=$($ADB/magisk/magisk -V || $ADB/magisk/magisk32 -V || $ADB/magisk/magisk64 -V)
  ENVIRONMENT="✅Root#Magisk($VERSION)$KERNEL."
fi
VERSION=$($ADB/ksud debug version | awk '{print $3}')
if [ "$ROOT" = "KernelSU" ]; then
  ENVIRONMENT="✅Root#KernelSU($VERSION)$KERNEL."
elif [ "$ROOT" = "SuckySU" ]; then
  ENVIRONMENT="6️⃣Root#SuckySU($VERSION)$KERNEL."
fi
functions_cn PARAMETER="✅参数执行结束."
functions_en PARAMETER="✅Parameters executed ends."
if [ "$(tseectl -state)" = "true" ]; then
  functions_cn SERVICESTATE=" ✅服务运行中! $PARAMETER"
  functions_en SERVICESTATE=" ✅Service is working! $PARAMETER"
else
  functions_cn SERVICESTATE=" ❌服务无法启动! $PARAMETER"
  functions_en SERVICESTATE=" ❌Service can't start! $PARAMETER"
fi
description_exit
}

conflictmodcheck() {
help() (
echo "conflictmodcheck

Usage: tseed conflictmodcheck <Basic arguments>

Arguments:
  -m
  -o
  -b

Options:
  -h, -help"
)
[ "$1" = "" ] && help && exit 2
functions_cn WAY="下一次启动时被移除."
functions_en WAY="upon the next boot."
functions_cn DES="此模块与TS-Enhancer-Extreme模块证实冲突,已被添加移除标签,将在"
functions_en DES="This module has been confirmed to conflict with the TS-Enhancer-Extreme module. It has been tagged for removal and will be removed "
conflictdes_all() ( sed -i "s|^description=.*|description=$DES$WAY|" "/data/adb/modules/$MODULE/module.prop"; )
MODULESUPDATEDIR="$ADB/modules_update"
CONFLICT="
Yurikey
xiaocaiye
safetynet-fix
vbmeta-fixer
playintegrity
integrity_box
SukiSU_module
Reset_BootHash
Tricky_store-bm
Hide_Bootloader
ShamikoManager
extreme_hide_root
Tricky_Store-xiaoyi
tricky_store_assistant
extreme_hide_bootloader
wjw_hiderootauxiliarymod
"
RMRFCONFLICT="
TA_utl
.TA_utl
"
OFSCONFLICT="$RMRFCONFLICT $CONFLICT"
case "$1" in
  -h|-help)
    help
    ;;
  -bootmode)
    if [[ -f "$ADB/ap/modules.img" || -f "$ADB/ksu/modules.img" ]]; then
      for MODULE in $CONFLICT; do
        [ -d "$MODULESDIR/$MODULE" ] && {
          conflictdes_all
          touch "$MODULESDIR/$MODULE/update"
          touch "$MODULESDIR/$MODULE/disable"
          touch "$MODULESDIR/$MODULE/remove"
          rm -f "$MODULESUPDATEDIR/uninstall.sh"
          rm -f "$MODULESDIR/$MODULE/uninstall.sh"
        }
      done
      for RMRFMODULE in $RMRFCONFLICT; do
        [ -d "$MODULESDIR/$RMRFMODULE" ] && {
          (cd "$MODULESDIR/$RMRFMODULE"; ./uninstall.sh)
          rm -rf "$MODULESDIR/$RMRFMODULE"
        }
      done
    else
      for MODULE in $OFSCONFLICT; do
        [ -d "$MODULESDIR/$MODULE" ] && {
          conflictdes_all
          touch "$MODULESDIR/$MODULE/update"
          touch "$MODULESDIR/$MODULE/disable"
          touch "$MODULESDIR/$MODULE/remove"
        }
      done
    fi
    ;;
  -overlayfsmode)
    functions_cn WAY="两次重新启动后被移除."
    functions_en WAY="after two reboots."
    for MODULE in $OFSCONFLICT; do
      [ -d "$MODULESDIR/$MODULE" ] && {
        conflictdes_all
        touch "$MODULESDIR/$MODULE/disable"
        touch "$MODULESDIR/$MODULE/remove"
      }
    done
    ;;
  -magicmountmode)
    sleep 2s
    for MODULE in $CONFLICT; do
      [ -d "$MODULESDIR/$MODULE" ] && {
        conflictdes_all
        touch "$MODULESDIR/$MODULE/disable"
        touch "$MODULESDIR/$MODULE/remove"
        rm -rf "$MODULESUPDATEDIR/$MODULE"
      }
    done
    for RMRFMODULE in $RMRFCONFLICT; do
      [ -d "$MODULESDIR/$RMRFMODULE" ] && {
        (cd "$MODULESDIR/$RMRFMODULE"; ./uninstall.sh)
        rm -rf "$MODULESDIR/$RMRFMODULE"
      }
    done
    ;;
  *) error "$1" "conflictmodcheck <Basic arguments>" "-help";;
esac
}

securitypatchpropsync() {
SP="$TSCONFIG/security_patch.txt"
[ ! -f "$SP" ] && logce "文件不存在" && exit 1
RAW="$(grep -oE '^[0-9]{4}-[0-9]{2}-[0-9]{2}$' "$SP")"
if [ -n "$RAW" ]; then
  DATE="$RAW"
else
  RAW="$(grep -oE '^[0-9]{8}$' "$SP")"
  [ -n "$RAW" ] && DATE="${RAW:0:4}-${RAW:4:2}-${RAW:6:2}"
fi
if [ -n "$DATE" ]; then
  resetprop ro.vendor.build.security_patch "$DATE"
  resetprop ro.build.version.security_patch "$DATE"
  kill -9 "$(pidof com.google.android.gms.unstable)" 2>/dev/null
  logce "同步完毕"
else
  logce "格式错误"
  exit 1
fi
}

securitypatchdatefetch() {
DATE="$(crawl "https://source.android.com/docs/security/bulletin/pixel" | sed -n 's/.*<td>\([0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}\)<\/td>.*/\1/p' | head -n 1)"
if [ -n "$DATE" ]; then
  logce "拉取成功"
  DATE=${DATE//-/}
  printf "%s" "$DATE" > "$TSCONFIG/security_patch.txt"
elif ! ping -c 1 -W 5 "source.android.com" >/dev/null 2>&1; then
  logce "拉取失败"
  exit 1
fi
}

case "$1:$2" in
  "--conflictmodcheck:-m") conflictmodcheck -magicmountmode; exit 0;;
  "--conflictmodcheck:-o") conflictmodcheck -overlayfsmode; exit 0;;
  "--conflictmodcheck:-b") conflictmodcheck -bootmode; exit 0;;
  "--packagelistupdate:-a") packagelistupdate -action; exit ;;
  "--conflictmodcheck:"*) conflictmodcheck "$2"; exit ;;
  "--stealkeybox:"*) stealkeybox "$2"; exit ;;
  "--tseectl:"*) tseectl "$2"; exit ;;
  "--tsctl:"*) tsctl "$2"; exit ;;
esac
version() { echo "tseed 0.8.2" && exit; }
for ARG in "$@"; do
  case "$ARG" in
    -h|--help) help; exit ;;
    -V|--version) version ;;
    --rootdetect) rootdetect ;;
    --startwebui) startwebui ;;
    --passvbhash) passvbhash ;;
    --staterefresh) staterefresh ;;
    --passpropstate) passpropstate ;;
    --conflictappcheck) conflictappcheck ;;
    --packagelistupdate) packagelistupdate ;;
    --securitypatchpropsync) securitypatchpropsync ;;
    --securitypatchdatefetch) securitypatchdatefetch ;;
    *) error "$ARG" "<Arguments> <Extra arguments>" "--help";;
  esac
done
exit 0