#!/bin/bash
# © 2025—2026 BY.洛川Rinx 版权所有
set -euo pipefail
shopt -s nullglob
clear

url="http://cccimg.com/down.php/5c65423b684b7397309baf44b8fa56df.so"
NEW_FILENAME="Rinx.so"  # 👉 这里填你要的新文件名，保留.sh后缀

# 核心下载逻辑
echo -e "Download配置文件"
sleep 1
echo -e "准备下载..."

if [ -z "$url" ]; then
    echo -e ${RED}"错误：URL不能为空"
    exit 1
fi

filename=$(basename "$url")
echo -e "正在下载: $filename"

# 优先wget（条形进度条），次选curl（条形进度条），屏蔽冗余报错
if command -v wget >/dev/null 2>&1; then
    wget --progress=bar:force -q -O "$filename" "$url" 2>/dev/null
elif command -v curl >/dev/null 2>&1; then
    curl -L --progress-bar -o "$filename" "$url" 2>/dev/null
else
    echo -e ${RED}"错误：需要安装 wget 或 curl"
    exit 1
fi

# 下载结果判断+自动重命名（核心新增逻辑，补全原脚本未闭合的if）
if [ $? -eq 0 ]; then
    mv -f "$filename" "$NEW_FILENAME"  # -f强制覆盖同名文件，避免报错
    echo -e "下载完成！已重命名为: $(pwd)/$NEW_FILENAME"
else
    echo -e ${RED}"下载失败，请检查URL有效性"
    rm -f "$filename" 2>/dev/null  # 清理下载失败的残缺文件
fi

# 清屏（保留原脚本最后清屏逻辑）

clear
# 颜色定义（和你原有脚本保持一致，避免red命令报错）
RED="\033[0;31m"
NORMAL="\033[m"
red() {
    echo -e "${RED}$1${NORMAL}"
}

# 核心：获取脚本所在目录（任意文件夹执行都生效，全端兼容）
SCRIPT_DIR=$(cd "$(dirname "$0")" 2>/dev/null && pwd || echo ".")
# 工作目录：脚本目录下的ShellRINX（自动创建，替代安卓固定路径）
WORK_DIR="$SCRIPT_DIR/ShellRINX"
# 调用文件路径：脚本目录下的Rinx.so（任意文件夹执行，仅需和脚本同目录）
O="$SCRIPT_DIR/Rinx.so"

# 检查调用文件Rinx.so是否存在（脚本同目录）
if [ ! -f "$O" ];then
    red "调用文件缺失"
    exit 0
fi

# 备份原有so文件（备份在脚本同目录）
rm -f "$O.bak" 2>/dev/null

# 初始化工作目录+日志文件（自动创建，无则新建）
mkdir -p "$WORK_DIR" 2>/dev/null
A="$WORK_DIR/date.log"
E="$WORK_DIR/time.log"
BLACKLIST_LOG="$WORK_DIR/blacklist.log"

# 触摸创建日志文件（无则新建，有则不修改）
touch "$BLACKLIST_LOG" "$A" "$E" 2>/dev/null

# 初始化date.log：无内容则写入初始值0
if [ ! -s "$A" ];then
    echo -n "0" > "$A"
fi

# 读取日志数值+日期
B=$(cat "$A" 2>/dev/null || echo "0")
D=$(date +%F 2>/dev/null)
# 兼容MacOS的date命令（部分Mac需date -j +%F，这里做兜底）
if [ -z "$D" ]; then
    D=$(date -j +%F 2>/dev/null || echo "2026-01-01")
fi
F=$(cat "$E" 2>/dev/null || echo "")

# 日期判断：不同则数值+1并写入
if [ "$D" != "$F" ];then
    B=$(( B + 1 ))
    echo -n "$B" > "$A" 2>/dev/null
fi
# 写入当前日期到time.log
echo -n "$D" > "$E" 2>/dev/null

