首页
老李抖音
我能做的
记录
老李是谁
推荐
老李网盘
搜索
1
x99鸡血BIOS教程(附工具和华南X99-QD3鸡血BIOS下载)
5,394 阅读
2
主板BIOS开启CSM方法(华硕、微星、技嘉)
4,054 阅读
3
湖北电信/联通/移动DNS服务器地址大全
3,699 阅读
4
【下载】猫影视PC版 V1.1.3
2,923 阅读
5
关于PUBG游戏提示未授权硬件的常见解决办法
2,786 阅读
老李原创
技术笔记
系统固件包
经营心得
虚拟化
软件工具
无盘万能包
安卓固件
登录
搜索
标签搜索
记录
无盘
问题解决
虚拟化
源码
心得
ARM
游戏
开源项目
硬件
linux
网管老李 VX:lizhi0710
累计撰写
266
篇文章
累计收到
0
条评论
首页
栏目
老李原创
技术笔记
系统固件包
经营心得
虚拟化
软件工具
无盘万能包
安卓固件
页面
老李抖音
我能做的
记录
老李是谁
推荐
老李网盘
搜索到
22
篇与
» 老李原创
的结果
2026-06-21
网页版本DMP在线分析代码分享
``
2026年06月21日
77 阅读
0 评论
2 点赞
2026-06-01
m3u8局域网视频缓存系统AI项目文档
HCData 视频缓存管理系统 - 项目开发文档一、项目概述1.1 项目名称HCData — 局域网视频缓存管理与点播系统1.2 项目定位HCData 是一个运行在 Windows 平台上的轻量级 Web 服务端系统,用于管理和缓存网络视频资源(主要是 m3u8/HLS 流)。系统通过 Web 管理后台提供可视化操作界面,支持视频下载、缓存管理、在线播放、磁盘管理等功能,并可通过局域网供多设备访问。1.3 核心场景将网络 m3u8 视频流下载并缓存为本地 MP4 文件通过局域网内任意设备浏览器访问并播放已缓存视频首次播放未缓存视频时,自动触发后台下载,下次访问可"秒播"管理下载任务队列,监控下载进度和系统状态1.4 项目特点零构建部署:无需 webpack/vite 等前端构建工具,所有 HTML/CSS/JS 内联在单文件中单文件后端:整个服务端逻辑集中在 server.js(1463 行),无路由拆分文件嵌入式数据库:SQLite 单文件数据库,无需安装 MySQL/Redis 等服务局域网优先:自动检测局域网 IP,视频文件通过局域网 URL 直接访问智能缓存:首次播放走网络流,后台自动缓存,二次播放秒播实时推送:基于 SSE 的下载进度实时推送,无需轮询二、技术架构2.1 技术栈层级技术说明后端运行时Node.jsJavaScript 运行时环境Web 框架Express 5.2.1HTTP 服务与 RESTful API数据库SQLite3 (better-sqlite3 12.10.0)本地嵌入式数据库下载引擎N_m3u8DL-RE (20251027)高性能 m3u8 下载工具视频处理FFmpeg视频合并/转码(N_m3u8DL-RE 依赖)前端播放器DPlayer + MuiPlayer + hls.js视频播放(HLS/MP4)实时通信SSE (Server-Sent Events)服务端向客户端实时推送下载进度构建方式无构建纯原生 HTML/CSS/JS,无前端打包工具2.2 系统架构图┌─────────────────────────────────────────────────────────┐ │ 浏览器(客户端) │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌─────────┐ │ │ │ 当前任务 │ │ 已缓存 │ │ 日志 │ │ 设置 │ │ │ └──────────┘ └──────────┘ └──────────┘ └─────────┘ │ │ SSE 实时事件流 / RESTful API 调用 │ └──────────────────────┬──────────────────────────────────┘ │ HTTP ┌──────────────────────┴──────────────────────────────────┐ │ Express 服务端 (port 3000) │ │ ┌────────────────────────────────────────────────────┐ │ │ │ RESTful API 层 │ │ │ │ /api/tasks /api/cached /api/settings /api/logs │ │ │ │ /api/download-video /api/check-video /api/video │ │ │ │ /api/stats /api/disk-space /api/drives │ │ │ └────────────────────────────────────────────────────┘ │ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ │ │ SSE 推送模块 │ │ 下载队列引擎 │ │ 文件管理模块 │ │ │ └──────────────┘ └──────────────┘ └──────────────┘ │ │ ┌────────────────────────────────────────────────────┐ │ │ │ SQLite3 数据库 (hcdata.db) │ │ │ │ config | download_tasks | video_downloads | logs │ │ │ └────────────────────────────────────────────────────┘ │ └──────────────────────┬──────────────────────────────────┘ │ 调用外部工具 ┌────────────┴────────────┐ │ N_m3u8DL-RE.exe │ │ FFmpeg (合并/转码) │ └─────────────────────────┘2.3 server.js 模块拆解server.js 是整个系统的核心文件(1463 行),内部按功能划分为以下逻辑模块:模块行号范围职责SSE 推送模块11-39管理 SSE 连接池,实现 broadcastSSE() 广播函数数据目录初始化41-45确保 data/ 目录存在数据库初始化47-103创建 4 张数据表(config/download_tasks/video_downloads/system_logs)日志工具106-117writeLog() 函数,自动保留最近 500 条数据库迁移119-125为旧版 video_downloads 表补充 play_count 字段静态资源 & 中间件127-128express.json() + express.static('public')系统信息 API130-202获取局域网 IP、磁盘空间、盘符列表配置管理 API204-334通用 Key-Value 配置读写(单个/批量/全部)日志管理 API336-375日志列表查询(分页)和清空下载任务 API377-455任务列表、添加、更新进度缓存管理 API457-552单个删除、一键清空已缓存视频视频播放核心554-635存储路径管理、文件名生成、缓存检查下载队列引擎637-699临时目录、队列管理、并发控制、processQueue()启动恢复701-734initDownloadQueue() 服务启动时恢复未完成任务下载执行引擎736-1192startDownload() 核心函数:spawn 进程、进度解析、文件转移、超时处理下载入口 API1194-1242POST /api/download-video 去重、入队状态查询 API1244-1318下载状态、已缓存列表(分页+文件大小)视频流服务1320-1430播放地址生成、Range 请求支持、CORS 头服务启动 & 优雅关闭1432-1463监听端口、初始化队列、SIGINT/SIGTERM/SIGBREAK 处理2.4 目录结构e:\071058s-260801\ ├── hcdata-web/ # 项目主目录 │ ├── server.js # 后端服务主文件(核心,1463行) │ ├── check-db.js # 数据库检查工具(辅助脚本) │ ├── package.json # Node.js 依赖配置 │ ├── data/ # 数据目录(运行时生成) │ │ └── hcdata.db # SQLite 数据库文件 │ ├── public/ # 前端静态资源 │ │ ├── index.html # 管理后台主页面(1346行) │ │ ├── player.html # 视频播放页面(256行) │ │ └── assets/ # 第三方前端库 │ │ ├── DPlayer.min.js # DPlayer 播放器 │ │ ├── DPlayer.min.css │ │ ├── mui-player.min.js # MuiPlayer 播放器 │ │ ├── mui-player.min.css │ │ ├── mui-player-desktop-plugin.min.js │ │ └── hls.min.js # HLS 流媒体解析库 │ └── node_modules/ # Node.js 依赖包 ├── tools/ # 外部工具目录 │ ├── N_m3u8DL-RE.exe # m3u8 下载器 │ ├── N_m3u8DL-RE参数说明.txt # 下载器参数文档 │ ├── ffmpeg.exe # 视频处理工具 │ ├── ffplay.exe # 视频播放工具 │ ├── ffprobe.exe # 视频探测工具 │ ├── avcodec-62.dll # FFmpeg 依赖库 │ ├── avdevice-62.dll │ ├── avfilter-11.dll │ ├── avformat-62.dll │ ├── avutil-60.dll │ ├── swresample-6.dll │ └── swscale-9.dll ├── datatmp/tmp/ # 下载临时文件目录(运行时使用) ├── 启动服务端.bat # Windows 一键启动脚本 └── 更新日志.md # 版本更新记录三、数据库设计3.1 数据库文件路径: hcdata-web/data/hcdata.db引擎: SQLite3(通过 better-sqlite3 同步 API 操作)3.2 数据表结构3.2.1 config — 通用配置表存储系统所有可配置项,采用 Key-Value 模式。字段类型说明idINTEGER (PK, AUTO)主键keyTEXT (UNIQUE, NOT NULL)配置键名valueTEXT (NOT NULL)配置值created_atDATETIME创建时间updated_atDATETIME更新时间已知配置项:key说明默认值storage_path视频文件存储根路径未设置(需用户在设置页选择盘符)max_concurrent最大并发下载任务数4thread_count单任务下载线程数4nm_user_agentN_m3u8DL-RE 请求 User-Agent空3.2.2 download_tasks — 下载任务表记录当前正在进行的下载任务(完成后删除)。字段类型说明idINTEGER (PK, AUTO)主键nameTEXT (NOT NULL)任务名称urlTEXT (NOT NULL)视频 URLstatusTEXT状态:waiting / downloading / merging / errorprogressINTEGER进度百分比 (0-100)speedTEXT下载速度显示文本sizeTEXT文件总大小downloadedTEXT已下载大小created_atDATETIME创建时间设计说明:此表仅保存"进行中"的任务,下载完成后记录会被删除,转移到 video_downloads 表。3.2.3 video_downloads — 视频下载记录表保存所有视频的下载记录(包括历史)。字段类型说明idINTEGER (PK, AUTO)主键urlTEXT (UNIQUE, NOT NULL)视频 URL(唯一约束,用于去重)nameTEXT视频名称local_pathTEXT本地文件绝对路径statusTEXT状态:pending / downloading / completed / errorprogressINTEGER进度百分比messageTEXT状态消息formatTEXT输出格式(默认 mp4)play_countINTEGER播放次数(用于统计)created_atDATETIME创建时间updated_atDATETIME更新时间3.2.4 system_logs — 系统日志表字段类型说明idINTEGER (PK, AUTO)主键levelTEXT日志级别:info / warn / errormessageTEXT (NOT NULL)日志内容created_atDATETIME创建时间自动清理:日志超过 500 条时自动删除最早的记录。四、API 接口文档4.1 系统信息类GET /api/local-ip获取服务器局域网 IP 地址。响应:{ "success": true, "ip": "192.168.1.100" }GET /api/disk-space获取存储盘符的磁盘空间信息。响应:{ "success": true, "drive": "D:", "freeSpace": "120.50 GB", "totalSize": "500.00 GB", "usedSpace": "379.50 GB", "usedPercent": "75.9" }GET /api/drives获取电脑所有可用盘符列表。响应:{ "success": true, "drives": ["C:", "D:", "E:"] }GET /api/stats获取仪表盘统计数据(已完成数、点播总次数、命中率)。响应:{ "success": true, "stats": { "completed": 42, "playCountTotal": 128, "hitRate": "304.8" } }4.2 配置管理类GET /api/config获取存储路径配置。GET /api/settings获取所有配置项。GET /api/settings/:key获取指定配置项。POST /api/settings/:key保存/更新指定配置项。请求体:{ "value": "4" }POST /api/settings批量保存配置项。请求体:{ "max_concurrent": "4", "thread_count": "8" }POST /api/save-drive设置存储盘符并创建 hcdata 文件夹。请求体:{ "drive": "D:" }4.3 下载任务类GET /api/tasks获取当前进行中的下载任务列表(状态为 waiting/downloading/merging)。POST /api/tasks添加下载任务。请求体:{ "name": "视频名称", "url": "https://example.com/video.m3u8", "size": "500MB" }PUT /api/tasks/:id更新下载任务进度。POST /api/download-video启动视频下载(核心接口)。自动去重,加入下载队列。请求体:{ "url": "https://example.com/video.m3u8", "name": "视频名称" }响应:{ "success": true, "message": "下载任务已添加到队列", "taskId": 5 }GET /api/download-status?url=xxx查询指定 URL 的下载状态。GET /api/check-video?url=xxx检查本地是否已有指定 URL 的视频缓存。响应(已缓存):{ "success": true, "exists": true, "format": "mp4", "path": "D:\\hcdata\\abc123\\143025.mp4", "relativePath": "abc123/143025.mp4" }4.4 缓存管理类GET /api/cached?page=1&limit=99获取已缓存视频列表(分页)。DELETE /api/cached/:id删除指定缓存记录及其本地文件。DELETE /api/cached一键清空所有已缓存视频。4.5 视频播放类GET /api/video?url=xxx获取视频播放地址(返回局域网可访问的 URL),同时增加播放计数。GET /hcdata/*filepath视频文件静态服务路由,支持 HTTP Range 请求(断点续播/拖拽进度条)。4.6 日志管理类GET /api/logs?page=1&limit=100获取系统日志(分页,按时间倒序)。DELETE /api/logs清空所有日志。4.7 SSE 实时推送GET /api/eventsSSE 事件流端点,推送以下事件:事件名触发时机数据connected客户端连接成功{"status":"ok"}task-update下载进度更新{taskId, status, progress, speed, ...}task-completed下载任务完成{taskId, url, localPath}五、核心业务流程5.1 视频下载流程用户提交URL │ ▼ 检查去重(download_tasks + video_downloads) │ 已存在 → 返回"已在队列"或"已下载" │ 不存在 ↓ ▼ 插入 download_tasks 表(status=waiting) │ ▼ 加入内存下载队列 downloadQueue │ ▼ processQueue() 检查并发数 │ 未达上限 → 立即开始 startDownload() │ 已达上限 → 等待队列 ▼ 调用 N_m3u8DL-RE.exe(spawn 子进程) │ 参数:URL、保存目录、线程数、UA 等 │ ▼ 实时解析 stdout/stderr 输出 │ 提取进度百分比、速度、TS块号 │ 更新 download_tasks 表 │ SSE 推送 task-update 事件 │ ▼ 进程退出(exit code 0 = 成功) │ ▼ 在临时目录递归查找视频文件 │ ▼ safeMoveFile() 转移到最终存储路径 │ 路径格式:{storagePath}/{URL的MD5}/{时分秒}.mp4 │ ▼ 更新 video_downloads 表(status=completed) 删除 download_tasks 记录 SSE 推送 task-completed 事件 │ ▼ 延迟 8 秒后清理临时目录5.2 视频播放流程用户点击"播放"按钮 │ ▼ 打开 player.html?url={encodedURL} │ ▼ 调用 /api/check-video 检查本地缓存 │ ├── 已缓存(MP4)──→ "秒播模式" │ │ │ ▼ │ 调用 /api/video 获取局域网播放URL │ │ │ ▼ │ 使用 MuiPlayer 播放本地 MP4 │ (播放次数 +1) │ └── 未缓存 ──→ "后台加速中..." │ ▼ 使用 DPlayer + hls.js 直接播放 m3u8 流 │ ▼ 同时调用 /api/download-video 提交后台下载 (下次访问即可秒播)5.3 下载队列管理 ┌─────────────────────┐ │ downloadQueue[] │ ← 新任务入队 └─────────┬───────────┘ │ shift() ▼ ┌─────────────────────────┐ │ activeDownloads 计数器 │ │ 上限 = max_concurrent │ └─────────┬───────────────┘ │ ┌──────────────┼──────────────┐ ▼ ▼ ▼ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ 任务 A │ │ 任务 B │ │ 任务 C │ ... 最多 N 个并发 │ 线程: T │ │ 线程: T │ │ 线程: T │ └─────────┘ └─────────┘ └─────────┘ │ │ │ ▼ ▼ ▼ 完成后 activeDownloads-- 调用 processQueue() 取下一个5.4 文件存储策略存储根路径(用户设置) D:\hcdata\ │ ├── {MD5_hash_1}\ # 每个URL对应一个哈希目录 │ ├── 143025.mp4 # 文件名 = 下载时间(时分秒) │ └── 151200.mp4 │ ├── {MD5_hash_2}\ │ └── 092530.mp4 │ └── ... 临时下载目录: datatmp\tmp\ ├── {MD5_hash}\ # N_m3u8DL-RE 下载时的临时目录 │ └── {MD5_hash}.mp4 # 下载完成后的临时文件 └── tmp\ # 分片临时目录 └── ... # 下载完成后延迟 8 秒清理关键设计:URL 通过 MD5 哈希生成唯一目录名,避免文件名冲突文件名为下载时间(HHmmss 格式),同一 URL 多次下载不会覆盖跨盘符文件移动使用 safeMoveFile() 兼容 EXDEV 错误(先复制后删除)临时文件延迟清理,避免影响其他正在进行的任务5.5 服务启动流程服务启动时按以下顺序初始化:1. 创建 Express 应用,设置端口 3000 2. 初始化 SSE 客户端集合 (sseClients = new Set()) 3. 创建 data/ 目录(如不存在) 4. 打开 SQLite 数据库 (hcdata.db) 5. 执行 CREATE TABLE IF NOT EXISTS 创建 4 张表 6. 执行数据库迁移(为旧表添加 play_count 字段) 7. 注册中间件(JSON 解析、静态资源服务) 8. 注册所有 API 路由 9. 调用 app.listen() 开始监听 10. 写入启动日志 11. 调用 initDownloadQueue() 恢复未完成任务initDownloadQueue() 恢复逻辑:查询 download_tasks 表中状态为 waiting 或 downloading 的所有记录将这些任务的状态重置为 waiting,进度归零依次加入内存队列 downloadQueue[]调用 processQueue() 开始处理设计意图:服务异常退出后重启,未完成的下载任务不会丢失,会自动重新排队。5.6 优雅关闭流程收到 SIGINT / SIGTERM / SIGBREAK 信号 │ ▼ gracefulShutdown(signal) │ ├── 打印关闭提示 ├── 关闭数据库连接 (db.close()) └── process.exit(0)信号处理:SIGINT:Ctrl+C 触发SIGTERM:系统终止信号SIGBREAK:Windows 平台特有,Ctrl+Break 触发注意:当前优雅关闭未等待进行中的下载任务完成,直接退出。进行中的 N_m3u8DL-RE 子进程会随父进程退出而终止。5.7 合并超时处理机制N_m3u8DL-RE 下载完成后需要合并 TS 分片,这一步可能卡住。程序实现了超时兑底:进度 >= 99% │ ▼ 记录 mergeStartTime,启动 30 秒间隔检查器 │ ▼ 每 30 秒检查:Date.now() - mergeStartTime > 5 分钟? │ ├── 未超时 → 继续等待 │ └── 已超时 → │ ▼ 递归查找临时目录中的视频文件 │ ├── 找到文件 → 强制转移到最终路径,标记完成 └── 未找到 → 标记为 error,终止进程超时处理中的文件查找策略:先查 tempSubDir(任务专属临时目录)再查 tempPath(整个临时下载目录)最后查 tempOutputPath(固定预期路径)支持的文件扩展名:.mp4, .mkv, .ts, .flv, .m4s六、核心函数详解6.1 startDownload(task) — 下载执行引擎这是系统最核心的函数,负责从启动下载到文件转移的完整流程。参数:{ url: string, // 视频 m3u8 URL name: string, // 视频名称 taskId: number // download_tasks 表中的 ID }执行步骤:步骤操作说明1计算路径生成 URL 的 MD5 哈希、最终存储路径、临时下载路径2更新任务状态download_tasks.status = 'downloading'3写入视频记录video_downloads 表插入/更新记录4构建命令行参数URL、保存目录、线程数、UA 等5spawn 子进程启动 N_m3u8DL-RE.exe6注册进程映射activeDownloadProcesses.set(taskId, {child, ...})7监听 stdout/stderr实时解析进度8监听 close 事件处理成功/失败9成功时转移文件safeMoveFile() 到最终路径10更新数据库video_downloads.status = 'completed'11清理临时文件延迟 8 秒后清理12推送 SSEtask-completed 事件13触发下一任务activeDownloads--; processQueue()路径计算逻辑:// 最终存储路径 const finalDir = path.join(storagePath, urlHash); // D:\hcdata\{md5}\ const timeStr = formatTime(new Date()); // 如 "143025" const finalPath = path.join(finalDir, timeStr + '.mp4'); // D:\hcdata\{md5}\143025.mp4 // 临时下载路径 const tempSubDir = path.join(tempPath, urlHash); // datatmp\tmp\{md5}\ const tempOutputPath = path.join(tempSubDir, urlHash + '.mp4');6.2 parseProgress(output) — 进度解析函数从 N_m3u8DL-RE 的原始输出中提取结构化进度信息。处理流程:原始输出(含 ANSI 转义码) │ ▼ 去除 ANSI 转义码:output.replace(/\x1B\[[0-9;]*[a-zA-Z]/g, '') 替换 \r 为 \n │ ▼ 正则提取进度百分比:/(\d+\.?\d*)%/ 正则提取 TS 块进度:/(\d+)\/(\d+)\s+\d+\.?\d*%/ 正则提取下载速度:/([\d.]+\s*[KMGT]?Bps)/ │ ▼ 根据进度判断状态: - progress >= 99 → status = 'merging', speed = '合并中...' - progress >= 95 → speed = '即将完成...' - 其他 → status = 'downloading' │ ▼ 更新 download_tasks 表 更新 video_downloads 表 SSE 广播 task-update 事件为什么同时监听 stdout 和 stderr:N_m3u8DL-RE 在某些情况下会将进度信息输出到 stderr 而非 stdout。为确保不丢失进度更新,两个流都调用 parseProgress() 解析。6.3 processQueue() — 队列调度器async function processQueue() { while (activeDownloads < getMaxConcurrent() && downloadQueue.length > 0) { const task = downloadQueue.shift(); // 从队头取出 activeDownloads++; startDownload(task) .catch(err => console.error('下载任务失败:', err)) .finally(() => { activeDownloads--; // 无论成功失败都释放槽位 processQueue(); // 递归检查队列 }); } }关键特性:使用 while 循环一次性填充所有可用槽位getMaxConcurrent() 每次从数据库读取,支持运行时动态调整finally 块确保异常时也能释放槽位并触发下一轮调度递归调用实现链式调度6.4 safeMoveFile(src, dest) — 跨盘符文件移动function safeMoveFile(src, dest) { try { fs.renameSync(src, dest); // 同盘符:直接重命名(零拷贝) return true; } catch (err) { if (err.code === 'EXDEV') { // 跨盘符:EXDEV 错误 fs.copyFileSync(src, dest); // 先复制 fs.unlinkSync(src); // 再删除源 return true; } throw err; // 其他错误向上抛出 } }为什么需要这个函数:临时下载目录在 datatmp\tmp\(通常在 C 盘),而最终存储路径可能在 D/E 等任意盘符。fs.renameSync() 在跨盘符时会抛出 EXDEV 错误,需要回退到复制+删除方案。6.5 getVideoFileName(url) — URL 哈希生成function getVideoFileName(url) { const hash = crypto.createHash('md5').update(url).digest('hex'); return hash; // 32 位十六进制字符串 }用途: 将任意长度的 URL 映射为固定长度的唯一目录名,避免 URL 中的特殊字符导致文件系统问题。七、SSE 实时推送机制7.1 服务端实现const sseClients = new Set(); // 存储所有 SSE 连接的 response 对象 // 客户端连接 app.get('/api/events', (req, res) => { res.writeHead(200, { 'Content-Type': 'text/event-stream', 'Cache-Control': 'no-cache', 'Connection': 'keep-alive', 'X-Accel-Buffering': 'no' // 禁止 Nginx 缓冲 }); res.write('event: connected\ndata: {"status":"ok"}\n\n'); sseClients.add(res); req.on('close', () => sseClients.delete(res)); }); // 广播函数 function broadcastSSE(event, data) { const message = `event: ${event}\ndata: ${JSON.stringify(data)}\n\n`; sseClients.forEach(client => { try { client.write(message); } catch (e) { sseClients.delete(client); } }); }设计要点:使用 Set 存储连接,自动去重写入失败时自动移除断开的连接X-Accel-Buffering: no 防止反向代理缓冲 SSE 数据每个 SSE 消息以 \n\n 结尾(SSE 协议规范)7.2 客户端实现const eventSource = new EventSource('/api/events'); eventSource.addEventListener('connected', () => { console.log('SSE 已连接'); loadTasks(); // 连接成功后立即刷新任务列表 }); eventSource.addEventListener('task-update', (e) => { loadTasks(); // 每次进度更新都刷新任务列表 if (data.status === 'merging' || data.progress >= 99) { loadStats(); // 合并阶段同时刷新统计 } }); eventSource.addEventListener('task-completed', (e) => { loadTasks(); loadStats(); loadCached(); // 刷新已缓存列表 loadDiskSpace(); // 刷新磁盘空间 }); eventSource.onerror = () => { eventSource.close(); setTimeout(() => location.reload(), 3000); // 3 秒后整页刷新重连 };7.3 SSE 事件触发点触发位置事件名触发时机parseProgress()task-update每次解析到进度更新startDownload() 成功task-completed文件转移完成,数据库更新后7.4 备用轮询机制为防止 SSE 失效,前端同时使用定时轮询作为备用:轮询目标间隔说明loadTasks()5 秒任务列表(主刷新渠道)loadDiskSpace()10 秒磁盘空间loadLogs()15 秒系统日志loadCached()60 秒已缓存列表八、安全机制8.1 路径遍历防护视频文件服务路由 /hcdata/*filepath 实现了路径安全检查:app.get('/hcdata/*filepath', (req, res) => { const filePath = decodeURIComponent(req.params.filepath.join('/')); const fullPath = path.join(storagePath, filePath); // 安全检查:确保解析后的文件路径在存储目录内 const resolvedPath = path.resolve(fullPath); const resolvedStorage = path.resolve(storagePath); if (!resolvedPath.startsWith(resolvedStorage)) { return res.status(403).json({ success: false, error: '拒绝访问' }); } // ... });防护原理: 攻击者可能构造 ../../etc/passwd 这样的路径来访问系统文件。通过 path.resolve() 将路径解析为绝对路径后,检查是否以存储根路径开头,防止目录遍历攻击。8.2 XSS 防护前端渲染用户输入(视频名称、URL)时使用 escapeHtml() 函数:function escapeHtml(text) { const div = document.createElement('div'); div.textContent = text; // 浏览器自动转义 HTML 实体 return div.innerHTML; }所有动态内容在插入 DOM 前都经过此函数处理,防止跨站脚本攻击。8.3 输入验证所有 API 接口都进行基础输入验证:必填字段检查:if (!url) return res.status(400).json(...)类型检查:if (!drive) ...、if (value === undefined || value === null) ...数值范围限制:并发数 1-10、线程数 1-32URL 参数解码:decodeURIComponent()九、前端页面详细说明9.1 管理后台 (index.html) — CSS 设计体系CSS 变量主题系统::root { --bg-base: #0d1117; /* 页面底色(最深) */ --bg-surface: #161b22; /* 卡片/面板背景 */ --bg-elevated: #1c2128; /* 悬浮/高亮背景 */ --border: #30363d; /* 边框颜色 */ --text-primary: #e6edf3; /* 主文本 */ --text-secondary: #8b949e;/* 次要文本 */ --accent: #58a6ff; /* 强调色(蓝) */ --success: #3fb950; /* 成功色(绿) */ --warning: #d29922; /* 警告色(黄) */ --error: #f85149; /* 错误色(红) */ }设计原则:三层背景深度:base → surface → elevated,营造层次感所有 border-radius: 0,方正风格无阴影效果,依赖边框分割颜色与 GitHub Dark 主题相近9.2 管理后台 — 布局结构┌────────────────────────────────────────────────────┐ │ body (flex) │ │ ┌──────────┐ ┌────────────────────────────┐ │ │ │ sidebar │ │ main-content │ │ │ │ (220px) │ │ (flex: 1) │ │ │ │ │ │ │ │ │ │ ┌─────┐ │ │ ┌─────────────────────┐ │ │ │ │ │ Logo │ │ │ │ page-title │ │ │ │ │ └─────┘ │ │ └─────────────────────┘ │ │ │ │ ┌─────┐ │ │ ┌─────────────────────┐ │ │ │ │ │统计区│ │ │ │ │ │ │ │ │ │ IP │ │ │ │ 当前任务/已缓存 │ │ │ │ │ │已完成│ │ │ │ /日志/设置 │ │ │ │ │ │存储路径│ │ │ │ │ │ │ │ │ │磁盘剩余│ │ │ │ │ │ │ │ │ │点播次数│ │ │ │ │ │ │ │ │ │命中率│ │ │ │ │ │ │ │ │ └─────┘ │ │ └─────────────────────┘ │ │ │ │ ┌─────┐ │ │ │ │ │ │ │导航菜单│ │ │ │ │ │ │当前任务│ │ │ │ │ │ │已缓存 │ │ │ │ │ │ │日志 │ │ │ │ │ │ │设置 │ │ │ │ │ │ └─────┘ │ │ │ │ │ └──────────┘ └────────────────────────────┘ │ └────────────────────────────────────────────────────┘四个功能页面:页面导航项功能说明当前任务📊 当前任务显示正在下载/等待/合并的任务列表,含进度条、速度、TS块进度已缓存💾 已缓存已下载完成的视频列表,支持播放、删除、分页浏览、一键清空日志📋 日志系统运行日志查看,支持分页、清空设置⚙️ 设置存储盘符选择、并发下载数设置、单任务线程数设置页面切换机制:4 个 .page div 同时存在,通过 .active 类控制显示/隐藏导航点击时移除所有 .active,只给目标页添加无动画过渡,瞬间切换9.3 管理后台 — 前端状态管理全局变量:let tasks = []; // 当前下载任务列表(内存缓存) let cachedCurrentPage = 1; // 已缓存列表当前页码 let logCurrentPage = 1; // 日志列表当前页码 const cachedPageSize = 24; // 已缓存每页条数 const logPageSize = 100; // 日志每页条数数据加载函数一览:函数调用时机请求 APIloadSettingsDrives()页面初始化GET /api/drivesloadConfig()页面初始化GET /api/configloadMaxConcurrent()页面初始化GET /api/settings/max_concurrentloadThreadCount()页面初始化GET /api/settings/thread_countloadDiskSpace()初始化 + 每 10 秒GET /api/disk-spaceloadTasks()初始化 + 每 5 秒 + SSEGET /api/tasksloadCached(page)初始化 + 每 60 秒 + SSEGET /api/cachedloadLogs(page)初始化 + 每 15 秒GET /api/logsloadLocalIP()页面初始化GET /api/local-iploadStats()初始化 + SSEGET /api/stats9.4 管理后台 — 各页面详细功能当前任务页表格列定义(CSS Grid):grid-template-columns: 2fr 100px 130px 100px;列宽度内容下载地址自适应视频名称 + URL(溢出截断)进度100px状态点 + 百分比速度/TS块130px实时速度 + TS块进度状态100px下载中/等待中/合并中状态点颜色:downloading → 绿色 (--success)waiting → 黄色 (--warning)merging → 蓝色 (--accent)已缓存页表格列定义:grid-template-columns: 2fr 1fr 100px 1fr 120px;列内容文件名视频名称(title 显示完整 URL)大小文件大小(MB)播放次数N 次下载时间MM-DD HH:mm 格式操作播放按钮 + 删除按钮分页控件:显示总记录数页码按钮(最多显示当前后各 2 页)超出范围用省略号表示上/下一页按钮日志页表格列定义:grid-template-columns: 120px 80px 1fr;列内容时间MM-DD HH:mm:ss级别INFO/WARN/ERROR(带颜色)内容日志消息(自动换行)级别颜色映射:const levelColors = { info: 'var(--accent)', // 蓝色 warn: 'var(--warning)', // 黄色 error: 'var(--error)' // 红色 };设置页三个设置卡片:卡片控件保存 API范围默认保存路径盘符下拉框 + 保存按钮POST /api/save-drive系统盘符列表同时下载任务数数字输入框 + 保存按钮POST /api/settings/max_concurrent1-10单任务下载线程数数字输入框 + 保存按钮POST /api/settings/thread_count1-329.5 播放页面 (player.html) — 详细流程初始化流程:页面加载 │ ▼ 从 URL 参数获取视频源地址 const m3u8Url = getQueryParam('url'); │ ├── 无 URL → 显示错误信息 "错误: 未提供视频地址" │ └── 有 URL → │ ▼ 调用 /api/check-video?url=xxx │ ├── 已缓存 (format=mp4) → │ │ │ ▼ │ updateSourceTag('cached') // 显示"秒播模式" │ │ │ ▼ │ 调用 /api/video?url=xxx 获取局域网播放 URL │ │ │ ▼ │ createMuiPlayer(videoUrl) // MuiPlayer 播放 │ └── 未缓存 / 请求失败 → │ ▼ updateSourceTag('network') // 显示"后台加速中..." │ ▼ createDPlayer(m3u8Url, true) // DPlayer+hls.js 播放网络流 │ ▼ submitDownloadTask(m3u8Url) // 后台提交下载播放器创建对比:特性DPlayerMuiPlayer使用场景网络 m3u8 流本地 MP4 文件HLS 支持通过 hls.js customType原生支持自动播放autoplay: trueautoplay: true桌面插件无MuiPlayerDesktopPlugin控件默认控件可自定义 headControls/footerControls9.6 视频流服务 — Range 请求支持GET /hcdata/*filepath 路由支持 HTTP Range 请求,实现视频拖拽进度条和断点续播:客户端请求: GET /hcdata/abc123/143025.mp4 Range: bytes=1048576-2097151 服务端响应: HTTP/1.1 206 Partial Content Content-Range: bytes 1048576-2097151/5242880 Accept-Ranges: bytes Content-Length: 1048576 Content-Type: video/mp4CORS 头设置:res.header('Access-Control-Allow-Origin', '*'); res.header('Access-Control-Allow-Methods', 'GET, OPTIONS'); res.header('Access-Control-Allow-Headers', 'Range, Content-Type'); res.header('Access-Control-Expose-Headers', 'Content-Length, Content-Range, Accept-Ranges');十、API 接口详细参考10.1 统一响应格式成功响应:{ "success": true, "data_field": "...", "message": "操作成功" }失败响应:{ "success": false, "error": "错误描述信息" }HTTP 状态码使用:状态码场景200成功400参数缺失/无效403路径遍历拒绝404资源不存在500服务器内部错误10.2 下载相关 API 详细逻辑POST /api/download-video — 完整去重逻辑收到请求 { url, name } │ ▼ 检查 download_tasks 表是否有相同 URL │ ├── status=completed → 返回 { exists: true, message: '该视频已下载完成' } ├── status=downloading/waiting → 返回 { exists: true, message: '该视频已在下载队列中' } │ └── 不存在 ↓ │ ▼ 检查 video_downloads 表 │ ├── status=completed → 返回 { exists: true, message: '该视频已下载完成' } │ └── 不存在/其他状态 ↓ │ ▼ 插入 download_tasks(status=waiting) 加入 downloadQueue[] 调用 processQueue() 返回 { success: true, taskId }GET /api/check-video?url=xxx — 三级缓存检查检查顺序: 1. 数据库记录 → video_downloads 表中 url 对应记录的 local_path 是否存在 2. 哈希目录 → {storagePath}/{md5}/ 目录下是否有 .mp4 文件 3. 兼容旧路径 → {storagePath}/{md5}.mp4 或 {md5}.m3u8 是否存在GET /api/cached — 响应结构{ "success": true, "videos": [ { "id": 1, "url": "https://example.com/video.m3u8", "name": "视频名称", "local_path": "D:\\hcdata\\abc123\\143025.mp4", "status": "completed", "progress": 100, "message": "下载完成", "format": "mp4", "play_count": 5, "created_at": "2026-07-31 14:30:25", "updated_at": "2026-07-31 14:35:10", "file_size": "256.78 MB" } ], "pagination": { "page": 1, "limit": 99, "total": 42, "totalPages": 1 } }file_size 字段是服务端实时读取文件系统获取的,非数据库存储。10.3 缓存管理 API 详细逻辑DELETE /api/cached/:id — 删除流程1. 查询 video_downloads 获取记录 2. 删除本地文件 (fs.unlinkSync) 3. 尝试删除空目录 (fs.rmSync) 4. 删除 video_downloads 记录 5. 删除关联的 download_tasks 记录(按 URL 匹配) 6. 写入日志DELETE /api/cached — 一键清空流程1. 查询所有 status='completed' 的记录 2. 逐个删除本地文件和空目录 3. 删除所有 completed 的 video_downloads 记录 4. 删除所有 completed 的 download_tasks 记录 5. 返回删除统计 { deletedCount, errorCount }十一、临时文件清理策略11.1 临时文件产生来源N_m3u8DL-RE 下载过程中会产生以下临时文件:文件类型位置说明下载输出文件datatmp\tmp\{md5}\{md5}.mp4下载完成后的合并文件TS 分片datatmp\tmp\tmp\ 下以 md5 前 8 位命名的子目录下载的原始分片元数据 JSONdatatmp\tmp\{md5}\{md5}.json解析信息(如果开启了 write-meta-json)11.2 清理时机程序采用“延迟清理”策略,避免影响其他并发任务:任务完成 │ ▼ 立即转移视频文件到最终存储路径 │ ▼ 启动 8 秒延迟定时器 │ ▼ 8 秒后执行清理: ├── 清理任务专属临时目录 (tempSubDir) ├── 清理 tmp 目录中匹配 urlHash 前 8 位的子目录 └── 清理 tmp 目录根下匹配 urlHash 前 8 位的文件11.3 清理函数详解function cleanupTempDir(dir) { if (!fs.existsSync(dir)) return; const items = fs.readdirSync(dir); for (const item of items) { const itemPath = path.join(dir, item); const stat = fs.statSync(itemPath); if (stat.isDirectory()) { cleanupTempDir(itemPath); // 递归清理子目录 fs.rmdirSync(itemPath); } else { fs.unlinkSync(itemPath); // 删除文件 } } }匹配规则: 通过 tmpItem.includes(urlHash.substring(0, 8)) 匹配当前任务的分片目录,避免误删其他任务的临时文件。11.4 异常残留处理如果服务异常退出(如断电、强制关闭),临时文件可能残留。当前处理方式:无自动清理机制:残留文件需手动删除不影响功能:新下载任务会创建新的临时目录,不会读取旧残留十二、系统数据流总览12.1 完整数据流图用户浏览器 │ │ ① 访问管理后台 ▼ Express 静态服务 (public/index.html) │ │ ② 请求下载任务列表 ▼ GET /api/tasks → SQLite download_tasks 表 → JSON 响应 │ │ ③ SSE 连接 ▼ GET /api/events → 保持连接 → 实时推送进度 │ │ ④ 提交下载任务(通过播放器页面或 API) ▼ POST /api/download-video │ ├── 去重检查 (download_tasks + video_downloads) ├── 插入 download_tasks 表 ├── 加入 downloadQueue[] └── processQueue() → startDownload() │ │ ⑤ 调用外部工具 ▼ spawn N_m3u8DL-RE.exe │ │ ⑥ 实时解析进度 ▼ stdout/stderr → parseProgress() │ ├── 更新 download_tasks 表 ├── 更新 video_downloads 表 └── SSE 广播 task-update │ │ ⑦ 下载完成 ▼ safeMoveFile() 转移文件 │ ├── 更新 video_downloads (status=completed) ├── 删除 download_tasks 记录 ├── SSE 广播 task-completed └── 8 秒后清理临时文件 │ │ ⑧ 用户点击播放 ▼ GET /api/check-video → 检查缓存 │ ├── 已缓存 → GET /api/video → 返回局域网 URL │ │ │ ▼ │ GET /hcdata/*filepath → Range 请求支持 → 视频流 │ └── 未缓存 → 返回 m3u8 原始 URL + 后台下载12.2 数据库表关系config ──────────────────┐ (key-value) │ storage_path ────────┐ │ max_concurrent │ │ thread_count │ │ nm_user_agent │ │ │ │ download_tasks ──────┐ │ │ (进行中的任务) │ │ │ id, url, name │ │ │ status, progress │ │ │ 完成后删除 ───────┤ │ │ │ │ video_downloads ────┤ │ │ (全部历史记录) │ │ │ url (UNIQUE) ─────┘ │ │ local_path ──────────┘ │ status, play_count │ 完成后保留 ───────────┘ system_logs (运行日志) 自动保留 500 条十三、外部工具集成13.1 N_m3u8DL-RE版本: 20251027 (Beta)调用方式: 通过 Node.js child_process.spawn() 启动子进程核心参数:参数值说明<input>视频 URLm3u8 地址--save-dirdatatmp\tmp输出目录--save-nameURL 的 MD5 哈希保存文件名--tmp-dirdatatmp\tmp\tmp临时分片目录--thread-count配置值(默认 4)下载线程数--del-after-donefalse不自动删除临时文件(由程序管理清理)--headerUser-Agent: xxx可选,自定义请求头进度解析:同时监听 stdout 和 stderr先去除 ANSI 转义码正则提取进度百分比 (\d+\.?\d*%)正则提取 TS 块进度 (\d+/\d+)正则提取下载速度 ([KMGT]?Bps)13.2 FFmpegN_m3u8DL-RE 内部依赖 FFmpeg 进行视频合并。项目 tools 目录包含完整的 FFmpeg 可执行文件及依赖 DLL。十四、启动与部署14.1 环境要求操作系统: Windows(使用了 wmic、Windows 信号等)运行时: Node.js(需支持 ES5+ 语法)浏览器: 任意现代浏览器(Chrome/Edge/Firefox/Safari)14.2 安装步骤cd hcdata-web npm install14.3 启动方式方式一:批处理启动双击 启动服务端.bat该脚本会:设置 UTF-8 编码切换到 hcdata-web 目录自动打开浏览器访问 http://localhost:3000启动 Node.js 服务方式二:命令行启动cd hcdata-web node server.js14.4 访问地址本机:http://localhost:3000局域网:http://{服务器IP}:300014.5 首次使用配置进入"设置"页面选择视频文件存储盘符点击"保存"(会自动创建 {盘符}:\hcdata 目录)可选:调整并发下载数和线程数十五、关键设计决策15.1 为什么用 SQLite 而非文件存储配置支持并发读写(better-sqlite3 同步 API 无竞态问题)事务支持(批量保存配置)结构化查询(分页、条件过滤)单文件部署,无需额外数据库服务15.2 为什么用 SSE 而非 WebSocket单向推送即可满足需求(服务端 → 客户端)基于 HTTP,无需额外协议支持浏览器原生 EventSource API,代码更简洁断线自动重连15.3 为什么双播放器方案DPlayer + hls.js:对 m3u8 流兼容性最好MuiPlayer:MP4 本地文件播放体验更好(支持更多控件)根据缓存状态自动切换,用户无感知15.4 文件命名策略URL → MD5 哈希作为目录名:保证唯一性,避免特殊字符时间戳作为文件名:同一 URL 可多次下载不覆盖延迟清理临时文件:避免并发任务间的文件冲突15.5 下载队列设计内存队列 + 数据库双写:保证重启后可恢复服务启动时扫描未完成的任务,重新加入队列支持配置并发数(1-10)和单任务线程数(1-32)十六、辅助工具16.1 check-db.js数据库检查脚本,用于调试查看数据库状态:node check-db.js输出所有表名和 download_tasks 表的全部记录。16.2 启动服务端.batWindows 一键启动脚本,自动打开浏览器。十七、已知限制与注意事项17.1 平台限制仅支持 Windows:使用了 wmic 获取磁盘信息、Windows 信号处理(SIGBREAK)无跨平台支持:wmic logicaldisk 是 Windows 特有命令17.2 安全限制无用户认证:局域网内任何人可访问管理后台,无登录/权限机制无 HTTPS:仅支持 HTTP 协议,数据传输未加密CORS 全开:Access-Control-Allow-Origin: *,任何来源可调用 API17.3 性能限制数据库单文件:高并发场景下可能有锁竞争(当前场景可忽略)同步数据库 API:better-sqlite3 同步操作会阻塞 Node.js 事件循环(但 SQLite 操作通常很快)无连接数限制:SSE 连接数无上限,大量客户端可能导致内存问题17.4 可靠性限制临时文件清理:依赖延迟定时器(8 秒),异常退出可能残留临时文件合并超时:N_m3u8DL-RE 合并阶段可能卡住,程序设了 5 分钟超时兑底磁盘空间:大量下载可能导致磁盘满,侧边栏有实时显示但无预警机制优雅关闭不完善:关闭服务时不等待进行中的下载任务完成,子进程直接终止17.5 功能限制无搜索功能:已缓存列表不支持搜索/过滤无批量导入:只能逐个提交下载任务,不支持批量导入 URL 列表无下载重试:下载失败后不会自动重试,需手动重新提交无速度限制:单任务下载无限速配置(N_m3u8DL-RE 支持但程序未使用)十八、依赖清单Node.js 依赖 (package.json)包名版本用途express^5.2.1Web 服务框架better-sqlite3^12.10.0SQLite 数据库驱动node-gyp^12.3.0better-sqlite3 编译依赖外部工具工具版本用途N_m3u8DL-RE20251027m3u8/HLS/DASH 视频下载FFmpeg最新视频合并/转码(被 N_m3u8DL-RE 调用)前端库库名用途DPlayer视频播放器(网络流播放)MuiPlayer视频播放器(本地文件播放)MuiPlayerDesktopPluginMuiPlayer 桌面端插件hls.jsHLS 流媒体解析十九、开发约定19.1 代码风格后端:CommonJS 模块 (require/module.exports)前端:原生 JavaScript,无框架,内联 <script> 标签CSS:内联 <style> 标签,CSS 变量管理主题色无代码构建步骤19.2 API 响应格式所有 API 统一返回 JSON:{ "success": true/false, "data...": "...", "error": "错误信息" }19.3 错误处理API 层统一 try-catch,返回 500 状态码下载任务错误记录到数据库和日志前端 fetch 调用统一 catch 处理文档编写日期:2026年8月1日基于项目源码版本:hcdata-web v1.0.0
2026年06月01日
90 阅读
0 评论
0 点赞
2026-02-04
七日杀开服文字教程
(7 Days to Die)是一款受欢迎的开放世界生存恐怖游戏。开设自己的服务器可以让你和朋友们一起畅玩游戏,并完全掌控游戏环境。以下是详细的教程,教你如何用 SteamCMD 开设一个《七日杀》服务器,并进行基本的服务器设置。步骤一:安装 SteamCMD下载 SteamCMD访问 SteamCMD 官方下载页面(https://steamcdn-a.akamaihd.net/client/installer/steamcmd.zip)下载 steamcmd.zip。解压到你想安装的目录(例如 C:\steamcmd)。运行 SteamCMD打开命令提示符(按 Win + R,输入 cmd,然后按 Enter)。导航到你解压 SteamCMD 的目录(例如 cd C:\steamcmd)。运行 steamcmd.exe。步骤二:下载《七日杀》服务器文件1.登录匿名账户在 SteamCMD 提示符下,输入以下命令:login anonymous设置安装目录选择一个安装目录,例如 C:\7DaysToDieServer(Windows)下载服务器文件:输入以下命令以下载《七日杀》服务器文件:app_update 294420 validate退出 SteamCMD下载完成后,输入 quit 退出 SteamCMD。步骤三:配置服务器找到配置文件:配置文件位于 C:\7DaysToDieServer\serverconfig.xml步骤四:启动服务器创建启动脚本:在 C:\7DaysToDieServer 目录下创建一个新的批处理文件 startserver.bat,内容如下:@echo offstart C:\7DaysToDieServer\7DaysToDieServer.exe -configfile=serverconfig.xml运行启动脚本:双击 startserver.bat 启动服务器。这次的教程就到这里,如果你有任何问题或者建议,欢迎在评论区留言。如果你觉得这个教程对你有帮助,请给我点个赞和关注,让更多的人看到这个教程。有服务器需求、开服问题可以帮你解决~
2026年02月04日
236 阅读
0 评论
0 点赞
2025-11-27
DIY万兆路由配置清单
最近看到很多大厂都出了万兆路由,反反复复看了很多家,都没有自己觉得性能和价格对等的万兆路由,于是自己萌生了一个想法,能不能自己DIY一台能;以下是配置清单需求:就目前市场情况X99感觉要比X79好很多,再加上本来C612&C610本来就的服务器主板芯片,还支持DDR4内存,也不用担心长期工作不稳定的问题;CPU:X99系列志强处理器 要求功耗低且核心频率要高;主板:大于5个电口网卡且支持PCIE万兆光口网卡;电源:考虑长期使用电源不能差要大于实际主机功耗2倍电源;内存:4G以上最好是8G起步,至于几代内存取决于主板要求;硬盘:根据市面各种软路由系统要求,容量保底大于8G,一定要得MLC颗粒硬盘;散热:因为考虑使用2U机箱,直接金钱豹2U专用散热器即可;网卡:一张半高INTEL万兆网卡,单口最好,双口也行;机箱:2U机箱且至少2个以上直吹风道,机箱结构韧性要强,要求机箱钢板厚度大于1.2;
2025年11月27日
231 阅读
0 评论
0 点赞
2025-11-09
分享一张适合网吧桌面的4K壁纸1109
原图网盘分享:https://url67.ctfile.com/d/8911067-156455507-6d5549?p=3328
2025年11月09日
204 阅读
0 评论
0 点赞
2025-10-22
采集资源站收集【持续更新】
本列表直接适配MOONTV项目20251022更新 { "cache_time": 9200, "api_site": { "api_45": { "name": "非凡.线路", "api": "https://cj.ffzyapi.com/api.php/provide/vod", "detail": "https://cj.ffzyapi.com" }, "api_46": { "name": "飘零.线路", "api": "https://p2100.net/api.php/provide/vod", "detail": "https://p2100.net" }, "api_48": { "name": "魔都1.线路", "api": "https://caiji.moduapi.cc/api.php/provide/vod", "detail": "https://caiji.moduapi.cc" }, "api_49": { "name": "魔都2.线路", "api": "https://www.mdzyapi.com/api.php/provide/vod", "detail": "https://www.mdzyapi.com" }, "api_40": { "name": "速博.线路", "api": "https://subocaiji.com/api.php/provide/vod", "detail": "" }, "api_41": { "name": "量子.线路", "api": "https://cj.lziapi.com/api.php/provide/vod", "detail": "" }, "api_42": { "name": "金鹰1.线路", "api": "https://jinyingzy.com/api.php/provide/vod", "detail": "https://jinyingzy.com" }, "api_43": { "name": "金鹰2.线路", "api": "https://jyzyapi.com/api.php/provide/vod", "detail": "https://jyzyapi.com" }, "api_34": { "name": "红牛.线路", "api": "https://www.hongniuzy2.com/api.php/provide/vod", "detail": "https://www.hongniuzy2.com" }, "api_37": { "name": "豆瓣.线路", "api": "https://caiji.dbzy.tv/api.php/provide/vod", "detail": "https://caiji.dbzy.tv" }, "api_29": { "name": "电影天堂.线路", "api": "http://caiji.dyttzyapi.com/api.php/provide/vod", "detail": "http://caiji.dyttzyapi.com" }, "api_31": { "name": "百度.线路", "api": "https://api.apibdzy.com/api.php/provide/vod", "detail": "https://api.apibdzy.com" }, "api_24": { "name": "最大1.线路", "api": "http://zuidazy.me/api.php/provide/vod", "detail": "http://zuidazy.me" }, "api_25": { "name": "最大2.线路", "api": "https://api.zuidapi.com/api.php/provide/vod", "detail": "https://api.zuidapi.com" }, "api_23": { "name": "暴风.线路", "api": "https://bfzyapi.com/api.php/provide/vod", "detail": "" }, "api_18": { "name": "无尽1.线路", "api": "https://api.wujinapi.com/api.php/provide/vod", "detail": "" }, "api_19": { "name": "无尽2.线路", "api": "https://api.wujinapi.me/api.php/provide/vod", "detail": "" }, "api_13": { "name": "卧龙.线路", "api": "https://wolongzyw.com/api.php/provide/vod", "detail": "https://wolongzyw.com" }, "api_6": { "name": "U酷.线路", "api": "https://api.ukuapi88.com/api.php/provide/vod", "detail": "https://api.ukuapi88.com" }, "yingshigongchang": { "api": "https://cj.lziapi.com/api.php/provide/vod/", "name": "影视工厂.线路" } } }
2025年10月22日
891 阅读
0 评论
2 点赞
2025-10-20
emoji表情支持Edge或者chrome浏览器
🦄️ 🐞 🏮 🐼 🐯 🦊 🐱 🐘 🦖 🐉 🐇 🐤 🦟 🐷 🐔 🐻 🐶 🍤 🐴 🐒 🦢 🐂 🐄 🐎 🐌 🐢 🦑 🐟 🐬 🐣 🧠 💯 ✔️ 🈚 🉑 ⚠️ 👍🎤 🎾 👒 📺 🚀 🎈 🛳 🌸 ♥️ 🏯 🏀 💘 🎨 🔥 ❤️ 🌟 ✨ ✖️ ♾️ 🕣 🏷️ 🌎 🦪 💰 🚴♀️ 🚴 🕐 🧻 ✅ 🌈 🌃 🏠 👻 🦵 👣 💪📼 🎏 🌀 🔃 🚬 🧼 🧿 🀄 🌏 🤘 🪒 🥫 📢 🖍️ 🎟️ 🧩 🎬 🆖 👌 📈 📉 🥍 🗾 🔉 ✏️ 📓 ✍️ ⏮️ 🆘 📡 👀 📱 🔋 � 🪑 🔒 🎸 📷 🛸🏷️ 🚍 💴 👩✈️ 🏭 🧹 👩👩👧👦 👭🏽 🪁 🚵👴 👨 👶 👫 👩💼 👩 🌅 🌒 😷 😍 😊 🥶 😰 🙁 🥺 🤣 👄 👡 👨👦👦 👨👨👦👦 👩🏿🤝👩🏼 💃 💆♂️ 🎳 👷 🧙♀️ 🤹♀️ 👩👩👦 🏜️ 🧝♂️ 👨🏿🤝👨🏼 🎊 👿 🅰 🛑 👋 🛴🆑☕️ 🥪 🍵 🍹 🥗 🍺 🍚 🥩 🥜 🌰 🍞 🥐 🥖 🥨 🥯 🥞 🧀 🍖 🍗 🥓 🍔 🍟 🍕 🌭 🥪 🌮 🌯 🥙 🌶 🍔 🍜 🍱 🥛 🥚 🌿 🍀 🍃🎀❤️🧡💛💚💙💜🖤🤍🤎❣️💕💞💓💗💖💝♨️💢🚫❌⭕️💯🚱🔞📵🚭🚷🚯🚳❗️‼️🚭👗 🦋🐰🐕🐈🦌🐕🦺🐐🦮🦙👠🦜🪶🦝🕊🐈⬛🦩🌩🦚🐩☁️🌧⛄️💧💦🌈⛅️🌨⛈🌬☃️🌫🟢🟢🔵🟢🔵 🧀🥨🥖🍞🥐🥚🍳🥞🥓🥩🍟🍔🌭🍖🍗🍕🥪🥙🌮🌯🍜🍝🥫🥘🥗🍲🍛🍣🍱🍤🍙🍚🍘🍥 🥠🍦🍨🍧🍡🍢🥧🍰🎂🍮🍭🥟🍩🍿🍫🍬🍪🌰🥜🍯🥛🍶🥤🍵☕️🍼🍺🍻🥂🍷🥃🍴🥄🍾🍹🍸🍽🥣🥡🥢🥦 🍄 🥬 🥕 🌶️ 🍆 🌽 🥒 🥔 🍠 🌰🥦 西蓝花 🍄 蘑菇 🥬 白菜 🥕 胡萝卜 🌶️ 辣椒 🍆 茄子 🌽 玉米 🥒 黄瓜 🥔 土豆 🍠 红薯 🌰 板栗🍇 🍈 🍉 🍊 🍋 🍌 🍍 🥭 🍎 🍏 🍐 🍑 🍒 🍓 🥝 🍅 🥥 🥑🍇 葡萄 🍈 甜瓜 🍉 西瓜 🍊 橘子 🍋 柠檬 🍌 香蕉 🍍 菠萝 🥭 芒果 🍎 红苹果 🍏 青苹果 🍐 梨 🍑 桃 🍒 樱桃 🍓 草莓 🥝 猕猴桃 🍅 西红柿 🥥 椰子 🥑 牛油果♈️♉️♊️♋️♌️♍️♎️♏️♐️♑️♒️♓⛎🈲🈳🈴🈵🈶🈷️🈸🈹🈂️🈺🉐🉑㊙️🈚️🈯️㊗️♎天秤座てんびんざ ♐射手座いてざ ♍乙女座おとめざ ♒水瓶座みずがめざ ♊双子座ふたござ ♏蠍座さそりざ ♋蟹座かにざ ♑山羊座やぎざ ♉牡牛座おうしざ ♌獅子座ししざ ♈牡羊座おひつじざ ♓魚座うおざ ⛎蛇使い座へびつかいざ🈲禁きん 🈳空から 🈴合ごう 🈵満まん 🈶有ゆう 🈷月極つきぎめ 🈸申し込み、もうしこみ 🈹割引わりびき 🈂サービス 🈺営えい 🉐得とく 🉑可か ㊙マル秘まるひ 🈚無料むりょう 🈯指定してい ㊗祝いわい😀-😂🤣😃-😆😉-😋😎😍😘😗😙😚☺🙂🤗🤩🤔🤨😐😑😶🙄😏😣😥😮🤐😯😪😫😴😌😛-😝🤤😒 -😕🙃🤑😲☹🙁😖😞😟😤😢😭😦-😩🤯😬😰😱😳🤪 😵😡😠🤬😷🤒🤕🤢🤮🤧😇🤠🤡🤥🤫🤭🧐🤓😈👿👹👺💀☠👻👽👾🤖 💩😺😸😹😻-😽🙀😿😾🙈-🙊👶🧒👦👧🧑👨👩🧓👴👵👮🕵💂👷🤴👸👳👲🧕🧔 👱🤵👰🤰🤱👼🎅🤶🧙-🧟🙍🙎🙅🙆💁🙋 🙇🤦🤷💆💇🚶🏃💃🕺👯🧖-🧘🛀🛌🕴🗣👤👥🤺🏇⛷🏂🏌🏄🚣🏊⛹🏋🚴🚵🏎🏍🤸🤼-🤾🤹👫-👭💏💑👪🤳💪 👈👉☝👆 🖕👇✌🤞🖖🤘🤙🖐✋👌-👎✊👊🤛🤜🤚👋🤟✍ 👐🙌🤲🙏🤝💅👂👃👣👀👁🧠👅👄💋💘❤💓-💗💙-💛🧡💜🖤💝-💟❣💌💤💢💣💥💦💨💫💬🗨🗯 💭🕳👓🕶👔-👖🧣- 🧦👗-👝🛍🎒👞-👢👑👒🎩🎓🧢⛑📿💄💍💎🐵🐒🦍🐶🐕🐩🐺🦊🐱🐈🦁🐯🐅🐆🐴🐎🦄🦓🦌🐮🐂-🐄🐷🐖🐗 🐽🐏🐑🐐🐪🐫🦒🐘🦏🐭 🐁🐀🐹🐰🐇🐿🦔🦇🐻🐨🐼🐾🦃🐔🐓🐣-🐧🕊🦅🦆🦉🐸🐊🐢🦎🐍🐲🐉🦕🦖🐳🐋🐬🐟-🐡🦈🐙🐚 🦀🦐🦑🐌🦋🐛-🐞🦗🕷🕸🦂💐🌸💮🏵🌹🥀🌺-🌼🌷🌱- 🌵🌾🌿☘🍀-🍃🍇-🍓🥝🍅🥥🥑🍆🥔🥕🌽🌶🥒🥦🍄🥜🌰🍞🥐 🥖🥨🥞🧀🍖🍗🥩🥓🍔🍟🍕🌭🥪🌮🌯🥙🥚🍳🥘🍲🥣🥗🍿🥫🍱🍘-🍝🍠🍢-🍥🍡🥟- 🥡🍦-🍪🎂🍰🥧🍫-🍯🍼🥛☕🍵🍶 🍾🍷-🍻🥂🥃🥤🥢🍽🍴🥄🔪🏺🌍-🌐🗺🗾🏔⛰🌋🗻🏕🏖🏜-🏟🏛🏗-🏚🏠-🏦🏨-🏭🏯🏰💒🗼🗽⛪🕌🕍⛩🕋⛲⛺🌁 🌃-🌇🌉 ♨🌌🎠-🎢💈🎪🎭🖼🎨🎰🚂-🚊🚝🚞🚋-🚎 -🚜🚲🛴🛵🚏🛣🛤⛽🚨🚥-🚧🛑⚓⛵🛶🚤🛳⛴🛥🚢✈🛩🛫🛬💺🚁🚟-🚡🛰🚀🛸🛎🚪🛏🛋🚽🚿🛁⌛⏳⌚⏰-⏲🕰🕛🕧 🕐🕜🕑🕝🕒🕞🕓🕟🕔🕠🕕🕡🕖🕢🕗🕣🕘🕤🕙🕥🕚🕦🌑-🌜🌡☀🌝🌞⭐🌟🌠☁⛅⛈🌤-🌬🌀🌈🌂☂☔⛱⚡❄☃⛄☄🔥 💧 🌊🎃🎄🎆🎇✨🎈-🎋🎍-🎑🎀🎁🎗🎟🎫🎖 🏆🏅🥇-🥉⚽⚾🏀🏐🏈🏉🎾🎱🎳🏏🏑-🏓🏸🥊🥋🥅🎯⛳⛸🎣🎽🎿🛷🥌🎮🕹 🎲♠♥♦♣🃏🀄🎴🔇-🔊📢📣📯🔔🔕🎼🎵🎶🎙-🎛🎤🎧📻🎷-🎻🥁📱📲☎📞-📠🔋🔌💻 🖥🖨⌨🖱🖲💽-📀🎥🎞📽🎬 📺📷-📹📼🔍🔎🔬🔭📡🕯💡🔦🏮📔-📚📓📒📃📜📄📰🗞📑🔖🏷💰💴-💸💳💹💱💲✉📧-📩📤-📦📫📪📬-📮🗳✏✒ 🖋🖊🖌🖍📝💼📁📂🗂 📅📆🗒🗓📇-📎🖇📏📐✂🗃🗄🗑🔒🔓🔏-🔑🗝🔨⛏⚒🛠🗡⚔🔫🏹🛡🔧🔩⚙🗜⚗⚖🔗⛓💉💊🚬⚰ ⚱🗿🛢🔮🛒🏧🚮🚰♿🚹-🚼🚾🛂-🛅⚠🚸⛔🚫🚳🚭🚯🚱 📵🔞 ☢☣⬆↗➡↘⬇↙⬅↖↕↔↩↪⤴⤵🔃🔄🔙-🔝🛐⚛🕉✡☸☯✝☦☪☮🕎🔯♈-♓⛎🔀-🔂▶⏩⏭⏯◀⏪⏮🔼 ⏫🔽⏬⏸-⏺⏏🎦🔅🔆📶📳📴♀♂⚕♻⚜🔱📛🔰⭕✅☑✔✖❌❎➕-➗➰➿ 〽✳✴❇!⁉❓-❕❗〰©®™🔟💯🔠 -🔤🅰🆎🅱🆑-🆓ℹ🆔ⓜ🆕🆖🅾🆗🅿🆘-🆚🈁🈂🈷 ☢︎ ☣︎ ☦︎ ☪︎ ☮︎ ☯︎ ☸︎ ☹︎ ☺︎ ♀︎ ♂︎ ♟︎ ♠︎ ♣︎ ♥︎ ♦︎ ♨︎ ♻︎ ♾︎ ⚒︎ ⚔︎ ⚕︎ ⚖︎ ⚗︎ ⚙︎ ⚛︎ ⚜︎ ⚠︎ ⚰︎ ⚱︎ ⛈︎ ⛏︎ ⛑︎ ⛓︎ ⛩︎ ⛰︎ ⛱︎ ⛴︎ ⛷︎ ⛸︎ ⛹︎ ✂︎ ✈︎ ✉︎ ✌︎ ✍︎ ✏︎ ✒︎ ✔︎ ✖︎ ✝︎ ✡︎ ✳︎ ✴︎ ❄︎ ❇︎ ❣︎ ❤︎ ➡︎ ⤴︎ ⤵︎ ⬅︎ ⬆︎ ⬇︎ 🌡︎ 🌤︎ 🌥︎ 🌦︎ 🌧︎ 🌨︎ 🌩︎ 🌪︎ 🌫︎ 🌬︎ 🌶︎ 🍽︎ 🎖︎ 🎗︎ 🎙︎ 🎚︎ 🎛︎ 🎞︎ 🎟︎ 🏋︎ 〰︎ ‼︎ ⁉︎ ︎⃣ #︎⃣ 〽︎ ©︎ ®︎ ↔︎ ↕︎ ↖︎ ↗︎ ↘︎ ↙︎ ↩︎ ↪︎ ⌨︎ ⏏︎ ⏭︎ ⏮︎ ⏯︎ ⏱︎ ⏲︎ ⏸︎ ⏹︎ ⏺︎ ▪︎ ▫︎ ▶︎ ◀︎ ◻︎ ◼︎ ☀︎ ☁︎ ☂︎ ☃︎ ☄︎ ☎︎ ☑︎ ☘︎ ☝︎ ☠︎ 🏌︎ 🏍︎ 🏎︎ 🏔︎ 🏕︎ 🏖︎ 🏗︎ 🏘︎ 🏙︎ 🏚︎ 🏛︎ 🏜︎ 🏝︎ 🏞︎ 🏟︎ 🏳︎ 🏵︎ 🏷︎ 🐿︎ 👁︎ 📽︎ 🕉︎ 🕊︎ 🕯︎ 🕰︎ 🕳︎ 🕴︎ 🕵︎ 🕶︎ 🕷︎ 🕸︎ 🕹︎ 🖇︎ 🖊︎ 🖋︎ 🖌︎ 🖍︎ 🖐︎ 🖥︎ 🖨︎ 🖱︎ 🖲︎ 🖼︎ 🗂︎ 🗃︎ 🗄︎ 🗑︎ 🗒︎ 🗓︎ 🗜︎ 🗝︎ 🗞︎ 🗡︎ 🗣︎ 🗨︎ 🗯︎ 🗳︎ 🗺︎ 🛋︎ 🛍︎ 🛎︎ 🛏︎ 🛠︎ 🛡︎ 🛢︎ 🛣︎ 🛤︎ 🛥︎ 🛩︎ 🛰︎ 🛳︎ 0︎⃣ 1︎⃣ 2︎⃣ 3︎⃣ 4︎⃣ 5︎⃣ 6︎⃣ 7︎⃣ 8︎⃣ 9︎⃣ 🅰︎ 🅱︎ ℹ︎ Ⓜ︎ 🅾︎ 🅿︎ ™︎ 🈂︎ 🈷︎ ㊗︎ ㊙︎ ☺ ☹ ☠ ❣ ❤ 🕳 🗨 🗯 🖐 ✌ ☝ ✍ 👁 🕵 🕴 ⛷ 🏌 ⛹ 🏋 🗣 🐿 🕊 🕷 🕸 🏵 ☘ 🌶 🍽 🗺 🏔 ⛰ 🏕 🏖 🏜 🏝 🏞 🏟 🏛 🏗 🏘 🏚 ⛩ 🏙 ♨ 🏎 🏍 🛣 🛤 🛢 🛳 ⛴ 🛥 ✈ 🛩 🛰 🛎 ⏱ ⏲ 🕰 🌡 ☀ ☁ ⛈ 🌤 🌥 🌦 🌧 🌨 🌩 🌪 🌫 🌬 ☂ ⛱ ❄ ☃ ☄ 🎗 🎟 🎖 ⛸ 🕹 ♠ ♥ ♦ ♣ ♟ 🖼 🕶 🛍 ⛑ 🎙 🎚 🎛 ☎ 🖥 🖨 ⌨ 🖱 🖲 🎞 📽 🕯 🗞 🏷 ✉ 🗳 ✏ ✒ 🖋 🖊 🖌 🖍 🗂 🗒 🗓 🖇 ✂ 🗃 🗄 🗑 🗝 ⛏ ⚒ 🛠 🗡 ⚔ 🛡 ⚙ 🗜 ⚖ ⛓ ⚗ 🛏 🛋 ⚰ ⚱ ⚠ ☢ ☣ ⬆ ↗ ➡ ↘ ⬇ ↙ ⬅ ↖ ↕ ↔ ↩ ↪ ⤴ ⤵ ⚛ 🕉 ✡ ☸ ☯ ✝ ☦ ☪ ☮ ▶ ⏭ ⏯ ◀ ⏮ ⏸ ⏹ ⏺ ⏏ ♀ ♂ ⚕ ♾ ♻ ⚜ ☑ ✔ ✖ 〽 ✳ ✴ ❇ ‼ ⁉ 〰 © ® ™ #⃣ ⃣ 0⃣ 1⃣ 2⃣ 3⃣ 4⃣ 5⃣ 6⃣ 7⃣ 8⃣ 9⃣ 🅰 🅱 ℹ Ⓜ 🅾 🅿 🈂 🈷 ㊗ ㊙ ◼ ◻ ▫ ▪ 🏳 ☺️ ☹️ ☠️ ❣️ ❤️ 🕳️ 🗨️ 🗯️ 🖐️ ✌️ ☝️ ✍️ 👁️ 🕵️ 🕴️ ⛷️ 🏌️ ⛹️ 🏋️ 🗣️ 🐿️ 🕊️ 🕷️ 🕸️ 🏵️ ☘️ 🌶️ 🍽️ 🗺️ 🏔️ ⛰️ 🏕️ 🏖️ 🏜️ 🏝️ 🏞️ 🏟️ 🏛️ 🏗️ 🏘️ 🏚️ ⛩️ 🏙️ ♨️ 🏎️ 🏍️ 🛣️ 🛤️ 🛢️ 🛳️ ⛴️ 🛥️ ✈️ 🛩️ 🛰️ 🛎️ ⏱️ ⏲️ 🕰️ 🌡️ ☀️ ☁️ ⛈️ 🌤️ 🌥️ 🌦️ 🌧️ 🌨️ 🌩️ 🌪️ 🌫️ 🌬️ ☂️ ⛱️ ❄️ ☃️ ☄️ 🎗️ 🎟️ 🎖️ ⛸️ 🕹️ ♠️ ♥️ ♦️ ♣️ ♟️ 🖼️ 🕶️ 🛍️ ⛑️ 🎙️ 🎚️ 🎛️ ☎️ 🖥️ 🖨️ ⌨️ 🖱️ 🖲️ 🎞️ 📽️ 🕯️ 🗞️ 🏷️ ✉️ 🗳️ ✏️ ✒️ 🖋️ 🖊️ 🖌️ 🖍️ 🗂️ 🗒️ 🗓️ 🖇️ ✂️ 🗃️ 🗄️ 🗑️ 🗝️ ⛏️ ⚒️ 🛠️ 🗡️ ⚔️ 🛡️ ⚙️ 🗜️ ⚖️ ⛓️ ⚗️ 🛏️ 🛋️ ⚰️ ⚱️ ⚠️ ☢️ ☣️ ⬆️ ↗️ ➡️ ↘️ ⬇️ ↙️ ⬅️ ↖️ ↕️ ↔️ ↩️ ↪️ ⤴️ ⤵️ ⚛️ 🕉️ ✡️ ☸️ ☯️ ✝️ ☦️ ☪️ ☮️ ▶️ ⏭️ ⏯️ ◀️ ⏮️ ⏸️ ⏹️ ⏺️ ⏏️ ♀️ ♂️ ⚕️ ♾️ ♻️ ⚜️ ☑️ ✔️ ✖️ 〽️ ✳️ ✴️ ❇️ ‼️ ⁉️ 〰️ ©️ ®️ ™️ #️⃣ *️⃣ 0️⃣ 1️⃣ 2️⃣ 3️⃣ 4️⃣ 5️⃣ 6️⃣ 7️⃣ 8️⃣ 9️⃣ 🅰️ 🅱️ ℹ️ Ⓜ️ 🅾️ 🅿️ 🈂️ 🈷️ ㊗️ ㊙️ ◼️ ◻️ ▫️ ▪️ 🏳️😀 😃 😄 😁 😆 😅 🤣 😂 🙂 🙃 😉 😊 😇 🥰 😍 🤩 😘 😗 😚 😙 😋 😛 😜 🤪 😝 🤑 🤗 🤭 🤫 🤔 🤐 🤨 😐 😑 😶 😏 😒 🙄 😬 🤥 😌 😔 😪 🤤 😴 😷 🤒 🤕 🤢 🤮 🤧 🥵 🥶 🥴 😵 🤯 🤠 🥳 😎 🤓 🧐 😕 😟 🙁 😮 😯 😲 😳 🥺 😦 😧 😨 😰 😥 😢 😭 😱 😖 😣 😞 😓 😩 😫 😤 😡 😠 🤬 😈 👿 💀 💩 🤡 👹 👺 👻 👽 👾 🤖 😺 😸 😹 😻 😼 😽 🙀 😿 😾 🙈 🙉 🙊 💋 💌 💘 💝 💖 💗 💓 💞 💕 💟 💔 🧡 💛 💚 💙 💜 🖤 💯 💢 💥 💫 💦 💨 💣 💬 💭 💤 👋 🤚 ✋ 🖖 👌 🤞 🤟 🤘 🤙 👈 👉 👆 🖕 👇 👍 👎 ✊ 👊 🤛 🤜 👏 🙌 👐 🤲 🤝 🙏 💅 🤳 💪 🦵 🦶 👂 👃 🧠 🦷 🦴 👀 👅 👄 👶 🧒 👦 👧 🧑 👱 👨 🧔 👩 🧓 👴 👵 🙍 🙎 🙅 🙆 💁 🙋 🙇 🤦 🤷 👮 💂 👷 🤴 👸 👳 👲 🧕 🤵 👰 🤰 🤱 👼 🎅 🤶 🦸 🦹 🧙 🧚 🧛 🧜 🧝 🧞 🧟 💆 💇 🚶 🏃 💃 🕺 👯 🧖 🧗 🤺 🏇 🏂 🏄 🚣 🏊 🚴 🚵 🤸 🤼 🤽 🤾 🤹 🧘 🛀 🛌 👭 👫 👬 💏 💑 👪 👤 👥 👣 🦰 🦱 🦳 🦲 🐵 🐒 🦍 🐶 🐕 🐩 🐺 🦊 🦝 🐱 🐈 🦁 🐯 🐅 🐆 🐴 🐎 🦄 🦓 🦌 🐮 🐂 🐃 🐄 🐷 🐖 🐗 🐽 🐏 🐑 🐐 🐪 🐫 🦙 🦒 🐘 🦏 🦛 🐭 🐁 🐀 🐹 🐰 🐇 🦔 🦇 🐻 🐨 🐼 🦘 🦡 🐾 🦃 🐔 🐓 🐣 🐤 🐥 🐦 🐧 🦅 🦆 🦢 🦉 🦚 🦜 🐸 🐊 🐢 🦎 🐍 🐲 🐉 🦕 🦖 🐳 🐋 🐬 🐟 🐠 🐡 🦈 🐙 🐚 🐌 🦋 🐛 🐜 🐝 🐞 🦗 🦂 🦟 🦠 💐 🌸 💮 🌹 🥀 🌺 🌻 🌼 🌷 🌱 🌲 🌳 🌴 🌵 🌾 🌿 🍀 🍁 🍂 🍃 🍇 🍈 🍉 🍊 🍋 🍌 🍍 🥭 🍎 🍏 🍐 🍑 🍒 🍓 🥝 🍅 🥥 🥑 🍆 🥔 🥕 🌽 🥒 🥬 🥦 🍄 🥜 🌰 🍞 🥐 🥖 🥨 🥯 🥞 🧀 🍖 🍗 🥩 🥓 🍔 🍟 🍕 🌭 🥪 🌮 🌯 🥙 🥚 🍳 🥘 🍲 🥣 🥗 🍿 🧂 🥫 🍱 🍘 🍙 🍚 🍛 🍜 🍝 🍠 🍢 🍣 🍤 🍥 🥮 🍡 🥟 🥠 🥡 🦀 🦞 🦐 🦑 🍦 🍧 🍨 🍩 🍪 🎂 🍰 🧁 🥧 🍫 🍬 🍭 🍮 🍯 🍼 🥛 ☕ 🍵 🍶 🍾 🍷 🍸 🍹 🍺 🍻 🥂 🥃 🥤 🥢 🍴 🥄 🔪 🏺 🌍 🌎 🌏 🌐 🗾 🧭 🌋 🗻 🧱 🏠 🏡 🏢 🏣 🏤 🏥 🏦 🏨 🏩 🏪 🏫 🏬 🏭 🏯 🏰 💒 🗼 🗽 ⛪ 🕌 🕍 🕋 ⛲ ⛺ 🌁 🌃 🌄 🌅 🌆 🌇 🌉 🌌 🎠 🎡 🎢 💈 🎪 🚂 🚃 🚄 🚅 🚆 🚇 🚈 🚉 🚊 🚝 🚞 🚋 🚌 🚍 🚎 🚐 🚑 🚒 🚓 🚔 🚕 🚖 🚗 🚘 🚙 🚚 🚛 🚜 🛵 🚲 🛴 🛹 🚏 ⛽ 🚨 🚥 🚦 🛑 🚧 ⚓ ⛵ 🛶 🚤 🚢 🛫 🛬 💺 🚁 🚟 🚠 🚡 🚀 🛸 🧳 ⌛ ⏳ ⌚ ⏰ 🕛 🕧 🕐 🕜 🕑 🕝 🕒 🕞 🕓 🕟 🕔 🕠 🕕 🕡 🕖 🕢 🕗 🕣 🕘 🕤 🕙 🕥 🕚 🕦 🌑 🌒 🌓 🌔 🌕 🌖 🌗 🌘 🌙 🌚 🌛 🌜 🌝 🌞 ⭐ 🌟 🌠 ⛅ 🌀 🌈 🌂 ☔ ⚡ ⛄ 🔥 💧 🌊 🎃 🎄 🎆 🎇 🧨 ✨ 🎈 🎉 🎊 🎋 🎍 🎎 🎏 🎐 🎑 🧧 🎀 🎁 🎫 🏆 🏅 🥇 🥈 🥉 ⚽ ⚾ 🥎 🏀 🏐 🏈 🏉 🎾 🥏 🎳 🏏 🏑 🏒 🥍 🏓 🏸 🥊 🥋 🥅 ⛳ 🎣 🎽 🎿 🛷 🥌 🎯 🎱 🔮 🧿 🎮 🎰 🎲 🧩 🧸 🃏 🀄 🎴 🎭 🎨 🧵 🧶 👓 🥽 🥼 👔 👕 👖 🧣 🧤 🧥 🧦 👗 👘 👙 👚 👛 👜 👝 🎒 👞 👟 🥾 🥿 👠 👡 👢 👑 👒 🎩 🎓 🧢 📿 💄 💍 💎 🔇 🔈 🔉 🔊 📢 📣 📯 🔔 🔕 🎼 🎵 🎶 🎤 🎧 📻 🎷 🎸 🎹 🎺 🎻 🥁 📱 📲 📞 📟 📠 🔋 🔌 💻 💽 💾 💿 📀 🧮 🎥 🎬 📺 📷 📸 📹 📼 🔍 🔎 💡 🔦 🏮 📔 📕 📖 📗 📘 📙 📚 📓 📒 📃 📜 📄 📰 📑 🔖 💰 💴 💵 💶 💷 💸 💳 🧾 💹 💱 💲 📧 📨 📩 📤 📥 📦 📫 📪 📬 📭 📮 📝 💼 📁 📂 📅 📆 📇 📈 📉 📊 📋 📌 📍 📎 📏 📐 🔒 🔓 🔏 🔐 🔑 🔨 🔫 🏹 🔧 🔩 🔗 🧰 🧲 🧪 🧫 🧬 🔬 🔭 📡 💉 💊 🚪 🚽 🚿 🛁 🧴 🧷 🧹 🧺 🧻 🧼 🧽 🧯 🛒 🚬 🗿 🏧 🚮 🚰 ♿ 🚹 🚺 🚻 🚼 🚾 🛂 🛃 🛄 🛅 🚸 ⛔ 🚫 🚳 🚭 🚯 🚱 🚷 📵 🔞 🔃 🔄 🔙 🔚 🔛 🔜 🔝 🛐 🕎 🔯 ♈ ♉ ♊ ♋ ♌ ♍ ♎ ♏ ♐ ♑ ♒ ♓ ⛎ 🔀 🔁 🔂 ⏩ ⏪ 🔼 ⏫ 🔽 ⏬ 🎦 🔅 🔆 📶 📳 📴 🔱 📛 🔰 ⭕ ✅ ❌ ❎ ➕ ➖ ➗ ➰ ➿ ❓ ❔ ❕ ❗ 🔟 🔠 🔡 🔢 🔣 🔤 🆎 🆑 🆒 🆓 🆔 🆕 🆖 🆗 🆘 🆙 🆚 🈁 🈶 🈯 🉐 🈹 🈚 🈲 🉑 🈸 🈴 🈳 🈺 🈵 🔴 🔵 ⚪ ⚫ ⬜ ⬛ ◽ ◾ 🔶 🔷 🔸 🔹 🔺 🔻 💠 🔘 🔲 🔳 🏁 🚩 🎌 🏴svg🇦🇨 🇦🇩 🇦🇪 🇦🇫 🇦🇬 🇦🇮 🇦🇱 🇦🇲 🇦🇴 🇦🇶 🇦🇷 🇦🇸 🇦🇹 🇦🇺 🇦🇼 🇦🇽 🇦🇿 🇧🇦 🇧🇧 🇧🇩 🇧🇪 🇧🇫 🇧🇬 🇧🇭 🇧🇮 🇧🇯 🇧🇱 🇧🇲 🇧🇳 🇧🇴 🇧🇶 🇧🇷 🇧🇸 🇧🇹 🇧🇻 🇧🇼 🇧🇾 🇧🇿 🇨🇦 🇨🇨 🇨🇩 🇨🇫 🇨🇬 🇨🇭 🇨🇮 🇨🇰 🇨🇱 🇨🇲 🇨🇳 🇨🇴 🇨🇵 🇨🇷 🇨🇺 🇨🇻 🇨🇼 🇨🇽 🇨🇾 🇨🇿 🇩🇪 🇩🇬 🇩🇯 🇩🇰 🇩🇲 🇩🇴 🇩🇿 🇪🇦 🇪🇨 🇪🇪 🇪🇬 🇪🇭 🇪🇷 🇪🇸 🇪🇹 🇪🇺 🇫🇮 🇫🇯 🇫🇰 🇫🇲 🇫🇴 🇫🇷 🇬🇦 🇬🇧 🇬🇩 🇬🇪 🇬🇫 🇬🇬 🇬🇭 🇬🇮 🇬🇱 🇬🇲 🇬🇳 🇬🇵 🇬🇶 🇬🇷 🇬🇸 🇬🇹 🇬🇺 🇬🇼 🇬🇾 🇭🇰 🇭🇲 🇭🇳 🇭🇷 🇭🇹 🇭🇺 🇮🇨 🇮🇩 🇮🇪 🇮🇱 🇮🇲 🇮🇳 🇮🇴 🇮🇶 🇮🇷 🇮🇸 🇮🇹 🇯🇪 🇯🇲 🇯🇴 🇯🇵 🇰🇪 🇰🇬 🇰🇭 🇰🇮 🇰🇲 🇰🇳 🇰🇵 🇰🇷 🇰🇼 🇰🇾 🇰🇿 🇱🇦 🇱🇧 🇱🇨 🇱🇮 🇱🇰 🇱🇷 🇱🇸 🇱🇹 🇱🇺 🇱🇻 🇱🇾 🇲🇦 🇲🇨 🇲🇩 🇲🇪 🇲🇫 🇲🇬 🇲🇭 🇲🇰 🇲🇱 🇲🇲 🇲🇳 🇲🇴 🇲🇵 🇲🇶 🇲🇷 🇲🇸 🇲🇹 🇲🇺 🇲🇻 🇲🇼 🇲🇽 🇲🇾 🇲🇿 🇳🇦 🇳🇨 🇳🇪 🇳🇫 🇳🇬 🇳🇮 🇳🇱 🇳🇴 🇳🇵 🇳🇷 🇳🇺 🇳🇿 🇴🇲 🇵🇦 🇵🇪 🇵🇫 🇵🇬 🇵🇭 🇵🇰 🇵🇱 🇵🇲 🇵🇳 🇵🇷 🇵🇸 🇵🇹 🇵🇼 🇵🇾 🇶🇦 🇷🇪 🇷🇴 🇷🇸 🇷🇺 🇷🇼 🇸🇦 🇸🇧 🇸🇨 🇸🇩 🇸🇪 🇸🇬 🇸🇭 🇸🇮 🇸🇯 🇸🇰 🇸🇱 🇸🇲 🇸🇳 🇸🇴 🇸🇷 🇸🇸 🇸🇹 🇸🇻 🇸🇽 🇸🇾 🇸🇿 🇹🇦 🇹🇨 🇹🇩 🇹🇫 🇹🇬 🇹🇭 🇹🇯 🇹🇰 🇹🇱 🇹🇲 🇹🇳 🇹🇴 🇹🇷 🇹🇹 🇹🇻 🇹🇼 🇹🇿 🇺🇦 🇺🇬 🇺🇲 🇺🇳 🇺🇸 🇺🇾 🇺🇿 🇻🇦 🇻🇨 🇻🇪 🇻🇬 🇻🇮 🇻🇳 🇻🇺 🇼🇫 🇼🇸 🇽🇰 🇾🇪 🇾🇹 🇿🇦 🇿🇲 🇿🇼 🏴 🏴 🏴xml👋🏻 👋🏼 👋🏽 👋🏾 👋🏿 🤚🏻 🤚🏼 🤚🏽 🤚🏾 🤚🏿 🖐🏻 🖐🏼 🖐🏽 🖐🏾 🖐🏿 ✋🏻 ✋🏼 ✋🏽 ✋🏾 ✋🏿 🖖🏻 🖖🏼 🖖🏽 🖖🏾 🖖🏿 👌🏻 👌🏼 👌🏽 👌🏾 👌🏿 ✌🏻 ✌🏼 ✌🏽 ✌🏾 ✌🏿 🤞🏻 🤞🏼 🤞🏽 🤞🏾 🤞🏿 🤟🏻 🤟🏼 🤟🏽 🤟🏾 🤟🏿 🤘🏻 🤘🏼 🤘🏽 🤘🏾 🤘🏿 🤙🏻 🤙🏼 🤙🏽 🤙🏾 🤙🏿 👈🏻 👈🏼 👈🏽 👈🏾 👈🏿 👉🏻 👉🏼 👉🏽 👉🏾 👉🏿 👆🏻 👆🏼 👆🏽 👆🏾 👆🏿 🖕🏻 🖕🏼 🖕🏽 🖕🏾 🖕🏿 👇🏻 👇🏼 👇🏽 👇🏾 👇🏿 ☝🏻 ☝🏼 ☝🏽 ☝🏾 ☝🏿 👍🏻 👍🏼 👍🏽 👍🏾 👍🏿 👎🏻 👎🏼 👎🏽 👎🏾 👎🏿 ✊🏻 ✊🏼 ✊🏽 ✊🏾 ✊🏿 👊🏻 👊🏼 👊🏽 👊🏾 👊🏿 🤛🏻 🤛🏼 🤛🏽 🤛🏾 🤛🏿 🤜🏻 🤜🏼 🤜🏽 🤜🏾 🤜🏿 👏🏻 👏🏼 👏🏽 👏🏾 👏🏿 🙌🏻 🙌🏼 🙌🏽 🙌🏾 🙌🏿 👐🏻 👐🏼 👐🏽 👐🏾 👐🏿 🤲🏻 🤲🏼 🤲🏽 🤲🏾 🤲🏿 🙏🏻 🙏🏼 🙏🏽 🙏🏾 🙏🏿 ✍🏻 ✍🏼 ✍🏽 ✍🏾 ✍🏿 💅🏻 💅🏼 💅🏽 💅🏾 💅🏿 🤳🏻 🤳🏼 🤳🏽 🤳🏾 🤳🏿 💪🏻 💪🏼 💪🏽 💪🏾 💪🏿 🦵🏻 🦵🏼 🦵🏽 🦵🏾 🦵🏿 🦶🏻 🦶🏼 🦶🏽 🦶🏾 🦶🏿 👂🏻 👂🏼 👂🏽 👂🏾 👂🏿 👃🏻 👃🏼 👃🏽 👃🏾 👃🏿 👶🏻 👶🏼 👶🏽 👶🏾 👶🏿 🧒🏻 🧒🏼 🧒🏽 🧒🏾 🧒🏿 👦🏻 👦🏼 👦🏽 👦🏾 👦🏿 👧🏻 👧🏼 👧🏽 👧🏾 👧🏿 🧑🏻 🧑🏼 🧑🏽 🧑🏾 🧑🏿 👱🏻 👱🏼 👱🏽 👱🏾 👱🏿 👨🏻 👨🏼 👨🏽 👨🏾 👨🏿 🧔🏻 🧔🏼 🧔🏽 🧔🏾 🧔🏿 👩🏻 👩🏼 👩🏽 👩🏾 👩🏿 🧓🏻 🧓🏼 🧓🏽 🧓🏾 🧓🏿 👴🏻 👴🏼 👴🏽 👴🏾 👴🏿 👵🏻 👵🏼 👵🏽 👵🏾 👵🏿 🙍🏻 🙍🏼 🙍🏽 🙍🏾 🙍🏿 🙎🏻 🙎🏼 🙎🏽 🙎🏾 🙎🏿 🙅🏻 🙅🏼 🙅🏽 🙅🏾 🙅🏿 🙆🏻 🙆🏼 🙆🏽 🙆🏾 🙆🏿 💁🏻 💁🏼 💁🏽 💁🏾 💁🏿 🙋🏻 🙋🏼 🙋🏽 🙋🏾 🙋🏿 🙇🏻 🙇🏼 🙇🏽 🙇🏾 🙇🏿 🤦🏻 🤦🏼 🤦🏽 🤦🏾 🤦🏿 🤷🏻 🤷🏼 🤷🏽 🤷🏾 🤷🏿 👮🏻 👮🏼 👮🏽 👮🏾 👮🏿 🕵🏻 🕵🏼 🕵🏽 🕵🏾 🕵🏿 💂🏻 💂🏼 💂🏽 💂🏾 💂🏿 👷🏻 👷🏼 👷🏽 👷🏾 👷🏿 🤴🏻 🤴🏼 🤴🏽 🤴🏾 🤴🏿 👸🏻 👸🏼 👸🏽 👸🏾 👸🏿 👳🏻 👳🏼 👳🏽 👳🏾 👳🏿 👲🏻 👲🏼 👲🏽 👲🏾 👲🏿 🧕🏻 🧕🏼 🧕🏽 🧕🏾 🧕🏿 🤵🏻 🤵🏼 🤵🏽 🤵🏾 🤵🏿 👰🏻 👰🏼 👰🏽 👰🏾 👰🏿 🤰🏻 🤰🏼 🤰🏽 🤰🏾 🤰🏿 🤱🏻 🤱🏼 🤱🏽 🤱🏾 🤱🏿 👼🏻 👼🏼 👼🏽 👼🏾 👼🏿 🎅🏻 🎅🏼 🎅🏽 🎅🏾 🎅🏿 🤶🏻 🤶🏼 🤶🏽 🤶🏾 🤶🏿 🦸🏻 🦸🏼 🦸🏽 🦸🏾 🦸🏿 🦹🏻 🦹🏼 🦹🏽 🦹🏾 🦹🏿 🧙🏻 🧙🏼 🧙🏽 🧙🏾 🧙🏿 🧚🏻 🧚🏼 🧚🏽 🧚🏾 🧚🏿 🧛🏻 🧛🏼 🧛🏽 🧛🏾 🧛🏿 🧜🏻 🧜🏼 🧜🏽 🧜🏾 🧜🏿 🧝🏻 🧝🏼 🧝🏽 🧝🏾 🧝🏿 💆🏻 💆🏼 💆🏽 💆🏾 💆🏿 💇🏻 💇🏼 💇🏽 💇🏾 💇🏿 🚶🏻 🚶🏼 🚶🏽 🚶🏾 🚶🏿 🏃🏻 🏃🏼 🏃🏽 🏃🏾 🏃🏿 💃🏻 💃🏼 💃🏽 💃🏾 💃🏿 🕺🏻 🕺🏼 🕺🏽 🕺🏾 🕺🏿 🕴🏻 🕴🏼 🕴🏽 🕴🏾 🕴🏿 🧖🏻 🧖🏼 🧖🏽 🧖🏾 🧖🏿 🧗🏻 🧗🏼 🧗🏽 🧗🏾 🧗🏿 🏇🏻 🏇🏼 🏇🏽 🏇🏾 🏇🏿 🏂🏻 🏂🏼 🏂🏽 🏂🏾 🏂🏿 🏌🏻 🏌🏼 🏌🏽 🏌🏾 🏌🏿 🏄🏻 🏄🏼 🏄🏽 🏄🏾 🏄🏿 🚣🏻 🚣🏼 🚣🏽 🚣🏾 🚣🏿 🏊🏻 🏊🏼 🏊🏽 🏊🏾 🏊🏿 ⛹🏻 ⛹🏼 ⛹🏽 ⛹🏾 ⛹🏿 🏋🏻 🏋🏼 🏋🏽 🏋🏾 🏋🏿 🚴🏻 🚴🏼 🚴🏽 🚴🏾 🚴🏿 🚵🏻 🚵🏼 🚵🏽 🚵🏾 🚵🏿 🤸🏻 🤸🏼 🤸🏽 🤸🏾 🤸🏿 🤽🏻 🤽🏼 🤽🏽 🤽🏾 🤽🏿 🤾🏻 🤾🏼 🤾🏽 🤾🏾 🤾🏿 🤹🏻 🤹🏼 🤹🏽 🤹🏾 🤹🏿 🧘🏻 🧘🏼 🧘🏽 🧘🏾 🧘🏿 🛀🏻 🛀🏼 🛀🏽 🛀🏾 🛀🏿 🛌🏻 🛌🏼 🛌🏽 🛌🏾 🛌🏿 🏻 🏼 🏽 🏾 🏿👁️🗨️ 👱♂️ 👱🏻♂️ 👱🏼♂️ 👱🏽♂️ 👱🏾♂️ 👱🏿♂️ 👨🦰 👨🏻🦰 👨🏼🦰 👨🏽🦰 👨🏾🦰 👨🏿🦰 👨🦱 👨🏻🦱 👨🏼🦱 👨🏽🦱 👨🏾🦱 👨🏿🦱 👨🦳 👨🏻🦳 👨🏼🦳 👨🏽🦳 👨🏾🦳 👨🏿🦳 👨🦲 👨🏻🦲 👨🏼🦲 👨🏽🦲 👨🏾🦲 👨🏿🦲 👱♀️ 👱🏻♀️ 👱🏼♀️ 👱🏽♀️ 👱🏾♀️ 👱🏿♀️ 👩🦰 👩🏻🦰 👩🏼🦰 👩🏽🦰 👩🏾🦰 👩🏿🦰 👩🦱 👩🏻🦱 👩🏼🦱 👩🏽🦱 👩🏾🦱 👩🏿🦱 👩🦳 👩🏻🦳 👩🏼🦳 👩🏽🦳 👩🏾🦳 👩🏿🦳 👩🦲 👩🏻🦲 👩🏼🦲 👩🏽🦲 👩🏾🦲 👩🏿🦲 🙍♂️ 🙍🏻♂️ 🙍🏼♂️ 🙍🏽♂️ 🙍🏾♂️ 🙍🏿♂️ 🙍♀️ 🙍🏻♀️ 🙍🏼♀️ 🙍🏽♀️ 🙍🏾♀️ 🙍🏿♀️ 🙎♂️ 🙎🏻♂️ 🙎🏼♂️ 🙎🏽♂️ 🙎🏾♂️ 🙎🏿♂️ 🙎♀️ 🙎🏻♀️ 🙎🏼♀️ 🙎🏽♀️ 🙎🏾♀️ 🙎🏿♀️ 🙅♂️ 🙅🏻♂️ 🙅🏼♂️ 🙅🏽♂️ 🙅🏾♂️ 🙅🏿♂️ 🙅♀️ 🙅🏻♀️ 🙅🏼♀️ 🙅🏽♀️ 🙅🏾♀️ 🙅🏿♀️ 🙆♂️ 🙆🏻♂️ 🙆🏼♂️ 🙆🏽♂️ 🙆🏾♂️ 🙆🏿♂️ 🙆♀️ 🙆🏻♀️ 🙆🏼♀️ 🙆🏽♀️ 🙆🏾♀️ 🙆🏿♀️ 💁♂️ 💁🏻♂️ 💁🏼♂️ 💁🏽♂️ 💁🏾♂️ 💁🏿♂️ 💁♀️ 💁🏻♀️ 💁🏼♀️ 💁🏽♀️ 💁🏾♀️ 💁🏿♀️ 🙋♂️ 🙋🏻♂️ 🙋🏼♂️ 🙋🏽♂️ 🙋🏾♂️ 🙋🏿♂️ 🙋♀️ 🙋🏻♀️ 🙋🏼♀️ 🙋🏽♀️ 🙋🏾♀️ 🙋🏿♀️ 🙇♂️ 🙇🏻♂️ 🙇🏼♂️ 🙇🏽♂️ 🙇🏾♂️ 🙇🏿♂️ 🙇♀️ 🙇🏻♀️ 🙇🏼♀️ 🙇🏽♀️ 🙇🏾♀️ 🙇🏿♀️ 🤦♂️ 🤦🏻♂️ 🤦🏼♂️ 🤦🏽♂️ 🤦🏾♂️ 🤦🏿♂️ 🤦♀️ 🤦🏻♀️ 🤦🏼♀️ 🤦🏽♀️ 🤦🏾♀️ 🤦🏿♀️ 🤷♂️ 🤷🏻♂️ 🤷🏼♂️ 🤷🏽♂️ 🤷🏾♂️ 🤷🏿♂️ 🤷♀️ 🤷🏻♀️ 🤷🏼♀️ 🤷🏽♀️ 🤷🏾♀️ 🤷🏿♀️ 👨⚕️ 👨🏻⚕️ 👨🏼⚕️ 👨🏽⚕️ 👨🏾⚕️ 👨🏿⚕️ 👩⚕️ 👩🏻⚕️ 👩🏼⚕️ 👩🏽⚕️ 👩🏾⚕️ 👩🏿⚕️ 👨🎓 👨🏻🎓 👨🏼🎓 👨🏽🎓 👨🏾🎓 👨🏿🎓 👩🎓 👩🏻🎓 👩🏼🎓 👩🏽🎓 👩🏾🎓 👩🏿🎓 👨🏫 👨🏻🏫 👨🏼🏫 👨🏽🏫 👨🏾🏫 👨🏿🏫 👩🏫 👩🏻🏫 👩🏼🏫 👩🏽🏫 👩🏾🏫 👩🏿🏫 👨⚖️ 👨🏻⚖️ 👨🏼⚖️ 👨🏽⚖️ 👨🏾⚖️ 👨🏿⚖️ 👩⚖️ 👩🏻⚖️ 👩🏼⚖️ 👩🏽⚖️ 👩🏾⚖️ 👩🏿⚖️ 👨🌾 👨🏻🌾 👨🏼🌾 👨🏽🌾 👨🏾🌾 👨🏿🌾 👩🌾 👩🏻🌾 👩🏼🌾 👩🏽🌾 👩🏾🌾 👩🏿🌾 👨🍳 👨🏻🍳 👨🏼🍳 👨🏽🍳 👨🏾🍳 👨🏿🍳 👩🍳 👩🏻🍳 👩🏼🍳 👩🏽🍳 👩🏾🍳 👩🏿🍳 👨🔧 👨🏻🔧 👨🏼🔧 👨🏽🔧 👨🏾🔧 👨🏿🔧 👩🔧 👩🏻🔧 👩🏼🔧 👩🏽🔧 👩🏾🔧 👩🏿🔧 👨🏭 👨🏻🏭 👨🏼🏭 👨🏽🏭 👨🏾🏭 👨🏿🏭 👩🏭 👩🏻🏭 👩🏼🏭 👩🏽🏭 👩🏾🏭 👩🏿🏭 👨💼 👨🏻💼 👨🏼💼 👨🏽💼 👨🏾💼 👨🏿💼 👩💼 👩🏻💼 👩🏼💼 👩🏽💼 👩🏾💼 👩🏿💼 👨🔬 👨🏻🔬 👨🏼🔬 👨🏽🔬 👨🏾🔬 👨🏿🔬 👩🔬 👩🏻🔬 👩🏼🔬 👩🏽🔬 👩🏾🔬 👩🏿🔬 👨💻 👨🏻💻 👨🏼💻 👨🏽💻 👨🏾💻 👨🏿💻 👩💻 👩🏻💻 👩🏼💻 👩🏽💻 👩🏾💻 👩🏿💻 👨🎤 👨🏻🎤 👨🏼🎤 👨🏽🎤 👨🏾🎤 👨🏿🎤 👩🎤 👩🏻🎤 👩🏼🎤 👩🏽🎤 👩🏾🎤 👩🏿🎤 👨🎨 👨🏻🎨 👨🏼🎨 👨🏽🎨 👨🏾🎨 👨🏿🎨 👩🎨 👩🏻🎨 👩🏼🎨 👩🏽🎨 👩🏾🎨 👩🏿🎨 👨✈️ 👨🏻✈️ 👨🏼✈️ 👨🏽✈️ 👨🏾✈️ 👨🏿✈️ 👩✈️ 👩🏻✈️ 👩🏼✈️ 👩🏽✈️ 👩🏾✈️ 👩🏿✈️ 👨🚀 👨🏻🚀 👨🏼🚀 👨🏽🚀 👨🏾🚀 👨🏿🚀 👩🚀 👩🏻🚀 👩🏼🚀 👩🏽🚀 👩🏾🚀 👩🏿🚀 👨🚒 👨🏻🚒 👨🏼🚒 👨🏽🚒 👨🏾🚒 👨🏿🚒 👩🚒 👩🏻🚒 👩🏼🚒 👩🏽🚒 👩🏾🚒 👩🏿🚒 👮♂️ 👮🏻♂️ 👮🏼♂️ 👮🏽♂️ 👮🏾♂️ 👮🏿♂️ 👮♀️ 👮🏻♀️ 👮🏼♀️ 👮🏽♀️ 👮🏾♀️ 👮🏿♀️ 🕵️♂️ 🕵🏻♂️ 🕵🏼♂️ 🕵🏽♂️ 🕵🏾♂️ 🕵🏿♂️ 🕵️♀️ 🕵🏻♀️ 🕵🏼♀️ 🕵🏽♀️ 🕵🏾♀️ 🕵🏿♀️ 💂♂️ 💂🏻♂️ 💂🏼♂️ 💂🏽♂️ 💂🏾♂️ 💂🏿♂️ 💂♀️ 💂🏻♀️ 💂🏼♀️ 💂🏽♀️ 💂🏾♀️ 💂🏿♀️ 👷♂️ 👷🏻♂️ 👷🏼♂️ 👷🏽♂️ 👷🏾♂️ 👷🏿♂️ 👷♀️ 👷🏻♀️ 👷🏼♀️ 👷🏽♀️ 👷🏾♀️ 👷🏿♀️ 👳♂️ 👳🏻♂️ 👳🏼♂️ 👳🏽♂️ 👳🏾♂️ 👳🏿♂️ 👳♀️ 👳🏻♀️ 👳🏼♀️ 👳🏽♀️ 👳🏾♀️ 👳🏿♀️ 🦸♂️ 🦸🏻♂️ 🦸🏼♂️ 🦸🏽♂️ 🦸🏾♂️ 🦸🏿♂️ 🦸♀️ 🦸🏻♀️ 🦸🏼♀️ 🦸🏽♀️ 🦸🏾♀️ 🦸🏿♀️ 🦹♂️ 🦹🏻♂️ 🦹🏼♂️ 🦹🏽♂️ 🦹🏾♂️ 🦹🏿♂️ 🦹♀️ 🦹🏻♀️ 🦹🏼♀️ 🦹🏽♀️ 🦹🏾♀️ 🦹🏿♀️ 🧙♂️ 🧙🏻♂️ 🧙🏼♂️ 🧙🏽♂️ 🧙🏾♂️ 🧙🏿♂️ 🧙♀️ 🧙🏻♀️ 🧙🏼♀️ 🧙🏽♀️ 🧙🏾♀️ 🧙🏿♀️ 🧚♂️ 🧚🏻♂️ 🧚🏼♂️ 🧚🏽♂️ 🧚🏾♂️ 🧚🏿♂️ 🧚♀️ 🧚🏻♀️ 🧚🏼♀️ 🧚🏽♀️ 🧚🏾♀️ 🧚🏿♀️ 🧛♂️ 🧛🏻♂️ 🧛🏼♂️ 🧛🏽♂️ 🧛🏾♂️ 🧛🏿♂️ 🧛♀️ 🧛🏻♀️ 🧛🏼♀️ 🧛🏽♀️ 🧛🏾♀️ 🧛🏿♀️ 🧜♂️ 🧜🏻♂️ 🧜🏼♂️ 🧜🏽♂️ 🧜🏾♂️ 🧜🏿♂️ 🧜♀️ 🧜🏻♀️ 🧜🏼♀️ 🧜🏽♀️ 🧜🏾♀️ 🧜🏿♀️ 🧝♂️ 🧝🏻♂️ 🧝🏼♂️ 🧝🏽♂️ 🧝🏾♂️ 🧝🏿♂️ 🧝♀️ 🧝🏻♀️ 🧝🏼♀️ 🧝🏽♀️ 🧝🏾♀️ 🧝🏿♀️ 🧞♂️ 🧞♀️ 🧟♂️ 🧟♀️ 💆♂️ 💆🏻♂️ 💆🏼♂️ 💆🏽♂️ 💆🏾♂️ 💆🏿♂️ 💆♀️ 💆🏻♀️ 💆🏼♀️ 💆🏽♀️ 💆🏾♀️ 💆🏿♀️ 💇♂️ 💇🏻♂️ 💇🏼♂️ 💇🏽♂️ 💇🏾♂️ 💇🏿♂️ 💇♀️ 💇🏻♀️ 💇🏼♀️ 💇🏽♀️ 💇🏾♀️ 💇🏿♀️ 🚶♂️ 🚶🏻♂️ 🚶🏼♂️ 🚶🏽♂️ 🚶🏾♂️ 🚶🏿♂️ 🚶♀️ 🚶🏻♀️ 🚶🏼♀️ 🚶🏽♀️ 🚶🏾♀️ 🚶🏿♀️ 🏃♂️ 🏃🏻♂️ 🏃🏼♂️ 🏃🏽♂️ 🏃🏾♂️ 🏃🏿♂️ 🏃♀️ 🏃🏻♀️ 🏃🏼♀️ 🏃🏽♀️ 🏃🏾♀️ 🏃🏿♀️ 👯♂️ 👯♀️ 🧖♂️ 🧖🏻♂️ 🧖🏼♂️ 🧖🏽♂️ 🧖🏾♂️ 🧖🏿♂️ 🧖♀️ 🧖🏻♀️ 🧖🏼♀️ 🧖🏽♀️ 🧖🏾♀️ 🧖🏿♀️ 🧗♂️ 🧗🏻♂️ 🧗🏼♂️ 🧗🏽♂️ 🧗🏾♂️ 🧗🏿♂️ 🧗♀️ 🧗🏻♀️ 🧗🏼♀️ 🧗🏽♀️ 🧗🏾♀️ 🧗🏿♀️ 🏌️♂️ 🏌🏻♂️ 🏌🏼♂️ 🏌🏽♂️ 🏌🏾♂️ 🏌🏿♂️ 🏌️♀️ 🏌🏻♀️ 🏌🏼♀️ 🏌🏽♀️ 🏌🏾♀️ 🏌🏿♀️ 🏄♂️ 🏄🏻♂️ 🏄🏼♂️ 🏄🏽♂️ 🏄🏾♂️ 🏄🏿♂️ 🏄♀️ 🏄🏻♀️ 🏄🏼♀️ 🏄🏽♀️ 🏄🏾♀️ 🏄🏿♀️ 🚣♂️ 🚣🏻♂️ 🚣🏼♂️ 🚣🏽♂️ 🚣🏾♂️ 🚣🏿♂️ 🚣♀️ 🚣🏻♀️ 🚣🏼♀️ 🚣🏽♀️ 🚣🏾♀️ 🚣🏿♀️ 🏊♂️ 🏊🏻♂️ 🏊🏼♂️ 🏊🏽♂️ 🏊🏾♂️ 🏊🏿♂️ 🏊♀️ 🏊🏻♀️ 🏊🏼♀️ 🏊🏽♀️ 🏊🏾♀️ 🏊🏿♀️ ⛹️♂️ ⛹🏻♂️ ⛹🏼♂️ ⛹🏽♂️ ⛹🏾♂️ ⛹🏿♂️ ⛹️♀️ ⛹🏻♀️ ⛹🏼♀️ ⛹🏽♀️ ⛹🏾♀️ ⛹🏿♀️ 🏋️♂️ 🏋🏻♂️ 🏋🏼♂️ 🏋🏽♂️ 🏋🏾♂️ 🏋🏿♂️ 🏋️♀️ 🏋🏻♀️ 🏋🏼♀️ 🏋🏽♀️ 🏋🏾♀️ 🏋🏿♀️ 🚴♂️ 🚴🏻♂️ 🚴🏼♂️ 🚴🏽♂️ 🚴🏾♂️ 🚴🏿♂️ 🚴♀️ 🚴🏻♀️ 🚴🏼♀️ 🚴🏽♀️ 🚴🏾♀️ 🚴🏿♀️ 🚵♂️ 🚵🏻♂️ 🚵🏼♂️ 🚵🏽♂️ 🚵🏾♂️ 🚵🏿♂️ 🚵♀️ 🚵🏻♀️ 🚵🏼♀️ 🚵🏽♀️ 🚵🏾♀️ 🚵🏿♀️ 🤸♂️ 🤸🏻♂️ 🤸🏼♂️ 🤸🏽♂️ 🤸🏾♂️ 🤸🏿♂️ 🤸♀️ 🤸🏻♀️ 🤸🏼♀️ 🤸🏽♀️ 🤸🏾♀️ 🤸🏿♀️ 🤼♂️ 🤼♀️ 🤽♂️ 🤽🏻♂️ 🤽🏼♂️ 🤽🏽♂️ 🤽🏾♂️ 🤽🏿♂️ 🤽♀️ 🤽🏻♀️ 🤽🏼♀️ 🤽🏽♀️ 🤽🏾♀️ 🤽🏿♀️ 🤾♂️ 🤾🏻♂️ 🤾🏼♂️ 🤾🏽♂️ 🤾🏾♂️ 🤾🏿♂️ 🤾♀️ 🤾🏻♀️ 🤾🏼♀️ 🤾🏽♀️ 🤾🏾♀️ 🤾🏿♀️ 🤹♂️ 🤹🏻♂️ 🤹🏼♂️ 🤹🏽♂️ 🤹🏾♂️ 🤹🏿♂️ 🤹♀️ 🤹🏻♀️ 🤹🏼♀️ 🤹🏽♀️ 🤹🏾♀️ 🤹🏿♀️ 🧘♂️ 🧘🏻♂️ 🧘🏼♂️ 🧘🏽♂️ 🧘🏾♂️ 🧘🏿♂️ 🧘♀️ 🧘🏻♀️ 🧘🏼♀️ 🧘🏽♀️ 🧘🏾♀️ 🧘🏿♀️ 👩❤️💋👨 👨❤️💋👨 👩❤️💋👩 👩❤️👨 👨❤️👨 👩❤️👩 👨👩👦 👨👩👧 👨👩👧👦 👨👩👦👦 👨👩👧👧 👨👨👦 👨👨👧 👨👨👧👦 👨👨👦👦 👨👨👧👧 👩👩👦 👩👩👧 👩👩👧👦 👩👩👦👦 👩👩👧👧 👨👦 👨👦👦 👨👧 👨👧👦 👨👧👧 👩👦 👩👦👦 👩👧 👩👧👦 👩👧👧 🏳️🌈 🏴☠️ 🌀🌁🌂🌃🌄🌅🌆🌇🌈🌉🌊🌋🌌🌍🌎🌏 🌐🌑🌒🌓🌔🌕🌖🌗🌘🌙🌚🌛🌜🌝🌞🌟 🌠🌡🌢🌣🌤🌥🌦🌧🌨🌩🌪🌫🌬🌭🌮🌯 🌰🌱🌲🌳🌴🌵🌶🌷🌸🌹🌺🌻🌼🌽🌾🌿 🍀🍁🍂🍃🍄🍅🍆🍇🍈🍉🍊🍋🍌🍍🍎🍏 🍐🍑🍒🍓🍔🍕🍖🍗🍘🍙🍚🍛🍜🍝🍞🍟 🍠🍡🍢🍣🍤🍥🍦🍧🍨🍩🍪🍫🍬🍭🍮🍯 🍰🍱🍲🍳🍴🍵🍶🍷🍸🍹🍺🍻🍼🍽🍾🍿 🎀🎁🎂🎃🎄🎅🎆🎇🎈🎉🎊🎋🎌🎍🎎🎏 🎐🎑🎒🎓🎔🎕🎖🎗🎘🎙🎚🎛🎜🎝🎞🎟 🎠🎡🎢🎣🎤🎥🎦🎧🎨🎩🎪🎫🎬🎭🎮🎯 🎰🎱🎲🎳🎴🎵🎶🎷🎸🎹🎺🎻🎼🎽🎾🎿 🏀🏁🏂🏃🏄🏅🏆🏇🏈🏉🏊🏋🏌🏍🏎🏏 🏐🏑🏒🏓🏔🏕🏖🏗🏘🏙🏚🏛🏜🏝🏞🏟 🏠🏡🏢🏣🏤🏥🏦🏧🏨🏩🏪🏫🏬🏭🏮🏯 🏰🏱🏲🏳🏴🏵🏶🏷🏸🏹🏺🏻🏼🏽🏾🏿 🐀🐁🐂🐃🐄🐅🐆🐇🐈🐉🐊🐋🐌🐍🐎🐏 🐐🐑🐒🐓🐔🐕🐖🐗🐘🐙🐚🐛🐜🐝🐞🐟 🐠🐡🐢🐣🐤🐥🐦🐧🐨🐩🐪🐫🐬🐭🐮🐯 🐰🐱🐲🐳🐴🐵🐶🐷🐸🐹🐺🐻🐼🐽🐾🐿 👀👁👂👃👄👅👆👇👈👉👊👋👌👍👎👏 👐👑👒👓👔👕👖👗👘👙👚👛👜👝👞👟 👠👡👢👣👤👥👦👧👨👩👪👫👬👭👮👯 👰👱👲👳👴👵👶👷👸👹👺👻👼👽👾👿 💀💁💂💃💄💅💆💇💈💉💊💋💌💍💎💏 💐💑💒💓💔💕💖💗💘💙💚💛💜💝💞💟 💠💡💢💣💤💥💦💧💨💩💪💫💬💭💮💯 💰💱💲💳💴💵💶💷💸💹💺💻💼💽💾💿 📀📁📂📃📄📅📆📇📈📉📊📋📌📍📎📏 📐📑📒📓📔📕📖📗📘📙📚📛📜📝📞📟 📠📡📢📣📤📥📦📧📨📩📪📫📬📭📮📯 📰📱📲📳📴📵📶📷📸📹📺📻📼📽📾📿 🔀🔁🔂🔃🔄🔅🔆🔇🔈🔉🔊🔋🔌🔍🔎🔏 🔐🔑🔒🔓🔔🔕🔖🔗🔘🔙🔚🔛🔜🔝🔞🔟 🔠🔡🔢🔣🔤🔥🔦🔧🔨🔩🔪🔫🔬🔭🔮🔯 🔰🔱🔲🔳🔴🔵🔶🔷🔸🔹🔺🔻🔼🔽🔾🔿 🕀🕁🕂🕃🕄🕅🕆🕇🕈🕉🕊🕋🕌🕍🕎🕏 🕐🕑🕒🕓🕔🕕🕖🕗🕘🕙🕚🕛🕜🕝🕞🕟 🕠🕡🕢🕣🕤🕥🕦🕧🕨🕩🕪🕫🕬🕭🕮🕯 🕰🕱🕲🕳🕴🕵🕶🕷🕸🕹🕺🕻🕼🕽🕾🕿 🖀🖁🖂🖃🖄🖅🖆🖇🖈🖉🖊🖋🖌🖍🖎🖏 🖐🖑🖒🖓🖔🖕🖖🖗🖘🖙🖚🖛🖜🖝🖞🖟 🖠🖡🖢🖣🖤🖥🖦🖧🖨🖩🖪🖫🖬🖭🖮🖯 🖰🖱🖲🖳🖴🖵🖶🖷🖸🖹🖺🖻🖼🖽🖾🖿 🗀🗁🗂🗃🗄🗅🗆🗇🗈🗉🗊🗋🗌🗍🗎🗏 🗐🗑🗒🗓🗔🗕🗖🗗🗘🗙🗚🗛🗜🗝🗞🗟 🗠🗡🗢🗣🗤🗥🗦🗧🗨🗩🗪🗫🗬🗭🗮🗯 🗰🗱🗲🗳🗴🗵🗶🗷🗸🗹🗺🗻🗼🗽🗾🗿 😀😁😂😃😄😅😆😇😈😉😊😋😌😍😎😏 😐😑😒😓😔😕😖😗😘😙😚😛😜😝😞😟 😠😡😢😣😤😥😦😧😨😩😪😫😬😭😮😯 😰😱😲😳😴😵😶😷😸😹😺😻😼😽😾😿 🙀🙁🙂🙃🙄🙅🙆🙇🙈🙉🙊🙋🙌🙍🙎🙏 🚀🚁🚂🚃🚄🚅🚆🚇🚈🚉🚊🚋🚌🚍🚎🚏 🚐🚑🚒🚓🚔🚕🚖🚗🚘🚙🚚🚛🚜🚝🚞🚟 🚠🚡🚢🚣🚤🚥🚦🚧🚨🚩🚪🚫🚬🚭🚮🚯 🚰🚱🚲🚳🚴🚵🚶🚷🚸🚹🚺🚻🚼🚽🚾🚿 🛀🛁🛂🛃🛄🛅🛆🛇🛈🛉🛊🛋🛌🛍🛎🛏 🛐🛑🛒🛓🛔🛕🛖🛗🛜🛝🛞🛟 🛠🛡🛢🛣🛤🛥🛦🛧🛨🛩🛪🛫🛬 🛰🛱🛲🛳🛴🛵🛶🛷🛸🛹🛺🛻🛼 🤐🤑🤒🤓🤔🤕🤖🤗🤘🤙🤚🤛🤜🤝🤞🤟 🤠🤡🤢🤣🤤🤥🤦🤧🤨🤩🤪🤫🤬🤭🤮🤯 🤰🤱🤲🤳🤴🤵🤶🤷🤸🤹🤺🤻🤼🤽🤾🤿 🥀🥁🥂🥃🥄🥅🥆🥇🥈🥉🥊🥋🥌🥍🥎🥏 🥐🥑🥒🥓🥔🥕🥖🥗🥘🥙🥚🥛🥜🥝🥞🥟 🥠🥡🥢🥣🥤🥥🥦🥧🥨🥩🥪🥫🥬🥭🥮🥯 🥰🥱🥲🥳🥴🥵🥶🥷🥸🥹🥺🥻🥼🥽🥾🥿 🦀🦁🦂🦃🦄🦅🦆🦇🦈🦉🦊🦋🦌🦍🦎🦏 🦐🦑🦒🦓🦔🦕🦖🦗🦘🦙🦚🦛🦜🦝🦞🦟 🦠🦡🦢🦣🦤🦥🦦🦧🦨🦩🦪🦫🦬🦭🦮🦯 🦰🦱🦲🦳🦴🦵🦶🦷🦸🦹🦺🦻🦼🦽🦾🦿 🧀🧁🧂🧃🧄🧅🧆🧇🧈🧉🧊🧋🧌🧍🧎🧏 🧐🧑🧒🧓🧔🧕🧖🧗🧘🧙🧚🧛🧜🧝🧞🧟 🧠🧡🧢🧣🧤🧥🧦🧧🧨🧩🧪🧫🧬🧭🧮🧯 🧰🧱🧲🧳🧴🧵🧶🧷🧸🧹🧺🧻🧼🧽🧾🧿 ☀☁☂☃☄★☆☇☈☉☊☋☌☍☎☏ ☐☑☒☓☔☕☖☗☘☙☚☛☜☝☞☟ ☠☡☢☣☤☥☦☧☨☩☪☫☬☭☮☯ ☰☱☲☳☴☵☶☷☸☹☺☻☼☽☾☿ ♀♁♂♃♄♅♆♇♈♉♊♋♌♍♎♏ ♐♑♒♓♔♕♖♗♘♙♚♛♜♝♞♟ ♠♡♢♣♤♥♦♧♨♩♪♫♬♭♮♯ ♰♱♲♳♴♵♶♷♸♹♺♻♼♽♾♿ ⚀⚁⚂⚃⚄⚅⚆⚇⚈⚉⚊⚋⚌⚍⚎⚏ ⚐⚑⚒⚓⚔⚕⚖⚗⚘⚙⚚⚛⚜⚝⚞⚟ ⚠⚡⚢⚣⚤⚥⚦⚧⚨⚩⚪⚫⚬⚭⚮⚯ ⚰⚱⚲⚳⚴⚵⚶⚷⚸⚹⚺⚻⚼⚽⚾⚿ ⛀⛁⛂⛃⛄⛅⛆⛇⛈⛉⛊⛋⛌⛍⛎⛏ ⛐⛑⛒⛓⛔⛕⛖⛗⛘⛙⛚⛛⛜⛝⛞⛟ ⛠⛡⛢⛣⛤⛥⛦⛧⛨⛩⛪⛫⛬⛭⛮⛯ ⛰⛱⛲⛳⛴⛵⛶⛷⛸⛹⛺⛻⛼⛽⛾⛿ ✀✁✂✃✄✅✆✇✈✉✊✋✌✍✎✏ ✐✑✒✓✔✕✖✗✘✙✚✛✜✝✞✟ ✠✡✢✣✤✥✦✧✨✩✪✫✬✭✮✯ ✰✱✲✳✴✵✶✷✸✹✺✻✼✽✾✿ ❀❁❂❃❄❅❆❇❈❉❊❋❌❍❎❏ ❐❑❒❓❔❕❖❗❘❙❚❛❜❝❞❟ ❠❡❢❣❤❥❦❧❨❩❪❫❬❭❮❯ ❰❱❲❳❴❵❶❷❸❹❺❻❼❽❾❿ ➀➁➂➃➄➅➆➇➈➉➊➋➌➍➎➏ ➐➑➒➓➔➕➖➗➘➙➚➛➜➝➞➟ ➠➡➢➣➤➥➦➧➨➩➪➫➬➭➮➯ ➰➱➲➳➴➵➶➷➸➹➺➻➼➽➾➿Smileys & Emotion face-smiling 😀 😃 😄 😁 😆 😅 🤣 😂 🙂 🙃 😉 😊 😇 face-affection 🥰 😍 🤩 😘 😗 ☺ 😚 😙 face-tongue 😋 😛 😜 🤪 😝 🤑 face-hand 🤗 🤭 🤫 🤔 face-neutral-skeptical 🤐 🤨 😐 😑 😶 😏 😒 🙄 😬 🤥 face-sleepy 😌 😔 😪 🤤 😴 face-unwell 😷 🤒 🤕 🤢 🤮 🤧 🥵 🥶 🥴 😵 🤯 face-hat 🤠 🥳 face-glasses 😎 🤓 🧐 face-concerned 😕 😟 🙁 ☹ 😮 😯 😲 😳 🥺 😦 😧 😨 😰 😥 😢 😭 😱 😖 😣 😞 😓 😩 😫 🥱 face-negative 😤 😡 😠 🤬 😈 👿 💀 ☠ face-costume🤡 👹 👺 👻 👽 👾 🤖 cat-face 😺 😸 😹 😻 😼 😽 🙀 😿 😾 monkey-face 🙈 🙉 🙊 emotion 💋 💌 💘 💝 💖 💗 💓 💞 💕 💟 ❣ 💔 ❤ 🧡 💛 💚 💙 💜 🤎 🖤 🤍 💯 💢 💥 💫 💦 💨 🕳 💣 💬 👁️🗨️ 🗨 🗯 💭 💤 People & Body hand-fingers-open🤚 🖐 ✋ 🖖 hand-fingers-partial 👌 🤏 ✌ 🤞 🤟 🤘 🤙 hand-single-finger 👈 👉 👆 🖕 👇 ☝ hand-fingers-closed 👍 👎 ✊ 👊 🤛 🤜 hands 👏 🙌 👐 🤲 🤝 🙏 hand-prop ✍ 💅 🤳 body-parts 💪 🦾 🦿 🦵 🦶 👂 🦻 🧠 🦷 🦴 👀 👁 👅 👄 person 👶 🧒 👦 👧 🧑 👱 👨 🧔 👱♂️ 👨🦰 👨🦱 👨🦳 👨🦲 👩 👱♀️ 👩🦰 👩🦱 👩🦳 👩🦲 🧓 👴 👵 person-gesture 🙍 🙍♂️ 🙍♀️ 🙎 🙎♂️ 🙎♀️ 🙅 🙅♂️ 🙅♀️ 🙆 🙆♂️ 🙆♀️ 💁 💁♂️ 💁♀️ 🙋 🙋♂️ 🙋♀️ 🧏 🧏♂️ 🧏♀️ 🙇 🙇♂️ 🙇♀️ 🤦 🤦♂️ 🤦♀️ 🤷 🤷♂️ 🤷♀️ person-role 👨⚕️ 👩⚕️ 👨🎓 👩🎓 👨🏫 👩🏫 👨⚖️ 👩⚖️ 👨🌾 👩🌾 👨🍳 👩🍳 👨🔧 👩🔧 👨🏭 👩🏭 👨💼 👩💼 👨🔬 👩🔬 👨💻 👩💻 👨🎤 👩🎤 👨🎨 👩🎨 👨✈️ 👩✈️ 👨🚀 👩🚀 👨🚒 👩🚒 👮 👮♂️ 👮♀️ 🕵 🕵️♂️ 🕵️♀️ 💂 💂♂️ 💂♀️ 👷 👷♂️ 👷♀️ 🤴 👸 👳 👳♂️ 👳♀️ 👲 🧕 🤵 👰 🤰 🤱 person-fantasy 👼 🎅 🤶 🦸 🦸♂️ 🦸♀️ 🦹 🦹♂️ 🦹♀️ 🧙 🧙♂️ 🧙♀️ 🧚 🧚♂️ 🧚♀️ 🧛 🧛♂️ 🧛♀️ 🧜 🧜♂️ 🧜♀️ 🧝 🧝♂️ 🧝♀️ 🧞 🧞♂️ 🧞♀️ 🧟 🧟♂️ 🧟♀️ person-activity 💆 💆♂️ 💆♀️ 💇 💇♂️ 💇♀️ 🚶 🚶♂️ 🚶♀️ 🧍 🧍♂️ 🧍♀️ 🧎 🧎♂️ 🧎♀️ 👨🦯 👩🦯 👨🦼 👩🦼 👨🦽 👩🦽 🏃 🏃♂️ 🏃♀️ 💃 🕺 🕴 👯 👯♂️ 👯♀️ 🧖 🧖♂️ 🧖♀️ 🧗 🧗♂️ 🧗♀️ person-sport 🤺 🏇 ⛷ 🏂 🏌 🏌️♂️ 🏌️♀️ 🏄 🏄♂️ 🏄♀️ 🚣 🚣♂️ 🚣♀️ 🏊 🏊♂️ 🏊♀️ ⛹ ⛹️♂️ ⛹️♀️ 🏋 🏋️♂️ 🏋️♀️ 🚴 🚴♂️ 🚴♀️ 🚵 🚵♂️ 🚵♀️ 🤸 🤸♂️ 🤸♀️ 🤼 🤼♂️ 🤼♀️ 🤽 🤽♂️ 🤽♀️ 🤾 🤾♂️ 🤾♀️ 🤹 🤹♂️ 🤹♀️ person-resting 🧘 🧘♂️ 🧘♀️ 🛀 🛌 family 🧑🤝🧑 👭 👫 👬 💏 👩❤️💋👨 👨❤️💋👨 👩❤️💋👩 💑 👩❤️👨 👨❤️👨 👩❤️👩 👪 👨👩👦 👨👩👧 👨👩👧👦 👨👩👦👦 👨👩👧👧 👨👨👦 👨👨👧 👨👨👧👦 👨👨👦👦 👨👨👧👧 👩👩👦 👩👩👧 👩👩👧👦 👩👩👦👦 👩👩👧👧 👨👦 👨👦👦 👨👧 👨👧👦 👨👧👧 👩👦 👩👦👦 👩👧 👩👧👦 👩👧👧 person-symbol 🗣 👤 👥 👣 Component skin-tone 🏻 🏼 🏽 🏾 🏿 hair-style 🦰 🦱 🦳 🦲 Animals & Nature animal-mammal 🐵 🐒 🦍 🦧 🐕 🦮 🐕🦺 🐩 🐺 🦊 🦝 🐱 🐈 🦁 🐯 🐅 🐆 🦄 🦓 🦌 🐂 🐃 🐄 🐷 🐖 🐗 🐽 🐏 🐑 🐐 🐪 🐫 🦙 🦒 🐘 🦏 🦛 🐭 🐁 🐀 🐹 🐰 🐇 🐿 🦔 🦇 🐨 🐼 🦥 🦦 🦨 🦘 🦡 🐾 animal-bird 🦃 🐓 🐣 🐤 🐥 🐦 🐧 🕊 🦅 🦆 🦢 🦉 🦩 🦚 🦜 animal-amphibian 🐸 animal-reptile 🐊 🦎 🐍 🐲 🐉 🦕 🦖 animal-marine 🐳 🐋 🐬 🐟 🐡 🦈 🐙 🐚 animal-bug 🐌 🦋 🐜 🐝 🐞 🦗 🕷 🕸 🦂 🦟 🦠 plant-flower 💐 🌸 💮 🏵 🌹 🥀 🌺 🌻 🌼 🌷 plant-other 🌱 🌲 🌳 🌴 🌵 🌾 🌿 ☘ 🍀 🍁 🍂 🍃 Food & Drink food-fruit 🍇 🍈 🍉 🍊 🍋 🍌 🍍 🥭 🍎 🍏 🍑 🍒 🍓 🥝 🍅 🥥 food-vegetable 🥑 🍆 🥔 🥕 🌽 🌶 🥒 🥬 🥦 🧄 🧅 🍄 🥜 🌰 food-prepared 🍞 🥐 🥖 🥨 🥯 🥞 🧇 🧀 🍖 🍗 🥩 🥓 🍔 🍟 🍕 🌭 🥪 🌮 🌯 🥙 🧆 🥚 🍳 🥘 🍲 🥣 🥗 🍿 🧈 🧂 🥫 food-asian 🍱 🍘 🍙 🍚 🍛 🍜 🍝 🍠 🍢 🍣 🍤 🍥 🥮 🍡 🥟 🥠 🥡 food-marine 🦀 🦞 🦐 🦑 🦪 food-sweet 🍦 🍧 🍨 🍩 🍪 🎂 🍰 🧁 🥧 🍫 🍬 🍭 🍮 🍯 drink 🍼 🥛 ☕ 🍵 🍶 🍾 🍷 🍸 🍹 🥂 🥃 🥤 🧃 🧉 🧊 dishware 🥢 🍽 🍴 🥄 🔪 🏺 Travel & Places place-map 🌍 🌎 🌏 🌐 🗺 🗾 🧭 place-geographic 🏔 ⛰ 🌋 🗻 🏕 🏖 🏜 🏝 🏞 place-building 🏟 🏛 🏗 🧱 🏘 🏚 🏠 🏡 🏢 🏣 🏤 🏥 🏦 🏨 🏩 🏪 🏫 🏬 🏭 🏯 🏰 💒 🗽 place-religious ⛪ 🕌 🛕 🕍 ⛩ 🕋 place-other ⛲ ⛺ 🌁 🌃 🏙 🌄 🌅 🌆 🌇 🌉 ♨ 🎠 🎡 🎢 💈 🎪 transport-ground 🚂 🚃 🚄 🚅 🚆 🚇 🚈 🚉 🚊 🚝 🚞 🚋 🚌 🚍 🚎 🚐 🚑 🚒 🚓 🚔 🚕 🚖 🚗 🚘 🚙 🚚 🚛 🚜 🏎 🏍 🛵 🦽 🦼 🛺 🚲 🛴 🛹 🚏 🛣 🛤 🛢 ⛽ 🚨 🚥 🚦 🛑 🚧 transport-water ⚓ ⛵ 🛶 🚤 🛳 ⛴ 🛥 🚢 transport-air ✈ 🛩 🛫 🛬 🪂 💺 🚁 🚟 🚠 🚡 🛰 🚀 🛸 hotel 🛎 🧳 time ⌛ ⏳ ⌚ ⏰ ⏱ ⏲ 🕰 🕛 🕧 🕐 🕜 🕑 🕝 🕒 🕞 🕓 🕟 🕔 🕠 🕕 🕡 🕖 🕢 🕗 🕣 🕘 🕤 🕙 🕥 🕚 🕦 sky & weather 🌑 🌒 🌓 🌔 🌕 🌖 🌗 🌘 🌙 🌚 🌛 🌜 🌡 ☀ 🌝 🌞 🪐 ⭐ 🌟 🌠 🌌 ☁ ⛅ ⛈ 🌤 🌥 🌦 🌧 🌨 🌩 🌪 🌫 🌬 🌀 🌈 🌂 ☂ ☔ ⛱ ⚡ ❄ ☃ ⛄ ☄ * 💧 🌊 Activities event 🎃 🎄 🎆 🎇 🧨 ✨ 🎈 🎉 🎊 🎋 🎍 🎎 🎏 🎐 🎑 🧧 🎀 🎁 🎗 🎟 🎫 award-medal 🎖 🏆 🏅 🥇 🥈 🥉 sport⚾ 🥎 🏐 🏈 🏉 🎾 🥏 🎳 🏏 🏑 🏒 🥍 🏓 🏸 🥊 🥋 🥅 ⛳ ⛸ 🎣 🤿 🎽 🎿 🛷 🥌 game 🎯 🪀 🪁 🎱 🔮 🧿 🎮 🕹 🎰 🎲 🧩 🧸 ♠ ♥ ♦ ♣ ♟ 🃏 🀄 🎴 arts & crafts 🎭 🖼 🎨 🧵 🧶 Objects clothing 👓 🕶 🥽 🥼 🦺 👔 👕 👖 🧣 🧤 🧥 🧦 👗 👘 🥻 🩱 🩲 🩳 👙 👚 👛 👜 👝 🛍 🎒 👞 🥾 🥿 👠 👡 🩰 👢 👑 👒 🎩 🎓 🧢 ⛑ 📿 💄 💍 💎 sound 🔇 🔈 🔉 🔊 📢 📣 📯 🔔 🔕 music 🎼 🎵 🎶 🎙 🎚 🎛 🎤 🎧 📻 musical-instrument 🎷 🎸 🎹 🎺 🎻 🪕 🥁 phone 📱 📲 ☎ 📞 📟 📠 computer 🔋 🔌 💻 🖥 🖨 ⌨ 🖱 🖲 💽 💾 💿 📀 🧮 light & video 🎥 🎞 📽 🎬 📺 📷 📸 📹 📼 🔍 🔎 🕯 💡 🔦 🏮 🪔 book-paper 📔 📕 📖 📗 📘 📙 📚 📓 📒 📃 📜 📄 📰 🗞 📑 🔖 🏷 money 💰 💴 💵 💶 💷 💸 💳 🧾 💹 💱 💲 mail ✉ 📧 📨 📩 📤 📥 📦 📫 📪 📬 📭 📮 🗳 writing ✏ ✒ 🖋 🖊 🖌 🖍 📝 office 💼 📁 📂 🗂 📅 📆 🗒 🗓 📇 📈 📉 📊 📋 * 📍 📎 🖇 📏 📐 ✂ 🗃 🗄 🗑 lock 🔒 🔓 🔏 🔐 🔑 🗝 tool🪓 ⛏ ⚒ 🛠 🗡 ⚔ 🔫 🏹 🛡 🔧 🔩 ⚙ 🗜 ⚖ 🦯 🔗 ⛓ 🧰 🧲 science ⚗ 🧪 🧫 🧬 🔬 🔭 📡 medical🩸 💊 🩹 🩺 household 🚪 🛏 🛋 🪑 🚽 🚿 🛁 🪒 🧴 🧷 🧹 🧺 🧻 🧼 🧽 🧯 🛒 other-object 🚬 ⚰ ⚱ 🗿 Symbols transport-sign 🏧 🚮 🚰 ♿ 🚹 🚺 🚻 🚼 🚾 🛂 🛃 🛄 🛅 warning ⚠ 🚸 ⛔ 🚫 🚳 🚭 🚯 🚱 🚷 📵 🔞 ☢ ☣ arrow ⬆ ↗ ➡ ↘ ⬇ ↙ ⬅ ↖ ↕ ↔ ↩ ↪ ⤴ ⤵ 🔃 🔄 🔙 🔚 🔛 🔜 🔝 religion 🛐 ⚛ 🕉 ✡ ☸ ☯ ✝ ☦ ☪ ☮ 🕎 🔯 zodiac ♈ ♉ ♊ ♋ ♌ ♍ ♎ ♏ ♐ ♑ ♒ ♓ ⛎ av-symbol 🔀 🔁 🔂 ▶ ⏩ ⏭ ⏯ ◀ ⏪ ⏮ 🔼 ⏫ 🔽 ⏬ ⏸ ⏹ ⏺ ⏏ 🎦 🔅 🔆 📶 📳 📴 gender ♀ ♂ other-symbol ⚕ ♾ ♻ ⚜ 🔱 📛 🔰 ⭕ ✅ ☑ ✔ ✖ ❌ ❎ ➕ ➖ ➗ ➰ ➿ 〽 ✳ ✴ ❇ ‼ ⁉ ❓ ❔ ❕ ❗ 〰 © ® ™ keycap #️⃣ *️⃣ 0️⃣ 1️⃣ 2️⃣ 3️⃣ 4️⃣ 5️⃣ 6️⃣ 7️⃣ 8️⃣ 9️⃣ 🔟 alphanum 🔠 🔡 🔢 🔣 🔤 🅰 🆎 🅱 🆑 🆒 🆓 ℹ 🆔 Ⓜ 🆕 🆖 🅾 🆗 🅿 🆘 🆙 🆚 🈁 🈂 🈷 🈶 🈯 🉐 🈹 🈚 🈲 🉑 🈸 🈴 🈳 ㊗ ㊙ 🈺 🈵 geometric 🔴 🟠 🟡 🟢 🔵 🟣 🟤 ⚫ ⚪ 🟥 🟧 🟨 🟩 🟦 🟪 🟫 ⬛ ⬜ ◼ ◻ ◾ ◽ ▪ ▫ 🔶 🔷 🔸 🔹 🔺 🔻 💠 🔘 🔳 🔲 Flags flag 🏁 🚩 🎌 🏴 🏳 🏳️🌈 🏴☠️emoji表情库:https://funletu.com/emoji/
2025年10月20日
81 阅读
0 评论
0 点赞
2025-10-09
华为OptiXstar B610 光猫修改MAC和SN
特别提示:必须先补全shelltelnet 192.168.1.1(华为界面IP:192.168.100.1)rootadminHW (华为界面:admin,输入不显示,区分大小写,直接回车)su shellcd /mnt/jffs2vi hw_boardinfo在英文状态下,按键盘上的 i 开始编辑:obj.id = "0x00000001" ; obj.value = "4"; 可以修改为:1、GPON 2、EPON 4、双模obj.id = "0x00000002" ; obj.value = "485754444AB7AB9A";光猫标签上的 PON NO 序号 可以修改!obj.id = "0x00000008" ; obj.value = "2150083444AAA6000999";光猫标签上的 PROD ID 序号可以修改!obj.value = "F8:55:88:88:84:C0"; MAC地址(12位),可以改成你需要的MAC地址!obj.id = "0x0000000b" ; obj.value = "F8:55:88:88:84:C8";从这一行开始,MAC地址只能修改前11位,最后一位不能修改!obj.id = "0x00000022" ; obj.value = "F8:55:88:88:84:C9"; 最后一位不能修改!obj.id = "0x00000023" ; obj.value = "F8:55:88:88:84:CA";最后一位不能修改!obj.id = "0x00000024" ; obj.value = "F8:55:88:88:84:CB";最后一位不能修改!obj.id = "0x0000002d" ; obj.value = "F8:55:88:88:84:CC"; 最后一位不能修改!obj.id = "0x0000002e" ; obj.value = "F8:55:88:88:84:CD";最后一位不能修改!obj.id = "0x0000002f" ; obj.value = "F8:55:88:88:84:CE";最后一位不能修改!obj.id = "0x00000030" ; obj.value = "F8:55:88:88:84:CF";最后一位不能修改!obj.id = "0x0000000c" ; obj.value = "F8:55:88:88:84:C1";最后一位不能修改!obj.id = "0x0000000d" ; obj.value = "F8:55:88:88:84:C2";最后一位不能修改!obj.id = "0x0000000e" ; obj.value = "F8:55:88:88:84:C3";最后一位不能修改!obj.id = "0x0000000f" ; obj.value = "F8:55:88:88:84:C4";最后一位不能修改!obj.id = "0x00000010" ; obj.value = "F8:55:88:88:84:C5";最后一位不能修改!obj.id = "0x00000011" ; obj.value = "F8:55:88:88:84:C6";最后一位不能修改!obj.id = "0x00000012" ; obj.value = "F8:55:88:88:84:C7";最后一位不能修改!obj.id = "0x00000013" ; obj.value = "F8:55:88:88:84:C0";最后一位不能修改!obj.id = "0x00000025"; obj.value = "F8:55:88:88:84:C0";这一行的MAC地址要修改为12位!按 ESC 退出,然后输入 :wq (冒号也要输入),回车保存修改。如果不能保存再次输入 :wq! 回车强制保存修改。用同样方法修改 hw_boardinfo.bak 文件,修改完成后退出编辑状态、保存修改。光猫重新启动后完成修改。
2025年10月09日
873 阅读
0 评论
0 点赞
2025-01-18
部署易乐游2.4.6.0版本注意事项
最近站长开始转战易乐游无盘更新版本:昆仑版 2.4.6.0更新时间:2025-01-09官方下载地址:服务端: https://download.yileyoo.com/KunlunServerSetup_2.4.6.0.exe客户端: https://download.yileyoo.com/KunlunClientSetup_2.4.6.0.exe客户端升级包: https://download.yileyoo.com/KunlunClientUpdate_2.4.6.0.exe易乐游资源管理助手V1.1: https://bgdw.yileyoo.com/Chaos/2018/12/17/1545017421/MatrixResHelperSetup.exe云管理地址:https://cloud.yileyoo.com/注意记录【20250124】1.切勿删除任何PNP驱动;2.要使用USB耳机切勿关闭声卡PNP;3.为了更好得使用网卡PNP一定要更新基础PNP驱动;4.不管什么版本客户端的万能包,一定部署前挂在升级客户端到对应版本;5.为后期使用做考虑,关闭服务端皮肤;\Console\config\ConsoleOptions.ini文件,加入 [UIStyle] Enabled=0 6.如果U.2硬盘使用内存缓存速度变慢,关闭次盘内存缓存可以解决问题;7.服务端一定不要安装火绒安全软件,火绒6.0开始服务器可能随机蓝屏;8.目前版本容易出现游戏不自动更新问题,手动重启一下游戏更新服务即可;9.新部署客户用几个月后会开机启动带带陪玩客户端,注意留意;
2025年01月18日
536 阅读
0 评论
0 点赞
2024-05-13
原创-志强系列处理器实机测试记录【202406】
电源统一为长城巨龙1250测试系统统一为云更新无盘WIN10-22H2显卡为3060-12GCPU内存主板PUBG平均帧(1小时)分辨率CPU使用率显卡使用率娱乐大师分E5-1650V316Gx2 2133x99【B85】1252K60HZ52%94%773898分E5-2690v28GX2 1600X79M-plus D3【Q87】1402K60HZ24%95%949072分E5-1620V216GX2 1600X79【ID1C50】622K60HZ97%21%595276分E5-26808GX2 1600X79【ID1C50】1002K60HZ60%65%638503分E5-2667v316GX2 2133x99【B85】1672K60HZ50%80%347169分表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格显卡为2060-6G测试平台服务器主板CPU内存主板PUBG平均帧(1小时)分辨率CPU使用率显卡使用率娱乐大师分E5-2667v216GX6GA-6PXSVT1152K60HZ49%86%725848分E5-2667v316GX4 2133X991232K60HZ42%68%347169分E5-2666v316GX4 2133X99表格2K60HZ表格表格382426分表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格
2024年05月13日
1,232 阅读
0 评论
0 点赞
2024-05-13
MAME千机变街机包电脑版 231217
游戏包属于整合版启动自动最大化游戏机包大小:18.9G包含模拟器:FC,MD,SFC等目前游戏:4000+支持Xbox360手柄,其它手柄没事测试解压即玩测试图:如果像要完整包请联系网管老李,完整4000+游戏包500元,VX:lizhi0710
2024年05月13日
713 阅读
0 评论
0 点赞
2024-05-07
推荐一些E5装机玩游戏的CPU
这里推荐CPU的型号前提是保证玩腾讯全家桶游戏不卡得前提哦因为考虑到腾讯游戏是单核游戏所以这里只推荐单核主频高的CPU系列V1系列E5-1620 4核8线 3.60-3.80 10mb 32nm 130wE5-1620V2 4核8线 3.70-3.90 10mb 22nm 130wE5-1650 6核12线 3.20-3.80 12mb 32nm 130wE5-1650V2 6核12线 3.50-3.90 12mb 22nm 130wE5-1660 6核12线 3.30-3.90 15mb 32nm 130wE5-1660V2 6核12线 3.70-3.90 15mb 22nm 130wE5-1680V2 8核16线 3.00-3.90 25mb 22nm 130wE5-2690 8核16线 2.90-3.80 20MB 32nm 135WV2系列E5-2637V2 4核8线 3.50-3.80 15MB 22nm 130wE5-2667V2 8核16线 3.30-4.00 25MB 22NM 130WE5-2673V2 8核16线 3.30-4.00 25MB 22NM 110WV3系列E5-2666V3 10核20线 2.90-3.50 25MB 22NM 135WV4系列4系列E5-4627V2 8核8线 3.30-3.60 16MB 22NM 130W后话在价格合适的情况下优先选择默认主频高的选择排列:主频>纳米>核心数>线程数>缓存>功耗
2024年05月07日
2,587 阅读
0 评论
0 点赞
2024-05-07
无盘LOL游戏秒卡排查方法(适用其它游戏)
问题归纳:1. FPS值,如果FPS值小于20以下就会出现秒卡问题了特例:英雄联盟低配置的经常FPS随机降低,按道理win7X64位,哪怕是AMD,也不至于降低到只有十几帧的地步,一个网吧老板提醒说有个规律,看了网站就容易出现秒卡现象,于是打开首页hao123,不看不知道,一看吓一跳,用任何浏览器测试,CPU占用率不停随机波动有时候20%以上,经常8%-9%左右跳动,问题的根源找到了,于是换了个首页,就腾讯的的吧,hao.qq.com,安静多了,CPU零占用,游戏再也没有出现卡的现象。2. ping值 这个与网吧带宽有关,如果这个值大于100以上就会出现卡了3. 显卡驱动版本问题 例如:使用了beta版或测试版等等4. 如果网吧是多种配置而且全部配置都用一个包,显卡驱动是用的一个通用驱动如:N卡335.23,有时候通用驱动可能在某些显卡上出现称卡现像,此时我们可以尝试将出现秒卡问题的机器重新复制一个包出来,进行分包来部署。5.虚拟内存大小设置,是否过小 如:2G 设置为 1536-4096
2024年05月07日
449 阅读
0 评论
0 点赞
2024-05-07
Steam提示无互联网连接的问题
如上图,这段时间老是遇到此问题steam–设置—下载—CHINA HONGKONG 100%解决!设置节点没用, 我这边刚找到原因,如果是蘑菇下载的,是因为加载游戏太多了(听的是有点怪)但好像就是这样。从菜单里点击单个游戏进入就可以了,不要让steam挂载所有游戏。
2024年05月07日
278 阅读
0 评论
0 点赞
2024-05-02
原创-龙管家计费系统收银漏洞-2021年更新到第八种
经过本人对网吧行业的经验,我收集了一下方法,可以利用龙管家漏洞去从吧台偷钱而不被发现,特记录下来供大家交流,当然我能发布出来,我这边肯定有防止的方法;漏洞一:临时顾客结账时,由于很多临时上机的顾客不会在客户机上看卡内剩余金额,特别是卡内还剩余1元时候,顾客在吧台结账,收银员会告诉顾客没有钱了,而把其剩余的1元私自拿走,一个班下来,应该可以从吧台拿走10元左右,而龙管家计费系统无任何记录。漏洞二:假定网吧包夜为10元,网吧会员前来吧台包夜,会员卡内还有余额,收银员给会员充值9元,既可开通包夜,那么收银收的却是10元,多余的1元就可以从吧台拿走,一个夜班下来,能从吧台至少拿走5元左右。漏洞三:在吧台收银交班功能上也存在一处漏洞,比如每天的交班时间为早8点和晚8点,早上8点收银001交班完毕后,在9点的时候收银001给收银003交班了一次,那么在8-9点此时间段的吧台收入就不会显示在晚8点与收银002的交班记录中,那么这一个小时的龙管家收入,就会被收银001拿走,此方法只有在每月扎帐的时候被发现出来,但由于很多老板的不细心,一般是很难发现其中的问题。漏洞四:很多网吧为了做网吧人气,在龙管家里设置的充钱送钱的活动,那么我来告诉你,这里也有一个漏洞哦,比如一家网吧做活动充值100元送100元,会员A来充100元后,他的会员卡里应该有100元会员和100元奖励,吧台收银给会员A充了两次100元,那么会员A的会员卡中应该有200元会员和200元奖励,注意!!!也就是在这之后,吧台收银以充错钱为由找老板要了经理帐号的密码,进入经理帐号后,对会员A做出两次-99元和-1元的操作后,收银就可以拿走吧台100元了,当然您会问了,会员A卡中不就没钱了吗?错!!!这时候会员A会员卡中会有200元的奖励,顾客基本不会在意会员卡的金额是会员还是奖励。漏洞五:一般每一家网吧老板都有自己的朋友,都会给自己朋友的会员充上几百或是几千的会员,作为老板的朋友本来不经常来或是余额还有多少,真不会太在意,收银正是利用了这一点,在收费系统中动手脚,在老板输入经理密码查账或是给充错钱的会员扣钱的时候,收银员留心记了一下密码,那么在吧台没有人的时候,他会给自己的工号能够扣钱的权限,然后从老板朋友的会员中扣10元出来,当有其他会员充钱的时候,再把这10元充出去,他就可以从吧台拿走10元哦!所以老板一定要小心保管经理密码,并不定期检查收银员帐号的权限哦!漏洞六:龙管家使用的数据库核心为MSSQL2000数据库,那么收银机上就必须要装一个数据库到本地电脑上,这个数据库里存放什么东西呢?那我来告诉你,只要是你的营业数据都会存放在这里面,比如:会员资料,会员加钱记录,临时加钱记录,上机记录,交班记录,网吧每日营业情况等等,如果人为手动对数据进行操作,那么他想怎么改就怎么改!!!不再需要任何权限帐号密码什么的!!! 例:会员A卡中没有钱,在收银A当班的时候充值了10元,然后收银A在数据库中把会员A的10元加钱记录删除掉,会员A会员卡中的余额还是会有10元,但是在交班的时候,交班表中是不会显示会员A充值的这10元收入,这10元当然就可以拿走了哦!漏洞七:您可以在电脑上百度搜索“龙管家伴侣”,您就会发现很多专门针对龙管家计费系统开发的修改龙管家账目的软件,具了解价格一般在200-1000不等,收银可以讲软件买来放在个人U盘或是个人网盘中,当需要修改账目的时候,在网吧没有监管人员的监督下,随意修改您的当班收入,想修改多少就修改多少,修改完毕后讲软件删除即可!目前发现软件功能如下:修改会员余额,删除会员加钱记录,修改会员积分,修改交班金额,删除交班记录等。 以下是某龙管家账目修改伴侣软件的运行界面截图【网上图片】漏洞八:【20211003更新】由于龙管家新版更新【包括云版本】,吧台经理账号多了一个新的功能,就是给会员充值可以直接充值赠送,不用充值现金也可以给会员充值!充值奖励后吧台今天的收入记录中就不会显示今天的现金收入,一旦收银拿到经理账号,他可以给会员直接充值奖励金额,很轻松的把顾客的钱装进自己口袋了其它新的漏洞我们会陆续更新上来,至于有效的防止方法,考虑到网吧老板角度,不在这里公布,如果需要知道如何防止!如果您需要查帐可以微信联系:lizhi0710【收费查账不管是否查除问题都收取一定费用】 我们除了能防止,还能查出网吧损失了很多钱哦!目前已查出全国22家网吧账目错误问题(截止时间2019年),希望各位网吧老板注意!!!最多的一家网吧,已查出损失接近十万人民币!!! 注意!!!最近电话比较多!!!
2024年05月02日
1,113 阅读
0 评论
1 点赞
1
2