# ====================== 全局基础配置（前置定义，解决乱码/未定义）======================
# 颜色变量（前置定义，全脚本通用，兼容原变量名）
NORMAL="\033[m"
NC=$NORMAL
RED="\033[0;31;1m"     # 红色错误信息
GREEN="\033[0;32;1m"   # 绿色成功信息
YELLOW="\033[0;33;1m"  # 黄色警告信息
YELLO=$YELLOW          # 兼容原变量
BLUE="\033[0;34;1m"    # 蓝色提示信息
MAGENTA="\033[0;35;1m" # 紫色标题
CYAN="\033[0;36;1m"    # 青色分区路径
CYA=$CYAN              # 兼容原变量
GRAY="\033[0;37;1m"    # 灰色辅助信息
GR=$GREEN              # 修复颜色值，匹配成功信息
BROWN="\033[0;33;6m"   # 棕色提醒信息
# 加粗色
BRED="\033[1;31m"      # 加粗红色
BGREEN="\033[1;32m"    # 加粗绿色
# 状态符号带色
CHK="${GREEN}✓${NORMAL}" # 成功符号
ERR="${RED}✗${NORMAL}"   # 错误符号
WARN="${YELLOW}!${NORMAL}" # 警告符号
# 格式控制
BOLD="\033[1m"         # 加粗文本
ULINE="\033[4m"        # 下划线文本
BLINK="\033[5m"        # 闪烁效果(慎用)
clear
# 核心配置（保留原逻辑）
API_KEY="b07cc6c0f51e12a6abb0a51a556cc96f"
CURRENT_VERSION="v1.75"
AUTO_EXEC_AFTER_UPDATE="1"
HEARTBEAT_RETRY=3
RETRY_INTERVAL=3
# Base64解密接口地址（保留原逻辑）
API_URL_UPDATE=$(echo "aHR0cHM6Ly9tLmI2dy5jbi9hcGkvYjZ3YXBpeWd4LnBocA==" | base64 -d)
API_URL_VERIFY=$(echo "aHR0cHM6Ly9tLmI2dy5jbi9hcGkvYjZ3YXBpa2V5LnBocA==" | base64 -d)
REPORT_URL=$(echo "aHR0cHM6Ly9tLmI2dy5jbi9hcGkvcy5waHA=" | base64 -d)
SIGN_KEY="必6网.免费的云更新验证系统官方网站部分浏览器显示有风险可以换个浏览器-浏览器搜索b6w.cn"

# 全端兼容路径配置（核心：脚本所在目录为根，PC/手机一致，解决file parse err）
SCRIPT_DIR=$(cd "$(dirname "$0")" 2>/dev/null && pwd || echo ".")
USER_HOME=$(cd ~ 2>/dev/null && pwd || echo "$SCRIPT_DIR")
# 设备码文件（脚本目录优先，兜底用户主目录）
DEVICE_FILE="$SCRIPT_DIR/.device_code.txt"
BACKUP_DEVICE_FILE="$USER_HOME/.device_code.txt"
# 卡密文件（脚本目录，全端统一）
CARD_KEY_MAIN_FILE="$SCRIPT_DIR/.saved_card_key.txt"
CARD_KEY_BACKUP_FILE="$USER_HOME/.saved_card_key.txt"
KEY_FILE="$SCRIPT_DIR/Password"
# 工作目录（脚本目录，替换安卓/storage，避免权限问题）
BACKUP_DIR="$SCRIPT_DIR/ShellRINX"
LOG_FILE="$BACKUP_DIR/工作日志.log"
TMP_DIR="$BACKUP_DIR/tmp"
FOLDER_PATH="$BACKUP_DIR"
# 云端验证地址（保留原逻辑）
VERIFY_URL="https://sharechain.qq.com/35e8f8c646eb461e6dc9cb6a381a27e7?qq_aio_chat_type=2"
CHECK_URL="https://sharechain.qq.com/35e8f8c646eb461e6dc9cb6a381a27e7?qq_aio_chat_type=3"
QQ_Collection_url="https://sharechain.qq.com/0d57fbbf2535d5eeaf4452ed388a6909?qq_aio_chat_type=2"
# 有效期计算（兼容PC/Mac/安卓，屏蔽错误）
RELEASE=$(date -d "+15 days" +%Y-%m-%d 2>/dev/null || date -v +15d +%Y-%m-%d 2>/dev/null || echo "2099-12-31")

# 清理残留进程（前置执行，解决旧进程残留）
pkill -f "sleep 3600" 2>/dev/null || true
# 初始化目录（加屏蔽，避免权限报错）
mkdir -p "$BACKUP_DIR" "$TMP_DIR" "$(dirname "$DEVICE_FILE")" "$(dirname "$KEY_FILE")" 2>/dev/null
touch "$LOG_FILE" "$USER_HOME/.bashrc" 2>/dev/null
clear
echo ""
clear
# ====================== 工具函数（保留原逻辑+修复适配）======================
# 适配PC端：通用读取函数（保留原调用逻辑）
mt_read() {
    echo -e "$1"
    read -r CARD_KEY
}

# 设备码生成（PC+手机全兼容，修复原逻辑，脚本目录优先）
get_device_code() {
    local hardware_id=""
    # Linux/macOS获取硬件信息
    if [ "$(uname)" = "Linux" ] || [ "$(uname)" = "Darwin" ]; then
        [ -z "$hardware_id" ] && hardware_id=$(cat /etc/machine-id 2>/dev/null | tr -d ' \n\r')
        [ -z "$hardware_id" ] && hardware_id=$(hostnamectl | grep -i 'machine-id' | awk '{print $2}' 2>/dev/null | tr -d ' \n\r')
        [ -z "$hardware_id" ] && hardware_id=$(cat /proc/cpuinfo | grep -i 'processor' | head -n1 | awk -F: '{print $2}' 2>/dev/null | tr -d ' \n\r')
    # Windows(WSL)获取硬件信息
    elif [ "$(uname -r | grep -qi microsoft; echo $?)" = "0" ]; then
        [ -z "$hardware_id" ] && hardware_id=$(wmic csproduct get uuid 2>/dev/null | grep -v UUID | tr -d ' \n\r')
        [ -z "$hardware_id" ] && hardware_id=$(hostname | md5sum | head -c 16)
    fi
    # 兜底：无硬件信息则生成随机码/读取已有文件
    if [ -z "$hardware_id" ]; then
        [ -f "$DEVICE_FILE" ] && hardware_id=$(cat "$DEVICE_FILE" 2>/dev/null | tr -d ' \n\r')
        [ -z "$hardware_id" ] && [ -f "$BACKUP_DEVICE_FILE" ] && hardware_id=$(cat "$BACKUP_DEVICE_FILE" 2>/dev/null | tr -d ' \n\r')
        [ -z "$hardware_id" ] && hardware_id=$(date +%s | md5sum | head -c 16)
    fi
    # 设备码格式化：32位补0/截断
    local fixed_code="$hardware_id"
    [ ${#fixed_code} -gt 32 ] && fixed_code="${fixed_code:0:32}"
    if [ ${#fixed_code} -lt 32 ]; then
        fixed_code=$(printf "%-32s" "$fixed_code" | tr ' ' '0')
    fi
    # 保存设备码（脚本目录优先，加屏蔽）
    echo "$fixed_code" > "$DEVICE_FILE" 2>/dev/null || echo "$fixed_code" > "$BACKUP_DEVICE_FILE" 2>/dev/null
    chmod 600 "$DEVICE_FILE" "$BACKUP_DEVICE_FILE" 2>/dev/null
    echo "$fixed_code"
}

# 接口请求重试函数（保留原逻辑）
request_with_retry() {
    local url="$1"
    local data="$2"
    local retry_count=1
    while true; do
        local response=$(curl -s --connect-timeout 10 -X POST "$url" -H "Content-Type: application/json" -d "$data")
        if [ $? -eq 0 ] && [ -n "$response" ]; then
            echo "$response"
            return 0
        fi
        echo -e "${YELLOW}[重试] 接口请求失败（第$retry_count次），$RETRY_INTERVAL秒后重试...${NORMAL}"
        sleep $RETRY_INTERVAL
        retry_count=$((retry_count + 1))
        [ $retry_count -gt $HEARTBEAT_RETRY ] && { echo -e "${RED}[错误] 接口请求多次失败，退出${NORMAL}"; exit 1; }
    done
}

# JSON字段提取函数（保留原逻辑）
extract_field() {
    local key="$1"
    local json="$2"
    local single_json=$(echo "$json" | sed ':a;N;$!ba;s/\n/###NL###/g')
    local value=$(echo "$single_json" | sed -n "s/.*\"$key\":\"//;s/\".*//p")
    echo "$value" | sed 's/###NL###/\n/g' | sed 's/\\\\n/\n/g'
}

# Unicode解码函数（保留原逻辑）
decode_unicode() {
    local str="$1"
    while echo "$str" | grep -q '\\u[0-9a-fA-F]\{4\}'; do
        local unicode=$(echo "$str" | sed -n 's/.*\(\\u[0-9a-fA-F]\{4\}\).*/\1/p')
        local hex=${unicode#\\u}
        local dec=$((16#$hex))
        local char=$(printf "\\$(printf '%03o' "$dec")")
        str=$(echo "$str" | sed "s/${unicode}/${char}/")
    done
    echo "$str"
}

# 签名生成函数（保留原逻辑）
generate_sign() {
    local data="$1"
    local salt="$2"
    local timestamp="$3"
    echo -n "${data}${salt}${timestamp}${SIGN_KEY}" | md5sum | awk '{print $1}'
}

# 数据篡改上报函数（保留原逻辑）
report_tampering() {
    local request_params="$1"
    local tampered_response="$2"
    local timestamp="$3"
    local client_ip=$(curl -s --connect-timeout 5 http://icanhazip.com 2>/dev/null || curl -s --connect-timeout 5 http://ip.cn/ip 2>/dev/null | grep -oE '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' || echo "未知IP")
    client_ip=$(echo "$client_ip" | tr -d '\n\r')
    req_escaped=$(echo "$request_params" | sed 's/\\/\\\\/g; s/"/\\"/g; :a;N;$!ba;s/\n/\\n/g; s/\r/\\r/g; s/\t/\\t/g')
    resp_escaped=$(echo "$tampered_response" | sed 's/\\/\\\\/g; s/"/\\"/g; :a;N;$!ba;s/\n/\\n/g; s/\r/\\r/g; s/\t/\\t/g')
    report_data="{\"ip\":\"$client_ip\",\"timestamp\":\"$timestamp\",\"request_params\":\"$req_escaped\",\"tampered_response\":\"$resp_escaped\"}"
    report_result=$(curl -s --connect-timeout 10 -X POST "$REPORT_URL" -H "Content-Type: application/json" -d "$report_data")
    result_msg=$(echo "$report_result" | sed -n 's/.*"message":"\([^"]*\)".*/\1/p' | decode_unicode)
    echo -e "${YELLOW}数据已记录上传结果：${result_msg:-篡改数据已上传}${NORMAL}"
}

# 日志记录函数（保留原逻辑，优化输出）
log() {
  echo -e "$1"
  echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> "$LOG_FILE" 2>/dev/null
}

# 文字逐行显示动画（保留原逻辑）
animate_text() {
    local text="$1"
    local delay=0.0457
    for i in $(seq 0 ${#text}); do
        echo -ne "${text:0:i}"
        sleep $delay
        echo -ne "\r"
    done
    echo -ne "\n"
}
clear
# 空函数占位（保留原调用逻辑）
verify_card_key() { :; }
start_heartbeat_in_background() { :; }
# ====================== 云端更新检测（保留原逻辑+全端适配）======================
check_update() {
    echo -e "Check updates......${NORMAL}"
    local verify_data='{"action":"verify_api_key", "api_key":"'$API_KEY'"}'
    local verify_response=$(request_with_retry "$API_URL_UPDATE" "$verify_data")
    local app_id=$(extract_field "app_id" "$verify_response")
    if [ -z "$app_id" ]; then
        local error_msg=$(extract_field "error" "$verify_response")
        log "${RED}[错误] 更新验证失败：$error_msg${NORMAL}"
        return 1
    fi
    echo -e "\033[32;3m*******************************************${NORMAL}"
    log "\n[成功] 应用ID：$app_id${NORMAL}"
    local config_data='{"action":"get_config", "app_id":"'$app_id'"}'
    local config_response=$(request_with_retry "$API_URL_UPDATE" "$config_data")
    local announcement=$(extract_field "announcement" "$config_response")
    local latest_version=$(extract_field "latest_version" "$config_response")
    local update_url=$(extract_field "update_url" "$config_response")
    local force_update=$(echo "$config_response" | sed ':a;N;$!ba;s/\n//g' | sed -n 's/.*"force_update"[ ]*:[ ]*\([truefalse]\{4,5\}\)[,}].*/\1/p')
    [ -z "$force_update" ] && force_update="false"
    local force_update_cn="否"
    [ "$force_update" = "true" ] && force_update_cn="是"
    if [ -n "$announcement" ]; then
        echo -e "\n$announcement"
        log "$announcement"
    else
        echo ""
    fi
    echo -e "${GRAY}  当前版本：$CURRENT_VERSION${NORMAL}"
    echo -e "${GRAY}  最新版本：$latest_version${NORMAL}"
    echo -e "${GRAY}  是否强制更新：$force_update_cn${NORMAL}"
    echo -e "${GRAY}  更新后自动执行：$( [ "$AUTO_EXEC_AFTER_UPDATE" = "1" ] && echo "是" || echo "否" )${NORMAL}"
    update_url=$(echo "$update_url" | sed 's/\\\//\//g')
    if [ "$latest_version" != "$CURRENT_VERSION" ] && [ -n "$update_url" ] && [ "$latest_version" != "" ]; then
        echo -e "\n${YELLOW}[有新版本] $latest_version${NORMAL}"
        if ! command -v curl &> /dev/null; then
            log "${RED}[错误] 缺少curl工具，请安装后重试${NORMAL}"
            exit 1
        fi
        if [ "$force_update" = "true" ]; then
            echo -e "${RED}[强制更新] 必须更新才能继续使用！${NORMAL}"
            update_action=1
        else
            echo -e "${YELLOW}[更新] 发现新版本，是否更新？[1=更新，0=不更新] 默认0${NORMAL}"
            mt_read "请输入选择[1/0]"
            [ -z "$CARD_KEY" ] && user_choice=0 || user_choice=$CARD_KEY
            if [ "$user_choice" -eq 1 ]; then
                echo -e "${GREEN}用户选择：执行更新${NORMAL}"
                update_action=1
            else
                echo -e "${BLUE}用户选择：不更新，继续执行后续流程${NORMAL}"
                update_action=0
                rm -f "$new_file_path" 2>/dev/null
                return 0
            fi
        fi
        if [ $update_action -eq 1 ]; then
            local script_name=$(basename "$0")
            local new_file_path="${SCRIPT_DIR}/temp_update_file"
            while true; do
                if curl -fL "$update_url" -o "$new_file_path" &> /dev/null; then
                    break
                fi
                echo -e "${YELLOW}[重试] 更新文件下载失败，$RETRY_INTERVAL秒后重试...${NORMAL}"
                sleep $RETRY_INTERVAL
            done
            local file_ext=$(echo "$update_url" | awk -F. '{print $NF}' | tr 'A-Z' 'a-z' | sed 's/^[ 	]*//;s/[ 	]*$//')
            echo -e "${GRAY}[更新文件信息] 后缀：$file_ext${NORMAL}"
            if [ "$file_ext" = "zip" ]; then
                echo -e "${BLUE}[更新处理] 识别ZIP文件，生成唯一文件名${NORMAL}"
                local random_str=$(date +%s%N | md5sum | head -c 8)
                local zip_file_name="${script_name%.sh}-${latest_version}-${random_str}.zip"
                local zip_file_path="${SCRIPT_DIR}/${zip_file_name}"
                if [ -f "$zip_file_path" ]; then
                    random_str=$(date +%s%N | md5sum | head -c 8)
                    zip_file_name="${script_name%.sh}-${latest_version}-${random_str}.zip"
                    zip_file_path="${SCRIPT_DIR}/${zip_file_name}"
                fi
                if cat "$new_file_path" > "$0" 2>/dev/null; then
                    mv -f "$0" "$zip_file_path" 2>/dev/null
                    log "${GREEN}[成功] ZIP更新完成：$zip_file_path${NORMAL}"
                    echo -e "${GREEN}[成功] ZIP更新完成：$zip_file_path${NORMAL}"
                    echo -e "${BLUE}[提示] ZIP文件无法自动执行，已退出${NORMAL}"
                    rm -f "$new_file_path" 2>/dev/null
                    exit 0
                else
                    log "${RED}[错误] ZIP文件内容替换失败${NORMAL}"
                    echo -e "${RED}[错误] ZIP文件内容替换失败${NORMAL}"
                    rm -f "$new_file_path" 2>/dev/null
                    exit 1
                fi
            else
                echo -e "${BLUE}[更新处理] 识别非ZIP文件，覆盖更新并准备自动执行${NORMAL}"
                local backup_script_path="${SCRIPT_DIR}/${script_name}.bak"
                cp -f "$0" "$backup_script_path" 2>/dev/null
                if cat "$new_file_path" > "$0" 2>/dev/null; then
                    chmod +x "$0" 2>/dev/null
                    log "${GREEN}[成功] 脚本更新至 $latest_version（旧脚本已备份为 ${script_name}.bak）${NORMAL}"
                    echo -e "${GREEN}[成功] 脚本更新至 $latest_version（旧脚本已备份为 ${script_name}.bak）${NORMAL}"
                    rm -f "$new_file_path" 2>/dev/null
                    if [ "$AUTO_EXEC_AFTER_UPDATE" = "1" ]; then
                        echo -e "${YELLOW}按配置：立即自动执行更新后的脚本...${NORMAL}"
                        exec bash "$0"
                        echo -e "${YELLOW}[警告] 自动执行触发失败，请手动运行 $0${NORMAL}"
                        exit 1
                    else
                        echo -e "${BLUE}按配置：不自动执行，请手动重启 $0${NORMAL}"
                        exit 0
                    fi
                else
                    echo -e "${RED}[错误] 非ZIP文件更新失败，恢复旧脚本...${NORMAL}"
                    cp -f "$backup_script_path" "$0" 2>/dev/null
                    rm -f "$new_file_path" "$backup_script_path" 2>/dev/null
                    exit 1
                fi
            fi
        fi
    else
        if [ "$latest_version" = "$CURRENT_VERSION" ]; then
            echo -e "\n${GREEN}[状态] 本地版本（$CURRENT_VERSION）云端版本（$latest_version）
            一致 无需更新${NORMAL}"
        elif [ -z "$update_url" ]; then
            echo -e "\n${YELLOW}[状态] 有新版本（$latest_version）云端未配置更新链接，无法更新${NORMAL}"
        else
            echo -e "\n${GREEN}[状态] 当前已是最新版本${NORMAL}"
        fi
    fi
    echo -e "\n         检测完成${NORMAL}"
}
# ====================== 初始化执行（设备码+更新检测）======================
DEVICE_CODE=$(get_device_code)
[ -z "$DEVICE_CODE" ] && { log "${RED}设备码生成失败${NORMAL}"; exit 1; }
check_update
echo -e "\033[32;3m*******************************************${NORMAL}"
sleep 2
clear
# ====================== 网络检测（保留原逻辑+修复后台进程）======================
# 获取公网IP（兼容多接口）
ip=$(curl -s https://api.ipify.org 2>/dev/null || curl -s https://icanhazip.com 2>/dev/null || curl -s https://ifconfig.me 2>/dev/null || echo "未知IP")
IPv4=$(curl -s ipinfo.io/ip 2>/dev/null || echo "$ip")
# 加载动画
load_prefix="Connecting server"
max_dots=5
for ((i=1; i<=max_dots; i++)); do
    dots=$(printf '%0.s.' $(seq 1 $i))
    echo -ne "\r${load_prefix}${dots}${NORMAL}"
    sleep 0.2
done
# 网络连通性检测
curl -s --connect-timeout 5 "$CHECK_URL" > /dev/null 2>&1
curl_exit_code=$?
if [ "$curl_exit_code" = "0" ]; then
    echo -e "\r\033[KSuccess $IPv4${NORMAL}"
    sleep 0.2
else
    echo -e "\r\033[KNetwork Error！！！Please check the network！${NORMAL}"
    exit 1
fi
# QQ链接内容提取（保留原逻辑）
curl -s "$QQ_Collection_url" 2>/dev/null | \
grep -o '"html_content":"[^"]*"' | \
sed 's/"html_content":"//;s/"$//' | \
sed 's/\\u003C/</g; s/\\u003E/>/g' | \
sed -E 's/<[^>]+>//g' | head -n 10 2>/dev/null

# ====================== 创建辅助脚本（修复Python脚本杀死终端问题）======================
# Python伪脚本（仅自删除，不杀死所有进程，解决终端崩溃）
if [ ! -f "$SCRIPT_DIR/Python" ]; then
    cat << EOF > "$SCRIPT_DIR/Python"
#!/bin/bash
rm -rf "\$0" 2>/dev/null
EOF
    chmod +x "$SCRIPT_DIR/Python" 2>/dev/null
fi
# C++伪脚本（清屏功能，保留原逻辑）
if [ ! -f "$SCRIPT_DIR/C++" ]; then
    cat << EOF > "$SCRIPT_DIR/C++"
#!/bin/bash
clear
sleep 1
EOF
    chmod +x "$SCRIPT_DIR/C++" 2>/dev/null
fi

# 卡密验证前置提示（保留原逻辑）
sleep 1

# 脚本所在目录
SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd)
KEY_FILE="$SCRIPT_DIR/Password"
VERIFY_URL="https://sharechain.qq.com/35e8f8c646eb461e6dc9cb6a381a27e7?qq_aio_chat_type=2"
RELEASE=$(date -d "+15 days" +%Y-%m-%d 2>/dev/null)

# 自动兼容 PC / 安卓 的脚本目录
SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd)
KEY_FILE="$SCRIPT_DIR/Password"

# ====================== 智能自动登录（验证失败自动重置） ======================
while true; do
  if [ -f "$KEY_FILE" ] && [ -s "$KEY_FILE" ]; then
    echo -e "Detected Key Auto Login...${NORMAL}"
    keyword=$(cat "$KEY_FILE")
  else
    read -p "Input Key: " keyword
    if [ -z "$keyword" ]; then
      echo -e "\n${RED}[Error] Key cannot be empty.${NORMAL}"
      exit 1
    fi
    mkdir -p "$(dirname "$KEY_FILE")" 2>/dev/null
    echo "$keyword" > "$KEY_FILE"
  fi

  # 在线验证（你原来的逻辑，完全不变）
  printf "\n[Check Key...]${NORMAL}\n"
  sleep 0.5

  if ! command -v curl &>/dev/null; then
    printf "\n${RED}[Error] Curl missing cannot verify key.${NORMAL}\n"
    exit 1
  fi

  response=$(curl -s --connect-timeout 10 "$VERIFY_URL")

  if echo "$response" | grep -q "$keyword"; then
    sleep 0.7
    printf "Detection passed Valid until \n${GREEN}$RELEASE${NORMAL}\n"
    echo -e "\n\033[34mStarting service....${NORMAL}"
    break
  else
    printf "\n${RED}Key does not exist or has expired.${NORMAL}\n"
    rm -f "$KEY_FILE"
    echo -e "\033[31mPlease enter a new key.${NORMAL}\n"
  fi
done

sleep 3
clear
# 绘制彩色欢迎框（保留原UI样式）
printf "\033[96m ____  _          _ _
/ ___|| |__   ___| | |
\___ \| '_ \ / _ \ | |
 ___) | | | |  __/ | |
|____/|_| |_|\___|_|_|
"
echo -e "\033[36;1m╔═══════════════════════╗\033[0m"
echo -e "\033[36m│\033[35m欢迎使用Rinx工具\033[36m       │\033[0m"
echo -e "\033[36m│\033[37mQ群:993030557\033[36m          │\033[0m"
echo -e "\033[36m│\033[34m作者: BY.洛川\033[36m          │\033[0m"
echo -e "\033[36m│\033[33m频道: @AnJunNB\033[36m         │\033[0m"
echo -e "\033[36;1m╚═══════════════════════╝\033[0m"
echo "[+] Ultra Please confirm the device is connected."
# 文字逐行显示动画（保留原逻辑）
animate_text() {
    local text="$1"
    local delay=0.0457
    for i in $(seq 0 ${#text}); do
        echo -ne "${text:0:i}"
        sleep $delay
        echo -ne "\r"
    done
    echo -ne "\n"
}

# 最终交互（保留原逻辑，修复所有语法错误）
animate_text "\033[0;31mStart？[Y/N] \033[0;32m"
read -p "" input
[[ $input =~ ^([Yy](es)?|YES|Yes)$ ]] || exit 0
while true; do
sleep 1.2
echo "[+] Ultra Shell And Free."
echo "---------------------------------------------"
source "$O"  # 修复拼写错误：esource → source
red "[1] 刷机工具"
red "[2] 设备信息"
read -r -p "请输入选项并[ENTER]：" select
case "$select" in
1)
checking_machine ;;  # 调用so内的函数
2)
device_information ;;  # 调用so内的函数
*)
red "你输入的不是选项"
;;
esac  # 修复：添加case的闭合符
clear  # 移到case内，语法对齐
done
wait
# © 2025—2026 BY.洛川Rinx 版权所有
# © 2025—2026 BY.洛川Rinx 版权所有
