diff --git a/.github/update.log b/.github/update.log index ada34e2c44..db781654af 100644 --- a/.github/update.log +++ b/.github/update.log @@ -1168,3 +1168,4 @@ Update On Tue Oct 28 19:41:08 CET 2025 Update On Wed Oct 29 19:43:03 CET 2025 Update On Thu Oct 30 19:42:18 CET 2025 Update On Fri Oct 31 19:38:32 CET 2025 +Update On Sat Nov 1 19:37:41 CET 2025 diff --git a/clash-nyanpasu/frontend/interface/package.json b/clash-nyanpasu/frontend/interface/package.json index 0d8d789fa7..9b08a4a298 100644 --- a/clash-nyanpasu/frontend/interface/package.json +++ b/clash-nyanpasu/frontend/interface/package.json @@ -14,7 +14,7 @@ "@tanstack/react-query": "5.90.5", "@tauri-apps/api": "2.8.0", "ahooks": "3.9.6", - "dayjs": "1.11.18", + "dayjs": "1.11.19", "lodash-es": "4.17.21", "ofetch": "1.4.1", "react": "19.2.0", diff --git a/clash-nyanpasu/frontend/nyanpasu/package.json b/clash-nyanpasu/frontend/nyanpasu/package.json index caa7b59b97..bdd46daa3f 100644 --- a/clash-nyanpasu/frontend/nyanpasu/package.json +++ b/clash-nyanpasu/frontend/nyanpasu/package.json @@ -30,7 +30,7 @@ "allotment": "1.20.4", "country-code-emoji": "2.3.0", "country-emoji": "1.5.6", - "dayjs": "1.11.18", + "dayjs": "1.11.19", "framer-motion": "12.23.24", "i18next": "25.6.0", "jotai": "2.15.0", @@ -56,7 +56,7 @@ "@csstools/normalize.css": "12.1.1", "@emotion/babel-plugin": "11.13.5", "@emotion/react": "11.14.0", - "@iconify/json": "2.2.401", + "@iconify/json": "2.2.402", "@monaco-editor/react": "4.7.0", "@tanstack/react-query": "5.90.5", "@tanstack/react-router": "1.133.36", @@ -83,7 +83,7 @@ "meta-json-schema": "1.19.14", "monaco-yaml": "5.4.0", "nanoid": "5.1.6", - "sass-embedded": "1.93.2", + "sass-embedded": "1.93.3", "shiki": "2.5.0", "unplugin-auto-import": "20.2.0", "unplugin-icons": "22.5.0", diff --git a/clash-nyanpasu/frontend/ui/package.json b/clash-nyanpasu/frontend/ui/package.json index 852ba37898..50345d3153 100644 --- a/clash-nyanpasu/frontend/ui/package.json +++ b/clash-nyanpasu/frontend/ui/package.json @@ -38,7 +38,7 @@ "@types/d3-interpolate-path": "2.0.3", "clsx": "2.1.1", "d3-interpolate-path": "2.3.0", - "sass-embedded": "1.93.2", + "sass-embedded": "1.93.3", "tailwind-merge": "3.3.1", "typescript-plugin-css-modules": "5.2.0", "vite-plugin-dts": "4.5.4" diff --git a/clash-nyanpasu/manifest/version.json b/clash-nyanpasu/manifest/version.json index 1f0095f866..46cedbcf88 100644 --- a/clash-nyanpasu/manifest/version.json +++ b/clash-nyanpasu/manifest/version.json @@ -2,7 +2,7 @@ "manifest_version": 1, "latest": { "mihomo": "v1.19.15", - "mihomo_alpha": "alpha-6bffbdd", + "mihomo_alpha": "alpha-99e68e9", "clash_rs": "v0.9.1", "clash_premium": "2023-09-05-gdcc8d87", "clash_rs_alpha": "0.9.1-alpha+sha.643fb1b" @@ -69,5 +69,5 @@ "linux-armv7hf": "clash-armv7-unknown-linux-gnueabihf" } }, - "updated_at": "2025-10-28T22:21:24.305Z" + "updated_at": "2025-10-31T22:21:09.296Z" } diff --git a/clash-nyanpasu/pnpm-lock.yaml b/clash-nyanpasu/pnpm-lock.yaml index e1b653135e..3b97e90551 100644 --- a/clash-nyanpasu/pnpm-lock.yaml +++ b/clash-nyanpasu/pnpm-lock.yaml @@ -188,8 +188,8 @@ importers: specifier: 3.9.6 version: 3.9.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0) dayjs: - specifier: 1.11.18 - version: 1.11.18 + specifier: 1.11.19 + version: 1.11.19 lodash-es: specifier: 4.17.21 version: 4.17.21 @@ -241,7 +241,7 @@ importers: version: 7.3.4(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@mui/x-date-pickers': specifier: 8.16.0 - version: 8.16.0(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react@19.2.0))(@mui/material@7.3.4(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@mui/system@7.3.3(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(dayjs@1.11.18)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 8.16.0(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react@19.2.0))(@mui/material@7.3.4(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@mui/system@7.3.3(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(dayjs@1.11.19)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@nyanpasu/interface': specifier: workspace:^ version: link:../interface @@ -273,8 +273,8 @@ importers: specifier: 1.5.6 version: 1.5.6 dayjs: - specifier: 1.11.18 - version: 1.11.18 + specifier: 1.11.19 + version: 1.11.19 framer-motion: specifier: 12.23.24 version: 12.23.24(@emotion/is-prop-valid@1.3.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) @@ -289,7 +289,7 @@ importers: version: 0.4.0 material-react-table: specifier: npm:@greenhat616/material-react-table@4.0.0 - version: '@greenhat616/material-react-table@4.0.0(e280acbbef45e6f87f5c25130de717f4)' + version: '@greenhat616/material-react-table@4.0.0(d79532340dc28deb8e20423caac43274)' monaco-editor: specifier: 0.54.0 version: 0.54.0 @@ -310,7 +310,7 @@ importers: version: 1.6.5(react-dom@19.2.0(react@19.2.0))(react@19.2.0) react-hook-form-mui: specifier: 8.0.0 - version: 8.0.0(b926da5d1c96a6781f507ace4a1c77e1) + version: 8.0.0(d9b7a0dfb9e86eb33826a2476815ec9f) react-i18next: specifier: 15.7.4 version: 15.7.4(i18next@25.6.0(typescript@5.9.3))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3) @@ -346,8 +346,8 @@ importers: specifier: 11.14.0 version: 11.14.0(@types/react@19.2.2)(react@19.2.0) '@iconify/json': - specifier: 2.2.401 - version: 2.2.401 + specifier: 2.2.402 + version: 2.2.402 '@monaco-editor/react': specifier: 4.7.0 version: 4.7.0(monaco-editor@0.54.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) @@ -359,10 +359,10 @@ importers: version: 1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@tanstack/react-router-devtools': specifier: 1.133.36 - version: 1.133.36(@tanstack/react-router@1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@tanstack/router-core@1.133.36)(@types/node@24.9.2)(csstype@3.1.3)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass-embedded@1.93.2)(sass@1.93.2)(solid-js@1.9.5)(stylus@0.62.0)(terser@5.36.0)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1) + version: 1.133.36(@tanstack/react-router@1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@tanstack/router-core@1.133.36)(@types/node@24.9.2)(csstype@3.1.3)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass-embedded@1.93.3)(sass@1.93.3)(solid-js@1.9.5)(stylus@0.62.0)(terser@5.36.0)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1) '@tanstack/router-plugin': specifier: 1.133.36 - version: 1.133.36(@tanstack/react-router@1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1)) + version: 1.133.36(@tanstack/react-router@1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.3)(sass@1.93.3)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1)) '@tauri-apps/plugin-clipboard-manager': specifier: 2.3.0 version: 2.3.0 @@ -398,13 +398,13 @@ importers: version: 13.15.4 '@vitejs/plugin-legacy': specifier: 7.2.1 - version: 7.2.1(terser@5.36.0)(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1)) + version: 7.2.1(terser@5.36.0)(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.3)(sass@1.93.3)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1)) '@vitejs/plugin-react': specifier: 5.1.0 - version: 5.1.0(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1)) + version: 5.1.0(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.3)(sass@1.93.3)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1)) '@vitejs/plugin-react-swc': specifier: 4.2.0 - version: 4.2.0(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1)) + version: 4.2.0(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.3)(sass@1.93.3)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1)) change-case: specifier: 5.4.4 version: 5.4.4 @@ -427,8 +427,8 @@ importers: specifier: 5.1.6 version: 5.1.6 sass-embedded: - specifier: 1.93.2 - version: 1.93.2 + specifier: 1.93.3 + version: 1.93.3 shiki: specifier: 2.5.0 version: 2.5.0 @@ -443,19 +443,19 @@ importers: version: 13.15.20 vite: specifier: 7.1.12 - version: 7.1.12(@types/node@24.9.2)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1) + version: 7.1.12(@types/node@24.9.2)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.3)(sass@1.93.3)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1) vite-plugin-html: specifier: 3.2.2 - version: 3.2.2(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1)) + version: 3.2.2(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.3)(sass@1.93.3)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1)) vite-plugin-sass-dts: specifier: 1.3.34 - version: 1.3.34(postcss@8.5.6)(prettier@3.6.2)(sass-embedded@1.93.2)(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1)) + version: 1.3.34(postcss@8.5.6)(prettier@3.6.2)(sass-embedded@1.93.3)(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.3)(sass@1.93.3)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1)) vite-plugin-svgr: specifier: 4.5.0 - version: 4.5.0(rollup@4.46.2)(typescript@5.9.3)(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1)) + version: 4.5.0(rollup@4.46.2)(typescript@5.9.3)(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.3)(sass@1.93.3)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1)) vite-tsconfig-paths: specifier: 5.1.4 - version: 5.1.4(typescript@5.9.3)(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1)) + version: 5.1.4(typescript@5.9.3)(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.3)(sass@1.93.3)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1)) zod: specifier: 4.1.12 version: 4.1.12 @@ -491,7 +491,7 @@ importers: version: 19.2.2 '@vitejs/plugin-react': specifier: 5.1.0 - version: 5.1.0(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1)) + version: 5.1.0(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.3)(sass@1.93.3)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1)) ahooks: specifier: 3.9.6 version: 3.9.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0) @@ -521,10 +521,10 @@ importers: version: 4.1.16 vite: specifier: 7.1.12 - version: 7.1.12(@types/node@24.9.2)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1) + version: 7.1.12(@types/node@24.9.2)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.3)(sass@1.93.3)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1) vite-tsconfig-paths: specifier: 5.1.4 - version: 5.1.4(typescript@5.9.3)(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1)) + version: 5.1.4(typescript@5.9.3)(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.3)(sass@1.93.3)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1)) devDependencies: '@emotion/react': specifier: 11.14.0 @@ -539,8 +539,8 @@ importers: specifier: 2.3.0 version: 2.3.0 sass-embedded: - specifier: 1.93.2 - version: 1.93.2 + specifier: 1.93.3 + version: 1.93.3 tailwind-merge: specifier: 3.3.1 version: 3.3.1 @@ -549,7 +549,7 @@ importers: version: 5.2.0(typescript@5.9.3) vite-plugin-dts: specifier: 4.5.4 - version: 4.5.4(@types/node@24.9.2)(rollup@4.46.2)(typescript@5.9.3)(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1)) + version: 4.5.4(@types/node@24.9.2)(rollup@4.46.2)(typescript@5.9.3)(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.3)(sass@1.93.3)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1)) scripts: dependencies: @@ -600,8 +600,8 @@ importers: specifier: 11.3.2 version: 11.3.2 octokit: - specifier: 5.0.4 - version: 5.0.4 + specifier: 5.0.5 + version: 5.0.5 picocolors: specifier: 1.1.1 version: 1.1.1 @@ -1825,8 +1825,8 @@ packages: prettier-plugin-ember-template-tag: optional: true - '@iconify/json@2.2.401': - resolution: {integrity: sha512-pBz8s09X2Aac6EhpfH1eWcu0Wqwuhgh3gmcoFgkrr6qUR1V2qZyz/TKo2hwGEEyyWqH2kc9t50qHRb0hxoG1/g==} + '@iconify/json@2.2.402': + resolution: {integrity: sha512-c4fqEUW+JrolUzwQJR5m4BgoAGGlTn8YjelJW1kc0k5b45/PztyNtLC+VT7Rwgc/sPYEDB4gwbQJCiwnJRku7A==} '@iconify/types@2.0.0': resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} @@ -2126,26 +2126,38 @@ packages: resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==} engines: {node: '>=12.4.0'} - '@octokit/app@16.1.1': - resolution: {integrity: sha512-pcvKSN6Q6aT3gU5heoDFs3ywU5xejxeqs1rQpUwgN7CmBlxCSy9aCoqFuC6GpVv71O/Qq/VuYfCNzrOZp/9Ycw==} + '@octokit/app@16.1.2': + resolution: {integrity: sha512-8j7sEpUYVj18dxvh0KWj6W/l6uAiVRBl1JBDVRqH1VHKAO/G5eRVl4yEoYACjakWers1DjUkcCHyJNQK47JqyQ==} engines: {node: '>= 20'} - '@octokit/auth-app@8.1.1': - resolution: {integrity: sha512-yW9YUy1cuqWlz8u7908ed498wJFt42VYsYWjvepjojM4BdZSp4t+5JehFds7LfvYi550O/GaUI94rgbhswvxfA==} + '@octokit/auth-app@8.1.2': + resolution: {integrity: sha512-db8VO0PqXxfzI6GdjtgEFHY9tzqUql5xMFXYA12juq8TeTgPAuiiP3zid4h50lwlIP457p5+56PnJOgd2GGBuw==} engines: {node: '>= 20'} '@octokit/auth-oauth-app@9.0.2': resolution: {integrity: sha512-vmjSHeuHuM+OxZLzOuoYkcY3OPZ8erJ5lfswdTmm+4XiAKB5PmCk70bA1is4uwSl/APhRVAv4KHsgevWfEKIPQ==} engines: {node: '>= 20'} + '@octokit/auth-oauth-app@9.0.3': + resolution: {integrity: sha512-+yoFQquaF8OxJSxTb7rnytBIC2ZLbLqA/yb71I4ZXT9+Slw4TziV9j/kyGhUFRRTF2+7WlnIWsePZCWHs+OGjg==} + engines: {node: '>= 20'} + '@octokit/auth-oauth-device@8.0.2': resolution: {integrity: sha512-KW7Ywrz7ei7JX+uClWD2DN1259fnkoKuVdhzfpQ3/GdETaCj4Tx0IjvuJrwhP/04OhcMu5yR6tjni0V6LBihdw==} engines: {node: '>= 20'} + '@octokit/auth-oauth-device@8.0.3': + resolution: {integrity: sha512-zh2W0mKKMh/VWZhSqlaCzY7qFyrgd9oTWmTmHaXnHNeQRCZr/CXy2jCgHo4e4dJVTiuxP5dLa0YM5p5QVhJHbw==} + engines: {node: '>= 20'} + '@octokit/auth-oauth-user@6.0.1': resolution: {integrity: sha512-vlKsL1KUUPvwXpv574zvmRd+/4JiDFXABIZNM39+S+5j2kODzGgjk7w5WtiQ1x24kRKNaE7v9DShNbw43UA3Hw==} engines: {node: '>= 20'} + '@octokit/auth-oauth-user@6.0.2': + resolution: {integrity: sha512-qLoPPc6E6GJoz3XeDG/pnDhJpTkODTGG4kY0/Py154i/I003O9NazkrwJwRuzgCalhzyIeWQ+6MDvkUmKXjg/A==} + engines: {node: '>= 20'} + '@octokit/auth-token@4.0.0': resolution: {integrity: sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==} engines: {node: '>= 18'} @@ -2158,18 +2170,26 @@ packages: resolution: {integrity: sha512-vjcPRP1xsKWdYKiyKmHkLFCxeH4QvVTv05VJlZxwNToslBFcHRJlsWRaoI2+2JGCf9tIM99x8cN0b1rlAHJiQw==} engines: {node: '>= 20'} + '@octokit/auth-unauthenticated@7.0.3': + resolution: {integrity: sha512-8Jb1mtUdmBHL7lGmop9mU9ArMRUTRhg8vp0T1VtZ4yd9vEm3zcLwmjQkhNEduKawOOORie61xhtYIhTDN+ZQ3g==} + engines: {node: '>= 20'} + '@octokit/core@5.2.0': resolution: {integrity: sha512-1LFfa/qnMQvEOAdzlQymH0ulepxbxnCYAKJZfMci/5XJyIHWgEYnDmgnKakbTh7CH2tFQ5O60oYDvns4i9RAIg==} engines: {node: '>= 18'} - '@octokit/core@7.0.5': - resolution: {integrity: sha512-t54CUOsFMappY1Jbzb7fetWeO0n6K0k/4+/ZpkS+3Joz8I4VcvY9OiEBFRYISqaI2fq5sCiPtAjRDOzVYG8m+Q==} + '@octokit/core@7.0.6': + resolution: {integrity: sha512-DhGl4xMVFGVIyMwswXeyzdL4uXD5OGILGX5N8Y+f6W7LhC1Ze2poSNrkF/fedpVDHEEZ+PHFW0vL14I+mm8K3Q==} engines: {node: '>= 20'} '@octokit/endpoint@11.0.1': resolution: {integrity: sha512-7P1dRAZxuWAOPI7kXfio88trNi/MegQ0IJD3vfgC3b+LZo1Qe6gRJc2v0mz2USWWJOKrB2h5spXCzGbw+fAdqA==} engines: {node: '>= 20'} + '@octokit/endpoint@11.0.2': + resolution: {integrity: sha512-4zCpzP1fWc7QlqunZ5bSEjxc6yLAlRTnDwKtgXfcI/FxxGoqedDG8V2+xJ60bV2kODqcGB+nATdtap/XYq2NZQ==} + engines: {node: '>= 20'} + '@octokit/endpoint@9.0.6': resolution: {integrity: sha512-H1fNTMA57HbkFESSt3Y9+FBICv+0jFceJFPWDePYlR/iMGrwM5ph+Dd4XRQs+8X+PUFURLQgX9ChPfhJ/1uNQw==} engines: {node: '>= 18'} @@ -2178,8 +2198,8 @@ packages: resolution: {integrity: sha512-r+oZUH7aMFui1ypZnAvZmn0KSqAUgE1/tUXIWaqUCa1758ts/Jio84GZuzsvUkme98kv0WFY8//n0J1Z+vsIsQ==} engines: {node: '>= 18'} - '@octokit/graphql@9.0.2': - resolution: {integrity: sha512-iz6KzZ7u95Fzy9Nt2L8cG88lGRMr/qy1Q36ih/XVzMIlPDMYwaNLE/ENhqmIzgPrlNWiYJkwmveEetvxAgFBJw==} + '@octokit/graphql@9.0.3': + resolution: {integrity: sha512-grAEuupr/C1rALFnXTv6ZQhFuL1D8G5y8CN04RgrO4FIPMrtm+mcZzFG7dcBm+nq+1ppNixu+Jd78aeJOYxlGA==} engines: {node: '>= 20'} '@octokit/oauth-app@8.0.3': @@ -2194,6 +2214,10 @@ packages: resolution: {integrity: sha512-xi6Iut3izMCFzXBJtxxJehxJmAKjE8iwj6L5+raPRwlTNKAbOOBJX7/Z8AF5apD4aXvc2skwIdOnC+CQ4QuA8Q==} engines: {node: '>= 20'} + '@octokit/oauth-methods@6.0.2': + resolution: {integrity: sha512-HiNOO3MqLxlt5Da5bZbLV8Zarnphi4y9XehrbaFMkcoJ+FL7sMxH/UlUsCVxpddVu4qvNDrBdaTVE2o4ITK8ng==} + engines: {node: '>= 20'} + '@octokit/openapi-types@20.0.0': resolution: {integrity: sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA==} @@ -2206,6 +2230,9 @@ packages: '@octokit/openapi-types@26.0.0': resolution: {integrity: sha512-7AtcfKtpo77j7Ts73b4OWhOZHTKo/gGY8bB3bNBQz4H+GRSWqx2yvj8TXRsbdTE0eRmYmXOEY66jM7mJ7LzfsA==} + '@octokit/openapi-types@27.0.0': + resolution: {integrity: sha512-whrdktVs1h6gtR+09+QsNk2+FO+49j6ga1c55YZudfEG+oKJVvJLQi3zkOm5JjiUXAagWK2tI2kTGKJ2Ys7MGA==} + '@octokit/openapi-webhooks-types@12.0.3': resolution: {integrity: sha512-90MF5LVHjBedwoHyJsgmaFhEN1uzXyBDRLEBe7jlTYx/fEhPAk3P3DAJsfZwC54m8hAIryosJOL+UuZHB3K3yA==} @@ -2215,8 +2242,8 @@ packages: peerDependencies: '@octokit/core': '>=6' - '@octokit/plugin-paginate-rest@13.2.0': - resolution: {integrity: sha512-YuAlyjR8o5QoRSOvMHxSJzPtogkNMgeMv2mpccrvdUGeC3MKyfi/hS+KiFwyH/iRKIKyx+eIMsDjbt3p9r2GYA==} + '@octokit/plugin-paginate-rest@14.0.0': + resolution: {integrity: sha512-fNVRE7ufJiAA3XUrha2omTA39M6IXIc6GIZLvlbsm8QOQCYvpq/LkMNGyFlB1d8hTDzsAXa3OKtybdMAYsV/fw==} engines: {node: '>= 20'} peerDependencies: '@octokit/core': '>=6' @@ -2233,20 +2260,20 @@ packages: peerDependencies: '@octokit/core': '5' - '@octokit/plugin-rest-endpoint-methods@16.1.0': - resolution: {integrity: sha512-nCsyiKoGRnhH5LkH8hJEZb9swpqOcsW+VXv1QoyUNQXJeVODG4+xM6UICEqyqe9XFr6LkL8BIiFCPev8zMDXPw==} + '@octokit/plugin-rest-endpoint-methods@17.0.0': + resolution: {integrity: sha512-B5yCyIlOJFPqUUeiD0cnBJwWJO8lkJs5d8+ze9QDP6SvfiXSz1BF+91+0MeI1d2yxgOhU/O+CvtiZ9jSkHhFAw==} engines: {node: '>= 20'} peerDependencies: '@octokit/core': '>=6' - '@octokit/plugin-retry@8.0.2': - resolution: {integrity: sha512-mVPCe77iaD8g1lIX46n9bHPUirFLzc3BfIzsZOpB7bcQh1ecS63YsAgcsyMGqvGa2ARQWKEFTrhMJX2MLJVHVw==} + '@octokit/plugin-retry@8.0.3': + resolution: {integrity: sha512-vKGx1i3MC0za53IzYBSBXcrhmd+daQDzuZfYDd52X5S0M2otf3kVZTVP8bLA3EkU0lTvd1WEC2OlNNa4G+dohA==} engines: {node: '>= 20'} peerDependencies: '@octokit/core': '>=7' - '@octokit/plugin-throttling@11.0.2': - resolution: {integrity: sha512-ntNIig4zZhQVOZF4fG9Wt8QCoz9ehb+xnlUwp74Ic2ANChCk8oKmRwV9zDDCtrvU1aERIOvtng8wsalEX7Jk5Q==} + '@octokit/plugin-throttling@11.0.3': + resolution: {integrity: sha512-34eE0RkFCKycLl2D2kq7W+LovheM/ex3AwZCYN8udpi6bxsyjZidb2McXs69hZhLmJlDqTSP8cH+jSRpiaijBg==} engines: {node: '>= 20'} peerDependencies: '@octokit/core': ^7.0.0 @@ -2255,14 +2282,18 @@ packages: resolution: {integrity: sha512-v9iyEQJH6ZntoENr9/yXxjuezh4My67CBSu9r6Ve/05Iu5gNgnisNWOsoJHTP6k0Rr0+HQIpnH+kyammu90q/g==} engines: {node: '>= 18'} - '@octokit/request-error@7.0.1': - resolution: {integrity: sha512-CZpFwV4+1uBrxu7Cw8E5NCXDWFNf18MSY23TdxCBgjw1tXXHvTrZVsXlW8hgFTOLw8RQR1BBrMvYRtuyaijHMA==} + '@octokit/request-error@7.0.2': + resolution: {integrity: sha512-U8piOROoQQUyExw5c6dTkU3GKxts5/ERRThIauNL7yaRoeXW0q/5bgHWT7JfWBw1UyrbK8ERId2wVkcB32n0uQ==} engines: {node: '>= 20'} '@octokit/request@10.0.5': resolution: {integrity: sha512-TXnouHIYLtgDhKo+N6mXATnDBkV05VwbR0TtMWpgTHIoQdRQfCSzmy/LGqR1AbRMbijq/EckC/E3/ZNcU92NaQ==} engines: {node: '>= 20'} + '@octokit/request@10.0.6': + resolution: {integrity: sha512-FO+UgZCUu+pPnZAR+iKdUt64kPE7QW7ciqpldaMXaNzixz5Jld8dJ31LAUewk0cfSRkNSRKyqG438ba9c/qDlQ==} + engines: {node: '>= 20'} + '@octokit/request@8.4.1': resolution: {integrity: sha512-qnB2+SY3hkCmBxZsR/MPCybNmbJe4KAlfWErXq+rBKkQJlbjdJeS85VI9r8UqeLYLvnAenU8Q1okM/0MBsAGXw==} engines: {node: '>= 18'} @@ -2279,6 +2310,9 @@ packages: '@octokit/types@15.0.0': resolution: {integrity: sha512-8o6yDfmoGJUIeR9OfYU0/TUJTnMPG2r68+1yEdUeG2Fdqpj8Qetg0ziKIgcBm0RW/j29H41WP37CYCEhp6GoHQ==} + '@octokit/types@16.0.0': + resolution: {integrity: sha512-sKq+9r1Mm4efXW1FCk7hFSeJo4QKreL/tTbR0rz/qx/r1Oa2VV83LTA/H/MuCOX7uCIJmQVRKBcbmWoySjAnSg==} + '@octokit/webhooks-methods@6.0.0': resolution: {integrity: sha512-MFlzzoDJVw/GcbfzVC1RLR36QqkTLUf79vLVO3D+xn7r0QgxnFoLZgtrzxiQErAjFUOdH6fas2KeQJ1yr/qaXQ==} engines: {node: '>= 20'} @@ -4621,8 +4655,8 @@ packages: resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} engines: {node: '>= 0.4'} - dayjs@1.11.18: - resolution: {integrity: sha512-zFBQ7WFRvVRhKcWoUh+ZA1g2HVgUbsZm9sbddh8EC5iv93sui8DVVz1Npvz+r6meo9VKfa8NyLWBsQK1VvIKPA==} + dayjs@1.11.19: + resolution: {integrity: sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw==} de-indent@1.0.2: resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==} @@ -6770,8 +6804,8 @@ packages: resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} engines: {node: '>= 0.4'} - octokit@5.0.4: - resolution: {integrity: sha512-4n/mMoLQs2npBE+aTG5o4H+hZhFKu8aDqZFP/nmUNRUYrTpXpaqvX1ppK5eiCtQ+uP/8jI6vbdfCB2udlBgccA==} + octokit@5.0.5: + resolution: {integrity: sha512-4+/OFSqOjoyULo7eN7EA97DE0Xydj/PW5aIckxqQIoFjFwqXKuFCvXUJObyJfBF9Khu4RL/jlDRI9FPaMGfPnw==} engines: {node: '>= 20'} ofetch@1.4.1: @@ -7494,112 +7528,112 @@ packages: safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - sass-embedded-all-unknown@1.93.2: - resolution: {integrity: sha512-GdEuPXIzmhRS5J7UKAwEvtk8YyHQuFZRcpnEnkA3rwRUI27kwjyXkNeIj38XjUQ3DzrfMe8HcKFaqWGHvblS7Q==} + sass-embedded-all-unknown@1.93.3: + resolution: {integrity: sha512-3okGgnE41eg+CPLtAPletu6nQ4N0ij7AeW+Sl5Km4j29XcmqZQeFwYjHe1AlKTEgLi/UAONk1O8i8/lupeKMbw==} cpu: ['!arm', '!arm64', '!riscv64', '!x64'] - sass-embedded-android-arm64@1.93.2: - resolution: {integrity: sha512-346f4iVGAPGcNP6V6IOOFkN5qnArAoXNTPr5eA/rmNpeGwomdb7kJyQ717r9rbJXxOG8OAAUado6J0qLsjnjXQ==} + sass-embedded-android-arm64@1.93.3: + resolution: {integrity: sha512-uqUl3Kt1IqdGVAcAdbmC+NwuUJy8tM+2ZnB7/zrt6WxWVShVCRdFnWR9LT8HJr7eJN7AU8kSXxaVX/gedanPsg==} engines: {node: '>=14.0.0'} cpu: [arm64] os: [android] - sass-embedded-android-arm@1.93.2: - resolution: {integrity: sha512-I8bpO8meZNo5FvFx5FIiE7DGPVOYft0WjuwcCCdeJ6duwfkl6tZdatex1GrSigvTsuz9L0m4ngDcX/Tj/8yMow==} + sass-embedded-android-arm@1.93.3: + resolution: {integrity: sha512-8xOw9bywfOD6Wv24BgCmgjkk6tMrsOTTHcb28KDxeJtFtoxiUyMbxo0vChpPAfp2Hyg2tFFKS60s0s4JYk+Raw==} engines: {node: '>=14.0.0'} cpu: [arm] os: [android] - sass-embedded-android-riscv64@1.93.2: - resolution: {integrity: sha512-hSMW1s4yJf5guT9mrdkumluqrwh7BjbZ4MbBW9tmi1DRDdlw1Wh9Oy1HnnmOG8x9XcI1qkojtPL6LUuEJmsiDg==} + sass-embedded-android-riscv64@1.93.3: + resolution: {integrity: sha512-2jNJDmo+3qLocjWqYbXiBDnfgwrUeZgZFHJIwAefU7Fn66Ot7rsXl+XPwlokaCbTpj7eMFIqsRAZ/uDueXNCJg==} engines: {node: '>=14.0.0'} cpu: [riscv64] os: [android] - sass-embedded-android-x64@1.93.2: - resolution: {integrity: sha512-JqktiHZduvn+ldGBosE40ALgQ//tGCVNAObgcQ6UIZznEJbsHegqStqhRo8UW3x2cgOO2XYJcrInH6cc7wdKbw==} + sass-embedded-android-x64@1.93.3: + resolution: {integrity: sha512-y0RoAU6ZenQFcjM9PjQd3cRqRTjqwSbtWLL/p68y2oFyh0QGN0+LQ826fc0ZvU/AbqCsAizkqjzOn6cRZJxTTQ==} engines: {node: '>=14.0.0'} cpu: [x64] os: [android] - sass-embedded-darwin-arm64@1.93.2: - resolution: {integrity: sha512-qI1X16qKNeBJp+M/5BNW7v/JHCDYWr1/mdoJ7+UMHmP0b5AVudIZtimtK0hnjrLnBECURifd6IkulybR+h+4UA==} + sass-embedded-darwin-arm64@1.93.3: + resolution: {integrity: sha512-7zb/hpdMOdKteK17BOyyypemglVURd1Hdz6QGsggy60aUFfptTLQftLRg8r/xh1RbQAUKWFbYTNaM47J9yPxYg==} engines: {node: '>=14.0.0'} cpu: [arm64] os: [darwin] - sass-embedded-darwin-x64@1.93.2: - resolution: {integrity: sha512-4KeAvlkQ0m0enKUnDGQJZwpovYw99iiMb8CTZRSsQm8Eh7halbJZVmx67f4heFY/zISgVOCcxNg19GrM5NTwtA==} + sass-embedded-darwin-x64@1.93.3: + resolution: {integrity: sha512-Ek1Vp8ZDQEe327Lz0b7h3hjvWH3u9XjJiQzveq74RPpJQ2q6d9LfWpjiRRohM4qK6o4XOHw1X10OMWPXJtdtWg==} engines: {node: '>=14.0.0'} cpu: [x64] os: [darwin] - sass-embedded-linux-arm64@1.93.2: - resolution: {integrity: sha512-9ftX6nd5CsShJqJ2WRg+ptaYvUW+spqZfJ88FbcKQBNFQm6L87luj3UI1rB6cP5EWrLwHA754OKxRJyzWiaN6g==} + sass-embedded-linux-arm64@1.93.3: + resolution: {integrity: sha512-RBrHWgfd8Dd8w4fbmdRVXRrhh8oBAPyeWDTKAWw8ZEmuXfVl4ytjDuyxaVilh6rR1xTRTNpbaA/YWApBlLrrNw==} engines: {node: '>=14.0.0'} cpu: [arm64] os: [linux] - sass-embedded-linux-arm@1.93.2: - resolution: {integrity: sha512-N3+D/ToHtzwLDO+lSH05Wo6/KRxFBPnbjVHASOlHzqJnK+g5cqex7IFAp6ozzlRStySk61Rp6d+YGrqZ6/P0PA==} + sass-embedded-linux-arm@1.93.3: + resolution: {integrity: sha512-yeiv2y+dp8B4wNpd3+JsHYD0mvpXSfov7IGyQ1tMIR40qv+ROkRqYiqQvAOXf76Qwh4Y9OaYZtLpnsPjfeq6mA==} engines: {node: '>=14.0.0'} cpu: [arm] os: [linux] - sass-embedded-linux-musl-arm64@1.93.2: - resolution: {integrity: sha512-+3EHuDPkMiAX5kytsjEC1bKZCawB9J6pm2eBIzzLMPWbf5xdx++vO1DpT7hD4bm4ZGn0eVHgSOKIfP6CVz6tVg==} + sass-embedded-linux-musl-arm64@1.93.3: + resolution: {integrity: sha512-PS829l+eUng+9W4PFclXGb4uA2+965NHV3/Sa5U7qTywjeeUUYTZg70dJHSqvhrBEfCc2XJABeW3adLJbyQYkw==} engines: {node: '>=14.0.0'} cpu: [arm64] os: [linux] - sass-embedded-linux-musl-arm@1.93.2: - resolution: {integrity: sha512-XBTvx66yRenvEsp3VaJCb3HQSyqCsUh7R+pbxcN5TuzueybZi0LXvn9zneksdXcmjACMlMpIVXi6LyHPQkYc8A==} + sass-embedded-linux-musl-arm@1.93.3: + resolution: {integrity: sha512-fU0fwAwbp7sBE3h5DVU5UPzvaLg7a4yONfFWkkcCp6ZrOiPuGRHXXYriWQ0TUnWy4wE+svsVuWhwWgvlb/tkKg==} engines: {node: '>=14.0.0'} cpu: [arm] os: [linux] - sass-embedded-linux-musl-riscv64@1.93.2: - resolution: {integrity: sha512-0sB5kmVZDKTYzmCSlTUnjh6mzOhzmQiW/NNI5g8JS4JiHw2sDNTvt1dsFTuqFkUHyEOY3ESTsfHHBQV8Ip4bEA==} + sass-embedded-linux-musl-riscv64@1.93.3: + resolution: {integrity: sha512-cK1oBY+FWQquaIGEeQ5H74KTO8cWsSWwXb/WaildOO9U6wmUypTgUYKQ0o5o/29nZbWWlM1PHuwVYTSnT23Jjg==} engines: {node: '>=14.0.0'} cpu: [riscv64] os: [linux] - sass-embedded-linux-musl-x64@1.93.2: - resolution: {integrity: sha512-t3ejQ+1LEVuHy7JHBI2tWHhoMfhedUNDjGJR2FKaLgrtJntGnyD1RyX0xb3nuqL/UXiEAtmTmZY+Uh3SLUe1Hg==} + sass-embedded-linux-musl-x64@1.93.3: + resolution: {integrity: sha512-A7wkrsHu2/I4Zpa0NMuPGkWDVV7QGGytxGyUq3opSXgAexHo/vBPlGoDXoRlSdex0cV+aTMRPjoGIfdmNlHwyg==} engines: {node: '>=14.0.0'} cpu: [x64] os: [linux] - sass-embedded-linux-riscv64@1.93.2: - resolution: {integrity: sha512-e7AndEwAbFtXaLy6on4BfNGTr3wtGZQmypUgYpSNVcYDO+CWxatKVY4cxbehMPhxG9g5ru+eaMfynvhZt7fLaA==} + sass-embedded-linux-riscv64@1.93.3: + resolution: {integrity: sha512-vWkW1+HTF5qcaHa6hO80gx/QfB6GGjJUP0xLbnAoY4pwEnw5ulGv6RM8qYr8IDhWfVt/KH+lhJ2ZFxnJareisQ==} engines: {node: '>=14.0.0'} cpu: [riscv64] os: [linux] - sass-embedded-linux-x64@1.93.2: - resolution: {integrity: sha512-U3EIUZQL11DU0xDDHXexd4PYPHQaSQa2hzc4EzmhHqrAj+TyfYO94htjWOd+DdTPtSwmLp+9cTWwPZBODzC96w==} + sass-embedded-linux-x64@1.93.3: + resolution: {integrity: sha512-k6uFxs+e5jSuk1Y0niCwuq42F9ZC5UEP7P+RIOurIm8w/5QFa0+YqeW+BPWEW5M1FqVOsNZH3qGn4ahqvAEjPA==} engines: {node: '>=14.0.0'} cpu: [x64] os: [linux] - sass-embedded-unknown-all@1.93.2: - resolution: {integrity: sha512-7VnaOmyewcXohiuoFagJ3SK5ddP9yXpU0rzz+pZQmS1/+5O6vzyFCUoEt3HDRaLctH4GT3nUGoK1jg0ae62IfQ==} + sass-embedded-unknown-all@1.93.3: + resolution: {integrity: sha512-o5wj2rLpXH0C+GJKt/VpWp6AnMsCCbfFmnMAttcrsa+U3yrs/guhZ3x55KAqqUsE8F47e3frbsDL+1OuQM5DAA==} os: ['!android', '!darwin', '!linux', '!win32'] - sass-embedded-win32-arm64@1.93.2: - resolution: {integrity: sha512-Y90DZDbQvtv4Bt0GTXKlcT9pn4pz8AObEjFF8eyul+/boXwyptPZ/A1EyziAeNaIEIfxyy87z78PUgCeGHsx3Q==} + sass-embedded-win32-arm64@1.93.3: + resolution: {integrity: sha512-0dOfT9moy9YmBolodwYYXtLwNr4jL4HQC9rBfv6mVrD7ud8ue2kDbn+GVzj1hEJxvEexVSmDCf7MHUTLcGs9xQ==} engines: {node: '>=14.0.0'} cpu: [arm64] os: [win32] - sass-embedded-win32-x64@1.93.2: - resolution: {integrity: sha512-BbSucRP6PVRZGIwlEBkp+6VQl2GWdkWFMN+9EuOTPrLxCJZoq+yhzmbjspd3PeM8+7WJ7AdFu/uRYdO8tor1iQ==} + sass-embedded-win32-x64@1.93.3: + resolution: {integrity: sha512-wHFVfxiS9hU/sNk7KReD+lJWRp3R0SLQEX4zfOnRP2zlvI2X4IQR5aZr9GNcuMP6TmNpX0nQPZTegS8+h9RrEg==} engines: {node: '>=14.0.0'} cpu: [x64] os: [win32] - sass-embedded@1.93.2: - resolution: {integrity: sha512-FvQdkn2dZ8DGiLgi0Uf4zsj7r/BsiLImNa5QJ10eZalY6NfZyjrmWGFcuCN5jNwlDlXFJnftauv+UtvBKLvepQ==} + sass-embedded@1.93.3: + resolution: {integrity: sha512-+VUy01yfDqNmIVMd/LLKl2TTtY0ovZN0rTonh+FhKr65mFwIYgU9WzgIZKS7U9/SPCQvWTsTGx9jyt+qRm/XFw==} engines: {node: '>=16.0.0'} hasBin: true @@ -7608,8 +7642,8 @@ packages: engines: {node: '>=14.0.0'} hasBin: true - sass@1.93.2: - resolution: {integrity: sha512-t+YPtOQHpGW1QWsh1CHQ5cPIr9lbbGZLZnbihP/D/qZj/yuV68m8qarcV17nvkOX81BCrvzAlq2klCQFZghyTg==} + sass@1.93.3: + resolution: {integrity: sha512-elOcIZRTM76dvxNAjqYrucTSI0teAF/L2Lv0s6f6b7FOwcwIuA357bIE871580AjHJuSvLIRUosgV+lIWx6Rgg==} engines: {node: '>=14.0.0'} hasBin: true @@ -10236,13 +10270,13 @@ snapshots: '@fastify/busboy@2.1.1': {} - '@greenhat616/material-react-table@4.0.0(e280acbbef45e6f87f5c25130de717f4)': + '@greenhat616/material-react-table@4.0.0(d79532340dc28deb8e20423caac43274)': dependencies: '@emotion/react': 11.14.0(@types/react@19.2.2)(react@19.2.0) '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react@19.2.0) '@mui/icons-material': 7.3.4(@mui/material@7.3.4(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@types/react@19.2.2)(react@19.2.0) '@mui/material': 7.3.4(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@mui/x-date-pickers': 8.16.0(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react@19.2.0))(@mui/material@7.3.4(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@mui/system@7.3.3(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(dayjs@1.11.18)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@mui/x-date-pickers': 8.16.0(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react@19.2.0))(@mui/material@7.3.4(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@mui/system@7.3.3(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(dayjs@1.11.19)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@tanstack/match-sorter-utils': 8.19.4 '@tanstack/react-table': 8.21.3(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@tanstack/react-virtual': 3.13.9(react-dom@19.2.0(react@19.2.0))(react@19.2.0) @@ -10280,7 +10314,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@iconify/json@2.2.401': + '@iconify/json@2.2.402': dependencies: '@iconify/types': 2.0.0 pathe: 2.0.3 @@ -10541,7 +10575,7 @@ snapshots: optionalDependencies: '@types/react': 19.2.2 - '@mui/x-date-pickers@8.16.0(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react@19.2.0))(@mui/material@7.3.4(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@mui/system@7.3.3(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(dayjs@1.11.18)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@mui/x-date-pickers@8.16.0(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react@19.2.0))(@mui/material@7.3.4(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@mui/system@7.3.3(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(dayjs@1.11.19)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: '@babel/runtime': 7.28.4 '@mui/material': 7.3.4(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) @@ -10557,7 +10591,7 @@ snapshots: optionalDependencies: '@emotion/react': 11.14.0(@types/react@19.2.2)(react@19.2.0) '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react@19.2.0) - dayjs: 1.11.18 + dayjs: 1.11.19 transitivePeerDependencies: - '@types/react' @@ -10599,23 +10633,23 @@ snapshots: '@nolyfill/is-core-module@1.0.39': {} - '@octokit/app@16.1.1': + '@octokit/app@16.1.2': dependencies: - '@octokit/auth-app': 8.1.1 - '@octokit/auth-unauthenticated': 7.0.2 - '@octokit/core': 7.0.5 + '@octokit/auth-app': 8.1.2 + '@octokit/auth-unauthenticated': 7.0.3 + '@octokit/core': 7.0.6 '@octokit/oauth-app': 8.0.3 - '@octokit/plugin-paginate-rest': 13.2.0(@octokit/core@7.0.5) - '@octokit/types': 15.0.0 + '@octokit/plugin-paginate-rest': 14.0.0(@octokit/core@7.0.6) + '@octokit/types': 16.0.0 '@octokit/webhooks': 14.0.2 - '@octokit/auth-app@8.1.1': + '@octokit/auth-app@8.1.2': dependencies: - '@octokit/auth-oauth-app': 9.0.2 - '@octokit/auth-oauth-user': 6.0.1 - '@octokit/request': 10.0.5 - '@octokit/request-error': 7.0.1 - '@octokit/types': 15.0.0 + '@octokit/auth-oauth-app': 9.0.3 + '@octokit/auth-oauth-user': 6.0.2 + '@octokit/request': 10.0.6 + '@octokit/request-error': 7.0.2 + '@octokit/types': 16.0.0 toad-cache: 3.7.0 universal-github-app-jwt: 2.2.0 universal-user-agent: 7.0.2 @@ -10628,6 +10662,14 @@ snapshots: '@octokit/types': 15.0.0 universal-user-agent: 7.0.2 + '@octokit/auth-oauth-app@9.0.3': + dependencies: + '@octokit/auth-oauth-device': 8.0.3 + '@octokit/auth-oauth-user': 6.0.2 + '@octokit/request': 10.0.6 + '@octokit/types': 16.0.0 + universal-user-agent: 7.0.2 + '@octokit/auth-oauth-device@8.0.2': dependencies: '@octokit/oauth-methods': 6.0.1 @@ -10635,6 +10677,13 @@ snapshots: '@octokit/types': 15.0.0 universal-user-agent: 7.0.2 + '@octokit/auth-oauth-device@8.0.3': + dependencies: + '@octokit/oauth-methods': 6.0.2 + '@octokit/request': 10.0.6 + '@octokit/types': 16.0.0 + universal-user-agent: 7.0.2 + '@octokit/auth-oauth-user@6.0.1': dependencies: '@octokit/auth-oauth-device': 8.0.2 @@ -10643,15 +10692,28 @@ snapshots: '@octokit/types': 15.0.0 universal-user-agent: 7.0.2 + '@octokit/auth-oauth-user@6.0.2': + dependencies: + '@octokit/auth-oauth-device': 8.0.3 + '@octokit/oauth-methods': 6.0.2 + '@octokit/request': 10.0.6 + '@octokit/types': 16.0.0 + universal-user-agent: 7.0.2 + '@octokit/auth-token@4.0.0': {} '@octokit/auth-token@6.0.0': {} '@octokit/auth-unauthenticated@7.0.2': dependencies: - '@octokit/request-error': 7.0.1 + '@octokit/request-error': 7.0.2 '@octokit/types': 15.0.0 + '@octokit/auth-unauthenticated@7.0.3': + dependencies: + '@octokit/request-error': 7.0.2 + '@octokit/types': 16.0.0 + '@octokit/core@5.2.0': dependencies: '@octokit/auth-token': 4.0.0 @@ -10662,13 +10724,13 @@ snapshots: before-after-hook: 2.2.3 universal-user-agent: 6.0.1 - '@octokit/core@7.0.5': + '@octokit/core@7.0.6': dependencies: '@octokit/auth-token': 6.0.0 - '@octokit/graphql': 9.0.2 - '@octokit/request': 10.0.5 - '@octokit/request-error': 7.0.1 - '@octokit/types': 15.0.0 + '@octokit/graphql': 9.0.3 + '@octokit/request': 10.0.6 + '@octokit/request-error': 7.0.2 + '@octokit/types': 16.0.0 before-after-hook: 4.0.0 universal-user-agent: 7.0.2 @@ -10677,6 +10739,11 @@ snapshots: '@octokit/types': 15.0.0 universal-user-agent: 7.0.2 + '@octokit/endpoint@11.0.2': + dependencies: + '@octokit/types': 16.0.0 + universal-user-agent: 7.0.2 + '@octokit/endpoint@9.0.6': dependencies: '@octokit/types': 13.10.0 @@ -10688,10 +10755,10 @@ snapshots: '@octokit/types': 13.10.0 universal-user-agent: 6.0.1 - '@octokit/graphql@9.0.2': + '@octokit/graphql@9.0.3': dependencies: - '@octokit/request': 10.0.5 - '@octokit/types': 15.0.0 + '@octokit/request': 10.0.6 + '@octokit/types': 16.0.0 universal-user-agent: 7.0.2 '@octokit/oauth-app@8.0.3': @@ -10699,7 +10766,7 @@ snapshots: '@octokit/auth-oauth-app': 9.0.2 '@octokit/auth-oauth-user': 6.0.1 '@octokit/auth-unauthenticated': 7.0.2 - '@octokit/core': 7.0.5 + '@octokit/core': 7.0.6 '@octokit/oauth-authorization-url': 8.0.0 '@octokit/oauth-methods': 6.0.1 '@types/aws-lambda': 8.10.138 @@ -10711,9 +10778,16 @@ snapshots: dependencies: '@octokit/oauth-authorization-url': 8.0.0 '@octokit/request': 10.0.5 - '@octokit/request-error': 7.0.1 + '@octokit/request-error': 7.0.2 '@octokit/types': 15.0.0 + '@octokit/oauth-methods@6.0.2': + dependencies: + '@octokit/oauth-authorization-url': 8.0.0 + '@octokit/request': 10.0.6 + '@octokit/request-error': 7.0.2 + '@octokit/types': 16.0.0 + '@octokit/openapi-types@20.0.0': {} '@octokit/openapi-types@24.2.0': {} @@ -10722,16 +10796,18 @@ snapshots: '@octokit/openapi-types@26.0.0': {} + '@octokit/openapi-types@27.0.0': {} + '@octokit/openapi-webhooks-types@12.0.3': {} - '@octokit/plugin-paginate-graphql@6.0.0(@octokit/core@7.0.5)': + '@octokit/plugin-paginate-graphql@6.0.0(@octokit/core@7.0.6)': dependencies: - '@octokit/core': 7.0.5 + '@octokit/core': 7.0.6 - '@octokit/plugin-paginate-rest@13.2.0(@octokit/core@7.0.5)': + '@octokit/plugin-paginate-rest@14.0.0(@octokit/core@7.0.6)': dependencies: - '@octokit/core': 7.0.5 - '@octokit/types': 15.0.0 + '@octokit/core': 7.0.6 + '@octokit/types': 16.0.0 '@octokit/plugin-paginate-rest@9.2.2(@octokit/core@5.2.0)': dependencies: @@ -10743,22 +10819,22 @@ snapshots: '@octokit/core': 5.2.0 '@octokit/types': 12.6.0 - '@octokit/plugin-rest-endpoint-methods@16.1.0(@octokit/core@7.0.5)': + '@octokit/plugin-rest-endpoint-methods@17.0.0(@octokit/core@7.0.6)': dependencies: - '@octokit/core': 7.0.5 - '@octokit/types': 15.0.0 + '@octokit/core': 7.0.6 + '@octokit/types': 16.0.0 - '@octokit/plugin-retry@8.0.2(@octokit/core@7.0.5)': + '@octokit/plugin-retry@8.0.3(@octokit/core@7.0.6)': dependencies: - '@octokit/core': 7.0.5 - '@octokit/request-error': 7.0.1 - '@octokit/types': 15.0.0 + '@octokit/core': 7.0.6 + '@octokit/request-error': 7.0.2 + '@octokit/types': 16.0.0 bottleneck: 2.19.5 - '@octokit/plugin-throttling@11.0.2(@octokit/core@7.0.5)': + '@octokit/plugin-throttling@11.0.3(@octokit/core@7.0.6)': dependencies: - '@octokit/core': 7.0.5 - '@octokit/types': 15.0.0 + '@octokit/core': 7.0.6 + '@octokit/types': 16.0.0 bottleneck: 2.19.5 '@octokit/request-error@5.1.1': @@ -10767,18 +10843,26 @@ snapshots: deprecation: 2.3.1 once: 1.4.0 - '@octokit/request-error@7.0.1': + '@octokit/request-error@7.0.2': dependencies: - '@octokit/types': 15.0.0 + '@octokit/types': 16.0.0 '@octokit/request@10.0.5': dependencies: '@octokit/endpoint': 11.0.1 - '@octokit/request-error': 7.0.1 + '@octokit/request-error': 7.0.2 '@octokit/types': 15.0.0 fast-content-type-parse: 3.0.0 universal-user-agent: 7.0.2 + '@octokit/request@10.0.6': + dependencies: + '@octokit/endpoint': 11.0.2 + '@octokit/request-error': 7.0.2 + '@octokit/types': 16.0.0 + fast-content-type-parse: 3.0.0 + universal-user-agent: 7.0.2 + '@octokit/request@8.4.1': dependencies: '@octokit/endpoint': 9.0.6 @@ -10802,12 +10886,16 @@ snapshots: dependencies: '@octokit/openapi-types': 26.0.0 + '@octokit/types@16.0.0': + dependencies: + '@octokit/openapi-types': 27.0.0 + '@octokit/webhooks-methods@6.0.0': {} '@octokit/webhooks@14.0.2': dependencies: '@octokit/openapi-webhooks-types': 12.0.3 - '@octokit/request-error': 7.0.1 + '@octokit/request-error': 7.0.2 '@octokit/webhooks-methods': 6.0.0 '@oxc-parser/binding-android-arm64@0.74.0': @@ -11446,13 +11534,13 @@ snapshots: '@tanstack/query-core': 5.90.5 react: 19.2.0 - '@tanstack/react-router-devtools@1.133.36(@tanstack/react-router@1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@tanstack/router-core@1.133.36)(@types/node@24.9.2)(csstype@3.1.3)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass-embedded@1.93.2)(sass@1.93.2)(solid-js@1.9.5)(stylus@0.62.0)(terser@5.36.0)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1)': + '@tanstack/react-router-devtools@1.133.36(@tanstack/react-router@1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@tanstack/router-core@1.133.36)(@types/node@24.9.2)(csstype@3.1.3)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass-embedded@1.93.3)(sass@1.93.3)(solid-js@1.9.5)(stylus@0.62.0)(terser@5.36.0)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1)': dependencies: '@tanstack/react-router': 1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@tanstack/router-devtools-core': 1.133.36(@tanstack/router-core@1.133.36)(@types/node@24.9.2)(csstype@3.1.3)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.2)(sass@1.93.2)(solid-js@1.9.5)(stylus@0.62.0)(terser@5.36.0)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1) + '@tanstack/router-devtools-core': 1.133.36(@tanstack/router-core@1.133.36)(@types/node@24.9.2)(csstype@3.1.3)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.3)(sass@1.93.3)(solid-js@1.9.5)(stylus@0.62.0)(terser@5.36.0)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1) react: 19.2.0 react-dom: 19.2.0(react@19.2.0) - vite: 7.1.12(@types/node@24.9.2)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.12(@types/node@24.9.2)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.3)(sass@1.93.3)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - '@tanstack/router-core' - '@types/node' @@ -11510,14 +11598,14 @@ snapshots: tiny-invariant: 1.3.3 tiny-warning: 1.0.3 - '@tanstack/router-devtools-core@1.133.36(@tanstack/router-core@1.133.36)(@types/node@24.9.2)(csstype@3.1.3)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.2)(sass@1.93.2)(solid-js@1.9.5)(stylus@0.62.0)(terser@5.36.0)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1)': + '@tanstack/router-devtools-core@1.133.36(@tanstack/router-core@1.133.36)(@types/node@24.9.2)(csstype@3.1.3)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.3)(sass@1.93.3)(solid-js@1.9.5)(stylus@0.62.0)(terser@5.36.0)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1)': dependencies: '@tanstack/router-core': 1.133.36 clsx: 2.1.1 goober: 2.1.16(csstype@3.1.3) solid-js: 1.9.5 tiny-invariant: 1.3.3 - vite: 7.1.12(@types/node@24.9.2)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.12(@types/node@24.9.2)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.3)(sass@1.93.3)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1) optionalDependencies: csstype: 3.1.3 transitivePeerDependencies: @@ -11546,7 +11634,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@tanstack/router-plugin@1.133.36(@tanstack/react-router@1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1))': + '@tanstack/router-plugin@1.133.36(@tanstack/react-router@1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.3)(sass@1.93.3)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1))': dependencies: '@babel/core': 7.28.4 '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.4) @@ -11564,7 +11652,7 @@ snapshots: zod: 3.25.76 optionalDependencies: '@tanstack/react-router': 1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - vite: 7.1.12(@types/node@24.9.2)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.12(@types/node@24.9.2)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.3)(sass@1.93.3)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - supports-color @@ -12177,7 +12265,7 @@ snapshots: '@unrs/resolver-binding-win32-x64-msvc@1.10.1': optional: true - '@vitejs/plugin-legacy@7.2.1(terser@5.36.0)(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1))': + '@vitejs/plugin-legacy@7.2.1(terser@5.36.0)(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.3)(sass@1.93.3)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1))': dependencies: '@babel/core': 7.28.0 '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.28.0) @@ -12192,19 +12280,19 @@ snapshots: regenerator-runtime: 0.14.1 systemjs: 6.15.1 terser: 5.36.0 - vite: 7.1.12(@types/node@24.9.2)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.12(@types/node@24.9.2)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.3)(sass@1.93.3)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - supports-color - '@vitejs/plugin-react-swc@4.2.0(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1))': + '@vitejs/plugin-react-swc@4.2.0(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.3)(sass@1.93.3)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1))': dependencies: '@rolldown/pluginutils': 1.0.0-beta.43 '@swc/core': 1.13.5 - vite: 7.1.12(@types/node@24.9.2)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.12(@types/node@24.9.2)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.3)(sass@1.93.3)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - '@swc/helpers' - '@vitejs/plugin-react@5.1.0(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1))': + '@vitejs/plugin-react@5.1.0(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.3)(sass@1.93.3)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1))': dependencies: '@babel/core': 7.28.4 '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.4) @@ -12212,7 +12300,7 @@ snapshots: '@rolldown/pluginutils': 1.0.0-beta.43 '@types/babel__core': 7.20.5 react-refresh: 0.18.0 - vite: 7.1.12(@types/node@24.9.2)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.12(@types/node@24.9.2)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.3)(sass@1.93.3)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - supports-color @@ -12286,7 +12374,7 @@ snapshots: dependencies: '@babel/runtime': 7.28.4 '@types/js-cookie': 3.0.6 - dayjs: 1.11.18 + dayjs: 1.11.19 intersection-observer: 0.12.2 js-cookie: 3.0.5 lodash: 4.17.21 @@ -13176,7 +13264,7 @@ snapshots: es-errors: 1.3.0 is-data-view: 1.0.2 - dayjs@1.11.18: {} + dayjs@1.11.19: {} de-indent@1.0.2: {} @@ -15697,18 +15785,18 @@ snapshots: define-properties: 1.2.1 es-object-atoms: 1.1.1 - octokit@5.0.4: + octokit@5.0.5: dependencies: - '@octokit/app': 16.1.1 - '@octokit/core': 7.0.5 + '@octokit/app': 16.1.2 + '@octokit/core': 7.0.6 '@octokit/oauth-app': 8.0.3 - '@octokit/plugin-paginate-graphql': 6.0.0(@octokit/core@7.0.5) - '@octokit/plugin-paginate-rest': 13.2.0(@octokit/core@7.0.5) - '@octokit/plugin-rest-endpoint-methods': 16.1.0(@octokit/core@7.0.5) - '@octokit/plugin-retry': 8.0.2(@octokit/core@7.0.5) - '@octokit/plugin-throttling': 11.0.2(@octokit/core@7.0.5) - '@octokit/request-error': 7.0.1 - '@octokit/types': 15.0.0 + '@octokit/plugin-paginate-graphql': 6.0.0(@octokit/core@7.0.6) + '@octokit/plugin-paginate-rest': 14.0.0(@octokit/core@7.0.6) + '@octokit/plugin-rest-endpoint-methods': 17.0.0(@octokit/core@7.0.6) + '@octokit/plugin-retry': 8.0.3(@octokit/core@7.0.6) + '@octokit/plugin-throttling': 11.0.3(@octokit/core@7.0.6) + '@octokit/request-error': 7.0.2 + '@octokit/types': 16.0.0 '@octokit/webhooks': 14.0.2 ofetch@1.4.1: @@ -16125,14 +16213,14 @@ snapshots: react: 19.2.0 react-dom: 19.2.0(react@19.2.0) - react-hook-form-mui@8.0.0(b926da5d1c96a6781f507ace4a1c77e1): + react-hook-form-mui@8.0.0(d9b7a0dfb9e86eb33826a2476815ec9f): dependencies: '@mui/material': 7.3.4(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) react: 19.2.0 react-hook-form: 7.52.1(react@19.2.0) optionalDependencies: '@mui/icons-material': 7.3.4(@mui/material@7.3.4(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@types/react@19.2.2)(react@19.2.0) - '@mui/x-date-pickers': 8.16.0(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react@19.2.0))(@mui/material@7.3.4(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@mui/system@7.3.3(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(dayjs@1.11.18)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@mui/x-date-pickers': 8.16.0(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react@19.2.0))(@mui/material@7.3.4(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@mui/system@7.3.3(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(react@19.2.0))(@types/react@19.2.2)(dayjs@1.11.19)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) react-hook-form@7.52.1(react@19.2.0): dependencies: @@ -16481,65 +16569,65 @@ snapshots: safer-buffer@2.1.2: {} - sass-embedded-all-unknown@1.93.2: + sass-embedded-all-unknown@1.93.3: dependencies: - sass: 1.93.2 + sass: 1.93.3 optional: true - sass-embedded-android-arm64@1.93.2: + sass-embedded-android-arm64@1.93.3: optional: true - sass-embedded-android-arm@1.93.2: + sass-embedded-android-arm@1.93.3: optional: true - sass-embedded-android-riscv64@1.93.2: + sass-embedded-android-riscv64@1.93.3: optional: true - sass-embedded-android-x64@1.93.2: + sass-embedded-android-x64@1.93.3: optional: true - sass-embedded-darwin-arm64@1.93.2: + sass-embedded-darwin-arm64@1.93.3: optional: true - sass-embedded-darwin-x64@1.93.2: + sass-embedded-darwin-x64@1.93.3: optional: true - sass-embedded-linux-arm64@1.93.2: + sass-embedded-linux-arm64@1.93.3: optional: true - sass-embedded-linux-arm@1.93.2: + sass-embedded-linux-arm@1.93.3: optional: true - sass-embedded-linux-musl-arm64@1.93.2: + sass-embedded-linux-musl-arm64@1.93.3: optional: true - sass-embedded-linux-musl-arm@1.93.2: + sass-embedded-linux-musl-arm@1.93.3: optional: true - sass-embedded-linux-musl-riscv64@1.93.2: + sass-embedded-linux-musl-riscv64@1.93.3: optional: true - sass-embedded-linux-musl-x64@1.93.2: + sass-embedded-linux-musl-x64@1.93.3: optional: true - sass-embedded-linux-riscv64@1.93.2: + sass-embedded-linux-riscv64@1.93.3: optional: true - sass-embedded-linux-x64@1.93.2: + sass-embedded-linux-x64@1.93.3: optional: true - sass-embedded-unknown-all@1.93.2: + sass-embedded-unknown-all@1.93.3: dependencies: - sass: 1.93.2 + sass: 1.93.3 optional: true - sass-embedded-win32-arm64@1.93.2: + sass-embedded-win32-arm64@1.93.3: optional: true - sass-embedded-win32-x64@1.93.2: + sass-embedded-win32-x64@1.93.3: optional: true - sass-embedded@1.93.2: + sass-embedded@1.93.3: dependencies: '@bufbuild/protobuf': 2.5.2 buffer-builder: 0.2.0 @@ -16550,24 +16638,24 @@ snapshots: sync-child-process: 1.0.2 varint: 6.0.0 optionalDependencies: - sass-embedded-all-unknown: 1.93.2 - sass-embedded-android-arm: 1.93.2 - sass-embedded-android-arm64: 1.93.2 - sass-embedded-android-riscv64: 1.93.2 - sass-embedded-android-x64: 1.93.2 - sass-embedded-darwin-arm64: 1.93.2 - sass-embedded-darwin-x64: 1.93.2 - sass-embedded-linux-arm: 1.93.2 - sass-embedded-linux-arm64: 1.93.2 - sass-embedded-linux-musl-arm: 1.93.2 - sass-embedded-linux-musl-arm64: 1.93.2 - sass-embedded-linux-musl-riscv64: 1.93.2 - sass-embedded-linux-musl-x64: 1.93.2 - sass-embedded-linux-riscv64: 1.93.2 - sass-embedded-linux-x64: 1.93.2 - sass-embedded-unknown-all: 1.93.2 - sass-embedded-win32-arm64: 1.93.2 - sass-embedded-win32-x64: 1.93.2 + sass-embedded-all-unknown: 1.93.3 + sass-embedded-android-arm: 1.93.3 + sass-embedded-android-arm64: 1.93.3 + sass-embedded-android-riscv64: 1.93.3 + sass-embedded-android-x64: 1.93.3 + sass-embedded-darwin-arm64: 1.93.3 + sass-embedded-darwin-x64: 1.93.3 + sass-embedded-linux-arm: 1.93.3 + sass-embedded-linux-arm64: 1.93.3 + sass-embedded-linux-musl-arm: 1.93.3 + sass-embedded-linux-musl-arm64: 1.93.3 + sass-embedded-linux-musl-riscv64: 1.93.3 + sass-embedded-linux-musl-x64: 1.93.3 + sass-embedded-linux-riscv64: 1.93.3 + sass-embedded-linux-x64: 1.93.3 + sass-embedded-unknown-all: 1.93.3 + sass-embedded-win32-arm64: 1.93.3 + sass-embedded-win32-x64: 1.93.3 sass@1.83.0: dependencies: @@ -16577,7 +16665,7 @@ snapshots: optionalDependencies: '@parcel/watcher': 2.4.1 - sass@1.93.2: + sass@1.93.3: dependencies: chokidar: 4.0.0 immutable: 5.0.2 @@ -17562,7 +17650,7 @@ snapshots: - rollup - supports-color - vite-plugin-dts@4.5.4(@types/node@24.9.2)(rollup@4.46.2)(typescript@5.9.3)(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1)): + vite-plugin-dts@4.5.4(@types/node@24.9.2)(rollup@4.46.2)(typescript@5.9.3)(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.3)(sass@1.93.3)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1)): dependencies: '@microsoft/api-extractor': 7.51.0(@types/node@24.9.2) '@rollup/pluginutils': 5.1.4(rollup@4.46.2) @@ -17575,13 +17663,13 @@ snapshots: magic-string: 0.30.17 typescript: 5.9.3 optionalDependencies: - vite: 7.1.12(@types/node@24.9.2)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.12(@types/node@24.9.2)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.3)(sass@1.93.3)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - '@types/node' - rollup - supports-color - vite-plugin-html@3.2.2(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1)): + vite-plugin-html@3.2.2(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.3)(sass@1.93.3)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1)): dependencies: '@rollup/pluginutils': 4.2.1 colorette: 2.0.20 @@ -17595,39 +17683,39 @@ snapshots: html-minifier-terser: 6.1.0 node-html-parser: 5.4.2 pathe: 0.2.0 - vite: 7.1.12(@types/node@24.9.2)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.12(@types/node@24.9.2)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.3)(sass@1.93.3)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1) - vite-plugin-sass-dts@1.3.34(postcss@8.5.6)(prettier@3.6.2)(sass-embedded@1.93.2)(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1)): + vite-plugin-sass-dts@1.3.34(postcss@8.5.6)(prettier@3.6.2)(sass-embedded@1.93.3)(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.3)(sass@1.93.3)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1)): dependencies: postcss: 8.5.6 postcss-js: 4.0.1(postcss@8.5.6) prettier: 3.6.2 - sass-embedded: 1.93.2 - vite: 7.1.12(@types/node@24.9.2)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1) + sass-embedded: 1.93.3 + vite: 7.1.12(@types/node@24.9.2)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.3)(sass@1.93.3)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1) - vite-plugin-svgr@4.5.0(rollup@4.46.2)(typescript@5.9.3)(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1)): + vite-plugin-svgr@4.5.0(rollup@4.46.2)(typescript@5.9.3)(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.3)(sass@1.93.3)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1)): dependencies: '@rollup/pluginutils': 5.2.0(rollup@4.46.2) '@svgr/core': 8.1.0(typescript@5.9.3) '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.9.3)) - vite: 7.1.12(@types/node@24.9.2)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.12(@types/node@24.9.2)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.3)(sass@1.93.3)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - rollup - supports-color - typescript - vite-tsconfig-paths@5.1.4(typescript@5.9.3)(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1)): + vite-tsconfig-paths@5.1.4(typescript@5.9.3)(vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.3)(sass@1.93.3)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1)): dependencies: debug: 4.3.7 globrex: 0.1.2 tsconfck: 3.0.3(typescript@5.9.3) optionalDependencies: - vite: 7.1.12(@types/node@24.9.2)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.12(@types/node@24.9.2)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.3)(sass@1.93.3)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - supports-color - typescript - vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1): + vite@7.1.12(@types/node@24.9.2)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.3)(sass@1.93.3)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1): dependencies: esbuild: 0.25.0 fdir: 6.5.0(picomatch@4.0.3) @@ -17641,8 +17729,8 @@ snapshots: jiti: 2.6.1 less: 4.2.0 lightningcss: 1.30.2 - sass: 1.93.2 - sass-embedded: 1.93.2 + sass: 1.93.3 + sass-embedded: 1.93.3 stylus: 0.62.0 terser: 5.36.0 tsx: 4.20.6 diff --git a/clash-nyanpasu/scripts/package.json b/clash-nyanpasu/scripts/package.json index 3d86ff419f..d93f482162 100644 --- a/clash-nyanpasu/scripts/package.json +++ b/clash-nyanpasu/scripts/package.json @@ -20,7 +20,7 @@ "colorize-template": "1.0.0", "consola": "3.4.2", "fs-extra": "11.3.2", - "octokit": "5.0.4", + "octokit": "5.0.5", "picocolors": "1.1.1", "tar": "7.5.2", "telegram": "2.26.22", diff --git a/filebrowser/CHANGELOG.md b/filebrowser/CHANGELOG.md index 1659a413cf..7a130be046 100644 --- a/filebrowser/CHANGELOG.md +++ b/filebrowser/CHANGELOG.md @@ -2,6 +2,18 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +## [2.45.0](https://github.com/filebrowser/filebrowser/compare/v2.44.2...v2.45.0) (2025-11-01) + + +### Features + +* update translations ([#5458](https://github.com/filebrowser/filebrowser/issues/5458)) ([b9a03fa](https://github.com/filebrowser/filebrowser/commit/b9a03fabd98119d6588882f5ba2a7d29b012d729)) + + +### Bug Fixes + +* support croatian ([#5502](https://github.com/filebrowser/filebrowser/issues/5502)) ([93fe31c](https://github.com/filebrowser/filebrowser/commit/93fe31cc55c9d9d27c634993619a768fa700da1d)) + ### [2.44.2](https://github.com/filebrowser/filebrowser/compare/v2.44.1...v2.44.2) (2025-10-22) diff --git a/filebrowser/frontend/src/components/settings/Languages.vue b/filebrowser/frontend/src/components/settings/Languages.vue index f17ab8e246..f4e4090eb6 100644 --- a/filebrowser/frontend/src/components/settings/Languages.vue +++ b/filebrowser/frontend/src/components/settings/Languages.vue @@ -16,6 +16,7 @@ export default { const dataObj = {}; const locales = { he: "עברית", + hr: "Hrvatski", hu: "Magyar", ar: "العربية", ca: "Català", diff --git a/filebrowser/frontend/src/i18n/hr.json b/filebrowser/frontend/src/i18n/hr.json new file mode 100644 index 0000000000..433a3b436f --- /dev/null +++ b/filebrowser/frontend/src/i18n/hr.json @@ -0,0 +1,271 @@ +{ + "buttons": { + "cancel": "Otkaži", + "clear": "Očisti", + "close": "Zatvori", + "continue": "Nastavi", + "copy": "Kopiraj", + "copyFile": "Kopiraj datoteku", + "copyToClipboard": "Kopiraj u međuspremnik", + "copyDownloadLinkToClipboard": "Kopiraj poveznicu za preuzimanje u međuspremnik", + "create": "Stvori", + "delete": "Izbriši", + "download": "Preuzmi", + "file": "Datoteka", + "folder": "Mapa", + "fullScreen": "Prebaci na cijeli zaslon", + "hideDotfiles": "Sakrij datoteke koje započinju točkom", + "info": "Info", + "more": "Više", + "move": "Premjesti", + "moveFile": "Premjesti datoteku", + "new": "Novo", + "next": "Sljedeće", + "ok": "OK", + "permalink": "Dohvati trajnu poveznicu", + "previous": "Prethodno", + "preview": "Pregled", + "publish": "Objavi", + "rename": "Preimenuj", + "replace": "Zamijeni", + "reportIssue": "Prijavi grešku", + "save": "Spremi", + "schedule": "Zakaži", + "search": "Pretraži", + "select": "Označi", + "selectMultiple": "Označi više", + "share": "Podijeli", + "shell": "Promijeni ljusku", + "submit": "Predaj", + "switchView": "Promijeni prikaz", + "toggleSidebar": "Prebaci bočnu traku", + "update": "Ažuriraj", + "upload": "Prenesi", + "openFile": "Otvori datoteku", + "discardChanges": "Odbaci", + "saveChanges": "Spremi promjene" + }, + "download": { + "downloadFile": "Preuzmi Datoteku", + "downloadFolder": "Preuzmi Mapu", + "downloadSelected": "Preuzmi Odabrano" + }, + "upload": { + "abortUpload": "Jeste li sigurni da hoćete otkazati?" + }, + "errors": { + "forbidden": "Nemate dopuštenje pristupiti ovome.", + "internal": "Nešto je stvarno pošlo po zlu.", + "notFound": "Lokacija ne može biti dohvaćena.", + "connection": "Poslužitelj ne može biti dohvaćen." + }, + "files": { + "body": "Tijelo", + "closePreview": "Zatvori pregled", + "files": "Datoteke", + "folders": "Mape", + "home": "Dom", + "lastModified": "Zadnje izmijenjeno", + "loading": "Učitavanje...", + "lonely": "Ovdje je tako prazno...", + "metadata": "Metapodaci", + "multipleSelectionEnabled": "Višestruk odabir", + "name": "Naziv", + "size": "Veličina", + "sortByLastModified": "Sortiraj po zadnjoj izmjeni", + "sortByName": "Sortiraj po nazivu", + "sortBySize": "Sortiraj po veličini", + "noPreview": "Pregled nije dostupan za ovu datoteku." + }, + "help": { + "click": "odaberi datoteku ili mapu", + "ctrl": { + "click": "odaberi više datoteka ili mapa", + "f": "tražilica", + "s": "spremi datoteku ili preuzmi trenutnu mapu" + }, + "del": "izbriši odabrane stavke", + "doubleClick": "otvori datoteku ili mapu", + "esc": "očisti odabir i/ili zatvori upit", + "f1": "ova informacija", + "f2": "preimenuj datoteku", + "help": "Pomoć" + }, + "login": { + "createAnAccount": "Stvori korisnički račun", + "loginInstead": "Imam korisnički račun", + "password": "Lozinka", + "passwordConfirm": "Potvrda lozinke", + "passwordsDontMatch": "Lozinke se ne podudaraju", + "signup": "Registracija", + "submit": "Prijava", + "username": "Korisničko ime", + "usernameTaken": "Korisničko ime zauzeto", + "wrongCredentials": "Neispravno korisničko ime/lozinka", + "logout_reasons": { + "inactivity": "Odjavljeni ste zbog neaktivnosti." + } + }, + "permanent": "Trajan", + "prompts": { + "copy": "Kopiraj", + "copyMessage": "Odaberite lokaciju za kopiranje datoteka:", + "currentlyNavigating": "Trenutno navigiranje na:", + "deleteMessageMultiple": "Jeste li sigurni da želite izbrisati datoteke: {count}?", + "deleteMessageSingle": "Jeste li sigurni da hoćete izbrisati ovu datoteku/mapu?", + "deleteMessageShare": "Jeste li sigurni da hoćete izbrisati ovo dijeljenje({path})?", + "deleteUser": "Jeste li sigurni da hoćete izbrisati ovaj korisnički račun?", + "deleteTitle": "Izbriši datoteke", + "displayName": "Prikazno Ime:", + "download": "Preuzmi datoteke", + "downloadMessage": "Odaberite format za preuzimanje.", + "error": "Nešto je pošlo po zlu", + "fileInfo": "Informacije o datoteci", + "filesSelected": "{count} datoteka odabrana.", + "lastModified": "Zadnje izmijenjeno", + "move": "Premjesti", + "moveMessage": "Odaberite novi dom za Vašu datoteku(e)/mapu(e):", + "newArchetype": "Stvorite novu objavu na temelju arhetipu. Vaša datoteka bit će stvorena u mapi sadržaja.", + "newDir": "Nova mapa", + "newDirMessage": "Imenujte Vašu novu mapu.", + "newFile": "Nova datoteka", + "newFileMessage": "Imenujte Vašu novu datoteku.", + "numberDirs": "Broj mapa", + "numberFiles": "Broj datoteka", + "rename": "Preimenuj", + "renameMessage": "Umetni novo ime za", + "replace": "Zamijeni", + "replaceMessage": "Jedna od datoteka koju pokušavate prenijeti ima sukobljavajući naziv. Želite li preskočiti ovu datoteku i nastaviti s prijenosom ili zamijeniti postojeću datoteku?\n", + "schedule": "Zakaži", + "scheduleMessage": "Odaberite datum i vrijeme za zakazivanje ove objave.", + "show": "Prikaži", + "size": "Veličina", + "upload": "Prenesi", + "uploadFiles": "Prenošenje {files} datoteka...", + "uploadMessage": "Odaberite opciju za prijenos.", + "optionalPassword": "Opcionalna lozinka", + "resolution": "Rezolucija", + "discardEditorChanges": "Jeste li sigurni da želite odbaciti promjene koje ste napravili?" + }, + "search": { + "images": "Slike", + "music": "Glazba", + "pdf": "PDF", + "pressToSearch": "Pritisnite enter za pretraživanje...", + "search": "Pretraživanje...", + "typeToSearch": "Tipkajte za pretraživanje...", + "types": "Tipovi", + "video": "Video" + }, + "settings": { + "aceEditorTheme": "Ace editor theme", + "admin": "Admin", + "administrator": "Administrator", + "allowCommands": "Izvrši naredbe", + "allowEdit": "Uredi, preimenuj i izbriši datoteke ili mape", + "allowNew": "Stvori nove datoteke i mape", + "allowPublish": "Objavi nove objave i stranice", + "allowSignup": "Dopusti registraciju korisnicima", + "avoidChanges": "(ostavite prazno kako biste izbjegli promjene)", + "branding": "Brendiranje", + "brandingDirectoryPath": "Put brendiranja", + "brandingHelp": "Možete prilagoditi izgled i funkcionalnost Vašeg File Browsera mijenjanjem njegovog naziva, zamjenom logotipa, dodavanjem prilagođenih stilova pa čak i onemogućavanjem vanjskih poveznica na GitHub.\nZa više informacija o prilagođenome brendiranju pogledajte {0}.", + "changePassword": "Promjena lozinke", + "commandRunner": "Izvršitelj naredbi", + "commandRunnerHelp": "Ovdje možete postaviti naredbe koje se izvršuju u imenovanim događajima. Morate napisati jednu po liniji. Varijable okruženja {0} i {1} bit će dostupne, tako da je {0} relativna {1}. Za više informacija o ovoj značajci pogledajte {2}.", + "commandsUpdated": "Naredbe ažurirane!", + "createUserDir": "Automatsko stvaranje kućne mape korisnika pri dodavanju novog korisnika", + "minimumPasswordLength": "Minimalna duljina lozinke", + "tusUploads": "Segmentirani prijenosi", + "tusUploadsHelp": "File Browser podržava segmentirane prijenose datoteka, omogućavajući stvaranje učinkovitih, pouzdanih, obnovljivih i segmentiranih prijenosa datoteka čak i na nepouzdanim mrežama.", + "tusUploadsChunkSize": "Naznačuje maksimalnu veličinu zahtjeva (direktni prijenosi bit će korišteni za manje prijenose). Možete unijeti cijeli broj koji označava veličinu bajta ili niz znakova poput 10MB, 1GB itd.", + "tusUploadsRetryCount": "Broj ponovnih pokušaja ako se dio ne uspije prenijeti.", + "userHomeBasePath": "Bazni put za kućne mape korisnika", + "userScopeGenerationPlaceholder": "Opseg će se automatski generirati", + "createUserHomeDirectory": "Stvori kućnu mapu korisnika", + "customStylesheet": "Prilagođeni Stylesheet", + "defaultUserDescription": "Zadane postavke za nove korisnike.", + "disableExternalLinks": "Onemogući vanjske poveznice (osim dokumentacije)", + "disableUsedDiskPercentage": "Onemogući graf iskorištenosti diska", + "documentation": "dokumentacija", + "examples": "Primjeri", + "executeOnShell": "Izvrši u ljusci", + "executeOnShellDescription": "Po zadanim postavkama, File Browser izvršava naredbe izravnim pozivanjem njihovih binarnih datoteka. Ako ih želite izvršiti u ljusci (kao što su Bash ili PowerShell), možete ih definirati ovdje s potrebnim argumentima i oznakama. Ako je postavljena, naredba koju izvršavate bit će dodana kao argument. To se odnosi i na korisničke naredbe i na događajne kuke.", + "globalRules": "Ovo je globalan skup pravila dopuštanja i zabrane. Primjenjuju se na svakog korisnika. Moguće je definirati specifična pravila u postavkama svakog korisnika da biste nadjačali ove postavke.", + "globalSettings": "Globalne postavke", + "hideDotfiles": "Sakrij datoteke koje započinju točkom", + "insertPath": "Umetni put", + "insertRegex": "Umetni regex izraz", + "instanceName": "Naziv instance", + "language": "Jezik", + "lockPassword": "Onemogući mijenjanje lozinke korisniku", + "newPassword": "Vaša nova lozinka", + "newPasswordConfirm": "Potvrdite Vašu novu lozinku", + "newUser": "Novi Korisnik", + "password": "Lozinka", + "passwordUpdated": "Lozinka ažurirana!", + "path": "Put", + "perm": { + "create": "Stvaranje datoteka i mapa", + "delete": "Brisanje datoteka i mapa", + "download": "Preuzimanje", + "execute": "Izvršavanje naredbi", + "modify": "Uređivanje datoteka", + "rename": "Preimenovanje ili premještanje datoteka i mapa", + "share": "Dijeljenje datoteka" + }, + "permissions": "Dopuštenja", + "permissionsHelp": "Korisnika možete postaviti administratorom ili odabrati dopuštenja individualno. Odabirom na \"Administrator\", sve druge opcije bit će automatski odabrane. Upravljanje korisnicima ostaje privilegija administratora.\n", + "profileSettings": "Postavke profila", + "ruleExample1": "onemogućava pristup svakoj datoteci koja započinje točkom (poput .git, .gitignore) u svakoj mapi.\n", + "ruleExample2": "blokira pristup datoteci naziva Caddyfile na korijenu opsega.", + "rules": "Pravila", + "rulesHelp": "Ovdje možete definirati skup pravila dopuštanja i zabrane za ovog specifičnog korisnika. Blokirane datoteke neće se prikazivati u popisima i neće biti dostupne korisniku. Podržavamo regex i puteve relativne opsegu korisnika.\n", + "scope": "Opseg", + "setDateFormat": "Odredi točan format datuma", + "settingsUpdated": "Postavke ažurirane!", + "shareDuration": "Podijeli Trajanje", + "shareManagement": "Upravljanje Dijeljenjem", + "shareDeleted": "Podjela izbrisana!", + "singleClick": "Koristi jednostruke klikove za otvaranje datoteka i mapa", + "themes": { + "default": "Zadano - Sustav", + "dark": "Tamno", + "light": "Svijetlo", + "title": "Tema" + }, + "user": "Korisnik", + "userCommands": "Naredbe", + "userCommandsHelp": "Popis dostupnih naredbi za ovog korisnika. Primjer:\n", + "userCreated": "Korisnik stvoren!", + "userDefaults": "Zadane postavke korisnika", + "userDeleted": "Korisnik izbrisan!", + "userManagement": "Upravljanje Korisnicima", + "userUpdated": "Korisnik ažuriran!", + "username": "Korisničko ime", + "users": "Korisnici" + }, + "sidebar": { + "help": "Pomoć", + "hugoNew": "Hugo New", + "login": "Prijava", + "logout": "Odjava", + "myFiles": "Moje datoteke", + "newFile": "Nova datoteka", + "newFolder": "Nova mapa", + "preview": "Pregled", + "settings": "Postavke", + "signup": "Registracija", + "siteSettings": "Postavke stranice" + }, + "success": { + "linkCopied": "Poveznica kopirana!" + }, + "time": { + "days": "Dani", + "hours": "Sati", + "minutes": "Minute", + "seconds": "Sekunde", + "unit": "Jedinica vremena" + } +} diff --git a/filebrowser/frontend/src/i18n/index.ts b/filebrowser/frontend/src/i18n/index.ts index dcf6cef925..a276ee9d00 100644 --- a/filebrowser/frontend/src/i18n/index.ts +++ b/filebrowser/frontend/src/i18n/index.ts @@ -8,6 +8,7 @@ import("dayjs/locale/en"); import("dayjs/locale/es"); import("dayjs/locale/fr"); import("dayjs/locale/he"); +import("dayjs/locale/hr"); import("dayjs/locale/hu"); import("dayjs/locale/is"); import("dayjs/locale/it"); @@ -41,6 +42,9 @@ export function detectLocale() { case /^he\b/.test(locale): locale = "he"; break; + case /^hr\b/.test(locale): + locale = "hr"; + break; case /^hu\b/.test(locale): locale = "hu"; break; diff --git a/filebrowser/frontend/src/i18n/pl.json b/filebrowser/frontend/src/i18n/pl.json index b9db745534..7c9e71b861 100644 --- a/filebrowser/frontend/src/i18n/pl.json +++ b/filebrowser/frontend/src/i18n/pl.json @@ -158,7 +158,7 @@ "video": "Wideo" }, "settings": { - "aceEditorTheme": "Ace editor theme", + "aceEditorTheme": "Motyw edytora Ace", "admin": "Admin", "administrator": "Administrator", "allowCommands": "Wykonaj polecenie", diff --git a/filebrowser/frontend/src/i18n/sk.json b/filebrowser/frontend/src/i18n/sk.json index 68112fbaeb..da0fac33a3 100644 --- a/filebrowser/frontend/src/i18n/sk.json +++ b/filebrowser/frontend/src/i18n/sk.json @@ -43,7 +43,7 @@ "upload": "Nahrať", "openFile": "Otvoriť súbor", "discardChanges": "Zahodiť", - "saveChanges": "Save changes" + "saveChanges": "Uložiť zmeny" }, "download": { "downloadFile": "Stiahnuť súbor", @@ -103,7 +103,7 @@ "usernameTaken": "Meno je už obsadené", "wrongCredentials": "Nesprávne prihlasovacie údaje", "logout_reasons": { - "inactivity": "You have been logged out due to inactivity." + "inactivity": "Boli ste odhlásení z dôvodu nečinnosti." } }, "permanent": "Trvalé", diff --git a/filebrowser/frontend/src/i18n/sv-se.json b/filebrowser/frontend/src/i18n/sv-se.json index 9f66a1416d..0378587a19 100644 --- a/filebrowser/frontend/src/i18n/sv-se.json +++ b/filebrowser/frontend/src/i18n/sv-se.json @@ -3,18 +3,18 @@ "cancel": "Avbryt", "clear": "Rensa", "close": "Stäng", - "continue": "Continue", + "continue": "Fortsätt", "copy": "Kopiera", "copyFile": "Kopiera fil", "copyToClipboard": "Kopiera till urklipp", - "copyDownloadLinkToClipboard": "Copy download link to clipboard", + "copyDownloadLinkToClipboard": "Kopiera hämtningslänk till urklipp", "create": "Skapa", "delete": "Ta bort", "download": "Ladda ner", - "file": "File", - "folder": "Folder", - "fullScreen": "Toggle full screen", - "hideDotfiles": "Hide dotfiles", + "file": "Fil", + "folder": "Mapp", + "fullScreen": "Växla helskärm", + "hideDotfiles": "Dölj punktfiler", "info": "Info", "more": "Mer", "move": "Flytta", @@ -24,7 +24,7 @@ "ok": "OK", "permalink": "Skapa en permanent länk", "previous": "Föregående", - "preview": "Preview", + "preview": "Förhandsvisa", "publish": "Publisera", "rename": "Ändra namn", "replace": "Ersätt", @@ -36,28 +36,28 @@ "selectMultiple": "Välj flera", "share": "Dela", "shell": "Växla skal", - "submit": "Submit", + "submit": "Skicka", "switchView": "Byt vy", "toggleSidebar": "Växla sidofält", "update": "Uppdatera", "upload": "Ladda upp", - "openFile": "Open file", - "discardChanges": "Discard", - "saveChanges": "Save changes" + "openFile": "Öppna fil", + "discardChanges": "Förkasta", + "saveChanges": "Spara ändringar" }, "download": { "downloadFile": "Ladda ner fil", "downloadFolder": "Ladda ner mapp", - "downloadSelected": "Download Selected" + "downloadSelected": "Hämta markerade" }, "upload": { - "abortUpload": "Are you sure you wish to abort?" + "abortUpload": "Är du säker på att du vill avbryta?" }, "errors": { "forbidden": "Du saknar rättigheter till detta", "internal": "Något gick fel", "notFound": "Det går inte att nå den här platsen.", - "connection": "The server can't be reached." + "connection": "Servern går inte att nå." }, "files": { "body": "Huvud", @@ -75,7 +75,7 @@ "sortByLastModified": "Sortera på senast ändrad", "sortByName": "Sortera på namn", "sortBySize": "Sortera på storlek", - "noPreview": "Preview is not available for this file." + "noPreview": "Förhandsvisning är inte tillgänglig för denna fil." }, "help": { "click": "välj fil eller mapp", @@ -103,7 +103,7 @@ "usernameTaken": "Användarnamn upptaget", "wrongCredentials": "Fel inloggning", "logout_reasons": { - "inactivity": "You have been logged out due to inactivity." + "inactivity": "Du har blivit utloggad på grund av inaktivitet." } }, "permanent": "Permanent", @@ -113,8 +113,8 @@ "currentlyNavigating": "För närvarande navigerar du på:", "deleteMessageMultiple": "Är du säker på att du vill radera {count} filer(na)?", "deleteMessageSingle": "Är du säker på att du vill radera denna fil/mapp", - "deleteMessageShare": "Are you sure you wish to delete this share({path})?", - "deleteUser": "Are you sure you want to delete this user?", + "deleteMessageShare": "Är du säker på att du vill ta bort denna utdelning({path})?", + "deleteUser": "Är du säker på att du vill ta bort denna användare?", "deleteTitle": "Ta bort filer", "displayName": "Visningsnamn:", "download": "Ladda ner filer", @@ -140,12 +140,12 @@ "scheduleMessage": "Pick a date and time to schedule the publication of this post.", "show": "Visa", "size": "Storlek", - "upload": "Upload", - "uploadFiles": "Uploading {files} files...", - "uploadMessage": "Select an option to upload.", - "optionalPassword": "Optional password", - "resolution": "Resolution", - "discardEditorChanges": "Are you sure you wish to discard the changes you've made?" + "upload": "Ladda upp", + "uploadFiles": "Laddar upp {files} filer...", + "uploadMessage": "Välj ett alternativ att ladda upp.", + "optionalPassword": "Valfritt lösenord", + "resolution": "Upplösning", + "discardEditorChanges": "Är du säker på att du vill förkasta ändringarna du gjort?" }, "search": { "images": "Bilder", @@ -158,7 +158,7 @@ "video": "Video" }, "settings": { - "aceEditorTheme": "Ace editor theme", + "aceEditorTheme": "Tema för Ace editor", "admin": "Admin", "administrator": "Administratör", "allowCommands": "Exekvera kommandon", @@ -175,14 +175,14 @@ "commandRunnerHelp": "Här kan du ange kommandon som körs i de namngivna händelserna. Du måste skriva en per rad. Miljövariablerna {0} och {1} kommer att vara tillgängliga, och vara {0} i förhållande till {1}. För mer information om den här funktionen och de tillgängliga miljövariablerna, vänligen läs {2}.", "commandsUpdated": "Kommandon uppdaterade!", "createUserDir": "Auto skapa användarens hemkatalog när du lägger till nya användare", - "minimumPasswordLength": "Minimum password length", - "tusUploads": "Chunked Uploads", - "tusUploadsHelp": "File Browser supports chunked file uploads, allowing for the creation of efficient, reliable, resumable and chunked file uploads even on unreliable networks.", - "tusUploadsChunkSize": "Indicates to maximum size of a request (direct uploads will be used for smaller uploads). You may input a plain integer denoting byte size input or a string like 10MB, 1GB etc.", - "tusUploadsRetryCount": "Number of retries to perform if a chunk fails to upload.", - "userHomeBasePath": "Base path for user home directories", - "userScopeGenerationPlaceholder": "The scope will be auto generated", - "createUserHomeDirectory": "Create user home directory", + "minimumPasswordLength": "Minsta lösenordslängd", + "tusUploads": "Uppdelade uppladdningar", + "tusUploadsHelp": "Filbläddraren stöder uppdelade filuppladdningar, vilket möjliggör effektiva, tillförlitliga, återupptagbara och uppdelade filuppladdningar även på otillförlitliga nätverk.", + "tusUploadsChunkSize": "Anger maximal storlek för en begäran (direkta uppladdningar används för mindre uppladdningar). Du kan ange ett helt tal som anger storleken i byte eller en sträng som 10 MB, 1 GB osv.", + "tusUploadsRetryCount": "Antal försök som ska göras om en del inte kan laddas upp.", + "userHomeBasePath": "Bassökväg för användarnas hemkataloger", + "userScopeGenerationPlaceholder": "Omfånget kommer att automatiskt genereras", + "createUserHomeDirectory": "Skapa användarens hemkatalog", "customStylesheet": "Anpassad formatmall", "defaultUserDescription": "Detta är standard inställningar för användare.", "disableExternalLinks": "Inaktivera externa länkar (förutom dokumentation)", @@ -193,7 +193,7 @@ "executeOnShellDescription": "Som standard kör fil bläddraren kommandona genom att anropa deras binärfiler direkt. Om du vill köra dem på ett skal i stället (till exempel bash eller PowerShell), kan du definiera det här med nödvändiga argument och flaggor. Om det är inställt kommer kommandot du kör att läggas till som ett argument. Detta gäller både användar kommandon och händelse krokar.", "globalRules": "Det här är en global uppsättning regler för att tillåta och inte tillåta. De gäller för alla användare. Du kan definiera specifika regler för varje användares inställningar för att åsidosätta de här inställningarna.", "globalSettings": "Globala inställningar", - "hideDotfiles": "Hide dotfiles", + "hideDotfiles": "Dölj punktfiler", "insertPath": "Ange sökväg", "insertRegex": "Sätt in regex expression", "instanceName": "Instans namn", @@ -204,7 +204,7 @@ "newUser": "Ny användare", "password": "Lösenord", "passwordUpdated": "Lösenord uppdaterat", - "path": "Path", + "path": "Sökväg", "perm": { "create": "Skapa filer och mappar", "delete": "Ta bort filer och mappar", @@ -222,17 +222,17 @@ "rules": "Regler", "rulesHelp": "Här kan du definiera en uppsättning regler för godkänna och neka för den här specifika användaren. Den blockerade filen kommer inte upp i listningarna och kommer inte att vara tillgänglig till användaren. Vi stöder regex och sökvägar i förhållande till användarnas omfång.\n", "scope": "Omfattning", - "setDateFormat": "Set exact date format", + "setDateFormat": "Ställ in exakt datumformat", "settingsUpdated": "Inställning uppdaterad!", - "shareDuration": "Share Duration", - "shareManagement": "Share Management", - "shareDeleted": "Share deleted!", - "singleClick": "Use single clicks to open files and directories", + "shareDuration": "Utdelningstid", + "shareManagement": "Utdelningshantering", + "shareDeleted": "Utdelning borttagen!", + "singleClick": "Använd enkla klick för att öppna filer och kataloger", "themes": { - "default": "System default", - "dark": "Dark", - "light": "Light", - "title": "Theme" + "default": "Systemet standard", + "dark": "Mörk", + "light": "Ljus", + "title": "Tema" }, "user": "Användare", "userCommands": "Kommandon", diff --git a/filebrowser/http/utils.go b/filebrowser/http/utils.go index a1611ce5f8..03615263fc 100644 --- a/filebrowser/http/utils.go +++ b/filebrowser/http/utils.go @@ -9,6 +9,7 @@ import ( "strings" libErrors "github.com/filebrowser/filebrowser/v2/errors" + imgErrors "github.com/filebrowser/filebrowser/v2/img" ) func renderJSON(w http.ResponseWriter, _ *http.Request, data interface{}) (int, error) { @@ -42,6 +43,8 @@ func errToStatus(err error) int { return http.StatusBadRequest case errors.Is(err, libErrors.ErrRootUserDeletion): return http.StatusForbidden + case errors.Is(err, imgErrors.ErrImageTooLarge): + return http.StatusRequestEntityTooLarge default: return http.StatusInternalServerError } diff --git a/filebrowser/img/service.go b/filebrowser/img/service.go index 2791c38701..34a84c67bf 100644 --- a/filebrowser/img/service.go +++ b/filebrowser/img/service.go @@ -19,6 +19,15 @@ import ( // ErrUnsupportedFormat means the given image format is not supported. var ErrUnsupportedFormat = errors.New("unsupported image format") +// ErrImageTooLarge means the image is too large to create a thumbnail. +var ErrImageTooLarge = errors.New("image too large for thumbnail generation") + +// Maximum dimensions for thumbnail generation to prevent server crashes +const ( + MaxImageWidth = 10000 + MaxImageHeight = 10000 +) + // Service type Service struct { sem semaphore.Semaphore @@ -187,11 +196,17 @@ func (s *Service) detectFormat(in io.Reader) (Format, io.Reader, error) { buf := &bytes.Buffer{} r := io.TeeReader(in, buf) - _, imgFormat, err := image.DecodeConfig(r) + imgConfig, imgFormat, err := image.DecodeConfig(r) if err != nil { return 0, nil, fmt.Errorf("%s: %w", err.Error(), ErrUnsupportedFormat) } + // Check if image dimensions exceed maximum allowed size + if imgConfig.Width > MaxImageWidth || imgConfig.Height > MaxImageHeight { + return 0, nil, fmt.Errorf("image dimensions %dx%d exceed maximum %dx%d: %w", + imgConfig.Width, imgConfig.Height, MaxImageWidth, MaxImageHeight, ErrImageTooLarge) + } + format, err := ParseFormat(imgFormat) if err != nil { return 0, nil, ErrUnsupportedFormat diff --git a/lede/target/linux/qualcommbe/Makefile b/lede/target/linux/qualcommbe/Makefile index eabb5a2087..c9cda85293 100644 --- a/lede/target/linux/qualcommbe/Makefile +++ b/lede/target/linux/qualcommbe/Makefile @@ -14,7 +14,6 @@ include $(INCLUDE_DIR)/target.mk DEFAULT_PACKAGES += \ kmod-usb3 kmod-usb-dwc3 kmod-usb-dwc3-qcom \ kmod-leds-gpio kmod-gpio-button-hotplug \ - kmod-qcom-ppe \ wpad-basic-mbedtls uboot-envtools \ e2fsprogs kmod-fs-ext4 losetup diff --git a/lede/target/linux/qualcommbe/config-6.12 b/lede/target/linux/qualcommbe/config-6.12 index a6507ac858..65764b77ce 100644 --- a/lede/target/linux/qualcommbe/config-6.12 +++ b/lede/target/linux/qualcommbe/config-6.12 @@ -287,6 +287,7 @@ CONFIG_NET_EGRESS=y CONFIG_NET_FLOW_LIMIT=y CONFIG_NET_INGRESS=y CONFIG_NET_SELFTESTS=y +CONFIG_NET_SWITCHDEV=y CONFIG_NET_XGRESS=y CONFIG_NLS=y CONFIG_NO_HZ_COMMON=y diff --git a/lede/target/linux/qualcommbe/files/arch/arm64/boot/dts/qcom/ipq9570-kiwi-dvk.dts b/lede/target/linux/qualcommbe/files/arch/arm64/boot/dts/qcom/ipq9570-kiwi-dvk.dts deleted file mode 100644 index 24852947da..0000000000 --- a/lede/target/linux/qualcommbe/files/arch/arm64/boot/dts/qcom/ipq9570-kiwi-dvk.dts +++ /dev/null @@ -1,458 +0,0 @@ -// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause) - -/dts-v1/; - -#include -#include "ipq9574.dtsi" - -/ { - model = "8devices Kiwi-DVK"; - compatible = "8devices,kiwi-dvk", "qcom,ipq9574"; - - aliases { - serial0 = &blsp1_uart2; - ethernet0 = &xgmac1; - ethernet1 = &xgmac5; - ethernet2 = &xgmac6; - }; - - chosen { - stdout-path = "serial0:115200n8"; - }; - - regulator_fixed_3p3: s3300 { - compatible = "regulator-fixed"; - regulator-min-microvolt = <3300000>; - regulator-max-microvolt = <3300000>; - regulator-boot-on; - regulator-always-on; - regulator-name = "fixed_3p3"; - }; - - regulator_fixed_0p925: s0925 { - compatible = "regulator-fixed"; - regulator-min-microvolt = <925000>; - regulator-max-microvolt = <925000>; - regulator-boot-on; - regulator-always-on; - regulator-name = "fixed_0p925"; - }; - - sfp0: sfp-0 { - compatible = "sff,sfp"; - pinctrl-0 = <&sfp0_default>; - pinctrl-names = "default"; - i2c-bus = <&blsp1_i2c1>; - los-gpios = <&tlmm 46 GPIO_ACTIVE_HIGH>; - tx-disable-gpios = <&tlmm 47 GPIO_ACTIVE_HIGH>; - }; -}; - -&blsp1_i2c1 { - pinctrl-0 = <&i2c1_default>; - pinctrl-names = "default"; - status = "okay"; -}; - -&blsp1_spi0 { - pinctrl-0 = <&spi_0_default>; - pinctrl-names = "default"; - status = "okay"; - - flash@0 { - compatible = "jedec,spi-nor"; - reg = <0>; - #address-cells = <1>; - #size-cells = <1>; - spi-max-frequency = <50000000>; - }; -}; - -&blsp1_uart2 { - pinctrl-0 = <&uart2_pins>; - pinctrl-names = "default"; - status = "okay"; -}; - -&qcom_ppe { - ethernet-ports { - #address-cells = <1>; - #size-cells = <0>; - - xgmac1: port@1 { - reg = <1>; - phy-mode = "10gbase-r"; - managed = "in-band-status"; - label = "wan"; - sfp = <&sfp0>; - pcs-handle = <&pcsuniphy0_ch0>; - local-mac-address = [00 00 00 00 00 00]; - clocks = <&nsscc NSS_CC_PORT1_MAC_CLK>, - <&nsscc NSS_CC_PORT1_RX_CLK>, - <&nsscc NSS_CC_PORT1_TX_CLK>; - clock-names = "port_mac", - "port_rx", - "port_tx"; - resets = <&nsscc PORT1_MAC_ARES>, - <&nsscc PORT1_RX_ARES>, - <&nsscc PORT1_TX_ARES>; - reset-names = "port_mac", - "port_rx", - "port_tx"; - }; - - xgmac5: port@5 { - reg = <5>; - phy-mode = "2500base-x"; - label = "lan1"; - phy-handle = <&phy0>; - pcs-handle = <&pcsuniphy1_ch0>; - local-mac-address = [00 00 00 00 00 00]; - clocks = <&nsscc NSS_CC_PORT5_MAC_CLK>, - <&nsscc NSS_CC_PORT5_RX_CLK>, - <&nsscc NSS_CC_PORT5_TX_CLK>; - clock-names = "port_mac", - "port_rx", - "port_tx"; - resets = <&nsscc PORT5_MAC_ARES>, - <&nsscc PORT5_RX_ARES>, - <&nsscc PORT5_TX_ARES>; - reset-names = "port_mac", - "port_rx", - "port_tx"; - }; - - xgmac6: port@6 { - reg = <6>; - phy-mode = "usxgmii"; - managed = "in-band-status"; - label = "lan2"; - phy-handle = <&phy1>; - pcs-handle = <&pcsuniphy2_ch0>; - local-mac-address = [00 00 00 00 00 00]; - clocks = <&nsscc NSS_CC_PORT6_MAC_CLK>, - <&nsscc NSS_CC_PORT6_RX_CLK>, - <&nsscc NSS_CC_PORT6_TX_CLK>; - clock-names = "port_mac", - "port_rx", - "port_tx"; - resets = <&nsscc PORT6_MAC_ARES>, - <&nsscc PORT6_RX_ARES>, - <&nsscc PORT6_TX_ARES>; - reset-names = "port_mac", - "port_rx", - "port_tx"; - }; - }; -}; - -&mdio { - status = "okay"; - pinctrl-0 = <&mdio_pins>; - pinctrl-names = "default"; - - phy0: ethernet-phy@1 { - compatible = "ethernet-phy-ieee802.3-c45"; - reg = <1>; - reset-gpios = <&tlmm 57 GPIO_ACTIVE_LOW>; - }; - - phy1: ethernet-phy@28 { - compatible = "ethernet-phy-ieee802.3-c45"; - reg = <28>; - reset-assert-us = <40>; - reset-deassert-us = <150000>; - reset-gpios = <&tlmm 54 GPIO_ACTIVE_LOW>; - }; -}; - -&pcie0 { - pinctrl-0 = <&pcie0_default>; - pinctrl-names = "default"; - - perst-gpios = <&tlmm 23 GPIO_ACTIVE_LOW>; - wake-gpios = <&tlmm 24 GPIO_ACTIVE_LOW>; - status = "okay"; -}; - -&pcie0_phy { - status = "okay"; -}; - -&pcie1 { - pinctrl-0 = <&pcie1_default>; - pinctrl-names = "default"; - - perst-gpios = <&tlmm 26 GPIO_ACTIVE_LOW>; - wake-gpios = <&tlmm 27 GPIO_ACTIVE_LOW>; - status = "okay"; -}; - -&pcie1_phy { - status = "okay"; -}; - -&pcie2 { - pinctrl-0 = <&pcie2_default>; - pinctrl-names = "default"; - - perst-gpios = <&tlmm 29 GPIO_ACTIVE_LOW>; - wake-gpios = <&tlmm 30 GPIO_ACTIVE_LOW>; - status = "okay"; -}; - -&pcie2_phy { - status = "okay"; -}; - -&pcie3 { - pinctrl-0 = <&pcie3_default>; - pinctrl-names = "default"; - - perst-gpios = <&tlmm 32 GPIO_ACTIVE_LOW>; - wake-gpios = <&tlmm 33 GPIO_ACTIVE_LOW>; - status = "okay"; -}; - -&pcie3_phy { - status = "okay"; -}; - -&rpm_requests { - regulators { - compatible = "qcom,rpm-mp5496-regulators"; - - ipq9574_s1: s1 { - /* - * During kernel bootup, the SoC runs at 800MHz with 875mV set by the bootloaders. - * During regulator registration, kernel not knowing the initial voltage, - * considers it as zero and brings up the regulators with minimum supported voltage. - * Update the regulator-min-microvolt with SVS voltage of 725mV so that - * the regulators are brought up with 725mV which is sufficient for all the - * corner parts to operate at 800MHz - */ - regulator-min-microvolt = <725000>; - regulator-max-microvolt = <1075000>; - }; - - mp5496_l5: l5 { - regulator-min-microvolt = <1800000>; - regulator-max-microvolt = <1800000>; - regulator-always-on; - regulator-boot-on; - }; - }; -}; - -&sdhc_1 { - bus-width = <8>; - max-frequency = <384000000>; - mmc-ddr-1_8v; - mmc-hs200-1_8v; - mmc-hs400-1_8v; - mmc-hs400-enhanced-strobe; - pinctrl-0 = <&sdc_default_state>; - pinctrl-names = "default"; - status = "okay"; -}; - -&sleep_clk { - clock-frequency = <32000>; -}; - -&tlmm { - sdc_default_state: sdc-default-state { - clk-pins { - pins = "gpio5"; - function = "sdc_clk"; - drive-strength = <8>; - bias-disable; - }; - - cmd-pins { - pins = "gpio4"; - function = "sdc_cmd"; - drive-strength = <8>; - bias-pull-up; - }; - - data-pins { - pins = "gpio0", "gpio1", "gpio2", - "gpio3", "gpio6", "gpio7", - "gpio8", "gpio9"; - function = "sdc_data"; - drive-strength = <8>; - bias-pull-up; - }; - - rclk-pins { - pins = "gpio10"; - function = "sdc_rclk"; - drive-strength = <8>; - bias-pull-down; - }; - }; - - spi_0_default: spi-0-default-state { - pins = "gpio11", "gpio12", "gpio13", "gpio14"; - function = "blsp0_spi"; - drive-strength = <8>; - bias-disable; - }; - - pcie0_default: pcie0-default-state { - clkreq-n-pins { - pins = "gpio22"; - function = "pcie0_clk"; - drive-strength = <6>; - bias-pull-up; - }; - - perst-n-pins { - pins = "gpio23"; - function = "gpio"; - drive-strength = <8>; - bias-pull-down; - output-low; - }; - - wake-n-pins { - pins = "gpio24"; - function = "pcie0_wake"; - drive-strength = <6>; - bias-pull-up; - }; - }; - - pcie1_default: pcie1-default-state { - clkreq-n-pins { - pins = "gpio25"; - function = "pcie1_clk"; - drive-strength = <6>; - bias-pull-up; - }; - - perst-n-pins { - pins = "gpio26"; - function = "gpio"; - drive-strength = <8>; - bias-pull-down; - output-low; - }; - - wake-n-pins { - pins = "gpio27"; - function = "pcie1_wake"; - drive-strength = <6>; - bias-pull-up; - }; - }; - - pcie2_default: pcie2-default-state { - clkreq-n-pins { - pins = "gpio28"; - function = "pcie2_clk"; - drive-strength = <6>; - bias-pull-up; - }; - - perst-n-pins { - pins = "gpio29"; - function = "gpio"; - drive-strength = <8>; - bias-pull-down; - output-low; - }; - - wake-n-pins { - pins = "gpio30"; - function = "pcie2_wake"; - drive-strength = <6>; - bias-pull-up; - }; - }; - - pcie3_default: pcie3-default-state { - clkreq-n-pins { - pins = "gpio31"; - function = "pcie3_clk"; - drive-strength = <6>; - bias-pull-up; - }; - - perst-n-pins { - pins = "gpio32"; - function = "gpio"; - drive-strength = <8>; - bias-pull-up; - output-low; - }; - - wake-n-pins { - pins = "gpio33"; - function = "pcie3_wake"; - drive-strength = <6>; - bias-pull-up; - }; - }; - - i2c1_default: i2c1-default-state { - pins = "gpio36", "gpio37"; - function = "blsp1_i2c"; - drive-strength = <8>; - bias-pull-up; - }; - - sfp0_default: sfp0-default-state { - pins = "gpio46", "gpio47"; - function = "gpio"; - drive-strength = <8>; - bias-pull-down; - }; -}; - -&usb_0_dwc3 { - dr_mode = "host"; -}; - -&usb_0_qmpphy { - vdda-pll-supply = <&mp5496_l5>; - vdda-phy-supply = <®ulator_fixed_0p925>; - - status = "okay"; -}; - -&usb_0_qusbphy { - vdd-supply = <®ulator_fixed_0p925>; - vdda-pll-supply = <&mp5496_l5>; - vdda-phy-dpdm-supply = <®ulator_fixed_3p3>; - - status = "okay"; -}; - -&usb3 { - status = "okay"; -}; - -/* - * The bootstrap pins for the board select the XO clock frequency, - * which automatically enables the right dividers to ensure the - * reference clock output from WiFi is 48 MHZ. - */ -&ref_48mhz_clk { - clock-div = <1>; - clock-mult = <1>; -}; - -/* - * The frequency of xo_board_clk is fixed to 24 MHZ, which is routed - * from WiFi output clock 48 MHZ divided by 2. - */ -&xo_board_clk { - clock-div = <2>; - clock-mult = <1>; -}; - -&xo_clk { - clock-frequency = <48000000>; -}; diff --git a/lede/target/linux/qualcommbe/files/arch/arm64/boot/dts/qcom/ipq9574-be7000.dts b/lede/target/linux/qualcommbe/files/arch/arm64/boot/dts/qcom/ipq9574-be7000.dts deleted file mode 100644 index e5fc5e6d2f..0000000000 --- a/lede/target/linux/qualcommbe/files/arch/arm64/boot/dts/qcom/ipq9574-be7000.dts +++ /dev/null @@ -1,221 +0,0 @@ -// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause) -/* - * IPQ9574 RDP board common device tree source - * - * Copyright (c) 2020-2021 The Linux Foundation. All rights reserved. - * Copyright (c) 2023, Qualcomm Innovation Center, Inc. All rights reserved. - */ - -/dts-v1/; - -#include -#include -#include -#include "ipq9574.dtsi" - -/ { - model = "Xiaomi BE7000"; - compatible = "xiaomi,be7000", "qcom,ipq9574"; - - aliases { - led-boot = &led_system_white; - led-failsafe = &led_system_amber; - led-running = &led_system_white; - led-upgrade = &led_system_amber; - - serial0 = &blsp1_uart2; - }; - - chosen { - stdout-path = "serial0:115200n8"; - }; - - regulator_fixed_3p3: s3300 { - compatible = "regulator-fixed"; - regulator-min-microvolt = <3300000>; - regulator-max-microvolt = <3300000>; - regulator-boot-on; - regulator-always-on; - regulator-name = "fixed_3p3"; - }; - - regulator_fixed_0p925: s0925 { - compatible = "regulator-fixed"; - regulator-min-microvolt = <925000>; - regulator-max-microvolt = <925000>; - regulator-boot-on; - regulator-always-on; - regulator-name = "fixed_0p925"; - }; - - gpio-keys { - compatible = "gpio-keys"; - pinctrl-0 = <&gpio_keys>; - pinctrl-names = "default"; - - reset { - label = "reset"; - linux,code = ; - gpios = <&tlmm 44 GPIO_ACTIVE_LOW>; - linux,input-type = ; - debounce-interval = <60>; - }; - }; - - leds { - compatible = "gpio-leds"; - pinctrl-0 = <&gpio_leds>; - pinctrl-names = "default"; - - aiot-white { - label = "white:aiot"; - color = ; - gpios = <&tlmm 8 GPIO_ACTIVE_HIGH>; - default-state = "off"; - }; - - led_system_white: system-white { - label = "white:system"; - color = ; - gpios = <&tlmm 40 GPIO_ACTIVE_HIGH>; - default-state = "off"; - }; - - led_system_amber: system-amber { - label = "amber:system"; - color = ; - gpios = <&tlmm 41 GPIO_ACTIVE_HIGH>; - default-state = "off"; - }; - - network-white { - label = "white:network"; - color = ; - gpios = <&tlmm 42 GPIO_ACTIVE_HIGH>; - default-state = "off"; - }; - - network-amber { - label = "amber:network"; - color = ; - gpios = <&tlmm 43 GPIO_ACTIVE_HIGH>; - default-state = "off"; - }; - }; - - reserved-memory { - rsvd1@4FA00000 { - no-map; - reg = <0x00 0x4FA00000 0x00 0x40000>; - }; - - rsvd2@4FB00000 { - no-map; - reg = <0x00 0x4FB00000 0x00 0x40000>; - }; - }; -}; - -&blsp1_i2c1 { - pinctrl-0 = <&i2c1_pins>; - pinctrl-names = "default"; - status = "okay"; - - nfc: nfc@54 { - compatible = "miwifi,nfc"; - reg = <0x54>; - }; -}; - -&blsp1_uart2 { - pinctrl-0 = <&uart2_pins>; - pinctrl-names = "default"; - status = "okay"; -}; - -&rpm_requests { - regulators { - compatible = "qcom,rpm-mp5496-regulators"; - - ipq9574_s1: s1 { - /* - * During kernel bootup, the SoC runs at 800MHz with 875mV set by the bootloaders. - * During regulator registration, kernel not knowing the initial voltage, - * considers it as zero and brings up the regulators with minimum supported voltage. - * Update the regulator-min-microvolt with SVS voltage of 725mV so that - * the regulators are brought up with 725mV which is sufficient for all the - * corner parts to operate at 800MHz - */ - regulator-min-microvolt = <725000>; - regulator-max-microvolt = <1075000>; - }; - - mp5496_l2: l2 { - regulator-min-microvolt = <1800000>; - regulator-max-microvolt = <1800000>; - regulator-always-on; - regulator-boot-on; - }; - - mp5496_l5: l5 { - regulator-min-microvolt = <1800000>; - regulator-max-microvolt = <1800000>; - regulator-always-on; - regulator-boot-on; - }; - }; -}; - -&sleep_clk { - clock-frequency = <32000>; -}; - -&tlmm { - i2c1_pins: i2c1-state { - pins = "gpio36", "gpio37"; - function = "blsp1_i2c"; - drive-strength = <8>; - bias-disable; - }; - - gpio_keys: gpio-keys-state { - pins = "gpio44"; - function = "gpio"; - drive-strength = <8>; - bias-pull-up; - }; - - gpio_leds: gpio-leds-state { - pins = "gpio8", "gpio40", "gpio41", "gpio42", "gpio43"; - function = "gpio"; - drive-strength = <8>; - bias-pull-up; - }; -}; - -&usb_0_dwc3 { - dr_mode = "host"; -}; - -&usb_0_qmpphy { - vdda-pll-supply = <&mp5496_l5>; - vdda-phy-supply = <®ulator_fixed_0p925>; - - status = "okay"; -}; - -&usb_0_qusbphy { - vdd-supply = <®ulator_fixed_0p925>; - vdda-pll-supply = <&mp5496_l5>; - vdda-phy-dpdm-supply = <®ulator_fixed_3p3>; - - status = "okay"; -}; - -&usb3 { - status = "okay"; -}; - -&xo_board_clk { - clock-frequency = <24000000>; -}; diff --git a/lede/target/linux/qualcommbe/image/ipq95xx.mk b/lede/target/linux/qualcommbe/image/ipq95xx.mk index caf34a3e1c..af5e9d98e4 100644 --- a/lede/target/linux/qualcommbe/image/ipq95xx.mk +++ b/lede/target/linux/qualcommbe/image/ipq95xx.mk @@ -1,31 +1,3 @@ -define Device/8devices_kiwi-dvk - $(call Device/FitImage) - $(call Device/EmmcImage) - DEVICE_VENDOR := 8devices - DEVICE_MODEL := Kiwi-DVK - DEVICE_DTS_CONFIG := config@8dev-kiwi - SOC := ipq9570 - DEVICE_PACKAGES := kmod-ath12k ath12k-firmware-qcn9274 ipq-wifi-8devices_kiwi f2fsck mkf2fs kmod-sfp kmod-phy-maxlinear - IMAGE/factory.bin := qsdk-ipq-factory-nor -endef -TARGET_DEVICES += 8devices_kiwi-dvk - -define Device/xiaomi_be7000 - $(call Device/FitImage) - $(call Device/UbiFit) - DEVICE_VENDOR := Xiaomi - DEVICE_MODEL := BE7000 - DEVICE_DTS_CONFIG := config@be7000 - BLOCKSIZE := 128k - PAGESIZE := 2048 - SOC := ipq9574 - KERNEL_SIZE := 6096k - IMAGE_SIZE := 32116k - DEVICE_PACKAGES := kmod-ath12k - IMAGE/sysupgrade.bin := append-kernel | pad-to 64k | append-rootfs | pad-rootfs | check-size | append-metadata -endef -TARGET_DEVICES += xiaomi_be7000 - define Device/qcom_rdp433 $(call Device/FitImageLzma) DEVICE_VENDOR := Qualcomm Technologies, Inc. diff --git a/lede/target/linux/qualcommbe/ipq95xx/base-files/etc/board.d/01_leds b/lede/target/linux/qualcommbe/ipq95xx/base-files/etc/board.d/01_leds deleted file mode 100644 index bd54917046..0000000000 --- a/lede/target/linux/qualcommbe/ipq95xx/base-files/etc/board.d/01_leds +++ /dev/null @@ -1,19 +0,0 @@ -# -# Copyright (C) 2015 OpenWrt.org -# - -. /lib/functions/uci-defaults.sh - -board_config_update - -board=$(board_name) - -case "$board" in -xiaomi,be7000) - ucidef_set_led_netdev "wan" "WAN" "white:network" "eth0" - ;; -esac - -board_config_flush - -exit 0 diff --git a/lede/target/linux/qualcommbe/ipq95xx/base-files/etc/board.d/02_network b/lede/target/linux/qualcommbe/ipq95xx/base-files/etc/board.d/02_network index a866c1df8c..3d08015da5 100644 --- a/lede/target/linux/qualcommbe/ipq95xx/base-files/etc/board.d/02_network +++ b/lede/target/linux/qualcommbe/ipq95xx/base-files/etc/board.d/02_network @@ -11,15 +11,9 @@ ipq95xx_setup_interfaces() local board="$1" case "$board" in - 8devices,kiwi-dvk) - ucidef_set_interfaces_lan_wan "lan1 lan2" "wan" - ;; qcom,ipq9574-ap-al02-c7) ucidef_set_interfaces_lan_wan "lan1 lan2 lan3 lan4 lan5" "wan" ;; - xiaomi,be7000) - ucidef_set_interfaces_lan_wan "eth1 eth2 eth3" "eth0" - ;; *) echo "Unsupported hardware. Network interfaces not initialized" ;; diff --git a/lede/target/linux/qualcommbe/ipq95xx/base-files/lib/upgrade/platform.sh b/lede/target/linux/qualcommbe/ipq95xx/base-files/lib/upgrade/platform.sh index 05b6bf62d6..9c4849cf3d 100644 --- a/lede/target/linux/qualcommbe/ipq95xx/base-files/lib/upgrade/platform.sh +++ b/lede/target/linux/qualcommbe/ipq95xx/base-files/lib/upgrade/platform.sh @@ -9,24 +9,8 @@ platform_check_image() { platform_do_upgrade() { case "$(board_name)" in - 8devices,kiwi-dvk) - CI_KERNPART="0:HLOS" - CI_ROOTPART="rootfs" - emmc_do_upgrade "$1" - ;; - xiaomi,be7000) - nand_do_upgrade "$1" - ;; *) default_do_upgrade "$1" ;; esac } - -platform_copy_config() { - case "$(board_name)" in - 8devices,kiwi-dvk) - emmc_copy_config - ;; - esac -} diff --git a/lede/target/linux/qualcommbe/ipq95xx/config-default b/lede/target/linux/qualcommbe/ipq95xx/config-default index 663644407a..d6ae5f36c2 100644 --- a/lede/target/linux/qualcommbe/ipq95xx/config-default +++ b/lede/target/linux/qualcommbe/ipq95xx/config-default @@ -43,6 +43,7 @@ CONFIG_QCOM_APM=y # CONFIG_QCOM_CLK_SMD_RPM is not set # CONFIG_QCOM_COINCELL is not set CONFIG_QCOM_GDSC=y +CONFIG_QCOM_PPE=y # CONFIG_QCOM_RPMPD is not set CONFIG_QCOM_SMD_RPM=y CONFIG_QCOM_SPMI_ADC5=y @@ -58,7 +59,6 @@ CONFIG_REGULATOR_QCOM_SPMI=y # CONFIG_REGULATOR_QCOM_USB_VBUS is not set CONFIG_REGULATOR_USERSPACE_CONSUMER=y CONFIG_RTC_DRV_PM8XXX=y -CONFIG_RTL8261N_PHY=y CONFIG_SPI_QPIC_SNAND=y CONFIG_SPMI=y # CONFIG_SPMI_HISI3670 is not set diff --git a/openclash/luci-app-openclash/Makefile b/openclash/luci-app-openclash/Makefile index 33fe329b5a..d7e09e4c39 100644 --- a/openclash/luci-app-openclash/Makefile +++ b/openclash/luci-app-openclash/Makefile @@ -1,7 +1,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-openclash -PKG_VERSION:=0.47.024 +PKG_VERSION:=0.47.028 PKG_MAINTAINER:=vernesong PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME) diff --git a/openclash/luci-app-openclash/luasrc/controller/openclash.lua b/openclash/luci-app-openclash/luasrc/controller/openclash.lua index 2a44b882e1..814d5166fd 100644 --- a/openclash/luci-app-openclash/luasrc/controller/openclash.lua +++ b/openclash/luci-app-openclash/luasrc/controller/openclash.lua @@ -517,7 +517,7 @@ local function dler_login_info_save() end local function dler_login() - local info, token, get_sub, sub_info, sub_key, sub_match + local info, token, get_sub, sub_info, sub_key, sub_match, sub_convert, sid local sub_path = "/tmp/dler_sub" local email = fs.uci_get_config("config", "dler_email") local passwd = fs.uci_get_config("config", "dler_passwd") @@ -541,14 +541,25 @@ local function dler_login() for _,v in ipairs(sub_key) do while true do sub_match = false + sub_convert = false uci:foreach("openclash", "config_subscribe", function(s) if s.name == "Dler Cloud - " .. v and s.address == sub_info[v] then - sub_match = true + sub_match = true + end + if s.name == "Dler Cloud - " .. v and s.address ~= sub_info[v] then + sub_convert = true + sid = s['.name'] end end) if sub_match then break end - luci.sys.exec(string.format('sid=$(uci -q add openclash config_subscribe) && uci -q set openclash."$sid".name="Dler Cloud - %s" && uci -q set openclash."$sid".address="%s"', v, sub_info[v])) + if sub_convert then + uci:set("openclash", sid, "address", sub_info[v]) + else + sid = uci:add("openclash", "config_subscribe") + uci:set("openclash", sid, "name", "Dler Cloud - " .. v) + uci:set("openclash", sid, "address", sub_info[v]) + end uci:commit("openclash") break end diff --git a/openclash/luci-app-openclash/luasrc/model/cbi/openclash/config-overwrite.lua b/openclash/luci-app-openclash/luasrc/model/cbi/openclash/config-overwrite.lua index 7d19ae7bf5..75f05e7cb3 100644 --- a/openclash/luci-app-openclash/luasrc/model/cbi/openclash/config-overwrite.lua +++ b/openclash/luci-app-openclash/luasrc/model/cbi/openclash/config-overwrite.lua @@ -173,8 +173,8 @@ o.description = translate("Automatically Append Compliant DNS to default-nameser o.default = 1 if op_mode == "fake-ip" then -o = s:taboption("dns", Value, "fakeip_range", translate("Fake-IP Range (IPv4 Cidr)")) -o.description = translate("Set Fake-IP Range (IPv4 Cidr)") +o = s:taboption("dns", Value, "fakeip_range", translate("Fake-IP Range").." (IPv4 Cidr)") +o.description = translate("Set Fake-IP Range").." (IPv4 Cidr)" o:value("0", translate("Disable")) o:value("198.18.0.1/16") o.default = "0" diff --git a/openclash/luci-app-openclash/luasrc/model/cbi/openclash/settings.lua b/openclash/luci-app-openclash/luasrc/model/cbi/openclash/settings.lua index f3957afdd0..629d66131e 100644 --- a/openclash/luci-app-openclash/luasrc/model/cbi/openclash/settings.lua +++ b/openclash/luci-app-openclash/luasrc/model/cbi/openclash/settings.lua @@ -7,7 +7,7 @@ local UTIL = require "luci.util" local fs = require "luci.openclash" local uci = require "luci.model.uci".cursor() local json = require "luci.jsonc" -local datatypes = require "luci.cbi.datatypes" +local datatype = require "luci.cbi.datatypes" -- 优化 CBI UI(新版 LuCI 专用) local function optimize_cbi_ui() @@ -300,8 +300,8 @@ local function ip_compare(a, b) return 0 end - local a_is_ipv4 = datatypes.ip4addr(a.dest) - local b_is_ipv4 = datatypes.ip4addr(b.dest) + local a_is_ipv4 = datatype.ip4addr(a.dest) + local b_is_ipv4 = datatype.ip4addr(b.dest) if a_is_ipv4 and not b_is_ipv4 then return true @@ -349,8 +349,8 @@ end for _, mac in ipairs(mac_order) do local ips = mac_ip_map[mac] table.sort(ips, function(a, b) - local a_is_ipv4 = datatypes.ip4addr(a) - local b_is_ipv4 = datatypes.ip4addr(b) + local a_is_ipv4 = datatype.ip4addr(a) + local b_is_ipv4 = datatype.ip4addr(b) if a_is_ipv4 and not b_is_ipv4 then return true elseif not a_is_ipv4 and b_is_ipv4 then @@ -1192,6 +1192,25 @@ o = s:taboption("ipv6", Flag, "ipv6_dns", translate("IPv6 DNS Resolve")) o.description = translate("Enable to Resolve IPv6 DNS Requests") o.default = 0 +if op_mode == "fake-ip" then +o = s:taboption("ipv6", Value, "fakeip_range6", translate("Fake-IP Range").." (IPv6 Cidr)") +o.description = translate("Set Fake-IP Range").. " (IPv6 Cidr)" +o:depends("ipv6_dns", "1") +o:value("0", translate("Disable")) +o:value("fdfe:dcba:9876::1/64") +o.default = "0" +o.placeholder = "fdfe:dcba:9876::1/64" +function o.validate(self, value) + if value == "0" then + return "0" + end + if datatype.cidr6(value) then + return value + end + return "fdfe:dcba:9876::1/64" +end +end + o = s:taboption("ipv6", ListValue, "china_ip6_route", translate("China IPv6 Route")) o.description = translate("Bypass Specified Regions Network Flows, Improve Performance, If Inaccessibility on Bypass Gateway, Try to Enable Bypass Gateway Compatible Option") o.default = 0 @@ -1200,6 +1219,7 @@ o:value("1", translate("Bypass Mainland China")) o:value("2", translate("Bypass Overseas")) o:depends("ipv6_enable", "1") + o = s:taboption("ipv6", Value, "local_network6_pass", translate("Local IPv6 Network Bypassed List")) o.template = "cbi/tvalue" o.description = translate("The Traffic of The Destination For The Specified Address Will Not Pass The Core") diff --git a/openclash/luci-app-openclash/luasrc/view/openclash/config_editor.htm b/openclash/luci-app-openclash/luasrc/view/openclash/config_editor.htm index 557333af45..dcca8364fc 100644 --- a/openclash/luci-app-openclash/luasrc/view/openclash/config_editor.htm +++ b/openclash/luci-app-openclash/luasrc/view/openclash/config_editor.htm @@ -97,6 +97,13 @@ local sconf = "/etc/openclash/"..conf_name \ No newline at end of file diff --git a/openclash/luci-app-openclash/luasrc/view/openclash/tblsection.htm b/openclash/luci-app-openclash/luasrc/view/openclash/tblsection.htm index 3c9cb020e3..480c1bbfef 100644 --- a/openclash/luci-app-openclash/luasrc/view/openclash/tblsection.htm +++ b/openclash/luci-app-openclash/luasrc/view/openclash/tblsection.htm @@ -419,6 +419,13 @@ local sectiontype = "_"..self.config.."_"..string.match(self.sectiontype, "[%w_] var divs<%=sectiontype%> = document.getElementsByClassName('dom-<%=self.config%>-<%=self.sectiontype%>'); function isDarkBackground(element) { + var cachedTheme = localStorage.getItem('oc-theme'); + if (cachedTheme === 'dark') { + return true; + } else if (cachedTheme === 'light') { + return false; + } + if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) { return true; } diff --git a/openclash/luci-app-openclash/luasrc/view/openclash/tblsection_dns.htm b/openclash/luci-app-openclash/luasrc/view/openclash/tblsection_dns.htm index 82032c03b8..2c98f13262 100644 --- a/openclash/luci-app-openclash/luasrc/view/openclash/tblsection_dns.htm +++ b/openclash/luci-app-openclash/luasrc/view/openclash/tblsection_dns.htm @@ -370,6 +370,13 @@ local sectiontype = "_"..self.config.."_"..string.match(self.sectiontype, "[%w_] var divs<%=sectiontype%> = document.getElementsByClassName('dom-<%=self.config%>-<%=self.sectiontype%>'); function isDarkBackground(element) { + var cachedTheme = localStorage.getItem('oc-theme'); + if (cachedTheme === 'dark') { + return true; + } else if (cachedTheme === 'light') { + return false; + } + if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) { return true; } diff --git a/openclash/luci-app-openclash/po/zh-cn/openclash.zh-cn.po b/openclash/luci-app-openclash/po/zh-cn/openclash.zh-cn.po index ffcf880bf3..c0f67fb1ae 100644 --- a/openclash/luci-app-openclash/po/zh-cn/openclash.zh-cn.po +++ b/openclash/luci-app-openclash/po/zh-cn/openclash.zh-cn.po @@ -1986,6 +1986,9 @@ msgstr "错误:丢失或未指定第三方规则中的部分策略组,停止 msgid "Tip: Detected That The nameserver DNS Option Has No Server Set, Starting To Complete..." msgstr "提示:检测到 DNS 选项下的 Nameserver 未设置服务器,开始补全..." +msgid "Tip: Detected That The default-nameserver DNS Option Has No Server Set, Starting To Complete..." +msgstr "提示:检测到 DNS 选项下的 Default-nameserver 未设置服务器,开始补全..." + msgid "Error: Nameserver Option Must Be Setted, Stop Customing DNS Servers" msgstr "错误:配置文件 DNS 选项下的 Nameserver 必须设置服务器,已停止设置自定义 DNS 服务器!" @@ -3162,11 +3165,11 @@ msgstr "提示:DNS 劫持模式为防火墙转发..." msgid "Tip: DNS Hijacking is Disabled..." msgstr "提示:DNS 劫持未开启..." -msgid "Fake-IP Range (IPv4 Cidr)" -msgstr "Fake-IP 地址范围 (IPv4 Cidr)" +msgid "Fake-IP Range" +msgstr "Fake-IP 地址范围" -msgid "Set Fake-IP Range (IPv4 Cidr)" -msgstr "设置 Fake-IP 地址范围 (IPv4 Cidr)" +msgid "Set Fake-IP Range" +msgstr "设置 Fake-IP 地址范围" msgid "IPv6 Settings" msgstr "IPv6 设置" @@ -4194,11 +4197,14 @@ msgstr "订阅" msgid "Overwrite Module" msgstr "覆写模块" -msgid "module not found, please check your system depends and try again!" -msgstr "模块未找到,请检查你的固件依赖并重试!" +msgid "module not found, please check your system depends if something abnormal!" +msgstr "模块未找到,如遇到异常请检查您的固件依赖!" msgid "Select Nodes Force Lookup and Use Target ASN Info First For More Stable Experience" msgstr "选择节点时强制查找并优先使用目标的 ASN 信息,以获得更稳定的体验" msgid "Prefer-ASN" -msgstr "ASN 优先" \ No newline at end of file +msgstr "ASN 优先" + +msgid "Theme Switch" +msgstr "主题切换" \ No newline at end of file diff --git a/openclash/luci-app-openclash/root/etc/init.d/openclash b/openclash/luci-app-openclash/root/etc/init.d/openclash index d34bc27014..10c8cb5f33 100644 --- a/openclash/luci-app-openclash/root/etc/init.d/openclash +++ b/openclash/luci-app-openclash/root/etc/init.d/openclash @@ -664,11 +664,24 @@ check_mod() if container; then return 0 fi - modprobe $1 2>/dev/null - if [ $? -ne 0 ]; then - LOG_OUT "Error:【$1】module not found, please check your system depends and try again!" - start_fail + + # Convert module name to uppercase using POSIX-compatible syntax + # BusyBox tr doesn't support [:lower:]/[:upper:], use a-z/A-Z instead + module_upper=$(echo "$1" | tr a-z A-Z) + if [ -f /proc/config.gz ] && zcat /proc/config.gz | grep -q "CONFIG_${module_upper}=y"; then + return 0 fi + + if lsmod | grep -q "^$1 "; then + return 0 + fi + + modprobe $1 2>/dev/null + if [ $? -eq 0 ]; then + return 0 + fi + + LOG_OUT "Error:【$1】module not found, please check your system depends if something abnormal!" } >/dev/null 2>&1 check_core_status() @@ -751,12 +764,12 @@ check_core_status() fi # redirect dns setting after core started, prevent core dns lookup failure - change_dns "$enable_redirect_dns" - set_firewall - if [ "$1" == "start" ]; then + change_dns "$enable_redirect_dns" + set_firewall LOG_OUT "Tip: OpenClash Start Successful!" else + set_firewall LOG_OUT "Tip: Firewall Reload Successful!" fi } >/dev/null 2>&1 @@ -924,16 +937,16 @@ firewall_lan_ac_traffic() if [ "${ipv6_enable}" -eq 1 ]; then if [ "${family}" == "both" ] || [ "${family}" == "ipv6" ]; then if $e_tcp ; then - nft insert rule inet fw4 openclash_v6 position 0 ip6 saddr ${src_ip_v6} tcp sport ${src_port} ${dscp_rule} counter ${target} comment "\"${comment}\"" - nft insert rule inet fw4 openclash_output_v6 position 0 ip6 saddr ${src_ip_v6} tcp sport ${src_port} ${dscp_rule} counter ${target} comment "\"${comment}\"" - nft insert rule inet fw4 openclash_mangle_v6 position 0 ip6 saddr ${src_ip_v6} tcp sport ${src_port} ${dscp_rule} counter ${target} comment "\"${comment}\"" - nft insert rule inet fw4 openclash_mangle_output_v6 position 0 meta nfproto {ipv6} ip6 saddr ${src_ip_v6} tcp sport ${src_port} ${dscp_rule} counter ${target} comment "\"${comment}\"" - nft insert rule inet fw4 openclash_post_v6 position 0 ip6 saddr ${src_ip_v6} tcp sport ${src_port} ${dscp_rule} counter ${target} comment "\"${comment}\"" + nft insert rule inet fw4 openclash_v6 position 0 ip6 daddr != { ${fakeip_range6} } ip6 saddr ${src_ip_v6} tcp sport ${src_port} ${dscp_rule} counter ${target} comment "\"${comment}\"" + nft insert rule inet fw4 openclash_output_v6 position 0 ip6 daddr != { ${fakeip_range6} } ip6 saddr ${src_ip_v6} tcp sport ${src_port} ${dscp_rule} counter ${target} comment "\"${comment}\"" + nft insert rule inet fw4 openclash_mangle_v6 position 0 ip6 daddr != { ${fakeip_range6} } ip6 saddr ${src_ip_v6} tcp sport ${src_port} ${dscp_rule} counter ${target} comment "\"${comment}\"" + nft insert rule inet fw4 openclash_mangle_output_v6 position 0 meta nfproto {ipv6} ip6 daddr != { ${fakeip_range6} } ip6 saddr ${src_ip_v6} tcp sport ${src_port} ${dscp_rule} counter ${target} comment "\"${comment}\"" + nft insert rule inet fw4 openclash_post_v6 position 0 ip6 daddr != { ${fakeip_range6} } ip6 saddr ${src_ip_v6} tcp sport ${src_port} ${dscp_rule} counter ${target} comment "\"${comment}\"" fi if $e_udp ; then - nft insert rule inet fw4 openclash_mangle_v6 position 0 ip6 saddr ${src_ip_v6} udp sport ${src_port} ${dscp_rule} counter ${target} comment "\"${comment}\"" - nft insert rule inet fw4 openclash_mangle_output_v6 position 0 meta nfproto {ipv6} ip6 saddr ${src_ip_v6} udp sport ${src_port} ${dscp_rule} counter ${target} comment "\"${comment}\"" - nft insert rule inet fw4 openclash_post_v6 position 0 ip6 saddr ${src_ip_v6} udp sport ${src_port} ${dscp_rule} counter ${target} comment "\"${comment}\"" + nft insert rule inet fw4 openclash_mangle_v6 position 0 ip6 daddr != { ${fakeip_range6} } ip6 saddr ${src_ip_v6} udp sport ${src_port} ${dscp_rule} counter ${target} comment "\"${comment}\"" + nft insert rule inet fw4 openclash_mangle_output_v6 position 0 meta nfproto {ipv6} ip6 daddr != { ${fakeip_range6} } ip6 saddr ${src_ip_v6} udp sport ${src_port} ${dscp_rule} counter ${target} comment "\"${comment}\"" + nft insert rule inet fw4 openclash_post_v6 position 0 ip6 daddr != { ${fakeip_range6} } ip6 saddr ${src_ip_v6} udp sport ${src_port} ${dscp_rule} counter ${target} comment "\"${comment}\"" fi fi fi @@ -990,16 +1003,16 @@ firewall_lan_ac_traffic() if [ "${ipv6_enable}" -eq 1 ]; then if [ "${family}" == "both" ] || [ "${family}" == "ipv6" ]; then if $e_tcp ; then - ip6tables -t nat -I openclash ${src_ip_v6} -p tcp --sport ${src_port} ${dscp_ipt} -j ${target} -m comment --comment "${comment}" - ip6tables -t nat -A openclash_output ${src_ip_v6} -p tcp --sport ${src_port} ${dscp_ipt} -j ${target} -m comment --comment "${comment}" - ip6tables -t mangle -I openclash ${src_ip_v6} -p tcp --sport ${src_port} ${dscp_ipt} -j ${target} -m comment --comment "${comment}" - ip6tables -t mangle -I openclash_output -p tcp ${src_ip_v6} --sport ${src_port} ${dscp_ipt} -j ${target} -m comment --comment "${comment}" - ip6tables -t nat -I openclash_post -p tcp ${src_ip_v6} --sport ${src_port} ${dscp_ipt} -j ${target} -m comment --comment "${comment}" + ip6tables -t nat -I openclash ! -d ${fakeip_range6} ${src_ip_v6} -p tcp --sport ${src_port} ${dscp_ipt} -j ${target} -m comment --comment "${comment}" + ip6tables -t nat -A openclash_output ! -d ${fakeip_range6} ${src_ip_v6} -p tcp --sport ${src_port} ${dscp_ipt} -j ${target} -m comment --comment "${comment}" + ip6tables -t mangle -I openclash ! -d ${fakeip_range6} ${src_ip_v6} -p tcp --sport ${src_port} ${dscp_ipt} -j ${target} -m comment --comment "${comment}" + ip6tables -t mangle -I openclash_output -p tcp ! -d ${fakeip_range6} ${src_ip_v6} --sport ${src_port} ${dscp_ipt} -j ${target} -m comment --comment "${comment}" + ip6tables -t nat -I openclash_post -p tcp ! -d ${fakeip_range6} ${src_ip_v6} --sport ${src_port} ${dscp_ipt} -j ${target} -m comment --comment "${comment}" fi if $e_udp ; then - ip6tables -t mangle -I openclash -p udp ${src_ip_v6} --sport ${src_port} ${dscp_ipt} -j ${target} -m comment --comment "${comment}" - ip6tables -t mangle -I openclash_output -p udp ${src_ip_v6} --sport ${src_port} ${dscp_ipt} -j ${target} -m comment --comment "${comment}" - ip6tables -t nat -I openclash_post -p udp ${src_ip_v6} --sport ${src_port} ${dscp_ipt} -j ${target} -m comment --comment "${comment}" + ip6tables -t mangle -I openclash -p udp ! -d ${fakeip_range6} ${src_ip_v6} --sport ${src_port} ${dscp_ipt} -j ${target} -m comment --comment "${comment}" + ip6tables -t mangle -I openclash_output -p udp ! -d ${fakeip_range6} ${src_ip_v6} --sport ${src_port} ${dscp_ipt} -j ${target} -m comment --comment "${comment}" + ip6tables -t nat -I openclash_post -p udp ! -d ${fakeip_range6} ${src_ip_v6} --sport ${src_port} ${dscp_ipt} -j ${target} -m comment --comment "${comment}" fi fi fi @@ -1914,7 +1927,7 @@ if [ -n "$FW4" ]; then nft add element inet fw4 localnetwork6 { "$line" } done else - nft 'add element inet fw4 localnetwork6 { ::/128, ::1/128, ::ffff:0:0/96, ::ffff:0:0:0/96, 64:ff9b::/96, 100::/64, 2001::/32, 2001:20::/28, 2001:db8::/32, 2002::/16, fc00::/7, fe80::/10, ff00::/8}' + nft 'add element inet fw4 localnetwork6 { ::/128, ::1/128, ::ffff:0:0/96, ::ffff:0:0:0/96, 64:ff9b::/96, 100::/64, 2001::/32, 2001:20::/28, 2001:db8::/32, 2002::/16, fe80::/10, ff00::/8}' fi if [ -n "$wan_ip6s" ]; then @@ -1927,6 +1940,9 @@ if [ -n "$FW4" ]; then #tcp nft 'add chain inet fw4 openclash_v6' nft 'flush chain inet fw4 openclash_v6' + if [ "$en_mode" = "fake-ip" ]; then + nft add rule inet fw4 openclash_v6 ip6 nexthdr {tcp} ip6 daddr { "$fakeip_range6" } counter redirect to "$proxy_port" + fi nft 'add rule inet fw4 openclash_v6 ip6 daddr @localnetwork6 counter return' nft 'add rule inet fw4 openclash_v6 ct direction reply counter return' nft 'add rule inet fw4 openclash_v6 ip6 daddr @wan_ac_black_ipv6s counter return' @@ -1991,17 +2007,29 @@ if [ -n "$FW4" ]; then #tcp Tproxy && TUN if [ "$ipv6_mode" -ne 1 ] && [ "$ipv6_mode" -ne 3 ]; then if [ "$ipv6_mode" -eq 0 ]; then + if [ "$en_mode" = "fake-ip" ]; then + nft insert rule inet fw4 openclash_mangle_v6 position 0 ip6 nexthdr {tcp} ip6 daddr { "$fakeip_range6" } mark set "$PROXY_FWMARK" tproxy ip6 to :"$tproxy_port" counter accept + fi nft add rule inet fw4 openclash_mangle_v6 ip6 nexthdr {tcp} mark set "$PROXY_FWMARK" tproxy ip6 to :"$tproxy_port" counter accept comment \"OpenClash TCP Tproxy\" else + if [ "$en_mode" = "fake-ip" ]; then + nft insert rule inet fw4 openclash_mangle_v6 position 0 ip6 nexthdr {tcp} ip6 daddr { "$fakeip_range6" } mark set "$PROXY_FWMARK" counter + fi nft add rule inet fw4 openclash_mangle_v6 ip6 nexthdr {tcp} mark set "$PROXY_FWMARK" counter fi fi #udp if [ "$ipv6_mode" -eq 2 ] || [ "$ipv6_mode" -eq 3 ]; then + if [ "$en_mode" = "fake-ip" ]; then + nft insert rule inet fw4 openclash_mangle_v6 position 0 ip6 nexthdr {udp} ip6 daddr { "$fakeip_range6" } mark set "$PROXY_FWMARK" counter + fi nft add rule inet fw4 openclash_mangle_v6 ip6 nexthdr {udp} mark set "$PROXY_FWMARK" counter else if [ "$enable_v6_udp_proxy" -eq 1 ]; then + if [ "$en_mode" = "fake-ip" ]; then + nft insert rule inet fw4 openclash_mangle_v6 position 0 ip6 nexthdr {udp} ip6 daddr { "$fakeip_range6" } mark set "$PROXY_FWMARK" tproxy ip6 to :"$tproxy_port" counter accept + fi nft add rule inet fw4 openclash_mangle_v6 ip6 nexthdr {udp} mark set "$PROXY_FWMARK" tproxy ip6 to :"$tproxy_port" counter accept comment \"OpenClash UDP Tproxy\" fi fi @@ -2014,6 +2042,9 @@ if [ -n "$FW4" ]; then #tcp Redirect Mode nft 'add chain inet fw4 openclash_output_v6' nft 'flush chain inet fw4 openclash_output_v6' + if [ "$en_mode" = "fake-ip" ]; then + nft add rule inet fw4 openclash_output ip6 nexthdr {tcp} ip6 daddr { "$fakeip_range6" } counter redirect to "$proxy_port" + fi nft 'add rule inet fw4 openclash_output_v6 skgid == 65534 counter return' nft 'add rule inet fw4 openclash_output_v6 ip6 daddr @localnetwork6 counter return' nft 'add rule inet fw4 openclash_output_v6 ct direction reply counter return' @@ -2060,12 +2091,21 @@ if [ -n "$FW4" ]; then if ([ "$ipv6_mode" -eq 1 ] && [ "$enable_v6_udp_proxy" -eq 1 ]) || [ "$ipv6_mode" -eq 3 ]; then nft add rule inet fw4 openclash_mangle_output_v6 ip6 nexthdr {udp} mark set "$PROXY_FWMARK" counter + if [ "$en_mode" = "fake-ip" ]; then + nft insert rule inet fw4 openclash_mangle_output_v6 position 0 ip6 nexthdr {udp} ip6 daddr { "$fakeip_range6" } mark set "$PROXY_FWMARK" counter + fi fi if ([ "$ipv6_mode" -eq 0 ] && [ "$enable_v6_udp_proxy" -eq 1 ]) || [ "$ipv6_mode" -eq 2 ]; then nft add rule inet fw4 openclash_mangle_output_v6 ip6 nexthdr {tcp,udp} mark set "$PROXY_FWMARK" counter + if [ "$en_mode" = "fake-ip" ]; then + nft insert rule inet fw4 openclash_mangle_output_v6 position 0 ip6 nexthdr {tcp,udp} ip6 daddr { "$fakeip_range6" } mark set "$PROXY_FWMARK" counter + fi fi if [ "$ipv6_mode" -eq 0 ] && [ "$enable_v6_udp_proxy" -ne 1 ]; then nft add rule inet fw4 openclash_mangle_output_v6 ip6 nexthdr {tcp} mark set "$PROXY_FWMARK" counter + if [ "$en_mode" = "fake-ip" ]; then + nft insert rule inet fw4 openclash_mangle_output_v6 position 0 ip6 nexthdr {tcp} ip6 daddr { "$fakeip_range6" } mark set "$PROXY_FWMARK" counter + fi fi nft 'add rule inet fw4 mangle_output meta nfproto {ipv6} counter jump openclash_mangle_output_v6' fi @@ -2673,7 +2713,6 @@ if [ -z "$FW4" ]; then ipset add localnetwork6 2001:20::/28 ipset add localnetwork6 2001:db8::/32 ipset add localnetwork6 2002::/16 - ipset add localnetwork6 fc00::/7 ipset add localnetwork6 fe80::/10 ipset add localnetwork6 ff00::/8 fi @@ -2688,6 +2727,9 @@ if [ -z "$FW4" ]; then #tcp ip6tables -t nat -N openclash ip6tables -t nat -F openclash + if [ "$en_mode" = "fake-ip" ]; then + ip6tables -t nat -A openclash -p tcp -d "$fakeip_range6" -j REDIRECT --to-ports "$proxy_port" + fi ip6tables -t nat -A openclash -m set --match-set localnetwork6 dst -j RETURN ip6tables -t nat -A openclash -m conntrack --ctdir REPLY -j RETURN ip6tables -t nat -A openclash -m set --match-set wan_ac_black_ipv6s dst -j RETURN @@ -2749,17 +2791,29 @@ if [ -z "$FW4" ]; then #tcp Tproxy && TUN if [ "$ipv6_mode" -ne 1 ] && [ "$ipv6_mode" -ne 3 ]; then if [ "$ipv6_mode" -eq 0 ]; then + if [ "$en_mode" = "fake-ip" ]; then + ip6tables -t mangle -I openclash -p tcp -d "$fakeip_range6" -j TPROXY --on-port "$tproxy_port" --tproxy-mark "$PROXY_FWMARK" + fi ip6tables -t mangle -A openclash -p tcp -m comment --comment "OpenClash TCP Tproxy" -j TPROXY --on-port "$tproxy_port" --tproxy-mark "$PROXY_FWMARK" else + if [ "$en_mode" = "fake-ip" ]; then + ip6tables -t mangle -I openclash -p tcp -d "$fakeip_range6" -j MARK --set-mark "$PROXY_FWMARK" + fi ip6tables -t mangle -A openclash -p tcp -j MARK --set-mark "$PROXY_FWMARK" fi fi #udp if [ "$ipv6_mode" -eq 2 ] || [ "$ipv6_mode" -eq 3 ]; then + if [ "$en_mode" = "fake-ip" ]; then + ip6tables -t mangle -I openclash -p udp -d "$fakeip_range6" -j MARK --set-mark "$PROXY_FWMARK" + fi ip6tables -t mangle -A openclash -p udp -m comment --comment "OpenClash UDP TUN" -j MARK --set-xmark "$PROXY_FWMARK" else if [ "$enable_v6_udp_proxy" -eq 1 ]; then + if [ "$en_mode" = "fake-ip" ]; then + ip6tables -t mangle -I openclash -p udp -d "$fakeip_range6" -j TPROXY --on-port "$tproxy_port" --tproxy-mark "$PROXY_FWMARK" + fi ip6tables -t mangle -A openclash -p udp -m comment --comment "OpenClash UDP Tproxy" -j TPROXY --on-port "$tproxy_port" --tproxy-mark "$PROXY_FWMARK" fi fi @@ -2772,6 +2826,9 @@ if [ -z "$FW4" ]; then #tcp Redirect Mode ip6tables -t nat -N openclash_output ip6tables -t nat -F openclash_output + if [ "$en_mode" = "fake-ip" ]; then + ip6tables -t nat -A openclash_output -p tcp -d "$fakeip_range6" -j REDIRECT --to-ports "$proxy_port" + fi ip6tables -t nat -A openclash_output $owner -j RETURN ip6tables -t nat -A openclash_output -m set --match-set localnetwork6 dst -j RETURN ip6tables -t nat -A openclash_output -m conntrack --ctdir REPLY -j RETURN @@ -2813,12 +2870,22 @@ if [ -z "$FW4" ]; then fi if ([ "$ipv6_mode" -eq 1 ] && [ "$enable_v6_udp_proxy" -eq 1 ]) || [ "$ipv6_mode" -eq 3 ]; then + if [ "$en_mode" = "fake-ip" ]; then + ip6tables -t mangle -I openclash_output -p udp -d "$fakeip_range6" -j MARK --set-xmark "$PROXY_FWMARK" + fi ip6tables -t mangle -A openclash_output -p udp -j MARK --set-xmark "$PROXY_FWMARK" fi if ([ "$ipv6_mode" -eq 0 ] && [ "$enable_v6_udp_proxy" -eq 1 ]) || [ "$ipv6_mode" -eq 2 ]; then + if [ "$en_mode" = "fake-ip" ]; then + ip6tables -t mangle -I openclash_output -p tcp -d "$fakeip_range6" -j MARK --set-xmark "$PROXY_FWMARK" + ip6tables -t mangle -I openclash_output -p udp -d "$fakeip_range6" -j MARK --set-xmark "$PROXY_FWMARK" + fi ip6tables -t mangle -A openclash_output -j MARK --set-xmark "$PROXY_FWMARK" fi if [ "$ipv6_mode" -eq 0 ] && [ "$enable_v6_udp_proxy" -ne 1 ]; then + if [ "$en_mode" = "fake-ip" ]; then + ip6tables -t mangle -I openclash_output -p tcp -d "$fakeip_range6" -j MARK --set-xmark "$PROXY_FWMARK" + fi ip6tables -t mangle -A openclash_output -p tcp -j MARK --set-xmark "$PROXY_FWMARK" fi ip6tables -t mangle -A OUTPUT -j openclash_output @@ -3074,6 +3141,7 @@ EOF CUSTOM_FAKEIP_FILTER:int_bool \ CUSTOM_FAKEIP_FILTER_MODE:string \ FAKEIP_RANGE:string \ + FAKEIP_RANGE6:string \ ENABLE_RESPECT_RULES:int_bool \ CUSTOM_NAME_POLICY:int_bool \ CUSTOM_HOST:int_bool \ @@ -3425,6 +3493,13 @@ get_config() fi [ -z "$fakeip_range" ] && fakeip_range="198.18.0.1/16" + if [ "$(uci_get_config "fakeip_range6")" == "0" ]; then + fakeip_range6=$(ruby_read "$CONFIG_FILE" "['dns']['fake-ip-range6']") + else + fakeip_range6=$(uci_get_config "fakeip_range6") + fi + [ -z "$fakeip_range6" ] && fakeip_range6="fdfe:dcba:9876::1/64" + lan_interface_name=$(uci_get_config "lan_interface_name" || echo 0) if [ "$lan_interface_name" = "0" ]; then lan_ip=$(uci -q get network.lan.ipaddr 2>/dev/null | awk -F '/' '{print $1}' 2>/dev/null | tr -d '\n' || ip address show $(uci -q -p /tmp/state get network.lan.ifname || uci -q -p /tmp/state get network.lan.device) | grep -w "inet" 2>/dev/null |grep -Eo 'inet [0-9\.]+' | awk '{print $2}' | head -1 | tr -d '\n' || ip addr show 2>/dev/null | grep -w 'inet' | grep 'global' | grep 'brd' | grep -Eo 'inet [0-9\.]+' | awk '{print $2}' | head -n 1 | tr -d '\n') @@ -3520,7 +3595,7 @@ start_service() "$find_process_mode" "$fakeip_range" "$global_client_fingerprint" "$ipv6_mode" "$stack_type_v6" "$enable_unified_delay"\ "$enable_respect_rules" "$custom_fakeip_filter_mode" "$iptables_compat" "$disable_quic_go_gso" "$cors_allow"\ "$geo_custom_url" "$geoip_custom_url" "$geosite_custom_url" "$geoasn_custom_url"\ - "$lgbm_auto_update" "$lgbm_custom_url" "$lgbm_update_interval" "$smart_collect" "$smart_collect_size" + "$lgbm_auto_update" "$lgbm_custom_url" "$lgbm_update_interval" "$smart_collect" "$smart_collect_size" "$fakeip_range6" /usr/share/openclash/yml_rules_change.sh \ "$rule_source" "$enable_custom_clash_rules" "$TMP_CONFIG_FILE"\ @@ -3704,7 +3779,6 @@ reload_service() fi LOG_OUT "【${CUR_RELOAD_NUM}/$MAX_RELOAD】Reload OpenClash Firewall Rules..." revert_firewall - revert_dnsmasq do_run_mode get_config check_core_status & @@ -3713,7 +3787,6 @@ reload_service() if pidof clash >/dev/null && [ "$enable" == "1" ] && [ "$1" == "manual" ]; then LOG_OUT "Manually Reload Firewall Rules..." revert_firewall - revert_dnsmasq do_run_mode get_config check_core_status & diff --git a/openclash/luci-app-openclash/root/etc/openclash/custom/openclash_custom_localnetwork_ipv6.list b/openclash/luci-app-openclash/root/etc/openclash/custom/openclash_custom_localnetwork_ipv6.list index 6ac03da58c..d59554faba 100644 --- a/openclash/luci-app-openclash/root/etc/openclash/custom/openclash_custom_localnetwork_ipv6.list +++ b/openclash/luci-app-openclash/root/etc/openclash/custom/openclash_custom_localnetwork_ipv6.list @@ -8,6 +8,5 @@ 2001:20::/28 2001:db8::/32 2002::/16 -fc00::/7 fe80::/10 ff00::/8 \ No newline at end of file diff --git a/openclash/luci-app-openclash/root/usr/share/openclash/yml_change.sh b/openclash/luci-app-openclash/root/usr/share/openclash/yml_change.sh index c2e7008ccb..d542f59fed 100644 --- a/openclash/luci-app-openclash/root/usr/share/openclash/yml_change.sh +++ b/openclash/luci-app-openclash/root/usr/share/openclash/yml_change.sh @@ -349,6 +349,7 @@ lgbm_custom_url = '${43}' lgbm_update_interval = '${44}' smart_collect = '${45}' == '1' smart_collect_size = '${46}' +fake_ip_range6 = '${47}' enable_custom_dns = '$enable_custom_dns' == '1' append_wan_dns = '$append_wan_dns' == '1' @@ -431,6 +432,9 @@ threads << Thread.new do else Value['dns']['enhanced-mode'] = 'fake-ip' Value['dns']['fake-ip-range'] = fake_ip_range + if Value['dns']['ipv6'] + Value['dns']['fake-ip-range6'] = fake_ip_range6 + end end Value['dns']['listen'] = '0.0.0.0:' + dns_listen_port Value['dns']['respect-rules'] = true if respect_rules @@ -680,6 +684,11 @@ begin Value['dns']['fallback'] ||= ['https://dns.cloudflare.com/dns-query', 'https://dns.google/dns-query'] end + if Value['dns'].key?('default-nameserver') && Value['dns']['default-nameserver'].to_a.empty? + YAML.LOG('Tip: Detected That The default-nameserver DNS Option Has No Server Set, Starting To Complete...') + Value['dns']['default-nameserver'] = ['114.114.114.114', '119.29.29.29', '8.8.8.8', '1.1.1.1'] + end + # proxy-server-nameserver local_exclude = (%x{ls -l /sys/class/net/ |awk '{print \$9}' 2>&1}.each_line.map(&:strip) + ['h3=', 'skip-cert-verify=', 'ecs=', 'ecs-override='] + ['utun', 'tailscale0', 'docker0', 'tun163', 'br-lan', 'mihomo']).uniq.join('|') proxied_server_reg = /^[^#&]+#(?:(?:#{local_exclude})[^&]*&)*(?:(?!(?:#{local_exclude}))[^&]+)/ diff --git a/openwrt-packages/filebrowser/Makefile b/openwrt-packages/filebrowser/Makefile index 6ac3d8c803..73ab1fcbf8 100644 --- a/openwrt-packages/filebrowser/Makefile +++ b/openwrt-packages/filebrowser/Makefile @@ -5,12 +5,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=filebrowser -PKG_VERSION:=2.44.2 +PKG_VERSION:=2.45.0 PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://codeload.github.com/filebrowser/filebrowser/tar.gz/v${PKG_VERSION}? -PKG_HASH:=a1825ead2a890fb5b7d6c73d3a5f4518fb8479b0a1c10aa6ce5ba495ebaa4b65 +PKG_HASH:=fd7ed8dff59cdb11d56d76dbe739d341780e08ebcdc2ee5833849ccf8090d809 PKG_LICENSE:=Apache-2.0 PKG_LICENSE_FILES:=LICENSE diff --git a/openwrt-passwall/.github/workflows/Auto compile with openwrt sdk.yml b/openwrt-passwall/.github/workflows/Auto compile with openwrt sdk.yml index eb003e12b6..8d2869748d 100644 --- a/openwrt-passwall/.github/workflows/Auto compile with openwrt sdk.yml +++ b/openwrt-passwall/.github/workflows/Auto compile with openwrt sdk.yml @@ -39,7 +39,7 @@ jobs: url_tags: https://api.github.com/repos/${{ env.passwall }}/tags run: | cd luci-app-passwall - latest_version=$(awk -F ':=' '/PKG_VERSION|PKG_RELEASE/ {print $2}' Makefile | sed ':a;N;s/\$(PKG_VERSION)-//;s/\n$//;s/\n/-/;ba') + latest_version=$(awk -F ':=' '/^PKG_VERSION:=|^PKG_RELEASE:=/ {print $2}' Makefile | sed ':a;N;s/\$(PKG_VERSION)-//;s/\n$//;s/\n/-/;ba') has_update=$([ -z "$(wget -qO- -t1 -T2 ${{env.url_tags}} | grep \"${latest_version}\")" ] && echo true || echo false) prerelease=$([ "${{ github.ref_name }}" == "main" ] && echo false || echo true) echo "latest_version=${latest_version}" >> $GITHUB_OUTPUT diff --git a/openwrt-passwall/luci-app-passwall/Makefile b/openwrt-passwall/luci-app-passwall/Makefile index ff2afc9749..31b3edbfd4 100644 --- a/openwrt-passwall/luci-app-passwall/Makefile +++ b/openwrt-passwall/luci-app-passwall/Makefile @@ -6,7 +6,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-passwall -PKG_VERSION:=25.9.23 +PKG_VERSION:=25.11.1 PKG_RELEASE:=1 PKG_PO_VERSION:=$(PKG_VERSION) diff --git a/openwrt-passwall2/.github/workflows/Auto compile with openwrt sdk.yml b/openwrt-passwall2/.github/workflows/Auto compile with openwrt sdk.yml index 5174b487f4..1352ab234d 100644 --- a/openwrt-passwall2/.github/workflows/Auto compile with openwrt sdk.yml +++ b/openwrt-passwall2/.github/workflows/Auto compile with openwrt sdk.yml @@ -38,7 +38,7 @@ jobs: url_tags: https://api.github.com/repos/${{ env.passwall2 }}/tags run: | cd luci-app-passwall2 - latest_version=$(awk -F ':=' '/PKG_VERSION|PKG_RELEASE/ {print $2}' Makefile | sed ':a;N;s/\$(PKG_VERSION)-//;s/\n$//;s/\n/-/;ba') + latest_version=$(awk -F ':=' '/^PKG_VERSION:=|^PKG_RELEASE:=/ {print $2}' Makefile | sed ':a;N;s/\$(PKG_VERSION)-//;s/\n$//;s/\n/-/;ba') has_update=$([ -z "$(wget -qO- -t1 -T2 ${{env.url_tags}} | grep \"${latest_version}\")" ] && echo true || echo false) prerelease=$([ "${{ github.ref_name }}" == "main" ] && echo false || echo true) echo "latest_version=${latest_version}" >> $GITHUB_OUTPUT diff --git a/openwrt-passwall2/luci-app-passwall2/Makefile b/openwrt-passwall2/luci-app-passwall2/Makefile index 501d071b89..be6b72a788 100644 --- a/openwrt-passwall2/luci-app-passwall2/Makefile +++ b/openwrt-passwall2/luci-app-passwall2/Makefile @@ -5,8 +5,9 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-passwall2 -PKG_VERSION:=25.9.24 +PKG_VERSION:=25.11.2 PKG_RELEASE:=1 +PKG_PO_VERSION:=$(PKG_VERSION) PKG_CONFIG_DEPENDS:= \ CONFIG_PACKAGE_$(PKG_NAME)_Iptables_Transparent_Proxy \ diff --git a/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/client/acl_config.lua b/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/client/acl_config.lua index da2d67805e..857fbf7203 100644 --- a/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/client/acl_config.lua +++ b/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/client/acl_config.lua @@ -219,7 +219,7 @@ local TCP_REDIR_PORTS = m:get("@global_forwarding[0]", "tcp_redir_ports") o = s:option(Value, "tcp_redir_ports", translate("TCP Redir Ports")) o:value("", translate("Use global config") .. "(" .. TCP_REDIR_PORTS .. ")") o:value("1:65535", translate("All")) -o:value("22,25,53,143,465,587,853,993,995,80,443", translate("Common Use")) +o:value("22,25,53,80,143,443,465,587,853,873,993,995,5222,8080,8443,9418", translate("Common Use")) o:value("80,443", "80,443") o.validate = port_validate o:depends({ _hide_node_option = "1", ['!reverse'] = true }) diff --git a/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/client/node_list.lua b/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/client/node_list.lua index 0671c4e09b..2da6b172f6 100644 --- a/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/client/node_list.lua +++ b/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/client/node_list.lua @@ -176,20 +176,21 @@ o.cfgvalue = function(t, n) type = type .. " " .. protocol end local address = m:get(n, "address") or "" - local port = m:get(n, "port") or m:get(n, "hysteria_hop") or m:get(n, "hysteria2_hop") or "" + local port = m:get(n, "port") or "" + local port_s = (port ~= "") and port or m:get(n, "hysteria_hop") or m:get(n, "hysteria2_hop") or "" str = str .. translate(type) .. ":" .. remarks - if address ~= "" and port ~= "" then - port = port:gsub(":", "-") + if address ~= "" and port_s ~= "" then + port_s = port_s:gsub(":", "-") if show_node_info == "1" then if datatypes.ip6addr(address) then - str = str .. string.format("([%s]:%s)", address, port) + str = str .. string.format("([%s]:%s)", address, port_s) else - str = str .. string.format("(%s:%s)", address, port) + str = str .. string.format("(%s:%s)", address, port_s) end end - str = str .. string.format("", appname, n, address) - str = str .. string.format("", appname, n, port) end + str = str .. string.format("", appname, n, address) + str = str .. string.format("", appname, n, port) return str end diff --git a/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/client/other.lua b/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/client/other.lua index ae09245833..092f8af2fe 100644 --- a/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/client/other.lua +++ b/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/client/other.lua @@ -83,9 +83,9 @@ o.validate = port_validate ---- TCP Redir Ports o = s:option(Value, "tcp_redir_ports", translate("TCP Redir Ports")) -o.default = "22,25,53,143,465,587,853,993,995,80,443" +o.default = "22,25,53,80,143,443,465,587,853,873,993,995,5222,8080,8443,9418" o:value("1:65535", translate("All")) -o:value("22,25,53,143,465,587,853,993,995,80,443", translate("Common Use")) +o:value("22,25,53,80,143,443,465,587,853,873,993,995,5222,8080,8443,9418", translate("Common Use")) o:value("80,443", translate("Only Web")) o.validate = port_validate diff --git a/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/client/shunt_rules.lua b/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/client/shunt_rules.lua index fbb72b6f08..d6237bb1c7 100644 --- a/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/client/shunt_rules.lua +++ b/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/client/shunt_rules.lua @@ -3,9 +3,29 @@ local appname = api.appname local datatypes = api.datatypes m = Map(appname, "Sing-Box/Xray " .. translate("Shunt Rule")) -m.redirect = api.url() +m.redirect = api.url("rule") api.set_apply_on_parse(m) +if not arg[1] or not m:get(arg[1]) then + luci.http.redirect(m.redirect) +end + +-- Add inline CSS to map description +m.description = (m.description or "") .. [[ + +]] + function clean_text(text) local nbsp = string.char(0xC2, 0xA0) -- 不间断空格(U+00A0) local fullwidth_space = string.char(0xE3, 0x80, 0x80) -- 全角空格(U+3000) @@ -31,10 +51,16 @@ protocol = s:option(MultiValue, "protocol", translate("Protocol")) protocol:value("http") protocol:value("tls") protocol:value("bittorrent") +protocol.widget = "checkbox" +protocol.default = nil +protocol.optional = false o = s:option(MultiValue, "inbound", translate("Inbound Tag")) o:value("tproxy", translate("Transparent proxy")) o:value("socks", "Socks") +o.widget = "checkbox" +o.default = nil +o.optional = false network = s:option(ListValue, "network", translate("Network")) network:value("tcp,udp", "TCP UDP") diff --git a/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/ray.lua b/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/ray.lua index b0af935ce1..9f262183e7 100644 --- a/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/ray.lua +++ b/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/ray.lua @@ -321,6 +321,10 @@ o = s:option(Value, _n("encryption"), translate("Encrypt Method") .. " (encrypti o.default = "none" o.placeholder = "none" o:depends({ [_n("protocol")] = "vless" }) +o.validate = function(self, value) + value = api.trim(value) + return (value == "" and "none" or value) +end o = s:option(ListValue, _n("ss_method"), translate("Encrypt Method")) o.rewrite_option = "method" @@ -345,8 +349,8 @@ o = s:option(ListValue, _n("flow"), translate("flow")) o.default = "" o:value("", translate("Disable")) o:value("xtls-rprx-vision") -o:depends({ [_n("protocol")] = "vless", [_n("tls")] = true, [_n("transport")] = "raw" }) -o:depends({ [_n("protocol")] = "vless", [_n("tls")] = true, [_n("transport")] = "xhttp" }) +o:depends({ [_n("protocol")] = "vless", [_n("transport")] = "raw" }) +o:depends({ [_n("protocol")] = "vless", [_n("transport")] = "xhttp" }) o = s:option(Flag, _n("tls"), translate("TLS")) o.default = 0 diff --git a/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/ray.lua b/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/ray.lua index 028bf39204..f411caa4da 100644 --- a/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/ray.lua +++ b/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/ray.lua @@ -84,6 +84,10 @@ o = s:option(Value, _n("decryption"), translate("Encrypt Method") .. " (decrypti o.default = "none" o.placeholder = "none" o:depends({ [_n("protocol")] = "vless" }) +o.validate = function(self, value) + value = api.trim(value) + return (value == "" and "none" or value) +end o = s:option(ListValue, _n("x_ss_method"), translate("Encrypt Method")) o.rewrite_option = "method" diff --git a/openwrt-passwall2/luci-app-passwall2/luasrc/passwall2/api.lua b/openwrt-passwall2/luci-app-passwall2/luasrc/passwall2/api.lua index 033dfe92d7..326c97a823 100644 --- a/openwrt-passwall2/luci-app-passwall2/luasrc/passwall2/api.lua +++ b/openwrt-passwall2/luci-app-passwall2/luasrc/passwall2/api.lua @@ -337,41 +337,28 @@ function is_special_node(e) end function is_ip(val) - if is_ipv6(val) then - val = get_ipv6_only(val) - end - return datatypes.ipaddr(val) + local str = val:match("%[(.-)%]") or val + return datatypes.ipaddr(str) or false end function is_ipv6(val) - local str = val - local address = val:match('%[(.*)%]') - if address then - str = address - end - if datatypes.ip6addr(str) then - return true - end - return false + local str = val:match("%[(.-)%]") or val + return datatypes.ip6addr(str) or false end function is_ipv6addrport(val) - if is_ipv6(val) then - local address, port = val:match('%[(.*)%]:([^:]+)$') - if port then - return datatypes.port(port) - end + local address, port = val:match("%[(.-)%]:([0-9]+)$") + if address and datatypes.ip6addr(address) and datatypes.port(port) then + return true end return false end function get_ipv6_only(val) local result = "" - if is_ipv6(val) then - result = val - if val:match('%[(.*)%]') then - result = val:match('%[(.*)%]') - end + local inner = val:match("%[(.-)%]") or val + if datatypes.ip6addr(inner) then + result = inner end return result end @@ -380,7 +367,7 @@ function get_ipv6_full(val) local result = "" if is_ipv6(val) then result = val - if not val:match('%[(.*)%]') then + if not val:match("%[.-%]") then result = "[" .. result .. "]" end end diff --git a/openwrt-passwall2/luci-app-passwall2/luasrc/passwall2/util_sing-box.lua b/openwrt-passwall2/luci-app-passwall2/luasrc/passwall2/util_sing-box.lua index ee4642c2dd..612b8c3048 100644 --- a/openwrt-passwall2/luci-app-passwall2/luasrc/passwall2/util_sing-box.lua +++ b/openwrt-passwall2/luci-app-passwall2/luasrc/passwall2/util_sing-box.lua @@ -146,7 +146,10 @@ function gen_outbound(flag, node, tag, proxy_table) v2ray_transport = { type = "http", host = node.tcp_guise_http_host, - path = (node.tcp_guise_http_path and node.tcp_guise_http_path[1]) or "/", + path = node.tcp_guise_http_path and (function() + local first = node.tcp_guise_http_path[1] + return (first == "" or not first) and "/" or first + end)() or "/", idle_timeout = (node.http_h2_health_check == "1") and node.http_h2_read_idle_timeout or nil, ping_timeout = (node.http_h2_health_check == "1") and node.http_h2_health_check_timeout or nil, } diff --git a/openwrt-passwall2/luci-app-passwall2/luasrc/passwall2/util_xray.lua b/openwrt-passwall2/luci-app-passwall2/luasrc/passwall2/util_xray.lua index 6bc1ae18d3..e1834b04aa 100644 --- a/openwrt-passwall2/luci-app-passwall2/luasrc/passwall2/util_xray.lua +++ b/openwrt-passwall2/luci-app-passwall2/luasrc/passwall2/util_xray.lua @@ -167,7 +167,13 @@ function gen_outbound(flag, node, tag, proxy_table) header = { type = node.tcp_guise, request = (node.tcp_guise == "http") and { - path = node.tcp_guise_http_path or {"/"}, + path = node.tcp_guise_http_path and (function() + local t, r = node.tcp_guise_http_path, {} + for _, v in ipairs(t) do + r[#r + 1] = (v == "" and "/" or v) + end + return r + end)() or {"/"}, headers = { Host = node.tcp_guise_http_host or {} } @@ -213,7 +219,7 @@ function gen_outbound(flag, node, tag, proxy_table) host = node.xhttp_host, -- 如果包含 "extra" 节,取 "extra" 内的内容,否则直接赋值给 extra extra = node.xhttp_extra and (function() - local success, parsed = pcall(jsonc.parse, node.xhttp_extra) + local success, parsed = pcall(jsonc.parse, node.xhttp_extra) if success then return parsed.extra or parsed else @@ -232,9 +238,12 @@ function gen_outbound(flag, node, tag, proxy_table) id = node.uuid, level = 0, security = (node.protocol == "vmess") and node.security or nil, - encryption = node.encryption or "none", - flow = (node.protocol == "vless" and node.tls == "1" and (node.transport == "raw" or node.transport == "tcp" or node.transport == "xhttp") and node.flow and node.flow ~= "") and node.flow or nil - + encryption = (node.protocol == "vless") and ((node.encryption and node.encryption ~= "") and node.encryption or "none") or nil, + flow = (node.protocol == "vless" + and (node.tls == "1" or (node.encryption and node.encryption ~= "" and node.encryption ~= "none")) + and (node.transport == "raw" or node.transport == "tcp" or node.transport == "xhttp") + and node.flow and node.flow ~= "" + ) and node.flow or nil } } } @@ -310,7 +319,7 @@ function gen_config_server(node) end settings = { clients = clients, - decryption = node.decryption or "none" + decryption = (node.protocol == "vless") and ((node.decryption and node.decryption ~= "") and node.decryption or "none") or nil } end elseif node.protocol == "socks" then @@ -460,7 +469,13 @@ function gen_config_server(node) header = { type = node.tcp_guise, request = (node.tcp_guise == "http") and { - path = node.tcp_guise_http_path or {"/"}, + path = node.tcp_guise_http_path and (function() + local t, r = node.tcp_guise_http_path, {} + for _, v in ipairs(t) do + r[#r + 1] = (v == "" and "/" or v) + end + return r + end)() or {"/"}, headers = { Host = node.tcp_guise_http_host or {} } diff --git a/openwrt-passwall2/luci-app-passwall2/luasrc/view/passwall2/node_list/link_share_man.htm b/openwrt-passwall2/luci-app-passwall2/luasrc/view/passwall2/node_list/link_share_man.htm index 493231728f..40d954c9dc 100644 --- a/openwrt-passwall2/luci-app-passwall2/luasrc/view/passwall2/node_list/link_share_man.htm +++ b/openwrt-passwall2/luci-app-passwall2/luasrc/view/passwall2/node_list/link_share_man.htm @@ -959,6 +959,7 @@ local hysteria2_type = get_core("hysteria2_type", {{has_hysteria2,"hysteria2"},{ opt.set(dom_prefix + 'transport', "raw"); opt.set(dom_prefix + 'tcp_guise', "http"); opt.set(dom_prefix + 'tcp_guise_http_host', obfs_host || ''); + opt.set(dom_prefix + 'tcp_guise_http_path', '/'); } else if (obfs === "tls") { opt.set(dom_prefix + 'tls', true); opt.set(dom_prefix + 'tls_serverName', obfs_host || ''); @@ -1361,11 +1362,11 @@ local hysteria2_type = get_core("hysteria2_type", {{has_hysteria2,"hysteria2"},{ opt.set(dom_prefix + 'port', m.port || "443"); opt.set(dom_prefix + 'encryption', queryParam.encryption || "none"); + opt.set(dom_prefix + 'flow', (queryParam.flow || '').replace('-udp443', '')); if (queryParam.security) { if (queryParam.security == "tls") { opt.set(dom_prefix + 'tls', true); opt.set(dom_prefix + 'reality', false); - opt.set(dom_prefix + 'flow', (queryParam.flow || '').replace('-udp443', '')); opt.set(dom_prefix + 'alpn', queryParam.alpn || 'default'); opt.set(dom_prefix + 'tls_serverName', queryParam.sni || ''); opt.set(dom_prefix + 'tls_allowInsecure', true); @@ -1383,7 +1384,6 @@ local hysteria2_type = get_core("hysteria2_type", {{has_hysteria2,"hysteria2"},{ if (queryParam.security == "reality") { opt.set(dom_prefix + 'tls', true); opt.set(dom_prefix + 'reality', true); - opt.set(dom_prefix + 'flow', (queryParam.flow || '').replace('-udp443', '')); opt.set(dom_prefix + 'alpn', queryParam.alpn || 'default'); opt.set(dom_prefix + 'tls_serverName', queryParam.sni || ''); if (queryParam.fp && queryParam.fp.trim() != "") { diff --git a/openwrt-passwall2/luci-app-passwall2/luasrc/view/passwall2/node_list/node_list.htm b/openwrt-passwall2/luci-app-passwall2/luasrc/view/passwall2/node_list/node_list.htm index 4893f1f43d..c694d4f655 100644 --- a/openwrt-passwall2/luci-app-passwall2/luasrc/view/passwall2/node_list/node_list.htm +++ b/openwrt-passwall2/luci-app-passwall2/luasrc/view/passwall2/node_list/node_list.htm @@ -215,18 +215,12 @@ table td, .table .td { } function get_address_full(id) { - try { - var address = document.getElementById("cbid.passwall2." + id + ".address").value; - var port = document.getElementById("cbid.passwall2." + id + ".port").value; - } - catch(err){} + var address = (document.getElementById("cbid.passwall2." + id + ".address") || {}).value || ""; + var port = (document.getElementById("cbid.passwall2." + id + ".port") || {}).value || ""; //判断是否含有汉字 - var reg = new RegExp("[\\u4E00-\\u9FFF]+","g"); - if ((address != null && address != "") && (port != null && port != "") && reg.test(address) == false) { - return { address: address, port: port }; - } else { - return null; - } + var reg = /[\u4E00-\u9FFF]+/; + address = !reg.test(address) ? address : ""; + return { address: address, port: port }; } //获取当前使用的节点 @@ -285,7 +279,7 @@ table td, .table .td { function ping_node(cbi_id, dom, type) { var full = get_address_full(cbi_id); - if (full != null) { + if ((type == "icmp" && full.address != "" ) || (type == "tcping" && full.address != "" && full.port != "")) { dom.onclick = null dom.innerText = "<%:Check...%>"; XHR.get('<%=api.url("ping_node")%>', { @@ -320,7 +314,7 @@ table td, .table .td { for (var i = 0; i < ping_value.length; i++) { var cbi_id = ping_value[i].getAttribute("cbiid"); var full = get_address_full(cbi_id); - if (full != null) { + if ((auto_detection_time == "icmp" && full.address != "" ) || (auto_detection_time == "tcping" && full.address != "" && full.port != "")) { var flag = false; //当有多个相同地址和端口时合在一起 for (var j = 0; j < nodes.length; j++) { diff --git a/openwrt-passwall2/luci-app-passwall2/root/usr/share/passwall2/0_default_config b/openwrt-passwall2/luci-app-passwall2/root/usr/share/passwall2/0_default_config index 3e26d52ac5..810fb061c4 100644 --- a/openwrt-passwall2/luci-app-passwall2/root/usr/share/passwall2/0_default_config +++ b/openwrt-passwall2/luci-app-passwall2/root/usr/share/passwall2/0_default_config @@ -27,7 +27,7 @@ config global_delay config global_forwarding option tcp_no_redir_ports 'disable' option udp_no_redir_ports 'disable' - option tcp_redir_ports '22,25,53,143,465,587,853,993,995,80,443' + option tcp_redir_ports '22,25,53,80,143,443,465,587,853,873,993,995,5222,8080,8443,9418' option udp_redir_ports '1:65535' option accept_icmp '0' option use_nft '0' diff --git a/openwrt-passwall2/luci-app-passwall2/root/usr/share/passwall2/subscribe.lua b/openwrt-passwall2/luci-app-passwall2/root/usr/share/passwall2/subscribe.lua index 4507b0bd52..c2191e189f 100755 --- a/openwrt-passwall2/luci-app-passwall2/root/usr/share/passwall2/subscribe.lua +++ b/openwrt-passwall2/luci-app-passwall2/root/usr/share/passwall2/subscribe.lua @@ -740,6 +740,7 @@ local function processData(szType, content, add_mode, add_from) result.transport = "raw" result.tcp_guise = "http" result.tcp_guise_http_host = (obfs_host and obfs_host ~= "") and { obfs_host } or nil + result.tcp_guise_http_path = { "/" } elseif obfs == "tls" then result.tls = "1" result.tls_serverName = obfs_host diff --git a/small/luci-app-openclash/Makefile b/small/luci-app-openclash/Makefile index 33fe329b5a..d7e09e4c39 100644 --- a/small/luci-app-openclash/Makefile +++ b/small/luci-app-openclash/Makefile @@ -1,7 +1,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-openclash -PKG_VERSION:=0.47.024 +PKG_VERSION:=0.47.028 PKG_MAINTAINER:=vernesong PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME) diff --git a/small/luci-app-openclash/luasrc/controller/openclash.lua b/small/luci-app-openclash/luasrc/controller/openclash.lua index 2a44b882e1..814d5166fd 100644 --- a/small/luci-app-openclash/luasrc/controller/openclash.lua +++ b/small/luci-app-openclash/luasrc/controller/openclash.lua @@ -517,7 +517,7 @@ local function dler_login_info_save() end local function dler_login() - local info, token, get_sub, sub_info, sub_key, sub_match + local info, token, get_sub, sub_info, sub_key, sub_match, sub_convert, sid local sub_path = "/tmp/dler_sub" local email = fs.uci_get_config("config", "dler_email") local passwd = fs.uci_get_config("config", "dler_passwd") @@ -541,14 +541,25 @@ local function dler_login() for _,v in ipairs(sub_key) do while true do sub_match = false + sub_convert = false uci:foreach("openclash", "config_subscribe", function(s) if s.name == "Dler Cloud - " .. v and s.address == sub_info[v] then - sub_match = true + sub_match = true + end + if s.name == "Dler Cloud - " .. v and s.address ~= sub_info[v] then + sub_convert = true + sid = s['.name'] end end) if sub_match then break end - luci.sys.exec(string.format('sid=$(uci -q add openclash config_subscribe) && uci -q set openclash."$sid".name="Dler Cloud - %s" && uci -q set openclash."$sid".address="%s"', v, sub_info[v])) + if sub_convert then + uci:set("openclash", sid, "address", sub_info[v]) + else + sid = uci:add("openclash", "config_subscribe") + uci:set("openclash", sid, "name", "Dler Cloud - " .. v) + uci:set("openclash", sid, "address", sub_info[v]) + end uci:commit("openclash") break end diff --git a/small/luci-app-openclash/luasrc/model/cbi/openclash/config-overwrite.lua b/small/luci-app-openclash/luasrc/model/cbi/openclash/config-overwrite.lua index 7d19ae7bf5..75f05e7cb3 100644 --- a/small/luci-app-openclash/luasrc/model/cbi/openclash/config-overwrite.lua +++ b/small/luci-app-openclash/luasrc/model/cbi/openclash/config-overwrite.lua @@ -173,8 +173,8 @@ o.description = translate("Automatically Append Compliant DNS to default-nameser o.default = 1 if op_mode == "fake-ip" then -o = s:taboption("dns", Value, "fakeip_range", translate("Fake-IP Range (IPv4 Cidr)")) -o.description = translate("Set Fake-IP Range (IPv4 Cidr)") +o = s:taboption("dns", Value, "fakeip_range", translate("Fake-IP Range").." (IPv4 Cidr)") +o.description = translate("Set Fake-IP Range").." (IPv4 Cidr)" o:value("0", translate("Disable")) o:value("198.18.0.1/16") o.default = "0" diff --git a/small/luci-app-openclash/luasrc/model/cbi/openclash/settings.lua b/small/luci-app-openclash/luasrc/model/cbi/openclash/settings.lua index f3957afdd0..629d66131e 100644 --- a/small/luci-app-openclash/luasrc/model/cbi/openclash/settings.lua +++ b/small/luci-app-openclash/luasrc/model/cbi/openclash/settings.lua @@ -7,7 +7,7 @@ local UTIL = require "luci.util" local fs = require "luci.openclash" local uci = require "luci.model.uci".cursor() local json = require "luci.jsonc" -local datatypes = require "luci.cbi.datatypes" +local datatype = require "luci.cbi.datatypes" -- 优化 CBI UI(新版 LuCI 专用) local function optimize_cbi_ui() @@ -300,8 +300,8 @@ local function ip_compare(a, b) return 0 end - local a_is_ipv4 = datatypes.ip4addr(a.dest) - local b_is_ipv4 = datatypes.ip4addr(b.dest) + local a_is_ipv4 = datatype.ip4addr(a.dest) + local b_is_ipv4 = datatype.ip4addr(b.dest) if a_is_ipv4 and not b_is_ipv4 then return true @@ -349,8 +349,8 @@ end for _, mac in ipairs(mac_order) do local ips = mac_ip_map[mac] table.sort(ips, function(a, b) - local a_is_ipv4 = datatypes.ip4addr(a) - local b_is_ipv4 = datatypes.ip4addr(b) + local a_is_ipv4 = datatype.ip4addr(a) + local b_is_ipv4 = datatype.ip4addr(b) if a_is_ipv4 and not b_is_ipv4 then return true elseif not a_is_ipv4 and b_is_ipv4 then @@ -1192,6 +1192,25 @@ o = s:taboption("ipv6", Flag, "ipv6_dns", translate("IPv6 DNS Resolve")) o.description = translate("Enable to Resolve IPv6 DNS Requests") o.default = 0 +if op_mode == "fake-ip" then +o = s:taboption("ipv6", Value, "fakeip_range6", translate("Fake-IP Range").." (IPv6 Cidr)") +o.description = translate("Set Fake-IP Range").. " (IPv6 Cidr)" +o:depends("ipv6_dns", "1") +o:value("0", translate("Disable")) +o:value("fdfe:dcba:9876::1/64") +o.default = "0" +o.placeholder = "fdfe:dcba:9876::1/64" +function o.validate(self, value) + if value == "0" then + return "0" + end + if datatype.cidr6(value) then + return value + end + return "fdfe:dcba:9876::1/64" +end +end + o = s:taboption("ipv6", ListValue, "china_ip6_route", translate("China IPv6 Route")) o.description = translate("Bypass Specified Regions Network Flows, Improve Performance, If Inaccessibility on Bypass Gateway, Try to Enable Bypass Gateway Compatible Option") o.default = 0 @@ -1200,6 +1219,7 @@ o:value("1", translate("Bypass Mainland China")) o:value("2", translate("Bypass Overseas")) o:depends("ipv6_enable", "1") + o = s:taboption("ipv6", Value, "local_network6_pass", translate("Local IPv6 Network Bypassed List")) o.template = "cbi/tvalue" o.description = translate("The Traffic of The Destination For The Specified Address Will Not Pass The Core") diff --git a/small/luci-app-openclash/luasrc/view/openclash/config_editor.htm b/small/luci-app-openclash/luasrc/view/openclash/config_editor.htm index 557333af45..dcca8364fc 100644 --- a/small/luci-app-openclash/luasrc/view/openclash/config_editor.htm +++ b/small/luci-app-openclash/luasrc/view/openclash/config_editor.htm @@ -97,6 +97,13 @@ local sconf = "/etc/openclash/"..conf_name \ No newline at end of file diff --git a/small/luci-app-openclash/luasrc/view/openclash/tblsection.htm b/small/luci-app-openclash/luasrc/view/openclash/tblsection.htm index 3c9cb020e3..480c1bbfef 100644 --- a/small/luci-app-openclash/luasrc/view/openclash/tblsection.htm +++ b/small/luci-app-openclash/luasrc/view/openclash/tblsection.htm @@ -419,6 +419,13 @@ local sectiontype = "_"..self.config.."_"..string.match(self.sectiontype, "[%w_] var divs<%=sectiontype%> = document.getElementsByClassName('dom-<%=self.config%>-<%=self.sectiontype%>'); function isDarkBackground(element) { + var cachedTheme = localStorage.getItem('oc-theme'); + if (cachedTheme === 'dark') { + return true; + } else if (cachedTheme === 'light') { + return false; + } + if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) { return true; } diff --git a/small/luci-app-openclash/luasrc/view/openclash/tblsection_dns.htm b/small/luci-app-openclash/luasrc/view/openclash/tblsection_dns.htm index 82032c03b8..2c98f13262 100644 --- a/small/luci-app-openclash/luasrc/view/openclash/tblsection_dns.htm +++ b/small/luci-app-openclash/luasrc/view/openclash/tblsection_dns.htm @@ -370,6 +370,13 @@ local sectiontype = "_"..self.config.."_"..string.match(self.sectiontype, "[%w_] var divs<%=sectiontype%> = document.getElementsByClassName('dom-<%=self.config%>-<%=self.sectiontype%>'); function isDarkBackground(element) { + var cachedTheme = localStorage.getItem('oc-theme'); + if (cachedTheme === 'dark') { + return true; + } else if (cachedTheme === 'light') { + return false; + } + if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) { return true; } diff --git a/small/luci-app-openclash/po/zh-cn/openclash.zh-cn.po b/small/luci-app-openclash/po/zh-cn/openclash.zh-cn.po index ffcf880bf3..c0f67fb1ae 100644 --- a/small/luci-app-openclash/po/zh-cn/openclash.zh-cn.po +++ b/small/luci-app-openclash/po/zh-cn/openclash.zh-cn.po @@ -1986,6 +1986,9 @@ msgstr "错误:丢失或未指定第三方规则中的部分策略组,停止 msgid "Tip: Detected That The nameserver DNS Option Has No Server Set, Starting To Complete..." msgstr "提示:检测到 DNS 选项下的 Nameserver 未设置服务器,开始补全..." +msgid "Tip: Detected That The default-nameserver DNS Option Has No Server Set, Starting To Complete..." +msgstr "提示:检测到 DNS 选项下的 Default-nameserver 未设置服务器,开始补全..." + msgid "Error: Nameserver Option Must Be Setted, Stop Customing DNS Servers" msgstr "错误:配置文件 DNS 选项下的 Nameserver 必须设置服务器,已停止设置自定义 DNS 服务器!" @@ -3162,11 +3165,11 @@ msgstr "提示:DNS 劫持模式为防火墙转发..." msgid "Tip: DNS Hijacking is Disabled..." msgstr "提示:DNS 劫持未开启..." -msgid "Fake-IP Range (IPv4 Cidr)" -msgstr "Fake-IP 地址范围 (IPv4 Cidr)" +msgid "Fake-IP Range" +msgstr "Fake-IP 地址范围" -msgid "Set Fake-IP Range (IPv4 Cidr)" -msgstr "设置 Fake-IP 地址范围 (IPv4 Cidr)" +msgid "Set Fake-IP Range" +msgstr "设置 Fake-IP 地址范围" msgid "IPv6 Settings" msgstr "IPv6 设置" @@ -4194,11 +4197,14 @@ msgstr "订阅" msgid "Overwrite Module" msgstr "覆写模块" -msgid "module not found, please check your system depends and try again!" -msgstr "模块未找到,请检查你的固件依赖并重试!" +msgid "module not found, please check your system depends if something abnormal!" +msgstr "模块未找到,如遇到异常请检查您的固件依赖!" msgid "Select Nodes Force Lookup and Use Target ASN Info First For More Stable Experience" msgstr "选择节点时强制查找并优先使用目标的 ASN 信息,以获得更稳定的体验" msgid "Prefer-ASN" -msgstr "ASN 优先" \ No newline at end of file +msgstr "ASN 优先" + +msgid "Theme Switch" +msgstr "主题切换" \ No newline at end of file diff --git a/small/luci-app-openclash/root/etc/init.d/openclash b/small/luci-app-openclash/root/etc/init.d/openclash index d34bc27014..10c8cb5f33 100644 --- a/small/luci-app-openclash/root/etc/init.d/openclash +++ b/small/luci-app-openclash/root/etc/init.d/openclash @@ -664,11 +664,24 @@ check_mod() if container; then return 0 fi - modprobe $1 2>/dev/null - if [ $? -ne 0 ]; then - LOG_OUT "Error:【$1】module not found, please check your system depends and try again!" - start_fail + + # Convert module name to uppercase using POSIX-compatible syntax + # BusyBox tr doesn't support [:lower:]/[:upper:], use a-z/A-Z instead + module_upper=$(echo "$1" | tr a-z A-Z) + if [ -f /proc/config.gz ] && zcat /proc/config.gz | grep -q "CONFIG_${module_upper}=y"; then + return 0 fi + + if lsmod | grep -q "^$1 "; then + return 0 + fi + + modprobe $1 2>/dev/null + if [ $? -eq 0 ]; then + return 0 + fi + + LOG_OUT "Error:【$1】module not found, please check your system depends if something abnormal!" } >/dev/null 2>&1 check_core_status() @@ -751,12 +764,12 @@ check_core_status() fi # redirect dns setting after core started, prevent core dns lookup failure - change_dns "$enable_redirect_dns" - set_firewall - if [ "$1" == "start" ]; then + change_dns "$enable_redirect_dns" + set_firewall LOG_OUT "Tip: OpenClash Start Successful!" else + set_firewall LOG_OUT "Tip: Firewall Reload Successful!" fi } >/dev/null 2>&1 @@ -924,16 +937,16 @@ firewall_lan_ac_traffic() if [ "${ipv6_enable}" -eq 1 ]; then if [ "${family}" == "both" ] || [ "${family}" == "ipv6" ]; then if $e_tcp ; then - nft insert rule inet fw4 openclash_v6 position 0 ip6 saddr ${src_ip_v6} tcp sport ${src_port} ${dscp_rule} counter ${target} comment "\"${comment}\"" - nft insert rule inet fw4 openclash_output_v6 position 0 ip6 saddr ${src_ip_v6} tcp sport ${src_port} ${dscp_rule} counter ${target} comment "\"${comment}\"" - nft insert rule inet fw4 openclash_mangle_v6 position 0 ip6 saddr ${src_ip_v6} tcp sport ${src_port} ${dscp_rule} counter ${target} comment "\"${comment}\"" - nft insert rule inet fw4 openclash_mangle_output_v6 position 0 meta nfproto {ipv6} ip6 saddr ${src_ip_v6} tcp sport ${src_port} ${dscp_rule} counter ${target} comment "\"${comment}\"" - nft insert rule inet fw4 openclash_post_v6 position 0 ip6 saddr ${src_ip_v6} tcp sport ${src_port} ${dscp_rule} counter ${target} comment "\"${comment}\"" + nft insert rule inet fw4 openclash_v6 position 0 ip6 daddr != { ${fakeip_range6} } ip6 saddr ${src_ip_v6} tcp sport ${src_port} ${dscp_rule} counter ${target} comment "\"${comment}\"" + nft insert rule inet fw4 openclash_output_v6 position 0 ip6 daddr != { ${fakeip_range6} } ip6 saddr ${src_ip_v6} tcp sport ${src_port} ${dscp_rule} counter ${target} comment "\"${comment}\"" + nft insert rule inet fw4 openclash_mangle_v6 position 0 ip6 daddr != { ${fakeip_range6} } ip6 saddr ${src_ip_v6} tcp sport ${src_port} ${dscp_rule} counter ${target} comment "\"${comment}\"" + nft insert rule inet fw4 openclash_mangle_output_v6 position 0 meta nfproto {ipv6} ip6 daddr != { ${fakeip_range6} } ip6 saddr ${src_ip_v6} tcp sport ${src_port} ${dscp_rule} counter ${target} comment "\"${comment}\"" + nft insert rule inet fw4 openclash_post_v6 position 0 ip6 daddr != { ${fakeip_range6} } ip6 saddr ${src_ip_v6} tcp sport ${src_port} ${dscp_rule} counter ${target} comment "\"${comment}\"" fi if $e_udp ; then - nft insert rule inet fw4 openclash_mangle_v6 position 0 ip6 saddr ${src_ip_v6} udp sport ${src_port} ${dscp_rule} counter ${target} comment "\"${comment}\"" - nft insert rule inet fw4 openclash_mangle_output_v6 position 0 meta nfproto {ipv6} ip6 saddr ${src_ip_v6} udp sport ${src_port} ${dscp_rule} counter ${target} comment "\"${comment}\"" - nft insert rule inet fw4 openclash_post_v6 position 0 ip6 saddr ${src_ip_v6} udp sport ${src_port} ${dscp_rule} counter ${target} comment "\"${comment}\"" + nft insert rule inet fw4 openclash_mangle_v6 position 0 ip6 daddr != { ${fakeip_range6} } ip6 saddr ${src_ip_v6} udp sport ${src_port} ${dscp_rule} counter ${target} comment "\"${comment}\"" + nft insert rule inet fw4 openclash_mangle_output_v6 position 0 meta nfproto {ipv6} ip6 daddr != { ${fakeip_range6} } ip6 saddr ${src_ip_v6} udp sport ${src_port} ${dscp_rule} counter ${target} comment "\"${comment}\"" + nft insert rule inet fw4 openclash_post_v6 position 0 ip6 daddr != { ${fakeip_range6} } ip6 saddr ${src_ip_v6} udp sport ${src_port} ${dscp_rule} counter ${target} comment "\"${comment}\"" fi fi fi @@ -990,16 +1003,16 @@ firewall_lan_ac_traffic() if [ "${ipv6_enable}" -eq 1 ]; then if [ "${family}" == "both" ] || [ "${family}" == "ipv6" ]; then if $e_tcp ; then - ip6tables -t nat -I openclash ${src_ip_v6} -p tcp --sport ${src_port} ${dscp_ipt} -j ${target} -m comment --comment "${comment}" - ip6tables -t nat -A openclash_output ${src_ip_v6} -p tcp --sport ${src_port} ${dscp_ipt} -j ${target} -m comment --comment "${comment}" - ip6tables -t mangle -I openclash ${src_ip_v6} -p tcp --sport ${src_port} ${dscp_ipt} -j ${target} -m comment --comment "${comment}" - ip6tables -t mangle -I openclash_output -p tcp ${src_ip_v6} --sport ${src_port} ${dscp_ipt} -j ${target} -m comment --comment "${comment}" - ip6tables -t nat -I openclash_post -p tcp ${src_ip_v6} --sport ${src_port} ${dscp_ipt} -j ${target} -m comment --comment "${comment}" + ip6tables -t nat -I openclash ! -d ${fakeip_range6} ${src_ip_v6} -p tcp --sport ${src_port} ${dscp_ipt} -j ${target} -m comment --comment "${comment}" + ip6tables -t nat -A openclash_output ! -d ${fakeip_range6} ${src_ip_v6} -p tcp --sport ${src_port} ${dscp_ipt} -j ${target} -m comment --comment "${comment}" + ip6tables -t mangle -I openclash ! -d ${fakeip_range6} ${src_ip_v6} -p tcp --sport ${src_port} ${dscp_ipt} -j ${target} -m comment --comment "${comment}" + ip6tables -t mangle -I openclash_output -p tcp ! -d ${fakeip_range6} ${src_ip_v6} --sport ${src_port} ${dscp_ipt} -j ${target} -m comment --comment "${comment}" + ip6tables -t nat -I openclash_post -p tcp ! -d ${fakeip_range6} ${src_ip_v6} --sport ${src_port} ${dscp_ipt} -j ${target} -m comment --comment "${comment}" fi if $e_udp ; then - ip6tables -t mangle -I openclash -p udp ${src_ip_v6} --sport ${src_port} ${dscp_ipt} -j ${target} -m comment --comment "${comment}" - ip6tables -t mangle -I openclash_output -p udp ${src_ip_v6} --sport ${src_port} ${dscp_ipt} -j ${target} -m comment --comment "${comment}" - ip6tables -t nat -I openclash_post -p udp ${src_ip_v6} --sport ${src_port} ${dscp_ipt} -j ${target} -m comment --comment "${comment}" + ip6tables -t mangle -I openclash -p udp ! -d ${fakeip_range6} ${src_ip_v6} --sport ${src_port} ${dscp_ipt} -j ${target} -m comment --comment "${comment}" + ip6tables -t mangle -I openclash_output -p udp ! -d ${fakeip_range6} ${src_ip_v6} --sport ${src_port} ${dscp_ipt} -j ${target} -m comment --comment "${comment}" + ip6tables -t nat -I openclash_post -p udp ! -d ${fakeip_range6} ${src_ip_v6} --sport ${src_port} ${dscp_ipt} -j ${target} -m comment --comment "${comment}" fi fi fi @@ -1914,7 +1927,7 @@ if [ -n "$FW4" ]; then nft add element inet fw4 localnetwork6 { "$line" } done else - nft 'add element inet fw4 localnetwork6 { ::/128, ::1/128, ::ffff:0:0/96, ::ffff:0:0:0/96, 64:ff9b::/96, 100::/64, 2001::/32, 2001:20::/28, 2001:db8::/32, 2002::/16, fc00::/7, fe80::/10, ff00::/8}' + nft 'add element inet fw4 localnetwork6 { ::/128, ::1/128, ::ffff:0:0/96, ::ffff:0:0:0/96, 64:ff9b::/96, 100::/64, 2001::/32, 2001:20::/28, 2001:db8::/32, 2002::/16, fe80::/10, ff00::/8}' fi if [ -n "$wan_ip6s" ]; then @@ -1927,6 +1940,9 @@ if [ -n "$FW4" ]; then #tcp nft 'add chain inet fw4 openclash_v6' nft 'flush chain inet fw4 openclash_v6' + if [ "$en_mode" = "fake-ip" ]; then + nft add rule inet fw4 openclash_v6 ip6 nexthdr {tcp} ip6 daddr { "$fakeip_range6" } counter redirect to "$proxy_port" + fi nft 'add rule inet fw4 openclash_v6 ip6 daddr @localnetwork6 counter return' nft 'add rule inet fw4 openclash_v6 ct direction reply counter return' nft 'add rule inet fw4 openclash_v6 ip6 daddr @wan_ac_black_ipv6s counter return' @@ -1991,17 +2007,29 @@ if [ -n "$FW4" ]; then #tcp Tproxy && TUN if [ "$ipv6_mode" -ne 1 ] && [ "$ipv6_mode" -ne 3 ]; then if [ "$ipv6_mode" -eq 0 ]; then + if [ "$en_mode" = "fake-ip" ]; then + nft insert rule inet fw4 openclash_mangle_v6 position 0 ip6 nexthdr {tcp} ip6 daddr { "$fakeip_range6" } mark set "$PROXY_FWMARK" tproxy ip6 to :"$tproxy_port" counter accept + fi nft add rule inet fw4 openclash_mangle_v6 ip6 nexthdr {tcp} mark set "$PROXY_FWMARK" tproxy ip6 to :"$tproxy_port" counter accept comment \"OpenClash TCP Tproxy\" else + if [ "$en_mode" = "fake-ip" ]; then + nft insert rule inet fw4 openclash_mangle_v6 position 0 ip6 nexthdr {tcp} ip6 daddr { "$fakeip_range6" } mark set "$PROXY_FWMARK" counter + fi nft add rule inet fw4 openclash_mangle_v6 ip6 nexthdr {tcp} mark set "$PROXY_FWMARK" counter fi fi #udp if [ "$ipv6_mode" -eq 2 ] || [ "$ipv6_mode" -eq 3 ]; then + if [ "$en_mode" = "fake-ip" ]; then + nft insert rule inet fw4 openclash_mangle_v6 position 0 ip6 nexthdr {udp} ip6 daddr { "$fakeip_range6" } mark set "$PROXY_FWMARK" counter + fi nft add rule inet fw4 openclash_mangle_v6 ip6 nexthdr {udp} mark set "$PROXY_FWMARK" counter else if [ "$enable_v6_udp_proxy" -eq 1 ]; then + if [ "$en_mode" = "fake-ip" ]; then + nft insert rule inet fw4 openclash_mangle_v6 position 0 ip6 nexthdr {udp} ip6 daddr { "$fakeip_range6" } mark set "$PROXY_FWMARK" tproxy ip6 to :"$tproxy_port" counter accept + fi nft add rule inet fw4 openclash_mangle_v6 ip6 nexthdr {udp} mark set "$PROXY_FWMARK" tproxy ip6 to :"$tproxy_port" counter accept comment \"OpenClash UDP Tproxy\" fi fi @@ -2014,6 +2042,9 @@ if [ -n "$FW4" ]; then #tcp Redirect Mode nft 'add chain inet fw4 openclash_output_v6' nft 'flush chain inet fw4 openclash_output_v6' + if [ "$en_mode" = "fake-ip" ]; then + nft add rule inet fw4 openclash_output ip6 nexthdr {tcp} ip6 daddr { "$fakeip_range6" } counter redirect to "$proxy_port" + fi nft 'add rule inet fw4 openclash_output_v6 skgid == 65534 counter return' nft 'add rule inet fw4 openclash_output_v6 ip6 daddr @localnetwork6 counter return' nft 'add rule inet fw4 openclash_output_v6 ct direction reply counter return' @@ -2060,12 +2091,21 @@ if [ -n "$FW4" ]; then if ([ "$ipv6_mode" -eq 1 ] && [ "$enable_v6_udp_proxy" -eq 1 ]) || [ "$ipv6_mode" -eq 3 ]; then nft add rule inet fw4 openclash_mangle_output_v6 ip6 nexthdr {udp} mark set "$PROXY_FWMARK" counter + if [ "$en_mode" = "fake-ip" ]; then + nft insert rule inet fw4 openclash_mangle_output_v6 position 0 ip6 nexthdr {udp} ip6 daddr { "$fakeip_range6" } mark set "$PROXY_FWMARK" counter + fi fi if ([ "$ipv6_mode" -eq 0 ] && [ "$enable_v6_udp_proxy" -eq 1 ]) || [ "$ipv6_mode" -eq 2 ]; then nft add rule inet fw4 openclash_mangle_output_v6 ip6 nexthdr {tcp,udp} mark set "$PROXY_FWMARK" counter + if [ "$en_mode" = "fake-ip" ]; then + nft insert rule inet fw4 openclash_mangle_output_v6 position 0 ip6 nexthdr {tcp,udp} ip6 daddr { "$fakeip_range6" } mark set "$PROXY_FWMARK" counter + fi fi if [ "$ipv6_mode" -eq 0 ] && [ "$enable_v6_udp_proxy" -ne 1 ]; then nft add rule inet fw4 openclash_mangle_output_v6 ip6 nexthdr {tcp} mark set "$PROXY_FWMARK" counter + if [ "$en_mode" = "fake-ip" ]; then + nft insert rule inet fw4 openclash_mangle_output_v6 position 0 ip6 nexthdr {tcp} ip6 daddr { "$fakeip_range6" } mark set "$PROXY_FWMARK" counter + fi fi nft 'add rule inet fw4 mangle_output meta nfproto {ipv6} counter jump openclash_mangle_output_v6' fi @@ -2673,7 +2713,6 @@ if [ -z "$FW4" ]; then ipset add localnetwork6 2001:20::/28 ipset add localnetwork6 2001:db8::/32 ipset add localnetwork6 2002::/16 - ipset add localnetwork6 fc00::/7 ipset add localnetwork6 fe80::/10 ipset add localnetwork6 ff00::/8 fi @@ -2688,6 +2727,9 @@ if [ -z "$FW4" ]; then #tcp ip6tables -t nat -N openclash ip6tables -t nat -F openclash + if [ "$en_mode" = "fake-ip" ]; then + ip6tables -t nat -A openclash -p tcp -d "$fakeip_range6" -j REDIRECT --to-ports "$proxy_port" + fi ip6tables -t nat -A openclash -m set --match-set localnetwork6 dst -j RETURN ip6tables -t nat -A openclash -m conntrack --ctdir REPLY -j RETURN ip6tables -t nat -A openclash -m set --match-set wan_ac_black_ipv6s dst -j RETURN @@ -2749,17 +2791,29 @@ if [ -z "$FW4" ]; then #tcp Tproxy && TUN if [ "$ipv6_mode" -ne 1 ] && [ "$ipv6_mode" -ne 3 ]; then if [ "$ipv6_mode" -eq 0 ]; then + if [ "$en_mode" = "fake-ip" ]; then + ip6tables -t mangle -I openclash -p tcp -d "$fakeip_range6" -j TPROXY --on-port "$tproxy_port" --tproxy-mark "$PROXY_FWMARK" + fi ip6tables -t mangle -A openclash -p tcp -m comment --comment "OpenClash TCP Tproxy" -j TPROXY --on-port "$tproxy_port" --tproxy-mark "$PROXY_FWMARK" else + if [ "$en_mode" = "fake-ip" ]; then + ip6tables -t mangle -I openclash -p tcp -d "$fakeip_range6" -j MARK --set-mark "$PROXY_FWMARK" + fi ip6tables -t mangle -A openclash -p tcp -j MARK --set-mark "$PROXY_FWMARK" fi fi #udp if [ "$ipv6_mode" -eq 2 ] || [ "$ipv6_mode" -eq 3 ]; then + if [ "$en_mode" = "fake-ip" ]; then + ip6tables -t mangle -I openclash -p udp -d "$fakeip_range6" -j MARK --set-mark "$PROXY_FWMARK" + fi ip6tables -t mangle -A openclash -p udp -m comment --comment "OpenClash UDP TUN" -j MARK --set-xmark "$PROXY_FWMARK" else if [ "$enable_v6_udp_proxy" -eq 1 ]; then + if [ "$en_mode" = "fake-ip" ]; then + ip6tables -t mangle -I openclash -p udp -d "$fakeip_range6" -j TPROXY --on-port "$tproxy_port" --tproxy-mark "$PROXY_FWMARK" + fi ip6tables -t mangle -A openclash -p udp -m comment --comment "OpenClash UDP Tproxy" -j TPROXY --on-port "$tproxy_port" --tproxy-mark "$PROXY_FWMARK" fi fi @@ -2772,6 +2826,9 @@ if [ -z "$FW4" ]; then #tcp Redirect Mode ip6tables -t nat -N openclash_output ip6tables -t nat -F openclash_output + if [ "$en_mode" = "fake-ip" ]; then + ip6tables -t nat -A openclash_output -p tcp -d "$fakeip_range6" -j REDIRECT --to-ports "$proxy_port" + fi ip6tables -t nat -A openclash_output $owner -j RETURN ip6tables -t nat -A openclash_output -m set --match-set localnetwork6 dst -j RETURN ip6tables -t nat -A openclash_output -m conntrack --ctdir REPLY -j RETURN @@ -2813,12 +2870,22 @@ if [ -z "$FW4" ]; then fi if ([ "$ipv6_mode" -eq 1 ] && [ "$enable_v6_udp_proxy" -eq 1 ]) || [ "$ipv6_mode" -eq 3 ]; then + if [ "$en_mode" = "fake-ip" ]; then + ip6tables -t mangle -I openclash_output -p udp -d "$fakeip_range6" -j MARK --set-xmark "$PROXY_FWMARK" + fi ip6tables -t mangle -A openclash_output -p udp -j MARK --set-xmark "$PROXY_FWMARK" fi if ([ "$ipv6_mode" -eq 0 ] && [ "$enable_v6_udp_proxy" -eq 1 ]) || [ "$ipv6_mode" -eq 2 ]; then + if [ "$en_mode" = "fake-ip" ]; then + ip6tables -t mangle -I openclash_output -p tcp -d "$fakeip_range6" -j MARK --set-xmark "$PROXY_FWMARK" + ip6tables -t mangle -I openclash_output -p udp -d "$fakeip_range6" -j MARK --set-xmark "$PROXY_FWMARK" + fi ip6tables -t mangle -A openclash_output -j MARK --set-xmark "$PROXY_FWMARK" fi if [ "$ipv6_mode" -eq 0 ] && [ "$enable_v6_udp_proxy" -ne 1 ]; then + if [ "$en_mode" = "fake-ip" ]; then + ip6tables -t mangle -I openclash_output -p tcp -d "$fakeip_range6" -j MARK --set-xmark "$PROXY_FWMARK" + fi ip6tables -t mangle -A openclash_output -p tcp -j MARK --set-xmark "$PROXY_FWMARK" fi ip6tables -t mangle -A OUTPUT -j openclash_output @@ -3074,6 +3141,7 @@ EOF CUSTOM_FAKEIP_FILTER:int_bool \ CUSTOM_FAKEIP_FILTER_MODE:string \ FAKEIP_RANGE:string \ + FAKEIP_RANGE6:string \ ENABLE_RESPECT_RULES:int_bool \ CUSTOM_NAME_POLICY:int_bool \ CUSTOM_HOST:int_bool \ @@ -3425,6 +3493,13 @@ get_config() fi [ -z "$fakeip_range" ] && fakeip_range="198.18.0.1/16" + if [ "$(uci_get_config "fakeip_range6")" == "0" ]; then + fakeip_range6=$(ruby_read "$CONFIG_FILE" "['dns']['fake-ip-range6']") + else + fakeip_range6=$(uci_get_config "fakeip_range6") + fi + [ -z "$fakeip_range6" ] && fakeip_range6="fdfe:dcba:9876::1/64" + lan_interface_name=$(uci_get_config "lan_interface_name" || echo 0) if [ "$lan_interface_name" = "0" ]; then lan_ip=$(uci -q get network.lan.ipaddr 2>/dev/null | awk -F '/' '{print $1}' 2>/dev/null | tr -d '\n' || ip address show $(uci -q -p /tmp/state get network.lan.ifname || uci -q -p /tmp/state get network.lan.device) | grep -w "inet" 2>/dev/null |grep -Eo 'inet [0-9\.]+' | awk '{print $2}' | head -1 | tr -d '\n' || ip addr show 2>/dev/null | grep -w 'inet' | grep 'global' | grep 'brd' | grep -Eo 'inet [0-9\.]+' | awk '{print $2}' | head -n 1 | tr -d '\n') @@ -3520,7 +3595,7 @@ start_service() "$find_process_mode" "$fakeip_range" "$global_client_fingerprint" "$ipv6_mode" "$stack_type_v6" "$enable_unified_delay"\ "$enable_respect_rules" "$custom_fakeip_filter_mode" "$iptables_compat" "$disable_quic_go_gso" "$cors_allow"\ "$geo_custom_url" "$geoip_custom_url" "$geosite_custom_url" "$geoasn_custom_url"\ - "$lgbm_auto_update" "$lgbm_custom_url" "$lgbm_update_interval" "$smart_collect" "$smart_collect_size" + "$lgbm_auto_update" "$lgbm_custom_url" "$lgbm_update_interval" "$smart_collect" "$smart_collect_size" "$fakeip_range6" /usr/share/openclash/yml_rules_change.sh \ "$rule_source" "$enable_custom_clash_rules" "$TMP_CONFIG_FILE"\ @@ -3704,7 +3779,6 @@ reload_service() fi LOG_OUT "【${CUR_RELOAD_NUM}/$MAX_RELOAD】Reload OpenClash Firewall Rules..." revert_firewall - revert_dnsmasq do_run_mode get_config check_core_status & @@ -3713,7 +3787,6 @@ reload_service() if pidof clash >/dev/null && [ "$enable" == "1" ] && [ "$1" == "manual" ]; then LOG_OUT "Manually Reload Firewall Rules..." revert_firewall - revert_dnsmasq do_run_mode get_config check_core_status & diff --git a/small/luci-app-openclash/root/etc/openclash/custom/openclash_custom_localnetwork_ipv6.list b/small/luci-app-openclash/root/etc/openclash/custom/openclash_custom_localnetwork_ipv6.list index 6ac03da58c..d59554faba 100644 --- a/small/luci-app-openclash/root/etc/openclash/custom/openclash_custom_localnetwork_ipv6.list +++ b/small/luci-app-openclash/root/etc/openclash/custom/openclash_custom_localnetwork_ipv6.list @@ -8,6 +8,5 @@ 2001:20::/28 2001:db8::/32 2002::/16 -fc00::/7 fe80::/10 ff00::/8 \ No newline at end of file diff --git a/small/luci-app-openclash/root/usr/share/openclash/yml_change.sh b/small/luci-app-openclash/root/usr/share/openclash/yml_change.sh index c2e7008ccb..d542f59fed 100644 --- a/small/luci-app-openclash/root/usr/share/openclash/yml_change.sh +++ b/small/luci-app-openclash/root/usr/share/openclash/yml_change.sh @@ -349,6 +349,7 @@ lgbm_custom_url = '${43}' lgbm_update_interval = '${44}' smart_collect = '${45}' == '1' smart_collect_size = '${46}' +fake_ip_range6 = '${47}' enable_custom_dns = '$enable_custom_dns' == '1' append_wan_dns = '$append_wan_dns' == '1' @@ -431,6 +432,9 @@ threads << Thread.new do else Value['dns']['enhanced-mode'] = 'fake-ip' Value['dns']['fake-ip-range'] = fake_ip_range + if Value['dns']['ipv6'] + Value['dns']['fake-ip-range6'] = fake_ip_range6 + end end Value['dns']['listen'] = '0.0.0.0:' + dns_listen_port Value['dns']['respect-rules'] = true if respect_rules @@ -680,6 +684,11 @@ begin Value['dns']['fallback'] ||= ['https://dns.cloudflare.com/dns-query', 'https://dns.google/dns-query'] end + if Value['dns'].key?('default-nameserver') && Value['dns']['default-nameserver'].to_a.empty? + YAML.LOG('Tip: Detected That The default-nameserver DNS Option Has No Server Set, Starting To Complete...') + Value['dns']['default-nameserver'] = ['114.114.114.114', '119.29.29.29', '8.8.8.8', '1.1.1.1'] + end + # proxy-server-nameserver local_exclude = (%x{ls -l /sys/class/net/ |awk '{print \$9}' 2>&1}.each_line.map(&:strip) + ['h3=', 'skip-cert-verify=', 'ecs=', 'ecs-override='] + ['utun', 'tailscale0', 'docker0', 'tun163', 'br-lan', 'mihomo']).uniq.join('|') proxied_server_reg = /^[^#&]+#(?:(?:#{local_exclude})[^&]*&)*(?:(?!(?:#{local_exclude}))[^&]+)/ diff --git a/small/luci-app-passwall/Makefile b/small/luci-app-passwall/Makefile index ff2afc9749..31b3edbfd4 100644 --- a/small/luci-app-passwall/Makefile +++ b/small/luci-app-passwall/Makefile @@ -6,7 +6,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-passwall -PKG_VERSION:=25.9.23 +PKG_VERSION:=25.11.1 PKG_RELEASE:=1 PKG_PO_VERSION:=$(PKG_VERSION) diff --git a/small/luci-app-passwall/root/usr/share/passwall/rules/chnlist b/small/luci-app-passwall/root/usr/share/passwall/rules/chnlist index 9dbd34378d..d0d15bf30e 100644 --- a/small/luci-app-passwall/root/usr/share/passwall/rules/chnlist +++ b/small/luci-app-passwall/root/usr/share/passwall/rules/chnlist @@ -25,13 +25,11 @@ 001pp.com 001pt.com 001sj.net -001tech.com 001tudou.com 001u.com 001wifi.com 001win5.cc 002049.com -00222.net 00257.com 002574.com 0033.com @@ -103,7 +101,6 @@ 010dsmzyy.com 010fang.net 010gaokao.com -010gkb.com 010huaer.com 010huashi.com 010jianzhan.com @@ -123,7 +120,6 @@ 0138.com 014.cc 01401.com -01415.net 014929.com 016sf.com 01bzw.us @@ -184,7 +180,6 @@ 021dx.com 021dzjx.com 021east.com -021easystudy.com 021gjhb.com 021huamei.com 021huaying.com @@ -338,6 +333,7 @@ 030mall.com 0310it.com 0311.cc +031130.xyz 03118888.com 0311hd.com 0311led.com @@ -424,7 +420,6 @@ 0510gtgc.com 0510syedu.com 0510zyw.com -0512wm.com 0513.net 0513.org 0513011.com @@ -454,7 +449,6 @@ 0523tx.net 0523zp.com 0523zz.com -05245353.com 05273.com 0527zp.com 0527zz.com @@ -474,7 +468,6 @@ 05356.com 0535cp.com 0535you.com -05367.net 0536job.net 0536qz.com 0536weixin.com @@ -727,14 +720,12 @@ 0771cts.com 0771cyts.com 0771fukang.com -0771mr.com 0771rc.com 0772fang.com 0772gcw.com 0772job.com 0772lou.com 07743988888.com -0774sg.com 07752267777.com 07754255555.com 0775fcw.com @@ -873,7 +864,6 @@ 09shijue.com 0a2d.com 0baiwen.com -0bug.org 0car0.com 0cname.com 0d.work @@ -885,7 +875,6 @@ 0duxs.com 0e91wut86c.com 0easy.com -0eqbeb.com 0fw.net 0g1s.com 0gouche.com @@ -899,6 +888,7 @@ 0ms.one 0np1ydukvn.com 0nu2yo.com +0olut8.com 0rl.cc 0rz.ltd 0s73o26p67.com @@ -946,7 +936,6 @@ 1000360.com 10006.info 1000eb.com -1000eb.net 1000fun.com 1000my.com 1000phone.com @@ -1075,6 +1064,7 @@ 10100000.com 10101111.com 10101111cdn.com +1010gamer.com 1010jiajiao.com 1010jz.com 1010pic.com @@ -1238,7 +1228,6 @@ 115cloud.com 115cloud.net 115img.com -115jk.com 115meta.com 115seo.com 115vod.com @@ -1265,7 +1254,6 @@ 118inns.com 118jm.com 118pan.com -118study.com 118ttc.com 118wa.com 1190119.com @@ -1297,7 +1285,6 @@ 11rain.com 11space.com 11sun.com -11td123.com 11wow.com 11xotn7p.com 11yinyuan.com @@ -1337,6 +1324,7 @@ 121588.com 121ask.com 121down.com +121ghs.com 121mai.com 121mu.com 121wty.com @@ -1364,6 +1352,7 @@ 123242.com 123245.com 123254.com +123294.com 123295.com 123326.com 12333.com @@ -1499,7 +1488,6 @@ 12h5.com 12ha.com 12jn.com -12ka.cc 12kanshu.com 12ketang.com 12ky.com @@ -1645,7 +1633,6 @@ 14944.net 1495c8.com 14hj.com -14kjin.com 14play.net 14xd.com 14ygame.com @@ -1685,10 +1672,8 @@ 157110.com 157300.net 157seo.com -15803.com 158566.com 1588.tv -158999.org 158c.com 158jixie.com 158wf.com @@ -1725,7 +1710,6 @@ 16177.net 1617k.com 1618.com -1624.win 1626.com 163.cm 163.com @@ -1840,7 +1824,6 @@ 168mlj.com 168moliao.com 168rcw.com -168shoubiao.com 168tea.com 168tex.com 168trucker.com @@ -1970,7 +1953,6 @@ 1766bbs.com 17673.com 1768.com -176mcng.xyz 176quan.com 176web.net 1773.com @@ -2088,6 +2070,7 @@ 17lht.com 17liuxue.com 17ll.com +17look.com 17m3.com 17meb.com 17meiwen.com @@ -2181,7 +2164,6 @@ 17yaoqu.com 17ym.org 17you.com -17yucai.com 17yund.com 17yunlian.net 17yunzhijiao.com @@ -2279,7 +2261,6 @@ 189works.com 189young.com 18art.art -18art.com 18av.com 18dao.info 18daxue.com @@ -2348,7 +2329,6 @@ 1977088.com 197784.com 197854.com -197c.com 198358.com 19840423.com 198434.com @@ -2402,6 +2382,7 @@ 1b23.com 1blx503444.com 1boshu1.com +1browser.net 1bus.net 1c0d1n1f0l1y.cc 1c38.com @@ -2423,14 +2404,12 @@ 1der-ad.com 1diaocha.com 1diary.me -1ding.xyz 1domedia.com 1drv.ws 1dw9r53h79.com 1f11.com 1fangchan.com 1fatong.com -1fengxin.xyz 1fenlei.com 1flash.net 1foo.com @@ -2478,7 +2457,6 @@ 1kx.me 1kxun.com 1kyx.com -1l0xphj.xyz 1law.vip 1liantu.com 1lou.com @@ -2508,7 +2486,6 @@ 1nfinite.ai 1nmob.com 1nongjing.com -1nsou.com 1nyz.com 1o1o.xyz 1paibao.net @@ -2586,12 +2563,10 @@ 1ziyou.com 1zj.com 1zjob.com -1zr.com 1zu.com 2-33.com 2-class.com 2-mm.net -2.biz 20001104.com 2000200.com 2000211.com @@ -2621,7 +2596,6 @@ 2014.mobi 20150.net 201551.com -2015law.com 2016os.com 2016ruanwen.com 2016win10.com @@ -2656,12 +2630,14 @@ 20g0.com 20images10.com 20images21.com +20images25.com 20images7.com 20ju.com 20kf.com 20on.com 20planet.com 20qu.com +20xs.org 20xue.com 20xy.cc 20yy.com @@ -2798,7 +2774,6 @@ 21yibiao.com 21yq.com 21ytv.com -21yunwei.com 21zbs.com 22.com 220840.com @@ -2869,7 +2844,6 @@ 22tj.com 22vape.com 22vd.com -2300sjz.com 230890.com 231083.com 231122.com @@ -2911,7 +2885,6 @@ 234du.com 234f.com 234fang.com -2356.com 236306.com 236400.com 236501.xyz @@ -2919,7 +2892,6 @@ 23673.com 236z.com 2375sj.com -237y.com 238000.net 238090.com 239300.net @@ -2940,7 +2912,6 @@ 23qcw.com 23sk.com 23txt.com -23us.cc 23us.so 23us23us.com 23uswx.com @@ -2964,7 +2935,6 @@ 24biao.com 24dq.com 24geban.com -24gowatch.com 24haowan.com 24hmb.com 24jiankong.com @@ -3025,7 +2995,6 @@ 25xg.com 25xianbao.com 25xm.com -25xt.com 25xz.com 25yi.com 25yz.com @@ -3055,6 +3024,7 @@ 26595.com 265g.com 265h.com +265xh.com 266.com 266.la 266wan.com @@ -3098,15 +3068,12 @@ 27daili.com 27dt.com 27l.com -27sd.app 27tj.com 27ws.com 27xuexiao.com 28.com 281010.com -28123.com 28126.cc -281579.com 281669.vip 281826.vip 2827.com @@ -3143,7 +3110,6 @@ 292775.com 29293.com 293.net -294041.com 29592.net 296u.com 29797.com @@ -3160,14 +3126,12 @@ 2apzhfa.xyz 2av7.com 2b26.com -2b8d3zt.xyz 2bkw.com 2broear.com 2bulu.com 2bzq.com 2caipiao.com 2ccc.com -2ccm.net 2chcn.com 2cloo.com 2cname.com @@ -3181,6 +3145,7 @@ 2cyzx.com 2d3d5d.net 2danji.com +2dcode.biz 2df.me 2dfire.com 2dfire.info @@ -3191,11 +3156,9 @@ 2e56m039tk.com 2ed5d.com 2eka.cloud -2emlfo.com 2f.com 2fc5.com 2fz1.com -2fzb.com 2gdt.com 2gei.com 2haha.com @@ -3255,9 +3218,7 @@ 2tt.net 2tubaobao.xyz 2tx.com -2ua2xqu.xyz 2umj.com -2urs.com 2ut7.com 2v8d.com 2v9t3xf9z2.com @@ -3385,18 +3346,19 @@ 31games.com 31gamestudio.com 31huiyi.com +31i9ti.com 31idc.com 31jf.com 31jgj.com 31knit.com 31m49.com +31maque.com 31meijia.com 31ml.com 31mold.com 31ns.info 31ppt.com 31pump.com -31rc.com 31rent.com 31sf.com 31travel.com @@ -3405,7 +3367,6 @@ 31xs.net 31yarn.com 31yr.com -31zhi5f.xyz 320921.com 320g.com 321.net @@ -3551,7 +3512,6 @@ 342jinbo.com 34347.com 343480.com -34394.vip 345123.xyz 3454.com 3456-1.vip @@ -3617,14 +3577,12 @@ 35lz.com 35nic.com 35pic.com -35q.com 35sf.com 35xss.com 35zww.com 36-7.com 36.cc 36.la -360-bo.com 360-g.net 360-game.net 360-jr.com @@ -3637,7 +3595,6 @@ 360424.com 360500.com 3608.com -36099.com 360abc.com 360adlab.com 360adlab.net @@ -3817,6 +3774,7 @@ 362.cc 36267.vip 363.com +363.hk 363.net 363120.com 363210.com @@ -3827,6 +3785,7 @@ 364000.com 364365889.com 365.com +365.hk 36500.net 365128.com 365135.com @@ -3935,11 +3894,9 @@ 366ec.net 366kmpf.com 366translation.com -366xsw.com 36706.com 3673.com 367edu.com -367w37c.xyz 36840.com 36885.vip 3688km.com @@ -3954,7 +3911,6 @@ 3699wan.com 369cha.com 369hui.com -369y.cc 36aw.com 36dianping.com 36dj.com @@ -4051,7 +4007,6 @@ 388155.com 388g.com 3892222.com -3899.net 38999h.vip 38blog.com 38ejed.com @@ -4060,7 +4015,6 @@ 38hot.net 38hp.com 38hzt.com -38ljkoi.xyz 38mhw.com 38xs.com 38zp.com @@ -4128,7 +4082,6 @@ 3cjob.com 3conline.com 3cpp.org -3cqhv.com 3ct.cc 3d-chips.com 3d-gold.com @@ -4168,7 +4121,6 @@ 3dmxku.com 3dnew.com 3doe.com -3dqvcli.xyz 3drrr.com 3dsdce.com 3dsjw.com @@ -4320,7 +4272,7 @@ 3vjia.com 3vjuyuan.com 3vsheji.com -3wads.com +3vyd.com 3wcoffee.com 3wen.com 3wfocus.com @@ -4334,7 +4286,6 @@ 3xiaoniao.com 3xiazai.com 3xinhome.com -3xlady.com 3xyg.com 3y7h.com 3yakj.com @@ -4348,8 +4299,8 @@ 3zhijk.com 3zhm.com 3zmuseum.com +3zonegame.com 4-xiang.com -4.biz 4.cm 4.plus 400-lighting.com @@ -4490,7 +4441,6 @@ 42xz.com 43104.com 4311.com -431300.com 432520.com 435000.com 435200.com @@ -4609,7 +4559,6 @@ 47oupy0408.com 47rq.com 47zu.com -48.com 4805555.com 48455m.com 4846.com @@ -4656,7 +4605,6 @@ 4ci.cc 4cm.cc 4cnzz.com -4cola.com 4cun.com 4dai.com 4db.com @@ -4679,11 +4627,9 @@ 4hgame.com 4hii.net 4hmodel.com -4hou.com 4hpy.com 4inlook.com 4jplus.com -4juo2.com 4k123.com 4kbizhi.com 4kdesk.com @@ -4698,7 +4644,6 @@ 4pis.com 4pnt.com 4portun.com -4puio4.com 4px.com 4pyun.com 4q5q.com @@ -4908,12 +4853,10 @@ 51b2b.com 51babybuy.com 51baigong.com -51bale.com 51banban.com 51banka.net 51baocan.com 51baoshui.com -51baoxiu.com 51bbcy.com 51bbmm.com 51bbo.com @@ -4940,7 +4883,6 @@ 51callu.net 51camel.com 51caocao.net -51cc.net 51ccd.com 51ccdn.com 51cck.com @@ -4999,7 +4941,6 @@ 51dingxiao.com 51ditu.com 51diyring.com -51djqu.com 51dmq.com 51dns.com 51docs.com @@ -5031,7 +4972,6 @@ 51eshop.com 51etong.com 51etr.com -51eyun.com 51f.com 51facai.com 51fangan.com @@ -5116,7 +5056,6 @@ 51huoyou.com 51hwzy.com 51ibm.com -51ican.com 51idc.com 51ideal.com 51ifind.com @@ -5191,7 +5130,6 @@ 51lingji.com 51liucheng.com 51losangeles.com -51lrc.com 51lstt.com 51lucy.com 51lxrc.com @@ -5213,7 +5151,6 @@ 51mingyan.net 51minsheng.com 51miz.com -51mkf.com 51mmt.com 51mnq.com 51mo.com @@ -5250,12 +5187,12 @@ 51ping.com 51pinwei.com 51pla.com -51play.com 51pocket.com 51pocket.net 51poll.com 51pos.com 51pot.com +51poweron.com 51pptmoban.com 51psj.com 51puer.com @@ -5273,7 +5210,6 @@ 51qtg.com 51qub.com 51qudao888.com -51qudong.net 51qumi.com 51quzhe.com 51race.com @@ -5304,7 +5240,6 @@ 51select.com 51self.com 51selling.com -51serive.com 51sgg.cc 51share.net 51shashiji.com @@ -5425,7 +5360,6 @@ 51xcrc.com 51xiancheng.com 51xianwan.com -51xiaohua.com 51xiaolu.com 51xingjy.com 51xinhu.com @@ -5439,10 +5373,8 @@ 51xuediannao.com 51xuetang.com 51xuetongxin.com -51xuewen.com 51xuexiaoyi.com 51xxsp.com -51xxziyuan.com 51y5.com 51yabei.com 51yajk.com @@ -5507,7 +5439,6 @@ 52-ic.com 520.com 520.net -520038.com 5200tv.com 520101.com 520520520520520.com @@ -5671,7 +5602,6 @@ 52gongju.net 52grz.com 52guixi.com -52guiyang.com 52guzhuang.com 52gvim.com 52hardware.com @@ -5827,7 +5757,6 @@ 52xyz.com 52xz.com 52yawa.com -52ybcj.com 52yh.com 52yifei.com 52yitian.com @@ -5866,6 +5795,7 @@ 5338.org 533y.com 53431.com +5345.com 53471.com 535fs.com 535gf2df3245.com @@ -5875,13 +5805,14 @@ 5368111.com 537300.com 53797.vip -5379yx.com 537a.com 537images13.com 537images20.com 537images22.com 537images41.com 537images42.com +537images45.com +537images47.com 538618.com 53920.net 5395.com @@ -5900,7 +5831,6 @@ 53shop.com 53shubiao.com 53site.com -53trade.com 53wan.com 53wy.com 53xjd.com @@ -5957,7 +5887,6 @@ 5510928.com 551144.com 55188.com -5523.com 5525game.com 553356.com 55344.com @@ -5967,6 +5896,7 @@ 5551557.com 5552200.com 55552121.com +55555.ink 55555.io 55555432.com 55555558.com @@ -6016,6 +5946,7 @@ 55tour.com 55tuan.com 55xw.net +55y.cc 55y5.com 55zhoucheng.com 55zs.com @@ -6026,7 +5957,6 @@ 560wf.com 5611.com 56114.com -561218.com 56135.com 56156.com 5618.co @@ -6103,7 +6033,6 @@ 56zhibo.com 57.net 57023.com -5710266.com 571400.net 571xz.com 57273vy9x0.com @@ -6151,7 +6080,6 @@ 580jz.net 580k.com 580tequan.com -58161.com 58188.com 58199.com 582116.com @@ -6175,7 +6103,6 @@ 588tao.com 588z.com 58921.com -589465113.com 5898yun.com 58abb.com 58antenna.com @@ -6188,7 +6115,6 @@ 58cloud.com 58coin.com 58corp.com -58cyjm.com 58dadi.com 58daojia.com 58demo.com @@ -6226,8 +6152,6 @@ 58qz.com 58shangban.com 58supin.com -58task.com -58touxiang.com 58trz.com 58ubk.com 58uxd.com @@ -6267,7 +6191,6 @@ 591moto.net 591mrzx.com 591syd.com -591wed.com 591wsh.com 591wy.com 591yhw.com @@ -6309,7 +6232,6 @@ 59wanmei.com 59wj.com 59yx.com -5a5x.com 5a8.org 5aaa.com 5acbd.com @@ -6420,7 +6342,6 @@ 5ilrc.com 5iluying.com 5imeishi.com -5imoban.net 5imomo.com 5imusic.com 5imx.com @@ -6471,7 +6392,6 @@ 5ooq.com 5opzl.com 5opzl.net -5p8p3p.com 5pao.com 5pb.net 5pk.com @@ -6546,9 +6466,7 @@ 5zhr.com 5zls.com 5zw.com -5zy.net 6-china.com -6.biz 6.mms.vlog.xuite.net 600064.com 600083.com @@ -6583,7 +6501,6 @@ 605zy.co 60606161.com 6066888.com -607.tv 6073168.com 607images15.com 607images16.com @@ -6592,7 +6509,6 @@ 607images40.com 608.vip 6080d.com -6090400.com 60986.com 60dj.com 60kan.com @@ -6602,7 +6518,6 @@ 60qc.com 60wr.com 60yp.com -60yu.com 61.com 610115.com 610213.net @@ -6613,7 +6528,6 @@ 611res.com 612345.com 612459.com -6137.net 6153.cc 61611.net 6163.com @@ -6818,10 +6732,10 @@ 66call.com 66d6.com 66ds.net -66f.com 66good.com 66han.com 66huigo.com +66ika.com 66in.net 66jiedai.com 66l.cc @@ -6920,7 +6834,6 @@ 68china.net 68design.net 68ecshop.com -68eg.com 68gainian.com 68h5.com 68hanchen.com @@ -6936,7 +6849,6 @@ 68web.net 68websoft.com 68zhan.net -69.com 69090.com 69260.com 692657.com @@ -7010,7 +6922,6 @@ 6ict.com 6ie6.com 6ifang.com -6ivrkvu.xyz 6juzi.com 6k11.com 6k6g.com @@ -7054,12 +6965,14 @@ 6thhosp.com 6tiantian.com 6tie.com +6tktrd.com 6tt.com 6tu.com 6twrte12ft.com 6u9muvn94m.com 6uudy.com 6v.com +6v520.net 6v6.work 6vdyg.com 6vdyy.com @@ -7092,8 +7005,8 @@ 7-mi.net 7-vk.com 7-wx.com -7.biz 70.cc +70.net 700618.com 70098.com 700chat.com @@ -7150,7 +7063,6 @@ 71908.com 7192.com 719400.com -719c.com 71acg.com 71acg.net 71baomu.com @@ -7213,7 +7125,6 @@ 72h6hn4r3e.com 72home.com 72la.com -72link.com 72max.com 72qq.com 72r.net @@ -7263,7 +7174,6 @@ 75111.com 75111.net 75184.com -752562.com 75271.com 7534w8m16e.com 75367.com @@ -7282,7 +7192,6 @@ 75ww.com 75xn.com 76065.com -76107448.com 7618.com 761a.com 7633sqw.com @@ -7326,7 +7235,6 @@ 7724.com 7724yx.com 7725.com -7729.com 772it.com 77304y.com 77313.com @@ -7357,7 +7265,6 @@ 7788.com 7788js.com 7788sky.com -7788xj.com 7789.com 778buy.com 7790.com @@ -7392,7 +7299,6 @@ 77socks.com 77tianqi.com 77vcd.com -77wenku.com 77xmd.com 77yx.com 77zhangh.com @@ -7404,6 +7310,7 @@ 78302.com 78654321.com 7881.com +7888.com 788899.com 788v.com 7890.net @@ -7430,8 +7337,6 @@ 78tp.com 78v.com 78yx.net -79-79.com -79.com 793360.com 793688.com 79432.com @@ -7487,6 +7392,7 @@ 7fresh.com 7glb.com 7gongzhu.net +7grandcross.com 7gugu.com 7gz.com 7h1fg6b6kd.com @@ -7672,7 +7578,6 @@ 8090vision.com 8090yx.com 8090yxs.com -809636.com 80982.org 80baicai.biz 80bi.com @@ -7792,13 +7697,14 @@ 835444.cc 835images21.com 835images28.com -835images3.com 835images32.com 835images38.com 835images48.com 835images55.com -835images6.com 835images61.com +835images73.com +835images76.com +835images83.com 83661111.net 83666.com 83753751.com @@ -7846,7 +7752,6 @@ 853lab.com 854255.com 8558.org -855fff.com 85657777.com 85679999.com 857yx.com @@ -7854,12 +7759,10 @@ 85814.com 85880234.com 858game.com -859680.com 85jk.com 85kf.com 85wp.com 85xt.com -86-755.com 86-import.com 860029.com 86030.bid @@ -7892,7 +7795,6 @@ 869v.com 86amsdy.com 86bus.com -86clouds.com 86crk.com 86ditu.com 86dk.com @@ -8040,7 +7942,6 @@ 88966.net 8899.net 88995799.com -88999.com 8899yyy.vip 889mi.com 88bank.com @@ -8053,8 +7954,8 @@ 88h3.com 88hom.com 88ht.com -88hu.com 88icon.com +88ipa.com 88j84.com 88k.site 88koo.com @@ -8112,7 +8013,6 @@ 8btm.com 8cname.com 8cnet.com -8ddao.com 8dei.com 8dexpress.com 8dn.com @@ -8155,7 +8055,6 @@ 8kzw.com 8l8e.com 8lag.com -8letian.com 8lhx.com 8liuxing.com 8lj.cc @@ -8181,7 +8080,6 @@ 8pu.com 8qwe5.com 8qzy.com -8r9t8.com 8rlq38736p.com 8rn4u.com 8s123.com @@ -8199,14 +8097,12 @@ 8ug.icu 8uid.com 8uyx.com -8vx3zks.xyz 8wan.com 8win.com 8win.net 8wiu.com 8wq.com 8wss.com -8wvlk.com 8wym.com 8x6x.com 8xs.org @@ -8223,13 +8119,13 @@ 8zy.com 9-xin.com 9-zhuce.com -9.biz 90.cc 900.la 900.vc 9000wy.com 900112.com 900501.xyz +900cha.com 900php.com 900ppt.com 900yi.com @@ -8340,7 +8236,6 @@ 91dbq.com 91ddcc.com 91ddedu.com -91ddsc.com 91dict.com 91dnso.com 91doujin.com @@ -8351,12 +8246,12 @@ 91es.com 91exam.org 91exiu.com +91facts.com 91fangan.com 91fifa.com 91fyt.com 91game.com 91goodschool.com -91guzhi.com 91haigui.com 91haiju.com 91haoka.com @@ -8520,7 +8415,6 @@ 927game.com 927jx.com 928.sale -928957.com 928vbi.com 92913.com 929825.com @@ -8576,6 +8470,7 @@ 93135.com 931931jh.com 933.moe +933332.xyz 934dsw.com 934hd.com 93636.com @@ -8616,7 +8511,6 @@ 941adu.com 941gb.com 942mc.com -942ss.com 944.com 94445.com 9453job.com @@ -8723,7 +8617,6 @@ 95links.com 95ns.net 95px.com -95s8tke.xyz 95shubao.info 95to59.com 95xiu.com @@ -8774,7 +8667,6 @@ 9666sr.com 966799.cc 966zlnfjuza4oloh2bk.app -96711jmbm.com 967680.com 96804.com 96811.com @@ -8791,7 +8683,6 @@ 969368.com 96966.com 969g.com -96bbs.com 96caifu.com 96dp.com 96f2d.com @@ -8865,7 +8756,6 @@ 985.so 985211.link 985900.com -985923.com 985dh.com 985hezi.com 985ks.com @@ -8885,13 +8775,10 @@ 988sl.com 9891.com 989198.com -98a.ink 98cloud.com 98du.com 98ep.com 98eye.com -98fp.com -98jx.com 98k4.com 98kpm.com 98lm.com @@ -8912,7 +8799,6 @@ 98znz.com 98zw.com 99.com -99069292.com 99114.com 99118.com 9911yx.com @@ -8923,7 +8809,6 @@ 991kang.com 991quka.com 9928.tv -993207.com 9935china-air.com 9939.com 993937.com @@ -8937,6 +8822,7 @@ 995120.net 99520.love 996.com +996404.xyz 9965dns.com 9966.com 9966.org @@ -9012,7 +8898,6 @@ 99haoling.com 99hdf.com 99hkjf.com -99hots.com 99huodong.xyz 99ielts.com 99inf.com @@ -9126,7 +9011,6 @@ 9ghao.com 9gt.net 9he.com -9hgame.com 9hier.com 9host.org 9hou.com @@ -9210,13 +9094,11 @@ 9tong.com 9tonglian.com 9tov.com -9u.net 9u8u.com 9upk.com 9vf.com 9w1an.com 9w9.com -9wan8.com 9wee.net 9wuli.com 9wwx.com @@ -9278,11 +9160,9 @@ a2048.com a21fs.com a21yishion.com a2dongman.com -a4enwyh.xyz a4s6.com a4size.net a5.net -a5100.com a5399.com a5600.com a5b.cc @@ -9301,7 +9181,6 @@ a7nz4.us a8.com a8f947.com a8tg.com -a8tiyu.com a8u.net a8z8.com a9188.com @@ -9309,7 +9188,6 @@ a963.com a9market.com a9vg.com a9x9.com -aa-ab.com aa-lsk.com aa152.com aa360.net @@ -9420,7 +9298,6 @@ abcydia.com abcys8.com abd007.com abddn.com -abdstem.com abe-sz.com abe-tech.com abedu.net @@ -9460,7 +9337,6 @@ aboveyunbo.com abox.plus abpuvw.com abreader.com -abs123.asia abslw.com absoloop.com absst.com @@ -9492,11 +9368,17 @@ accdisplay.com accelink.com accessads.net accessgood.com +accessibility-union.com +accessibility-union.net +accessibility-union.org accessibilityunion.com +accessibilityunion.net accessibilityunion.org accessoft.com accesspath.com accgame.com +acclb.com +acclb.net acconsys.com accopower.com account.htcvive.com @@ -9508,6 +9390,7 @@ accu.cc accuramed.com accurate-china.com accurate520.com +accxiaoheihe.com acdianyuan.com ace-info.com ace-pow.com @@ -9568,7 +9451,6 @@ acirclea.com acirno.com acjw.net ackjled.com -aclife.net acloudbaas.com acloudrender.com acm.org @@ -9607,6 +9489,7 @@ actime.net actions-semi.com actionsky.com activation-gp.com +activation-v2.kaspersky.com activeclub.net activepower.net activity-dy.com @@ -9666,6 +9549,7 @@ addinghome.com addnewer.com addog.vip addoom.com +addpcn.com addpv.com addww.com ade8.com @@ -9746,12 +9630,14 @@ adpchina.com adpfm513.com adplusx.com adpsh.com +adqtt.net adsalecdn.com adsalecprj.com adsame.com adscover.com adsctl.com adsfancy.com +adshonor.net adsjdy.com adslr.com adsmogo.com @@ -9806,7 +9692,6 @@ adzhp.cc adzhp.site adznb.com adzshd.com -ae-people.com ae1234.com ae256.com ae60.com @@ -9853,7 +9738,6 @@ aesdrink.com aesoftland.com aestheticbutler.xyz aesucai.com -aet21.com aevit.xyz aexpec.com af-south-1.myhuaweicloud.com @@ -9866,6 +9750,7 @@ afanti100.com afarway.com afca-asia.org afcec.com +afcfsf.xyz afcs.dell.com afdian.com afdian.net @@ -9873,6 +9758,7 @@ afdiancdn.com afdsc.com afdvr.cc afdvr.com +afeica.com afengblog.com afengsoft.com afenxi.com @@ -9913,7 +9799,6 @@ agedm.app agefans.com agel-tech.com agelocer.com -agen2000.net agenge.com agenow.com agentyun.com @@ -9931,6 +9816,7 @@ agmos012.com agoow.com agora.io agoralab.co +agpolis.com agriotcloud.com agrittex.com agrochemshow.com @@ -9953,7 +9839,6 @@ ah12333.com ah163.com ah163.net ah3c.com -ah5166.com ah788.com ah7907.com ah8.cc @@ -10033,7 +9918,6 @@ ahhdb.com ahhhjx.com ahhkedu.com ahhngsjt.com -ahhnjy.net ahhnsz.net ahhome.com ahhouse.com @@ -10090,7 +9974,6 @@ ahmky.com ahmwgroup.com ahnanfang.com ahnec.com -ahnjio.xyz ahnluh.com ahnmc.com ahno-tool.com @@ -10187,6 +10070,7 @@ ahzxy.com ahzyw.com ai-abc.com ai-anchor.com +ai-augmented.com ai-cai.com ai-cctv.com ai-classes.com @@ -10205,7 +10089,6 @@ ai.cc ai012.com ai0513.com ai257.com -ai2news.com ai572.com ai7.com ai7.org @@ -10301,7 +10184,6 @@ aidcstore.net aideep.com aidianji.net aidiao.com -aidigger.com aidigong.com aidimedia.com aidingmao.com @@ -10377,6 +10259,7 @@ aigc-cloud.com aigc369.com aigcarena.com aigccdn.com +aigclsp.com aigcxm.com aige010.com aigei.com @@ -10429,7 +10312,6 @@ aiit.me aiitec.com aiiup.com aiizen.net -aijfc.com aiji66.com aijiajiankang.com aijianji.com @@ -10512,7 +10394,6 @@ aimsen.com aimu-app.com ainas.cc ainiapp.com -ainingjiaoyu.com ainirobot.com ainiseo.com ainiu.net @@ -10635,6 +10516,7 @@ aishangyangyu.com aisharenet.com aishengji.com aishenhua.com +aishenqi.net aishuge.cc aishuge.la aishukong.com @@ -10665,7 +10547,6 @@ aistudio-app.com aisx.cc aisy.com aitangyou.com -aitansuo.com aitaotu.com aitcfw.com aite.xyz @@ -10691,6 +10572,7 @@ aituanche.com aitutu.cc aitype.net aiufida.com +aiutdns.com aiuxdesign.com aiuxian.com aiuxstudio.com @@ -10730,7 +10612,6 @@ aixiawa.com aixiawx.com aixiaxs.com aixiaxsw.com -aixiegao.com aixiezuo.com aixiezuobao.com aixifan.com @@ -10802,11 +10683,11 @@ aizhibo.net aizhishang.com aizhugong.com aiziti.net +aizools.com aizuna.com aizuopin.com aizusheng.com ajansspor.com -ajbbkf.com ajbcloud.com ajbtv.com ajcass.com @@ -10837,7 +10718,6 @@ ajutwatch.com ajwang.com ajxhgy.com ajyg.com -ajylqio.com ajzq.com ak-medical.net ak.cc @@ -10847,6 +10727,8 @@ ak03230hou.com ak1ak1.com ak47ids.com aka-amd-njpwworld-hls-enlive.akamaized.net +aka700.com +aka700.net akadns88.net akadns99.net akaifa.com @@ -10861,6 +10743,7 @@ akbing.com akbkgame.com akcomemetals.com akdns.net +akeeps.com akesobio.com akey.im akey.me @@ -11143,7 +11026,6 @@ alixiaoyouhui.com alixixi.com alixox.com alixueyuan.net -alixv.com aliyiyao.com aliyizhan.com aliypc.com @@ -11301,7 +11183,6 @@ aliyunwaf3.com aliyunwaf4.com aliyunwaf5.com aliyunx.com -aliyunyh.com alizhaopin.com alizhizhu.com alizila.com @@ -11319,7 +11200,6 @@ allbrightlaw.com allchips.com allcitygo.com allcitysz.net -allcombo.com alldobetter.com alldragon.com alleadprint.com @@ -11371,6 +11251,7 @@ alltion-cn.com alltoall.net alltobid.com alltosun.com +alltuu.cc alltuu.com allvalue.com allwellsports.com @@ -11386,14 +11267,12 @@ alminecn.com almondoy.com alnan.com alnanaluminium.com -alnantq.com alo7.com aloha-ukulele.com alonemonkey.com along96.com alongsky.com alookweb.com -alpacabro.com alpha-browser.com alpha-star.org alphabiopharma.com @@ -11436,7 +11315,6 @@ amapauto.com amarsoft.com amassfreight.com amasswww.com -amateurinterracialporn.net amaxchina.com amayad.com amazfit.com @@ -11503,7 +11381,7 @@ amplly.com ampmake.com ampxl.com amqyl.com -ams-ic.com +ams-aigc.com ams.org amsky.cc amsoveasea.com @@ -11529,6 +11407,7 @@ amz800.com amzcaptain.com amzcfo.com amzdh.com +amzkeys.com amzmm.com amzndns-cn.biz amzndns-cn.com @@ -11542,7 +11421,6 @@ analog.com analogfoundries.com analysysdata.com analytics.strava.com -analyticskey.com anan123.vip anandoor.com anandzhang.com @@ -11560,7 +11438,6 @@ ancbk.com ancda.com anchnet.com ancii.com -ancloud.xin ancun.com anda-cn.com anda-tech.com @@ -11577,7 +11454,6 @@ andeshengtec.com andfx.net andgele.com andhj.com -andongnis-dnyrs.com andpay.me andreader.com android-doc.com @@ -11668,6 +11544,7 @@ anicoga.com anictdns.store anijue.com animalchina.com +animate.art animationcritics.com animebytes.tv animetamashi.com @@ -11779,7 +11656,6 @@ anran233.com anrangas.com anranhs.com anrayer.com -anren.live anren.org anrenmind.com anrenxmed.com @@ -11820,7 +11696,6 @@ antchina.com antcloud-miniprogram.com antcut.com antdigital.com -antdv.com antebao.com antebo.com antekoptics.net @@ -11878,6 +11753,7 @@ anxia.com anxiangkeji.net anxiaoer.com anxin.com +anxin.link anxin168.com anxin360.com anxin360.net @@ -12030,7 +11906,6 @@ aomeikeji.com aomygodstatic.com aonaotu.com aoni.cc -aooedu.com aoofu.com aoogee.com aoohu.com @@ -12070,6 +11945,7 @@ aowei-sh.com aowei.com aowenmarketing.com aoxiang100.com +aoxingrelang.com aoxintong.com aoxsb.com aoy-power.com @@ -12117,6 +11993,7 @@ apcta.com apcups.org apcupse.com apdcdn.com +apdcdn.net ape8.com apearth.com apecn.com @@ -12130,7 +12007,6 @@ apevolo.com apexmic.com apexquartzstone.com apextechnik.com -apexwebdirectory.net apeyun.com apfeien.com apgblogs.com @@ -12138,6 +12014,7 @@ apgoview.com aphidic.com api-forwards.com api-m.com +api-vod-qcloud.com api.anythinktech.com api.crisp.chat api.so @@ -12151,6 +12028,7 @@ apicloud.com apifabric.net apifox.com apifoxmock.com +apigateway.info apigwtencent.com apilyzy.com apim.work @@ -12274,7 +12152,6 @@ appol.com appollochina.com appotronics.com appqv.com -appresource.net approvebook.com apps121.com apps5.oingo.com @@ -12360,10 +12237,11 @@ aqrose.com aqrsblg.com aqsc.org aqsiqauto.com -aqsitong.com aqsyssm.com aqtd.com aqtowngas.com +aqtwpc.com +aqtwwxemail.com aqtxt.net aqua-worth.com aquabk.com @@ -12373,6 +12251,7 @@ aquanliang.com aquanutriera.com aquanyou.com aquapipetech.com +aquaterramail.com aquathlondenice.com aquaticowatch.com aquayee.com @@ -12433,6 +12312,7 @@ ardsec.com areader.com arebz.com arefly.com +arenabreakoutcn.com arerberte.com arestech-sz.com areweloongyet.com @@ -12450,7 +12330,7 @@ arkchuxin.com arkfeng.xyz arkfwq.com arkid.cc -arkiestyle.com +arkntools.app arkoo.com arkrdigital.com arkread.com @@ -12511,6 +12391,7 @@ artgogo.com arthals.ink arthing.org arthome163.com +arthubdam.com arthurchiao.art arthurpharma.com articclothes.com @@ -12539,7 +12420,6 @@ artron.net artronartdata.com artronimages.com artrus.net -arts-cloud.net arts-nj.com artsbuy.com artshanghaifair.com @@ -12601,7 +12481,6 @@ asfuwu.com asfzl.net asgezhi.com ashan.org -ashechi.com ashehua.com ashgdf.com ashidc.com @@ -12639,7 +12518,6 @@ asianewsphoto.com asianmetal.com asiarobot.net asiaseiki.com -asiasolar.net asiasymbol.com asiatelco.com asiayun.com @@ -12665,7 +12543,6 @@ asktao.com asktempo.com asktug.com askxt.org -askzybf.com askzycdn.com asleyu.com aslk2018.com @@ -12715,7 +12592,6 @@ asset.msi.com assets-global.viveport.com assrt.net assyrb.com -astaobao.com astbbs.com asterfusion.com asteriavs.com @@ -12808,7 +12684,6 @@ atomhike-en.com atomic-art.com atomlife.net atomlock.com -atoolbox.net atrenew.com atri.ink atriptech.com @@ -12936,6 +12811,7 @@ autochongqing.com autodl.com autodmp.com autodnsv1.com +autodnsv1.net autodwg.com autoecosystems.com autoengine.com @@ -12946,6 +12822,7 @@ autohao.com autohenan.com autoho.com autohome.com +autohome.tel autohr.org autohunan.com autoij.com @@ -12974,7 +12851,6 @@ autowelds.com autowise.ai autoz.net autozi.com -autumnstreetrecords.com aux-home.com auxgroup.com auy07161km.com @@ -13027,7 +12903,6 @@ avlyun.com avlyun.net avlyun.org avnpc.com -avnzpwo.com avoscloud.com avp76.com avp76.net @@ -13251,13 +13126,11 @@ ayalm.com ayatuan.com aybwg.org aycav.com -aycgs.com aycgu.com aychfy.com ayctgy.com aydaojia.com aye.ink -ayemmadencevre.com ayeucefm.com ayfdc.com ayfy.com @@ -13361,7 +13234,6 @@ b-eurochina.com b-fairy.com b-k-automation.com b-raymedia.com -b.biz b01.net b08.com b1bj.com @@ -13369,6 +13241,7 @@ b1cjcgy8s2.com b1n.net b1qg.com b23.tv +b29gj.com b2b-builder.com b2b.biz b2b123.com @@ -13428,7 +13301,6 @@ babaike.com babaimi.com baballs.com babao.com -babaofan.com babapi.com babaxiong.com babedy.com @@ -13462,6 +13334,7 @@ backaudio.com backdata.net backendman.com backmany.com +backupdesktopcloud.com bacninhlocalguide.com bacocis.com bacts.com @@ -13470,7 +13343,6 @@ badambiz.com badazhou.com bademeiji.com badianyun.com -badls.com badmintoncn.com badmintone.com badong.net @@ -13488,7 +13360,6 @@ bag198.com bagb2b.com bagevent.com bags163.com -bagschangedmylife.com bagsnet.com bagstory.net bagtree.com @@ -13684,7 +13555,6 @@ baikevod.com baikewenda.com baikexueshe.com baikezh.com -baikuangyou.com bailb.com bailepin.com bailiaijia.com @@ -13880,7 +13750,6 @@ balltv.cc baltamatica.com baltamatica.net bama-supercon.com -bama555.com bamaiwo.com bamalifelong.com bamaol.cc @@ -14016,7 +13885,6 @@ banmaerp.com banmagushi.com banmajsq.com banmajz.net -banmashuo.com banmasiwei.com banmasrf.com banmasusuan.com @@ -14226,7 +14094,6 @@ baoyegroup.com baoyehb.com baoyejs.com baoying.com -baoyingxiao.com baoyizn.com baoyt.com baoyuanchem.com @@ -14285,7 +14152,6 @@ basunlighting.com bat-sz.com batchat.com batengtiyu1.com -bathome.net batian.net batman.plus batmanit.com @@ -14319,7 +14185,6 @@ bayucar.com bayuche.com bayuegua.com bayueju.com -bayueweb.com bayunhome.com bayuxuexiao.net bayzedhealthcare.com @@ -14344,7 +14209,6 @@ bb-game.com bb-hy.com bb-pco.com bb06.com -bb2024.com bb39977653.com bbanp.com bbaod.com @@ -14412,7 +14276,6 @@ bbs0551.com bbs1x.net bbscloud.com bbsds.com -bbsheji.com bbsls.net bbsmc.net bbsnet.com @@ -14492,6 +14355,7 @@ bcfy188.com bcgf.cc bcghotel.com bchdemo.site +bchlkj.com bchrt.com bcisz.org bcitb.com @@ -14514,7 +14378,6 @@ bcrjl.com bcrmtzx.com bcryo.com bcsfoong.com -bcsgn.com bcshipgo.com bcsloong.com bcsytv.com @@ -14535,8 +14398,6 @@ bczcdn.com bczs.net bczyyy.com bd-caict.com -bd-film.cc -bd-film.co bd-gti.com bd-jd.com bd-union.com @@ -14590,6 +14451,7 @@ bdjz.vip bdkyr.com bdlcqjw.com bdmozon.com +bdmyandex.com bdns-api-test.net bdns-boe.com bdns-boe.net @@ -14621,7 +14483,6 @@ bdspacetime.com bdstar.com bdstatic.cc bdstatic.com -bdstatlc.com bdsye.com bdsytime.com bdszh.vip @@ -14718,7 +14579,6 @@ beejoygames.com beelink.com beep365.com beeplay123.com -beer-ui.com beeshow.tv beespal.com beestor.com @@ -14733,6 +14593,7 @@ begoto.com begowin.com behake.com behao.net +behaviac.com behr.com behrenswatches.com behrenswatches.shop @@ -14820,7 +14681,6 @@ beijingguoyitang.com beijinghopemedcare.com beijinghuafu.com beijinghuiyizhongxin.com -beijingkbd.com beijinglandbridge.com beijingnongjiayuan.com beijingnorthstar.com @@ -14916,7 +14776,6 @@ belllan.com belloai.com beloj.com beltandroadforum.org -beltb2b.com beltxman.com bemanicn.com bemfa.com @@ -15095,7 +14954,6 @@ bestugali.com bestv6.com bestvcdn.com bestvcdn.net -bestvideocloud.com bestviewstock.com bestvist.com bestwa.com @@ -15235,10 +15093,10 @@ bglmzm.com bgmfans.com bgnyl.com bgosp.com -bgrbjt.com bgrdh.com bgri.com bgrimm.com +bgrwgglz.com bgs123.com bgsdk.net bgsdyz.com @@ -15336,12 +15194,10 @@ bhshtksp.com bhshunhui.com bhshyy.com bhsr.com -bhswyw.com bhszyyy.com bhtv.cc bhuitong.com bhuvgy.com -bhwater.org bhwzdnweys.com bhxww.com bhxx.net @@ -15574,7 +15430,6 @@ bilezu.com bilfinance.com biliapi.com biliapi.net -biliapi.xyz bilibil.com bilibili.cc bilibili.co @@ -15642,7 +15497,6 @@ binbinbiji.com binbinyl.com bincailiuxue.com binfang.com -binfen.tv binfenniao.com binfenquzu.com binfenshikong.com @@ -15685,7 +15539,6 @@ bingyandianqi.com bingyongjin.vip bingyuanhb.com bingzunkeji.com -binhai100.com binhaiinv.com binhaiwater.com binhangtech.com @@ -15794,7 +15647,6 @@ biqugao.cc biquge.info biquge.la biquge123.com -biquge365.com biquge8.com biquge9.cc biquge99.cc @@ -15835,13 +15687,13 @@ biquyue.com biquzw.info biqwo.com biransign.com +bird.art bird4d.com birdback.org birdol.com birdotech.com birdwork.com birentech.com -birthhealth.com bisairi.com bisenaccess.com bisenet.com @@ -15894,6 +15746,7 @@ bitmoe.com bitol.net bitongtech.com bitonloop.com +bitosscdn.com bitqiu.com bitscn.com bitsde.com @@ -15998,6 +15851,8 @@ bj-syc.com bj-sydc.com bj-tencentclb.cloud bj-tencentclb.com +bj-tencentclb.net +bj-tencentclb.work bj-tongchuang.com bj-tvart.com bj-tygy.com @@ -16050,7 +15905,6 @@ bjbpi.com bjbrew.com bjbtfu.com bjbus.com -bjbxg8.com bjbywx.com bjbzc.com bjbzszxy.com @@ -16194,7 +16048,6 @@ bjhwtx.com bjhwxy.com bjhxqh.com bjhxzlyy.com -bjhysrq.com bjhytjxjg.com bjhzkq.com bjhzzs.com @@ -16226,6 +16079,7 @@ bjjinming.com bjjinsong.com bjjiuhe.com bjjizhun.com +bjjjst.com bjjk66.com bjjkglxh.org bjjkw.net @@ -16234,6 +16088,10 @@ bjjnrl.com bjjnzf.com bjjqe.com bjjqzyy.com +bjjr-tencentclb.cloud +bjjr-tencentclb.com +bjjr-tencentclb.net +bjjr-tencentclb.work bjjsj.com bjjsschool.net bjjstyyzzyy.com @@ -16383,7 +16241,6 @@ bjsjsch12333.com bjsjstxyy.com bjsjsyly.com bjsjwl.com -bjsjxtm.com bjskjzs.com bjsoho.com bjsound.com @@ -16396,11 +16253,9 @@ bjsryc.com bjsskdn.com bjstcc.com bjstjy.com -bjstt.com bjsubway.cc bjsubway.com bjsuewin.com -bjsunhouse.com bjsxdgzc.com bjsxjt.com bjsxt.com @@ -16440,7 +16295,6 @@ bjtzfy.com bjtzzg.com bju-flo.com bjucd.com -bjufida.com bjun.tech bjunionstar.net bjuri.com @@ -16456,7 +16310,6 @@ bjwhmedia.com bjwig.com bjwkhotel.com bjwkzl.com -bjwlapp.com bjwpjs.com bjwqxh.com bjwt.com @@ -16472,6 +16325,7 @@ bjxf315.com bjxhly.com bjximei.com bjxingma.com +bjxingzheng.com bjxinku.com bjxinyou.com bjxjyy666.com @@ -16579,7 +16433,9 @@ bkapigw.com bkapps.com bkbyxa.com bkcipbewruo.com +bkcloud.cc bkclouds.cc +bkcode.net bkdou.com bkdyhz.com bkeconomy.com @@ -16621,7 +16477,6 @@ blackshark.com blackshow.me blackswancake.com blackxl.org -blakat.cc blazefire.com blazefire.net blazor.zone @@ -16647,7 +16502,6 @@ bliao.com blibao.com blibee.com blibee.net -blibh4.com blicube.com blimage.com bliner.me @@ -16663,7 +16517,6 @@ bllsbz.com bllzgqbyp.com blm.net blmpb.com -bln8.com blockchain.hk blockchain123.com blockchainlabs.org @@ -16721,7 +16574,6 @@ blue-city.com blue-skylandscape.com blue-zero.com blue0123.com -blue1000.com bluearchive-cn.com bluebeebox.com bluebellls.com @@ -17080,6 +16932,7 @@ boningad.xyz bonkee.net bonree.com boobooke.com +boodo.com booea.com booen.co booeoo.com @@ -17107,7 +16960,6 @@ bookschina.com booksgoo.com bookshadow.com bookshi.com -bookshop.tw bookshoptw.com bookshuku.com booksky.cc @@ -17121,7 +16973,6 @@ bookxnote.com boolan.com boolaw.com boole-tech.com -boolean93.com boolv.com boonew.com boonoo.net @@ -17219,6 +17070,7 @@ botemotor.com botnet.cc botny.com botocard.com +boton-tech.com botongedu.com botongr.com botorange.com @@ -17235,6 +17087,7 @@ bowerp.com bowok.com bowu66.com bowuzhi.fm +box-anchor.com box-z.com box3.fun boxdouyin.com @@ -17242,7 +17095,6 @@ boxgu.com boxiaole.com boxilink.com boxisign.com -boxjango.com boxuegu.com boxueio.com boxui.com @@ -17266,6 +17118,7 @@ boyi.co boyikang.com boying360.com boyingsj.com +boyinhotel.com boyishu.me boylondonchina.com boyoucy.com @@ -17278,8 +17131,8 @@ boyuanchemical.com boyuanjiaxin.com boyue.com boyuecasting.com +boyuemobile.com boyuesh.com -boyuguandao.com boyunso.com boyuntu.com boyuonline.com @@ -17292,6 +17145,7 @@ bpgjuice.net bphxmc.xyz bplslb.com bpltm.com +bpmlt.com bpmuseum.com bppan.com bpqwxsh.com @@ -17310,6 +17164,7 @@ bqjeep212.com bqlcev.com bqpoint.com bqq8.com +bqqpx.com bqrdh.com bqsnn.com bqtalk.com @@ -17472,7 +17327,6 @@ bsmz.net bsnljt.com bspapp.com bsping.com -bsqipei.com bsquant.com bsrczpw.com bsrmyy.com @@ -17512,7 +17366,6 @@ bszxtl.com bszyqc.com bt-audio.com bt-club.com -bt-share.com bt6.club bt66.org bt66.tv @@ -17576,6 +17429,7 @@ btpig.com btplay.net btpxbf.com btrbdf.com +btropdi.xyz btsemi.com btshidai.com btspreads.com @@ -17599,10 +17453,10 @@ btyhkj.com btyijiaxueyuan.com btytgj.com btzbjt.com +btzgamepkg.com btzhcc.com btzthb.com btzyc.com -bu21lgz.xyz buaaer.com bubaigei.com bubalusplus.com @@ -17664,6 +17518,7 @@ build9s.io builddecor.org buildface.com buildhr.com +building9s.io buildjob.net buildnewapp.com buildwaterexpo.com @@ -17686,7 +17541,6 @@ bumiu.com bundor.com bundpic.com bundsummit.org -bunfly.com bungba.com bunze.com buread.com @@ -17734,14 +17588,12 @@ buycoor.com buydeem.com buydouke.com buyfine.net -buyhaogu.com buyhot.vip buyi9.com buyiju.com buyjingxi.com buyjk.com buylabel.com -buylogic.cc buyoudao.com buysun.net buysweet.com @@ -17750,7 +17602,6 @@ buyueyuyun.com buyun.co buzao.net buzhi.com -buzhi5.com buzhibushi.com buzhihuowu.net bvfcdn.com @@ -17797,7 +17648,6 @@ bx0byte.com bx169.com bx1k.com bx24k.com -bxb2b.com bxbest.net bxcc.vip bxd365.com @@ -17817,7 +17667,6 @@ bxjob.net bxjyxx.net bxkejian.com bxktv.com -bxlac.com bxldz.com bxltw.com bxmd51.com @@ -17828,7 +17677,6 @@ bxr.im bxrfund.com bxshopya.com bxshscc.xyz -bxv8.com bxwatch.com bxwljt.com bxwst.com @@ -18040,6 +17888,7 @@ bytetstatic.com bytetstatic.net byteug.com bytevalk.com +bytevcloudapi.com bytevcloudvod.com bytevdn-boe.com bytevdn.com @@ -18224,6 +18073,10 @@ c9cc.com ca-aicc.com ca-sme.org ca-smefs.com +ca-tencentclb.cloud +ca-tencentclb.com +ca-tencentclb.net +ca-tencentclb.work ca001.com ca002.com ca003.com @@ -18264,7 +18117,6 @@ cac-citc.com cacakp.com cacfo.com cacfo.net -cachaona.com cache4ever.com cache666.com cachekit.com @@ -18467,6 +18319,7 @@ caizhihr.com caj11.com cake400.com cake6.com +calatopia.com calawei.com calb-tech.com calccn.com @@ -18474,7 +18327,6 @@ calculusdata.com caldigit.net caledoniancable.com calendar520.com -calendarli.com calgoncarbon-china.com cali-light.com callbei.com @@ -18518,7 +18370,6 @@ campushoy.com campusphere.net campusplus.com camreizuxphd.com -camrymetal.com camscanner.com camsnetec.com camyu.net @@ -18550,6 +18401,7 @@ cang-jia.net cang.com cangdu.org cangfengzhe.com +canghaiip.com canghaimachine.com canglanghospital.com cangmang.xyz @@ -18624,7 +18476,6 @@ caochai.net caochen.net caogen.com caogenb2b.com -caogenban.com caogong.org caohai.com caohaifeng.com @@ -18653,7 +18504,6 @@ caoyudong.com capablist.com capatue.com capellahotelsanya.com -capillarytech-cn.com capitalcloud.net capitaleco-pro.com capitalip.org @@ -18677,6 +18527,7 @@ carbinpower.com carbonbiking.com carbononegroup.com carbonscn.com +carbonxprogram.com carcav.com carcdn.com cardaudio.com @@ -18688,12 +18539,11 @@ cardlan.com cardlogroup.com cardniu.com cardniudai.com -cardofcom.net cardqu.com cardyang.com care110.com caredear.com -career-js.com +careduka.com careerchina.com careerexe.com careerintlinc.com @@ -18773,7 +18623,6 @@ casic304.com casic3s.com casicloud.com casicyber.com -caslandwood.com caslease.com casmeit.com casmita.com @@ -18781,7 +18630,6 @@ casmn.com casnb.com casp.hk caspte.com -casql.com casqy.com casszzy.com cast.news98.com.tw @@ -18805,7 +18653,6 @@ catchyrime.com catdggga.com cate114.com catering-shizuoka.com -cateru509.com catfish-cms.com catguo.com cathassist.org @@ -18859,6 +18706,7 @@ cbd263.com cbdcn.com cbdio.com cbdstest.download.prss.microsoft.com +cbdz13.com cbe21.com cbea.com cbec365.com @@ -18906,7 +18754,7 @@ cbtimer.com cburi.com cbvac.com cbvvt.com -cbxg.icu +cbvx8.com cbxs.net cby.me cbzr.com @@ -18941,7 +18789,6 @@ ccatcloud.com ccatnet.com ccawz.com ccb.com -ccbbn.org ccbcos.com ccbec-shenzhen.com ccbecexpo.com @@ -19124,7 +18971,6 @@ ccm-1.com ccm-hardware.com ccm99.com ccmama.com -ccmbv.com ccmcgc.com ccmdl.adobe.com ccmdls.adobe.com @@ -19171,7 +19017,6 @@ ccpitbj.org ccpitbm.org ccpitbuild.org ccpitcq.org -ccpitcsc.org ccpitecc.com ccpitfujian.org ccpitgs.com @@ -19207,7 +19052,6 @@ ccrate.cc ccrc.com ccrfmed.com ccrgt.com -ccrice.com ccrici.com ccrjk.com ccrjkf.com @@ -19217,7 +19061,6 @@ ccschangsha.com ccscrbyy.com ccsedqrmyy.com ccsfuchan.com -ccshenghuo.com ccskqyy.com ccsngqyy.com ccsnpower.com @@ -19255,7 +19098,6 @@ cctry.com cctsz.com cctu.org cctv-19.com -cctv-88.com cctv-caijing.com cctv-peiyin.com cctv-star.com @@ -19286,7 +19128,6 @@ cctypx.com cctzz.net ccughc.net ccutchi.com -ccutu.com ccv160.com ccv168.com ccview.net @@ -19333,6 +19174,9 @@ cd-psychologist.com cd-rail.com cd-sd.com cd-tencentclb.cloud +cd-tencentclb.com +cd-tencentclb.net +cd-tencentclb.work cd-wx.com cd-wx.net cd-zc.com @@ -19388,7 +19232,6 @@ cddengji.com cddgg.com cddgg.net cddjip.com -cddk8.com cddlhx.com cddlkj.net cddq120.com @@ -19414,6 +19257,7 @@ cdfsunrise.com cdfuwuqi.com cdgas.com cdgdad.com +cdgdp.com cdggq.com cdggzy.com cdgjbus.com @@ -19431,8 +19275,6 @@ cdhaiguang.com cdhfund.com cdhglsc.com cdhgr.com -cdhhoa.com -cdhjsd.com cdhjsw.com cdhke.com cdhkxy.com @@ -19466,6 +19308,7 @@ cdkeynogap.com cdkf.com cdkjbg.com cdkjw.org +cdks.run cdkyfc.com cdlaobing.com cdlbmy.com @@ -19485,7 +19328,6 @@ cdmfund.org cdmgiml.com cdmhwh.com cdmjwater.com -cdmmlxs.com cdms-china.com cdn-build.com cdn-build.net @@ -19505,6 +19347,7 @@ cdn.fun cdn.globalsigncdn.com.cdn.cloudflare.net cdn.hkdtmb.com cdn.jetbrains.com +cdn.lilyemby.com cdn.marketplaceimages.windowsphone.com cdn.samsung.com cdn.shanghai.nyu.edu @@ -19539,7 +19382,6 @@ cdn90.com cdn90.net cdn90.org cdn99.com -cdnaaa.net cdnb.net cdnbbb.net cdnbuild.com @@ -19654,11 +19496,12 @@ cdnlinking.com cdnmama.com cdnmg.com cdnok.com +cdnoutcheck.com cdnpe.com -cdnqiangdun.com cdnqttdispatcher01.com cdnsvc.com cdntip.com +cdntipbak.com cdntips.com cdntips.net cdntxt.com @@ -19686,7 +19529,6 @@ cdqszz.com cdqz.net cdqzcz.com cdr6.com -cdrbj.com cdrbs.net cdrcb.com cdren.com @@ -19847,6 +19689,7 @@ ceibsonline.com ceic.com ceice.org ceicloud.com +ceicsz.net ceiea.com ceigd.com ceinettgt.com @@ -19878,6 +19721,9 @@ cement365.com cementren.com cemho.com cemni.com +cemodule.com +cemsurveys.com +cemsurveys.net cemyun.com cen-li.com cenano-china.com @@ -19890,6 +19736,7 @@ cencs.com cendes-arch.com cengceng.chat cengcloud.net +ceniiat.com cenjiasu.com cenkersz.com cenn.com @@ -19903,7 +19750,6 @@ centauriglobal.com centbrowser.net centec.com cententcymbals.com -centercmslinks.com centerm.com centit.com centong.com @@ -20003,6 +19849,7 @@ ceydz.com ceyice.net ceyige.com cezhu.net +cf-china.info cf-ns.com cf-ns.net cf-ns.site @@ -20047,7 +19894,6 @@ cfiecdns.net cfimg.com cfishsoft.com cfjbqc.com -cfjpor.xyz cfjqr.com cfjzyxh.com cfkjgx.com @@ -20058,13 +19904,15 @@ cflpla.com cfluid.com cfm119.com cfmcc.com -cfmcjr6.xyz +cfmeutencent.com cfmmc.com cfmna-tencent.com cfmogu.com cfmoto.com +cfmseatencent.com cfnotes.com cfogc.com +cfogc.net cfrlr.com cfsbcn.com cfscar.com @@ -20146,6 +19994,10 @@ cgnjy.com cgnmc.com cgnne.com cgntv-glive.ofsdelivery.net +cgoec-tencentclb.cloud +cgoec-tencentclb.com +cgoec-tencentclb.net +cgoec-tencentclb.work cgonet.com cgowater.com cgown.com @@ -20205,7 +20057,6 @@ cha-china.org cha-tm.com cha127.com cha138.com -cha3721.com cha40.com chaba123.com chabansheng.com @@ -20225,12 +20076,12 @@ chacuo.net chadianhua.net chadoc.com chaej.com -chaelc.com chafanhou.com chafei.net chagee.com chaguan.center chahua.org +chahui.com chahuo.com chaic.com chaichefang.com @@ -20240,7 +20091,6 @@ chaidongpower.com chaihezi.com chaijing.com chaimage.com -chain-store.net chain.cc chain56.com chaincar.com @@ -20349,7 +20199,6 @@ changjiulogistics.com changjiuqiche.com changker.com changkezhe.com -changlihui.com changlipeixun.com changliuabc.com changloong.com @@ -20375,7 +20224,6 @@ changshizu.com changshouchemgroup.com changshu-marathon.com changshunhuojia.com -changshuohr.net changtong2800.com changtounet.com changtubus.com @@ -20431,7 +20279,6 @@ chaofan.com chaofanlin.com chaofanshuma.com chaofantian.com -chaogaofang2099.com chaogejiaoyu.com chaogu1688.com chaohuatech.com @@ -20489,6 +20336,7 @@ chapangzhan.com chapaofan.com chaping.tv chappell1811.com +char123.com charcaius.com charge-mobile.com chargedot.com @@ -20534,6 +20382,7 @@ chayiba.com chayu.com chayueshebao.com chayuqing.com +chaz.fun chazhengla.com chazidian.com chaziyu.com @@ -20554,13 +20403,11 @@ chcoin.com chcompass.com chcontrol.com chcpay.com -chczp.com chda.net chdajob.com chdelphin.com chdies.com chdmc.com -chdmv.com chdqyy.com chdtp.com chdyou.net @@ -20636,7 +20483,6 @@ chehui.com chejianding.com chejingjie.com chekuaipai.com -chelaike.com chelajanitorial.com chelangauto.com chelifang.com @@ -20704,7 +20550,6 @@ chengcai.net chengchuanren.com chengde-jz.com chengdebank.com -chengdechina.com chengdegj.com chengdegroup.com chengdewater.com @@ -20726,7 +20571,6 @@ chengfengboli.com chengfengerlai.com chenggnet.com chenggongguiji.com -chengguw.com chenghai.cc chenghct.com chenghen.com @@ -20799,7 +20643,6 @@ chenhr.com chenhuangxun.com chenhui.org chenjia.me -chenjie.info chenjiehua.me chenjinghealth.com chenjt.com @@ -20849,6 +20692,7 @@ chenyou123.com chenyu.me chenyudong.com chenyuemz.com +chenyuwulian.com chenyyds.com chenzao.com chenzhicheng.com @@ -20899,7 +20743,6 @@ chexiancha.com chexiang.com chexianinfo.com chexiaoliang.net -chexin.cc chexinmeng.com chexiu.com chextx.com @@ -20931,7 +20774,6 @@ chglmp.com chgreenway.com chgry.com chgzfls.com -chhblog.com chhqtest.com chhua.com chhuc.org @@ -21035,7 +20877,6 @@ china-coc.org china-consulate.org china-core.com china-cotton.org -china-cpp.com china-cpu.co china-cpu.com china-cri.com @@ -21179,7 +21020,6 @@ china-shugaung.net china-sites.com china-slate.com china-smartech.com -china-sop.com china-sorsa.org china-soyea.com china-spirulina.net @@ -21448,7 +21288,6 @@ chinadart.com chinadas.net chinadatapay.com chinadatatrading.com -chinadazhaxie.com chinadbs.com chinaddn.com chinaddos.com @@ -21759,7 +21598,6 @@ chinalxnet.com chinamadas.com chinamae.com chinamags.org -chinamaincloud.com chinamani.com chinamaohong.com chinamap.com @@ -21813,6 +21651,7 @@ chinaningbo.com chinanmi.com chinanrb.com chinanums.com +chinanwa.com chinaobp.com chinaoceanwide.com chinaoct.com @@ -21983,6 +21822,9 @@ chinataiwan.org chinatalent.org chinatalentgroup.com chinatat.com +chinatechie.com +chinatechie.net +chinatechinsights.com chinatelecom-h.com chinatelecom.com.hk chinatelecom.com.mo @@ -22007,7 +21849,6 @@ chinatiredealer.com chinatla.com chinatlzm.com chinatmco.com -chinatmic.com chinatongjia.com chinatopbrands.net chinatoplon.com @@ -22136,7 +21977,6 @@ chinayms.com chinayongfa.com chinayoubang.com chinayounao.com -chinayq.com chinays.com chinayuanwang.com chinayucai.com @@ -22207,7 +22047,6 @@ chinjpd.com chinlingo.com chinrt.com chinsc.com -chinsun-door.com chint.com chint.net chintanneng.com @@ -22347,6 +22186,7 @@ chofnipr.com choiceform.com chomixbiotech.com chong4.net +chongbuluo.com chongchi.com chongchuang.biz chongdawang.com @@ -22476,7 +22316,6 @@ chuangji2009.com chuangjiangx.com chuangjie.com chuangjing.com -chuangke.tv chuangkem.com chuangkeup.com chuangkit.com @@ -22495,7 +22334,6 @@ chuangshiwl.com chuangshiyuli.com chuangtie.com chuangtoo.com -chuangweikeji.com chuangx.org chuangxin.com chuangxinapi.com @@ -22552,7 +22390,6 @@ chubaodai.com chubaohui.com chucheng.wiki chuchujie.com -chuchujue.com chuchur.com chufaba.me chufw.com @@ -22562,6 +22399,7 @@ chuguo78.com chuguohao.com chuguoqu.com chuhai-club.com +chuhai.group chuhaige.com chuhailiqi.com chuimg.com @@ -22572,6 +22410,7 @@ chuixue.com chuiyue.com chujian.xyz chujing-electric.com +chujingapp.com chujuan.net chujunkeji.com chukong-inc.com @@ -22627,7 +22466,6 @@ chusenscm.com chuseo.com chushan.com chushang027.com -chushibiao5.com chushihome.com chushiji.com chushixiu.com @@ -22699,6 +22537,7 @@ cibonet.com cibresearch.com cibuser.com cic-js.com +cicadayun.com cicaf.com cicba.net cicc.com @@ -22762,7 +22601,6 @@ cih-index.com cihai123.com cihexpo.com cihua.net -ciia-top.com ciiccq.com ciicgat.com ciichr.com @@ -23007,7 +22845,6 @@ cjjnff.com cjjygr.com cjk3d.net cjkhd.com -cjkiexpo.org cjkihgroup.com cjkjks.com cjkt.com @@ -23084,7 +22921,6 @@ ckpharm.com ckplayer.com ckqjyjq.xyz cksct.com -cksd888.com cksic.com cksschool.com cksx.org @@ -23092,7 +22928,6 @@ cktqeiau.com cktshare.com ckuai.com ckvmrtfg.com -ckvo6.com ckweax9zn5.com ckxx.net ckzcc.com @@ -23149,7 +22984,6 @@ cleargrass.com clearmediatech.com clearofchina.com clearsky360.com -clegend-films.com clevercn.net cleveroom.com clewm.net @@ -23235,6 +23069,8 @@ cloud301.net cloud56.net cloud887325.com clouda.com +cloudacc1.com +cloudacc1.net cloudajs.org cloudangelfunds.com cloudanqing.com @@ -23321,6 +23157,7 @@ cloudlishui.com cloudluohe.com cloudluoyang.com cloudlvs.com +cloudmarket-apigw.com cloudmaster.hk cloudmeishan.com cloudmes.io @@ -23345,6 +23182,8 @@ cloudroom.com clouds1000.com cloudsanya.com cloudsation.com +cloudsec1.com +cloudsec1.net cloudsee.com cloudsee.net cloudseeplus.com @@ -23360,7 +23199,11 @@ cloudsiping.com cloudsite.vip cloudskysec.com cloudstencent.com +cloudstudio-app.net +cloudstudio.club cloudstudio.net +cloudstudio.run +cloudstudio.work cloudsuqian.com cloudswift.cloud cloudtalkers.com @@ -23416,6 +23259,7 @@ clsbhs.com clsgd.com clshanghai.com clsj.com +clsshare.com clssn.com clssnews.com clsz-group.com @@ -23533,6 +23377,7 @@ cmfwiper.com cmgadx.com cmgame.com cmgchengdu.com +cmgdb.com cmge.com cmgemooc.com cmgn.cc @@ -23549,7 +23394,6 @@ cmiotcd.com cmiyu.com cmjz.net cmlog.com -cmlong.com cmltzz.com cmmaap.com cmmchn.com @@ -23688,10 +23532,12 @@ cn-zhongrui.com cn.bing.com cn.bing.net cn.download.nvidia.com +cn.eset.com cn.mm.bing.net cn.net cn.online.standardchartered.com cn.pool.ntp.org +cn.sc.com cn.vc cn.widevine.com cn.windowssearch.com @@ -23760,6 +23606,7 @@ cname-syd.com cname123.net cname88.com cnamegslb.com +cnameip.xyz cnamexingzuoy.com cnamico.com cnanzhi.com @@ -23770,6 +23617,8 @@ cnautofinance.com cnautonews.com cnautotool.com cnb.cool +cnb.run +cnb.space cnbabylon.com cnball.net cnbang.net @@ -23834,7 +23683,6 @@ cncdomain.com cncecci.com cncecsci.com cncecyc.com -cncells.net cncfans.com cncflux.com cncgdns.com @@ -24085,7 +23933,6 @@ cnhnb.com cnhongke.org cnhonker.com cnhow.net -cnhowotruck.com cnhqt.com cnhsjz.com cnhsw.net @@ -24106,13 +23953,11 @@ cniao5.com cnibx.com cniceberg.com cnicif.com -cnidea.net cnielts.com cniiib.com cnimg.elex.com cnimporter.com cninfo.net -cninfos.com cninj.com cninnovatel.com cninsure.net @@ -24178,7 +24023,6 @@ cnjyky.com cnjyw.net cnjzb.com cnjzgroup.com -cnjzjj.com cnk8.com cnkaile.com cnkang.com @@ -24191,7 +24035,6 @@ cnkgraph.com cnkh.com cnki.net cnki.vip -cnkibk.com cnkicheck.info cnkidoi.com cnkidoi.net @@ -24305,7 +24148,6 @@ cnns.net cnntzr.com cnnuo.com cnnx.net -cnobol.com cnod.net cnoddt.com cnoic.com @@ -24317,7 +24159,6 @@ cnonjx.com cnonline.org cnoocengineering.com cnoocltd.com -cnookr.com cnool.net cnopendata.com cnops.xyz @@ -24351,7 +24192,6 @@ cnpickups.com cnpicl.com cnpiecgb.com cnpiecsb.com -cnpingpang.com cnpkm.com cnpl-ltl.com cnplanetary.com @@ -24518,7 +24358,6 @@ cntries.com cntronics.com cntslawfirm.com cntuw.com -cntv-5.com cntv.com cntvan.com cntwg.com @@ -24551,7 +24390,6 @@ cnwebshow.com cnweiju.com cnweiming.com cnweisou.com -cnwenshi.net cnwest.com cnwhc.com cnwindows.com @@ -24569,6 +24407,7 @@ cnxcjt.com cnxclm.com cnxct.com cnxds.com +cnxdw.com cnxfans.com cnxhacker.com cnxhyp.com @@ -24580,7 +24419,6 @@ cnxiaoyuan.com cnxibu.com cnxieku.com cnxile.com -cnxinbiao.com cnxincai.com cnxingoplastics.com cnxishui.net @@ -24710,6 +24548,10 @@ codeages.work codeaha.com codebaoku.com codebe.org +codebuddy.info +codebuddy.net +codebuddy.pro +codebuddy.work codebus.net codebye.com codechina.net @@ -24755,18 +24597,22 @@ codesoft.hk codess.cc codewd.com codeweblog.com +codeweixin.com codewoody.com codex-watch.com codezh.com codezyw.com codigoscript.com +coding-io.com coding-newsletter.com coding-pages.com +coding.love coding.me coding.net coding3min.com codingapp.com codingchangeworld.com +codingcorp.net codingdao.com codingke.com codingsky.com @@ -24797,6 +24643,7 @@ coffeejp.com coffeeofchina.com coffeeteaimagazine.com cofferxm.com +cofile.net cofly.com cofool.com cofortest.com @@ -24828,7 +24675,6 @@ coins-carnival.com coinsky.com coinvs.com coinyue.com -coirliner.com cokll.com cokutau.com colahotpot.com @@ -24860,6 +24706,7 @@ coloros.net colortechchina.com colorv.com coloryr.com +colosseo7143.xyz colourlife.com columbia-china.com columbia-kaiyuan.com @@ -24892,6 +24739,7 @@ cometagame.com comeyes.com comflowy.com comfolite.com +comfylink.com comiai.com comic520.com comicdd.com @@ -24972,7 +24820,6 @@ consmation.com constao.com constar-gd.com constgroup.com -containerpi.com content4ads.com contentchina.com contentchina.net @@ -25063,7 +24910,6 @@ coolxcloud.com coolxigua.com coolyun.com coolzcloud.com -coomarts.com coomix.net coomo99.com coomodel.com @@ -25089,7 +24935,6 @@ copperalliance.asia copperhome.net copyedu.com copyfuture.com -copyswisswatches.com copythelink.com copywatchstyle.com cor-games.com @@ -25124,6 +24969,8 @@ cosco.com coscon.com coscoshipping.com coscoshippingenergy.com +cosdnsresolve-wxzf.com +cosdnsresolve.com cosedm.com cosen.net coshelper.com @@ -25145,7 +24992,9 @@ cosofteck.com cosplay8.com cosplayla.com costku.com +costuan.com cosunter.com +cosxu.com cosyjoy.com cosz.com cotek-robotics.com @@ -25181,6 +25030,7 @@ coyuk.com coyuns.net coz9uiesr5zv6.com cozdyez2ap.com +coze.site cozonenet.com cp-keji.com cp0556.com @@ -25260,7 +25110,6 @@ cproton.com cps1688.com cps800.com cpsbeijing.org -cpsclab.com cpse.com cpsenglish.com cpt-world.com @@ -25297,6 +25146,10 @@ cq-qqcg.com cq-rongjia.com cq-sound.com cq-spring.com +cq-tencentclb.cloud +cq-tencentclb.com +cq-tencentclb.net +cq-tencentclb.work cq-wnl.com cq-yj.com cq-yt.com @@ -25305,7 +25158,6 @@ cq315house.com cq3a.com cq5135.com cq556.com -cq5y.com cq6.com cq69.com cq6969.com @@ -25340,7 +25192,6 @@ cqbondrite.com cqbosai.com cqbshyy.com cqbwjc.net -cqbygg.com cqbys.com cqc-ts.com cqc.so @@ -25406,7 +25257,6 @@ cqdky.com cqdongnanhospital.com cqdongyang.com cqdpt.com -cqdqsy.com cqdting.com cqduoliu.com cqdzw.com @@ -25555,7 +25405,6 @@ cqjizhi.com cqjj.net cqjjnet.com cqjkhb.com -cqjltx.com cqjlyy.net cqjnjs.com cqjnkgjt.com @@ -25634,7 +25483,6 @@ cqlyy.com cqlzz.com cqmaika.com cqmama.net -cqmanfeite.com cqmanzhong.com cqmarathon.com cqmas.com @@ -25931,7 +25779,6 @@ cqyyjc.com cqyysx.com cqyyzx.cc cqyyzy.com -cqyyzz.com cqyznews.com cqyzqsy.com cqzbcg.com @@ -25984,7 +25831,6 @@ crabchina.com craer.com craftcontact.com craftsb2b.com -craftusa.com craim.net crandom.com crane-china.cc @@ -26133,6 +25979,7 @@ crodigynat.com croot.com croplifechina.org cross-border-public.com +cross-zone.com crossborderlion.com crossingstar.com crossingstarstudio.com @@ -26156,6 +26003,7 @@ crsn168.com crtc-hr.com crtdri.com crtg.com +crtrcloud.com crtrust.com crtyhr.com crucg.com @@ -26171,14 +26019,15 @@ cry33.com crysound.com crystalcg.com crystaledu.com +crystalskeleton.com cryuantafund.com cs-air.com cs-airport.com cs-cjl.com +cs-cydq.com cs-eval.com cs-jinwei.com cs-pos.com -cs-show.com cs-video.com cs-xf.com cs0799.com @@ -26227,6 +26076,7 @@ cscjedu.com csclc.com cscmgg.com csct-china.com +cscxsemi.com csd568.com csdc.info csdczx.com @@ -26244,12 +26094,15 @@ cse-bidding.com csea1991.org csea767.com csebank.com +csec-tencentclb.cloud +csec-tencentclb.com +csec-tencentclb.net +csec-tencentclb.work csemc.com cseptc.net cserveriip.com cserwen.com cseve.com -csfcw.com csflgg.com csfounder.com csfreezer.com @@ -26422,7 +26275,6 @@ cst6.com cstccloud.org cstcloud.net cstcq.com -cstea.org cstech.ltd csteelnews.com cstexun.com @@ -26489,6 +26341,7 @@ cszjzx.com cszkzn.com cszlgs.com cszn120.com +cszpra.com cszsjy.com cszsths.com csztv.com @@ -26567,6 +26420,7 @@ ctgapp.com ctghealthy.com ctghr.com ctghro.com +ctgia.com ctgne.com cthcdn.com cthcdn.net @@ -26697,7 +26551,6 @@ cucldk.com cuctv.com cueber.com cuebzzy.com -cuekit.com cuelog.com cufeyk.com cugala.com @@ -26737,6 +26590,7 @@ cunan.com cuncunle.com cuncwg.com cunfang.com +cunhao.net cunnar.com cunshao.com cunyoulu.com @@ -26896,7 +26750,6 @@ cxmt.com cxmtc.net cxnyjt.com cxnykjy.com -cxorg.com cxory.com cxpharm.com cxqex.com @@ -26929,6 +26782,7 @@ cxybattery.com cxycsx.vip cxydh.xyz cxydw.net +cxyfjd.com cxylfc.com cxylx.com cxyob.com @@ -27102,7 +26956,6 @@ czbanbantong.com czbank.com czbcpaint.com czbq.net -czbsfx.com czbtv.com czbx18.com czcarbon.com @@ -27168,7 +27021,6 @@ czjlsb.com czjoel.com czjpw.com czjsy.com -czjtpipe.com czjyzx.net czkbdq.net czkctl.com @@ -27221,7 +27073,6 @@ cztvcloud.com cztzkg.com czur.com czvv.net -czwgpt.com czwie.com czws.com czwsg5.com @@ -27236,7 +27087,6 @@ czxuexi.com czxxp.com czxxw.com czxy.com -czxztq.xyz czyabo.com czybjz.com czyefy.com @@ -27267,7 +27117,6 @@ d.cg d.design d00.net d03jd.com -d0efbrm.xyz d10a.com d11a.com d163.net @@ -27426,6 +27275,8 @@ dafangtour.net dafangya.com dafanshu.com dafaun.com +dafenghk.com +dafenghk.net dafmgroup.com dafork.com dafosi.org @@ -27435,7 +27286,6 @@ dagongnet.com dagongtech.com daguan.com daguangnews.com -daguantao.com dagufood.com daguiot.com daguipc.com @@ -27483,7 +27333,6 @@ dahuatech.com dahuawang.com dahuhg.com dahuifuwu.com -dahulu.com dahunet.com dahuodong.com dai-shi.com @@ -27503,6 +27352,7 @@ daidongxi.com daief.tech daigege.com daigou.com +daigraphia.com daihaobiao.com daihing.com daijuchuang.net @@ -27649,7 +27499,6 @@ damatu1.com damddos.com dameisheng.com dameiweb.com -dameiwuxian.com dameng.com damiercapital.com damijing.com @@ -27762,7 +27611,6 @@ danlu.net danmaku.live danmaku.tv danmakupie.com -danmei.la danmi.com danming-ic.com danmo.com @@ -27773,7 +27621,6 @@ danniao.com danotest.com danpin.com danqi.com -dansyx.com danten.org danteng.me dantengge.org @@ -27786,7 +27633,6 @@ danyang.com danzhaoedu.com danzhaowang.com danzhou8.com -danzhoujob.net dao-fu.com dao123.com dao3.fun @@ -27809,7 +27655,6 @@ daodoc.com daododo.com daoduoduo.com daofengdj.com -daogeguke.com daoguo.com daohang198.com daohang4.com @@ -27828,14 +27673,10 @@ daojishiqi.com daokers.com daokeyuedu.com daokoudai.com -daokouren.org -daolang.net daomengad.com -daomengg.com daomengren.com daomicfo.com daomuol.com -daomuxiaoshuo.com daonong.com daopei.net daopub.com @@ -27914,10 +27755,12 @@ dashengpan.com dashengzuji.com dashenquan.com dashentv.com +dashenw.com dashgame.com dashi518.com dashigame.com dashikou.com +dashisx.com dashitech.com dashiyou.com dashu.com @@ -27948,7 +27791,6 @@ datadragon.net dataduoduo.com dataesb.com dataeye.com -datafocus.ai datafun.vip datag.vip datagear.tech @@ -28049,7 +27891,6 @@ daxuejia.com daxuejiayou.com daxuelu.com daxuepc.com -daxueshi.com daxuesoutijiang.com daxuetian.com daxuewang.com @@ -28105,6 +27946,7 @@ dayiwater.com dayong.name dayoo.com dayrui.com +dayscamera.com daysou.com dayspringpharma.com dayss.com @@ -28118,12 +27960,16 @@ dayuanqy.com dayuansouti.com dayuanzong.com dayucdn.com +dayucdntip.com dayue.com dayue8.com dayugame.net +dayugf.com dayugslb.com dayukaoshi.com dayukeji.com +dayulego.com +dayulegobak.com dayungroup.com dayuntongzhou.com dayup.org @@ -28163,7 +28009,6 @@ daztoutiao.com dazuhang.com dazui.com dazuichazi.com -dazuiniu.com dazzle-fashion.com db-cache.com db.ci @@ -28198,6 +28043,7 @@ dbljj.com dbmailserver.com dbmaiyan7.com dbmall.com +dbmeta.net dbnuo.com dbpan.com dbparking.com @@ -28210,7 +28056,6 @@ dbshop.net dbss360.com dbtclub.com dbyun.net -dbzg.net dc-cn.com dc0792.com dc568.com @@ -28228,7 +28073,6 @@ dcdapp.com dcdkjx.com dcdnx.com dcement.com -dcetax.com dcf365.com dcg.microsoft.com dcg123.com @@ -28244,8 +28088,14 @@ dckygroup.com dcloud.io dcloud.xin dcloudlive.com +dcloudlive.net dclouds.cloud +dcloudsp.com +dcloudsp.net dcloudstc.com +dcloudstc.net +dcloudvod.com +dcloudvod.net dclygroup.com dcmagcn.com dcmk17.com @@ -28264,6 +28114,7 @@ dcutp.com dcwucu.com dcxnews.com dcxx.vip +dcxzmxa.com dcybkj.com dcyiyao.com dcyjc.com @@ -28368,7 +28219,6 @@ ddtk.vip ddtsg.com ddtugame.com ddtxgame.com -ddtz7.com ddun.com ddunyun.com ddurl.to @@ -28403,6 +28253,10 @@ ddzuqin.com ddzuwu.com de-ele.com de-moe.org +de-tencentclb.cloud +de-tencentclb.com +de-tencentclb.net +de-tencentclb.work de0.cc de1000.com de123.net @@ -28468,6 +28322,7 @@ deehon.com deemos.com deep-os.com deep56.com +deepblog.net deepcloudsdp.com deepcoin.red deepcool.com @@ -28521,7 +28376,6 @@ deheheng.com deheng.com dehengclinic.com dehenglaw.com -dehongtech.com dehsm.com dehua.net dehuaca.com @@ -28574,7 +28428,7 @@ delonix.group delovabio.com delphi-connect.com delphijiaocheng.com -deltedescostone.com +deltaverse.net delun-group.com delunyk.com deluxewatchbox.com @@ -28622,7 +28476,6 @@ dengxstudio.com deniulor.com denon-proaudio.com denopark.com -densesndysn.com denson168.com dentistshow.com denverokie.com @@ -28702,6 +28555,8 @@ developer.htcvive.com developer.microsoft.com developer.vive.com developers.pub +developwechat.com +developweixin.com develpress.com devemi.com devework.com @@ -28714,12 +28569,12 @@ devops-dev.com devotiongroup.com devourad.com devpss.com -devqinwei.com devsapp.net devsiki.com devskyr.com devtang.com devui.design +devweixin.com devzeng.com deweier.com deweisi.net @@ -28836,7 +28691,6 @@ dfss-club.com dfstw.com dfsyjm.com dftcdq.com -dftq.net dftryy.com dftyyls.com dftzcgs.com @@ -28932,7 +28786,6 @@ dgn.cc dgndf.com dgnekon.com dgnet.net -dgnhqj.com dgnkj.com dgobch.com dgod.net @@ -28952,6 +28805,7 @@ dgrbcj.com dgrcw.com dgrsa.org dgruizhi.com +dgs-td2.com dgsbtjx.com dgsfweb.com dgshifeng.com @@ -28969,7 +28823,6 @@ dgtpcj.com dgtungwah.com dgtuoyue.com dgtzjt.com -dgujayx.com dgw888.com dgwap.com dgweierwj.com @@ -29010,6 +28863,7 @@ dh0580.com dh08126.net dh33660.com dh3t.com +dh5a.com dh5idnf.com dh7373.com dh7999.com @@ -29068,7 +28922,6 @@ dhyjaqa.com dhyz.net dhzfgm.com dhznib.com -di1998.com di1k.com di28nl.com di3ke.com @@ -29150,7 +29003,6 @@ dianli.com dianli08.com dianli100.com dianlinet.com -dianluo-tech.com dianlut.com dianlut.net dianmi365.com @@ -29389,7 +29241,6 @@ dijianggroup.com dijingchao.com dijiuban.com dijiuke.com -dijunsm.com dikalon.com dikeqc.com dili360.com @@ -29491,7 +29342,6 @@ dingtalk.net dingtalkapps.com dingtalkcloud.com dingtangzqx.com -dingtaow.com dingteam.com dingtoo.com dingwei.link @@ -29569,14 +29419,12 @@ dituw.net dituwuyou.com dituyi.com diugai.com -diustou.com diuta.com diuut.com divcss5.com divepai.com diving-fish.com divizg.com -diwenbingxiang.net diwork.com diwuyuan.com dixinkj.com @@ -29595,6 +29443,7 @@ diyicai.com diyidan.com diyidan.net diyidanhao.com +diyiedu.com diyifanwen.com diyifanwen.net diyigaokao.com @@ -29635,6 +29484,7 @@ dj175.com dj193.com dj63.com dj89.com +dj92.cc dj92cc.com dj96.com dj97.com @@ -29660,9 +29510,9 @@ djfensi.com djfj.net djfrj.com djgy.com -djhdfhsdjh256.vip djhxn.com dji.com +dji.ink dji.net djiang.net djiavip.com @@ -29737,7 +29587,6 @@ dksgames.com dkskcloud.com dktzjt.com dku51.com -dkxls.com dky.cc dkybpc.com dkzt.com @@ -29869,7 +29718,6 @@ dmallovo.com dmaow.com dmb168.com dmbcdn.com -dmcbs.com dmcdn.com dmd968.com dmdaili.com @@ -29893,7 +29741,6 @@ dmiug.com dmjk120.com dmjnb.com dmjvip.com -dmlei.com dmm.ink dmmaterial.com dmooo.com @@ -29960,7 +29807,6 @@ dns-diy.com dns-dns.net dns-sky.com dns-url.com -dns-vip.net dns-waf.com dns.com dns.la @@ -29990,11 +29836,25 @@ dnsdaquan.com dnsddos.com dnsdizhi.com dnse0.com +dnse0.net dnse1.com +dnse1.net dnse2.com +dnse2.net dnse3.com +dnse3.net dnse4.com +dnse4.net dnse5.com +dnse5.net +dnse6.com +dnse6.net +dnse7.com +dnse7.net +dnse8.com +dnse8.net +dnse9.com +dnse9.net dnsfamily.com dnsfast.online dnsff.com @@ -30019,6 +29879,12 @@ dnsns6.com dnsnut.com dnsnw.com dnso.fun +dnsoe1.com +dnsoe2.com +dnsoe3.com +dnsoe4.com +dnsoe5.com +dnsoe6.com dnsoray.net dnsour.com dnspai.com @@ -30034,12 +29900,14 @@ dnsrw.com dnss.vip dnssec-poison.xyz dnssina.com +dnstest.vip dnstx88.cc dnsurl.net dnsv1.com dnsv1.net dnsv2.com dnsv2.net +dnsv20.com dnsv3.com dnsv3.net dnsv4.com @@ -30056,6 +29924,16 @@ dnswhk.com dnswind.net dnsx9.cc dnsxdp.com +dnsxv1.com +dnsxv1.net +dnsxv2.com +dnsxv2.net +dnsxv3.com +dnsxv3.net +dnsxv4.com +dnsxv4.net +dnsxv5.com +dnsxv5.net dnsy8888.com dnsyy.net dnszftp.com @@ -30168,7 +30046,6 @@ doitim.com doiua.com doki8.com dolcn.com -dole.club dolfincdnx.com dolfincdnx.net dolfincdnx.top @@ -30407,6 +30284,7 @@ doooor.net door-expo.com dooready.com doorhr.com +doorqr.com doorzo.app doorzo.net doosunggroup.com @@ -30643,7 +30521,6 @@ dp168.com dp2u.com dpanel.cc dpangzi.com -dpbilb.xyz dpc-cn.net dpcafc.com dpcq1.net @@ -30665,6 +30542,7 @@ dpqct.com dpsoidf.com dptech.com dptechnology.net +dptel.com dpurat.com dpw.pub dpwl.net @@ -30753,7 +30631,6 @@ drcg8.com drclvs.com drcnetdns.com drcuiyutao.com -dre8.com dream-loft.com dream-marathon.com dream.ren @@ -30791,10 +30668,10 @@ driverzj.com drivethelife.com drjou.cc drjy6688.com -drkjy.com drlai.com drli.group drlmeng.com +drm-lic-dom.net drm-x.com drmaml.com drockart.com @@ -30842,7 +30719,6 @@ dsdod.com dsdyf.com dseman.com dser.com -dsfdc.com dsfdy.com dsfjh.vip dsfpz.com @@ -30916,7 +30792,6 @@ dtcms.net dtcoalmine.com dtcxw.com dtdcjt.net -dtdog.com dtdream.com dtdxcw.com dtechcn.com @@ -30945,7 +30820,6 @@ dttt.net dtuosh.com dtuyun.com dtwave.com -dtxn.net dtxww.com dtxxjq.com dtysky.moe @@ -31066,12 +30940,10 @@ dulwich.org dumall.com dumanhua.com dumasoftware.com -dumeiwen.com dumi0898.com dumpapp.com dun-mfy-cdn.com dun.la -dun.tax dun555.com dun599.com dunan.net @@ -31093,7 +30965,6 @@ dunzhiwang.com duoao.com duobeiyun.net duobiyi.com -duocaipaint.com duocaish.com duocaitou.com duocengban.org @@ -31178,6 +31049,7 @@ duomicheng.com duominuo.com duomiyou.com duomni.com +duomo3205.xyz duomu.hk duomu.tv duonvlangceo.com @@ -31311,7 +31183,6 @@ dwgszc.com dwgwatch.com dwhhd.com dwhub.net -dwhut.com dwidc.com dwinput.com dwion.com @@ -31397,7 +31268,6 @@ dxszx.com dxton.com dxtradedata.com dxtyy.com -dxuan-robot.com dxuexi.com dxwei.com dxwfgg.com @@ -31411,9 +31281,7 @@ dxycdn.com dxyer.com dxyff.com dxys.pro -dxyxf.com dxyykj.com -dxyzsq.com dxzanzhu.com dxzhz.com dxzk88.com @@ -31454,7 +31322,6 @@ dyedu.net dyemp.com dyets-cn.com dyfc.net -dyfgp.com dyfm200.com dyg-hec.com dygf.com @@ -31469,7 +31336,6 @@ dyhjw.com dyhongshun.com dyhuidong.com dyhxgame.com -dyjdcz.com dyjqd.com dyjqlrj.com dyjs.com @@ -31507,6 +31373,7 @@ dyshf.com dyshortvideo.com dysj.com dysji.com +dyspcdntip.com dysswjt.com dythmy.com dytmgm.com @@ -31590,7 +31457,6 @@ dziuu.com dzjc.com dzjkw.net dzjob.net -dzjrc.com dzkbw.com dzkx.org dzlaa.com @@ -31687,6 +31553,10 @@ e-hongw.com e-hqins.com e-huaxue.com e-icco.com +e-jitp-dom.com +e-jitp-dom.net +e-jitp-glo.com +e-jitp-glo.net e-jjj.com e-jlt.com e-kawai.com @@ -31723,7 +31593,6 @@ e0514.com e0575.com e0734.com e0838.com -e0hhk12.xyz e1.vdowowza.vip.hk1.tvb.com e12345.com e1288.com @@ -31876,7 +31745,6 @@ eastern-tek.com easternalong.com easternpose.com eastforever.com -eastftp.net eastfu.com easthc.com easthome.com @@ -31936,6 +31804,7 @@ easydoc.net easyeda.com easyfang.com easyfapiao.com +easyfunfun.com easygame2021.com easygametime.com easygovm.com @@ -31951,7 +31820,6 @@ easymule.com easynet.vip easypakk.com easypayx.com -easyreadtech.com easyrecovery.cc easyrecovery.net easyrecoverycn.com @@ -32156,6 +32024,7 @@ ecombdpage.com ecombdstatic.com ecombdvod.com ecomoter.com +econtactsplus.com ecool.site ecoplastech.com ecoprint.tech @@ -32185,6 +32054,7 @@ ecspartner.com ecsponline.com ecsxs.com ectdno.com +ectencent.com ectnno.com ectnno.org ectrip.com @@ -32242,10 +32112,36 @@ edgefn.net edgegslb.com edgekey88.net edgemec.com +edgeone-ai-dev.com +edgeone-ai.com +edgeone-browser-rendering-dev.com +edgeone-browser-rendering.com edgeone.ai edgeone.app +edgeone.cool +edgeone.run edgeone.site +edgeonedl1.com +edgeonedl1.net edgeonedy1.com +edgeonedy1.net +edgeonestic1.com +edgeonestic1.net +edgeonetcp1.com +edgeonetcp1.net +edgeonev1.com +edgeonev1.net +edgeonev2.com +edgeonev2.net +edgeonev3.com +edgeonev3.net +edgeonev4.com +edgeonev4.net +edgeonev5.com +edgeonev5.net +edgeonevod1.com +edgeonevod1.net +edgep.net edgesrv.com edhic.com edi198.com @@ -32260,7 +32156,6 @@ edimob.com edingzhuan.com edirect.asia edisec.net -editarumlivro.com editorjianying.com editsprings.com edk24.com @@ -32268,7 +32163,6 @@ edlcaster.com edmcn.net edmseller.com edns.com -edo-bijiben.com edojia.com edong.com edongeejiao.com @@ -32327,7 +32221,7 @@ edujianshe.com edujiaoyu.com edukuang.com edulawonline.com -eduli.net +edulivevideo.com edumail.pub edumine.net edumq.com @@ -32361,7 +32255,6 @@ eduzhixin.com eduzs.net edwiv.com edxmy.cc -edzx.com ee-nav.com ee123.net ee1234.com @@ -32379,6 +32272,7 @@ eecourse.com eecso.com eedevice.com eedns.com +eedzvv.com eee-eee.com eee4.com eeeam.com @@ -32522,7 +32416,6 @@ ehaiwang.com ehang.com ehanglian.com ehangtian.com -ehangxing.com ehaohai.com ehaoyao.com ehaoyao.us @@ -32594,6 +32487,7 @@ eiixx.com eijiucq.com eilieili.cc eimoney.com +einfo-tech.com eingdong.com einkcn.com einsteintiles.com @@ -32638,7 +32532,6 @@ ejustcn.com ejy365.com ek-edu.com ek1ng.com -ekaid.com ekaidian.com ekan001.com ekang99.com @@ -32754,7 +32647,6 @@ elpcon.com elpland.com elpont.net elpsky.com -elpwc.com els001.com elsker.com elsz5.xyz @@ -32787,6 +32679,7 @@ ematong.com emaup.com emax.cc embcom.net +embed-cloudstudio.net embed.cc embedfire.com embedhq.org @@ -32882,6 +32775,7 @@ enbamaoyi.com enbrands.com encthinking.com enderbbs.fun +enderuixm.com endianpp.com endovastec.com endowa-auto.com @@ -32905,7 +32799,6 @@ enflame-tech.com enfodesk.com enforever.com eng24.com -engdvd.com engeniustec.com engeyuan.com engineeringvillage.com @@ -32956,6 +32849,7 @@ ennewpower.com ennews.com ennmt.com ennobay.com +ennocad.com ennovabio.com ennpet.com ennpower.com @@ -32997,16 +32891,42 @@ enwing-tech.com enxicled.com enyamusical.com enzj.com +eo-edgefunctions.com +eo-edgefunctions1.com +eo-edgefunctions2.com +eo-edgefunctions3.com +eo-edgefunctions4.com +eo-edgefunctions5.com +eo-edgefunctions6.com eo-edgefunctions7.com +eo-edgefunctions8.com +eo-edgefunctions9.com +eo-preview.com +eo-shieldspace.com +eo-vod.com +eo-vod1.com +eo-vod2.com +eo-vod3.com +eo-vod4.com +eo-vod5.com +eo-vpcgw.com +eoacc2.com +eoacme-dev.com +eoacme0.com +eoacme1.com +eoacme2.com +eoacme3.com eoaluminium.com eoaoo.com eoeandroid.com eoemarket.com eoemarket.net eoffcn.com +eofreqctrl.com +eofreqctrlbk.com +eogamewechat.com eoivisa.com eojofdrzei4.com -eokhnnam.shop eolce.com eolink.com eolinker.com @@ -33022,12 +32942,12 @@ eoopoo.com eooqoo.com eoouoo.com eoovoo.com -eoozoo.com eoriver.com eorygadw.com eorzea.moe eosantpool.com eoss-hj.com +eovod.com ep-china.net ep-zl.com ep12.com @@ -33050,6 +32970,7 @@ epd3.com epday.com epeaksport.com epeimall.com +epeo.net epermarket.com epesr.com epet.com @@ -33152,7 +33073,6 @@ erentalcarpro.com ereter.com ereuiib.com erfang-ic.com -erg2008.com erg3r.com ergcb.com ergecdn.com @@ -33266,7 +33186,6 @@ esjson.com esk365.com eskedu.com eskimall.com -eskuvoifoto.com eskysky.com eslosity.com eslygroup.com @@ -33289,6 +33208,8 @@ esp8266.com espeedpost.com esplus.club espnlol.com +esports-console.com +esportsreg.com espressif.com esr.com essaystar.com @@ -33337,6 +33258,7 @@ esztyg.com eszwdx.com eszyb.com et-api.com +et-cdn.com et-fine.com et001.com et59.com @@ -33428,7 +33350,10 @@ ett-cn.com ett.cc ettabiotech.com ettbl.org +ettdns.com +ettdns.net ettdnsv.com +ettdnsv.net ettinn.com ettshop.com etu6.com @@ -33449,7 +33374,6 @@ etzqw.com etzzy.com eu-west-0.myhuaweicloud.com eu4cn.com -eu9zx.com eub-inc.com euci-software.com eucure.com @@ -33505,9 +33429,9 @@ evebattery.com evefashion.com evening.me eventown.com +events.pub eveqbow.xyz ever9527.com -everbox.com everbox.net everbright.com everbright21.com @@ -33718,10 +33642,10 @@ expsky.com exquisite-automotive.com exsvc.net ext2fsd.com -extbrand.com extech-sh.com externalcoop.com extfans.com +extqq.com extron-tech.com extscreen.com extstars.com @@ -33740,6 +33664,7 @@ eyangguang.com eyangzhen.com eyao168.com eyaobei.com +eyaodev.xyz eyar.com eyasglobal.com eyasgloble.com @@ -33869,7 +33794,6 @@ f-biology.com f-dou.com f-insight.com f-stack.org -f.biz f.cx f008.com f052.com @@ -33885,13 +33809,11 @@ f1c.lol f1zd.com f24hls-i.akamaihd.net f26.cc -f2dbf.com f2time.com f315.cc f32365.com f3322.net f3322.org -f3knp1j.xyz f41g.com f526.cc f52o04oylrbmfw.com @@ -34206,6 +34128,7 @@ fanpusoft.com fanqiang.com fanqianzhushou.com fanqie.im +fanqiecopyright.com fanqiejiang.net fanqienovel.com fanqieopen.com @@ -34218,7 +34141,6 @@ fanqiesdkpic.com fanqiesdkstatic.com fanqiesdkvod.com fanqietianqi.com -fanqietuan.com fanqievv.com fanqiewin10.com fanqiexitong.com @@ -34291,7 +34213,6 @@ fanyu.com fanyu.work fanyuip.com fanzehua.com -fanzhanqun.com fanzhidu.com fanzhiyang.com fapharm.com @@ -34375,7 +34296,6 @@ fatiao.pro fatieku.com fatier.com fatoan.com -fatu.cc fatvg.com faussefrance.com faussemontrerolex.com @@ -34412,7 +34332,6 @@ fayifa.com fayimen.com fayiyi.com fayufaguo.com -fayunla.com fazhijx.com fazz.fun fb.mu @@ -34437,7 +34356,6 @@ fbyvalve.com fc-adobe.xyz fc-aliyun.xyz fc-smartglobal.xyz -fc-smartsystem.xyz fc0531.com fc0633.com fc169.net @@ -34464,7 +34382,6 @@ fcgasj.com fcgby.com fcgcgs.com fcgdawanmatou.com -fcgdxzs.com fcgfcjy.com fcgfzjy.com fcggsj.com @@ -34639,7 +34556,6 @@ feidee.com feidee.net feidi.com feidiao.com -feidieshuo.cc feidou.com feie.work feierlaiedu.com @@ -34664,7 +34580,6 @@ feihe.com feihe168.com feiheair.com feihengip.com -feihonghb.com feihongtec.com feihu.me feihua.com @@ -34692,6 +34607,7 @@ feimalv.com feimao666.com feimaoweb.com feimaoyun.com +feimawaiqin.com feimayun.com feimooo.com feimosheji.com @@ -34899,6 +34815,7 @@ fengshankeji.com fengshi8888.com fengshigroup.com fengsung.com +fengsutb.com fengtai.tv fengtalk.com fengtao365.com @@ -34936,7 +34853,6 @@ fengzhan.vip fengzhangame.net fengzhao.net fengzigame.com -fengzuj.com fengzusw.com fenha.net fenhong123.com @@ -34970,7 +34886,6 @@ fenxiangdashi.com fenxianglife.com fenxm.com fenxmi.com -fenxs.com fenxuekeji.com fenyu.net fenyucn.com @@ -34983,7 +34898,6 @@ ferlie.net ferlytc.com ferqwo.sbs ferro-alloys.com -fersese.com fescoadecco.com fescoadeccochongqing.com fescoadeccozhejiang.com @@ -35090,6 +35004,7 @@ fhycedu.com fhycs.com fhyx.com fhyx.hk +fhzggame.com fhzl.co fi-play.com fi0.cc @@ -35134,6 +35049,7 @@ fin-shine.com finaleden.com finaltheory.me finance365.com +financetcloud.com financeun.com financialdatamining.com financialstreetforum.com @@ -35253,6 +35169,7 @@ fishyoung.com fit-start.co fit120.net fit2cloud.com +fitgroup.com fitit100.com fitoneapp.com fittentech.com @@ -35347,7 +35264,6 @@ fjii.com fjjcjy.com fjjcled.com fjjianxin.com -fjjltgyl.com fjjnsn.com fjjoyz.com fjjsp01.com @@ -35388,6 +35304,7 @@ fjotic.com fjpca.com fjpcz.com fjpicc.com +fjpit.com fjpta.com fjptdy.com fjptyz.com @@ -35460,12 +35377,10 @@ fjyxdm.com fjyxgl.com fjyy.org fjyyjt.com -fjyysl.com fjzbgf.com fjzikao.net fjzixun.com fjzol.com -fjzsksw.com fjzx.org fjzyxx.com fjzzct.com @@ -35538,7 +35453,6 @@ flikfill.com flintos.com flip.fun fliplus.com -flirtybag.com flleasing.com flmgr.net flml.cc @@ -35753,14 +35667,19 @@ folsomdance.com foneplatform.com fonfu.app fongmong.com -fongser.net fonian.com fonsview.com font.im font6.com +fontgoods.com fontke.com fontong.com fontoohotels.com +fontowns.com +fontsfile.com +fontshow.com +fontvip.com +fontyi.com fonye.com food5.net foodaily.com @@ -35799,6 +35718,7 @@ for68.com forbeschina.com forbetty.com forbuyers.com +forceclouds.com forcecreat.com forcemz.net forcger.com @@ -35884,10 +35804,10 @@ fotosay.com fototuan.com foturn.com fou.net -foumeng.com foumobile.com founder.com founder.net +founderaipu.com founderbn.com founderchip.com foundereagle.com @@ -35912,7 +35832,6 @@ fowep.com fox-studio.net fox008.com foxconn.com -foxconnjob.com foxconnmall.com foxera.com foxirj.com @@ -35948,7 +35867,6 @@ fphs5.com fpi-inc.com fpliu.com fpoll.net -fpplskc.com fpsace.com fpsjk.com fpstt.com @@ -35978,6 +35896,7 @@ fqxdw.com fqxs.org fqxsw.cc fr-trading.com +fr0528.art fr2007.com fractal-technology.com fraeco.com @@ -36057,6 +35976,7 @@ friendeye.com friends-exchange.com friends8.com friendship-match.com +frigate-cn.video fright-tattoo.com fringe-zero.com frisobaby.com @@ -36172,7 +36092,6 @@ fscjkj.net fscm.tech fscmjt.com fscsps.com -fsdaton.com fsdxzhpt.com fsecity.com fseig.com @@ -36200,6 +36119,8 @@ fshuiren.com fshyschool.net fshzg.com fsigc.com +fsight.ai +fsightai.com fsilon.com fsjgchina.com fsjgw.com @@ -36276,7 +36197,6 @@ fszyjx.com ft.tech ft12.com ft22.com -ft3e.com ft98.com fta.dell.com ftaapj.dell.com @@ -36295,7 +36215,6 @@ ftfx.ink fthformal.com fthgz.com fthimalayandb.com -ftiku.com ftium4.com ftlcloud.com ftls.xyz @@ -36374,7 +36293,6 @@ fuguangwater.com fuguantang.com fugui.net fuhai360.com -fuhaikj.com fuhancapital.com fuhanziben.com fuhaoku.com @@ -36495,7 +36413,6 @@ funvba.com funwear.com funxun.com funyard-hotels.com -funyqq.com funzm.com fupanwang.com fupin832.com @@ -36518,6 +36435,8 @@ fusiling.com fusion-inte.com fusion.design fusionappl.com +fusure.com +fusureum.com futa.eu futaike.net futang.org @@ -36533,8 +36452,8 @@ futuniuniu.com futunn.com future-sh.com futureengineer.org +futurenetlab.com futureprize.org -futurescircle.com futurescontest.com futustatic.com fututools.com @@ -36600,7 +36519,6 @@ fuzfu.net fuzhenghos.com fuzhhc.com fuzhimao.com -fuzhou61.com fuzhoufashi.com fuzhuangwang.com fuzhugo.com @@ -36613,7 +36531,6 @@ fw365.online fw4.co fw4.me fwbsjnakjabdname.com -fwccw.com fwcfwg.com fwcranes.com fwcx315.com @@ -36652,7 +36569,6 @@ fxcsxb.com fxcw.com fxdp.com fxe0898.com -fxejy.com fxeyee.com fxeyetips.com fxfbx.com @@ -36704,8 +36620,15 @@ fy35.com fy65.com fy98.com fyaaz.org +fyab.net fyage.com +fyak.net +fyal.net +fyan.net fyapi.net +fyat.net +fyau.net +fyaw.net fybiji.com fybj.net fybjsd.com @@ -36717,6 +36640,7 @@ fyddj.com fyddjys.com fydeos.com fydvtu.com +fyec.net fyeds.com fyeds0.com fyeds1.com @@ -36749,18 +36673,28 @@ fymaduoji.com fymall0.com fymall1.com fymall2.com +fymall3.com fymall4.com +fymall5.com +fymall6.com fymall7.com +fymall8.com fymall9.com fymallqa0.com fymallqa1.com fymallqa2.com fymallqa3.com fymallqa4.com +fymallqa5.com +fymallqa6.com fymallqa7.com +fymallqa8.com fymallqa9.com fynas.com +fynb.net fynews.net +fypage.com +fypt.net fyqyjt.com fyrc.net fyrcbk.com @@ -36819,6 +36753,10 @@ fzddg.com fzdhjy.com fzdmag.com fzdzyun.com +fzec-tencentclb.cloud +fzec-tencentclb.com +fzec-tencentclb.net +fzec-tencentclb.work fzele.com fzengine.com fzentertainment.com @@ -36848,7 +36786,6 @@ fzlft.com fzlizhi.net fzlol.com fzmama.net -fzmeetdecor.com fzmetro.net fzmtr.com fzn.cc @@ -36890,9 +36827,11 @@ g-cores.com g-film.com g-hi.com g-medon.com +g-proxy.com g-spin.com g-tar.com g-var.com +g00gle.vip g052m43e2ghn.com g1080.com g12345.com @@ -36918,7 +36857,6 @@ g59p.com g5h4.com g5kj.com g66667777.com -g6a7qkh.xyz g768r.com g77775555.com g80mx.com @@ -36933,6 +36871,7 @@ ga001.com ga002.com gaaamee.com gaapqcloud.com +gaaptest.com gac-capital.com gac-nio.com gacfca.com @@ -36995,7 +36934,6 @@ galaxy-geely.com galaxy-immi.com galaxyasset.com galaxycarepair.com -galaxydreams.site galaxyfont.com galaxyinfo.com galaxymagnets.com @@ -37012,7 +36950,6 @@ game-props.com game-reign.com game10000.com game112233.com -game1215.com game12315.com game13.com game2.com @@ -37055,6 +36992,8 @@ gamefm.com gamegamept.com gamege.com gameggg.com +gamegocenter.com +gamegocenter.net gamehaopu.com gamehome.tv gameinns.com @@ -37127,7 +37066,6 @@ gangyu.org gangyuan.com ganhao.vip ganhuoche.com -ganhuodaquan.com ganji.com ganjiangrc.com ganjiangvpn.com @@ -37288,7 +37226,6 @@ gaotuxueyuan.com gaowoip.com gaoxiaobang.com gaoxiaodashi.com -gaoxiaoguan.com gaoxiaoit.com gaoxiaojob.com gaoxiaoo.com @@ -37311,6 +37248,12 @@ gaozi365.com gap.hk gapitech.com gapssoe.com +gaqcloud.com +gaqcloud.net +gaqcloud1.com +gaqcloud2.com +gaqcloudbackup.com +gaqcloudbackup.net gara.cc garden-aquarium.com gardencn.com @@ -37348,6 +37291,7 @@ gather-dns.com gatymciu.com gaugan.com gaush.com +gautomator.com gavill.com gavindesign.com gavinzh.com @@ -37474,7 +37418,6 @@ gd-linux.com gd-linux.org gd-ls.com gd-lt.com -gd-ntn.com gd-realfaith.com gd-shenhua.com gd-tianchen.com @@ -37513,7 +37456,6 @@ gdbailin.com gdbainengbao.com gdbaishun.net gdbbk.com -gdbenke.com gdbhnk.com gdbicyclexh.com gdbidding.com @@ -37700,7 +37642,6 @@ gdjydg.com gdjysteel.com gdjyw.com gdjyyy.com -gdk-link.com gdkailin.com gdkcsj.com gdkepler.com @@ -37746,7 +37687,6 @@ gdmusah.com gdmuseum.com gdmzh.com gdmztv.com -gdmzw.com gdnanbo.com gdnbdaqi.com gdnd2016.com @@ -37767,7 +37707,6 @@ gdojbk.com gdokpackaging.com gdolai.com gdomall.com -gdong.com gdou.com gdpace.com gdpdd.com @@ -37837,7 +37776,6 @@ gdsme.org gdsoftpark.com gdsports.net gdsqyg.com -gdsr88.com gdsrcw.com gdssie.com gdsspt.net @@ -37864,6 +37802,7 @@ gdszkw.com gdszsl.com gdszxh.com gdszyjt.com +gdtadx.com gdtaihao.com gdtap.com gdtc.cc @@ -37920,7 +37859,6 @@ gdxdf.com gdxdpg.com gdxdy.com gdxfl.com -gdxianghai.com gdxindun.com gdxinqiang168.com gdxinxiang.com @@ -37975,7 +37913,6 @@ gdzhig.com gdzhonghua.com gdzhongpeng.com gdzhongshan.com -gdzijin.com gdzjdl.com gdzjqy.com gdzp.org @@ -38059,6 +37996,7 @@ geekmaker.com geekman.vip geeknev.com geekpark.net +geekpwn.com geekpwn.org geeksblog.cc geeksman.com @@ -38123,7 +38061,6 @@ geisnic.com geizan.cc gelaha.com gelicang.net -gelics.com geline.net gelinya.com geliqi.net @@ -38141,7 +38078,6 @@ gemelai.com gemii.cc gemini-galaxy.com gemini530.net -geminight.com gemjz.com gemled-tech.com gempharmatech.com @@ -38713,7 +38649,6 @@ gfvip08at.com gfxaa.com gfxcamp.com gfxtr1.com -gfxww.com gfxy.com gfyseed.com gfzihua.com @@ -38722,7 +38657,6 @@ gg-lb.com gg-led.com gg122.net gg1994.com -gg1z.com ggac.net ggaiyan.com ggas.com @@ -38941,7 +38875,6 @@ giftsbeijing.com gifu-pr.com giga-da.com giga-science.com -gigac.com gigaget.com gigbl.com gigpayroll.com @@ -38993,7 +38926,6 @@ gissky.net gistc.com git-repo.info git-star.com -gitbook.net gitcafe.ink gitclone.com gitcode.com @@ -39002,6 +38934,7 @@ gitee.com gitee.io githang.com github-zh.com +github.site githubim.com gitinn.com gitiu.com @@ -39040,6 +38973,7 @@ gjjiaxiao.com gjjnhb.com gjjsbz.com gjkdwl.com +gjl15.com gjlease.com gjmbwxpt.com gjmbwxzx.com @@ -39065,7 +38999,6 @@ gjyfish.com gjyuxiang.com gjyys.com gjzfw.com -gjzsbz.com gjzy.com gk-cn.com gk-net.com @@ -39207,7 +39140,6 @@ glhfsy.com glhmmr.com glhnkj.com glhospital.com -glhrjs.com glhrzx.com glhsylqx.com glhtpcb.com @@ -39251,7 +39183,6 @@ glkgjt.com glkths.com gllcit.com gllfyy.com -gllhbq.com glljsh.com glljy.com gllshan.com @@ -39289,7 +39220,6 @@ globalbaike.com globalbuy.cc globalchangan.com globalcho.com -globalcompressor.com globaletrust.com globalharborec.com globalhardwares.com @@ -39308,6 +39238,7 @@ globalsources.com globalsourcingbiz.com globalstech.com globalston.com +globaltenpay.com globaltradecoo.com globalvisa888.com globalx-nest.com @@ -39361,7 +39292,6 @@ glsytzjt.com glt365.com gltop.com gltsg.com -glttjz.com gltvs.com gltx.tech gltzjt.com @@ -39467,8 +39397,8 @@ gmm01.com gmmicro.com gmmsj.com gmmtcc.com -gmnetworks.net gmoe.cc +gmoj.net gmonline-all.com gmpanel.com gmpbj.com @@ -39585,7 +39515,6 @@ godic.net godida.com godo.pub godoor.com -godoshdo.com godotcn.com godsendcn.com godsheepteam.com @@ -39615,7 +39544,6 @@ gogofly.com gogokid.com gogolinux.com gogooffer.com -gogopzh.com gogoqq.com gogoup.com goherbalfood.com @@ -39635,7 +39563,6 @@ gokuai.com golang8.com golangapi.com golanger.com -golanghome.com golangroadmap.com golangw.com golaravel.com @@ -39689,7 +39616,6 @@ goldstonepack.com goldsunchn.com goldsunmachinery.com goldsupplier.com -goldugold.com goldvole.com goldwaterhk.com goldwind.com @@ -39784,6 +39710,7 @@ gongyelian.com gongyeyun.com gongyeyunwang.com gongyi.la +gongyi.net gongyi.xin gongyichuangyi.net gongyicn.org @@ -39832,7 +39759,6 @@ goodbabygroup.com goodbaike.com goodcang.com goodcloud.xyz -goodcti.com gooddr.com gooddu.com goode-china.com @@ -39875,7 +39801,6 @@ goodwillcis.com goodwillresource.com goodwyee.com goodyoungtea.com -goodzuji.com goofish.com googoc.com googol-power.com @@ -39936,6 +39861,7 @@ goten.com gothe3.com goto-game.com goto-game.mobi +goto-game.net goto-game.org gotobath.com gotocdn.com @@ -40060,6 +39986,7 @@ gpowersoft.com gppapp.com gpqnrc.com gps009.net +gps010.net gps123.org gps16888.com gps8.com @@ -40068,6 +39995,7 @@ gpsgx.net gpslook.net gpsonextra.net gpsoo.net +gpsov.com gpspw.net gpsrcw.com gpsspg.com @@ -40080,6 +40008,7 @@ gptkong.com gpubgm.com gpuez.com gpuztrvt.com +gpxe4.com gpxiv5kew4mvk.com gpxxz.com gpxygpfx.com @@ -40141,7 +40070,6 @@ grandomics.com grandordesign.com grandpharm.com grandqueen.com -grandsail-servomotor.com grandskylightgardenshenzhen.com grandskylightshenzhenguanlan.com grandwaylaw.com @@ -40195,7 +40123,6 @@ greencompute.org greendh.com greenism.net greenits.net -greenjk.com greenlandcn.com greenlandsc.com greenpine.cc @@ -40280,7 +40207,6 @@ gryu.net gryw666.com grzmz.com grzq.com -grzyfey.com gs-cdn.com gs090.com gs12122.com @@ -40318,7 +40244,6 @@ gsgltz.com gsgs10086.com gsgundam.com gshangju.com -gshei.com gshmhotels.com gshmzs.com gshopper.com @@ -40339,6 +40264,7 @@ gskjpt.com gsktraining.com gskwai.com gsl.cc +gslbauto.com gslbdns.com gslbdns.net gslmw.net @@ -40383,7 +40309,6 @@ gsthq.com gstjs.com gstonegames.com gstsz.com -gstzc.com gstzyyy.com gsuus.com gsvws.com @@ -40403,7 +40328,6 @@ gsyth.com gsyxjyw.com gsyygh.com gszhaopin.com -gszkxc.com gszlyy.com gszph.com gszq.com @@ -40445,6 +40369,7 @@ gtfund.com gtg56.com gtgqw.com gtgres.com +gtht.com gthzc.com gti56.com gtibee.com @@ -40636,7 +40561,6 @@ guanglikou.com guanglilvyuan.com guanglingroup.com guanglongsoft.com -guangmamuye.com guangming.com guangmintou.com guangnengquan.com @@ -40654,7 +40578,6 @@ guanguser.com guangwaifu.com guangwei.com guangxi910.com -guangxibaobao.com guangxibiaoxie.com guangxicarbon.com guangxichunhui.com @@ -40666,6 +40589,7 @@ guangxijiazhi.com guangxijinhang.com guangxilindakejimeiliyaoshang.com guangxilonghua.com +guangxima.com guangximinhang.com guangxinengyuan.com guangxipubeihuaheng.com @@ -40683,7 +40607,6 @@ guangxizhutingqi.com guangya-group.com guangyi.net guangyinghj.com -guangyinglvxing.com guangyuancare.com guangyuangroup.com guangyuanjt.com @@ -40696,7 +40619,6 @@ guangzhou-marathon.com guangzhouamc.com guangzhoudazhong.com guangzhougy.com -guangzhoulvyi.com guangzhouxiehe.com guangzhouyibo.com guangzhouyizheng.com @@ -40708,7 +40630,6 @@ guanhejx.com guanhou.com guanhuaju.com guanjiajf.com -guanjilin.com guanjunjg.com guankou.net guankuimjg.com @@ -40722,7 +40643,6 @@ guanngxu.com guanpark.com guanpindiaosu.com guanquanapp.com -guanren11.com guanrenjiaoyu.com guanshanbaodian.com guanshang1998.com @@ -40764,6 +40684,7 @@ guatuwang.com guazhuan.com guazi-apps.com guazi.com +guazi.net guazipai.com guazistatic.com guazixs.com @@ -40825,7 +40746,6 @@ guifanku.com guifeng.net guifun.com guigang688.com -guiganganlan.com guigu.org guigushi2.com guihaikj.com @@ -40841,7 +40761,6 @@ guijob.com guikai888.com guikangmaterials.com guikuan.com -guildgemlab.com guilinaohu.com guilincyjt.com guilinhd.com @@ -40867,7 +40786,6 @@ guinsoft.com guipeibao.com guipin.com guiqingkeji.com -guiququ.com guiqv.com guirong.com guiscn.com @@ -41021,7 +40939,6 @@ guolannewmaterial.com guole.fun guoli.com guolianchem.com -guoliangjie.com guolianglab.org guolin.tech guolisec.com @@ -41048,7 +40965,6 @@ guoqi365.com guoqinwang.com guorentao.com guorongfei.com -guoruiinfo.com guoruijx.com guoshengtech.com guoshi.com @@ -41061,7 +40977,6 @@ guotongglobal.com guoturen.com guotv.com guowai.org -guowaidiaocha.com guoweijt.com guoweistem.com guoweitong.com @@ -41087,7 +41002,6 @@ guoyice.com guoyihuake.com guoyitang.org guoyu.com -guoyuanliang.com guoyue.games guoyuegroup.com guoyuejituan.com @@ -41165,7 +41079,6 @@ guzhang.com guzhangting.com guzhenm.com guzhongtrade.com -guziyy.com guzuci.com guzwiayz.com gvcr9zaemdzh.com @@ -41397,7 +41310,6 @@ gxchengyun.com gxchlrf.com gxchr.com gxchuanghua.com -gxchuangrong.com gxchuanlan.com gxchuen.com gxchunmao.com @@ -41414,7 +41326,6 @@ gxclkj.com gxclzz.com gxcmgr.com gxcmicc.com -gxcmkfm.com gxcncec.com gxcnjx.com gxcodemaker.com @@ -41918,7 +41829,6 @@ gxhztqt.com gxhzxk.com gxhzxw.com gxhzyd.com -gxhzzgx.com gxi.ink gxiang.org gxibvc.net @@ -41999,7 +41909,6 @@ gxjigeyuan.com gxjihu.com gxjinan.com gxjingsheng.com -gxjingu.com gxjinhai.com gxjinhuiauto.com gxjinjiang.com @@ -42019,7 +41928,6 @@ gxjjfds.com gxjjfjt.com gxjjgy.com gxjjh.com -gxjjjs.com gxjjyb.com gxjkamc.com gxjkhj.com @@ -42082,7 +41990,6 @@ gxjunan.com gxjunding.com gxjunhe.com gxjunliang.com -gxjwgd.com gxjxcloud.com gxjxsy.com gxjxwh.com @@ -42197,7 +42104,6 @@ gxlecheng.com gxlek.com gxlelin.com gxlfzl.com -gxlggj.com gxlgwl.com gxlgxx.com gxlh168.com @@ -42237,7 +42143,6 @@ gxllsw888.com gxllxl.com gxlmjt.com gxlmzs.com -gxlongbao.com gxlongfa.com gxlonsen.com gxlove.vip @@ -42297,7 +42202,6 @@ gxlzlk.com gxlzpc.com gxlzsh.com gxlzsmk.com -gxlztc.net gxlztz.com gxlzwl.com gxlzxrmyy.com @@ -42380,7 +42284,6 @@ gxnmzj.com gxnncj.com gxnnclt.com gxnndghb.com -gxnndqt.com gxnnedu.com gxnnfx.com gxnnhexiexinli.com @@ -42398,7 +42301,6 @@ gxnnncp.com gxnnsdyy.com gxnnshjt.com gxnnsmfbl.com -gxnnsng.com gxnnsy.com gxnntfx.com gxnnthch.com @@ -42443,7 +42345,6 @@ gxpgfood.com gxpgft.com gxpggj.com gxpghj.com -gxpgy.com gxphc.com gxphd.com gxphj.com @@ -42486,7 +42387,6 @@ gxqiyuan.com gxqkcm.com gxqljt.com gxqllc.com -gxqlt.com gxqmk.com gxqnjc.com gxqqxcl.com @@ -42518,7 +42418,6 @@ gxrasafety.com gxrayhome.com gxrc.com gxrcda.com -gxrcdl.com gxrcgs.com gxrcosta.com gxrcpx.com @@ -42542,8 +42441,6 @@ gxrnzb.com gxroad.com gxrongpin.com gxrongwang.com -gxrongxin.com -gxrongzheng.com gxrqsjhz.com gxrsjc.com gxrskyy.com @@ -42598,7 +42495,6 @@ gxsgys.com gxshangbeng.com gxshangjia.com gxshanglong.com -gxshangti.com gxshangyou.com gxshanyixing.com gxshbs.com @@ -42656,7 +42552,6 @@ gxsnzw.com gxspas.com gxspri.com gxsq119.com -gxsqmydc.com gxsrkj.com gxsrtz.com gxsrwl.com @@ -42686,7 +42581,6 @@ gxsygg.com gxsyh.com gxsyzs.com gxszf.net -gxszga.com gxszgp.com gxszjf.com gxszjk.com @@ -42729,7 +42623,6 @@ gxtmh.com gxtmhzx.com gxtmrs.com gxtmsy.com -gxtnc.com gxtodo.com gxtonghui.com gxtongji.com @@ -42741,7 +42634,6 @@ gxtp2021.com gxtrwhy.com gxtskq.com gxtslr.com -gxtsny.com gxttcc.com gxttjs.com gxttjt.com @@ -42776,7 +42668,6 @@ gxupdi.com gxups.com gxuzf.com gxvideo.net -gxvmall.com gxvolardda.com gxwanchao.com gxwanchuan.com @@ -42857,7 +42748,6 @@ gxxgrj.com gxxgty.com gxxh58.com gxxhb.com -gxxhcy.com gxxhgj.com gxxhgroup.com gxxhgs.com @@ -42919,7 +42809,6 @@ gxxstz.com gxxsy.com gxxszx.com gxxszy.net -gxxtdt.com gxxtlq.com gxxtzg.com gxxundongtech.com @@ -42974,7 +42863,6 @@ gxyglw.com gxygys.com gxyhdq.com gxyhgcjcxxw.com -gxyhgsgl.com gxyhjgjt.com gxyhjt.com gxyhkaolin.com @@ -43006,7 +42894,6 @@ gxylct.com gxyldfyy.com gxylgyx.com gxylink.com -gxyljd.com gxyljf.com gxyllc.com gxylms.com @@ -43061,7 +42948,6 @@ gxyxjt.com gxyxlx.com gxyxsh.com gxyxtkj.com -gxyxxny.com gxyxyy.com gxyy.net gxyykj.com @@ -43223,7 +43109,6 @@ gyb086.com gybcq.com gybsn.com gybyscy.com -gycfst.com gycharm.com gycode.com gydfsy.com @@ -43292,7 +43177,6 @@ gystarch.com gystars.com gystatic.com gystc.com -gystjt.com gyswzys.com gytcwb.com gytsg.net @@ -43304,7 +43188,6 @@ gywlhypt.com gywxedu.com gywygl.com gyxdkjdl.com -gyxinfang.com gyxtyy.com gyxuan.com gyxww.net @@ -43344,6 +43227,7 @@ gz-shanguang.com gz-spi.com gz-tencentclb.cloud gz-tencentclb.com +gz-tencentclb.net gz-tencentclb.work gz-wx.com gz-xinghe.com @@ -43446,7 +43330,6 @@ gzdli.com gzdqyy.com gzdryy.com gzdsw.com -gzdtc.com gzdtg.com gzduguo.com gzdysx.com @@ -43483,7 +43366,6 @@ gzgcg.com gzgdkq.com gzgdwl.com gzgelandi.com -gzgema.com gzghic.com gzghyy.com gzgj.net @@ -43632,6 +43514,10 @@ gzlushun56.com gzlutong.com gzluxlife.com gzlwrc.com +gzlwycft-tencentclb.cloud +gzlwycft-tencentclb.com +gzlwycft-tencentclb.net +gzlwycft-tencentclb.work gzlyhlawyer.com gzlz307.com gzlzfm.com @@ -43673,6 +43559,10 @@ gznyjj.com gznypfk.com gzocl.com gzomick.com +gzopen-tencentclb.cloud +gzopen-tencentclb.com +gzopen-tencentclb.net +gzopen-tencentclb.work gzoyrr.com gzpaco.com gzpeite.com @@ -43707,7 +43597,6 @@ gzrch.com gzrcqf.com gzrecruit.com gzredpine.com -gzrexin.com gzrh.com gzrishun.com gzrkt.com @@ -43843,6 +43732,10 @@ gzwrjt.com gzwshd.com gzwswjc.com gzwtqx.com +gzwxzf-tencentclb.cloud +gzwxzf-tencentclb.com +gzwxzf-tencentclb.net +gzwxzf-tencentclb.work gzwynet.com gzwzhw.com gzxdd.com @@ -43872,7 +43765,6 @@ gzxyh.com gzxyprint.com gzxzjy.com gzyajs.com -gzyancheng.com gzyangai.com gzybao.com gzycdy.com @@ -43919,7 +43811,6 @@ gzzhanmei.com gzzhitu.com gzzhixin.com gzzhrong.com -gzzhulv.com gzziri.com gzzjgf.com gzzjtx.com @@ -43951,13 +43842,11 @@ h-zl.net h0588.com h0591.com h0758.net -h0fmfp3.xyz h12.net h12345.com h128.com h13.mobi h14z.com -h1jx.com h2-bank.com h2fc.net h2gl.com @@ -44057,6 +43946,7 @@ hack58.com hack6.com hack99.com hackav.com +hacker5t2ohub.com hackerav.com hackernews.cc hackhome.com @@ -44084,6 +43974,7 @@ haeye.net hafei.com hafuyoufk.com hagaozhong.com +hagibis.com haguan.com haguworld.com haha168.com @@ -44170,10 +44061,10 @@ haigoose.com haigouyan.com haigugroup.com haigui001.com -haihelashes.com haihepharma.com haihetour.com haihuainternational.com +haihub.co haihuishou.com haiintelligent.com haijia.org @@ -44227,6 +44118,7 @@ haimin.net haimini.com haimosic.com haina.com +haina.net hainajc.com hainan.com hainan.net @@ -44298,7 +44190,6 @@ haitangmm.com haitangw.cc haitangw.net haitao.co -haitao.com haitaohub.com haitaoj.com haitaolab.com @@ -44319,7 +44210,6 @@ haitou.cc haitou360.com haitoujia.com haituie.com -haituncun.com haitunshenghuo.com haituntui.com haitunvoice.com @@ -44390,6 +44280,7 @@ haizitong.com haiziwang.com haizol.com hajt-cn.com +haju.com hajw.com hajzhyxh.com hakaimg.com @@ -44418,11 +44309,11 @@ halvie.com hamdl.com hamedal.com haminol.com -hamir.net hammypuff.com hamptonboro.com hamu.site han-ju.cc +hanabi-live.com hanamichi.wiki hanas.com hanascitygas.com @@ -44673,7 +44564,6 @@ hao268.com hao280.com hao315.cc hao315.com -hao352.com hao353.com hao360.com hao394.com @@ -44694,7 +44584,6 @@ haoamc.com haoayi.xyz haobangni.com haobangscm.com -haobiaoke.com haobtc.com haocaa.com haocai.com @@ -44846,6 +44735,7 @@ haomai.net haomaikeji.com haomaishe.com haomaishou.com +haomaitong.com haomaizhizao.com haomaku.com haomei-alu.com @@ -44858,7 +44748,9 @@ haomove.com haomzl.com haonames.com haonic.com +haoniu1.com haonongzi.com +haooyuan.com haopeixun.com haopianyi.com haoqdl.com @@ -44957,7 +44849,6 @@ haowusong.com haowutuijian.com haowuyunji.com haoxg.net -haoxiake.com haoxiana.com haoxiangmachine.com haoxiangyundong.com @@ -45127,6 +45018,7 @@ have.ink havefun.im havevisa.com havewo.com +hawagame.com hawanyx.com hawbel.com haweigroup.com @@ -45203,7 +45095,6 @@ hbbyb.com hbbzyys.org hbca110.com hbcbly.com -hbcclaw.com hbccp.org hbccpit.org hbccza.com @@ -45358,7 +45249,6 @@ hbjxad.com hbjxjy.org hbjxjyw.com hbjxym.com -hbjy.cc hbjy.net hbjyjmzg.com hbjzgw.com @@ -45423,7 +45313,6 @@ hbqmys.com hbqndc.com hbqtgg.com hbqydz.com -hbqyl.com hbqyxy.com hbr-caijing.com hbrbmedia.com @@ -45487,7 +45376,6 @@ hbswjt.com hbswkj.com hbswmyyxgs.com hbsxkyy.com -hbsxls.com hbsxly.com hbsxwljt.com hbsxzjw.com @@ -45517,7 +45405,6 @@ hbtycp.com hbtycyjt.com hbtyxh.com hbun.net -hbvjy.com hbvtc.net hbwanhao.com hbwanrun.com @@ -45537,7 +45424,6 @@ hbwuye.com hbww.org hbxcw.com hbxdf.com -hbxfywj.com hbxgzls.com hbxhfc.com hbxhxkj.com @@ -45597,7 +45483,6 @@ hbzszy.net hbztn.com hbzuojia.com hbzyjsjt.com -hbzywh.com hbzzzzw.com hc-byq.com hc-cdn.com @@ -45652,7 +45537,6 @@ hchongren.com hcicloud.com hcinfo.tech hcj1952.com -hcjgy.com hcjt.cc hckg.com hclonely.com @@ -45695,7 +45579,6 @@ hcydit.com hcyea.com hcykt.com hcypzy.com -hcyxxx.com hczc.com hczfgjj.com hczl.com @@ -45762,7 +45645,7 @@ hdhospital.com hdhui.com hditec.com hdj.me -hdjg.net +hdjad.com hdjingwei.com hdjt.net hdjwj.com @@ -45826,7 +45709,6 @@ hdxynet.com hdyanke.com hdyoiuy.com hdyouxi.com -hdytjt.com hdyu.com hdyujiu.com hdyxgame.com @@ -45904,8 +45786,8 @@ hebeijia.com hebeijiaxin.com hebeilyxh.com hebeiminglan.com +hebeimutian.com hebeinongzi.com -hebeinongzi.net hebeisaixin.com hebeishuangning.com hebeisia.com @@ -45930,7 +45812,6 @@ hebitv.com hebiw.com hebjxw.com hebjy.com -hebjy.net hebkjs.com hebl.name hebmj.com @@ -45990,6 +45871,7 @@ hedysx.com heec.com heeeeeh.com heeeepin.com +heemoney.com heenee.com heepay.com heerit.com @@ -46006,7 +45888,6 @@ hehagame.com hehang.net hehecam.com hehecamera.com -hehedianqi.com hehejin.com hehesheng.com heheshouyou.com @@ -46038,7 +45919,6 @@ heigaga.com heightindustry.com heiguang.com heiguang.net -heiguogouqi.net heiha.net heihei.com heiheiyuyin.com @@ -46131,7 +46011,6 @@ hellobanma.com hellobi.com hellobike.com hellobiye.com -hellobtc.com hellocq.com hellocq.net hellodive.com @@ -46167,6 +46046,7 @@ helloworld.net helloxjn.com helloxkb.com helloyao.com +helmicro.com helmtower.com helnon.com helo11.com @@ -46237,7 +46117,6 @@ hengbao.com hengbaochuju.com hengbinzl.com hengbogroup.com -hengchang6.com hengchangda.com hengdafilm.com hengdafuji.com @@ -46310,7 +46189,6 @@ hengyuefund.com hengyulighting.com henha.com henhaoji.com -henizaiyiqi.com henku.com henkuai.com henkung.com @@ -46357,7 +46235,10 @@ herllamo-med.com herllamo.com hermod1.com hero-geek.com +hero.com herocoming.com +heroesports.com +herogame.com herohr.net heroic-ltd.com heroje.com @@ -46407,7 +46288,6 @@ heu8.com heungkong.com heuvan.com hewaner.com -hewanyao.com hewascreen.com heweather.com heweather.net @@ -46464,7 +46344,6 @@ heyix.com heymeo.net heymeowfm.com heymore.com -heymuer.com heyou51.com heyplus.com heyria.com @@ -46486,11 +46365,11 @@ heyun100.com heyunnet.com heywhale.com heywoodsminiprogram.com +heyyo.com heyyouyu.com hez70.com heze.cc hezebus.com -hezefc.com hezegd.com hezejob.com hezejtjt.com @@ -46536,8 +46415,11 @@ hfchosp.com hfchzyy120.com hfcsbc.com hfdaoyuan.com -hfdedu.com hfdsgs.com +hfeec-tencentclb.cloud +hfeec-tencentclb.com +hfeec-tencentclb.net +hfeec-tencentclb.work hffhgc.com hffhq.com hffoil.com @@ -46584,7 +46466,6 @@ hfplg.com hfpx.cc hfqgmagnet.com hfqinhang.com -hfqsm.com hfray.com hfrc.net hfrcbc.com @@ -46599,19 +46480,16 @@ hfspxh.com hfssw.com hfsszgcxh.com hfswcz.com -hfsxkj.com hft-sz.com hftfund.com hfthink.com hftogo.com hftsoft.com hftx-jt.com -hftxfhm.com hfw.cc hfx.net hfxcfiberoptic.com hfxczj.com -hfxg.net hfyestar.com hfykd.com hfykt.com @@ -46635,7 +46513,6 @@ hg12333.com hg2693.com hg5177.com hg568.com -hg87.com hg8880.org hg9895.com hga994.com @@ -46644,7 +46521,6 @@ hgcapsule.com hgcha.com hgchess.com hgcitech.com -hgcmq.com hgepc.com hgfdrf.com hghngroup.com @@ -46657,13 +46533,10 @@ hgj668.com hgjart.com hgjl.net hgjob.com -hgjx.com -hgjypx.com hgk-group.com hglaser.com hgmai.com hgmri.com -hgmsjt.cc hgnc.net hgo06070uyi.com hgo06071uyi.com @@ -46690,6 +46563,7 @@ hguduo.com hgvalve.com hgxxgz.com hgxxgz.net +hgyrnk.com hgyys.com hgzcjt.com hgzk.com @@ -47011,6 +46885,8 @@ himetoo.com himile.com himin.com himmpat.com +himoral.com +himorale.com himorfei.com hin.cool hinabian.com @@ -47083,6 +46959,7 @@ hitalk.com hitalkers.com hitao.com hitbot.cc +hitctf.com hite.me hitechfrp.com hiteksoft.com @@ -47117,7 +46994,6 @@ hiwbb.com hiwechats.com hiweixiu.com hiwelcom.com -hiwemeet.com hiwiyi.com hiworld.com hiwuhuan.com @@ -47219,13 +47095,15 @@ hjzzcl.com hk-island.hk hk-jztzjt.com hk-sz.com +hk-tencentclb.cloud hk-tencentclb.com +hk-tencentclb.net +hk-tencentclb.work hk-titan.com hk-vstart.com hk-xin.com hk.uy hk0523.com -hk2875.com hk603.hk hk8668.com hkaco.com @@ -47269,7 +47147,6 @@ hkgtedu.com hkgwater.com hkhdsyxx.com hkinsu.com -hkjapp.com hkjinxin.com hkjnn.com hkjsrent.com @@ -47375,13 +47252,11 @@ hljiasen.com hljjjb.com hljjkfp.com hljjytkj.com -hljnzy.net hljpm.com hljpost.com hljradio.com hljrcc.com hljsdm.com -hljsek.com hljsjtzy.com hljsph.com hljszjxhw.com @@ -47468,7 +47343,6 @@ hmcl.net hmdx.net hmedu.com hmeili.com -hmervjk.com hmf-china.com hmfxw.com hmgbtv.com @@ -47491,7 +47365,6 @@ hmqg.com hmqjsb.com hmrczp.com hmrsrc.com -hmsem.com hmsemi.com hmszkj.com hmtgo.com @@ -47517,14 +47390,12 @@ hmzs.net hmzx163.com hn-binglang.com hn-cbec.com -hn-fa.com hn-hwqjxh.com hn-medical.com hn-xqlhw.com hn0746.com hn165.com hn21z.com -hn4nn.com hn8868.com hn96520.com hn9mu.com @@ -47728,7 +47599,6 @@ hnmdtv.com hnmfbw.com hnmgjr.com hnming.com -hnmjjt.net hnmjyy.com hnmks.com hnmlqianpan.com @@ -47784,6 +47654,7 @@ hnredcross.com hnrich.net hnrmb.com hnrmtjg.com +hnrmzy.com hnrpc.com hnrsks.com hnrszhjc.com @@ -47824,7 +47695,6 @@ hnsong.net hnsqtg.com hnsrmyy.com hnsrmyy.net -hnssg.com hnssjn.com hnssyxx.com hnst.org @@ -47902,13 +47772,13 @@ hnxhyl.com hnxingda.com hnxljkj.com hnxmht.com -hnxtjyxy.com hnxtkg.com hnxttv.com hnxunch.com hnxuntang.com hnxxc.com hnxxyz.com +hnxzctec.com hnyanglao.com hnyaoshan.com hnyaosi.com @@ -47984,7 +47854,6 @@ hobbyboss.com hobosgroup.com hocheymed.com hochitech.com -hockinghillshomestead.com hocode.com hocodo.com hodgen-china.com @@ -48067,7 +47936,6 @@ homekoocdn.com homelandhotel.com homelandol.com homesir110.com -hometeda.com hometex114.com hometexjoin.com hometexnet.com @@ -48105,6 +47973,7 @@ hongbizi.org hongbo-group.com hongbo-sh.com hongbo100.com +hongboluo.com hongcesys.com hongchangpawn.com hongchisw.com @@ -48116,7 +47985,6 @@ hongdamach.com hongdatec.com hongdaym.com hongdefund.com -hongdezk.com hongdian.com hongdianfund.com hongdongpumps.com @@ -48125,7 +47993,6 @@ hongdoufm.com hongdoulive.com hongen.com hongfasi.net -hongfeihr.com hongfengye.com hongfuloi.com hongganshebei.net @@ -48253,7 +48120,6 @@ hongyantruck.com hongyaomall.com hongyawang.com hongyejixie.com -hongyewangluo.com hongyewuyang.com hongyi5.com hongyikun.com @@ -48269,7 +48135,6 @@ hongyugroup.com hongyugz.com hongyumedical.com hongyunduo.com -hongyunlaowu.com hongyunsheng.com hongyuntx.com hongyunvren.com @@ -48310,7 +48175,6 @@ hooan.net hoodinn.com hoodong.com hooenergy.com -hoogg.com hooh5.com hookan.com hoolai.com @@ -48347,6 +48211,7 @@ hopexr.com hophingfood.com hopoot.com hopsontong.com +horace-liu.com horain.net horan.cc horchips.com @@ -48401,6 +48266,9 @@ hospitalshy.com hospitalstar.com hospite.com host888.net +hostacc.net +hostacc1.com +hostacc2.com hostadm.net hostbbs.net hostbuf.com @@ -48470,7 +48338,6 @@ houdao.com houdao.net houdask.com houdewl.com -houdong999.com houdy.com houfaka.com houfangyiyao.com @@ -48512,7 +48379,6 @@ houzhiwang.com houzi8.com houzislkdjfkldsdsd.com hovfree.com -howardwchen.com howbuy.com howeipharm.com howelllighting.com @@ -48565,7 +48431,6 @@ hprx.com hps-sh.com hpstore-china.com hpstore.cc -hpswk.com hptea.com hpv112.com hpwin.com @@ -48579,7 +48444,6 @@ hq-mart.com hq-minerals.com hq0564.com hq114.net -hq1388.com hq2011.com hq88.com hqbd.com @@ -48709,10 +48573,9 @@ hrbzhsd.com hrbzyy.com hrcf168.com hrcfc.com +hrcwelink.com hrday.com hrddqc.com -hrdhej.xyz -hrdnkj.com href.lu hrenh.com hrexam.com @@ -48773,7 +48636,6 @@ hsbank.cc hsbbs.com hsbdc.com hsbianma.com -hsbiao.com hscarbonfibre.com hscbw.com hscc.com @@ -48839,6 +48701,7 @@ hspfmz.com hspharm.com hspm.net hspress.net +hsqh.net hsqhfunds.com hsqhospital.com hsqjfw.com @@ -48851,7 +48714,6 @@ hsrjtk.com hsrtd.club hssdk.com hssdtest.com -hssemi.com hssenglish.com hssjyj.com hsskyy.com @@ -48968,7 +48830,6 @@ htjob.net htjs.net htjsq.com htjsq.mobi -htjy.net htkaoyan.com htknow.com htky365.com @@ -49038,7 +48899,6 @@ htyunwang.com htzdj.com htzdznjs.com htzhgd.com -htzhibing.com htzipr.com hu.com hua-chips.com @@ -49063,7 +48923,6 @@ huabanimg.com huabanpro.com huabbao.com huabeicw.com -huabeishiyou.com huabian.com huabianyl.com huabke.com @@ -49188,6 +49047,7 @@ huajia.cc huajiakeji.com huajialishe.com huajian-al.com +huajiangai.com huajiankang.com huajianmed.com huajiantong.com @@ -49422,7 +49282,6 @@ huaruidns.com huaruisales.com huas.co huash.com -huashan-neurosurgery.com huashangcbbtv.com huashangedu.com huashanglawyer.com @@ -49615,7 +49474,6 @@ huayuhua.com huayulandmarkhotel.com huayun.com huayunfl.com -huayunyy.com huayuzj.com huazhangautomation.com huazhanggroup.com @@ -49676,6 +49534,7 @@ huceg.com huceo.com huchaowei.com hucheng100.com +huchihuchi.com hudai.com hudong.com hudong100.com @@ -49868,7 +49727,6 @@ huimin111.com huimincz.com huimingcn.com huimingjia.com -huiminshop.com huimwang.com huinaimei.com huing.net @@ -49876,6 +49734,7 @@ huinkj.net huion.com huiqia.net huiqianfan.com +huiqibaike.com huiqiyidiantong.com huiqiyu.com huiqk.com @@ -49942,7 +49801,6 @@ huiweikeji.com huiwenda.com huiwenjidian.com huiwww.com -huixiang360.com huixianginvest.com huixiangtiandi.com huixiaoer.com @@ -50003,7 +49861,6 @@ huizhou-marathon.com huizhouf.com huiziyuan.net huizone.com -huizuanshi.com huizuche.com huizucloud.com huizuoyuezi.com @@ -50060,6 +49917,7 @@ humengyun.com humensec.com huming.com hummcars.com +humpline.com hunaen.com hunan-changda.com hunan-huasheng.com @@ -50162,6 +50020,7 @@ huohuacdn.com huohuahudong.com huohudun.com huohuo.com +huoideas.com huoji.com huojiaba.com huojitui.com @@ -50285,6 +50144,7 @@ hutaow.com hutegy.com hutew.com hutong-school.com +hutong360.com hutongcdn.com hutoufeng.net hutui9.com @@ -50546,14 +50406,11 @@ hxtk.com hxtrip.com hxtxxw.com hxtzgroup.com -hxweb.net hxwglm.com hxwzhs.com hxx.net hxxkw.org hxxl6.com -hxxlm.com -hxycxx.com hxyd.cc hxydup.com hxyjw.com @@ -50592,11 +50449,9 @@ hyaimed.com hyakkaryouran.date hyb2b.com hybase.com -hybbs.com hybbs.net hybbtree.com hybssy.com -hybzm.com hyc.com hyccw.com hycdn.com @@ -50610,7 +50465,6 @@ hydbest.com hydcd.com hyddd.com hydesolar.com -hydfgj.com hydst.com hydun.com hydz999.com @@ -50723,7 +50577,6 @@ hytzqb.com hyundai-chhm.com hyundai-hmtc.com hyuuhit.com -hyuvpw.com hywater.net hywaternet.com hywh1999.com @@ -50818,7 +50671,6 @@ hzcables.com hzcbparking.com hzcbs.com hzccb.net -hzccnet.com hzcctech.com hzcd120.com hzcda.com @@ -50832,7 +50684,6 @@ hzchaoxiang.com hzchengdun.com hzchengdun.net hzchgj.com -hzcjjd.com hzcjtz.com hzcmc.com hzcmdq.com @@ -50862,6 +50713,10 @@ hzdsrmyy.com hzdtv.tv hzdx.com hzebang.com +hzec-tencentclb.cloud +hzec-tencentclb.com +hzec-tencentclb.net +hzec-tencentclb.work hzecsemir.com hzeeec.com hzeg.com @@ -51171,7 +51026,6 @@ hzxddt.com hzxded.com hzxdfpr.com hzxdship.com -hzxhgy.com hzxiangbin.com hzxiangshang.com hzxiaoya.com @@ -51380,6 +51234,8 @@ iamlm.com iamshuaidi.com iamsujie.com iamtxt.com +iamvloger.com +iamvlogger.com iamwr.com iamxcb.com iamxiaoming.net @@ -51454,7 +51310,9 @@ ibb2b.com ibbwhat.com ibcet.org ibczy.com +ibdxiguaimg.com ibdxigualive.com +ibdxiguastatic.com ibdxiguavod.com ibeidiao.com ibeifeng.com @@ -51780,6 +51638,7 @@ icourse163.org icourses163.com icourses163.org icourt.cc +icp.red icp100.net icp21.com icpapi.com @@ -51788,6 +51647,8 @@ icpcw.com icpdaili.com icpdf.com icpeexpo.com +icpenguin.com +icpenguin.net icphu.com icpisp.net icpkuaiban.net @@ -51813,6 +51674,7 @@ ictbda.com ictcsr.org ictdns.cloud ictdns.fun +ictdns.icu ictdns.store ictdns.tech ictehi.com @@ -51975,7 +51837,6 @@ idocv.com idodb.com idol001.com idolmoba.com -idolyx.com idom.me idong.ren idongde.com @@ -52156,11 +52017,13 @@ ifireflygame.com ifish7.com ifitbox.com ifjing.com +ifjqq.com ifkeji.com ifkz256x3p.com iflix.com iflow.work iflowercity.com +iflyadx.com iflyaiedu.com iflyauto-solution.com iflydatahub.com @@ -52247,7 +52110,6 @@ igome.com igomkt.com igoodgame.com igooma.com -igoomall.com igou.com igoyx.com igps123.com @@ -52262,6 +52124,7 @@ igtm-c101.com igtm-d101.com igtm-e101.com igtm-meeting-tencent.com +igtm-yuanbao.com igtm.pub iguaka.com iguangdiu.com @@ -52291,7 +52154,6 @@ ihaitiao.com ihaiu.com ihaiyan.com ihanbridge.com -ihang360.com ihanghai.com ihanhua.com ihani.tv @@ -52304,6 +52166,7 @@ ihaoxi.com ihaozhuo.com ihappy.vip ihappystudio.com +ihappystudio.net ihasl.com ihdt.tv ihdty.com @@ -52378,6 +52241,7 @@ ihx.cc ihxlife.com ihying.cc ihykb.com +ihypnus.com ihypo.net ihytv.com ihzzy.com @@ -52440,7 +52304,6 @@ iiwoo.com iiycy.com iiyi.com iiyiyi.com -ijac.net ijatv.com ijh.cc ijheng.com @@ -52461,11 +52324,11 @@ ijingdi.com ijinshan.com ijinzhuan.com ijishu.cc -ijiujiao.com ijiwei.com ijiwen.com ijizhi.com ijjnews.com +ijkxt.com ijml.net ijnqc.com ijovo.com @@ -52506,7 +52369,6 @@ ikcw.com ikdmjx.com ike-global.com ikebukuro777.org -ikeguang.com ikeled.com ikemeng.com ikepu.com @@ -52560,6 +52422,7 @@ ilaw13.com ilaw66.com ilawpress.com ilazycat.com +ilcweloc.com ileadsun.com ileapcloud.com ileci.com @@ -52591,7 +52454,6 @@ iliutu.com ilivehouse.com ilixiangguo.com iliyu.com -ilkeji.com illl.xyz ilmgq.com ilohas.com @@ -52636,6 +52498,7 @@ imaegoo.com image-tech.vip imageaccelerate.com imageedu.com +imagefuture101.com imagehub.cc imagelol.com imageoss.com @@ -52681,7 +52544,10 @@ imcclinics.com imcec.org imchinese.net imcn.me +imcome.net +imcoming.com imconlinereg.com +imcq.net imd-marketing.com imdadui.com imdmedical.com @@ -52784,6 +52650,7 @@ imlaidian.com imlazy.ink imlb2c.com imlianai.com +imlianpu.com imliuyi.com imlizhi.com immeee.com @@ -52809,6 +52676,7 @@ imoeer.com imoemh.com imofan.com imoffice.com +imok.net imok.run imoke.org imolive.tv @@ -52840,6 +52708,7 @@ improve-medical.com impta.com imqianduan.com imqq.com +imqq.net imquzan.com imrfresh.com imrobotic.com @@ -52895,6 +52764,10 @@ in-driving.com in-en.com in-freight.com in-int.com +in-tencentclb.cloud +in-tencentclb.com +in-tencentclb.net +in-tencentclb.work in.th in001.com in66.com @@ -53007,7 +52880,6 @@ infuseku.xyz infyniclick.com infzm.com ing10bbs.com -ing2ing.com ingageapp.com ingags.com ingaoyt.biz @@ -53033,11 +52905,14 @@ ininin.com initcc.com initff.com initialview.com +initjj.com initkk.com initpp.com +initqq.com initroot.com initrr.com initvv.com +initxb.com initxx.com inja.com injectionmachine.com @@ -53158,6 +53033,7 @@ intelligen.ltd intelligence-electricity.net intelligentmanufactory.com intelvisioncn.com +intencent.com inter-credit.net inter-rock.com inter1908.net @@ -53221,6 +53097,7 @@ inzone-auto.com inzotek.com ioa365.com ioage.com +ioasaas.com iocrest.com ioe-times.com iofange.com @@ -53236,19 +53113,19 @@ ioioz.com iok.la iol8.com ioms.cc +ionchi.com ioncol.com ioneball.com ionewu.com iongentherapeutics.com iooeoo.com -iooiooi.com iooqoo.com +ioozu.com iop.org iopenhec.com iophthalmology.net iopiopl.com ioppo.net -ioqoo.com iorca.net iornnl.xyz ios-auto.net @@ -53282,6 +53159,7 @@ iotmag.com iotmore.com iotmrvr.com iotpai.com +iotrix.net iotronic.tech iotrouter.com iots.vip @@ -53304,10 +53182,12 @@ ip.la ip008.com ip138.com ip159.com +ip181.com ip192.com ip33.com ip3366.net ip518.com +ip6.plus ip66.com ip66.net ip669.com @@ -53390,7 +53270,6 @@ iplay365.com iplaypy.com iplaysoft.com iplcn.com -iplcnetwork.com iplusmed.com ipmay.com ipmi.cc @@ -53413,6 +53292,7 @@ ipqcrhf.com ipr007.com ipr114.net ipr123.com +iprabc.com iprchn.com iprdaily.com iprdp.net @@ -53424,6 +53304,7 @@ iprun.com ips.com ips8.com ipsebe.com +ipshu.com ipshudi.com ipsmap.com ipssh.net @@ -53436,6 +53317,7 @@ ipuer.com ipuu.net ipv4.host ipv4dns.com +ipv6-only.com ipv6dns.com ipv6radar.com ipv6testingcenter.com @@ -53475,6 +53357,7 @@ iqiyiedge.com iqiyiedge.net iqiyih5.com iqiyipic.com +iqmie.com iqnew.com iqoo.com iqr.cc @@ -53557,7 +53440,6 @@ irukou.com irunner.mobi iryoucai.com is-programmer.com -is00g.com is36.com is404.com isa-hsse.com @@ -53631,7 +53513,6 @@ ishowchina.com ishowx.com ishubao.org ishugui.com -ishuhui.com ishuhui.net ishuirong.com ishuiyun.com @@ -53648,7 +53529,6 @@ isiabio.com isign.ren isigqno.com isigu.com -isijiu.com isilent.me isilicontech.com isiluke.net @@ -53716,7 +53596,7 @@ issjj.com issks.com ist-zl.com istcw.com -istimer.com +istoreos.com istpei.com istrongcloud.com istrongcloud.net @@ -53739,7 +53619,6 @@ iswbm.com isweek.com iswifting.com iswweb.com -iswx.net isxtv.com isyour.love it-bound.com @@ -53822,7 +53701,7 @@ itczh.com itdabao.com itdai.com itdayang.com -itdcw.com +itddo2page.com itdevnow.com itdks.com itdog-dns.com @@ -54084,7 +53963,6 @@ iwanbei.com iwanboy.com iwangding.com iwangnan.com -iwangzha.com iwanoutdoor.com iwanshow.com iwanws.com @@ -54115,6 +53993,7 @@ iwhalecloud.com iwhqmk.com iwhr.com iwhr.org +iwiki.com iwin10.net iwingchina.com iwiscloud.com @@ -54133,7 +54012,6 @@ iwshang.com iwte-expo.com iwteexpo.com iwuchen.com -iwulei.com iwurexs.info iwurexs.net iwurexs.org @@ -54200,6 +54078,7 @@ ixzgkzps.com ixzzcgl.com iy-cd.com iy51.com +iyamusic.com iyangxi.com iyaou.com iyatt.com @@ -54459,6 +54338,7 @@ javazhiyin.com javazx.com javbuy.xyz javier.io +jawouue.com jaxcx.com jay.tg jaya.cc @@ -54497,7 +54377,6 @@ jbpmhk.com jbpzs.com jbryun.com jbs-kj.com -jbsd008.com jbsmartcity.com jbsx88.com jbt.ink @@ -54505,7 +54384,6 @@ jbtlj.com jbtxy.net jbwave.com jbwtm.com -jbxc.net jbxy.com jbyy120.com jbzj.com @@ -54533,6 +54411,7 @@ jcashore.com jcbjbcak.com jcbmt.com jcbq.net +jccchina.com jcceram.com jccinema.com jccjtwl.com @@ -54555,7 +54434,6 @@ jchl.com jchla.com jchunuo.com jchxmc.com -jcikf.com jcjjwx.com jcjmhj.com jckjsc.com @@ -54744,7 +54622,6 @@ jddtv.com jddyl.com jdedu.net jdemall.com -jdf999.com jdface.com jdfair.com jdfcloud.com @@ -54772,7 +54649,6 @@ jdindustry.com jdis.org jdiy.club jdjgq.com -jdjiaxiao.com jdjingmai.com jdjinrong.com jdjob88.com @@ -54793,7 +54669,6 @@ jdnews.net jdon.com jdpay.com jdpaydns.com -jdphone.net jdplay.com jdpta.com jdpz44.com @@ -54910,6 +54785,7 @@ jereh-network.com jereh.com jerei.com jeremycn.com +jerpx.com jerryzou.com jescard.com jesdatools.com @@ -54922,7 +54798,6 @@ jestq.com jet-ego.com jet-logistics.com jet-ok.com -jet-rf.com jetechtool.com jetgroup-cn.com jetgroup-nb.com @@ -54955,7 +54830,6 @@ jf9p.com jfagroup.com jfbcb.com jfbuilding.com -jfcdns.com jfchinese.com jfcjt.com jfcoo.com @@ -54976,7 +54850,6 @@ jfrogchina.com jfrschool.com jfsc.com jfshare.com -jfsmgs.com jfstatic.com jftech.com jftianshancn.com @@ -55025,9 +54898,7 @@ jguo.com jgxb120.com jgxzy.com jgy.com -jgyee.com jgyljt.com -jgyllh.com jgyun.net jgzx.org jgzyw.com @@ -55035,7 +54906,6 @@ jh-dzcl.com jh-sh.com jh-trace.com jh-uav.com -jh011.com jh0516.com jh3737.com jh3j.com @@ -55119,7 +54989,6 @@ jhytech.com jhyusqo.com jhyz.net jhzdhjt.com -jhzgwx.com jhzhizao.com jhzhkj.com jhzhuji.com @@ -55128,7 +54997,6 @@ jhzs.work ji-pai.com ji-zhun.com ji.ci -ji36.net ji7.com jia.com jia12.com @@ -55235,7 +55103,6 @@ jiameidental.com jiameigj.com jiameng.com jiamengbang.net -jiamengdp.com jiamengfei.com jiamens.com jiami110.com @@ -55417,9 +55284,6 @@ jianpu99.net jianpuku.com jianpuw.com jianq.com -jianqi88.com -jianqi88.mobi -jianqi88.net jianqiaochina.com jianqimao.com jianqiyl.com @@ -55534,7 +55398,6 @@ jiapu.tv jiapuvip.com jiaqiangban.com jiaqianglian.com -jiaqianlee.com jiaren.org jiarendress.com jiarenrecycle.com @@ -55546,6 +55409,7 @@ jiasale.com jiasaw.com jiashejianyan.com jiashengguangdian.com +jiashida5618.com jiashiguoji168.com jiashuangkuaizi.com jiashuba.com @@ -55555,7 +55419,6 @@ jiass.cc jiasu.work jiasubook.com jiasucai.com -jiasufei.com jiasuhui.com jiasule.com jiasule.net @@ -55581,6 +55444,7 @@ jiawuzi.com jiaxianggame.com jiaxianghudong.com jiaxiangxm.com +jiaxiao.pub jiaxiao100.com jiaxiaozhijia.com jiaxiaozhilian.com @@ -55671,6 +55535,7 @@ jiechengcehui.com jiechengcloud.com jiechikeji.com jiechuang.com +jiedaibao.gs jiediankeji.com jiefadg.com jiefanglinli.net @@ -55726,7 +55591,6 @@ jierengz.com jieri2.com jierili.com jieruchaosheng.com -jieruitech.info jiese.org jiesen365.com jieshangwei.com @@ -55802,7 +55666,6 @@ jiimore.com jijia.com jijiaerp.com jijiagames.com -jijian.link jijiang5.com jijiangep.com jijianzhineng.com @@ -55810,6 +55673,7 @@ jijiaoyu.com jijidi.com jijie168.com jijigugu.club +jijijijin.com jijing.site jijinhao.com jijitec.com @@ -55981,7 +55845,6 @@ jingdaka.com jingdapcb.com jingdata.com jingdeyx.com -jingdianhuayu.com jingdianju.com jingdianlaoge.com jingdianxitong.com @@ -56002,7 +55865,6 @@ jinggong-auto.com jinggongvalve.com jingguan.ai jinggui.com -jinggumofang.com jinghaishop.com jinghangapps.com jinghesh.net @@ -56056,7 +55918,6 @@ jingmiguangliangg.com jingmiliangju.com jingnei.net jingnengpower.com -jingningsms.com jingoal.com jingos.com jingpai.com @@ -56236,7 +56097,6 @@ jinmixuetang.com jinmogame.com jinmuinfo.com jinnong.cc -jinnun.com jinpacs.com jinpai365.com jinpanlab.com @@ -56250,7 +56110,6 @@ jinqiangjc.com jinqianguan.com jinqianma.com jinqiaojob.com -jinqiaolian.com jinqiaopu.com jinqiexia.com jinqigroup.com @@ -56260,10 +56119,8 @@ jinqiunc.com jinqiuzhu.com jinquanpharm.com jinqunla.com -jinqunnet.com jinr.com jinri.red -jinridandong.com jinridiaoyu.com jinriguanzhu.cc jinrilife.com @@ -56481,6 +56338,7 @@ jitangcn.com jitao.tech jitapai.com jitapu.com +jitapuji.com jitashe.org jitavip.com jitetech.com @@ -56536,7 +56394,6 @@ jiujiange.com jiujiangjx.com jiujipos.com jiujiuhuyu.com -jiujiuyong.com jiujiuyunhui.com jiujiuzu.com jiujun.net @@ -56576,7 +56433,6 @@ jiusanedu.com jiuse.cloud jiuse2.cloud jiuse3.cloud -jiushechi.com jiushengas.com jiushiadx.com jiushigong.com @@ -56652,6 +56508,7 @@ jixiang-ht.com jixiang-tech.com jixiang800.com jixiangjili.com +jixiangnh.com jixiangyou.com jixianku.com jixiao100.com @@ -56704,7 +56561,6 @@ jizhida.com jizhihd.com jizhihezi.com jizhimobi.com -jizhiyingxiao.net jizhiyouke.com jizhouyoupin.com jizhuba.com @@ -56751,7 +56607,6 @@ jjeglobal.com jjfinder.com jjfuzu.com jjg630.com -jjglobal.com jjgsxc.com jjh11.com jjhb.com @@ -56766,7 +56621,6 @@ jjidc.com jjiehao.com jjinfo.com jjisp.com -jjj.ee jjj555.com jjjaaa.com jjjcjt.com @@ -56872,6 +56726,10 @@ jkqdl.com jkqingman.com jkrcw.net jksdhgu.com +jkt-tencentclb.cloud +jkt-tencentclb.com +jkt-tencentclb.net +jkt-tencentclb.work jktcom.com jktong.com jktower.com @@ -57140,6 +56998,10 @@ jndssd.com jndvisa.com jndwyy.com jndzx.com +jnec-tencentclb.cloud +jnec-tencentclb.com +jnec-tencentclb.net +jnec-tencentclb.work jnesc.com jnexpert.com jnfx.com @@ -57207,7 +57069,6 @@ jnxtzdh.com jnxydefsxx.com jnyczx.com jnydgm.com -jnyjfdz.com jnyng.com jnyyjt.com jnzcsyj.com @@ -57240,7 +57101,6 @@ job2299.com job250.com job263.com job36.com -job4ee.com job510.com job5156.com job5588.com @@ -57291,7 +57151,6 @@ jocund-gift.com jodoll.com joe92.com joessem.com -jogjamedianet.com johhan.com johnlz.com johnmedia.com @@ -57323,7 +57182,6 @@ joinwee.com jojo000.vip jojoread.com jojoreading.com -jojy.net joke66.com jokecommunity.com jokecommunity.net @@ -57346,7 +57204,6 @@ jonrmal.com jonsbo.com jonvie.com jooancloud.com -jooau.com joobot.com jooioo.com joojcc.com @@ -57370,6 +57227,7 @@ joshreso.com joshua317.com jotop.com jotop.net +jotrin.com jouav.com jouder.com joudou.com @@ -57448,14 +57306,20 @@ joyware.com joywellsemi.com joywii.net joywok.com +joyworkshop.com joyxv.com joyy.com +joyyan.com joyyang.com joyyinc.com joyyued.com jozne.com jp-daigou.com jp-moco.com +jp-tencentclb.cloud +jp-tencentclb.com +jp-tencentclb.net +jp-tencentclb.work jp.com jp.run jp0663.com @@ -57474,7 +57338,6 @@ jpg.cm jpghd.com jpgjzzs.com jpgreat7.com -jpgushi.com jphot.net jpisp.com jpjc315.com @@ -57485,7 +57348,6 @@ jpmorganchina.com jpmsg.com jpnettech.com jpnlink.xyz -jpnxcn.com jpopsuki.eu jprtyun.com jpsdk.com @@ -57579,7 +57441,6 @@ jrqzw.net jrsncn.com jrss.com jrszw.com -jrtaiji.net jrteck.com jrtgroup.net jrtx.site @@ -57687,7 +57548,6 @@ jsconnect.com jscrg.com jscsbz.com jscsdr.com -jscsedu.com jscsfc.com jscssimg.com jscts.com @@ -57923,22 +57783,20 @@ jslpk.com jslszz.com jsltgcjt.com jslvzhigu.com -jslxs.com jsly001.com jslyjc.com jslysp.com -jsmalong.com jsmda.org jsmfk.com jsmian.com jsmjys.com -jsmkls.com jsmkyy.com jsmo.xin jsmodeling.com jsmolfa.com jsmrmf.com jsmsg.com +jsmuseum.com jsmxgs.com jsmxw.com jsnaier.com @@ -58132,7 +57990,6 @@ jswyglw.com jswyjt.com jswyw.com jswzjt.com -jsxat788.com jsxbxcl.com jsxcra.com jsxcx.com @@ -58332,7 +58189,6 @@ jubaihuijia.com jubaiye.com jubaozang.com juben108.com -juben68.com juben98.com juc365.com jucaiw.com @@ -58344,7 +58200,6 @@ juchuan.biz juchuangbio.com juchuangfushi.com jucool.com -jucqi.com jucuiwangluo.com judajia.com judehahh.tech @@ -58366,13 +58221,13 @@ juemuren4449.com jueqijy.com juequling.com juerguea.com -juesheng.com juewei.com juexiang.com juexiaotime.com juexinw.com jueywo.com jufa-composite.com +jufa.vip jufaanli.com jufair.com jufeng313.com @@ -58436,6 +58291,7 @@ julang88.com julanggroup.com julanhp.com julanling.com +julebu.co julecn.com julefun.com juli-china.com @@ -58457,6 +58313,7 @@ juliyuemeng.com julong.cc julongchina.com julonggr.com +juluape.com julycn.com julydate.com julyedu.com @@ -58565,7 +58422,6 @@ junshishu.com junshitt.com juntec.com juntu.com -juntuan.net junwu262.com junxinmed.com junyao.tech @@ -58741,7 +58597,6 @@ jwbf.online jwbl.com jwchicago.com jwdili.com -jwdns.com jwedit.net jwetech.com jwfun.com @@ -58838,7 +58693,6 @@ jxgis.com jxgs.cc jxgtzxc.com jxgwy.org -jxgxlc.com jxgztv.com jxh2000.net jxheming.com @@ -58879,7 +58733,6 @@ jxlsxy.com jxlvs.com jxlwgame.com jxlygo.com -jxlyhbd.com jxmhp.com jxmj.com jxmkt.com @@ -58895,9 +58748,11 @@ jxnyc.net jxpdf.com jxphone.com jxphyz.com +jxpp.com jxpta.com jxqcw.com jxqtkj.com +jxqy.city jxqyfw.com jxrays.com jxrcgame.com @@ -59084,7 +58939,6 @@ jyqxz2015.com jyrcjl.com jyrcw.com jyrczp.com -jyrd.com jyrlzy.com jyrmtzx.com jyrmyy.com @@ -59098,7 +58952,6 @@ jysedu.com jyseeds.com jyshare.com jyshoubao.com -jyskuaiji.com jysld.com jysmtech.com jysper.net @@ -59131,6 +58984,7 @@ jyyun.com jyzb01.com jyzc.com jyzhongg.com +jyzmd.com jyzz666.com jyzzdq.com jyzzx.com @@ -59253,7 +59107,6 @@ k-boxing.com k-dyn.com k-kbox.com k-res.net -k.biz k0898.com k0rz3n.com k12.vip @@ -59276,7 +59129,6 @@ k518.com k5n.com k61.org k623.pics -k666.com k6uk.com k73.com k780.com @@ -59290,7 +59142,6 @@ k8smeetup.com k8stech.net k913.com ka20.com -kaa88888.cc kaaass.net kaadas.com kaayou.com @@ -59309,6 +59160,7 @@ kacper.fun kada.com kada163.com kadang.com +kaduoduohk.com kaeryun.com kafangtech.com kafeng.com @@ -59531,7 +59383,6 @@ kangfenhui.com kangfenmao.com kangfuye.com kanggui.com -kanghao123.com kanghe.com kanghu.net kanghuash.com @@ -59661,7 +59512,6 @@ kaolacdn.com kaolafm.com kaolafm.net kaolawenku.com -kaolazhengxin.com kaom.net kaomeiyuan.com kaonaw.com @@ -59888,7 +59738,6 @@ kedaifu.com kedang.net kedanm.com kedaotech.com -kedayikao.com kede-auto.com kede.com kedefamen.com @@ -59927,6 +59776,7 @@ keey.sh kefeijn.com kefenxi.com kefoo.com +kefu01.com kefutoutiao.com kefuzu.com kege.com @@ -60009,7 +59859,6 @@ keluyjs.com kema66.com kemaicrm.com keman.com -kemasheying.com kemavip.com kemiaotai.com kemicro.com @@ -60053,7 +59902,6 @@ keouaxbw.com keovo.net kepusky.com keputech.com -kepuyanxue.com keqiaojob.com kequcps.com ker58.com @@ -60079,7 +59927,6 @@ keruilait.com keruisifan.com keruknowledge.com kerun2010.com -keruna.com kerundegroup.net kerust.com keruyun.com @@ -60171,25 +60018,21 @@ kfchiheng.com kfcjrl.com kfd9999.com kfdcc.com -kffcww.com kffone.com kfganquan.com kfhome.com kfhty.com kfj.cc kfjd.com -kfjkd.com kfjyd.com kfjyjt.com kflhgs.com kfmanager.com kfqizhongji.com kfsddj.com -kfstjt.com kfvcca.com kfw001.com kfyg.xyz -kfyongjings.com kfzdh.com kfzhinan.com kfzimg.com @@ -60530,6 +60373,7 @@ kkmh.com kkmicro.com kkmop.com kkong.vip +kkrb.net kksmg.com kksofts.com kkt.com @@ -60594,7 +60438,6 @@ kltpump.com klub11.com klv5qu.com klvtu.com -klwt.net klwxq.com klx-tech.com klxksci.com @@ -60639,7 +60482,6 @@ kmguolv.com kmgybsr.com kmhpc.net kmhwtz.com -kmhybz.com kmimall.com kmjt.net kmlcl.com @@ -60650,7 +60492,6 @@ kmmama.com kmmdkj.com kmoe0.com kmplayercn.com -kmpp7.com kmpwgxzy.com kmqcwx.com kmqsaq.com @@ -60746,7 +60587,6 @@ koderover.com kodmp.com koenli.com kof-kol.club -kofcn.org kofficemart.com kofuf.com kofunion.net @@ -60780,6 +60620,7 @@ kongduan.com kongfz.com kongge.com kongjianjia.com +kongjibusiness.com kongjie.com kongjieshijie.com kongjitang.com @@ -60788,7 +60629,6 @@ kongkangroup.com konglei.com konglonggu.com kongming-inc.com -kongmt.com kongqinengrebeng.com kongquecheng.com kongqueyuzd.cc @@ -60851,7 +60691,6 @@ kortrong.com kotaqkew.com kotei-info.com kotek.tel -koto.com kotoo.com kotoyoshi.com koubei.com @@ -60940,6 +60779,10 @@ kqwh231122.com kqzlzx.com kqzp.net kr-cell.com +kr-tencentclb.cloud +kr-tencentclb.com +kr-tencentclb.net +kr-tencentclb.work kr.com kr126.com krahag.com @@ -60968,6 +60811,7 @@ ks-cdnv6.com ks-fag.com ks-live.com ks-spring.com +ks-terminals.com ks-wg.com ks1688.com ks321.com @@ -61224,7 +61068,6 @@ kuailaiwz.com kuaile-u.com kuaile8.com kuaile800.com -kuailebz.com kuailedo.com kuailekaishi.com kuailelunwen.com @@ -61250,6 +61093,7 @@ kuaipng.com kuaiqi.net kuaiqikan.com kuaiqin.com +kuaiqushuiyin.com kuairen88.com kuaisee.com kuaishangkf.com @@ -61263,7 +61107,6 @@ kuaishouba.com kuaishougroup.com kuaishoupay.com kuaishuru.net -kuaisouwifi.com kuaisu.com kuaisushu-cnd.com kuaisuyun.com @@ -61507,6 +61350,7 @@ kurogame-service.xyz kurogame.com kurogame.net kurogame.xyz +kurogames-ads.com kurogames-global.com kurogames.com kurokingdom.com @@ -61760,7 +61604,6 @@ kzwr.com kzwx.net kzyzz.com l-zb.com -l.biz l069.com l0v0.com l1yu.com @@ -61854,7 +61697,6 @@ laifu.net laigame7.net laigaokao.com laigong.com -laihema.com laihua.com laijiawen.com laijishaofang.com @@ -61883,7 +61725,6 @@ laiqy.com laird-tek.com laisai.com laisesupply.com -laishikouqiang.com laishui.info laisizuji.com laisj.com @@ -61893,7 +61734,6 @@ laituijian.net laiwang.com laiwo.com laiwu.net -laiwumedia.com laiwuyizhong.com laixi.com laixiangzuji.com @@ -61906,6 +61746,7 @@ laixuexi.cc laiyagushi.com laiye.com laiyifen.com +laiyincat.com laiyouhui.net laiyouxi.com laiytech.com @@ -61928,7 +61769,6 @@ lalkk.com lamahui.com lamaison-arting.com lamall.com -lamaqun.com lambda.hk lamborlogistics.com lameixs.com @@ -62024,6 +61864,7 @@ langfly.com langgine.com langhao-medical-platform.com langhuansoft.net +langjian.work langkaiwenhua.com langkawipower.com langke.com @@ -62167,7 +62008,6 @@ lanyunone.com lanyus.com lanyusf.com lanzchina.com -lanzhouhongyuan.com lanzhouvw.com lanzhuwh.com lanzn.com @@ -62209,7 +62049,6 @@ laobanmail.com laobi.icu laobinggun.com laobingmi.com -laobuluo.com laobuxie.com laocen.com laodao.cc @@ -62234,7 +62073,6 @@ laohu8.com laohuabao.com laohuangli.net laohucaijing.com -laohutao.com laohuyun.com laojiuxitong.com laojuhui.com @@ -62278,7 +62116,6 @@ laoxuehost.net laoxuezhuji.com laoy.net laoyancheng.com -laoyaoadfsdfadfsdf.com laoyaoba.com laoyi0773.com laoyoujiaju.com @@ -62288,7 +62125,6 @@ laoyuanji.com laoyuegou.com laoyuge.com laozicloud.com -laozongyi.com laozu.com laozuo.org lapc.cc @@ -62368,6 +62204,7 @@ law-wei.com law01.net law6888.com lawasst.com +lawaxi.net lawbang.com lawbridge.org lawbus.net @@ -62433,6 +62270,7 @@ lb-yz.com lb.streaming.sk lb0398.com lb5.com +lb54hon504ke.com lbbb.cc lbbee.com lbbniu.com @@ -62466,6 +62304,7 @@ lbsrmyy.com lbswjt.com lbszx.com lbtek.com +lbu.cc lbv1.com lbwbw.com lbx777.com @@ -62622,7 +62461,6 @@ ldtdn.com ldtec.com ldteq.com ldwxiao.com -ldwxkj.com ldxiang.com ldycdn.com ldydh.com @@ -62640,7 +62478,6 @@ le5le.com le8.com le855.com le890.com -leacloud.net leacol.com leadal.com leadal.net @@ -62650,7 +62487,6 @@ leadclimb.org leadcoretech.com leadding.com leaddo.com -leadenhallbahamas.com leader-e.com leader609.com leader755.com @@ -62684,6 +62520,7 @@ leadyo.com leadzees.com leaferjs.com leaforbook.com +leaftools.net leafword.com leagcard.com leagpoint.com @@ -62734,7 +62571,9 @@ lechange.com lechangxia.cc leche.com lechebang.com +lecheng18.com lechengdz.com +lechengyunfu.com lechinepay.com lechuangzhe.com lecloud.com @@ -62774,6 +62613,7 @@ leeaon.com leeco.com leefanmr.com leehon.com +leelen.com leeleo.vip leenzee.com leenzhu.com @@ -62825,6 +62665,7 @@ lei001.com leiaomold.com leibei.cc leiboyiqi.com +leidacj.com leidianip.com leifengshi120.com leigod.com @@ -62856,7 +62697,6 @@ leisoon.com leisu.com leisu123.com leisuapi.com -leisure-expo.org leisurelypanda.com leitaibio.com leitaigongsi.com @@ -62872,7 +62712,6 @@ leiyunge.com leiyunge.net lejiachao.com lejian.com -lejianweike.com lejiao.tv lejiaolexue.com lejiaotech.com @@ -63018,6 +62857,7 @@ lesejie.com leshangzs.com leshangzx.com leshanvc.com +leshare.work leshi123.com leshiguang.com leshow.com @@ -63042,7 +62882,6 @@ lestcg.com letabc.com letang666.com letaoedu.com -letaofang.net letaoren.com letbonchina.com leter.io @@ -63106,8 +62945,12 @@ lex.download.prss.microsoft.com lexar.com lexed.org lexiaigame.com +lexiang-app.com lexiang-asset.com +lexiang-asset.net +lexiang-ops.com lexiangla.com +lexiangla.net lexiangzuji.com lexin.com lexin001.com @@ -63170,7 +63013,6 @@ lezuan9.com lezuocai.com lf126.net lf127.net -lfacdwm.com lfan.net lfang.com lfbxw.com @@ -63298,10 +63140,8 @@ lhwill.com lhwytj.com lhxhwl.com lhyc3888.com -lhygcn.com lhyiliao.com lhytgroup.com -lhzly.com lhzq.com li-ca.com li-ning.com @@ -63377,7 +63217,6 @@ lianjia.com lianjianode.xyz lianjianxsw.com lianjiasm.com -lianjiaxiu.com lianjie.in lianjiezhe.com lianjingdq.com @@ -63493,6 +63332,8 @@ libsys.net libtop.com libvideo.com lic-bcbc.com +lic-slf-dom.com +lic-slf-dom.net licai.com licai18.com licaie.com @@ -63599,7 +63440,6 @@ lifediary.shop lifeeu.com lifegc.com lifegreenmedical.com -lifeinjungle.com lifeng.in lifengshoe.com lifeofguangzhou.com @@ -63628,10 +63468,13 @@ ligehuanbao.com ligendpower.com ligetz.com lighos.com +light-cos.com light-player.com light3moon.com lightalk.com +lightalk.me lightblue.net +lightbox.games lighte-tech.com lightgx.com lighthg.com @@ -63642,6 +63485,9 @@ lightky.com lightlygame.com lightonus.com lightpassport.com +lightspeed-dc.com +lightspeed-lic.com +lightspeed-og.com lightstrade.com lightxi.com lightyy.com @@ -63653,6 +63499,7 @@ lih-invest.com lihang-expo.com lihangzx.com lihaoshuyuan.com +liheiat.xyz liheng1688.com lihengjh.com lihetong.com @@ -63813,6 +63660,7 @@ lingla.com linglingkaimen.com linglingmo.site linglong.dev +linglong.space linglongart.com linglonglife.com linglongtech.com @@ -64281,6 +64129,7 @@ liuxuekw.com liuxueshijie.com liuxuesmd.com liuxuetown.com +liuxuewind.com liuxueyun.com liuxuezx.com liuxx.com @@ -64293,7 +64142,7 @@ liuyiguo.com liuyimin4.com liuyixiang.com liuyua.xyz -liuyuechuan.com +liuyunflow.com liuyunliumeng.com liuyuntian.com liuzaoqi.com @@ -64306,7 +64155,6 @@ liuzhoukaichuang.com liuzhourm.com liuzhousteel.com liuzhuni.com -liuzitang.com liuziyoudu.com liuzongyang.com liuzy88.com @@ -64340,7 +64188,6 @@ livechina.com livecourse.com livehwc4.com liveinau.com -liveincy.com livejh.com liveme.com livemediav.com @@ -64376,7 +64223,6 @@ liwuzhi.art lixcx.com lixfaf.com lixiaedu.com -lixianedu.net lixiang.com lixiangcaifu.com lixianghuanbao.com @@ -64491,7 +64337,6 @@ ljmeng.site ljmyy120.com ljqhju.com ljqxjjhbc.com -ljraj.com ljrbw.com ljs.fun ljsdk.com @@ -64505,7 +64350,6 @@ ljxqzy.com ljxww.com ljy365.com ljz-talentapt.com -ljzc.net ljzfin.com lk-jd.com lk0355.com @@ -64549,6 +64393,7 @@ ll1024.com llang.net llaoyou.com llcat.tech +lldlf.com llever.com llewan.com llgjx.com @@ -64556,7 +64401,6 @@ llgkm.com llguangli.com llguangli30.com llhlkftzjt.com -llhtcn.com llidc.com llinkslaw.com lljgame.com @@ -64668,7 +64512,6 @@ lnfdcxh.org lnfssy.com lnfzb.com lngche.com -lnghw.com lngtuqv.com lngwy.org lnhddq.com @@ -64708,7 +64551,6 @@ lnsgczb.com lnsqxj.xyz lnsrmyy.com lnsslhyxh.com -lnsysc.com lnsyzx.com lnsyzx.net lnszyjt.com @@ -64738,6 +64580,7 @@ loadingbay.com loansliml.com local-ip.online localizecdn.com +localxcafe.com locatran.com locez.com locimg.com @@ -64749,7 +64592,6 @@ locklauncher.com lockscreenimg.com locnavi.com locojoy.com -locoso.com locoy.com locoyposter.com locren.com @@ -64775,7 +64617,6 @@ logisteed-sc.com logistics-ea.com logisticstech.com logo-emblem.com -logo123.com logo123.net logo2008.net logo888.com @@ -64824,6 +64665,7 @@ loliapi.com lolicon.team loliloli.moe loliloli.net +lolimoe.cc lolitawardrobe.com loljy.com lolkeng.com @@ -64933,7 +64775,6 @@ longsan.com longshanchemical.com longshangrc.com longsheng.com -longsheng.pw longsheng988.com longshine.com longsok.com @@ -65007,7 +64848,6 @@ lookao.com lookbaby.com lookbravo.com lookchem.com -lookfor.one lookgame.com looking-car.com lookr.cc @@ -65150,7 +64990,6 @@ lpgjkd.com lph119.com lpllol.com lpou.online -lppsw.com lppz.com lppzimg.com lpq1688.com @@ -65186,7 +65025,6 @@ lqrcb.com lqsbcl.net lqschool.net lqsilicon.com -lqszxy.com lqtzjy.com lqwang.com lqxcl.com @@ -65221,7 +65059,6 @@ lrscloud3.com lrt-tech.com lrts.me lrvin.com -lrwxjji.com ls-doll.com ls-gb.com ls-hospital.com @@ -65294,11 +65131,13 @@ lsqedu.com lsqmx.com lsqpay.com lsqqy.com +lsqv.com lsqx.com lsqy398.com lsrbs.net lsrfzy.com lsrmyy.com +lssdexternal.com lssggzy.com lssjt.com lsswjt.com @@ -65332,7 +65171,6 @@ lsxnm.com lsxrmtzx.com lsxuantong.com lsxxkj.net -lsxz.org lsyart.com lsyhh.com lsys2002.com @@ -65357,7 +65195,6 @@ ltaaa.net ltao.com ltd.com ltdcdn.com -ltdlqz.com ltdspot.com ltesting.net ltfwzs.com @@ -65477,6 +65314,7 @@ ludengtyn.com ludeqi.com ludiban.com ludongyy.com +ludosuperstar.com ludou.org ludown.com ludoworld.net @@ -65494,9 +65332,9 @@ lufangjia.com lufaxcdn.com lufengwuliu.net lufengzhe.com +lufff.com luffy.cc luffycity.com -lufhb.com lufunds.com lugangsoft.com lugick.com @@ -65681,11 +65519,9 @@ luxiangba.com luxiangdong.com luxiangwu.net luxianpo.com -luxiao.com luxiaoche.com luxichemical.com luxiwang.com -luxiyue.com luxshare-ict.com luxtarget.com luxuanart.com @@ -65739,11 +65575,9 @@ lvchanghuanbao.com lvchayun.com lvchehui.com lvcheng.com -lvcheng23.com lvchengba.com lvchicar.com lvd.cc -lvdao.fun lvdawei.com lvdhb.com lvdingjia.com @@ -65818,7 +65652,6 @@ lvwmb.com lvxiaoer.net lvxing.net lvxunlaw.com -lvxxing.com lvyahoo.com.tw lvye.com lvye.org @@ -65843,10 +65676,8 @@ lvzheng.com lvzhuwang.com lw0591.com lw0634.net -lw208.com lw5188.com lw54.com -lw71.com lwccc.net lwcj.com lwd3699.com @@ -65989,6 +65820,8 @@ lycua.com lyd-china.com lyd6688.com lydaas.com +lydaas.net +lydass.net lydezx.net lydfyy.com lydhb888.com @@ -66038,11 +65871,9 @@ lygmedia.com lygnews.com lygou.cc lygrc.net -lygrffw.com lygsgt.com lygshjd.com lygshlxh.com -lygtravel.com lygxwmarathon.com lygxwxqrmyy.com lygyyjt.com @@ -66059,7 +65890,6 @@ lyia.org lyihub.com lyilife.com lyjiuzhou.com -lyjj.net lyjksw.com lyjob.net lyjunshi.com @@ -66070,10 +65900,12 @@ lyjyjt.com lyjys.com lylangchao.com lyldhg.com +lylend.com lylhkq.com lylme.com lylxjxc.com lymarathon.com +lymmasu.xyz lymy1684.com lynkco-test.com lynkco.com @@ -66118,7 +65950,6 @@ lysyzx.com lyszls.com lyszxyy.com lythw.com -lytning.xyz lytoufang.com lytpw.com lytq.com @@ -66129,7 +65960,6 @@ lyunweb.com lyunx.com lyvnee.com lywanban.com -lywdm.com lywenlv.com lywf.me lywhxy.com @@ -66218,7 +66048,6 @@ lzghmy.com lzgjcxkj.com lzgjschool.com lzgkyq.com -lzgljt.com lzgm.com lzgps.com lzgryy.com @@ -66254,7 +66083,6 @@ lzjiechuang.com lzjingda.com lzjldj.com lzjoy.com -lzjp.net lzjufeng.com lzjuhu.com lzjyy.com @@ -66413,7 +66241,6 @@ m-finder.com m-hero.com m-rainbow.com m.567it.com -m.biz m.travelzoo.com m1.run m123.com @@ -66445,7 +66272,6 @@ m3u8.ycchannel.yatv.tv m3u8.yjchannel.yatv.tv m448.com m4vmsozi62ifz.com -m531.cc m5bn.com m5m6x0vh.com m5stack.com @@ -66464,7 +66290,7 @@ ma.run ma3office.com ma3you.com ma5000.com -ma6zlvb.xyz +maa.plus maanhui.com maasdk.com maavigi.xyz @@ -66510,7 +66336,6 @@ mackentan.com mackext.com macmao.com macmicst.com -macno1.com macocn.com macoshome.com macpeers.com @@ -66563,7 +66388,6 @@ mafengwo.net mafengwoo.com maff.com mag10000.com -mag998.com magadanryba.com magaoedu.com magcloud.net @@ -66583,6 +66407,7 @@ magictavern.com magicw3.com magicwatchface.com magicwinmail.com +magireco.moe magma.ink magnotel.com magook.com @@ -66591,6 +66416,7 @@ magtechjournal.com maguang.net magvision.com mahailushu.com +mahjongai.com mahjongai.net mahjongcup.com mahjongcup.net @@ -66737,13 +66563,13 @@ majilive.com major-epoch.com majorbio.com majorsec.com -majorserving.com majsoul.com maka.im maka.mobi makaevent.com makaidong.com makaiqian.com +make-w0rld-static.club makeapp.co makeblock.com makecn.net @@ -66808,6 +66634,7 @@ mamecn.com mamicode.com mamilist.com mamioo.com +mamoe.net mamsh.org mamumall.com man6.org @@ -66820,7 +66647,6 @@ manchengpiaoxiang.com manco-logistics.com manction.com mandao-tech.com -mandaow.com mandarinedu.org mandarinhouse.com mandarinmorning.net @@ -66828,6 +66654,8 @@ mandashu.com mande-car.com mandian.com mandiankan.com +mandnsv1.com +mandnsv1.net mandudu.com manduhu.com manew.com @@ -66862,6 +66690,7 @@ mangxia.com mangxuewang.com mangzhongbrand.com mangzitian.com +mangzx.com manhinggroup.com manhua1.com manhua365.com @@ -66904,6 +66733,7 @@ manrong.win manshaoco.com manshijian.com mantachina.com +mantangc.com mantewei.com mantianfei.net mantusy.com @@ -66959,19 +66789,19 @@ maomilingyang.com maomob.com maomp.com maomp.icu +maono.com maopaoya.com maopuyouxi.com maoqitian.com maoqiumail.com -maoshanf.com maoshanger.com -maoshu520.com maotao.net maotiangroup.com maotuan.net maotuying.com maowotao.com maoxia007.com +maoxiangai.com maoxinhang.com maoxinquan.net maoxiongtv.com @@ -66992,6 +66822,7 @@ maoyuncloud.com maozhishi.com maozhuar.com maozhuashow.com +map-tencent.com map17.com map456.com map456.net @@ -67005,6 +66836,7 @@ maphuan.com mapks.com maple-game.com maple.ren +maplecheck.tech maplef.net mapmapping.com mappn.com @@ -67026,7 +66858,6 @@ marine-dancer.com marinedancer.com marioall.com marioin.com -marionfr.com mariowap.com marisfrolg.com maritime-dg.com @@ -67046,7 +66877,6 @@ markorchem.com markorhome.com marksmile.com marljoy.com -marmorheizplatten.com marmot-cloud.com maro6.com marry5.com @@ -67087,7 +66917,6 @@ mashiro.me mashrabiya-screen.com masiao.com masikkk.com -masinen.com masjfc.com masjinquan.com maslink.com @@ -67151,6 +66980,7 @@ matrix-chem.com matrix-net.tech matrixchuang.com matrixerse.com +matrixscrm.com matrixsens.com matsubayashi-op.com matsuri.icu @@ -67167,6 +66997,7 @@ maxd.cloud maxdo.net maxfinesthair.com maxfor-tool.com +maxgamehub.com maxgj.net maxhub.com maxhub.vip @@ -67304,11 +67135,11 @@ mc-test.com mc-user.com mc-xborder.com mc.cc -mc1314.com mc520.com mc91.com mc9y.net mcake.com +mcbaas.work mcbang.com mcbao.com mcbbs.co @@ -67323,6 +67154,7 @@ mcchina.com mccshhospital.com mcd.cc mcdchina.net +mcdemo.show mcdsusan.com mcdvisa.com mce.msi.com @@ -67385,7 +67217,6 @@ mcwizrd.com mcwshop.com mcx666.com mcxzs.com -mcy003.org mcyhfl.com mcypls.com mcyz.com @@ -67445,6 +67276,7 @@ mdzgjx.com mdzx.net me-city.com me-game.com +me-tencent.com me.com me1.ltd me360.com @@ -67486,6 +67318,7 @@ medeming.com media.fantv.hk media.joycorp.co.kr media.paperclipclub.net +media.trrtv.com mediaprima.rastream.com mediastory.cc mediatek.com @@ -67562,6 +67395,8 @@ megmeet-welding.com megobike.com megou8.com meguo.com +meguri.app +meguri.moe megvii-inc.com megvii.com meheco.com @@ -67645,6 +67480,7 @@ meijieclub.com meijiedaka.com meijiehang.com meijiehezi.com +meijieku.com meijiequan.com meijieu.com meijiexia.com @@ -67795,6 +67631,7 @@ meitukiss.com meitumail.com meitumob.com meitumobile.com +meitumv.com meitun.com meituncdn.com meituo.shop @@ -67806,6 +67643,7 @@ meiturom.com meitushijie.com meitushop.com meitushouji.com +meitusiyu.com meitusnap.com meitustatic.com meitustore.com @@ -67845,7 +67683,6 @@ meiye.art meiyedana.com meiyes.com meiyi.ai -meiyinji.vip meiyixia.com meiyixinrui.com meiyou.com @@ -68130,10 +67967,12 @@ mgmovie.net mgmtg.com mgmusic.vip mgnav.com +mgobe-webattle.com mgongkong.com mgplay.com.tw mgryekby.com mgsdk.com +mgse.info mgslb.com mgslb.net mgslb.org @@ -68166,7 +68005,6 @@ mhfotos.com mhhf.com mhhf.net mhi-ac.com -mhimg.com mhinele.com mhito.net mhkami.com @@ -68311,7 +68149,6 @@ micang.com micblo.com mice-gz.org micecn.com -michael-j.net michaelapp.com michoi.com michong.com @@ -68324,6 +68161,7 @@ micro-bee.com micro-bridge.com micro-game-client.com micro-x.net +microaiav.com microbeee.com microbell.com microbt.com @@ -68490,6 +68328,7 @@ mikuac.com mikublog.com mikucdn.com mikuclub.fun +mikudm.com milan.com milan520.com milanshishang.com @@ -68522,10 +68361,8 @@ milnews.com milo-star.com miloktv.com miloli.info -milphets.com milsay.com milu.com -milu.ink milubtyx.com milusybt.com milvtong.com @@ -68584,7 +68421,6 @@ mingcalc.com mingchao.com mingchaoonline.com mingchaoyouxi.com -mingchatang.com mingci.org mingcihospital.com mingcloud.net @@ -68614,7 +68450,6 @@ minghuatang.com minghuaxinda.com minghuishijia.com mingin.com -mingji001.com mingjiachina.com mingjian.com mingjian365.com @@ -68649,7 +68484,6 @@ mingtaokeji.com mingtejia.com mingtian.com mingtou.com -mingxf.com mingxigu.com mingxingku.com mingxinglai.com @@ -68683,6 +68517,7 @@ minhow.com mini-audio.com mini-banana.com mini-ease.com +mini-program-acc.com miniadx.com miniaixue.com miniapida.com @@ -68710,6 +68545,7 @@ minipacs.com miniprogramadmin.com minirizhi.com minisforum.com +minishops.co miniso-au.com miniso.com minisoyo.com @@ -68776,6 +68612,7 @@ miquan.link miquapp.com mir4399.com mir6.com +miracdn.com miraclelaser.com miracleplus.com miraclevision.com @@ -68849,6 +68686,7 @@ mix.moe mixbao.com mixcapp.com mixcm.com +mixdesk.net mixdo.net mixian88.com mixiaojin.com @@ -68908,13 +68746,13 @@ mjlsh.com mjmjm.com mjoys.com mjqishi.com -mjsdgs.com mjt288.com mjtcsb.com mjtd.com mjtom.com mjttt.com mjxhgdl.com +mjxpay.com mjyg.com mjylbj.com mjyun.com @@ -69033,6 +68871,7 @@ mmall.com mmaqa.com mmarket.com mmarket6.com +mmatch.tech mmbang.com mmbang.info mmbang.net @@ -69063,7 +68902,6 @@ mmjynet.com mmjzxh.com mmlessin.com mmllllasjd.com -mmloo.com mmmglobalgroup.com mmmmmmm.com mmmnote.com @@ -69091,7 +68929,6 @@ mmxchina.com mmxiaowu.com mmxmmx.com mmyj.com -mmyuer.com mmyxshop.com mmyz.net mmzcn.com @@ -69135,7 +68972,6 @@ mobao.online mobaoo.net mobartsgame.com mobawan.com -mobayke.com mobayx.com mobcells.com mobcent.com @@ -69156,6 +68992,7 @@ mobilegamebase.com mobilegamecdn.com mobilelegends.com mobilemgr-global.com +mobilemgr-global.net mobileppp.com mobiletrain.org mobileztgame.com @@ -69191,7 +69028,6 @@ mocn.cc moco-mall.com mocusez.site mocuz.com -modajans.com modao.cc modao.com modao.io @@ -69204,6 +69040,7 @@ modelarts-maas.com modelevel.com modelltd.com modelones.com +modelscope.net modelwhale.com modeng178.com modengtianshi.com @@ -69237,7 +69074,6 @@ moe123.org moe321.com moeblog.vip moeclub.org -moecoder.com moedot.net moeelf.com moefactory.com @@ -69273,6 +69109,7 @@ mofangshe.com mofangwang.com mofangyu.com mofanodes.com +mofashi.ltd mofavideo.com mofazhu.com moffettai.com @@ -69487,18 +69324,17 @@ moquseo.com moraex.com morange.shop mordernstone.com -more-fish.com morechinese.cc moreck.com moredian.com morefood.com morefreegame.com morefun-philippines.com +morefunstudio.com moregy.com moreless.io morelink.net moremeat.com -moremoneyads.com morequick.net moresing.com morestep.com @@ -69605,7 +69441,6 @@ moxz.net moyangmoyang.com moyann.com moye.me -moyoutang.com moyoyo.com moypk.com moyubuluo.com @@ -69652,6 +69487,7 @@ mpnbenefitsrtl.download.prss.microsoft.com mpnbenefitsrtluat.download.prss.microsoft.com mpoa.vip mpopkart.com +mps.live mpserverless.com mpsoft.net mpxiaomi.net @@ -69676,6 +69512,7 @@ mquanquan.com mqxpyy.com mqxww.com mqyu.com +mqzoneapp.com mr-ping.com mr77.com mr91.com @@ -69709,6 +69546,7 @@ mrpyq.com mrqf.com mrqoxfvs.com mrqxs.com +mrrvendor.com mrsdgg.com mrsingsing.com mrsjzt.com @@ -69737,6 +69575,7 @@ mscdntrip.com mscodecloud.com msd-facing.com msddp.com +msdkpass.com msdn.download.prss.microsoft.com msdn.hk msdnxitong.com @@ -69747,8 +69586,6 @@ msfpay.com msftonlinelab.com msgamego.com msgcarry.com -msgr.dlservice.microsoft.com -msgruser.dlservice.microsoft.com msgtjj.com msh2020.com mshandong.com @@ -69814,6 +69651,7 @@ mt22q4s3w5.com mt3.com mt77.com mt888vip.com +mtab.cc mtadvert.com mtadx.com mtaokj.com @@ -69908,7 +69746,6 @@ muchunkang.com mudanauto.com mudgj.com mudiaotx.com -mudijigou.com mudongguang.com mudotarot.com mudu.com @@ -69947,6 +69784,7 @@ mulinyun.com multi-parking.com multiconceptslink.com multilingual-volc.com +multimodalmatch.com mulunspring.com mumayi.com mumbuy365.com @@ -69955,7 +69793,6 @@ mumunv.com mumuplayer.com mumuxili.com mundane.ink -mungerlab.net muniao.com munling.com munue.com @@ -70050,6 +69887,7 @@ mvorgexv.com mvote.net mvpdj.com mvpmeta.com +mvpmob.com mvprpg.com mvpsky.com mvs-intel.com @@ -70068,7 +69906,6 @@ mwcname.com mweda.com mwemp.com mwjournalchina.com -mwkhjc.com mwquicio.com mwrf.net mwrfabc.com @@ -70089,7 +69926,6 @@ mxarts.com mxbc.com mxbc.net mxbiao.com -mxbsy.com mxchip.com mxddp.com mxde.com @@ -70103,23 +69939,20 @@ mxdx.net mxdzlk.com mxeosbvt.com mxew.com +mxflutter.com mxfy.com mxgogo.com mxguan.com mxhaitao.com mxhichina.com -mxhthw.com mxifund.com mxitres.com -mxivi.com mxjd.com -mxjsjx.com mxjtedu.com mxjyxx.com mxk.cc mxkjai.com mxklchina.com -mxlvniao.com mxmem.com mxnavi.com mxnxs.com @@ -70147,6 +69980,7 @@ my-le.com my-ndns.com my-qcloud.com my-summit.com +my-tcloud.com my.st.com my0511.com my0511.net @@ -70168,10 +70002,8 @@ my2w.com my399.com my3w.com my4399.com -my478.com my510.com my51y.com -my558.net my5v.com my68.com my7v.com @@ -70193,6 +70025,10 @@ myanmarembassy.com myanonamouse.net myapp.com myapp.ltd +myappdl1.com +myappdl1.net +myappdl2.com +myappdl2.net myaqsh.com myarena7.com myarowanas.com @@ -70311,6 +70147,7 @@ myhopu.com myhostadmin.net myhscodes.com myhuaweicloud-custom.com +myhuaweicloud-date.com myhuaweicloud-koodrive.com myhuaweicloud-obs.com myhuilv.com @@ -70341,6 +70178,7 @@ myk3.com mykarry.com mykd.cc mykeeta.com +mykeeta.net mykqyy.com mykscdn.com mykuaidi.com @@ -70394,6 +70232,7 @@ myouth.net myp17.com myp2pch.net mypaas.com +myparallelstory.com mypcrun.com mypethome.com mypharma.com @@ -70422,6 +70261,7 @@ myrice.com myrightone.com myroome.com myrqjt.com +myrtx.com myrunners.com mysbaojie.com mysecretrainbow.com @@ -70460,6 +70300,7 @@ mysvw.com myt126.com mytaizhou.net mytaofun.com +mytencentes.com mythbird.com mythcall.com mythcare.com @@ -70476,7 +70317,7 @@ mytokenpocket.vip mytoptown.com mytqwpe.com mytrix.me -myttjp.com +mytt.com mytv365.com mytvgame.com mytxly.com @@ -70595,7 +70436,6 @@ mzzhgcc.com mzzjw.com mzzyk.com n-bros.net -n.biz n0808.com n0vadesktop.com n12345.com @@ -70606,7 +70446,6 @@ n2017.com n21.cc n21ce.com n283nser4cjz.com -n2ij46poes.shop n3sd.com n459.com n5w.com @@ -70648,6 +70487,7 @@ naifei.pro naifenzhiku.com naijian.net nail-auto.com +nails7.com naimal.com naimei.com naipan.com @@ -70659,6 +70499,7 @@ naiveadmin.com naiveblue.com naiwch.com naixi.com +naixi.org naixuecha.com naiyouxuexi.com najingtech.com @@ -70700,13 +70541,11 @@ nanbeiyu.shop nanbushenghuo.com nancalelectric.com nancc.com -nanchang-marathon.com nancharencai.com nanchigroup.com nanchu.com nanchunhz.com nandaauto.com -nandagang.cc nandasoft-its.com nandasoft.com nandiu.com @@ -70760,14 +70599,12 @@ nanjingyinuo.com nanjix.net nanjixiong.com nankaimba.org -nanke91.com nanlangshengwu.com nanlew.com nanlingwater.com nanlingzr.com nanlong.com nanmodesign.com -nannanlv.com nanning-marathon.com nanninginfo.com nanningmhw.com @@ -70850,7 +70687,6 @@ narcissoshotel.com naris-china.com narkii.com narochina.com -narrowad.com naruto.red narwal.com narwaltech.com @@ -70867,7 +70703,6 @@ naslab.club nastcorp.com nasyeo.com nasyun.com -nasyy.com nat123.com natachem.com natapp.cc @@ -70880,14 +70715,12 @@ natergy.com natertech.com natfrp.com natgmj.com -natiandj.com nationalchip.com nationalee.com nationsky.com nationstech.com natnps.com nattest-china.com -naturaleeza.com naturali.io naturaltfc.com naturalvision.org @@ -70910,6 +70743,7 @@ naxide.com nayatec.com nayei.com nayuansu.com +nazarstudios.com nazhidj.com nazhilong.com nazo.fun @@ -71056,7 +70890,6 @@ nbuser.com nbvps.net nbwaf.net nbwan.net -nbwb.net nbwbw.com nbweldingtorch.com nbwelldon.com @@ -71133,7 +70966,6 @@ ncvt.net ncvtmi.com ncwsxh.org ncwsxx.com -ncxb.com ncxhrc.com ncxinshou.com ncxuw.com @@ -71294,7 +71126,6 @@ net-measure.net net-rope.com net-sharp.com net-swift.com -net-sy.com net-times.net net0516.com net111.info @@ -71355,12 +71186,15 @@ network-hk.com networkesl.com networklo.com netzonesoft.com +netzz.net neu-reality.com neucrack.com neuedu.com neunn.com neupaas.com neuqsoft.com +neuroxiv.com +neuroxiv.net neusemi.com neusncp.com neusoft.com @@ -71533,6 +71367,8 @@ newzhizao.com newzhongyuan.com nexmoe.com nexon.to +next-bei.com +next-playground.com nextclass.club nextclass.com nextday.im @@ -71540,6 +71376,7 @@ nextech-x.com nextjoy.com nexto2o.com nextpcb.com +nextplayground.com nextrt.com nextstudios.com nexttao.com @@ -71560,7 +71397,6 @@ nf.video nf108.com nf56.com nfc315.com -nfchaiqian.com nfcic.com nfcmag.com nfcreader.net @@ -71692,12 +71528,12 @@ niaocms.com niaogebiji.com niaola.com niaoquan.fun +niaosuangao.online niaowoclub.com niaoyun.com niba.com nibaguai.com nibaku.com -nibiye.com nibj.com nibomu.com nic.ren @@ -71893,6 +71729,7 @@ niuqia.com niurenqushi.com niuschools.com niushe.com +niushield.online niushoushan.net niutech.com niutk.com @@ -71945,6 +71782,9 @@ nj-qiyiguo.net nj-reagent.com nj-ss.com nj-tencentclb.cloud +nj-tencentclb.com +nj-tencentclb.net +nj-tencentclb.work nj-test.com nj-tongrentang.com nj-tops.com @@ -72033,7 +71873,6 @@ njdnjt.com njdq-ld.com njdqgytg.com njdtyx.com -njdyfr.com njdzjcyq.com njdzn.com njeport.com @@ -72121,6 +71960,7 @@ njhxzx.com njhy-elec.com njhy-tech.com njhzypiano.com +njiabe.com njiairport.com njianzhan.com njibhu.com @@ -72338,7 +72178,6 @@ njtrq.com njtst.com njuchem.com njued.com -njuftp.org njuoe.com njupco.com njust.pub @@ -72367,6 +72206,10 @@ njwz.net njwzjsw.com njxax.com njxcj.com +njxfcft-tencentclb.cloud +njxfcft-tencentclb.com +njxfcft-tencentclb.net +njxfcft-tencentclb.work njxiaochi.com njxizebio.com njxjjsjt.com @@ -72484,7 +72327,6 @@ nmcoo.com nmcpo.com nmdhzs.com nmet168.com -nmgatdj.com nmgbaiju.com nmgchigang.com nmgchina.cc @@ -72515,7 +72357,6 @@ nmgup.com nmgwhly.com nmgwxgs.com nmgyjszx.com -nmgzqrsp.com nmimi.com nmjtzy.com nmjyl.com @@ -72541,14 +72382,9 @@ nmzh.net nn-jinlun.com nn-tct.com nn.com -nn11001.com -nn11771.com nn12333.com nn1yy.com nn1zx.com -nn22002.com -nn22772.com -nn22882.com nn2fy.com nn2yy.com nn3yy.com @@ -72678,7 +72514,6 @@ nnjajt.com nnjajt.xyz nnjdgl.com nnjgsd.com -nnjhfz.com nnjht.com nnjhwy.com nnjiangmei.com @@ -72713,7 +72548,6 @@ nnjunliang.com nnjxbs.com nnjy100.com nnjzd.com -nnjzgg.com nnjzybl.com nnkailong.com nnkcy.com @@ -72729,7 +72563,6 @@ nnlanfang.com nnlfcm.com nnlghbkj.com nnlgjt.com -nnlianlida.com nnlib.com nnljhb.com nnljoa.com @@ -72768,7 +72601,6 @@ nnpma.com nnpml.com nnpnzx.com nnpp.vip -nnqbhb.com nnqh.net nnqianfan.com nnqmjy.com @@ -72800,7 +72632,6 @@ nnshenghua.com nnshzhg.com nnsirui.com nnsjcgs.com -nnsjl.com nnslx.com nnslzy.com nnsmk.com @@ -72829,7 +72660,6 @@ nntlyy.com nntobo.com nnttsoft.com nntuobang.com -nntuogang.com nntxw.com nntzgz.com nnups.com @@ -72904,7 +72734,6 @@ nnzp.net nnzp8.com nnzw168.com nnzxtx.net -nnzxx.com nnzyjob.com nnzykf.com no-mad-world.club @@ -72944,6 +72773,7 @@ nodeme.site nodepacific.com nodpcba.com noeic.com +nohost.pro nohup.cc noipto.host noirphoenix.studio @@ -72963,7 +72793,6 @@ nome.com nomura-nset.com nomuraoi-sec.com nonfemet.com -nonganxian.com nongbaike.net nongbaotong.com nongcun5.com @@ -72983,9 +72812,7 @@ nongkaigufen.com nongkeyu.com nongli.com nongli.net -nongli114.com nonglirili.net -nongmiao.com nongmintv.com nongnet.com nongpin88.com @@ -73020,7 +72847,6 @@ noops.me nooshen.com nootoo.com nooxion.com -nopis.org noposion.com nor-land.com noratechpharma.com @@ -73059,7 +72885,6 @@ nosuchfield.com nosugar.tech nosugartech.com not3.com -notadd.com notbucai.com note52.com notedeep.com @@ -73175,6 +73000,7 @@ nrsfh.com nrsg.net nruan.com nrwspt.com +nrzb0.com ns-china.net ns1.hk ns1011.com @@ -73200,7 +73026,6 @@ nseac.com nsecsoft.com nseia.com nsemii.com -nsfcj.com nsfocus-sase.com nsfocus.com nsfocus.net @@ -73263,7 +73088,6 @@ ntdingke.com ntdjk.com ntdsyy.com ntdvf.com -ntefyxq.com ntes53.com ntes53.net ntescdn.com @@ -73298,7 +73122,6 @@ ntmyexp.com ntneuro.org ntp.felixc.at ntp123.com -ntp8.com ntpcb.com ntpcn.com ntpharma.com @@ -73361,6 +73184,7 @@ num2020.com numans.cc numemory.com nunaios.com +nuo5.com nuoan.com nuobeiliao.com nuobeirack.com @@ -73513,11 +73337,9 @@ nyd7y.com nydsrrsh.com nyefy.com nyfzx.com -nygczx.com nyjvbs.xyz nylingshang.com nylon-pussies.com -nymrx.com nync.com nypd520.com nyq.ink @@ -73552,7 +73374,6 @@ nziku.com nzkd.com nzlw.com nzmice.com -nzpzi0y.xyz nzqyowk.com nzrlzy.com nzsensing.com @@ -73573,7 +73394,6 @@ o03011aokk.com o03080aokk.com o0310o.com o03121aokk.com -o0o0o0o0o.one o0o0w.com o136.com o2123.com @@ -73663,6 +73483,7 @@ oceanbites123.com oceancloudapi.com oceancus.com oceandatas.com +oceando.cloud oceanengine.com oceanhood.com oceanol.com @@ -73681,10 +73502,10 @@ ocimg.com oclean.com oclkj.com ocn187.com -ocochome.info ocpuritech.com ocsjs.com ocsp.pki.goog +ocssaas.com oct-asia.com oct-cts.com octbay.com @@ -73806,7 +73627,6 @@ ohyee.cc oi-wiki.com oi-wiki.org oi3g.com -oi8.cc oia05041klq.com oia05050klq.com oia05051klq.com @@ -73844,6 +73664,7 @@ ojidacp.com ojkjt.com ojpal.com ok-meeting.com +ok-skins.com ok0415.com ok06.com ok096.com @@ -74027,6 +73848,7 @@ oneasp.com onebash.com onebiji.com onebox.site +onebrowser.net onebuygz.com onecoder.site oneconnectft.com @@ -74083,6 +73905,7 @@ onevcat.com oneway.mobi onewedesign.com onewo.com +onewos.com onewsimg.com onewtech.com onexinli.com @@ -74117,6 +73940,7 @@ only4.work onlyedu.com onlyedu.net onlyeduit.com +onlygamefans.com onlyidc.com onlylady.com onlyling.com @@ -74140,6 +73964,7 @@ onthetrip.com onthink.com onwaf.com onwear.net +onwork.com onwsw.com onyealink.com onyi.net @@ -74154,11 +73979,11 @@ oocct.com oocheoo.com ooclab.com oodii.com +oofont.com oogcw.com oogps.com oogsy.com oohdear.com -oohmark.com ooiii.com oojsq.com ooklaserver.net @@ -74231,9 +74056,11 @@ openew.com openfans.org openfde.com openfrp.net +opengame0.com opengcc.org opengslb.com openharmonyproject.com +openhippy.com openinstall.com openintelliedge.tech openke.net @@ -74264,6 +74091,7 @@ openwbs.com openwrt.ai openwrt.pro openxiaoniu.com +openxsea.com operachina.com operatorcom.com opfed.com @@ -74323,10 +74151,12 @@ oqss.com or-sun.com oracle-tencent.com oracle-tencent.net +oracle-tencent.org oracle.com oraev.com orafl.com oralpractice.com +orange-ci.net orange2h.com orangeapk.com orangeclk.com @@ -74344,6 +74174,7 @@ oraybox.com oraycn.com orayer.com orayimg.com +orbiepharm.com orbitmes.com orcadt.com orchid-lanhua.com @@ -74500,7 +74331,6 @@ otkglass.com otm.ink otms.com otoeasy.com -otome.me otomedream.com otosaas.com otp-express.com @@ -74509,7 +74339,6 @@ otqyzk7mx2t8.com ott-live.olympicchannel.com ott4china.com ottai.com -ottclub.com ottcn.com ottcn.help ottffss.net @@ -74517,11 +74346,11 @@ ottshopping.net ottssp.com otype.com ou163.com -ou45ehw.xyz ou99.com ouapi.com oubauneereid.com oubk.com +ouchang.net ouchengzl.com ouchgzee.com oucuibo.com @@ -74557,12 +74386,12 @@ oumoo.com ounh.org ounoe.com ounuoyq.com +ouo7.com ouou.com ouou.icu ououbet.com ouougo.com oup.com -oupa-tech.com oupaigroup.com oupeng.com oupeng9.com @@ -74631,6 +74460,7 @@ ourplay.net ourqm.com ourren.com oursakura.com +ourschool.cc oursec1.com oursec2.com ourselec.com @@ -74692,6 +74522,7 @@ ove3bi5rpn.com ovear.info ovellpump.com oversea-ks-cdn.com +overseasops.com overseaspharm.com overtrue.me ovglass.com @@ -74758,7 +74589,6 @@ oywtv.com oyxdwx.com oyya.com oyzns.com -oz138.com ozmvpbhc.com ozocenter.com ozonabc.com @@ -74766,7 +74596,6 @@ ozonbigsell.com ozoninfo.com ozouckzr.com ozsmartbuy.com -ozsp.com ozzyad.com p-an.com p-bstarstatic.akamaized.net @@ -74774,7 +74603,8 @@ p-dragon.com p-e-china.com p-er.com p-pass.com -p.biz +p-sig-dom.com +p-sig-dom.net p.bstarstatic.com p.cdn.persaas.dell.com p023.com @@ -74845,8 +74675,10 @@ padns.com padtf.com pafj.net pafwl.com +pag.art pagd.net pageadmin.net +pagedoo.com pagescube.com pageseagle.com pagetu.com @@ -74895,7 +74727,6 @@ paixie.net paixin.com paixueche.net paiyidan.net -paiyiws.com paiyuyy.com paizhaofanyi.net paizhe.com @@ -74918,6 +74749,7 @@ pally-travel.com palm-h.com palm.tech palma-battery.com +palmda.com palmebook.com palmeread.com palmestore.com @@ -75080,7 +74912,6 @@ paopaosz.com paopaozd.com paoshuba.cc paoshuba.org -paoxq.com paoxue.com paozhengtong.com paozw.org @@ -75164,13 +74995,13 @@ pascalmorio.com paschermontre.to pasertech.com pashu5.org -pasos2.com pass7.cc passer-by.com passfab.com passfab.tw passion120.com passiongroupltd.com +passip.xyz passthepopcorn.me passwordkeyboard.com pat-edu.com @@ -75300,6 +75131,7 @@ pcitech.com pcjsq.com pcljl.com pcmgr-global.com +pcmgr-global.net pcmoe.net pcoic.com pcoof.com @@ -75310,6 +75142,7 @@ pcpresent.com pcqudong.com pcr6.com pcr9170.com +pcrdfans.com pcscedu.com pcsee.org pcsfc.com @@ -75368,6 +75201,7 @@ pdinvestmentgroup.com pdlib.com pdlnn.com pdloscar.com +pdm.tech pdnob.com pdosgk.com pdrcfw.com @@ -75391,7 +75225,6 @@ pdxxg.com pdzls.com pe-exhibition.com pe.vc -pe314.com pe898.com peace-read.com peacebird.com @@ -75464,9 +75297,7 @@ peiyou.com peiyouwang.com peiyue.com peizi.com -pejgzc.com pejxjy.com -pek0b0.com pekhongyuan.com peksung.com pelejs.com @@ -75492,18 +75323,17 @@ pengqian.win pengrl.com pengrui-ssj.com pengshancy.com -pengshengcaishui.com pengtuzm.com penguin-logistics.space pengxinziyuan.com pengyaou.com pengyihotel.com pengyou.com +pengyou.net pengyoudewu.com pengyoukan.com pengyuanled.com pengyucpa.com -pengyunxin.com pengyuwei.net pengzhihui.xyz penhuijiqi.com @@ -75613,6 +75443,7 @@ pglstatp-toutiao-b.com pglstatp-toutiao.com pgmcatalyst.com pgos.cc +pgosglobal.com pgpop.com pgq.win pgqcw.com @@ -75851,7 +75682,6 @@ pifukezaixian.com pig4cloud.com pig66.com pigai.org -pigbt.com pigcms.com pighaihe.com pigji.com @@ -75874,14 +75704,13 @@ pilimeng.com pimaoji.com pimax.com pimei.com -pimspeak.com pin-color.net -pin0312.com pin18pin.com pin2eat.com pin5i.com pinan1688.com pinbaitai.com +pinbaiyan.com pinbang.com pinbayun.com pinble.com @@ -75942,7 +75771,6 @@ pingmudiy.com pingnanlearning.com pingnantong.com pingnuosoft.com -pingpang.info pingpangwang.com pingpingw.com pingpingze.com @@ -75990,7 +75818,6 @@ pinpai-bang.com pinpai.biz pinpai1.com pinpai37.com -pinpai9999.com pinpaihuoyuan.com pinpailiu.com pinpaime.com @@ -76060,6 +75887,7 @@ pixcakeai.com pixcakes.com pixe44lrifted.com pixelauth.com +pixeldance.com pixelgame.net pixepf.sbs pixiaojiang.com @@ -76067,7 +75895,6 @@ pixivic.com pixpark.net piyaoge.com piyipiba.com -pizkutam.shop pj-666.com pj-road.com pj.com @@ -76084,7 +75911,7 @@ pjjyzx.com pjlyds.com pjob.net pjtime.com -pk10088.com +pjtka.com pk106.com pk137.com pk2234.com @@ -76096,7 +75923,6 @@ pk995.com pkbeta.com pkbff.com pkbigdata.com -pkbkok.com pkcity.com pkfish.com pkfj.xyz @@ -76106,10 +75932,8 @@ pkgklk.com pki.plus pkm360.com pkma.cc -pkmer.net pko123.com pkoplink.com -pkpk999.com pkpky.com pkpmjc.com pkpmsoft.com @@ -76180,6 +76004,7 @@ play-cdn13.com play-cdn14.com play-cdn16.com play-cdn20.com +play-cdn7.com play.craft.moe play.jinnantv.top play.scrstv.com @@ -76188,6 +76013,7 @@ play68.com play700.com play910.com play920.com +playbattleaces.com playcase.com playchd.com playcomet.jp @@ -76211,6 +76037,7 @@ playwonderful.com playwxgame.com playyx.com playzy.com +plb1.com plbig.com plc100.com plc11.com @@ -76246,6 +76073,7 @@ plusco-tech.com plusgantt.com plusplus7.com plusplustu.com +plusrtc.com plutoer.com plutuspay.com pluveto.com @@ -76304,7 +76132,6 @@ pmxsd.com pmyes.com pmyuanxing.com pn1waq.com -pn7yv9y.xyz pnas.org pnetp.org pnfang.com @@ -76316,7 +76143,6 @@ pniao.com pnol.net pnst8.com pntagkyy.com -pntagsyy.com pntkyy.com pntryy.com pnty1688.com @@ -76363,6 +76189,7 @@ pokemmc.com pokemon-unitepgame.com pokemon.vip pokerbros.net +pokercup.net pokermate.net poketb.com polamus.com @@ -76493,6 +76320,7 @@ potensic.com potevio.com potianji.net potomaccottage.com +potops.com potplayer.org potplayercn.com pouchcontainer.io @@ -76529,6 +76357,7 @@ powerlong.com powerlongmuseum.com powerma.net powermaxcorp.com +poweron.cc powerpigs.net powerpms.com powerrsoft.com @@ -76554,14 +76383,11 @@ pp30.com pp365.com pp373.com pp51.com -pp5200.com pp540.com pp63.com -pp77.com pp918.com pp9l.com ppad.com -ppaie.com ppaiss.com ppbizon.com ppbnchina.com @@ -76709,6 +76535,8 @@ pr1bg.com pradabao.com pratic-cnc.com prayaya.com +prayaya.net +prayaya.org prcedu.com prcee.org prcfe.com @@ -76749,6 +76577,7 @@ privateapi.xyz privatehd.to privatess.win privspace.net +prizesapp.com prjdrj.com prkfyy.com prnewspress.com @@ -76784,6 +76613,7 @@ project.ai projectaker.com projector-jl.com projector-window.com +projectserval.com projektenergetika.com proleantech.com prolog-int.com @@ -76872,7 +76702,6 @@ pszx.com pszxw.net pt-link.com pt597.com -pt791.com pt80.net pt963.com pt97.com @@ -76890,7 +76719,6 @@ ptfe-rod.com ptfish.com ptfish.org ptgcn.com -pthb668.com pthceshi.com pthksw.com pthxuexi.com @@ -76907,7 +76735,9 @@ ptorch.com ptotour.com ptpcp.com ptrcw.com +pts-ai-texture.com pts-testing.com +pts.games ptshare.org ptszgh.org ptt.xyz @@ -76974,7 +76804,6 @@ puhedesign.com puhler.com puhuacapital.com puhuahui.com -puhuatest.com puhuaxincai.com puidc.com puiedu.com @@ -77020,6 +76849,7 @@ pureh2b.com purekindfund.com puremild.com purenyy.com +puresnake.com puresys.net purewhite.io purified-group.com @@ -77051,6 +76881,7 @@ putaojiu.com putaotec.com putclub.com putdb.com +putdl.com putian-nst.com putian508.com putiandai.com @@ -77079,9 +76910,7 @@ pvacegurmbz3e.com pvc-diban.net pvc123.com pvcliping.com -pvmeng.com pvpin.com -pvxmqp.xyz pvz.moe pw-partners.com pw1999.com @@ -77157,7 +76986,6 @@ pyjdgj.com pyjkd.com pyjt.net pyker.com -pylcjt.com pylonghai.com pymeng.com pymh.com @@ -77297,7 +77125,6 @@ qbitai.com qbj.cc qbjrxs.com qbjwater.com -qbnjj.com qbox.me qbox.net qbtxt.net @@ -77322,6 +77149,10 @@ qcckyc.com qccost.com qccr.com qccrm.com +qcdne.com +qcdnlog.com +qcdntest.com +qcdntest.net qcds.com qcdy.com qcdyj.com @@ -77331,20 +77162,22 @@ qcers.net qcgm.net qcgq168.com qchcm.com -qcheng.cc qches.com qchouses.com qchxt.com qckuaizhi.com qclc.com +qclivecdn.com qcloud-edumall.com qcloud.com qcloud.la qcloudapps.com qcloudcdn.com +qcloudcdnsrc.com qcloudcjgj.com qcloudclass.com qcloudcos.com +qcloudcos.net qcloudecdn.com qclouder.com qcloudestate.com @@ -77355,6 +77188,8 @@ qcloudipv6.com qcloudmail.com qcloudmarket.com qcloudns.com +qcloudocdn.com +qcloudoceanus.com qcloudsmartiot.com qcloudtcic.com qcloudteo.com @@ -77365,6 +77200,7 @@ qcloudwaf.com qcloudwzgj.com qcloudzygj.com qcly.love +qcly.xyz qcmgkids.com qcmod.xyz qcmoe.com @@ -77382,7 +77218,6 @@ qcrencai.com qcrlvip.com qcrqll.com qcsapp.com -qcsdn.com qcsh8.net qcsj.com qcstudy.com @@ -77478,6 +77313,7 @@ qdjttzjt.com qdjunyi.com qdjxhz.com qdjyjtdzsw.com +qdkefu.com qdkelinde.com qdkingst.com qdkmjc.com @@ -77530,8 +77366,10 @@ qdtianxintai.com qdtrrh.com qdtxdzgc.com qduhwq.com +qdurl.cc qdwebim.com qdwenxue.com +qdwpa.com qdwxnet.com qdxct.com qdxfgy.com @@ -77566,6 +77404,8 @@ qeeniao.com qeerd.com qefee.com qegcdn.com +qeoacc.com +qeoacc.net qeoagphm.com qeodns.com qeodns.net @@ -77621,6 +77461,7 @@ qgjcjyzb.com qgjzsc.com qgkjacc.com qgnvbc.com +qgodb.com qgpx.com qgqc.shop qgqy.com @@ -77629,7 +77470,6 @@ qgswvza.com qgsydw.com qgtql.com qgvps.com -qgw.tm qgwzjs.com qgxl.org qgyksr.com @@ -77643,7 +77483,6 @@ qh-cdn.com qh-dl.com qh-hospital.org qh-lb.com -qh.dlservice.microsoft.com qh24.com qh4321.com qh6bc.com @@ -77730,6 +77569,7 @@ qhtibetan.com qhtui.com qhtycp.com qhtyzx.com +qhuah.com qhwmw.com qhwptyn.com qhwww.com @@ -77786,7 +77626,6 @@ qiandeups.com qianduan.com qianduanheidong.com qiandunvpn.com -qiandw.com qianfan.tv qianfan123.com qianfan365.com @@ -77797,7 +77636,6 @@ qiang100.com qiangbus.com qiangchezu.com qiangchuan.com -qiangdun.com qiangfu.xyz qianggen.com qianggen.net @@ -77840,6 +77678,7 @@ qianka.com qiankoo.com qiankun6.com qiankungroup.com +qiankunshopping.com qiankunxin.com qianlaiye.com qianlht.com @@ -77899,9 +77738,10 @@ qianxincdn.com qianxinet.com qianxingniwo.com qianxingwl.com -qianxiwangluo.com qianxs.com +qianxuecloud.com qianxuew.com +qianxueyunke.com qianxun.com qianxunclub.com qianxungroup.com @@ -77909,14 +77749,12 @@ qianxuntrip.com qianyan.biz qianyan001.com qianyanchefang.com -qianyanjiu.com qianye88.com qianyierp.com qianyikeji.com qianyinedu.com qianyingzhi.com qianyuangx.com -qianyuanshijie.com qianyuewenhua.xyz qianyuncare.com qianyuwang.com @@ -77946,10 +77784,10 @@ qiaohumall.com qiaoji8.com qiaojiamuxian.com qiaojiang.tv +qiaolianyimin.com qiaolishuiwu.com qiaomaren.com qiaomi.com -qiaomizi.vip qiaomu.ai qiaomukeji.com qiaoshang.org @@ -78021,6 +77859,8 @@ qidaile.com qideshuiwu.com qideyun.com qidi-edu.com +qidian-cos-backup.com +qidian-cos.com qidian.com qidian688.com qidianbox.com @@ -78044,10 +77884,12 @@ qiduo.net qie.tv qiecdn.com qieerxi.com +qiejingsu.com qiekao.com qiekj.com qieman.com qiepai.com +qieracing.com qierge.com qieta.com qieyike.com @@ -78237,6 +78079,7 @@ qingdouw.com qingf001.com qingfanqie.com qingfeichina.com +qingfengchuxing.com qingfengjiaoyu.com qingflow.com qingfo.com @@ -78264,7 +78107,6 @@ qingju.com qingkai.net qingkan.tw qingkaoyan.com -qingke800.com qingkeji.com qingkongfy.xyz qingkuaipdf.com @@ -78276,6 +78118,7 @@ qinglanji.com qinglianfood.com qingliange.com qingliangkeji.com +qingliaoapp.com qinglidashi.com qinglin.net qingline.net @@ -78314,7 +78157,6 @@ qingrenw.com qingruanit.net qingruyun.com qingshanpaper.com -qingshanzl.com qingshigame.com qingshou.online qingshow.net @@ -78361,7 +78203,6 @@ qingyuanshihua.com qingyun-it.com qingyun.com qingyuntrip.com -qingyunxueshe.com qingyunzu.com qingzhanshi.com qingzhicheng.com @@ -78441,7 +78282,6 @@ qinyuanyang.com qinyukehuan.com qinzc.me qinzhe.com -qinzhi.cc qinzhou.net qinzhou360.com qinzhou8.com @@ -78473,7 +78313,6 @@ qiqjc.com qiqu.cc qiquanwl.com qiquha.com -qiquhudong.com qiqumaker.com qiquw.info qiquwen.com @@ -78547,6 +78386,7 @@ qiuwen.wiki qiuwu.net qiuxian.com qiuxiao.com +qiuxietang.com qiuxue360.com qiuxueshe.com qiuy.cloud @@ -78609,7 +78449,6 @@ qiyeyouxiang.net qiyi.com qiyi.video qiyicc.com -qiyigx.com qiyikeji.com qiyimusic.com qiyipic.com @@ -78666,6 +78505,7 @@ qjdchina.com qjfy.com qjhlw.com qjhm.com +qjia.com qjiajk.com qjidea.com qjimage.com @@ -78740,6 +78580,11 @@ qlife-lab.com qlinyun.com qlippie.com qlivecdn.com +qlivecloud.com +qlivertc.com +qlivertc2.com +qlivewebrtc.com +qlivewebrtc2.com qll-times.com qlmoney.com qlnonwoven.com @@ -78756,6 +78601,7 @@ qlxiaozhan.com qlxyedu.com qlxzj.com qlydw.com +qlyjt.com qlyygl.com qlyyqd.com qlzygs.com @@ -78785,10 +78631,12 @@ qmniu.com qmoji.mobi qmoji.net qmqm.net +qmrms.com qmrobot.com qmsea.com qmsjmfb.com qmtj.net +qmtjgame.com qmtmedia.com qmtv.com qmvchina.com @@ -78865,6 +78713,7 @@ qpjjku.com qpjylm.com qpkaifa.com qplus.com +qplusstatic.com qpmwg68cre9pci.com qpoc.com qpstar.com @@ -78881,6 +78730,8 @@ qq.design qq.do qq.md qq.net +qq.travel +qq.zone qq123.xin qq1398.com qq163.cc @@ -78909,22 +78760,31 @@ qqb.pub qqba.com qqbiaoqing.com qqbibile.com +qqbrowser.mobi +qqbytrans.com qqcdn.com +qqcfw.net qqcg.com qqcjw.com +qqclass.com +qqclock.com qqcrvpv.com qqdcw.com qqddc.com qqdiannao.com qqdiannaoguanjiadl.com qqdna.com +qqdr.com qqdzzb.win qqe2.com qqeml.com qqeo.com qqexmail.net +qqexpert.com +qqfamily.com qqgameapp.com qqgamedesign.com +qqgamemall.com qqgames.com qqgb.com qqgd.com @@ -78935,6 +78795,9 @@ qqgpw.com qqgx.com qqgygd.com qqgyhk.com +qqhangjia.com +qqhaoma.com +qqhaoma.net qqhbx.com qqhjy.com qqhn.net @@ -78944,12 +78807,14 @@ qqhrnews.com qqhubei.com qqhwb.com qqiac.com +qqimage.net +qqimg.net +qqjapan.com qqje.com qqjia.com qqjiyu.com qqjjsj.com qqjm.com -qqjswang.com qqju.com qqkj66.com qqkjj.com @@ -78961,18 +78826,22 @@ qqkwsitu.com qqlivepull.seedata.top qqmail.com qqmail.email +qqmapyx.com qqmc.com qqmcc.org qqmda.com qqmra.com qqmtc.com qqmusic.com +qqmusic.store +qqnaozhong.com qqnn.net qqopenapp.com qqor.com qqpao.com qqpharm.com qqpifu.com +qqplusapp.com qqppt.com qqq.tv qqqiyemail.com @@ -78985,6 +78854,7 @@ qqrer.com qqrizhi.com qqro.com qqscb.com +qqservice.mobi qqsgame.com qqsgjy.com qqsgmob.com @@ -78996,6 +78866,7 @@ qqsk.com qqski.com qqsm.com qqsort.com +qqspark.com qqssly.com qqstudent.com qqsurvey.net @@ -79014,11 +78885,14 @@ qqtu8.com qqtz.com qquanquan.com qqumall.com +qqun.com qqurl.com -qqvip.com qqwangming.net qqwangming6.com +qqwebapp.com qqwewew.com +qqwiki.com +qqwinner.com qqwjx.com qqwmba.net qqwmly.com @@ -79060,6 +78934,7 @@ qrcpu.com qrfq25sg.xyz qrgiant.com qrmanhua.com +qrobot.com qrprt.com qrsvm.com qrtest.com @@ -79069,7 +78944,6 @@ qrzxx.com qs-jt.net qs12315.com qs5.org -qs71lc6.xyz qs921.com qsap-group.com qsb.browser.miui.srv @@ -79088,7 +78962,6 @@ qsfm.net qsgx-pt.com qshang.com qshealth.com -qshlh.com qsiedu.com qsiso.com qsjsjt.com @@ -79125,6 +78998,7 @@ qszs.com qszt.com qszt.net qt-edu.com +qt.com qt119.com qt56yun.com qt6.com @@ -79171,6 +79045,7 @@ qtshe.com qtshisan.com qtshu.com qtshu.la +qtslog.com qtsyw.com qtsyzfc.com qttc.net @@ -79198,7 +79073,6 @@ quan365.com quanaichina.com quancang.com quandashi.com -quandier.com quanduoduo.com quanerp.com quanfangtong.net @@ -79249,7 +79123,6 @@ quanshuge.com quansucloud.com quantacn.com quantaoyougou.com -quantiku.org quantil.com quantilcn.com quantilcn.net @@ -79259,6 +79132,7 @@ quantongfu.com quantuantuan.com quantum-etc.com quantum-info.com +quantumsc.online quanup.com quanwai100.com quanwiki.com @@ -79293,7 +79167,6 @@ quchao.net qucheng.com quclouds.com qudaiji.com -qudao.biz qudao.com qudao168.com qudaowuyou.com @@ -79578,6 +79451,7 @@ quickpark.cc quicksdk.com quicksdk.net quickswan.com +quicktvui.com quickwis.com quilimen.com quimg.com @@ -79679,9 +79553,13 @@ qushuba.net qushuiying.net qutaiwan.com qutanme.com -qutanup.com qutao.com qutaojiao.com +qutecall.com +qutechat.com +qutemessenger.com +qutetalk.com +qutevoice.com quthing.com qutianshanav.com qutingting.com @@ -79696,7 +79574,6 @@ quumii.com quvisa.com quwan.com quwangming.com -quweiguan.com quweiwu.com quwenqing.com quwentxw.com @@ -79738,6 +79615,7 @@ qwconnect.top qwe1e.com qweather.com qweather.net +qwebapp.com qwen.ai qwenlm.ai qwerdns.com @@ -79819,7 +79697,6 @@ qxw.cc qxw18.com qxwz.com qxxsjk.com -qxxzf.com qxy777.com qxycy.com qxyjssb.com @@ -79830,6 +79707,10 @@ qy-marathon.com qy-office.com qy-polymer.com qy-qq.com +qy-tencentclb.cloud +qy-tencentclb.com +qy-tencentclb.net +qy-tencentclb.work qy.com qy.net qy266.com @@ -79871,6 +79752,7 @@ qyjidianqi.com qyjks.com qykh2009.com qykjedu.com +qymdb.com qymgc.com qyous.com qyrb.com @@ -79893,12 +79775,17 @@ qytranslation.com qytst.com qytxhy.com qyunapp.com +qyuner.com qyuns.net qywater.net qywcom.com qywd.com qywww.net qyx888.com +qyxa-tencentclb.cloud +qyxa-tencentclb.com +qyxa-tencentclb.net +qyxa-tencentclb.work qyxby.com qyxxpd.com qyxzfw.com @@ -79965,7 +79852,6 @@ qzjhscl.com qzjhsd.com qzjianwo.com qzjkw.net -qzjxzs.com qzjy029.com qzjycc.com qzjzyy002.com @@ -80035,7 +79921,6 @@ qzxx.com qzyb.com qzyckhzx.com qzynhhmm.com -qzynx.com qzyonyou.com qzyuchao.com qzyz.com @@ -80075,9 +79960,9 @@ r6d7345371.com r75y8c2628.com r77777777.com r79xqa8r7e93.com +r8hr7.net r9t1.com ra022.com -ra216.com ra2ol.com raas1.com rabbit1117.com @@ -80141,7 +80026,6 @@ rainso.com rainwe.com rainyun.com raise-win.com -raisecenter.net raisecom.com raisedsun.com raisewebdesign.com @@ -80162,6 +80046,7 @@ ramventures.com ramwaybat.com rancat.im randengseo.com +randongada.com randongma.com randyandtheresa.com rangercd.com @@ -80211,8 +80096,8 @@ ratingtoken.net rationalwh.com ratogh.com ratoo.net -ratuo.com rauto.com +ravenna0943.xyz rawanfa.com rawchen.com raxtone.com @@ -80221,9 +80106,21 @@ ray1988.com ray8.cc raycham.com raychase.net +raycim.com raycloud.com raycom-inv.com raycuslaser.com +raydata-asset.com +raydata-mobile.com +raydata-open.com +raydata-web.com +raydata.cc +raydata.info +raydata.pro +raydataasset.com +raydatamobile.com +raydataopen.com +raydataweb.com raydonet.com rayenergytech.com rayfalling.com @@ -80232,10 +80129,17 @@ raygame3.com raygame4.com rayiantway.com rayjoy.com +raykite.club +raykite.com +raykite.info +raykite.net +raykite.vip +raykite.xyz rayli.com raylink.live raymage.com raymx-micro.com +raynext.info rayoptek.com rayp.com rayps.com @@ -80280,8 +80184,6 @@ rc120.com rc168.com rc3cr.com rc775.com -rc86.net -rcads.net rcbc888.com rcbuying.com rccaijing.com @@ -80295,8 +80197,6 @@ rcgus.com rchdjgj.com rchsrc.com rchudong.com -rchun.com -rcjinling.com rcjypx.com rclbbs.com rclhome.com @@ -80313,7 +80213,6 @@ rcswo.com rcsxzx.com rcuts.com rcwl.net -rcxxt.net rcyd.net rcyjw.com rcyxdk.com @@ -80330,6 +80229,8 @@ rdamicro.com rdbuy.com rdcnzz.com rdcolg.net +rdcv1.com +rdcv1.net rddesign.cc rddoc.com rdedu.net @@ -80409,9 +80310,9 @@ realmax-sh.com realme.com realme.net realmebbs.com -realmedy.com realmemobile.com realmeservice.com +realmofswords.com realor.net realsee-cdn.com realsee.com @@ -80455,6 +80356,7 @@ redcross-sha.org reddogchina.com redearth.com redefine.ltd +redenmc.com redfcv.com redflag-linux.com redflagseed.com @@ -80568,6 +80470,7 @@ remapcity.com remax-bj.com remenxs.cc remixai.com +remixicon.com remo-ai.com remodelife.com remotcon.mobi @@ -80866,11 +80769,14 @@ rikua.com rili11.com rilijingling.com rilingpec.com +riliri.com rilvtong.com rim20.com rimaiwang.com rin9.com ringdoll.com +ringofelysium.com +ringofelysiumonline.com ringpu.com rining.com rinlink.com @@ -80957,6 +80863,7 @@ rjfeng.com rjghome.com rjh0.com rjhcsoft.com +rjitxy.com rjlqq.com rjoy.com rjpharm.com @@ -80985,7 +80892,6 @@ rksec.com rkvir.com rkzxhyy.com rl-consult.com -rl-seo.com rlair.net rljydt.com rlkj.com @@ -81002,6 +80908,7 @@ rlzdh.com rlzki31dgypt.com rlzyxa.com rm.run +rmall-solution.com rmb.sh rmbbk.com rmbgame.net @@ -81026,6 +80933,7 @@ rmwxgame.com rmxiongan.com rmysjzx.com rmzs.net +rmzszp.com rmzt.com rmzxb.com rn-core.com @@ -81048,12 +80956,14 @@ roadlady.com roadoor.com roadqu.com roadsignads.com +roadtoempress.com roadwaygroup.com roaing.com robam.com robei.com roboeyeai.com robomaster.com +roboneo.com roboo.com robook.com robopeak.net @@ -81157,7 +81067,6 @@ ronggangcity.com ronggongyeya.com rongguang-sh.com ronghai.com -ronghaosk.com ronghedai.com ronghotels.com ronghuajixie.com @@ -81217,7 +81126,6 @@ rootcloud.com rootguide.org rootintech.com rootjl.com -rootop.org rootopen.com rootzhushou.com roouoo.com @@ -81273,7 +81181,6 @@ routuan.com rouxiutang.com rouzao.com rouzhitang.com -rovelskys.com rowa.com rowcan.com rowlib.com @@ -81286,10 +81193,8 @@ royotech.com roywang.com rp-field.com rp-pet.com -rp76en.com rpa-cn.com rpaii.com -rpfbzjam.shop rpfieldcdn.com rpg99.com rpgmoba.com @@ -81312,8 +81217,6 @@ rrbjt.com rrbus.com rrchem.com rrcimg.com -rrcp.com -rrdiaoyu.com rrdtz.com rrfed.com rrfmn.com @@ -81406,6 +81309,7 @@ rt-ics.com rt-thread.com rt-thread.io rt-thread.org +rtacdn-os.com rtahengtai.com rtalink.com rtb5.com @@ -81443,7 +81347,6 @@ rtyxpt.com rtyy.com ru-northwest-2.myhuaweicloud.com ru5sq.com -ru9911.com rua93.online ruan.cloud ruan8.com @@ -81496,7 +81399,6 @@ rueiran.com ruesu.com rufei.ren rufengda.com -rufengso.net ruffhousetraining.com ruffood.com rufida.com @@ -81536,7 +81438,6 @@ ruifengchemical.com ruifengdisplay.com ruifenginfo.com ruifengjk.com -ruifengzhaoming.com ruifuwatch.com ruige.com ruigedf.com @@ -81554,6 +81455,7 @@ ruiinsurance.com ruijiehuanbao.com ruijienetworks.com ruijiery.com +ruijieyun.com ruijinginfo.com ruijinintl.com ruijinyy.com @@ -81605,6 +81507,7 @@ ruiyuanchina.com ruiyuanobserve.com ruiyun.com ruiyunit.com +ruize66.com ruizhi-group.com ruizhipak.com ruizhiqi.com @@ -81682,6 +81585,7 @@ runzeyuan.com runzi.cc ruochu.com ruodian360.com +ruofeisinian.com ruohang.com ruohuo.net ruokuai.com @@ -81733,7 +81637,6 @@ ruyo.net ruyu.com ruyuecx.com ruyuexs.com -ruzhipin.cc ruzong.com ruzw.com rv28.com @@ -81772,6 +81675,8 @@ rxljzy.com rxndt.com rxshc.com rxtchp.com +rxwsls.com +rxwsls.net rxxdny.com rxyjqz.com rxykamto.com @@ -81859,6 +81764,7 @@ s-pia.org s-q-s.net s-reader.com s-ss.cc +s-tech.com s-ts.net s-xsenyuan.com s-yue.com @@ -81900,6 +81806,10 @@ s9yun.com sa-brazil-1.myhuaweicloud.com sa-ec.com sa-log.com +sa-tencentclb.cloud +sa-tencentclb.com +sa-tencentclb.net +sa-tencentclb.work sa-token.cc sa20.com sa516gr70.com @@ -81918,6 +81828,7 @@ sac-china.com sacdr.net sachenpharm.com sact-digital.com +sadidc.com sae-china.org saebbs.com saec.cc @@ -81932,6 +81843,7 @@ safecenter.com safeglp.com safehoo.com safejmp.com +safejmp.net safeluck.com safeneeds.com safenext.com @@ -81941,6 +81853,7 @@ safetyvod.com safround.com sagepub.com sagigame.net +sagsaas.com sagw.com sahcqmu.com saheo.com @@ -82032,7 +81945,6 @@ salesman-bd.com salg-sichuanair.com saliai.com salogs.com -salonglong.com salongweb.com salutecc.asia sam-tec.com @@ -82114,7 +82026,6 @@ sangfor.org sangforcloud.com sangfordns.com sangle.com -sanglianju.com sangmifort.com sangon.com sangongzai.net @@ -82273,6 +82184,10 @@ sanzijing.org sanzinfo.com sanzkf.com sao-ma.com +sao-tencentclb.cloud +sao-tencentclb.com +sao-tencentclb.net +sao-tencentclb.work sao.ren saohua.com saoic.com @@ -82300,6 +82215,7 @@ sasecurity.com sass.hk sasscss.com sasseur.com +sassi2956.xyz sassywind.shop sast.fun sast.net @@ -82558,6 +82474,7 @@ scdnulx9.com scdnurea.com scdnv7uq.com scdnvij7.com +scdnvip.com scdnw4kb.com scdnwehb.com scdnwljp.com @@ -82711,6 +82628,7 @@ scl-cn.com sclanyingkj.com sclf.org scll.cc +scloudgda.com sclrjc.com sclsnk.com sclssz.com @@ -82760,6 +82678,8 @@ scqstv.com scqy100.com scraij.com scrape.center +scratchmirror.com +scratchmirror.net scrc168.com scrcnet.org scrcu.com @@ -82913,6 +82833,7 @@ sdacid.com sdailong.com sdaofu.com sdapo.net +sdaswq.com sdawhuagong.com sdaxue.com sdazgs.com @@ -83012,7 +82933,6 @@ sdg-china.com sdg53.com sdgakj.com sdgckg.com -sdgcnai.com sdgdwljt.com sdgdxt.com sdgh.net @@ -83075,7 +82995,6 @@ sdhsrh.com sdhssfjt.com sdht666.com sdhtkt.com -sdhtsbyy.com sdhtwl.com sdhualigongshui.com sdhuanneng.com @@ -83201,7 +83120,6 @@ sdnlab.com sdnsbd.com sdnxs.com sdnydb.com -sdnysc.com sdo-shabake.com sdo.com sdodk.com @@ -83282,6 +83200,7 @@ sdstet.com sdstg.com sdstrong.com sdstslyy.com +sdstudy.vip sdswitch.com sdswtz.com sdsxwz.net @@ -83299,11 +83218,9 @@ sdteya.com sdthrq.com sdtianjing.com sdtkgl.com -sdtlly.com sdtlpm.com sdtlyyjt.com sdtryyjt.com -sdtsrf.com sdtugongbucj.com sdtvjiankang.com sdtwxx.com @@ -83411,7 +83328,6 @@ seafile.com seaflysoft.com seafrom.com seagull-digital.com -seagulllocker.com seagullwatch.com seagullwatches.com seahisun.com @@ -83431,7 +83347,6 @@ seanya.com seanyxie.com seapard.com seapsoft.com -seaquire.com search616.com searcheasy.net searchpstatp.com @@ -83538,6 +83453,7 @@ seepomotor.net seerbigdata.com seerking.com seesawcoffee.com +seesea.site seeseed.com seeshentech.com seetacloud.com @@ -83726,12 +83642,14 @@ sereypath.com serholiu.com seridc.com servasoft.com +serveclouds.com serverless-devs.com serverproof.net service.urchin.com service86.com servicemesher.com servicewechat.com +serviceweixin.com servilabmedical.com sesamestreetenglishchina.com sesamewatermelon.com @@ -83756,7 +83674,6 @@ sevnday.com sevnz.com sewise.com sexytea2013.com -sey.ink seyoo.net seyuma-cn.com sf-airlines.com @@ -83780,7 +83697,6 @@ sf-saas.com sf-zs.net sf007.com sf024.com -sf0jm.xyz sf2021.com sf34.com sf888.net @@ -83857,6 +83773,10 @@ sg-che.com sg-gemsy.com sg-gzy.com sg-micro.com +sg-tencentclb.cloud +sg-tencentclb.com +sg-tencentclb.net +sg-tencentclb.work sg.work sg163.com sg169.com @@ -83891,7 +83811,6 @@ sgliulian.com sgllk.com sgmart.com sgmlink.com -sgmob.net sgmsonline.com sgmw.com sgmwlu.com @@ -83903,6 +83822,7 @@ sgplink.xyz sgpsea.com sgqd.com sgqqxh.org +sgrastudio.com sgrbcm.com sgrcw.com sgrsvakz.com @@ -83954,7 +83874,6 @@ sh-dongbiao.com sh-eastwes.com sh-edi.com sh-eshow.com -sh-fangao.com sh-fdtw.com sh-fxgz.com sh-fy.com @@ -84026,6 +83945,8 @@ sh-tangfeng.com sh-tayor.com sh-tencentclb.cloud sh-tencentclb.com +sh-tencentclb.net +sh-tencentclb.work sh-ticket.com sh-tm.com sh-valve.com @@ -84078,13 +83999,16 @@ shabiyun.com shachong8.com shacumox.com shadafang.com +shadc-tencentclb.cloud +shadc-tencentclb.com +shadc-tencentclb.net +shadc-tencentclb.work shaddockfishing.com shaddy.jp shadiao.pro shaduizi.com shafa.com shafaguanjia.com -shaftgd.com shagangcapital.com shagyy.com shahupark.com @@ -84139,7 +84063,6 @@ shandonglanhua.com shandongqinuo.com shandongruyi.com shandongsannong.com -shandongtianmai.com shandongyunpin.com shandw.com shanedit.com @@ -84360,7 +84283,6 @@ shanlinjinrong.com shanlink.com shanlinshengwu.com shanliulian.com -shanmao.me shanmeixincai.com shanniaorecycle.com shannon-sys.com @@ -84504,7 +84426,6 @@ shatian.org shautomuseum.com shavingbrush-china.com shawdo.com -shawdubie.com shawnzeng.com shaxian.biz shayugg.com @@ -84567,9 +84488,7 @@ shcmer.com shcmhr.com shcnfb.com shcngz.com -shcs2010.com shcsdq.com -shcso.com shcstheatre.com shcwmotor.com shcxbyjt.com @@ -84602,7 +84521,6 @@ shdsd.com shdsn.com shdsqs.com shdszc.com -shdwdz.com shdxgraphene.com shdxk.com shdy.com @@ -84628,12 +84546,15 @@ shedejie.com shedongyun.com shedoor.com shedunews.com +sheec-tencentclb.cloud +sheec-tencentclb.com +sheec-tencentclb.net +sheec-tencentclb.work sheencity.com sheenrun.com sheentec.com sheep11.com sheepmats.com -shehuizeren100.com sheinet.com sheji.com shejiadoors.com @@ -84665,6 +84586,7 @@ shelterdome.net shelwee.com shen-grh.com shen-nao.com +shen-xi.com shen321.com shenanhui.com shenbinghang.com @@ -84758,7 +84680,6 @@ shengshijw.com shengshizhicheng.com shengtai.com shengtaigroup.net -shengtangtextile.com shengtian.com shengtiangroup.com shengtongedu.com @@ -84808,7 +84729,6 @@ shenlan02.com shenlanbao.com shenlaohr.com shenling.com -shenliyang.com shenma-inc.com shenma.com shenmabaike.com @@ -84886,7 +84806,6 @@ shenzhen-kuaiji.com shenzhen-world.com shenzhenair.com shenzhenbaoanmarathon.com -shenzhenbbs.com shenzhenbianhua.com shenzhenew.com shenzheninvestment.com @@ -84996,6 +84915,15 @@ shhmbio.com shhmu.net shholdingeu.com shhorse.com +shhqcft-tencentclb.cloud +shhqcft-tencentclb.com +shhqcft-tencentclb.net +shhqcft-tencentclb.work +shhqcftfzhj-tencentclb.cloud +shhqcftfzhj-tencentclb.com +shhqcftfzhj-tencentclb.net +shhqcftfzhj-tencentclb.work +shhqcftfzhjtencentclb.cloud shhqgc.com shhrp.com shhtqn.com @@ -85033,7 +84961,6 @@ shicaidai.com shicaizhanlan.com shicaotangchina.com shicehao.com -shichang.biz shichangbu.com shichengbao.com shichengyi.com @@ -85092,6 +85019,7 @@ shijian.cc shijian.org shijiancn.com shijianla.com +shijianping.com shijiaok.com shijicloud.com shijie2.com @@ -85128,7 +85056,6 @@ shikelang.cc shikongdaoyu.com shiku.co shilehui.com -shileizcc.com shileizuji.com shilian.com shilian.net @@ -85238,7 +85165,6 @@ shishacharcoal.net shishagame.com shishangd.com shishangfengyun.com -shishangweilai413.com shishenmegeng.com shishifanyi.com shishijia.com @@ -85338,9 +85264,12 @@ shjincan.com shjingmi.com shjingxu.com shjinnengzuche.com -shjkcable.com shjlnzyy.com shjob.work +shjr-tencentclb.cloud +shjr-tencentclb.com +shjr-tencentclb.net +shjr-tencentclb.work shjsit.com shjsrg.com shjsst.com @@ -85420,7 +85349,6 @@ shmetro.com shmfmr.net shmhtv.com shmhzp.com -shmiaosai.com shmljm.com shmockup.com shmog.org @@ -85487,7 +85415,6 @@ shopyy.com shorcut88.com shorologe.com shortof.com -shotblastcleaningsystems.com shotnba.com shou-qi.com shoubaiart.com @@ -85639,7 +85566,6 @@ shqipai.org shqkxh.org shqmxx.com shqncs.com -shqpphschool.com shqpxc.com shqswlgs.com shqunlu.com @@ -85784,7 +85710,6 @@ shuangjing.net shuangken.com shuangkou.net shuangkuai.co -shuangle56.com shuangle888.com shuangliang-boiler.com shuanglin.com @@ -85924,7 +85849,9 @@ shuixin.tech shuiyaohuo.com shuiye.cc shuiyinbao.com +shuiyinwang.com shuiyinyu.com +shuiyinyun.com shuiyoucam.com shuiyugame.com shuiyuwenquan.com @@ -86049,8 +85976,8 @@ shuozhiwu.com shupackaging.com shupaiyun.com shupeng.com -shuq.net shuqi.com +shuqiandiqiu.com shuqiaozt.com shuqiapi.com shuqiread.com @@ -86106,6 +86033,7 @@ shuzhibaogao.net shuzhiduo.com shuzhou.cc shuzibao.com +shuzifuyu.com shuzigd.com shuzigonggao.com shuziguanxing.com @@ -86136,6 +86064,14 @@ shwtqx.com shwuji.com shwx.com shwxtw.com +shwxzf-tencentclb.cloud +shwxzf-tencentclb.com +shwxzf-tencentclb.net +shwxzf-tencentclb.work +shwxzfjpyzc-tencentclb.cloud +shwxzfjpyzc-tencentclb.com +shwxzfjpyzc-tencentclb.net +shwxzfjpyzc-tencentclb.work shwyky.net shwzjt.com shwzoo.com @@ -86190,6 +86126,7 @@ shygdz.com shyhgj.com shyhhema.com shyihuoh.com +shyingt.asia shyirijian.com shyisai.com shykx.com @@ -86219,6 +86156,7 @@ shyuwl.com shyuzhai.com shywly.com shyx-bio.com +shyxhy.com shyxi5.com shyxwz.com shyy6688.com @@ -86360,7 +86298,6 @@ signcc.com signdo.com signinpod.com sigujian.com -siguoya.name sihai-inc.com sihaidj.com sihaigongkao.com @@ -86375,7 +86312,6 @@ sihoo.com sihotels.com sihuanpharm.com sihui-electric.com -sihuida.net sihuisoft.com sihuixiqu.com sihuiyiliao.com @@ -86434,8 +86370,6 @@ siluke.cc siluke.info silukex.com siluwu.com -silverlight.dlservice.microsoft.com -silverxq.love sim800.com simaek.com simagic.com @@ -86497,7 +86431,6 @@ sinadaxue.com sinaedge.com sinaemc.com sinaft.com -sinaif.com sinaimg.com sinajs.com sinalog.com @@ -86532,7 +86465,6 @@ sinforcon.com sinfotek.com singaporepaya.com singbon.com -singcareful.com singchy.com singdown.com singfosolar.com @@ -86573,7 +86505,6 @@ sino-life.com sino-manager.com sino-pharm.com sino-pigment.com -sino-rainbow.cc sino-sfcc.com sino-tcm.com sino-trading.com @@ -86606,6 +86537,7 @@ sinochemehc.com sinochemintl.com sinochemitc.com sinochemjiangsu.com +sinochemoilmarketing.com sinochempharma.com sinochip.net sinoclick.com @@ -86656,7 +86588,6 @@ sinomachint.com sinomags.com sinomapping.com sinomaps.com -sinomaster.com sinomatech.com sinomatin.com sinomcu.com @@ -86729,7 +86660,6 @@ sinovatech.com sinovatio.com sinovationmed.com sinovationventures.com -sinovdc.com sinovel.com sinovoice.com sinowaycarbon.com @@ -86837,7 +86767,6 @@ siweikongjian.net siweiw.com siwuprint.com six.club -sixdeviations.com sixflower.com sixianchina.com sixiang.im @@ -86941,7 +86870,6 @@ sjsei.com sjsgdzx.com sjsheji.com sjsjz.com -sjsoy.com sjsrm.com sjsydq.com sjszt.com @@ -86953,6 +86881,10 @@ sjtxt.com sjtxt.la sjtype.com sjvi.net +sjwec-tencentclb.cloud +sjwec-tencentclb.com +sjwec-tencentclb.net +sjwec-tencentclb.work sjwj.com sjwl.xyz sjwt.net @@ -87013,10 +86945,8 @@ sjzqcrl.com sjzrbapp.com sjzrmyz.com sjzshunbang.com -sjzsidadianji.com sjzslnyhy.com sjzswtz.com -sjzsyjxx.com sjzszz.com sjztd.com sjzthdz.com @@ -87031,7 +86961,6 @@ sjzys.com sjzysdz.com sjzysgz.com sjzyxh.com -sjzyyhg.com sjzyz.net sjzzbxh.com sjzzxmm.com @@ -87071,7 +87000,6 @@ skomart.com skongmx.com skp-beijing.com skpssz.com -skrshop.tech skrskrskrskr.com sksdwl.com sksight.com @@ -87246,7 +87174,7 @@ sltgj.com slthxx.com sltv.net sltxantonline.com -slupdate.dlservice.microsoft.com +sluyu.com slwh-dfh.com slwwedding.com slybjp.com @@ -87278,6 +87206,7 @@ smart-idc.net smart-ptt.com smart-rise.com smart.com +smart.uhdnow.com smart2pay.com smart365ol.com smart400.com @@ -87355,7 +87284,6 @@ sme8718.com smebb.com smec-cn.com smedi.com -smegame.com smei.net smeia.net smeiic.com @@ -87397,6 +87325,7 @@ smmc.com smmiki.com smo-clinplus.com smo-software.com +smoba.net smobird.cc smogfly.cloud smogfly.club @@ -87556,6 +87485,7 @@ snlxgk.com snmandarin.com snmi.com snmxzls.com +snoba.net snobten.com snodehome.com snoone.com @@ -87578,7 +87508,6 @@ snren.com snrtv.com snrunning.com sns-china.com -sns.io snscz.com snsfun.cc snsfun.com @@ -87606,6 +87535,7 @@ so03290koaq.com so03300koaq.com so04060koaq.com so04061koaq.com +so123.com so126.com so138.com so50.com @@ -87719,8 +87649,15 @@ sogeche.com sogo.com sogoke.com sogood360.com +sogou-compress.com +sogou-diskmgr.com sogou-inc.com +sogou-inner.com +sogou-kantu-pic.com +sogou-kantu.com sogou-op.org +sogou-pdf.com +sogou-wallpaper.com sogou.com sogou.net sogoucdn.com @@ -87810,7 +87747,6 @@ som88.net somacisgraphic.hk somama.com somamobi.com -somcool.com somd5.com somdom.com someabcd.com @@ -87960,7 +87896,6 @@ soshoo.com soso.com sosoba.org sosobtc.com -sosohaha.com sosoled.com sosolight.com sosomp.com @@ -88020,7 +87955,6 @@ soukuyou.com soulapp.me soulgame.mobi soulsky.net -soultravels.com soulu365.com souluo.net souluojie.com @@ -88092,6 +88026,7 @@ souyue.mobi souyue.vip souyunku.com souyute.com +souziti.com sov2ex.com sovell.com soven.com @@ -88138,6 +88073,16 @@ spamc.com spanishknow.com sparenode.com spark-page.com +spark-page0.com +spark-page1.com +spark-page2.com +spark-page3.com +spark-page4.com +spark-page5.com +spark-page6.com +spark-page7.com +spark-page8.com +spark-page9.com spark4y.com sparkeduapi.com sparkeducdn.com @@ -88273,7 +88218,6 @@ spthome.com sptv-1.com spug.cc spush.com -spvpv.com spvtime.com spwj.com spxgas.net @@ -88352,6 +88296,9 @@ sr-139.com srcb.com srcbcz.com srcbeijing.com +srccdn.com +srccdn2.com +srcge.com srcgsre.com srcmsh.com srcqeece.com @@ -88385,7 +88332,6 @@ srw00.com srworld.net srx3.net srxiayunbusiness.com -srxjyxxw.com srxww.com srxzz.com srygz.com @@ -88454,6 +88400,7 @@ ssipex.com ssis.asia ssish.com ssixvo9gaybkp5.com +ssjj2.com ssjjss.com ssjjtt.com ssjlicai.com @@ -88493,7 +88440,6 @@ ssofair.com ssoffo.com ssoouu.com ssp.group -ssp86.com sspaas.com sspai.com sspai.me @@ -88525,7 +88471,6 @@ sstlp.com sswater.com sswchina.com sswl315.com -sswlfs.com ssws.tv ssxcycy.com ssxf.net @@ -88608,7 +88553,6 @@ starhalo.mobi staringos.com starkai.com starlakelab.com -starlink.uno starlu.com starm.cc starmily.com @@ -88703,6 +88647,7 @@ steamboxs.com steamcn.com steamcommunity-a.akamaihd.net steamdd.com +steamdt.com steamhost.info steammm.com steampp.net @@ -88741,6 +88686,7 @@ sticksgame.com stjinfa.com stjinguan.com stjjxh.com +stkfanli.com stklt.com stlb520.com stmaoyi.com @@ -88773,11 +88719,13 @@ stonesm.com stoneu.com stonexp.com stor-age.com +stor-helper.com storage-asset.msi.com storcezon.com store12.com storeapi.net storecorefulfillment.download.prss.microsoft.com +storeedge.microsoft.com storeedgefd.dsx.mp.microsoft.com storkapp.me stormorai.com @@ -88871,12 +88819,10 @@ sturmdcp.com stutimes.com stvf.com stvgame.com -stvue.com stwj.com stwyxh.com stxfjs.com stxsw.com -styadmin.com stylecdn.com stylechina.com stylemafiadaily.com @@ -88891,12 +88837,10 @@ suan5.com suanbanyun.com suanchang.com suandao.com -suanfazu.com suanguaju.com suanjiayun.com suanjuzi.com suanpin.com -suansheng.com suanst.com suansuangua.com suanya.com @@ -88988,7 +88932,6 @@ sugon.com sugou.com suguangxx.com sugwedding.com -suhaodian.com suhaoyy.com suhedj.com suhedz.com @@ -88997,6 +88940,7 @@ suhongzhan.com suhuikj.com suhuishou.com sui.com +sui.me suibao-jiaozhu.com suibao.com suibiji.com @@ -89065,7 +89009,6 @@ sumaarts.com sumapay.com sumatang.com sumavision.com -sumazu.com sumcl.com sumec.com sumedu.com @@ -89121,7 +89064,7 @@ sunboyu.com suncereltd.com suncjm.com sundan.com -sundayfloor.com +sundaydragon.com sundayvision.net sundns.com sundray.com @@ -89141,13 +89084,11 @@ sungari1995.com sungent.com sungesoft.com sungine.com -sunglassesandgoggles.com sunglow-tec.com sungoal.org sungoedu.com sungroup-energy.com sungshu.com -sunguoqi.com sunhan.vip sunhante.com sunhepower.com @@ -89296,7 +89237,6 @@ sunyea.com sunyet.com sunyitech.com sunyoads.com -sunyongfeng.com sunyuu.com sunywo.com sunzhongwei.com @@ -89310,7 +89250,6 @@ suoer-group.com suofeiya.com suofeiyashop.com suoge.net -suokao.com suolong.com suoluomei.com suopingbao.com @@ -89344,7 +89283,6 @@ superbuyy.com supercachenet.com supercachenode.com supercalnow.com -supercare168.com supercarrier8.com supercell.com supercodepower.com @@ -89432,12 +89370,12 @@ suruicloud.com surun-tech.com survey.work surveyhills.com +surveyqq.com surveyrtk.com surveyunion.com survivor99.com surwit.com suryee.com -sus33.com suseage.com sushijiameng.com sushiyanglao.com @@ -89528,7 +89466,6 @@ svqsokp.com svrvr.com svw-volkswagen.com svwuc.com -svwyer.xyz sw-bllp.com sw-zh.com sw0013.com @@ -89552,6 +89489,7 @@ swc-china.com swceb.com swchina.org swckc.com +swdcmg.com swdyz.com sweet-data.com sweetalkos.com @@ -89612,7 +89550,6 @@ swordair.com swordart.online swordofmorning.com swordtt.com -swotbbs.com swpubar.com swq242xc54.com swrjzxw.com @@ -89680,7 +89617,6 @@ sxdagang.com sxddy.com sxdkj.com sxds.com -sxdygbjy.com sxdz029.com sxdzyp.com sxepa.org @@ -89723,7 +89659,6 @@ sxhtyy.net sxhwhb.com sxhwls.com sxhxbank.com -sxinrj.com sxisa.org sxjant.com sxjbswyy.com @@ -89962,7 +89897,6 @@ syhsfzl.com syhsxb.com syhuayang.com syhzdj.net -syhzml.com syhzx.com syhzzf.com syiptv.com @@ -89986,8 +89920,8 @@ sylangyue.xyz sylc.xyz sylincom.com sylixos.com -sylm.xyz sylm2022.com +sylmyl.com sylnyx.com syltgl.com symama.com @@ -90007,6 +89941,7 @@ synjones.com synjones.net synnchem.com synochip.com +synodc.com synology-cn.com synologyssb.com syntao.com @@ -90059,6 +89994,7 @@ sysmls.com sysnfj.com sysshine.com systedata.com +systemserviceable.com systoon.com sysu-pharm.com sysucc.com @@ -90099,7 +90035,6 @@ syxzhongyi.com syyan.site syyc.com syygjs.com -syygyf.net syyjs.com syylfh.com syyqls.com @@ -90406,7 +90341,6 @@ szfzx.org szgalaxy.com szgangdi.com szgays.org -szgcc.com szgcyy.com szggzy.com szghedu.com @@ -90439,11 +90373,11 @@ szhaochuang.com szharmony.com szhb.org szhddq.com +szhdy.com szhdyic.com szhenglian.com szhetai.com szhfwd.com -szhgh.com szhgong.com szhightondz.com szhiross.com @@ -90459,6 +90393,7 @@ szhntxh.com szhome.com szhomeimg.com szhongshe.com +szhospital.com szhot.com szhq.com szhqgf.com @@ -90470,7 +90405,6 @@ szhri.com szhsdpa.com szhstjt.com szhsx.net -szhtbs.com szhtp.com szhua-gao.net szhuace.com @@ -90533,6 +90467,10 @@ szjkyun.com szjlfck.com szjlkt.com szjlwul.com +szjr-tencentclb.cloud +szjr-tencentclb.com +szjr-tencentclb.net +szjr-tencentclb.work szjsgroup.com szjsjlxh.com szjsjt.com @@ -90546,6 +90484,10 @@ szjunrong.com szjuquan.com szjuwx.com szjuyou.com +szjxcft-tencentclb.cloud +szjxcft-tencentclb.com +szjxcft-tencentclb.net +szjxcft-tencentclb.work szjxgroup.com szjxj.com szjy.cc @@ -90742,7 +90684,6 @@ szruilan.com szruitang.com szrunning.com szryc.com -szrzxfpc.com szrzxh.com szs189.com szsaibao.com @@ -90812,6 +90753,10 @@ szsupvan.com szswgcjc.com szswjc.com szswjs.com +szsycft-tencentclb.cloud +szsycft-tencentclb.com +szsycft-tencentclb.net +szsycft-tencentclb.work szsyyxh.org szszjt.com szszlm.com @@ -90868,7 +90813,6 @@ szwa.com szwaishi.com szwale.com szwanghong.com -szwanx.com szwata.com szwb.com szwblm.com @@ -90895,6 +90839,10 @@ szwwco.com szwzjt.com szwzzxyy.com szx-ray.com +szx-tencentclb.cloud +szx-tencentclb.com +szx-tencentclb.net +szx-tencentclb.work szx58.com szxbbus.com szxbjt.com @@ -91018,11 +90966,12 @@ t-dsyy.com t-firefly.com t-gafa.com t-io.org +t-npm.com t-ocean.com t-t.live +t-tlearning.com t-v.com t-workshop.com -t.biz t.tt t0001.com t00ls.cc @@ -91044,7 +90993,6 @@ t1y5.com t20000.com t2audio.net t2cn.com -t2rswy.com t2uu.com t3315.com t3j4.com @@ -91089,10 +91037,11 @@ tableauxmly.com tabuzhe.com tabxexplorer.com tachangxing.com -tacpvc.com tactan.net tadgkj.com tadiao365.com +tadsim.com +tadsim.net tadu.com tadyz.com taeapp.com @@ -91136,7 +91085,6 @@ taidichina.com taidu.com taiduhome.com taiergroup.com -taierrobot.com taifeng.co taifengfans.com taifua.com @@ -91209,6 +91157,9 @@ taiqiedu.com taiqigame.com taiquan.com tairock.com +tairos.cc +tairos.net +tairos.tech tairui-ad.com tais3.com taisantech.com @@ -91291,6 +91242,7 @@ tamensay.com tamersunion.net tamigos.com tamigroup.com +tamlab.net tamll.com tan-gtr.com tan.cc @@ -91310,6 +91262,7 @@ tandfonline.com tanewmaterial.com tang-lei.com tanganlingshi.com +tangbai.cc tangbolitangci.com tangchendoor.com tangdaoya.com @@ -91330,7 +91283,6 @@ tangjie.me tangjihuang.com tangkabj.com tanglei.name -tangmi.net tangmingint.com tangoic.com tangongye.com @@ -91368,6 +91320,7 @@ tankprint.online tanksuv.com tankywoo.com tanling.com +tanlive.com tanluxia.com tanma.tech tanmer.com @@ -91401,7 +91354,6 @@ tao-star.com tao-studio.net tao-wu.com tao008.com -tao1.co tao123.com tao3.cc tao33.com @@ -91421,7 +91373,6 @@ taobao.net taobao.org taobao.tw taobao1111.com -taobao2136.com taobao92.com taobaocdn.com taobaocity.com @@ -91445,7 +91396,6 @@ taodake.com taodang8.com taodaso.com taodaxiang.com -taodianjia.com taodianla.com taodingzhi.cc taodiqupu.com @@ -91556,6 +91506,7 @@ taotv.com taotv.net taou.com taourl.com +taowangzhan.com taoweng.site taoxiangyoushu.com taoxiaolu.com @@ -91583,6 +91534,7 @@ tapai.com tapaijiu.com tapapis.com tapbooster.net +tapd-app.com tapdata.net tapenjoy.com tapimg.com @@ -91593,7 +91545,6 @@ tapque.com tapsvc.com taptap-api.com taptap.com -taptap.io taptapcode.com taptapdada.com taraniss.com @@ -91636,6 +91587,7 @@ tauris.com taurus66.com taurusxin.com tav-global.com +tav-global.net tavsiktlig.com tawk.link tax-edu.net @@ -91647,6 +91599,7 @@ taxjiangkewang.com taxksec.com taxnote.org taxspirit.com +taxtaoj.xyz taxuspharm.com taxwen.com tayohya.com @@ -91656,6 +91609,7 @@ tazts.com tb.pub tb51.net tb58.net +tbaas.tech tbadc.com tbadesign.org tbaiq.com @@ -91666,6 +91620,7 @@ tbcdn.com tbh5.com tbhcc.com tbhelper.com +tbizmail.com tbjt18.com tbjtss.com tbk-app.com @@ -91710,6 +91665,7 @@ tc666.com tc880.com tc9011.com tc930.com +tcbqcloud.com tccfjt.com tccrtzyxgs.com tccxfw.com @@ -91717,21 +91673,29 @@ tcdinfo.com tcdj.com tcdlive.com tcdneo.com +tcdneo.net tcdnext.com tcdnhw.com +tcdnhw.net +tcdnkc.com tcdnkcbak.com tcdnlive.com tcdnlivebak1.com tcdnlivebak2.com +tcdnlp.com tcdnos.com tcdnos.net tcdntip.com tcdnv3.com tcdnvod.com tcdnvodbak.com +tcdnvodnew.com tcdnvp.com +tcdnzb.com tcdushi.com tcecps.org +tced-transsion.com +tcedshare.com tceic.com tceratronix.com tcfhty.com @@ -91744,6 +91708,7 @@ tcgsw.com tchbgz.com tchbsb.com tchong.com +tchy.net tchzt.com tchzx.com tciplay.com @@ -91764,7 +91729,11 @@ tclogx.com tcloud19.com tcloudbase.com tcloudbase.net +tcloudbaseapi.com tcloudbaseapp.com +tcloudbasegateway.com +tcloudbasestatic.com +tcloudbh.com tcloudbi.com tclouddrive.com tcloudedu.com @@ -91773,6 +91742,7 @@ tcloudhw.com tcloudhw.net tcloudit.com tcloudit.net +tcloudlive.com tcloudscdn.com tcloudscdn.net tcltech.com @@ -91783,6 +91753,7 @@ tcm361.com tcmer.com tcmfrj.com tcmmh.com +tcmppcloud.com tcmwindow.com tcnen.com tcnews.cc @@ -91790,6 +91761,7 @@ tcnvmms.com tcomall.com tcp.hk tcp.pub +tcp5.com tcping8.com tcqmj.com tcrcb.com @@ -91813,6 +91785,7 @@ tctpxwebank.com tctran.com tctz.com tcvywoh.com +tcwqqdy.guru tcwt.net tcxmt.com tcxw.cc @@ -91832,6 +91805,7 @@ tczmled.com td-sf.com td-tech.com td22.com +td2cn.com td300321.com td776.com td96.com @@ -91839,20 +91813,49 @@ td98.com tdances.com tdatamaster.com tdbbj.com -tdbbs.net tdchats.us tdchatvip.us tdd.la -tdfcw.com tdgod.com tdiac.com tdict.com tdimg.com tdjxhb.com tdkchina.com +tdlcdn.com +tdlcdn.net tdmall.cc tdmoli2.com tdmta.com +tdns127.com +tdnsdlovs1.com +tdnsdlovs2.com +tdnsdlovs3.com +tdnsdlovs4.com +tdnsdlovs5.com +tdnsdp.com +tdnsdpovs1.com +tdnsdpovs2.com +tdnsdpovs3.com +tdnsdpovs4.com +tdnsdpovs5.com +tdnsliveovs1.com +tdnsliveovs2.com +tdnsliveovs3.com +tdnsliveovs4.com +tdnsliveovs5.com +tdnspub.com +tdnspub.net +tdnsspovs1.com +tdnsspovs2.com +tdnsspovs3.com +tdnsspovs4.com +tdnsspovs5.com +tdnssticovs1.com +tdnssticovs2.com +tdnssticovs3.com +tdnssticovs4.com +tdnssticovs5.com tdnsv1.com tdnsv1.net tdnsv10.com @@ -91883,6 +91886,11 @@ tdnsv8.com tdnsv8.net tdnsv9.com tdnsv9.net +tdnsvodovs1.com +tdnsvodovs2.com +tdnsvodovs3.com +tdnsvodovs4.com +tdnsvodovs5.com tdnsx1.com tdotapp.com tdpress.com @@ -91931,7 +91939,6 @@ teamshub.com teamtop.com teamtopgame.com teandy.com -teapic.com teapottravel.com teatreexy.com tebaidu.com @@ -91972,6 +91979,8 @@ techingrid.net techmiao.com techmoris.com techo.chat +techo.pub +techo.show techoke.com techonegame.com techqianmo.com @@ -91987,7 +91996,6 @@ techvisum.com techwalker.com techwell-cn.com techwin.com -techwom.com techxue.com teclast.com tecmz.com @@ -92007,6 +92015,7 @@ tedastock.com teddymobile.net tedushi.com tedx.net +tedy.cc teejia.com teeqee.com tefact.com @@ -92067,6 +92076,7 @@ temedical.com temox.com temp.im temyee.com +ten.design tenag.com tenant-zone-dev.com tenbilliongame.com @@ -92076,8 +92086,10 @@ tencenst.com tencent-blackboard.com tencent-cloud.com tencent-cloud.net +tencent-education.com tencent-gcloud.com tencent-gf.com +tencent-qejs.com tencent-stock.com tencent.co.id tencent.com @@ -92085,53 +92097,225 @@ tencent.com.hk tencent.design tencent.net tencentads.com +tencentads.net +tencentadx.com +tencentanxin.com tencentapigw.com +tencentapis.com +tencentapp.com tencentapps.com +tencentbh.com tencentbyod.com tencentcc.com tencentcdb.com +tencentcds.com +tencentcfs.com +tencentciam.com +tencentclb.cc +tencentclb.cloud tencentclb.com +tencentclb.host +tencentclb.info +tencentclb.link +tencentclb.net +tencentclb.online +tencentclb.plus +tencentclb.pro +tencentclb.site +tencentclb.space +tencentclb.team +tencentclb.tech +tencentclb.top +tencentclb.vip +tencentclb.work +tencentclb.zone tencentcloud-aiot.com +tencentcloud-demo.com tencentcloud.com +tencentcloud.io tencentcloudapi.com +tencentcloudapimarket.com +tencentcloudapp.com tencentcloudbase.com +tencentcloudbase.net tencentcloudclub.com +tencentcloudcore.com tencentcloudcr.com +tencentcloudga.com +tencentcloudga001.com +tencentcloudga001.net +tencentcloudga002.com +tencentcloudga002.net +tencentcloudga003.com +tencentcloudga003.net +tencentcloudga004.com +tencentcloudga004.net +tencentcloudga005.com +tencentcloudga005.net +tencentcloudga006.com +tencentcloudga006.net +tencentcloudga007.com +tencentcloudga007.net +tencentcloudga008.com +tencentcloudga008.net +tencentcloudga009.com +tencentcloudga009.net +tencentcloudga010.com +tencentcloudga010.net +tencentcloudga011.com +tencentcloudga011.net +tencentcloudga012.com +tencentcloudga012.net +tencentcloudga013.com +tencentcloudga013.net +tencentcloudga014.com +tencentcloudga014.net +tencentcloudga015.com +tencentcloudga015.net +tencentcloudga016.com +tencentcloudga016.net +tencentcloudga017.com +tencentcloudga017.net +tencentcloudga018.com +tencentcloudga018.net +tencentcloudga019.com +tencentcloudga019.net +tencentcloudga020.com +tencentcloudga020.net +tencentcloudga021.com +tencentcloudga021.net +tencentcloudga022.com +tencentcloudga022.net +tencentcloudga023.com +tencentcloudga023.net +tencentcloudga024.com +tencentcloudga024.net +tencentcloudga025.com +tencentcloudga025.net +tencentcloudga026.com +tencentcloudga026.net +tencentcloudga027.com +tencentcloudga027.net +tencentcloudga028.com +tencentcloudga028.net +tencentcloudga029.com +tencentcloudga029.net +tencentcloudga030.com +tencentcloudga030.net +tencentcloudipv6.com +tencentcloudlab.com +tencentcloudlive.com tencentcloudmarket.com +tencentcloudmq.com tencentcloudns.com +tencentcloudsandbox.com tencentcloudsec.com tencentcloudses.com +tencentcloudsso.com +tencentcls.com +tencentcmq.com +tencentcode.com +tencentcomics.com +tencentconsulting.com +tencentcos.cloud tencentcos.com +tencentcos.net tencentcs.com +tencentcsms.com tencentdayu.com tencentdb.com +tencentddos.com tencentdevices.com tencentdigitalassistant.com +tencentdmp.com tencentdms.com +tencentedi.com +tencentehs.com tencenteiam.com tencentelasticsearch.com +tencentemr.com +tencentes.com +tencentexpert.com +tencentfanyi.com +tencentff.com +tencentfilm.com +tencentfoundation.org +tencentga.com +tencentgames.co +tencentgames.us +tencentgme.com +tencentgse.com +tencentgy.com +tencenthangjia.com +tencentiam.com tencenticp.com tencentid.com +tencentidaas.com tencentidentity.com +tencentimage.com +tencentimage.net +tencentiotcloud.com +tencentiotmedia.com tencentipv6.com +tencentlegalservices.com +tencentlink.com +tencentlkfz.com tencentlog.com tencentmail.com +tencentmdb.com tencentmeeting.com +tencentmfa.com +tencentmovie.com tencentmusic.com +tencentoa.com +tencentoceanus.com +tencentpay.com +tencentpic.com tencentproxy.com +tencentrce.com +tencentrcpcsdk.com +tencentresearch.com tencentrio.com +tencentscf.com +tencentsecsdk.com +tencentserverless.com +tencentservicewatcher.com +tencentses.com +tencentsite.com +tencentsmhcname.com +tencentsmhuc.com +tencentsource.com tencentstart.com tencentsuite.com +tencentsurvey.com +tencentsurvey.net +tencenttcr.com +tencenttdai.com +tencenttdmq.com tencenttds.com tencenttid.com +tencenttione.com +tencenttree.com +tencenttrtc.com +tencenttymaas.com +tencentud.com +tencentvpc.com +tencentweiban.com tencentwemeet.club tencentwepark.com +tencentwf.com tencentwm.com +tencentwukong.com +tencentxinge.com +tencentyouth.com tencentyun.com +tencentzhzf.com tenchii.com +tencity.com tendacn.com tendawifi.com tendbcluster.com +tendbcluster.net tendcode.com tendfo.com tendis.net @@ -92165,12 +92349,12 @@ tengmed.com tengmoney.com tengning.net tengnu999.com +tengnuobx.com tengrant.com tengshengchina.com tengshiauto.com tengtiegongyi.com tengwen.com -tengwen001.com tengxuan.net tengxunlct.com tengxunqiye.com @@ -92182,6 +92366,7 @@ tengye-vc.com tengyeshiye.com tengyu-group.com tengyuejz.com +tengyunqq.com tengzhihh.com tengzhipp.com tengzhou0632.com @@ -92192,12 +92377,12 @@ tenjia.cc tenjincn.com tenkent.com tenlonstudio.com -tenmam.com tenmh.com tennoo.com tenorforman.com tenorshare.com tenorshare.tw +tenovatech.com tenpay.com tenqent.com tenrays.com @@ -92207,22 +92392,27 @@ tensorchip.com tensorflownews.com tenstars.net tensuntrans.com +tensure.com tensynchina.com tentech.club tentrue.com tentx.com tenwowfood.com +tenwukong.com tenxapp.com tenxcloud.com tenxcloud.net teo-rum.com +teoacc.com +teoacc.net +teodns.com +teodns.net teown.com tepcb.com tepin.hk terabuy.com terapark.com terapines.com -tercermilenioenlacultura.com terencemusic.com teridge.com terminal.icu @@ -92253,10 +92443,13 @@ testerhome.com testict.com testin.im testingpai.com +testinsight.net testlrq.com +testmrrvendor.com testroad.org testrust.com testshm.com +testsparkling.com testwaf.com testwo.com testxy.com @@ -92281,6 +92474,9 @@ textin.com texzhongtao.com teyonds.com teyop.com +tez-tencentclb.cloud +tez-tencentclb.com +tez-tencentclb.net tezhengma.com tezhongzhuangbei.com tezign.com @@ -92313,6 +92509,7 @@ tflzhongkongban.com tfme.com tfmywood.com tfogc.com +tfogc.net tfoison.com tfol.com tfoyin.com @@ -92333,6 +92530,7 @@ tg-vision.net tg0123.com tg1234.com tg138.com +tgametalent.com tgbus.com tgcid.org tgcondo.com @@ -92363,6 +92561,10 @@ tgy365.com tgzhz.com tgzwmk.xyz th-sjy.com +th-tencentclb.cloud +th-tencentclb.com +th-tencentclb.net +th-tencentclb.work th-water.net th.app th.bing.com @@ -92388,7 +92590,6 @@ thcad.net thcantech.com thcf168.com thclouds.com -thd99.com thdangzhun.com thdb.com the-dahan.com @@ -92400,7 +92601,6 @@ thearenacapital.com thearyong.com theateliercouture.com thebeastshop.com -thebeautools.com thebeijinger.com thebeijingnews.com thebestsexsites.com @@ -92453,6 +92653,7 @@ theoborn.com theorychina.org thepeak.com.my thepoemforyou.com +thepredictivemodel.com thepresidentialhotel.com thepsychscrivener.com thepuli.com @@ -92506,7 +92707,6 @@ thinkjs.org thinkpad.com thinkprinter.net thinkraz.com -thinksns.com thinksrc.com thinkstu.com thinkvo.com @@ -92526,6 +92726,7 @@ thjjhs.com thjunshi.com thkconn.com thkill.com +thm3u8.com thmall.com thmfvb.com thmins.com @@ -92646,11 +92847,11 @@ tiangou.xyz tianhai.info tianhai2002.com tianhaixing.com -tianhao.vip tianhaohz.com tianhebus.com tianhejiayi.com tianheoil.com +tianhepiano.com tianheplaza.com tianhetech.com tianhongchina.com @@ -92674,7 +92875,6 @@ tianjin-marathon.com tianjin-patek.com tianjinbbs.com tianjinbohaileasing.com -tianjinfubote.com tianjingames.com tianjingrong.com tianjinwe.com @@ -92745,7 +92945,6 @@ tianqunnet.com tianrkl.com tianrow.com tianruihr.com -tianrunjiaze.com tianrunshunteng.com tianruo.net tianruoyun.com @@ -92777,6 +92976,7 @@ tiantaxx.com tiantexing.com tianti.com tiantianbannixue.com +tiantiancaige.com tiantiancaipu.com tiantianfm.com tiantianfunds.com @@ -92803,6 +93003,7 @@ tianxianmao.com tianxiaputao.com tianxiaquanchengapp.com tianxiawangxiao.com +tianxiawuzei.org tianxiaxiao.net tianxiaxinyong.com tianxiayouxi.com @@ -92847,6 +93048,7 @@ tianyucangqiongxiaoshuo.com tianyuchaye.com tianyuimg.com tianyujidi.com +tianyutest.com tianyuyuan.com tianzeqiti.com tianzhao.net @@ -92925,7 +93127,6 @@ tiehuatu.com tiejiang.org tiejiapai.com tiejiong.com -tiejp.com tiejunmedia.com tiekuangshi.com tielemao.com @@ -92943,7 +93144,6 @@ tieque.net tiesan.com tieshuwang.net tietie.la -tietieapp.com tietuku.com tieweishi.com tieww.com @@ -92999,6 +93199,7 @@ time.xtracloud.net timecloud.us timecoo.com timedg.com +timedl.com timedoo.com timeep.com timelate.com @@ -93132,6 +93333,7 @@ titan007.com titan24.com titanar.com titanlaw.com +titanm.com titanmatrix.com titans-ele.com titansci.com @@ -93164,7 +93366,6 @@ tj-hcdz.com tj-kingdee.com tj-model.com tj-un.com -tj-zt.com tj0573.com tj1-miui-bn-stage01.kscn tj20.com @@ -93244,7 +93445,6 @@ tjmcgc.com tjmhc.com tjmldy.com tjmuch.com -tjmulin.com tjnjw.com tjoy.biz tjpa-china.org @@ -93345,11 +93545,11 @@ tl-tek.com tl-vogue.com tl100.com tl2y.com -tl4su.com tl50.com tl88.net tlang.com tlbapm.com +tlbsbigdata.com tlby120.com tlbyx.com tlcbf.com @@ -93363,20 +93563,76 @@ tlhjjc.com tlhmhd.com tlightsky.com tlink.io +tlinkaccess.com +tlinkaccess2.com tlinx.com +tliveapi.com +tliveapi2.com tliveapp.com +tliveauth.com +tliveauth2.com tlivecdn.com tlivecdnv1.com tlivecdnv2.com +tlivecdnv3.com +tlivecdnv4.com +tlivecloud.com +tlivecontroller.com +tlivecontroller2.com +tlivedal.com +tlivedal2.com +tlivedeliver.com +tlivedispatch.com +tlivedispatch2.com tlivedns.com +tlivedns2.com tlivednsv1.com +tlivegslb.com +tlivehttpdns.com +tlivehttpdns2.com +tliveigtm.com +tliveigtm2.com +tliveigtm3.com tlivemcdn.com +tlivemcdnsched.com tliveplay.com +tliveplaydemo.com +tliveproxy.com +tliveproxy2.com tlivepush.com +tlivepush2.com +tlivertc.com +tlivertc2.com tlivesdk.com +tlivesdk2.com +tlivesdkconfig.com +tlivesdkconfig2.com tlivesource.com +tlivesrc.com +tlivesrc2.com +tlivesrcaccess.com +tlivesrcaccess2.com +tlivesrcapp.com +tlivesrcapp2.com +tlivesrcdemo.com +tlivesrcschedule.com +tlivesrcschedule2.com +tlivessl.com +tlivessl2.com +tlivestability.com +tlivestability2.com +tlivestream.com +tlivestream2.com tliveupload.com +tliveupload2.com +tliveweb.com +tliveweb2.com tlivewebrtc.com +tlivewebrtc2.com +tlivewebrtcpush.com +tlivewebrtcpush2.com +tlivewebrtcpushsch.com +tlivewebrtcpushsch2.com tljas.com tljcw.com tljob8001.com @@ -93424,14 +93680,19 @@ tmalltv.com tmallvvv.com tmaotech.com tmbbs.com +tmc-youqun.com tmcdn.net tmctool.com +tmecd.com tmeiju.com tmetb.net +tmfcloud.com +tmgdb.com tmhong.com tmhtour.com tmhttc.com tmianyang.com +tmigrate.com tmirob.com tmisp.com tmjbee.com @@ -93481,10 +93742,11 @@ tnblog.net tnblt.com tnbz.com tnccdn.com +tnebula.net tnedu.com tnettms.com -tnfn.net tngcjx.com +tngdigital.com.my tnodenow.com tnong.com tnsou.com @@ -93496,7 +93758,6 @@ to4f.com to999.com toalan.com toaobg.com -toaseancn.com toast.pub toaw.net tobaccochina.com @@ -93534,6 +93795,9 @@ todgo.com todoen.com todokeji.com todokit.xyz +todolist.chat +todolist.email +todolist.pub todonow.com todoyi.com todreamer.com @@ -93590,7 +93854,6 @@ tong-pao.com tong-run.com tongaokeji.com tongbanjie.com -tongbanjie.info tongbaoyun.com tongbb.net tongbulv.com @@ -93604,6 +93867,7 @@ tongchengchaku.com tongchengir.com tongchengkang.com tongchengqun.vip +tongchengxuanshang.com tongchouba.com tongda2000.com tongdanet.com @@ -93634,7 +93898,6 @@ tongjijs.com tongjipf.com tongleer.com tonglei.com -tonglejoy.com tonglian.com tongliangrc.com tongliaowang.com @@ -93651,7 +93914,6 @@ tongrenchina.org tongrentang.com tongrentangjb.com tongrentangkj.com -tongrentangzyyy.com tongsha.com tongshanbank.com tongshiling.net @@ -93749,13 +94011,13 @@ tooltt.com toolwa.com tooming.com toomoss.com -toon.mobi toonechem.com tooopen.com tooseo.com tootour.com toouoo.com top-cnc.com +top-dianjingfeng.com top-elan.com top-shanghai.com top-trust.com @@ -93767,6 +94029,7 @@ top1game.com top263.net top2fun.com top3456.com +top4xlc.com top6000.com topbester.com topbiol.com @@ -93820,7 +94083,6 @@ toplife.com toploong.com topmba.mobi topmediai.com -topnfactory.com topnic.net topomel.com toppdu.com @@ -93938,7 +94200,6 @@ toujidao.com touker.com toumiao.com toupb.com -toupiaoapp.com touqikan.com tour110.com tourboxtech.com @@ -94011,6 +94272,7 @@ touzizn.com towavephone.com towelltech.com tower.im +tower0788.com towinor.com towmy.com towngasenergy.com @@ -94037,9 +94299,17 @@ tp82.com tpadx.com tpbook.com tpccoo.com +tpdmp.com tpdz.net +tpe-tencentclb.cloud +tpe-tencentclb.com +tpe-tencentclb.net +tpe-tencentclb.work tpfangchan.com tphdled.com +tpiccdn.com +tpiccdn.net +tpimg.xyz tpjhr.com tpjwww.com tpkey.com @@ -94071,6 +94341,7 @@ tpyzq.com tpzlj.com tqads.com tqapp.com +tqapp.net tqcj.com tqcp.net tqcrane.com @@ -94097,6 +94368,7 @@ tqrobodrive.com tqschool.net tqshfw.com tqshfw.net +tquic.net tquyi.com tqw5.com tqwqq.com @@ -94130,6 +94402,7 @@ tradew.com tradingcomps.com tradinghero.com tradow.com +trae.guru traineexp.com trainingipv6.com trainnets.com @@ -94212,7 +94485,6 @@ trhly.com trhos.com trhui.com trhxt.com -trickypen.com triggerdelivery.com trinasolar.com trinitigame.com @@ -94244,6 +94516,7 @@ trisfal.com tristarinc.com triton-games.com tritoninfo.net +trizenai.com trizinfo.tech trizlaser.com trizmed.com @@ -94268,10 +94541,12 @@ tronly.com tronsmart.com tropcdn.com troxchina.com +trpc.center +trpc.group +trpc.tech trpcdn.com trpcdn.net trqjrp.xyz -trrtv.com trs-logistics.com trsjgdj.com trsoft.vip @@ -94282,6 +94557,9 @@ trt.hk trtb.net trtc.io trtcanlitv-lh.akamaihd.net +trtccloud.com +trtccloud.net +trtcrecover.com trthealth.com trtpazyz.com trtquxro.com @@ -94355,6 +94633,16 @@ ts16949rz.org ts3.hk ts3.vip ts56xh.com +tsa-lp.com +tsa-page.com +tsa-page0.com +tsa-page1.com +tsa-page2.com +tsa-page3.com +tsa-page4.com +tsa-page5.com +tsa-page6.com +tsapage.com tsarufaq.com tsbjschool.com tsbtv.tv @@ -94363,9 +94651,10 @@ tscichina.com tscorona.com tsdaodao.com tsdjg.com -tsdjq.com tsdxb.com +tsecdapi.com tsefang.com +tsepcn.com tses.net tsflc.com tsfqw.com @@ -94418,9 +94707,15 @@ tslongtai.com tslsmart.com tslt.tech tsluping.com +tsm-license-test.com +tsm-license.com tsm-yuntrust.com tsm52dc.com tsmtkj.com +tsn-tencentclb.cloud +tsn-tencentclb.com +tsn-tencentclb.net +tsn-tencentclb.work tsorder.com tsp-system.com tsp189.com @@ -94444,6 +94739,7 @@ tstvxmt.com tsubakichina.com tsukistar.fun tsunbull.com +tswjs.net tswjs.org tswljt.com tswnanning.com @@ -94485,10 +94781,10 @@ ttcad.com ttcat.site ttcl.cc ttdailynews.com +ttdnsa.com ttdown.com ttdsw.com ttechhk.com -ttfa8.com ttfly.com ttfuav.com ttg8.com @@ -94552,6 +94848,8 @@ ttshengbei.com ttship.com ttshuba.cc ttshuba.net +ttsim.com +ttsim.net ttsmk.com ttstream.com ttsz8.com @@ -94582,6 +94880,7 @@ ttxsonline.com ttxuanpai.com ttxx8888.com ttyec.com +ttyfp.com ttyfund.com ttyinfo.com ttyingqiu.com @@ -94642,7 +94941,6 @@ tubatu.com tube-cat.com tubebbs.com tubiaoxiu.com -tubiaozu.com tubie.art tuboshu.com tuboshuxinxi.xyz @@ -94661,6 +94959,7 @@ tudan.cc tudan.vip tudou.com tudoupe.com +tudouseo.com tudouui.com tudouxy01.com tudouyx.com @@ -94694,6 +94993,7 @@ tuibear.com tuiberry.com tuiclick.com tuicool.com +tuicross.com tuidaniu.com tuidc.com tuideli.com @@ -94745,12 +95045,10 @@ tujiandan.com tujidu.com tujixiazai.com tujuren.com -tuke8.com tuke88.com tukedu.com tukkk.com tuku.com -tukucc.com tukujia.com tukuppt.com tulading.com @@ -94761,7 +95059,6 @@ tulingdns.com tuliu.com tulsj.com tumajewelry.com -tumanfen.com tumanyi.com tumchina.com tumengtech.com @@ -94831,6 +95128,7 @@ tupian1234.com tupian365.com tupiancunchu.com tupiankucdn.com +tupianseo.com tupianyun.com tupianzj.com tupu360.com @@ -94924,7 +95222,6 @@ tuyoujp.com tuyoumi.com tuyouvpn.com tuyouxinxi.net -tuyusheji.com tuzhan.com tuzhan.net tuzhanai.com @@ -94962,8 +95259,9 @@ tvkuai.com tvmao.com tvmcloud.com tvmining.com -tvniao.com tvoao.com +tvodapi.com +tvodapibk.com tvos.com tvt.im tvuctgze.com @@ -94973,12 +95271,9 @@ tvzn.com tw-joly.com tw-yun.com tw2sm.com -tw93.fun twanxi.com twatchesmall.com -twatchmall.com twcoal.com -twd.icu twd2.me twd2.net twdxdl.com @@ -94997,7 +95292,6 @@ tws.com twsapp.com twscholar.com twsns.com -twsyue.com twsz-cq.com twszs.com twtes18.com @@ -95015,6 +95309,7 @@ tx-exhibition.com tx-livetools.com tx-streetlights.com tx-trans.com +tx.lilyemby.com tx009.com tx1588.com tx163.com @@ -95022,6 +95317,8 @@ tx321.com tx365.com tx5d.com tx8j.com +txacc1.com +txacc1.net txbanche.com txbapp.com txbimg.com @@ -95029,19 +95326,30 @@ txbond.com txbyod.com txcap.com txcdns.com +txcdns.net txcfgl.com txcgoo.com +txclivecdn.com +txcloudlive.com txcm365.com txcm365.net txcmapp.com +txcode.com txcx.com txcx.tech +txcxjd.com txcxpt.com txczawlfpj5.com txdai.com txdl1.com +txdl1.net +txdl2.com +txdl2.net txdyt.com txdzw.com +txelive.com +txelvb.com +txeo.net txfba.com txfeiyu.com txffp.com @@ -95050,6 +95358,7 @@ txga.com txgirl1.com txgirl2.com txhsya.com +txhttpdns.net txhy1699.com txitech.com txjhqh.com @@ -95058,21 +95367,26 @@ txjsjgs888.com txjx169.com txjy689.com txlctong.com +txleshare.com txlivecdn.com +txlivecdn2.com txlt.com txlunwenw.com txlzp.com txmcu.com +txmdb.com txmkf.com txon.net txooo.com txqcw.net txqq.com txqq789.com +txresearch.com txrjy.com txrpic.com txrz.com txrzx.com +txscdn.com txsdk.com txsec.com txsf.com @@ -95089,6 +95403,8 @@ txttgj.com txttool.com txtyxg.com txvat.com +txvideo1.com +txvideo2.com txwb.com txweekly.com txwestart.com @@ -95099,7 +95415,6 @@ txx66.com txxbxx.com txxy.com txxzc.com -txy6666.com txy8.com txyapp.com txybio.com @@ -95185,7 +95500,6 @@ tyrbl.com tyrbw.com tyread.com tysdmh.com -tysfgj.com tysih.com tysj365.com tysjyjy.com @@ -95211,6 +95525,7 @@ tywheels.com tywx.com tywxw.la tyxcdn.com +tyxcdn.net tyy6.com tyymt.com tyyujie.com @@ -95240,6 +95555,7 @@ tzfdc.com tzfeilu.com tzfeize.xyz tzfile.com +tzgamepkg.com tzgcjie.com tzggzj.com tzgjjt.com @@ -95302,17 +95618,17 @@ u-camera.com u-carloan.com u-cdn.com u-cdn.net +u-con-dom.com +u-con-dom.net u-lights.com u-link.org u-mro.com u-om.com -u-onewatch.com u-qun.com u-road.com u-softtech.com u-speedex.com u-workshop.com -u.biz u.sb u.tools u005.com @@ -95349,9 +95665,7 @@ u6ex.com u72.net u8164i46a4.com u88.com -u8dnv.net u8e.com -u8p2swz.xyz u8see.com u8sy.com u8yb16b993.com @@ -95364,7 +95678,6 @@ u9u8.com u9u9.com u9wan.com uabkrsj.xyz -uaff7j.com uahh.site uakwezgc.com uancf.com @@ -95374,6 +95687,7 @@ uao-online.com uao.so uaomprvw.com uat1.bfsspadserver.8le8le.com +uatmrrvendor.com uauc.net uavtjxh.com uavvv.com @@ -95394,6 +95708,7 @@ ubgame.com ubicdn.com ubiquant.com ubismartparcel.com +ubits.club ubixai.com ubja.vip ublese.com @@ -95404,7 +95719,6 @@ uborn.net uboxol.com ubs001.com ubssdic.com -ubsshows.com ubtrobot.com ubuant.com ubuntukylin.com @@ -95531,8 +95845,6 @@ uelike.com uemo.net ueno-china.com uenu.com -uepei.com -ueram.com ueren.com uestcedu.com uestcliuxue.com @@ -95542,6 +95854,7 @@ uewaf.com uez.com uf-crm.com uf-tobacco.com +ufancycase.com ufanw.com ufcap.com ufcs.com @@ -95568,6 +95881,8 @@ ugainian.com ugapi.com ugapk.com ugbb.com +ugc-up-dom.com +ugc-up-dom.net ugdesk.com ugdocker.link uggame.com @@ -95707,6 +96022,7 @@ uliang.vip uliangwang.com uliaobao.com ulife.com +ulife.group ulikecam.com ulikecam.mobi ulikecam.net @@ -95721,7 +96037,6 @@ ultracachenode.com ultraeda.com ultramanol.com ultrarisc.com -ultrarobin.com ulucu.com ulvac-shanghai.com ulvac-suzhou.com @@ -95883,7 +96198,6 @@ united-bearing.com united-imaging.com united-sqwater.com united-water.com -united1991.com unitedbank.ltd unitedds.com unitedmoney.com @@ -95915,6 +96229,7 @@ unlcn.com unlgroup.com unlimax.com unlimithealth.com +unlsycn.com unmou.com unn114.com unncahs.net @@ -95991,6 +96306,7 @@ upchinapro.com upchinaproduct.com upd.kaspersky.com update.microsoft.com +update1.cyou update2.cyou update8.com updeals.com @@ -96084,6 +96400,7 @@ uriwh.com url.cy url7.me urlos.com +urlsecajog.com urmuyhz.com uroandrologyseries.com urocancer.org @@ -96113,6 +96430,7 @@ usaeu.com usahaitao.com usalink.xyz usaliuxue.com +usao8.com usaphoenixnews.com usapschool.com usashopcn.com @@ -96126,7 +96444,10 @@ uscnk.com uscntv.com usdcny.net usdtmall.com +use-tencentclb.cloud +use-tencentclb.com use-tencentclb.net +use-tencentclb.work use-trust.com useasp.net useaudio.com @@ -96172,6 +96493,10 @@ ustcers.com ustui.com usuredata.com usuuu.com +usw-tencentclb.cloud +usw-tencentclb.com +usw-tencentclb.net +usw-tencentclb.work uszcn.com ut8d.com utan.com @@ -96243,7 +96568,6 @@ uuhdedu.com uuhimalayanqm.com uuid.online uuimg.com -uuiop.com uukkuu.com uuliaoning.com uulux.com @@ -96311,7 +96635,6 @@ uvsec.com uvwhd.com uw36gicu5xav.com uw3c.com -uw8888.com uw9.net uwa4d.com uwan.com @@ -96377,11 +96700,13 @@ uzosibzk.com uzshare.com uzzf.com v-56.com -v-danci.com +v-jitp-dom.com +v-jitp-dom.net +v-jitp-glo.com +v-jitp-glo.net v-mate.mobi v-simtone.com v-suan.com -v.biz v.to v007.net v0668tm614.com @@ -96401,6 +96726,9 @@ v2b3.com v2ex.cc v2kt.com v2vm.com +v2xdatacenter.com +v2xdatasource.com +v2xengine.com v3.com v3best.com v3edu.org @@ -96472,7 +96800,6 @@ vanch.net vancheer.com vanchip.com vanchiptech.com -vanchu.com vancl.com vanclimg.com vancss.com @@ -96524,7 +96851,6 @@ vastlandsc.com vastman.com vastsea.com vastteq.com -vatdydw.com vatech-china.com vattenvalve.com vauoo.com @@ -96567,9 +96893,14 @@ vcloud-byte.com vcloudapi.com vcloudgtm.com vcloudgtm.net +vcloudlive.com +vcloudlive.net +vcloudsp.com +vcloudsp.net vcloudstc.com vcloudstc.net vcloudvod.com +vcloudvod.net vcltrade.com vclusters.com vcnews.com @@ -96663,6 +96994,7 @@ vemarsweb.com vemic.com vemte.com vemvm.com +vendor-src-eo.com vendue.vip venlvcloud.com ventoy.net @@ -96689,7 +97021,6 @@ vertuonline.com very361.com veryapex.com veryark.com -verybeaut.com verycd.com verycdn.net verychem.com @@ -96704,7 +97035,7 @@ verygslb.net veryhappy.pw veryhuo.com veryide.com -veryitman.com +veryim.com verykuai.com verym.com veryns.com @@ -96825,6 +97156,7 @@ video2b.com video2text.com videocc.net videofty.com +videohudong.com videohupu.com videoincloud.com videomind.cloud @@ -96839,7 +97171,6 @@ vidmatefilm.org viecoo.com vieg.net vientao.com -vietnambesthotel.com viewstock.com viewtool.com viewtrans.com @@ -96885,7 +97216,6 @@ vindapaper.com vinehoo.com vinetreetents.com vingoojuice.com -vingoostation.com vinjn.com vinkdong.com vinlion.com @@ -96894,6 +97224,7 @@ violetgo.com violinstudy.net violinww.com vip-chn.com +vip-lexiang.com vip-vip-yzzy.com vip-wifi.com vip.com @@ -96914,6 +97245,7 @@ vipbla.com vipbuluo.com vipcaocao.com vipchina.com +vipcname.com vipcto.com vipdlt.com vipersaudio.com @@ -96990,6 +97322,7 @@ virosin.org virscan.org virtaicloud.com virtualevent.net +virtualworld.pub virtupharmako.com virusdefender.net vis.zone @@ -97050,6 +97383,7 @@ visvachina.com vitagou.com vitagou.hk vitalgen.com +vitaloffice.life vitalxyz.com vitamio.net vitamio.org @@ -97077,7 +97411,6 @@ vivosjpt.com vivotc.com vivst.com viwik.com -viwipiediema.com vixiu.com vixue.com viyuan.com @@ -97116,6 +97449,7 @@ vlight.me vlightv.com vlink.cc vlinkage.com +vlinkapi.com vlinke.com vlion.mobi vlong.tv @@ -97137,6 +97471,7 @@ vmallres.com vmanhua.com vmartaw.com vmax-lighting.com +vmaxhome.com vmaya.com vmdns.xyz vmdo.net @@ -97173,17 +97508,43 @@ voc.ai vocalmiku.com voccdn.com vocinno.com +vod-backup.net +vod-bk-qcloud.com +vod-content.com +vod-content.net +vod-eo.com +vod-eo1.com +vod-eo2.com +vod-eo3.com +vod-eo4.com +vod-eo5.com +vod-igtm.com vod-pro.com vod-qcloud.com +vod-test.com +vod-upload.com vod.qhdcm.com +vodapis.com +vodapisbk.com voddlb.com vodecn.com vodehr.com +vodeoapi.com +vodeoapibk.com +vodeointernal.com vodeshop.com +vodinternal.com +vodinternalbk.com vodjk.com vodn-valve.com +vodplayvideo.com vodplayvideo.net +vodpro-upload.com +vodpro-upload1.com +vodpro-upload2.com +vodpro-uploadbk.com vodtcbk.com +vodxl-qcloud.com voguecafebeijing.com voguechinese.com voguelife.net @@ -97306,7 +97667,9 @@ voolea.com voolga.net voopoo.com voovlive.com +voovlive.net voovmeeting.com +voovnow.com vortexfun.com vosvmamt.com vot8.com @@ -97321,7 +97684,6 @@ voycn.com vp3u.com vp6.co vpabrand.com -vpadn.com vpal.com vpalstatic.com vpanso.com @@ -97408,7 +97770,6 @@ vrupup.com vrvlink.com vrvmanager.com vrwuhan.com -vryeye.com vrzb.com vrzhijia.com vrzwk.com @@ -97486,13 +97847,17 @@ vuepush.com vuevideo.net vulbox.com vulcan.dl.playstation.net +vulrange.com vultr1.com vultrcn.com vultrvps.com vumstar.com vunion.net vuphub.com +vurl.fun vurl.link +vurl.pro +vurl.tech vurl3.vip vutimes.com vuxmpw.com @@ -97528,6 +97893,7 @@ vvup.net vvvcd.com vvvdj.com vvvtt.com +vvxue.com vvzero.com vw888.com vwanjia.com @@ -97579,21 +97945,17 @@ vztkoegc.com vzuu.com w-e.cc w-zhong.com -w.biz w032.com w03voavpa5.com -w0512.com w0663.com w0lker.com w0x9r0k2l1.com w10a.com w10xitong.com -w10zj.com w123w.com w18.net w1989.com w218.com -w2985nq.xyz w2bc.com w2gou.com w2n5cu58rn.com @@ -97628,13 +97990,11 @@ w9188wan.com wa5.com wa5as4.com waaaat.com -waahah.xyz waakee.com waaku.com waakuu.com waasee.com wabcw.info -wabisabidomus.com wabuw.com wacai.com wacai365.com @@ -97768,7 +98128,6 @@ wan898.com wan95.com wanadalu.com wanandroid.com -wananshan.com wanbaapp.com wanbexpress.com wanbgame.com @@ -97914,7 +98273,6 @@ wangmingkuo.com wangmou.com wangniuwms.com wangpeiaiot.com -wangpengzheng.com wangpiao.com wangpiao.net wangpu.net @@ -97989,6 +98347,7 @@ wangzhanzj.com wangzhe.com wangzhengzhen.com wangzhennan.com +wangzherongyao.com wangzhuanz.com wanh5.com wanhea.com @@ -98110,6 +98469,7 @@ wanwan4399.com wanwan88.com wanwang.com wanwang.space +wanwang.xin wanweiedu.com wanweixin.com wanwu.com @@ -98173,7 +98533,6 @@ wanzjhb.com wanzuile.com waoh.fun waoo.cc -waplih.xyz wapone.net waptt.com waptw.com @@ -98181,6 +98540,7 @@ war-sky.com waralert.net warchina.com warcraftchina.com +warframeofficial.com warhammertech.com warmchina121.com warmjar.com @@ -98240,7 +98600,6 @@ waterchina.com waterdp.com waterdropfilter.com waterenping.com -waterfallguilin.com watergasheat.com watergdd.com waterjhh.com @@ -98255,6 +98614,7 @@ wauee.com wauee.net wave-optics.com wavecn.com +wavecommittee.com wavedsp.tech wavefront-optics.com waveopt.com @@ -98324,6 +98684,7 @@ wbtech.com wbtrans.com wbw.im wbwbwb.net +wbxcx.net wbxinxi.com wbzd.net wc-soft.com @@ -98393,9 +98754,7 @@ wdmcake.com wdmuz.com wdmyksm.com wdnld.com -wdodo.com wdomob.com -wdou168.com wdpharma.com wdpower.com wdptj.com @@ -98405,7 +98764,6 @@ wdsjz.com wdsk.net wdstory.com wdsz.net -wdszb.com wdtec.cc wdtuishu.com wduw.com @@ -98422,6 +98780,7 @@ wdyy.com wdzj.com wdzx.com we-canlogistics.com +we-pass.com we.com we1130.com we123.com @@ -98475,6 +98834,7 @@ web3gate.io web3ling.com web89.net web930.com +webacc.net webacg.com webank.com webankapp.com @@ -98524,6 +98884,8 @@ webqxs.com webrtc.win websaru.net websbook.com +websec1.com +websec1.net websem.cc webseo9.com webshao.com @@ -98555,11 +98917,19 @@ wecasting.com wecenter.com weceshi.com wechat.com +wechat.design +wechat.me wechat.org wechat77.com wechatapp.com +wechatapp.us +wechatauthdemo.com +wechatdevelop.com wechatify.net +wechatlegal.com wechatlegal.net +wechatmessenger.com +wechatmessenger.us wechatos.net wechatpay-global.com wechatpay.com @@ -98579,6 +98949,8 @@ wedate.me wedcm.com weddingos.com wedengta.com +wedev.cool +wedeveloper.com wedfairy.com wedn.net wedoany.com @@ -98603,12 +98975,15 @@ weflywifi.com wefunol.com wegame.com wegameapi.com +wegamedesign.com wegamedeveloper.com +wegamemail.com wegameplus.com wegamex.com.hk wegdj.com wegene.com wego-healthcare.com +wegooooo.com wehandbio.com weharvest.com wehefei.com @@ -98623,7 +98998,6 @@ wei6.com wei688.com weiaixiaoshuo.com weiba66.com -weibaji.com weibanan.com weibang.vip weibangong.com @@ -98663,6 +99037,7 @@ weico.com weicogif.com weicon.cc weicot.com +weicunmall.com weida888.com weidanbai.com weidanci.com @@ -98780,7 +99155,6 @@ weilingapp.com weilinggame.com weilinovel.net weilitoutiao.net -weiliwq.com weilongshipin.com weimaelectric.com weimagroup.com @@ -98867,6 +99241,7 @@ weismarts.com weistang.com weisuda.net weisurvey.com +weisurvey.net weisuyun.com weisuyun.net weisyun.com @@ -98911,6 +99286,7 @@ weixinbiaoqing.com weixinbridge.com weixincall.com weixindadang.com +weixindevelop.com weixingate.com weixingmap.com weixingon.com @@ -98996,6 +99372,7 @@ wejizan.ink wejoydata.com weka.life wekbo.com +weknow.io wekuo.com welain.com welansh.com @@ -99163,7 +99540,6 @@ wenshen.net wenshen8.net wenshenba.com wenshendaka.com -wenshengdz.com wenshenku.com wenshenxiu.com wenshuba.com @@ -99184,7 +99560,6 @@ wenwo.com wenwu8.com wenwuchina.com wenxiaha.com -wenxiang.org wenxiaobai.com wenxiaoyou.com wenxiaozhan.com @@ -99201,7 +99576,6 @@ wenxuedu.com wenxuefan.net wenxuem.com wenxuemm.com -wenxueonline.com wenxuesk.com wenxuesk.info wenxuesk.net @@ -99253,6 +99627,8 @@ weshaketv.com weshequ.com weshine.im weshineapp.com +wesimiot.com +wesing-game.com wesingapp.com west-motion.com west.xyz @@ -99272,6 +99648,7 @@ westfutu.com westinfosoft.com westingz.com westlake-vacuum.com +westlakedata.com westlakegenetech.com westlakeinst.com westlakeomics.com @@ -99288,7 +99665,10 @@ westsummitcap.com wesure100.com wetab.link wetaoke.com +wetest.host wetest.net +wetest.org +wetestlab.net wetherm.com weti.me weton.net @@ -99305,6 +99685,7 @@ weuschool.com wevul.com wewillpro.com wewinpe.com +wework-pro.com wework-studio.com weworkcloudesk.com wewuhu.com @@ -99366,7 +99747,6 @@ wflps.com wflscaidian.com wflushebei.com wfmzjscl.com -wfnmjx.com wfojsm.com wfrcsc.com wfsanshan.com @@ -99402,7 +99782,6 @@ wgoic.com wgos.com wgppt.com wgpsec.org -wgsptc.com wgtechjx.com wgxdxx.com wgxy.com @@ -99434,6 +99813,7 @@ wh6yy.com wh6z.com wh702g.ren whabl.net +whaee.com whafxh.org whagcg.com whairport.com @@ -99441,7 +99821,6 @@ whakll.com whale-king.com whale-plus.com whale123.com -whalecloudexport.com whalefall.space whaleskts.com whalet.com @@ -99520,6 +99899,10 @@ whdsck.com whdsyy.com whduanwu.com whdxhzx.com +whec-tencentclb.cloud +whec-tencentclb.com +whec-tencentclb.net +whec-tencentclb.work whecb.com whecloud.com whecn.com @@ -99560,8 +99943,6 @@ whguanshan.com whguo.com whgwbn.net whgyt.com -whh3355.com -whh9988.com whhaifang.com whhaiyue.com whhbxh.org @@ -99703,10 +100084,8 @@ whnfc.com who.cx who2o.com whoami.akamai.net -whocool.com whoisreminder.net whoisspy.ai -wholesale-wedding-dresses-gowns.com whongtec.com whoolala.com whooonline.com @@ -99747,7 +100126,6 @@ whrtyycg.com whsctgs.com whsdhyy.com whsdsyy.com -whsdzckm.com whsgj.com whsgyy.com whsir.com @@ -99768,7 +100146,6 @@ whswx.com whsxsy88.com whsy.org whsyy.net -whsyzdh.com whszniao.com whtaxi.com whtbglass.com @@ -99901,7 +100278,6 @@ whzszy.com whzwzk.com whzwzs.com whzxht.com -whzxjcgc.com whzxzls.com whzydz.com whzys.com @@ -99952,6 +100328,7 @@ wiiyi.com wikicaring.com wikielife.com wikiimgs.com +wildcardx.net wilddog.com wilddream.net wildgun.net @@ -100067,12 +100444,14 @@ wing-max.com wingconn.com winglinetrans.com winglungbank.com +wingmob.com wingon-travel.com wingsbook.com wingtecher.com winheadhunter.com winhealth.hk winhealthgroups.com +winhlb.com winhong.com winicssec.com winjoinit.com @@ -100142,7 +100521,6 @@ winzonelaw.com wio2o.com wiot.host wipanda.com -wiqsvrde.com wireless-driver.com wireless-tag.com wirelesschina-summit.com @@ -100228,6 +100606,7 @@ wiwide.net wixdigital.com wiz03.com wizitek.com +wizsci.com wj-chem.com wj-hospital.com wj-hr.com @@ -100268,7 +100647,6 @@ wjinmiao.com wjjfjt.com wjjyxxw.com wjlxmedia.com -wjlyhj.com wjmh8.com wjnin.cc wjqcw.com @@ -100305,14 +100683,15 @@ wkcdn.com wkcmall.com wkcw.net wkddkyy.com +wkdimg.com wkdty.com -wkene.com wkepu.com wkhub.com wkimg.com wkkshu.com wklken.me wkmic.com +wknky1296.com wkopen.com wkread.com wksc.com @@ -100324,8 +100703,8 @@ wkxxw.com wkyx520.com wkzf.com wkzk.com +wkzstencent.com wkzuche.com -wl.dlservice.microsoft.com wl369.com wl890.com wlaforum.com @@ -100362,6 +100741,7 @@ wll-xyz.com wllxcl.com wllxx.com wllxy.net +wlmf.vip wlmq.com wlmqedu.com wlmqhytd.com @@ -100383,6 +100763,7 @@ wlski.com wlstock.com wlsx.net wltieyaoban.com +wltong.com wluotx.com wlw-jcdlcxzx.com wlwj.com @@ -100419,7 +100800,6 @@ wmc-gba.net wmc95588.com wmcloud.com wmcn.com -wmcnt.com wmdang.com wmfanyi.com wmgurt9zka425.com @@ -100507,6 +100887,9 @@ wnrcw.com wns888.com wns8888.com wnshouhu.com +wnspic.com +wnspicbk.com +wnsqzone.com wnsqzonebk.com wnssedu.com wnszxyy.com @@ -100519,7 +100902,6 @@ wnylyx.com wnzc.com wnzctc.com wnzhbb.com -wnzqc.com wnzy.net wo-link.tech wo-smart.com @@ -100584,7 +100966,6 @@ wodjob.com wodocx.com wodown.com wodu518.com -wodubao.com wodunyun.com woeoo.com wofang.com @@ -100660,6 +101041,7 @@ womeimenye.com women-heart.com womendedw.com womenjie.com +womenofchina.com wonadea.com wonder-link.net wonder.wiki @@ -100680,7 +101062,6 @@ wondersmemory.com wonderstar027.com wonderyouxi.com wondko.com -wonei.com wonengxing588.com wonflavour.com wonfulplaza.com @@ -100705,7 +101086,6 @@ wonote.com wonpearl.com wonplug.net woo.im -wooaii.com wood-china.com wood168.net wood888.net @@ -100859,7 +101239,6 @@ woyaogexing.com woyaojiaju.com woyaoqiudai.com woyaosai.com -woyaosouti.com woyaozhan.com woying.com woyo.com @@ -100899,7 +101278,6 @@ wpjam.com wpk8.com wporder.com wproedu.com -wps-office.net wps.com wpscdn.com wpsdns.com @@ -100938,9 +101316,9 @@ wqlml.com wqoiyz.com wqop2018.com wqshe.com +wqstatic.com wqszwhf.com wqtool.com -wqwlmxx.xyz wqxsw.com wqxuetang.com wqycq.com @@ -101021,6 +101399,7 @@ wsfnk.com wsgeogen.com wsgjj.com wsgjp.com +wsglb.com wsglb.net wsglb0.com wsglb0.info @@ -101032,7 +101411,6 @@ wsgri.com wsgtm1.com wsgtm2.com wsgtm3.com -wsgxsp.com wshang.com wshbzc.com wshengda2009.com @@ -101079,6 +101457,7 @@ wssafe.net wssanguo.com wssdns.com wsssec.com +wsstplay.com wssvs.com wssvs.net wssyun.com @@ -101112,7 +101491,6 @@ wt222.com wta-web.org wtaluo.com wtango.com -wtapi.com wtbds.com wtbworld.com wtc-conference.com @@ -101282,6 +101660,7 @@ wujianghongyi.com wujianghr.com wujiangtong.com wujiayi.vip +wujicode.com wujiecaifu.com wujiehd.com wujiehuyu.com @@ -101295,6 +101674,8 @@ wujinpp.com wujintool.com wujinwater.com wujiok.com +wujisite.com +wujistatic.com wujitang.com wujixiaoshuo.com wujixsw.info @@ -101304,7 +101685,6 @@ wukaikai.tech wukao.com wukong.com wukong.la -wukongapi.com wukongbjb.com wukongkf.com wukongks.com @@ -101351,6 +101731,7 @@ wumart.com wumii.tv wuming.com wupdec.com +wupk.com wuqi-micro.com wuqing.cc wuqiong.info @@ -101534,7 +101915,6 @@ wwejds.com wwenglish.com wwenglish.org wwentua.com -wwepcbv.com wweuzgtp.com wwfchina.org wwhlian.com @@ -101551,7 +101931,6 @@ wwsq.tv wwstat.com www-11187.com www-123490.com -www-376655.com www-4466666.com www-666789.com www-76244.com @@ -101672,6 +102051,8 @@ wxgateway.com wxggxx.com wxgjyy.com wxglyy.com +wxgmkt.com +wxgongkaike.com wxgrcpa.com wxgxjt.com wxgz.net @@ -101731,7 +102112,6 @@ wxlivecdn.com wxlongda.com wxlongre.com wxlpool.com -wxlxgzx.com wxlxjy.com wxlydhb.com wxmama.com @@ -101744,6 +102124,7 @@ wxngh.com wxp114.com wxp2022.vip wxpangu.com +wxpayui.com wxphp.com wxpmc.com wxq.today @@ -101768,6 +102149,7 @@ wxsgf.com wxshake.com wxshgs.com wxshiteng.com +wxshops.co wxshuku.la wxskysy.com wxslzf.com @@ -101798,8 +102180,10 @@ wxw120.com wxwerp.com wxwjk5.com wxwmdq.com +wxworklive.com wxwtblg.com wxwzt.com +wxxd.co wxxfltg.com wxxfzx.com wxxrh.com @@ -101952,7 +102336,6 @@ wzits.com wzj9.com wzjbbus.com wzjcsc.com -wzjfxjy.com wzjrtzjt.com wzjsjtzcpt.com wzjsxx.com @@ -102036,7 +102419,6 @@ wzyc.com wzyds.com wzyestar.com wzylrj.com -wzyoule.com wzyzdyf.com wzz1809.com wzzbdz.com @@ -102120,7 +102502,6 @@ x9393.com x93r91l460.com x9gc3siwevbpc.com xa-bank.com -xa-expoon.com xa-online.com xa-psj.com xa.com @@ -102213,7 +102594,6 @@ xapcn.com xapi.ltd xaqhgas.com xarc.net -xarjfh.com xarlm.com xarongdi.com xarptec.com @@ -102257,7 +102637,6 @@ xayestar.com xaygddc.com xayhedu.com xayizhou.com -xayxzx.com xayzjc.com xazcit.com xazls.com @@ -102267,7 +102646,6 @@ xazysoft.net xazyy.com xazzs.com xb.app -xb.dlservice.microsoft.com xb0.cc xb2s.com xba123.com @@ -102288,9 +102666,12 @@ xbdgps.com xbds.cc xbdtly.com xbdym.com +xbec-tencentclb.cloud +xbec-tencentclb.com +xbec-tencentclb.net +xbec-tencentclb.work xbequge.com xbeta.info -xbetgames37.com xbext.com xbfashion.com xbfnet.com @@ -102380,7 +102761,6 @@ xcharger.net xchjw.org xchr-group.com xchsgy.com -xchuandai.com xchuxing.com xciic.com xcj.com @@ -102438,10 +102818,10 @@ xcvvs.com xcwhjj.com xcx-x.com xcxd-inc.com +xcxd1997.com xcxjpd.com xcxvs.com xcxwo.com -xcxx28.com xcxymw.com xcxyw.com xcxzks.com @@ -102451,7 +102831,6 @@ xczhmzb.com xczhsh.com xczim.com xczzs.com -xd-game.com xd-tech.com xd-world.com xd.com @@ -102516,6 +102895,7 @@ xdpipe.com xdpjump.com xdplt.com xdpvp.com +xdqtech.com xdrcftv.com xdressy.com xdrtc.com @@ -102525,6 +102905,7 @@ xdsp.mobi xdsyzzs.com xdter.com xdtev.com +xdtool.com xdtos.com xduim.com xduoo.com @@ -102635,13 +103016,11 @@ xfplay.tv xfprecise.com xfq.life xfr3u4lz94.com -xfsb119.com xft123.com xftclub.com xftransa.com xfun233.com xfusion.com -xfw0594.com xfwdc.com xfwed.com xfwindow.com @@ -102659,6 +103038,7 @@ xfzllht.com xg-techgroup.com xg1234.com xg38.com +xgamecenter.com xgamevip.com xgantt.net xgate.com @@ -102703,7 +103083,6 @@ xgsxt.net xgsyun.com xgt2014.com xgtea.com -xgw5.com xgwx.net xgxedu.com xgxsignage.com @@ -102807,7 +103186,6 @@ xhw81pr263.com xhwater.com xhwcdasha.com xhwhouse.com -xhwsjc.com xhwtech.com xhwx100.com xhxcedu.com @@ -102868,7 +103246,6 @@ xiamenwater.com xiami.com xiami.fm xiami.net -xiamo.cc xiamo.fun xiamoyun.com xiamp4.com @@ -102952,7 +103329,6 @@ xiangqianpos.com xiangqigame.com xiangqin7.com xiangqishan.com -xiangqishan.net xiangqiyouxi.com xiangqu.com xiangrikui.com @@ -102967,7 +103343,6 @@ xiangshanpark.com xiangshe.com xiangshengbao.com xiangshengnet.com -xiangshengw.com xiangshi.cc xiangshi.video xiangshitan.com @@ -103068,7 +103443,6 @@ xianyugouwu.com xianyuso.com xianyuvr.com xianyuwang.com -xianyuwenhua.com xianyuyouxi.com xianzhanget.com xianzhi.net @@ -103176,7 +103550,6 @@ xiaoenai.com xiaoerjiren.com xiaoeryi.com xiaoetong.com -xiaofantian.com xiaofany.com xiaofeng.org xiaofengtv.com @@ -103198,7 +103571,6 @@ xiaogou999.com xiaogouds.com xiaogouh5.com xiaogouzhineng.com -xiaogr.com xiaoguaniu.com xiaoguikuaipao.com xiaoguo101.com @@ -103209,7 +103581,6 @@ xiaogushi.com xiaoh.me xiaohack.org xiaohansong.com -xiaohaoyun.com xiaohe-jiankang.com xiaohe666.com xiaoheihegame.com @@ -103231,7 +103602,7 @@ xiaohuabaichu.com xiaohuabuluo.com xiaohuai.com xiaohuangji.com -xiaohuar.com +xiaohuazhuo.com xiaohucloud.com xiaohufev.com xiaohulu.com @@ -103285,7 +103656,6 @@ xiaolanben.com xiaolangtt.com xiaolantiao.com xiaole.com -xiaoleidm.com xiaoleimob.com xiaolianbao.com xiaoliangkou.com @@ -103332,7 +103702,6 @@ xiaomape.com xiaomark.com xiaomashijia.com xiaomaxitong.com -xiaomayi.co xiaomayi.net xiaomazhixing.com xiaomei.cc @@ -103400,7 +103769,6 @@ xiaopeiqing.com xiaopeng.com xiaophy.com xiaopi.com -xiaopiaoyou.com xiaopinchuxing.com xiaopinw.com xiaopiu.com @@ -103631,7 +103999,6 @@ xichuan001.com xichuangzhu.com xici.com xici.net -xicn.net xicp.net xidesheng.com xidian.cc @@ -103675,7 +104042,6 @@ xielijiaoyu.com xieliqun.com xiemm.com xiesk.com -xieso.net xietonghuaxue.com xiexiaoyuan.com xiexin.com @@ -103735,6 +104101,17 @@ xijie.com xijie888.com xijinfa.com xijing01.com +xijingjianzhan.com +xijingjianzhan0.com +xijingjianzhan1.com +xijingjianzhan2.com +xijingjianzhan3.com +xijingjianzhan4.com +xijingjianzhan5.com +xijingjianzhan6.com +xijingjianzhan7.com +xijingjianzhan8.com +xijingjianzhan9.com xijingufen.com xikang365.net xikcloud.com @@ -103743,7 +104120,6 @@ xikoutourism.com xikrs.com xikuan.com xikuqi.com -xiladaili.com xilaijian.com xilaiping.com xilanggufen.com @@ -103853,6 +104229,7 @@ xindingdianxsw.com xindingwealth.com xindns.com xindong.com +xindongdinglv.com xindonghuyu123.com xindu.cc xinduo.com @@ -103862,6 +104239,7 @@ xiner-membrane.com xineurope.com xinexpress.com xinfaholding.com +xinfangcidian.com xinfangsheng.com xinfei.com xinfeijituan.com @@ -103946,7 +104324,6 @@ xingkongmt.com xingkupai.com xinglai.com xinglan.co -xingleseo.com xingliju.com xinglin-tech.com xinglingyingxue.com @@ -104014,7 +104391,6 @@ xingyao.com xingyaocq.com xingyaomob.com xingyaoss.com -xingyaox.com xingyaoyd.com xingye.work xingye1.com @@ -104228,7 +104604,6 @@ xinsdn.com xinsenz.com xinsf.cc xinshangmeng.com -xinshangmeng3.com xinshangshangxin.com xinshengdagroup.com xinshengku.com @@ -104315,7 +104690,6 @@ xinxjs.com xinxue-edu.com xinxuejy.com xinxunwang.com -xinxunwei.com xinxyun.com xinya.me xinyali.net @@ -104360,6 +104734,7 @@ xinyuanfin.com xinyuanshiye.net xinyubt.com xinyuchen.com +xinyueclub.com xinyuefei.com xinyuehealth.com xinyuejiaxiao.net @@ -104370,7 +104745,6 @@ xinyuncs.com xinyunfuwu.com xinyunit.com xinyurc.com -xinyusanyi.com xinyustone.com xinyutengyuan.com xinzegongshui.com @@ -104390,7 +104764,6 @@ xinzushenghuo.com xiolift.com xionganxinxi.com xiongbagk.com -xiongbeng.com xiongbingtianxia.com xiongchuan.com xiongf.com @@ -104400,6 +104773,7 @@ xiongge.club xiongmaitech.com xiongmao555.com xiongmao789.com +xiongmaoboshi.com xiongmaodangao.com xiongmaojinku.com xiongmaosaohao.com @@ -104538,7 +104912,6 @@ xiwangchina.com xiwangd.com xiwanglife.com xiwangxiaoyuan.com -xiwanjia.com xiwantrip.com xiweigas.com xiwenquan.com @@ -104567,6 +104940,10 @@ xixiwg.com xiyacs.com xiyangan.com xiyashiji.com +xiyec-tencentclb.cloud +xiyec-tencentclb.com +xiyec-tencentclb.net +xiyec-tencentclb.work xiyi-jt.com xiyijiang.com xiyijm.com @@ -104688,7 +105065,6 @@ xjlytz.com xjlz365.com xjmachine.com xjmg.com -xjmtx.com xjmty.com xjnnet.net xjnzm.com @@ -104705,7 +105081,6 @@ xjrc365.com xjrdsp.com xjrmyy.com xjshanhao.com -xjshift.com xjsic.com xjsmwl.com xjsy56.com @@ -104810,6 +105185,7 @@ xlczg.com xldlive.com xldz.com xlewen5.com +xlfred.com xlgao.com xlgjg.net xlgogo.com @@ -104942,6 +105318,7 @@ xmhaicangmarathon.com xmheigu.com xmheitu.com xmhitek.com +xmhlcs.org xmhljx.net xmhouse.com xmht.com @@ -105017,7 +105394,6 @@ xmuli.tech xmulib.org xmwan.com xmwes.com -xmwns.com xmwsrc.com xmx023.com xmxc.com @@ -105043,6 +105419,7 @@ xmzjtjckmy.com xmzmmr.com xmzmy.com xmzs.org +xmzsyg.site xmzyark.com xmzzy.net xn--0lqwsu2w.com @@ -105050,7 +105427,6 @@ xn--15q53an56b23i4nu0jb.com xn--1bs9ye16ez8b.com xn--1ctq05bvu1a.com xn--1d3a16a.com -xn--1lq86ddzrwkhiicdz5d638a.com xn--1lqq7i4w0acli.com xn--2cyr99a.com xn--2quu5hi8e69p.com @@ -105066,7 +105442,6 @@ xn--48s50dpwnbh95ah07i.com xn--4gq0d69oba129b9wd94ey8bs83ji3c3q7hoka.org xn--4gq1d760bszbgdv5p12rhq5bx2yc.net xn--4lwr21d.com -xn--4oqr35flvp.com xn--4qwqc04pn0lg9h.com xn--4xup5j.com xn--54q23ckxiyx0e.com @@ -105083,7 +105458,6 @@ xn--5kv91jiz2b.com xn--6fr61zj8c92fg34d.com xn--6kr66fp2ep1ac5edz2hy7s2wq.com xn--6krw3qs7jl59b.com -xn--6oq43md5j.com xn--6oq83hzb922dnorwsomx9dzkb.com xn--6qqp94buie2ss.com xn--6rtq6phwfhva.com @@ -105107,18 +105481,14 @@ xn--b0tn0sxy3ayhj.com xn--b0tp7p3met2a.com xn--b0tp7p3met2a.net xn--b8qi619ujyk.com -xn--bbt44m.net -xn--blqw4qdtj1zl4x4c.com xn--btvs3aw8fhtbms310k.com -xn--btvu11h.com xn--btvu9x9qgt8c.com -xn--buxr99dhia.com xn--bxyy83e.net xn--cesx3oukw29l.com xn--cetx7iotgtmgrm7blsf.com xn--chq7lp8e46htw3g.com -xn--chq84ir6vbgn.com xn--chq84itwgrb674blm6f.com +xn--chq978ctsf6v6c.com xn--cjztj18l.com xn--cpqr0dg9g4t0fodaq5c.com xn--cssw8z54rj2ds2q.com @@ -105147,13 +105517,11 @@ xn--fiq4mgq69drxaiym2g5wnynb77huij0bchq7vj5ay61o3cwdq2ah92mlg9c.com xn--fiq6q20pz51d.com xn--fiq73f39fwr0b4wk.net xn--fiq7v55hnsepqz.net -xn--fiqp15ft6ya.com xn--fiqr9gg1vdha.com xn--fiqrtn9duw9e.cc xn--fiqs8s60s3soq8cx0uohm.com xn--fiqs8sr9ge7eb4b28vo92a.com xn--fiqu59c0hf2sy.net -xn--fiqv1i07mt46b.com xn--fiqv94di0c54ipe.net xn--fiqw8jl3h7xc25m753d.link xn--fiqx7ci2whnj.com @@ -105205,6 +105573,7 @@ xn--rhqt5j7qj6mj.com xn--rht439a44bdyk.com xn--rhtr03fbrm.com xn--riqi041otpd.com +xn--rpv331d.com xn--rss237b.com xn--rss404ac6aj60e.net xn--rsss0ke5ghnj.com @@ -105231,7 +105600,6 @@ xn--vhq3m33sbqhpsmtnuxfq.com xn--vhq3mr8b802a.net xn--vhq4ut2dsxd5xqnicjxxo55a756aovhik0aunm.com xn--vhq72yfwbt0elp2cpkhtld55g73l1o6a.com -xn--vhqa63bt1h.com xn--vhqqbz2p62hm92e04p.com xn--vhqu1kbz3bnbi.com xn--viq463a.com @@ -105247,17 +105615,16 @@ xn--xcry9n251cvcar5xj6r.com xn--xhq60k09cr85at2f494d.com xn--xhq60kzbz07dem6azlu.com xn--xhq8sm16c5ls.com -xn--xhqq2hhv0dkpk.com xn--xhqq4f5vc69qlmk6mva633mwoeiuad9562e.com xn--xhqs8jmxkive1yest6g.com xn--xhqs8jp0kpz2d.net xn--xhqx10kr8o.com +xn--xkr190gv5p.com xn--xkr26fp82clgt.com xn--xkr999cp4fv97a.com xn--xkrs9ba41r.com xn--y6q834d2k3al4h.com xn--y8jhmm6gn.moe -xn--yet74fr8g.com xn--ygtp21bwyedsq.com xn--yhqq38bmov17mqxi.com xn--ykr169cm1pskt.com @@ -105289,7 +105656,6 @@ xnongren.com xnparking.com xnpfs.com xnpic.com -xnqcdk.com xns315.com xnsbdzb.com xnscyy.com @@ -105351,7 +105717,6 @@ xpgod.com xpgps.cc xphcn.com xpj0066.com -xpj16.net xpkjpk.com xpkongqipao.com xplaymobile.com @@ -105373,7 +105738,6 @@ xq0356.com xq0757.com xq2024.com xq5.com -xq52.com xq668.com xqb24.com xqbase.com @@ -105408,7 +105772,6 @@ xqyake.com xqyk024.com xqymuy.com xqypay.com -xqzgw.com xr100.net xr818.com xray.cool @@ -105474,7 +105837,6 @@ xsgame99.com xsgongju.com xsgrq.com xsgtvacct.com -xsh520.com xshengyan.com xshenshu.com xshhotels.com @@ -105487,7 +105849,6 @@ xshrcw.com xshts.com xshuai.com xshubao.org -xshuju.com xshuma.com xshuoba.com xshuoshuo.com @@ -105523,7 +105884,6 @@ xsnow.net xsnsyh.com xsool.com xsp0311.com -xspcf.com xsphs.com xspinfo.com xspio.com @@ -105536,9 +105896,7 @@ xsser.date xsshuku.com xsskw.com xsslyjt.com -xssyidc.com xssz.net -xsszy.com xsteach.com xsti.net xstnet.com @@ -105607,7 +105965,6 @@ xtjlyy.com xtjob.net xtjsxy.net xtjtjs.com -xtlitian.com xtlog.com xtmit.com xtmtrj.com @@ -105621,7 +105978,6 @@ xtrapowercn.com xtrc.net xtrunc.com xtsfuke.com -xtsjj.net xttblog.com xttz.com xtu2.com @@ -105633,11 +105989,11 @@ xtwzyx.com xtx6.com xtxcm.com xtxh.net -xtxianghe.com xtylxx.com xtyyw.com xtzdc.com xtzhiliji.com +xtzjcz.com xtzjup.com xtzpw.com xtzy.com @@ -105710,7 +106066,6 @@ xudankeji.com xudong8.com xudongfood.com xudoodoo.com -xuduan.vip xue.net xue114.com xue126.com @@ -105783,7 +106138,6 @@ xuekubao.com xuekuibang.shop xuelangapp.com xuele.net -xuelecn.com xueleku.com xuelema.com xueleyun.com @@ -105804,6 +106158,7 @@ xueqiu360.com xuerong.com xuesai.net xuesax.com +xuesexs.com xueshanlinghu.com xuesheng.com xueshiyun.com @@ -106015,7 +106370,6 @@ xunvision.com xunw.shop xunwan.com xunwangba.com -xunwei.org xunwei.tm xunweihc.com xunxi.com @@ -106142,10 +106496,8 @@ xx4a.com xx5515.com xx7z.co xx8g.com -xxadc.com xxahsk.com xxart.net -xxazjz.com xxbiquge.com xxbmm.com xxbt.com @@ -106273,7 +106625,6 @@ xy36z.com xy3yy.com xy58.net xy599.com -xy77.live xy980.net xyb2b.com xybch123.com @@ -106291,7 +106642,6 @@ xycdn.net xycgd.com xychyy.com xyclient.net -xyclient.xyz xycloud.com xyclouds.com xycsq.com @@ -106565,6 +106915,7 @@ xzrcyy.com xzrdwq.com xzriit.com xzrsks.com +xzsckj.com xzsdszx.com xzsdyyy.com xzsec.com @@ -106610,12 +106961,12 @@ y-feng.com y-i-y.com y-lotus.com y-os.net -y.cool y.to y007.com y1995.com y2002.com y2374050fo.com +y3pm.com y4rwk6v8s41kr.com y5000.com y55l6.com @@ -106651,7 +107002,6 @@ yaboo-cn.com yaboshi0777.com yabyy.com yac8.com -yac8.net yace17.com yach.me yachtsinchina.com @@ -106693,11 +107043,11 @@ yahunet.com yahxxcl.com yaimg.com yaitest.com -yaiwlt.xyz yaiyuan.com yajxc.com yake123.com yake5.com +yakgamer.com yakjhfh.com yakool.com yalayi.com @@ -107019,7 +107369,6 @@ yaotou.com yaoudq.com yaoujc.com yaowan.com -yaoxiangmeigui.com yaoxiaoyi.com yaoxuebang.com yaoxun.net @@ -107046,7 +107395,6 @@ yasiyasi.com yasking.org yasn.com yasudachem.com -yasuoji-shanyan.com yasuotu.com yasyy.com yatai.com @@ -107103,7 +107451,6 @@ yb-able.com yb1518.com yb1867.com yb3.cc -yb505.in yb983.com yb999.com yba120.com @@ -107129,7 +107476,6 @@ ybgkz.com ybgz.com ybhdmob.com ybi.net -ybin.cc ybirds.com ybj.com ybjjsgc.com @@ -107143,7 +107489,6 @@ yblry.com ybm100.com ybmedicine.com ybmilkgoat.com -ybqyqb.xyz ybqysw.com ybrc128.com ybren.com @@ -107219,7 +107564,6 @@ ycfybj.com ycfybjy.com ycgame.com ycgj.cc -ycgjj.com ycgjxx.com ycgslb.com ycgwl.com @@ -107232,7 +107576,6 @@ ychromedgeie.com ychszh.com ychxie.com ychxiex.com -ychzaj.com ycig.com ycigilink.com yciou.com @@ -107297,7 +107640,6 @@ ycshengquan.com ycsjtjt.com ycsound.com ycsrc.com -ycsrcsc.com ycsthqrmyy.com ycsystem.com ycsyy.com @@ -107337,6 +107679,7 @@ yczjkfyy.com yczk.org yczpw.com yczxyy.com +yczy5.com yczyc.com yd-data.com yd-jxt.com @@ -107346,6 +107689,7 @@ yd166.com yd43s2q51b.com ydalison.com ydamc.com +ydayc.com ydbimg.com ydbmed.com ydbox.com @@ -107396,7 +107740,6 @@ ydtad.com ydtbl.com ydtnotary.com ydtqd.com -ydu6.com yduav.com ydvip00aa.com ydvip00ab.com @@ -107456,6 +107799,7 @@ yebaike.com yebangyu.org yebaojiasu.com yeboyzq.com +yebrewing.com yecao.fun yecao.net yecaoyun.com @@ -107581,7 +107925,6 @@ yesoulchina.com yespearl.com yespik.com yespmp.com -yespublishers.com yestar.com yestar1992.com yestarcorp.com @@ -107650,7 +107993,6 @@ yfcloud.io yfcloud.work yfd.xyz yfdc.net -yfdlsb.com yfdns.net yfds168.com yfdts.net @@ -107703,6 +108045,7 @@ yfmhw.com yfp2p.net yfpayment.com yfsafety.com +yfsail.net yfscdn.com yfscdn.net yfservice.com @@ -107729,6 +108072,7 @@ yg1997.com yg84.com yg8898.com ygbid.com +ygbx.com ygc711iq.com ygcgfw.com ygcloud.com @@ -107736,7 +108080,6 @@ ygcooler.com ygct.com ygdatabase.com ygdl.com -ygdy8.cc ygdy8.net yge.me ygeer.com @@ -107751,8 +108094,6 @@ yginsight.com ygjctech.com ygjj.com ygjoy.com -ygjzsb.com -yglm.mobi ygmsy.com ygread.com ygrtt.com @@ -107921,6 +108262,7 @@ yicaiglobal.com yicaihua.com yicamp.com yicang.com +yicanggongyi.com yicbo.com yice11.com yicha-yc.com @@ -107961,7 +108303,6 @@ yidagas.com yidahospital.com yidai.com yidaidai.com -yidainvestment.com yidaointernational.com yidaomall.com yidaomobi.com @@ -108005,7 +108346,6 @@ yiduir.com yidulive.com yidumen.com yidun.com -yiduogroup.com yiduoli.com yiduoxinya.com yiduqiang.com @@ -108102,7 +108442,6 @@ yihuimg.com yihuiyun.net yihun.com yihuohao.com -yihuoke98.com yiibai.com yiichina.com yiigle.com @@ -108209,7 +108548,6 @@ yimaoip.com yimapay.com yimashijie.com yimeichu.com -yimeicloud.com yimeidaodi.com yimeihui360.com yimeima.com @@ -108343,7 +108681,6 @@ yingriliuti.com yingrongit.com yingshe.com yingsheng.com -yingshevip.com yingshi-ai.com yingshiyou.com yingso.fun @@ -108351,10 +108688,10 @@ yingsoft.com yingsoo.com yingsun.net yingsx.com +yingt.asia yingt.fun yingtai.com yingtaigroup.com -yingtaoai.com yingtaorelian.com yingtaosiyue.com yingtaoyun.com @@ -108388,7 +108725,6 @@ yingyongso.com yingyu.com yingyuchat.com yingyudengji.com -yingyuecl.com yingyuehe.com yingyushijie.com yingyuxiaoshuo.com @@ -108396,9 +108732,7 @@ yingzaocms.com yingzhongshare.com yingzi01.com yingzi02.com -yingzi8hao.net yingzicms.com -yingzifangdian.com yingzt.com yinhai.com yinhang123.net @@ -108427,6 +108761,7 @@ yinjispace.com yinka.co yinlimedia.com yinlingshuyuan.com +yinlvaa.com yinmakeji.com yinmaojx.com yinmishu.com @@ -108532,7 +108867,6 @@ yiqikan8.com yiqike.com yiqiming88.com yiqimob.com -yiqin.com yiqingyuan.com yiqinzi.com yiqioffice.com @@ -108553,7 +108887,6 @@ yiqixiegushi.com yiqiyoo.com yiqiyou.com yiquan-keji.com -yiquanseo.com yiquhai.com yiqujing.com yiquxapp.com @@ -108565,6 +108898,7 @@ yirentong.com yirenwuye.com yirenzhushou.com yirenzuji.com +yirgalab.com yirlir.com yirong.com yiruan.info @@ -108668,7 +109002,6 @@ yiwanzhushou.com yiwealth.com yiweb.com yiweiads.com -yiweilaogumin.com yiweishi.com yiwenyida.com yiwenyizhi.com @@ -108830,7 +109163,6 @@ yjcp.com yjctrip.com yjdatasos.com yjdzm.com -yjfl.net yjfs8.com yjfy.com yjgf.com @@ -108852,7 +109184,6 @@ yjlin4.com yjlink.cc yjliquan.com yjllq.com -yjluyun.com yjmuseum.com yjopen.com yjpal.com @@ -108883,6 +109214,7 @@ yjsops.com yjsry.com yjssishisi.com yjsswjt.com +yjswsht.xyz yjtiyu.com yjtvw.com yjtw.com @@ -108995,7 +109327,6 @@ ylfd.net ylfx.com ylgaoshan.com ylgcyy.com -ylgj.com ylgjsty.com ylgnyy.com ylgs96332.com @@ -109045,7 +109376,6 @@ yloo.org ylprinter.com ylq.com ylqk88.com -ylqxgs.com ylqyyr.com ylr114.com ylrb.com @@ -109140,7 +109470,6 @@ ymfund.com ymg.cc ymgk.com ymgkimg.com -ymhfkj.com ymhfp.com ymhudong.com ymhui.com @@ -109183,13 +109512,12 @@ ymxinxi.com ymxlass.com ymyun.com ymyxsw.com -ymyxzz.com ymzer.com ymzsl.com +ymzxconf.com ymzy.games yn-tcm-hospital.com yn-tobacco.com -yn12396.com yn2007.com yn58.com ynaec.com @@ -109231,7 +109559,6 @@ yni84.com ynian.com ynjgy.com ynjiaoyu.net -ynjk120.com ynjkeji.com ynjkjy.com ynjlgroup.com @@ -109242,7 +109569,6 @@ ynkcfc.com ynkgyy.com ynkm88.com ynkmit.com -ynkmjj.com ynlygf.com ynmbwl.com ynmcyl.com @@ -109327,13 +109653,11 @@ yobochina.com yobolove.com yocajr.com yocdev.com -yocng.com yocofs.com yocopi.com yocvn.com yocyxc.com yodak.net -yodakgroup.com yodao.com yodao.info yodao.net @@ -109365,7 +109689,6 @@ yoho.org yohoboys.com yohobuy.com yohogirls.com -yoholm.com yohomars.com yohoshow.com yohui.com @@ -109548,6 +109871,7 @@ youbbs.org youbeichefu.com youbian.com youbibi.com +youbike.me youbikecn.com youbohe.com youboy.com @@ -109568,7 +109892,6 @@ youcloud.com youcsky.com youda.pro youda8.com -youdaili.net youdajx.com youdao.com youdaocaifu.com @@ -109677,6 +110000,8 @@ youlanw.com youlechuhai.com youlecn.com youleliwu.com +youlesp.com +youletd.com youleyou.com youlian.fun youlianfuwu.com @@ -109718,7 +110043,6 @@ youmobi.com youneedcrydear.com youneng.com younet.com -younfor.com young40.com youngem.com youngerfeel.com @@ -109771,7 +110095,6 @@ youren5.com yourjia.com yourongsj.com yourtion.com -yourtravelinswitzerland.com yourtravelyourchoice.com youruitech.com yousc.com @@ -109789,7 +110112,6 @@ yousheyoujia.com youshibeike.com youshifu.com youshikoudai.com -youshionline.com youshixiu.com youshop01.com youshop02.com @@ -109818,7 +110140,6 @@ youtoupiao.com youtrans.net youtu.com youtube-dubbing.com -youtuple.com youtuzi.com youtx.com youuav.com @@ -110020,12 +110341,10 @@ yozsc.com yozyn.com yp001.com yp007.net -yp900.com ypank.com ypattern.com ypc-fc.com ypfph.com -ypgjrz.com ypgyyq.com yph-shop.com yphbuy.com @@ -110062,7 +110381,6 @@ yqbank.com yqbdt.com yqbimg.com yqbimg.net -yqbus.net yqchjd.com yqcn.com yqcsbqxj.com @@ -110134,7 +110452,6 @@ yrhct.com yrmpay.com yrobot.com yrom.net -yrsm.net yrtgame.com yrtyyds.com yruan.com @@ -110149,7 +110466,6 @@ yryz.net yrz.name yrzjw.com ys-fj.com -ys-spt.com ys.cc ys001.com ys0431.net @@ -110170,7 +110486,6 @@ ysbopet.com ysbz168.com yscase.com ysch.cc -yschn.com ysclass.net yscq.com yscro.com @@ -110201,7 +110516,6 @@ ysirv.com ysjcyxgs.com ysjdaijia.com ysjf.com -ysjgames.com ysjianzhan.com ysjkbk.com yskcsj.com @@ -110261,7 +110575,7 @@ yswyyds.com ysx9999.com ysxapp.com ysxs8.com -ysxsw86.cc +ysxswz.com ysxts.com ysxyhtz.com ysxzls.com @@ -110590,7 +110904,6 @@ yuejikeng.com yuejiw.com yuejob.com yuejuanbao.com -yuejuly.com yuejuwang.com yuekenet.com yuekeyun.com @@ -110696,7 +111009,6 @@ yufenjiameng.com yuflc.com yufuid.com yufuid.net -yugaopian.com yugasun.com yugenmed.com yugew.com @@ -110715,7 +111027,6 @@ yuhaozhixing.com yuheii.com yuhein.com yuhelaw.com -yuheng.tech yuhengcheng.com yuhocare.com yuhongchem.com @@ -110731,7 +111042,6 @@ yuhuijob.com yuhx.com yui06161shga.com yui06171shga.com -yuiapi.com yujia.com yujiahui.com yujianpay.com @@ -110830,6 +111140,7 @@ yunalias.com yunannet.com yunaq.com yunarm.com +yunassess.com yunaw.com yunba.io yunban.com @@ -110867,7 +111178,6 @@ yuncitys.com yuncloudauth.com yuncname.com yuncode.net -yunconfig.com yund.tech yunda56.com yundaex.com @@ -110877,7 +111187,6 @@ yundalog.com yundaltl.com yundangan.com yundangnet.com -yundaocaishui.com yundaomen.com yundasys.com yunde.net @@ -110975,6 +111284,7 @@ yunify.com yunio.com yunip.com yunipo.com +yunji.work yunji.xin yunjian.com yunjian.net @@ -111031,6 +111341,7 @@ yunlinghang.com yunlitz.com yunlsp.com yunlucn.cc +yunma99.com yunmai.com yunmayi.com yunmc.vip @@ -111108,11 +111419,12 @@ yunshow.com yunshtk.com yunshunxx.com yunshuren.com -yunsiwang.com +yunshuwh.com yunsiya.com yunsom.com yunsong.com yunsou168.com +yunsousou.com yunssl.com yunsuan.org yunsuanzi.com @@ -111139,6 +111451,8 @@ yuntu.io yuntue.com yuntuiweishang.com yuntuoguan.cc +yuntus.com +yuntus.net yuntust.com yuntuys.com yuntyfilter.com @@ -111159,7 +111473,6 @@ yunxi.tv yunxi10.com yunxiacn.com yunxianchang.com -yunxiangschool.com yunxiao.com yunxin123.com yunxin163.com @@ -111179,6 +111492,7 @@ yunxinsvr.com yunxinvcloud.com yunxinvideo.com yunxiren.com +yunxish.com yunxiu.com yunxs.com yunxuetang.com @@ -111261,7 +111575,6 @@ yushanfang.com yushangmao.com yushengny.com yushengtang.com -yushenjinrong.com yushexuetang.com yushin88.com yushiyan.net @@ -111320,7 +111633,6 @@ yuxiaor.com yuxiaotuo.com yuxicorrosion.com yuxinews.com -yuxingqiu.com yuxinoulogistics.com yuxipark.com yuxitech.com @@ -111369,6 +111681,7 @@ yuzmshanghai.org yuzone.net yuzua.com yuzundaojia.com +yvrdream.com yvv.in yvzfgigpiwmofux.com yw11.com @@ -111554,6 +111867,7 @@ yxrcw.com yxrj.com yxsc33.com yxsea.com +yxsgame.com yxsj.net yxsos.com yxss.com @@ -111582,14 +111896,15 @@ yxz.me yxzb.tv yxzcemet.com yxzd.info +yxzggame.com yxzhi.com yxzoo.com yxzp.net +yxzq.com yxzu.com yxzxgy.com yxzzd.com yy.com -yy07.com yy11.com yy138.com yy1690.com @@ -111634,7 +111949,6 @@ yyestar.com yyets.com yyfax.com yyfdcw.com -yyfdjn.com yyfqm.com yyfsb.com yyfunning.com @@ -111699,7 +112013,6 @@ yytiflytek.com yytingli.com yyuap.com yywd.com -yywiki.com yywlsj.com yywords.com yyws.net @@ -111749,7 +112062,6 @@ yyzy-play.vip yyzyytj.com yyzzqk.com yyzzsem.com -yz-bbs.com yz-iot.com yz-kjjt.com yz-li.com @@ -111772,11 +112084,11 @@ yzbpro.com yzbqzx.net yzbsytl.com yzceg.com -yzchangyun.com yzckjt.com yzcn.net yzcnet.com yzcrown.net +yzcsoft.com yzcxtz.com yzcxx.com yzcyj.net @@ -111934,12 +112246,12 @@ yzzxjyjt.com yzzxxz.com yzzy-online.com yzzy20-play.com +yzzy29-play.com yzzyimages.com z-bank.com z-henergy.com z-inn.com z.ai -z.biz z.wiki z0.cc z01.com @@ -111991,7 +112303,6 @@ zaeke.com zaepi.com zafinsvc.com zafk120.com -zagrebdental.com zahtb.com zahui.fan zahuishi.com @@ -112089,7 +112400,6 @@ zaoqiangzhiheng.com zaowandushu.com zaowuyun.com zaoyang.org -zaoys.com zaozuo.com zapak.com zapyamobile.com @@ -112136,6 +112446,7 @@ zbca.com zbcars.com zbchem.com zbcyrq.com +zbczce.com zbdedu.com zbdzy.com zbfilm.com @@ -112229,7 +112540,6 @@ zbzw.la zc-gs100.com zc-ha.com zc-it.com -zc-sfy.com zc0317.com zc173.com zc532.com @@ -112470,7 +112780,6 @@ zelinai.com zemismart.com zen-est.com zencheer.com -zencre.net zengdefei.com zengenti.com zengjunpeng.com @@ -112535,7 +112844,6 @@ zeyouquan.com zeyu99.com zeyuan.shop zeyuan123.com -zeze.com zezhengcnc.com zezhenwangluo.com zezhuanggd.com @@ -112598,7 +112906,6 @@ zgbaili.cc zgbenrun.com zgbfw.com zgbghdw.com -zgbjyx.com zgbk.com zgblh.com zgbmcl.com @@ -112608,7 +112915,6 @@ zgbszf.com zgby114.com zgbywl.com zgc-bigdata.org -zgc-dsa.org zgc261.com zgcbank.com zgcbb.com @@ -112677,7 +112983,6 @@ zgglyun.com zggongkao.com zggqzp.com zggroups.com -zggsfc.com zggtxhw.com zggua.com zggwy.com @@ -112753,7 +113058,6 @@ zglb.org zglcn.net zglcxyxzz.com zglcyx.com -zglfw.com zglibrary.com zglipin.com zgljl2012.com @@ -112787,6 +113091,7 @@ zgnt.net zgnwp.com zgny.com zgnyw.net +zgnzw.xyz zgoa.net zgong.com zgoog.com @@ -112820,10 +113125,8 @@ zgsclp.com zgsd.net zgsepri.com zgserver.com -zgsglp.com zgshenglu.com zgshgs.com -zgshifu.com zgshige.com zgshige.net zgshjj.com @@ -112858,7 +113161,6 @@ zgszglfh.com zgszjs.com zgtaining.com zgtcc.com -zgtcpt.shop zgtcyswh.com zgtghccl.com zgtianlong.com @@ -112879,9 +113181,7 @@ zgvmxma.com zgw.com zgweimeng.com zgwhfe.com -zgwhw.com zgwlwx.com -zgwss.com zgwstxc.com zgwt.co zgwxj.com @@ -112970,7 +113270,6 @@ zh-longshi.com zh-piao.com zh10.com zh189.com -zh30.com zh818.com zh996.com zha.co @@ -112990,6 +113289,7 @@ zhainanfulishe.com zhainanhuayuan.com zhaipan.vip zhairport.com +zhaitushe.com zhaiwuu.com zhaixiaoniu.com zhaixue.cc @@ -112999,7 +113299,6 @@ zhanbanji.com zhanbuba.com zhanchenyouqi.com zhanchily.com -zhandao.net zhandaren.com zhandian88.com zhandodo.com @@ -113065,6 +113364,7 @@ zhangu365.com zhangwei.li zhangwenli.com zhangwojumian.com +zhangxiaochun.com zhangxin.ltd zhangxinhulian.com zhangxinkeji.com @@ -113120,7 +113420,6 @@ zhansu.com zhantuo.com zhanuan.com zhanxingfang.com -zhanyaxi.com zhanyouyun.com zhanyugroup.com zhanzhanbao.com @@ -113214,7 +113513,6 @@ zhaotaicaiyin.com zhaotu.com zhaouc.com zhaouc.net -zhaowenshen.com zhaowenyu.com zhaowofanyi.com zhaoxi.org @@ -113402,7 +113700,6 @@ zhengzhaopai.com zhengzhenxx.com zhengzhou42195.com zhengzhoubus.com -zhengzhoulvxing.com zhengzhoutools.com zhengzhoutx.com zhengzhouyunmei.com @@ -113440,6 +113737,7 @@ zhenstyle.com zhensuo.tv zhentaigroup.com zhentan.la +zhentoo.com zhenweiexpo.com zhenwu.com zhenxiad.com @@ -113455,7 +113753,6 @@ zhenyouliao.com zhenyoumei.com zhenyuansoft.com zhenyunpan.com -zhenzhi365.com zhenzhuchanfu.com zheshenet.com zhetao.com @@ -113549,6 +113846,7 @@ zhidejian.com zhidemai.com zhidesoft.com zhidi66.com +zhidianfan.com zhidianlife.com zhidieyun.com zhidiy.com @@ -113693,7 +113991,6 @@ zhimeijiankang.com zhimengdaren.com zhimg.com zhimi.com -zhimijia.com zhiminglawyer.com zhimodesign.com zhimoe.com @@ -113719,6 +114016,7 @@ zhipianbang.vip zhipin.com zhipingke.com zhipuzi.com +zhiqi.info zhiqiang.org zhiqiapp.com zhiqicms.com @@ -113773,7 +114071,6 @@ zhitongpm.com zhitouxing.com zhituad.com zhitui.com -zhituokeji.com zhitusoft.com zhituzhilian.com zhivisaworld.com @@ -113800,12 +114097,13 @@ zhixin2019.com zhixingapp.com zhixingit.com zhixingjj88.com +zhixingyunke.com zhixiu.net zhixuan.com zhixue.com zhixue.org zhixueyun.com -zhixunsy.com +zhixunfang.com zhiyakeji.com zhiyanxuan.com zhiyazz.com @@ -113921,7 +114219,6 @@ zhmzqi.com zhnbj.com zhnfad.com zhnsyh.com -zhocm.com zhong-yao.net zhong.com zhong100.com @@ -114041,6 +114338,7 @@ zhonglianguanwei.com zhongliangxny.com zhonglianhuashu.com zhonglianhuaxin.com +zhonglianyx.com zhongliusp.com zhongliuyiyuan.com zhonglue-consulting.com @@ -114069,7 +114367,6 @@ zhongqingshao.com zhongqixin360.com zhongran.org zhongrenbang.cc -zhongronglianhe.com zhongruihuacheng.com zhongruitech.com zhongruiyaoye.com @@ -114102,7 +114399,6 @@ zhongtou.co zhongtuiguang.com zhongtuirong.com zhongtuobang.com -zhongtuocn.com zhongtusy.com zhongwang.com zhongwangsc.com @@ -114213,7 +114509,6 @@ zhoulingjie.com zhoupu123.com zhoupudata.com zhouql.vip -zhoutoucg.com zhouweitong.site zhouxianghb.com zhouxiaoben.info @@ -114221,7 +114516,6 @@ zhouxingchi.info zhouxuanyu.com zhouyi.biz zhouyi.cc -zhouyi.org zhouyi114.com zhouyiapi.com zhouyou360.com @@ -114325,7 +114619,6 @@ zhubajie.la zhubangbang.com zhubao.com zhubao668.com -zhubaopub.com zhubaowo.com zhubian.com zhubiaoju.com @@ -114449,6 +114742,7 @@ zhunbai.com zhunc.vip zhundao.net zhundaoyun.com +zhuneicdn.com zhuneijs.com zhuniangjia.com zhuniu.com @@ -114485,7 +114779,6 @@ zhuoshixiong.com zhuotianchike.com zhuotingwl.com zhuoxun68.com -zhuoxunongye.com zhuoyachina.com zhuoyi.com zhuoyigame.com @@ -114498,9 +114791,9 @@ zhuoyoutech.com zhuoyue78.com zhuoyuechenxing.com zhuoyuegame.com +zhuoyuegame.net zhuoyuesuoxue.com zhuoyuezhongxue.com -zhuoyunkang.com zhuozhan.com zhuozhengsoft.com zhuozhoufangchan.com @@ -114539,7 +114832,6 @@ zhuxuezi.com zhuye.kim zhuye.xyz zhuye123.com -zhuyeshouhushen.com zhuyili.org zhuyitai.com zhuyst.cc @@ -114594,13 +114886,11 @@ zhyfkj.com zhyg.org zhyi828.com zhyingxiao.com -zhyjmpwh.com zhylwx.vip zhylyy.com zhyouliang.com zhyourun.com zhysdxl.com -zhyw.net zhyymall.com zhyyz.com zhz.com @@ -114952,7 +115242,6 @@ zjchuguo.com zjchunhui.com zjcio.org zjcjjt.com -zjcjwh.com zjckw.org zjcloud.com zjcnbank.com @@ -115140,7 +115429,6 @@ zjjinzi.com zjjizhi.com zjjjtec.com zjjky.com -zjjlfny.com zjjlvyou8264.com zjjm.net zjjmtl.com @@ -115161,6 +115449,7 @@ zjjtwxpgs.com zjjubao.com zjjudong.com zjjxjt.com +zjjxsoft.com zjjy.com zjjy.net zjjytyt.com @@ -115381,12 +115670,10 @@ zjtp.com zjtree.com zjts.com zjtxedu.org -zjtxrc.com zjtyphoon.com zjtzcx.com zjtzedu.com zjtzwater.com -zju1.com zju88.org zjubh.com zjuers.com @@ -115453,7 +115740,6 @@ zjxzgrd.com zjyanxing.com zjyari.com zjycpx.com -zjydt.com zjyfyxzz.com zjyhjsjt.com zjyhqy.com @@ -115468,7 +115754,6 @@ zjyonder.com zjyoutian.com zjyq.cc zjysgroup.com -zjystec.com zjytxl.com zjyxzzs.com zjyyc.com @@ -115529,7 +115814,6 @@ zkdt.net zke999.com zkecopro.com zkedrive.com -zkeys.com zkgenergy.com zkh.com zkh360.com @@ -115604,7 +115888,6 @@ zlcool.com zldatas.com zldq.org zle.com -zleosearch.com zlf.co zlfedu.com zlfind.com @@ -115668,7 +115951,6 @@ zly169.com zlygjzx.com zlygu.com zlysgl.com -zlyzs.com zlzlzsl.com zlzscq.com zlzt.com @@ -115699,9 +115981,7 @@ zmdfdc.com zmdsbus.com zmdsjob.com zmdwater.com -zmdxy.com zmdyzkgjt.com -zmdyzyey.com zmdz.com zmeetb.com zmeng.cc @@ -115720,7 +116000,6 @@ zmkmex.com zmlearn.com zmmek.com zmmio.com -zmmoo.com zmn888.com zmndjm.com zmnedu.com @@ -115737,7 +116016,6 @@ zmren.com zmrenwu.com zmsq.com zmssh.com -zmt.me zmtc.com zmtpc.com zmtquan.com @@ -115751,6 +116029,7 @@ zmxiu.com zmxph.com zmye5vly.com zmyui.com +zmyyc.com zmz001.com zmz002.com zmz003.com @@ -115771,6 +116050,7 @@ zncmjt.com znczz.com zndata.com zndlkj.com +zndls.com zndns.com znds.com znds.net @@ -115778,7 +116058,6 @@ zndsbbs.com zndsrom.com zndstec.com znelc.com -znfcwf.com znfit.com zngm.com zngue.com @@ -115823,6 +116102,8 @@ znxhd.com znxk.net znyp.com znypjy.com +znzcompass.com +znzcompass.net znzmo.com znzncn.com znznet.net @@ -115907,8 +116188,6 @@ zoocer.com zoocoffee.com zooelab.com zoofon.com -zoogooy.com -zooioo.com zookingsoft.com zookparts.com zoolnasm.com @@ -115941,7 +116220,6 @@ zou.la zouaw.com zoubiao.com zoucheng.cc -zoucheng521.com zoucz.com zoues.com zouhong365.com @@ -115993,6 +116271,7 @@ zpm.so zpmc.com zpmg.com zpparts.com +zppzo.com zprc.cc zpstar.com zpt966033.com @@ -116009,7 +116288,6 @@ zq6.com zqagr.com zqaqxh.com zqase.com -zqbe.net zqbubi.xyz zqbykj.com zqcaf.com @@ -116075,7 +116353,6 @@ zrj96.com zrkjy.com zrlyyy.com zrmm.com -zrmsv7.com zrpta.com zrpwxgp.com zrtechnology.com @@ -116141,7 +116418,6 @@ zseoo.com zsex.ltd zsezt.com zsfund.com -zsfyedu.com zsfzjs.com zsg6.com zsgai.com @@ -116161,13 +116437,11 @@ zshgsoft.com zshhjt.com zshield.net zshl.com -zshlife.com zshnb.com zshpldbz.com zshsoft.com zshszy.com zshtys888.com -zshuoshao.online zshuoshao.store zshuoshao.tech zshypr.com @@ -116311,8 +116585,10 @@ ztlycm.com ztmao.com ztmvip.com ztn.com +ztna-dingtalk.com ztnews.net ztno.com +ztnwork.com ztny188.com zto.com zto.net @@ -116366,7 +116642,6 @@ zuadr.com zuan-cheng.com zuan88.com zuanke8.com -zuanlo.com zuanqianyi.com zuanshi.com zuanshitoupiao.com @@ -116404,6 +116679,7 @@ zuhuanhao.com zui.com zui5.com zui88.com +zuiaixs.net zuiben.com zuibook.com zuicool.com @@ -116451,6 +116727,7 @@ zulijian.com zulin.com zulinbao.com zulinks.com +zulllv.com zulong.com zulongacmall.com zulongtea.com @@ -116521,7 +116798,6 @@ zuoyebao.net zuoyehezi.com zuoyesou.com zuoyou-sofa.com -zuoyu120.com zuozu.net zuozuowang.net zupig.com @@ -116557,6 +116833,10 @@ zvstapp.com zvsts.com zvv.me zvvxsco.com +zw-tencentclb.cloud +zw-tencentclb.com +zw-tencentclb.net +zw-tencentclb.work zw110.com zw3dp.com zw69.com @@ -116659,9 +116939,11 @@ zxdyw.com zxerp.com zxfw888.com zxfwgj.com +zxgcloud.com zxgj56.com zxgongshui.com zxgroup.com +zxgstock.com zxgzs.com zxgzw.com zxhgroup.com @@ -116765,7 +117047,6 @@ zyan.cc zyan456.com zyanzn.com zyark.com -zyauct.com zyautoe.com zybang.com zybaoan.com @@ -116782,7 +117063,6 @@ zyccst.com zycits.com zycitscn.com zycjcrz.org -zycmfw.com zycmmt.com zyctd.com zycultura.com @@ -116887,7 +117167,6 @@ zyszyx.com zyt8.com zytang.net zytm913.com -zytuozhan.com zyucan.com zyue.com zyun.vip @@ -116930,7 +117209,6 @@ zz361.com zz597.com zz618.com zz6789.com -zz8888bb2222.com zz8j.com zz91.com zz96269.com @@ -116945,7 +117223,6 @@ zzboyou.com zzbs.org zzbtool.com zzbtv.com -zzbzwlkj.com zzc9.com zzccom.com zzccp.com @@ -117057,7 +117334,6 @@ zzsey.com zzsf.com zzsggzy.com zzsgjj.com -zzsh21.com zzshe.com zzsi.com zzsiji.com @@ -117116,7 +117392,6 @@ zzy2001.com zzyan360.com zzyauto.com zzycpa.com -zzydb.com zzyecc.com zzyedu.org zzyfdj.com diff --git a/small/luci-app-passwall/root/usr/share/passwall/rules/chnroute b/small/luci-app-passwall/root/usr/share/passwall/rules/chnroute index a111f3db49..1cbb565120 100644 --- a/small/luci-app-passwall/root/usr/share/passwall/rules/chnroute +++ b/small/luci-app-passwall/root/usr/share/passwall/rules/chnroute @@ -74,14 +74,14 @@ 101.237.40.0/24 101.240.0.0/14 101.245.0.0/22 -101.245.12.0/22 -101.245.128.0/22 -101.245.136.0/22 +101.245.128.0/20 101.245.144.0/22 +101.245.152.0/21 101.245.16.0/21 +101.245.160.0/20 101.245.32.0/19 101.245.64.0/18 -101.245.8.0/23 +101.245.8.0/21 101.246.172.0/22 101.246.176.0/20 101.247.0.0/18 @@ -184,7 +184,8 @@ 103.116.120.0/23 103.116.123.0/24 103.116.138.0/23 -103.116.76.0/22 +103.116.76.0/23 +103.116.78.0/24 103.116.92.0/22 103.117.16.0/22 103.117.220.0/22 @@ -226,7 +227,9 @@ 103.134.136.0/22 103.135.100.0/24 103.135.160.0/22 -103.135.192.0/21 +103.135.192.0/23 +103.135.195.0/24 +103.135.196.0/22 103.135.236.0/24 103.137.60.0/24 103.138.156.0/23 @@ -271,10 +274,8 @@ 103.151.179.0/24 103.151.216.0/23 103.151.228.0/23 -103.151.5.0/24 103.152.170.0/23 103.152.186.0/23 -103.152.190.0/23 103.152.224.0/24 103.152.28.0/23 103.152.56.0/23 @@ -286,12 +287,10 @@ 103.154.30.0/23 103.154.41.0/24 103.155.110.0/23 -103.155.120.0/23 103.155.76.0/23 103.156.174.0/23 103.156.186.0/23 103.156.68.0/23 -103.157.138.0/23 103.158.0.0/23 103.159.124.0/23 103.16.124.0/22 @@ -318,7 +317,6 @@ 103.177.28.0/23 103.179.78.0/23 103.180.108.0/23 -103.181.164.0/23 103.181.234.0/24 103.183.122.0/23 103.183.124.0/23 @@ -352,7 +350,7 @@ 103.197.0.0/22 103.197.228.0/22 103.198.124.0/22 -103.198.180.0/22 +103.198.180.0/23 103.198.216.0/21 103.198.224.0/20 103.198.244.0/22 @@ -377,7 +375,8 @@ 103.202.96.0/20 103.203.140.0/22 103.203.216.0/22 -103.203.56.0/22 +103.203.56.0/23 +103.203.59.0/24 103.203.96.0/22 103.204.72.0/22 103.205.188.0/22 @@ -393,7 +392,7 @@ 103.21.140.0/22 103.21.176.0/22 103.210.160.0/22 -103.210.171.0/24 +103.210.170.0/23 103.211.220.0/22 103.211.44.0/22 103.212.1.0/24 @@ -404,9 +403,8 @@ 103.212.48.0/23 103.213.132.0/22 103.213.160.0/19 -103.213.48.0/23 -103.213.50.0/24 -103.213.62.0/23 +103.213.48.0/21 +103.213.60.0/22 103.213.64.0/19 103.213.96.0/22 103.214.48.0/22 @@ -474,7 +472,6 @@ 103.232.144.0/22 103.232.166.0/23 103.233.128.0/22 -103.233.136.0/23 103.233.138.0/24 103.233.162.0/23 103.233.4.0/22 @@ -503,7 +500,6 @@ 103.237.28.0/23 103.237.8.0/22 103.238.0.0/21 -103.238.130.0/24 103.238.132.0/22 103.238.144.0/22 103.238.16.0/22 @@ -517,7 +513,6 @@ 103.238.98.0/24 103.239.152.0/22 103.239.184.0/23 -103.239.187.0/24 103.239.192.0/22 103.239.204.0/22 103.239.224.0/22 @@ -536,12 +531,9 @@ 103.242.130.0/24 103.242.168.0/23 103.242.172.0/22 -103.242.200.0/24 -103.242.202.0/24 103.242.212.0/22 103.243.136.0/22 103.243.252.0/22 -103.244.164.0/22 103.244.232.0/22 103.244.59.0/24 103.244.64.0/22 @@ -568,7 +560,7 @@ 103.250.32.0/22 103.251.124.0/22 103.251.160.0/22 -103.251.204.0/23 +103.251.204.0/24 103.251.207.0/24 103.251.240.0/22 103.251.32.0/22 @@ -638,7 +630,7 @@ 103.38.232.0/22 103.38.252.0/23 103.38.40.0/22 -103.38.76.0/24 +103.38.76.0/22 103.38.84.0/22 103.38.92.0/23 103.39.200.0/21 @@ -672,7 +664,9 @@ 103.44.240.0/20 103.44.56.0/22 103.44.80.0/22 +103.45.128.0/19 103.45.160.0/22 +103.45.168.0/24 103.45.172.0/22 103.45.176.0/20 103.45.248.0/22 @@ -692,7 +686,6 @@ 103.49.196.0/24 103.49.198.0/23 103.5.192.0/22 -103.50.38.0/24 103.51.62.0/23 103.52.100.0/22 103.52.104.0/23 @@ -709,7 +702,6 @@ 103.56.104.0/22 103.56.152.0/22 103.56.184.0/22 -103.56.32.0/22 103.56.60.0/22 103.56.76.0/22 103.57.12.0/22 @@ -719,8 +711,8 @@ 103.59.124.0/22 103.59.148.0/22 103.59.164.0/22 +103.59.168.0/23 103.6.220.0/22 -103.6.228.0/24 103.60.164.0/22 103.60.228.0/23 103.60.236.0/22 @@ -753,6 +745,7 @@ 103.72.113.0/24 103.72.120.0/22 103.72.172.0/24 +103.72.224.0/24 103.73.116.0/22 103.73.136.0/21 103.73.144.0/22 @@ -774,7 +767,6 @@ 103.78.126.0/23 103.78.228.0/22 103.78.60.0/22 -103.79.120.0/22 103.79.200.0/22 103.79.228.0/24 103.79.24.0/22 @@ -1026,6 +1018,7 @@ 111.222.0.0/16 111.223.12.0/22 111.224.0.0/14 +111.228.0.0/18 111.229.0.0/16 111.230.0.0/15 111.235.156.0/22 @@ -1096,11 +1089,7 @@ 113.45.128.0/17 113.45.64.0/19 113.45.96.0/22 -113.46.0.0/17 -113.46.128.0/18 -113.46.192.0/19 -113.46.224.0/20 -113.46.240.0/21 +113.46.0.0/16 113.47.0.0/18 113.47.104.0/22 113.47.110.0/24 @@ -1174,6 +1163,7 @@ 114.135.0.0/16 114.138.0.0/15 114.141.128.0/18 +114.142.136.0/23 114.196.0.0/15 114.212.0.0/14 114.216.0.0/13 @@ -1221,15 +1211,18 @@ 115.175.0.0/18 115.175.104.0/22 115.175.108.0/23 -115.175.120.0/21 +115.175.110.0/24 +115.175.112.0/20 115.175.128.0/18 115.175.192.0/19 115.175.224.0/20 +115.175.252.0/22 115.175.64.0/19 +115.175.96.0/21 115.182.0.0/15 -115.190.0.0/17 -115.190.128.0/18 -115.190.192.0/20 +115.190.0.0/16 +115.191.0.0/18 +115.191.64.0/20 115.192.0.0/11 115.224.0.0/12 115.24.0.0/14 @@ -1238,7 +1231,7 @@ 115.32.0.0/19 115.32.32.0/21 115.32.56.0/21 -115.32.64.0/20 +115.32.64.0/19 115.44.0.0/14 115.48.0.0/12 115.84.0.0/18 @@ -1305,6 +1298,7 @@ 116.205.0.0/16 116.207.0.0/16 116.208.0.0/14 +116.213.45.0/24 116.214.128.0/22 116.214.132.0/23 116.214.134.0/24 @@ -1326,6 +1320,7 @@ 116.66.36.0/24 116.66.48.0/23 116.66.53.0/24 +116.66.54.0/23 116.66.98.0/24 116.68.136.0/21 116.68.176.0/21 @@ -1385,6 +1380,8 @@ 117.72.16.0/23 117.72.160.0/19 117.72.192.0/19 +117.72.24.0/21 +117.72.240.0/21 117.72.248.0/22 117.72.255.0/24 117.72.32.0/19 @@ -1416,16 +1413,16 @@ 118.126.32.0/19 118.126.64.0/18 118.132.0.0/14 -118.143.198.0/23 -118.143.215.0/24 118.144.0.0/16 118.145.0.0/19 +118.145.112.0/21 118.145.128.0/19 118.145.160.0/21 118.145.176.0/20 118.145.192.0/18 118.145.32.0/20 118.145.64.0/19 +118.145.96.0/20 118.178.0.0/16 118.180.0.0/14 118.184.0.0/22 @@ -1497,8 +1494,8 @@ 118.194.240.0/21 118.194.32.0/19 118.195.0.0/16 -118.196.0.0/18 -118.196.64.0/19 +118.196.0.0/17 +118.196.128.0/19 118.199.0.0/16 118.202.0.0/15 118.212.0.0/15 @@ -1573,7 +1570,6 @@ 119.18.226.0/24 119.18.234.0/24 119.18.236.0/23 -119.18.239.0/24 119.2.128.0/17 119.23.0.0/16 119.233.128.0/17 @@ -1609,7 +1605,6 @@ 119.37.192.0/21 119.37.2.0/24 119.38.0.0/21 -119.38.128.0/18 119.38.192.0/19 119.39.0.0/16 119.4.0.0/14 @@ -1711,7 +1706,10 @@ 120.136.20.0/22 120.192.0.0/10 120.24.0.0/14 -120.31.0.0/16 +120.31.128.0/20 +120.31.144.0/24 +120.31.66.0/23 +120.31.68.0/22 120.32.0.0/12 120.48.0.0/16 120.49.0.0/17 @@ -1927,18 +1925,15 @@ 123.4.0.0/14 123.49.192.0/23 123.49.194.0/24 -123.49.196.0/24 123.49.229.0/24 123.49.232.0/24 -123.49.240.0/22 -123.49.244.0/24 -123.49.246.0/23 +123.49.240.0/21 123.52.0.0/14 123.56.0.0/15 123.58.0.0/19 123.58.160.0/20 -123.58.179.0/24 -123.58.180.0/22 +123.58.180.0/24 +123.58.182.0/23 123.58.184.0/24 123.58.186.0/23 123.58.188.0/22 @@ -2006,9 +2001,10 @@ 124.196.56.0/23 124.196.58.0/24 124.196.66.0/24 +124.196.72.0/24 124.196.77.0/24 124.196.80.0/22 -124.196.84.0/24 +124.196.84.0/23 124.200.0.0/16 124.202.0.0/16 124.203.176.0/20 @@ -2034,7 +2030,6 @@ 124.64.0.0/15 124.66.0.0/17 124.67.0.0/16 -124.68.252.0/23 124.70.0.0/16 124.71.0.0/17 124.71.128.0/18 @@ -2152,7 +2147,6 @@ 140.75.0.0/16 143.14.49.0/24 143.20.147.0/24 -143.20.66.0/24 143.64.0.0/16 144.0.0.0/16 144.12.0.0/16 @@ -2168,7 +2162,6 @@ 144.7.0.0/17 145.14.71.0/24 145.14.72.0/22 -145.14.79.0/24 145.14.81.0/24 145.14.82.0/24 145.14.84.0/24 @@ -2203,7 +2196,6 @@ 150.242.80.0/22 150.242.96.0/22 150.255.0.0/16 -151.241.174.0/24 152.104.128.0/17 152.136.0.0/16 153.0.0.0/16 @@ -2218,12 +2210,8 @@ 154.208.144.0/20 154.208.160.0/21 154.208.172.0/23 -154.213.4.0/23 154.218.6.0/23 154.223.168.0/24 -154.223.179.0/24 -154.223.180.0/24 -154.38.104.0/22 154.48.237.0/24 154.72.42.0/24 154.72.44.0/24 @@ -2271,7 +2259,6 @@ 16.2.142.0/23 160.19.208.0/22 160.19.76.0/23 -160.19.82.0/24 160.191.0.0/24 160.20.18.0/23 160.202.152.0/22 @@ -2300,7 +2287,6 @@ 163.177.0.0/16 163.179.0.0/16 163.204.0.0/16 -163.223.173.0/24 163.223.178.0/23 163.228.0.0/16 163.244.246.0/24 @@ -2311,7 +2297,9 @@ 163.53.60.0/22 163.53.88.0/21 163.61.202.0/23 -163.61.214.0/24 +163.61.214.0/23 +165.101.122.0/23 +165.101.70.0/23 166.111.0.0/16 167.139.0.0/16 167.148.46.0/24 @@ -2483,7 +2471,6 @@ 192.144.128.0/17 192.163.11.0/24 192.232.97.0/24 -192.55.46.0/24 193.112.0.0/16 193.119.10.0/23 193.119.12.0/23 @@ -2498,13 +2485,11 @@ 193.119.4.0/24 193.119.6.0/24 193.119.8.0/24 -194.119.13.0/24 -194.119.15.0/24 +193.233.49.0/24 194.127.229.0/24 194.138.202.0/23 194.138.245.0/24 194.15.39.0/24 -195.114.203.0/24 198.208.112.0/23 198.208.17.0/24 198.208.19.0/24 @@ -2580,9 +2565,11 @@ 202.179.240.0/20 202.181.120.0/21 202.181.28.0/24 -202.189.16.0/21 +202.189.16.0/20 202.189.3.0/24 +202.189.32.0/20 202.189.4.0/22 +202.189.48.0/22 202.189.8.0/21 202.192.0.0/12 202.38.128.0/23 @@ -2645,8 +2632,6 @@ 202.91.224.0/20 202.91.240.0/21 202.91.248.0/22 -202.91.36.0/24 -202.91.38.0/24 202.93.252.0/22 202.95.0.0/19 202.96.0.0/13 @@ -2689,7 +2674,6 @@ 203.12.204.0/23 203.12.91.0/24 203.12.93.0/24 -203.12.95.0/24 203.129.10.0/23 203.129.12.0/22 203.129.8.0/24 @@ -2723,9 +2707,12 @@ 203.166.188.0/23 203.166.191.0/24 203.168.0.0/22 +203.168.129.0/24 203.168.16.0/23 203.168.18.0/24 -203.168.8.0/24 +203.168.5.0/24 +203.168.6.0/23 +203.168.8.0/21 203.170.58.0/23 203.174.4.0/24 203.174.7.0/24 @@ -2781,7 +2768,6 @@ 203.215.236.0/24 203.223.21.0/24 203.25.208.0/20 -203.25.48.0/24 203.25.52.0/24 203.3.112.0/21 203.3.80.0/21 @@ -2961,8 +2947,6 @@ 203.99.20.0/22 203.99.24.0/21 204.13.175.0/24 -207.226.153.0/24 -207.226.154.0/24 210.12.0.0/16 210.13.0.0/17 210.13.192.0/19 @@ -3244,12 +3228,17 @@ 218.240.128.0/19 218.240.160.0/21 218.240.168.0/24 -218.240.176.0/21 -218.240.184.0/24 +218.240.176.0/20 +218.241.112.0/22 +218.241.116.0/23 +218.241.118.0/24 +218.241.121.0/24 +218.241.122.0/23 +218.241.124.0/22 218.241.128.0/17 218.241.16.0/21 218.241.24.0/22 -218.241.96.0/19 +218.241.96.0/20 218.242.0.0/16 218.244.0.0/19 218.244.128.0/18 @@ -3322,7 +3311,8 @@ 219.234.80.0/20 219.234.96.0/19 219.235.0.0/20 -219.235.128.0/19 +219.235.128.0/20 +219.235.144.0/21 219.235.192.0/23 219.235.207.0/24 219.235.224.0/22 @@ -3362,6 +3352,7 @@ 220.152.128.0/17 220.154.0.0/20 220.154.128.0/22 +220.154.132.0/23 220.154.140.0/24 220.154.144.0/24 220.154.16.0/22 @@ -3481,7 +3472,6 @@ 222.59.252.0/22 222.64.0.0/11 223.0.1.0/24 -223.0.10.0/24 223.0.12.0/23 223.0.126.0/24 223.0.15.0/24 @@ -3489,7 +3479,7 @@ 223.0.2.0/24 223.0.30.0/24 223.0.40.0/23 -223.0.8.0/23 +223.0.8.0/22 223.128.0.0/15 223.144.0.0/12 223.160.0.0/20 @@ -3549,6 +3539,7 @@ 223.4.0.0/14 223.64.0.0/10 223.8.0.0/13 +23.133.188.0/24 23.161.8.0/24 23.236.111.0/24 27.0.128.0/24 @@ -3574,6 +3565,7 @@ 27.50.128.0/17 27.8.0.0/13 27.98.224.0/19 +27.99.128.0/17 31.56.66.0/24 31.57.10.0/24 31.57.248.0/24 @@ -3626,6 +3618,7 @@ 40.126.64.0/18 40.162.0.0/16 40.72.0.0/15 +42.0.128.0/17 42.100.0.0/14 42.120.0.0/15 42.122.0.0/16 @@ -3696,7 +3689,6 @@ 43.195.0.0/20 43.196.0.0/16 43.224.12.0/22 -43.224.23.0/24 43.224.24.0/22 43.224.240.0/24 43.224.52.0/23 @@ -3714,8 +3706,13 @@ 43.226.128.0/19 43.226.164.0/22 43.226.236.0/22 -43.226.32.0/19 -43.226.64.0/20 +43.226.32.0/20 +43.226.48.0/24 +43.226.50.0/23 +43.226.52.0/22 +43.226.56.0/21 +43.226.64.0/21 +43.226.76.0/22 43.227.104.0/22 43.227.140.0/22 43.227.152.0/21 @@ -3724,7 +3721,10 @@ 43.227.192.0/19 43.227.252.0/22 43.227.56.0/21 -43.227.64.0/21 +43.227.64.0/22 +43.227.69.0/24 +43.227.70.0/23 +43.227.80.0/20 43.228.0.0/19 43.228.116.0/22 43.228.204.0/22 @@ -3761,7 +3761,7 @@ 43.240.200.0/23 43.240.202.0/24 43.240.204.0/22 -43.240.220.0/22 +43.240.216.0/21 43.240.56.0/21 43.240.72.0/22 43.241.16.0/22 @@ -3863,11 +3863,11 @@ 44.30.28.0/24 44.31.216.0/24 44.31.28.0/24 -44.31.42.0/24 44.31.81.0/24 44.31.96.0/24 44.32.143.0/24 44.32.188.0/24 +44.32.191.0/24 44.32.192.0/24 45.112.232.0/22 45.113.20.0/22 @@ -3913,6 +3913,7 @@ 45.127.129.0/24 45.127.131.0/24 45.127.144.0/21 +45.135.149.0/24 45.147.6.0/24 45.151.47.0/24 45.157.88.0/24 @@ -3938,6 +3939,7 @@ 45.250.28.0/22 45.250.32.0/21 45.250.40.0/22 +45.251.0.0/23 45.251.120.0/22 45.251.20.0/22 45.251.8.0/22 @@ -3965,9 +3967,7 @@ 45.254.8.0/23 45.255.152.0/22 45.40.192.0/18 -45.59.106.0/24 45.65.20.0/22 -45.87.101.0/24 45.9.11.0/24 47.112.0.0/13 47.120.0.0/14 @@ -3975,11 +3975,11 @@ 47.96.0.0/12 49.112.0.0/13 49.120.0.0/14 -49.128.203.0/24 49.128.220.0/24 49.128.223.0/24 49.140.0.0/15 49.208.0.0/14 +49.213.62.0/24 49.221.128.0/19 49.221.26.0/23 49.221.64.0/19 @@ -4051,7 +4051,6 @@ 58.240.0.0/12 58.30.0.0/15 58.32.0.0/11 -58.66.192.0/18 58.67.128.0/17 58.68.236.0/24 58.68.247.0/24 @@ -4114,7 +4113,6 @@ 59.152.36.0/24 59.152.38.0/23 59.153.116.0/22 -59.153.136.0/22 59.153.164.0/22 59.153.168.0/24 59.153.32.0/22 @@ -4218,8 +4216,7 @@ 8.148.0.0/19 8.148.128.0/17 8.148.36.0/22 -8.148.40.0/23 -8.148.43.0/24 +8.148.40.0/22 8.148.64.0/18 8.149.0.0/16 8.150.0.0/20 @@ -4229,13 +4226,12 @@ 8.160.0.0/15 8.162.0.0/18 8.163.0.0/16 -8.164.0.0/16 +8.164.0.0/14 81.173.18.0/23 81.173.20.0/22 81.173.28.0/24 81.68.0.0/14 82.156.0.0/15 -84.247.114.0/24 84.54.2.0/23 85.237.205.0/24 94.191.0.0/17 diff --git a/small/luci-app-passwall/root/usr/share/passwall/rules/chnroute6 b/small/luci-app-passwall/root/usr/share/passwall/rules/chnroute6 index 68e936be55..024c19a22d 100644 --- a/small/luci-app-passwall/root/usr/share/passwall/rules/chnroute6 +++ b/small/luci-app-passwall/root/usr/share/passwall/rules/chnroute6 @@ -17,9 +17,9 @@ 2001:dd8:1::/48 2001:dd9::/48 2001:df0:ac40::/48 -2001:df1:61c0::/48 2001:df3:3a80::/48 2001:df3:8b80::/48 +2001:df5:4740::/48 2001:df7:1480::/48 2400:1160::/32 2400:3200::/32 @@ -78,7 +78,7 @@ 2400:9380:9009::/48 2400:9380:900a::/48 2400:9380:9020::/47 -2400:9380:9040::/47 +2400:9380:9040::/48 2400:9380:9050::/47 2400:9380:9060::/48 2400:9380:9071::/48 @@ -104,6 +104,7 @@ 2400:a860:1::/48 2400:a860:2::/47 2400:a860:4::/47 +2400:a860:6::/48 2400:a980::/29 2400:ae00:1981::/48 2400:b200::/32 @@ -115,7 +116,6 @@ 2400:cb80:e40::/44 2400:da00::/32 2400:dd00::/28 -2400:ebc0::/32 2400:ee00::/32 2400:f6e0::/32 2400:f720::/32 @@ -131,7 +131,6 @@ 2401:20::/40 2401:2780::/32 2401:2e00::/32 -2401:33c0::/32 2401:3480:2000::/48 2401:3480:3000::/36 2401:3480::/36 @@ -201,23 +200,38 @@ 2401:de00::/32 2401:ec00::/32 2401:f860:100::/40 +2401:f860:7::/48 2401:f860:86::/47 2401:f860:88::/47 -2401:f860:90::/46 -2401:f860:94::/47 +2401:f860:90::/45 2401:f860:a::/47 2401:f860:c::/46 -2401:f860:f100::/40 2401:f860:f6::/48 +2401:f860:f9::/48 2401:fa00:40::/43 2402:1440::/32 +2402:1460::/32 2402:2000::/32 2402:20e0:f000::/48 2402:3180:8000::/33 2402:3180::/46 2402:3c00::/32 2402:3f80:1400::/40 -2402:4440::/32 +2402:4440:9000::/39 +2402:4440:9200::/48 +2402:4440:9400::/48 +2402:4440:9600::/48 +2402:4440:9800::/48 +2402:4440:9810::/48 +2402:4440:9900::/48 +2402:4440:9a00::/48 +2402:4440:9b00::/48 +2402:4440:9c00::/48 +2402:4440:9d00::/48 +2402:4440:9e00::/48 +2402:4440:a000::/39 +2402:4440:a800::/46 +2402:4440:a810::/46 2402:4b80::/32 2402:4e00::/32 2402:5e40::/32 @@ -228,9 +242,7 @@ 2402:6fc0::/48 2402:7040::/32 2402:7d80:240::/47 -2402:7d80:6666::/48 2402:7d80:8888::/48 -2402:7d80:9999::/48 2402:7d80::/48 2402:840:d000::/46 2402:840:e000::/46 @@ -296,6 +308,7 @@ 2403:a140:10::/48 2403:a200::/32 2403:ac00::/32 +2403:ad80:101c::/48 2403:ad80:8008::/48 2403:b400::/32 2403:c80::/32 @@ -393,7 +406,6 @@ 2406:52c0::/32 2406:5340:6666::/48 2406:5340:8888::/48 -2406:5ac0::/32 2406:6100::/32 2406:840:8100::/40 2406:840:9000::/44 @@ -402,8 +414,7 @@ 2406:840:9961::/48 2406:840:9962::/47 2406:840:996c::/48 -2406:840:a7fe::/48 -2406:840:a800::/37 +2406:840:c200::/40 2406:840:e080::/44 2406:840:e0cf::/48 2406:840:e0e0::/46 @@ -415,11 +426,12 @@ 2406:840:e230::/44 2406:840:e260::/48 2406:840:e2cf::/48 -2406:840:e600::/45 -2406:840:e608::/46 -2406:840:e621::/48 +2406:840:e600::/46 +2406:840:e604::/47 +2406:840:e606::/48 +2406:840:e60d::/48 +2406:840:e620::/47 2406:840:e666::/47 -2406:840:e720::/44 2406:840:e770::/48 2406:840:e777::/48 2406:840:e80f::/48 @@ -447,15 +459,16 @@ 2406:840:fc80::/42 2406:840:fcc0::/44 2406:840:fcd0::/48 +2406:840:fcf0::/46 +2406:840:fcf4::/47 2406:840:fd40::/42 2406:840:fd80::/44 2406:840:fd9f::/48 2406:840:fda0::/43 2406:840:fdc0::/44 2406:840:fdd1::/48 -2406:840:fde5::/48 -2406:840:fde6::/47 2406:840:fe27::/48 +2406:840:fe60::/44 2406:840:fe90::/46 2406:840:fe94::/48 2406:840:fe96::/47 @@ -473,11 +486,12 @@ 2406:840:fecc::/47 2406:840:fecf::/48 2406:840:fed1::/48 +2406:840:fed6::/48 2406:840:fed8::/48 2406:840:fedb::/48 -2406:840:fedc::/47 +2406:840:fedc::/48 2406:840:fedf::/48 -2406:840:fef0::/48 +2406:840:fef0::/47 2406:840:fef3::/48 2406:840:fef4::/48 2406:840:fef6::/47 @@ -720,7 +734,6 @@ 2408:8406:cc0::/42 2408:8406:d00::/41 2408:8406:d80::/42 -2408:8407:500::/43 2408:8409:100::/41 2408:8409:1800::/40 2408:8409:180::/42 @@ -916,7 +929,7 @@ 2408:842a::/31 2408:842c::/32 2408:842e::/32 -2408:8431::/32 +2408:8430::/31 2408:8434::/30 2408:8438::/31 2408:843c::/30 @@ -1173,8 +1186,10 @@ 240a:420a::/31 240a:4224:9000::/44 240a:4224:a000::/44 +240a:4224:c000::/44 240a:4224:d000::/44 240a:4224:e000::/44 +240a:4225:1000::/44 240a:4230::/31 240a:4242::/31 240a:4280::/26 @@ -1199,14 +1214,15 @@ 240e::/20 2602:2e0:ff::/48 2602:f7ee:ee::/48 +2602:f92a:a471::/48 +2602:f92a:a473::/48 2602:f92a:a478::/48 -2602:f92a:d1ff::/48 2602:f92a:dead::/48 2602:f92a:e100::/44 2602:f93b:400::/38 2602:f9ba:10c::/48 2602:f9ba:a8::/48 -2602:feda:182::/47 +2602:fab0:11::/48 2602:feda:1bf::/48 2602:feda:1d1::/48 2602:feda:1df::/48 @@ -1230,8 +1246,6 @@ 2804:1e48:9002::/48 2a01:f100:100::/48 2a01:f100:1f8::/48 -2a01:ffc7:100::/40 -2a03:5840:126::/48 2a04:3e00:1002::/48 2a04:f580:8010::/47 2a04:f580:8090::/48 @@ -1246,7 +1260,6 @@ 2a04:f580:9060::/48 2a04:f580:9070::/48 2a04:f580:9080::/48 -2a04:f580:9090::/48 2a04:f580:9210::/48 2a04:f580:9212::/47 2a04:f580:9220::/48 @@ -1264,18 +1277,15 @@ 2a06:3603::/32 2a06:3604::/30 2a06:9f81:4600::/43 -2a06:9f81:4640::/44 -2a06:9f81:4660::/44 +2a06:9f81:4620::/44 +2a06:9f81:4640::/43 2a06:a005:1c40::/44 2a06:a005:260::/43 2a06:a005:280::/43 2a06:a005:2a0::/44 2a06:a005:8d0::/44 -2a06:a005:9e0::/44 2a06:a005:a13::/48 -2a06:a005:e9a::/48 2a09:54c6:3000::/36 -2a09:54c6:6000::/35 2a09:54c6:b000::/36 2a09:54c6:c000::/36 2a09:54c6:e000::/36 @@ -1292,9 +1302,10 @@ 2a0b:2542::/48 2a0b:4b81:1001::/48 2a0b:4e07:b8::/47 -2a0c:9a40:84e0::/48 +2a0c:9a40:8fc1::/48 +2a0c:9a40:8fc2::/47 +2a0c:9a40:8fc4::/48 2a0c:b641:571::/48 -2a0c:b641:d40::/44 2a0e:97c0:5ef::/48 2a0e:97c0:83f::/48 2a0e:9b00::/29 @@ -1302,7 +1313,7 @@ 2a0e:aa06:440::/48 2a0e:aa06:490::/44 2a0e:aa06:4e0::/44 -2a0e:aa06:500::/44 +2a0e:aa06:501::/48 2a0e:aa06:520::/48 2a0e:aa06:525::/48 2a0e:aa06:541::/48 @@ -1317,14 +1328,12 @@ 2a0e:aa07:e0e0::/44 2a0e:aa07:e151::/48 2a0e:aa07:e155::/48 +2a0e:aa07:e15f::/48 2a0e:aa07:e160::/47 2a0e:aa07:e162::/48 2a0e:aa07:e16a::/48 2a0e:aa07:e1a0::/44 -2a0e:aa07:e1e1::/48 -2a0e:aa07:e1e2::/47 -2a0e:aa07:e1e4::/47 -2a0e:aa07:e1e6::/48 +2a0e:aa07:e1e0::/44 2a0e:aa07:e200::/44 2a0e:aa07:e210::/48 2a0e:aa07:e21c::/47 @@ -1342,7 +1351,15 @@ 2a0e:b107:c10::/48 2a0e:b107:da0::/44 2a0e:b107:dce::/48 +2a0f:1cc5:f00::/47 +2a0f:1cc5:f02::/48 +2a0f:1cc5:f05::/48 2a0f:5707:ac00::/47 +2a0f:6284:4b00::/40 +2a0f:6284:4c30::/48 +2a0f:6284:4c40::/43 +2a0f:6284:4c60::/44 +2a0f:6284:4c80::/43 2a0f:7803:e300::/40 2a0f:7803:f5d0::/44 2a0f:7803:f5e0::/43 @@ -1356,39 +1373,33 @@ 2a0f:7803:fa24::/46 2a0f:7803:faf3::/48 2a0f:7803:fe41::/48 -2a0f:7803:fe44::/46 -2a0f:7803:fe4e::/48 +2a0f:7803:fe45::/48 2a0f:7803:fe81::/48 2a0f:7803:fe82::/48 2a0f:7804:f650::/44 2a0f:7804:f9f0::/44 -2a0f:7807::/32 2a0f:7d07::/32 2a0f:85c1:ba5::/48 +2a0f:85c1:bfe::/48 2a0f:85c1:ca0::/44 2a0f:85c1:ce1::/48 2a0f:85c1:cf1::/48 +2a0f:85c1:d90::/48 2a0f:9400:6110::/48 2a0f:9400:7700::/48 2a0f:ac00::/29 -2a0f:ea47:fc1d::/48 2a10:2f00:15a::/48 -2a10:67c2:2::/48 2a10:ccc0:d00::/46 2a10:ccc0:d0a::/47 2a10:ccc0:d0c::/47 -2a10:ccc6:66c4::/48 -2a10:ccc6:66c6::/48 -2a10:ccc6:66c8::/47 -2a10:ccc6:66ca::/48 -2a10:ccc6:66cc::/47 +2a10:ccc6:66c8::/48 +2a10:ccc6:66cc::/46 2a12:f8c3::/36 2a13:1800:10::/48 2a13:1800:300::/44 2a13:1800:80::/44 2a13:1800::/48 2a13:1801:180::/43 -2a13:a5c3:ff10::/44 2a13:a5c3:ff21::/48 2a13:a5c3:ff50::/44 2a13:a5c7:1800::/40 @@ -1397,10 +1408,8 @@ 2a13:a5c7:2121::/48 2a13:a5c7:2301::/48 2a13:a5c7:2302::/48 -2a13:a5c7:23c0::/42 -2a13:a5c7:2600::/40 +2a13:a5c7:23c0::/48 2a13:a5c7:2801::/48 -2a13:a5c7:2803::/48 2a13:a5c7:3108::/48 2a13:a5c7:31a0::/43 2a13:a5c7:3301::/48 @@ -1411,7 +1420,7 @@ 2a14:67c1:20::/44 2a14:67c1:702::/47 2a14:67c1:704::/48 -2a14:67c1:70::/47 +2a14:67c1:70::/48 2a14:67c1:73::/48 2a14:67c1:74::/48 2a14:67c1:a010::/44 @@ -1421,14 +1430,10 @@ 2a14:67c1:a02a::/48 2a14:67c1:a02f::/48 2a14:67c1:a040::/47 -2a14:67c1:a061::/48 2a14:67c1:a064::/48 -2a14:67c1:a090::/45 -2a14:67c1:a099::/48 2a14:67c1:a100::/43 2a14:67c1:a125::/48 2a14:67c1:a144::/48 -2a14:67c1:a150::/44 2a14:67c1:b000::/48 2a14:67c1:b065::/48 2a14:67c1:b066::/48 @@ -1438,80 +1443,72 @@ 2a14:67c1:b107::/48 2a14:67c1:b130::/46 2a14:67c1:b134::/47 +2a14:67c1:b136::/48 2a14:67c1:b140::/48 2a14:67c1:b4a1::/48 2a14:67c1:b4a2::/48 +2a14:67c1:b4a8::/47 +2a14:67c1:b4aa::/48 2a14:67c1:b4c0::/45 -2a14:67c1:b4d0::/44 2a14:67c1:b4e0::/43 2a14:67c1:b500::/47 2a14:67c1:b549::/48 2a14:67c1:b561::/48 2a14:67c1:b563::/48 2a14:67c1:b566::/48 -2a14:67c1:b581::/48 +2a14:67c1:b578::/48 2a14:67c1:b582::/48 +2a14:67c1:b586::/48 2a14:67c1:b588::/47 -2a14:67c1:b590::/47 +2a14:67c1:b590::/48 2a14:67c1:b599::/48 -2a14:67c5:1900::/40 +2a14:67c1:b5a1::/48 +2a14:67c1:c300::/40 2a14:7580:740::/44 2a14:7580:750::/47 -2a14:7580:9200::/40 +2a14:7580:9208::/48 +2a14:7580:9220::/44 2a14:7580:9400::/39 -2a14:7580:9600::/46 -2a14:7580:960c::/48 2a14:7580:d000::/37 2a14:7580:d800::/39 2a14:7580:da00::/40 2a14:7580:e200::/40 -2a14:7580:fa01::/48 2a14:7580:fe00::/40 2a14:7580:fff4::/48 2a14:7580:fff7::/48 2a14:7580:fffa::/48 +2a14:7581:30b5::/48 2a14:7581:3100::/40 -2a14:7581:3400::/47 -2a14:7581:9010::/44 -2a14:7581:b10::/48 -2a14:7581:b12::/48 -2a14:7581:b15::/48 +2a14:7581:3401::/48 +2a14:7581:b12::/47 +2a14:7581:b14::/47 2a14:7581:b20::/46 -2a14:7581:b32::/47 +2a14:7581:b40::/48 2a14:7581:b44::/48 -2a14:7581:b46::/47 -2a14:7581:b48::/48 -2a14:7581:b4a::/48 2a14:7581:b60::/48 -2a14:7581:b62::/47 -2a14:7581:b64::/46 -2a14:7581:b6c::/47 -2a14:7581:b6e::/48 -2a14:7581:b82::/47 2a14:7581:ba0::/48 -2a14:7581:ba2::/47 -2a14:7581:ba4::/48 2a14:7581:bbb::/48 -2a14:7581:bc2::/48 2a14:7581:bcd::/48 2a14:7581:bff::/48 2a14:7581:ffb::/48 -2a14:7581:ffd::/48 2a14:7583:f201::/48 2a14:7583:f203::/48 2a14:7583:f300::/46 -2a14:7583:f304::/48 +2a14:7583:f304::/47 +2a14:7583:f460::/44 +2a14:7583:f4f1::/48 2a14:7583:f4fe::/48 2a14:7583:f500::/48 2a14:7583:f701::/48 2a14:7583:f702::/47 -2a14:7583:f704::/47 -2a14:7583:f707::/48 -2a14:7583:f708::/48 +2a14:7583:f704::/46 +2a14:7583:f708::/47 +2a14:7583:f70a::/48 2a14:7583:f743::/48 2a14:7583:f764::/48 2a14:7584::/36 2a14:7c0:4a01::/48 +2a14:7c0:5103::/48 2c0f:f7a8:8011::/48 2c0f:f7a8:8050::/48 2c0f:f7a8:805f::/48 diff --git a/small/luci-app-passwall/root/usr/share/passwall/rules/gfwlist b/small/luci-app-passwall/root/usr/share/passwall/rules/gfwlist index 45ad5e8186..02e24eb42f 100644 --- a/small/luci-app-passwall/root/usr/share/passwall/rules/gfwlist +++ b/small/luci-app-passwall/root/usr/share/passwall/rules/gfwlist @@ -117,6 +117,7 @@ 91vps.club 92ccav.com 991.com +996.icu 99btgc01.com 99cn.info 9bis.com @@ -303,6 +304,7 @@ apetube.com api-secure.recaptcha.net api-verify.recaptcha.net api.ai +api.palworldgame.com api.pureapk.com api.recaptcha.net api.steampowered.com @@ -360,6 +362,7 @@ asia-gaming.com asiaharvest.org asianage.com asianews.it +asianfanfics.com asiansexdiary.com asiaone.com asiatgp.com @@ -748,7 +751,6 @@ btc98.com btcbank.bank btctrade.im btdig.com -btdigg.org btguard.com btku.me btku.org @@ -1166,6 +1168,7 @@ csuchen.de csw.org.uk ct.org.tw ctao.org +ctinets.com ctinews.com ctitv.com.tw ctowc.org @@ -1341,6 +1344,7 @@ dnvod.tv doc.new docker.com docker.io +dockerstatus.com docs.deno.com docs.new doctorvoice.org @@ -1797,6 +1801,8 @@ freedominfonetweb.wordpress.com freedomsherald.org freeforums.org freegao.com +freegpt.es +freegpt.tech freehongkong.org freeilhamtohti.org freekazakhs.org @@ -2691,6 +2697,7 @@ internet.org internetdefenseleague.org internetfreedom.org internetpopculture.com +interseclab.org inthenameofconfuciusmovie.com investigating.wordpress.com invidio.us @@ -3656,6 +3663,7 @@ occupytiananmen.com ocreampies.com ocry.com october-review.org +octocaptcha.com oculus.com oculuscdn.com odysee.com @@ -4463,6 +4471,7 @@ solana.com solarsystem.nasa.gov solidaritetibet.org solidfiles.com +solscan.io solv.finance somee.com songjianjun.com @@ -4683,8 +4692,10 @@ tanc.org tangren.us tanks.gg taoism.net +tap.io tapanwap.com tapatalk.com +taptap.io tardigrade.io tarr.uspto.gov taup.net @@ -4994,6 +5005,7 @@ trt.net.tr trtc.com.tw truebuddha-md.org trulyergonomic.com +trustwallet.com truthsocial.com truveo.com tryheart.jp @@ -5301,6 +5313,7 @@ vijayatemple.org vilanet.me vilavpn.com vimeo.com +vimeocdn.com vimperator.org vincnd.com vine.co @@ -5449,6 +5462,7 @@ webpkgcache.com webrtc.org webrush.net webs-tv.net +websdr.org website.informer.com website.new websitepulse.com @@ -5519,6 +5533,7 @@ wikilivres.info wikimapia.org wikimedia.org wikinews.org +wikipedia.com wikipedia.org wikisource.org wikiversity.org @@ -5693,6 +5708,7 @@ xn--ngstr-lra8j.com xn--noss43i.com xn--oiq.cc xn--p8j9a0d9c9a.xn--q9jyb4c +xn--u2u927b.com xnpool.com xnxx.com xpdo.net @@ -5818,6 +5834,7 @@ z-lib.gd z-lib.gl z-lib.io z-lib.org +z-library.ec z-library.sk zacebook.com zalmos.com diff --git a/small/luci-app-ssr-plus/luasrc/controller/shadowsocksr.lua b/small/luci-app-ssr-plus/luasrc/controller/shadowsocksr.lua index 4c56e479b1..18d3b42257 100644 --- a/small/luci-app-ssr-plus/luasrc/controller/shadowsocksr.lua +++ b/small/luci-app-ssr-plus/luasrc/controller/shadowsocksr.lua @@ -28,8 +28,9 @@ function index() entry({"admin", "services", "shadowsocksr", "reset"}, call("act_reset")) entry({"admin", "services", "shadowsocksr", "restart"}, call("act_restart")) entry({"admin", "services", "shadowsocksr", "delete"}, call("act_delete")) - --[[Backup]] + --[[Backup]] entry({"admin", "services", "shadowsocksr", "backup"}, call("create_backup")).leaf = true + end function subscribe() @@ -46,40 +47,74 @@ function act_status() end function act_ping() - local e = {} - local domain = luci.http.formvalue("domain") - local port = luci.http.formvalue("port") - local transport = luci.http.formvalue("transport") - local wsPath = luci.http.formvalue("wsPath") - local tls = luci.http.formvalue("tls") - e.index = luci.http.formvalue("index") - local iret = luci.sys.call("ipset add ss_spec_wan_ac " .. domain .. " 2>/dev/null") - if transport == "ws" then - local prefix = tls=='1' and "https://" or "http://" - local address = prefix..domain..':'..port..wsPath - local result = luci.sys.exec("curl --http1.1 -m 2 -ksN -o /dev/null -w 'time_connect=%{time_connect}\nhttp_code=%{http_code}' -H 'Connection: Upgrade' -H 'Upgrade: websocket' -H 'Sec-WebSocket-Key: SGVsbG8sIHdvcmxkIQ==' -H 'Sec-WebSocket-Version: 13' "..address) - e.socket = string.match(result,"http_code=(%d+)")=="101" - e.ping = tonumber(string.match(result, "time_connect=(%d+.%d%d%d)"))*1000 - else - local socket = nixio.socket("inet", "stream") - socket:setopt("socket", "rcvtimeo", 3) - socket:setopt("socket", "sndtimeo", 3) - e.socket = socket:connect(domain, port) - socket:close() - e.ping = luci.sys.exec(string.format("echo -n $(tcping -q -c 1 -i 1 -t 2 -p %s %s 2>&1 | grep -o 'time=[0-9]*' | awk -F '=' '{print $2}') 2>/dev/null", port, domain)) - if (e.ping == "") then - e.ping = luci.sys.exec("echo -n $(ping -c 1 -W 1 %q 2>&1 | grep -o 'time=[0-9]*' | awk -F '=' '{print $2}') 2>/dev/null" % domain) - if (e.ping == "") then - -- UDP ping test using nping - e.ping = luci.sys.exec(string.format("echo -n $(nping --udp -c 1 -p %s %s 2>/dev/null | grep -o 'Avg rtt: [0-9.]*ms' | awk '{print $3}' | sed 's/ms//' | head -1) 2>/dev/null", port, domain)) - end - end - end - if (iret == 0) then - luci.sys.call(" ipset del ss_spec_wan_ac " .. domain) - end - luci.http.prepare_content("application/json") - luci.http.write_json(e) + local e = {} + local domain = luci.http.formvalue("domain") + local port = tonumber(luci.http.formvalue("port") or 0) + local transport = luci.http.formvalue("transport") + local wsPath = luci.http.formvalue("wsPath") or "" + local tls = luci.http.formvalue("tls") + e.index = luci.http.formvalue("index") + + local use_nft = luci.sys.call("command -v nft >/dev/null") == 0 + local iret = false + + if use_nft then + iret = luci.sys.call("nft add element inet ss_spec ss_spec_wan_ac { " .. domain .. " } 2>/dev/null") == 0 + else + iret = luci.sys.call("ipset add ss_spec_wan_ac " .. domain .. " 2>/dev/null") == 0 + end + + if transport == "ws" then + local prefix = tls == '1' and "https://" or "http://" + local address = prefix .. domain .. ':' .. port .. wsPath + local result = luci.sys.exec( + "curl --http1.1 -m 2 -ksN -o /dev/null " .. + "-w 'time_connect=%{time_connect}\nhttp_code=%{http_code}' " .. + "-H 'Connection: Upgrade' -H 'Upgrade: websocket' " .. + "-H 'Sec-WebSocket-Key: SGVsbG8sIHdvcmxkIQ==' " .. + "-H 'Sec-WebSocket-Version: 13' " .. address + ) + e.socket = string.match(result,"http_code=(%d+)") == "101" + local ping_time = tonumber(string.match(result, "time_connect=(%d+.%d%d%d)")) + e.ping = ping_time and ping_time * 1000 or nil + else + -- TCP ping + local socket = nixio.socket("inet", "stream") + socket:setopt("socket", "rcvtimeo", 3) + socket:setopt("socket", "sndtimeo", 3) + e.socket = socket:connect(domain, port) + socket:close() + + e.ping = tonumber(luci.sys.exec(string.format( + "tcping -q -c 1 -i 1 -t 2 -p %d %s 2>/dev/null | grep -o 'time=[0-9]*' | awk -F '=' '{print $2}'", + port, domain + ))) + + if not e.ping then + e.ping = tonumber(luci.sys.exec(string.format( + "ping -c 1 -W 1 %s 2>/dev/null | grep -o 'time=[0-9]*' | awk -F '=' '{print $2}'", + domain + ))) + end + + if not e.ping then + e.ping = tonumber(luci.sys.exec(string.format( + "nping --udp -c 1 -p %d %s 2>/dev/null | grep -o 'Avg rtt: [0-9.]*ms' | awk '{print $3}' | sed 's/ms//' | head -1", + port, domain + ))) + end + end + + if iret then + if use_nft then + luci.sys.call("nft delete element inet ss_spec ss_spec_wan_ac { " .. domain .. " } 2>/dev/null") + else + luci.sys.call("ipset del ss_spec_wan_ac " .. domain .. " 2>/dev/null") + end + end + + luci.http.prepare_content("application/json") + luci.http.write_json(e) end function check_status() @@ -101,28 +136,46 @@ function check_port() local s local server_name = "" local uci = require "luci.model.uci".cursor() - local iret = 1 + local use_nft = luci.sys.call("command -v nft >/dev/null") == 0 + uci:foreach("shadowsocksr", "servers", function(s) if s.alias then server_name = s.alias elseif s.server and s.server_port then - server_name = "%s:%s" % {s.server, s.server_port} + server_name = s.server .. ":" .. s.server_port end - iret = luci.sys.call("ipset add ss_spec_wan_ac " .. s.server .. " 2>/dev/null") - socket = nixio.socket("inet", "stream") + + -- 临时加入 set + local iret = false + if use_nft then + iret = luci.sys.call("nft add element inet ss_spec ss_spec_wan_ac { " .. s.server .. " } 2>/dev/null") == 0 + else + iret = luci.sys.call("ipset add ss_spec_wan_ac " .. s.server .. " 2>/dev/null") == 0 + end + + -- TCP 测试 + local socket = nixio.socket("inet", "stream") socket:setopt("socket", "rcvtimeo", 3) socket:setopt("socket", "sndtimeo", 3) - ret = socket:connect(s.server, s.server_port) - if tostring(ret) == "true" then - socket:close() - retstring = retstring .. "[" .. server_name .. "] OK.
" + local ret = socket:connect(s.server, s.server_port) + socket:close() + + if ret then + retstring = retstring .. string.format("[%s] OK.
", server_name) else - retstring = retstring .. "[" .. server_name .. "] Error.
" + retstring = retstring .. string.format("[%s] Error.
", server_name) end - if iret == 0 then - luci.sys.call("ipset del ss_spec_wan_ac " .. s.server) + + -- 删除临时 set + if iret then + if use_nft then + luci.sys.call("nft delete element inet ss_spec ss_spec_wan_ac { " .. s.server .. " } 2>/dev/null") + else + luci.sys.call("ipset del ss_spec_wan_ac " .. s.server) + end end end) + luci.http.prepare_content("application/json") luci.http.write_json({ret = retstring}) end diff --git a/small/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua b/small/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua index 008305789c..8134860f8a 100644 --- a/small/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua +++ b/small/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua @@ -4,14 +4,22 @@ local uci = require "luci.model.uci".cursor() -- 获取 LAN IP 地址 function lanip() local lan_ip - lan_ip = luci.sys.exec("uci -q get network.lan.ipaddr 2>/dev/null | awk -F '/' '{print $1}' | tr -d '\n'") + -- 尝试从 UCI 直接读取 + lan_ip = luci.sys.exec("uci -q get network.lan.ipaddr 2>/dev/null | awk -F'/' '{print $1}' | tr -d '\\n'") + + -- 尝试从 LAN 接口信息中读取(优先 ifname,再 fallback 到 device) if not lan_ip or lan_ip == "" then - lan_ip = luci.sys.exec("ip address show $(uci -q -p /tmp/state get network.lan.ifname || uci -q -p /tmp/state get network.lan.device) | grep -w 'inet' | grep -Eo 'inet [0-9\.]+' | awk '{print $2}' | head -1 | tr -d '\n'") + lan_ip = luci.sys.exec([[ +ip -4 addr show $(uci -q -p /tmp/state get network.lan.ifname || uci -q -p /tmp/state get network.lan.device) 2>/dev/null \ + | grep -w 'inet' | awk '{print $2}' | cut -d'/' -f1 | grep -v '^127\.' | head -n1 | tr -d '\n']]) end + -- 取任意一个 global IPv4 地址 if not lan_ip or lan_ip == "" then - lan_ip = luci.sys.exec("ip addr show | grep -w 'inet' | grep 'global' | grep -Eo 'inet [0-9\.]+' | awk '{print $2}' | head -n 1 | tr -d '\n'") + lan_ip = luci.sys.exec([[ +ip -4 addr show scope global 2>/dev/null \ + | grep -w 'inet' | awk '{print $2}' | cut -d'/' -f1 | grep -v '^127\.' | head -n1 | tr -d '\n']]) end return lan_ip diff --git a/small/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua b/small/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua index 5e7cbb90fb..56f7dc16d9 100644 --- a/small/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua +++ b/small/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua @@ -8,14 +8,22 @@ local uci = require "luci.model.uci".cursor() -- 获取 LAN IP 地址 function lanip() local lan_ip - lan_ip = luci.sys.exec("uci -q get network.lan.ipaddr 2>/dev/null | awk -F '/' '{print $1}' | tr -d '\n'") + -- 尝试从 UCI 直接读取 + lan_ip = luci.sys.exec("uci -q get network.lan.ipaddr 2>/dev/null | awk -F'/' '{print $1}' | tr -d '\\n'") + + -- 尝试从 LAN 接口信息中读取(优先 ifname,再 fallback 到 device) if not lan_ip or lan_ip == "" then - lan_ip = luci.sys.exec("ip address show $(uci -q -p /tmp/state get network.lan.ifname || uci -q -p /tmp/state get network.lan.device) | grep -w 'inet' | grep -Eo 'inet [0-9\.]+' | awk '{print $2}' | head -1 | tr -d '\n'") + lan_ip = luci.sys.exec([[ +ip -4 addr show $(uci -q -p /tmp/state get network.lan.ifname || uci -q -p /tmp/state get network.lan.device) 2>/dev/null \ + | grep -w 'inet' | awk '{print $2}' | cut -d'/' -f1 | grep -v '^127\.' | head -n1 | tr -d '\n']]) end + -- 取任意一个 global IPv4 地址 if not lan_ip or lan_ip == "" then - lan_ip = luci.sys.exec("ip addr show | grep -w 'inet' | grep 'global' | grep -Eo 'inet [0-9\.]+' | awk '{print $2}' | head -n 1 | tr -d '\n'") + lan_ip = luci.sys.exec([[ +ip -4 addr show scope global 2>/dev/null \ + | grep -w 'inet' | awk '{print $2}' | cut -d'/' -f1 | grep -v '^127\.' | head -n1 | tr -d '\n']]) end return lan_ip diff --git a/small/v2ray-geodata/Makefile b/small/v2ray-geodata/Makefile index 4e79a408bf..304b6522e4 100644 --- a/small/v2ray-geodata/Makefile +++ b/small/v2ray-geodata/Makefile @@ -21,13 +21,13 @@ define Download/geoip HASH:=c23ac8343e9796f8cc8b670c3aeb6df6d03d4e8914437a409961477f6b226098 endef -GEOSITE_VER:=20251031084822 +GEOSITE_VER:=20251101070148 GEOSITE_FILE:=dlc.dat.$(GEOSITE_VER) define Download/geosite URL:=https://github.com/v2fly/domain-list-community/releases/download/$(GEOSITE_VER)/ URL_FILE:=dlc.dat FILE:=$(GEOSITE_FILE) - HASH:=7a673ea6a293c82a77ab6dff44f0c1e432d63fe28f8753291ab35016f8f7e6f9 + HASH:=434469c8a61ec36d2f3e1ddd6ff65c594bf76ebcb4e472705695b6d4ab51ba47 endef GEOSITE_IRAN_VER:=202510270042 diff --git a/v2rayn/v2rayN/ServiceLib/Manager/ActionPrecheckManager.cs b/v2rayn/v2rayN/ServiceLib/Manager/ActionPrecheckManager.cs index a487401c56..f4f998b311 100644 --- a/v2rayn/v2rayN/ServiceLib/Manager/ActionPrecheckManager.cs +++ b/v2rayn/v2rayN/ServiceLib/Manager/ActionPrecheckManager.cs @@ -115,7 +115,7 @@ public class ActionPrecheckManager(Config config) if (item.ConfigType.IsGroupType()) { ProfileGroupItemManager.Instance.TryGet(item.IndexId, out var group); - if (group is null || group.ChildItems.IsNullOrEmpty()) + if (group is null || group.NotHasChild()) { errors.Add(string.Format(ResUI.GroupEmpty, item.Remarks)); return errors; @@ -128,7 +128,11 @@ public class ActionPrecheckManager(Config config) return errors; } - foreach (var child in Utils.String2List(group.ChildItems)) + var childIds = Utils.String2List(group.ChildItems) ?? []; + var subItems = await ProfileGroupItemManager.GetSubChildProfileItems(group); + childIds.AddRange(subItems.Select(p => p.IndexId)); + + foreach (var child in childIds) { var childErrors = new List(); if (child.IsNullOrEmpty()) diff --git a/v2rayn/v2rayN/ServiceLib/Manager/ProfileGroupItemManager.cs b/v2rayn/v2rayN/ServiceLib/Manager/ProfileGroupItemManager.cs index bf52dcb2ae..6cd260d397 100644 --- a/v2rayn/v2rayN/ServiceLib/Manager/ProfileGroupItemManager.cs +++ b/v2rayn/v2rayN/ServiceLib/Manager/ProfileGroupItemManager.cs @@ -220,11 +220,14 @@ public class ProfileGroupItemManager public static async Task<(List Items, ProfileGroupItem? Group)> GetChildProfileItems(string? indexId) { Instance.TryGet(indexId, out var profileGroupItem); - if (profileGroupItem == null || profileGroupItem.ChildItems.IsNullOrEmpty()) + if (profileGroupItem == null || profileGroupItem.NotHasChild()) { return (new List(), profileGroupItem); } var items = await GetChildProfileItems(profileGroupItem); + var subItems = await GetSubChildProfileItems(profileGroupItem); + items.AddRange(subItems); + return (items, profileGroupItem); } @@ -248,14 +251,39 @@ public class ProfileGroupItemManager return childProfiles; } + public static async Task> GetSubChildProfileItems(ProfileGroupItem? group) + { + if (group == null || group.SubChildItems.IsNullOrEmpty()) + { + return new(); + } + var childProfiles = await AppManager.Instance.ProfileItems(group.SubChildItems); + + return childProfiles.Where(p => + p != null && + p.IsValid() && + !p.ConfigType.IsComplexType() && + (group.Filter.IsNullOrEmpty() || Regex.IsMatch(p.Remarks, group.Filter)) + ) + .ToList(); + } + public static async Task> GetAllChildDomainAddresses(string indexId) { // include grand children var childAddresses = new HashSet(); - if (!Instance.TryGet(indexId, out var groupItem) || groupItem.ChildItems.IsNullOrEmpty()) + if (!Instance.TryGet(indexId, out var groupItem) || groupItem == null) + { return childAddresses; + } - var childIds = Utils.String2List(groupItem.ChildItems); + if (groupItem.SubChildItems.IsNotEmpty()) + { + var subItems = await GetSubChildProfileItems(groupItem); + subItems.ForEach(p => childAddresses.Add(p.Address)); + } + + var childIds = Utils.String2List(groupItem.ChildItems) ?? []; foreach (var childId in childIds) { diff --git a/v2rayn/v2rayN/ServiceLib/Models/ProfileGroupItem.cs b/v2rayn/v2rayN/ServiceLib/Models/ProfileGroupItem.cs index c6131275c1..12c0f89987 100644 --- a/v2rayn/v2rayN/ServiceLib/Models/ProfileGroupItem.cs +++ b/v2rayn/v2rayN/ServiceLib/Models/ProfileGroupItem.cs @@ -8,5 +8,14 @@ public class ProfileGroupItem public string ChildItems { get; set; } + public string? SubChildItems { get; set; } + + public string? Filter { get; set; } + public EMultipleLoad MultipleLoad { get; set; } = EMultipleLoad.LeastPing; + + public bool NotHasChild() + { + return string.IsNullOrWhiteSpace(ChildItems) && string.IsNullOrWhiteSpace(SubChildItems); + } } diff --git a/v2rayn/v2rayN/ServiceLib/Resx/ResUI.Designer.cs b/v2rayn/v2rayN/ServiceLib/Resx/ResUI.Designer.cs index 90b25530e7..90a44ae5c8 100644 --- a/v2rayn/v2rayN/ServiceLib/Resx/ResUI.Designer.cs +++ b/v2rayn/v2rayN/ServiceLib/Resx/ResUI.Designer.cs @@ -19,7 +19,7 @@ namespace ServiceLib.Resx { // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。 // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen // (以 /str 作为命令选项),或重新生成 VS 项目。 - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "18.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] public class ResUI { @@ -2958,6 +2958,15 @@ namespace ServiceLib.Resx { } } + /// + /// 查找类似 Auto add filtered configuration from subscription groups 的本地化字符串。 + /// + public static string TbPolicyGroupSubChildTip { + get { + return ResourceManager.GetString("TbPolicyGroupSubChildTip", resourceCulture); + } + } + /// /// 查找类似 Policy Group Type 的本地化字符串。 /// diff --git a/v2rayn/v2rayN/ServiceLib/Resx/ResUI.fa-Ir.resx b/v2rayn/v2rayN/ServiceLib/Resx/ResUI.fa-Ir.resx index 08d4d111a0..edbd21daa8 100644 --- a/v2rayn/v2rayN/ServiceLib/Resx/ResUI.fa-Ir.resx +++ b/v2rayn/v2rayN/ServiceLib/Resx/ResUI.fa-Ir.resx @@ -1599,4 +1599,7 @@ Test real delay + + Auto add filtered configuration from subscription groups + \ No newline at end of file diff --git a/v2rayn/v2rayN/ServiceLib/Resx/ResUI.fr.resx b/v2rayn/v2rayN/ServiceLib/Resx/ResUI.fr.resx index a56802e3ee..542d9ef91b 100644 --- a/v2rayn/v2rayN/ServiceLib/Resx/ResUI.fr.resx +++ b/v2rayn/v2rayN/ServiceLib/Resx/ResUI.fr.resx @@ -1596,4 +1596,7 @@ Test 1-clic de latence réelle - + + Auto add filtered configuration from subscription groups + + \ No newline at end of file diff --git a/v2rayn/v2rayN/ServiceLib/Resx/ResUI.hu.resx b/v2rayn/v2rayN/ServiceLib/Resx/ResUI.hu.resx index abb43c0ae4..e61f279e3e 100644 --- a/v2rayn/v2rayN/ServiceLib/Resx/ResUI.hu.resx +++ b/v2rayn/v2rayN/ServiceLib/Resx/ResUI.hu.resx @@ -1599,4 +1599,7 @@ Test real delay + + Auto add filtered configuration from subscription groups + \ No newline at end of file diff --git a/v2rayn/v2rayN/ServiceLib/Resx/ResUI.resx b/v2rayn/v2rayN/ServiceLib/Resx/ResUI.resx index 9a1639ce62..f1123407ab 100644 --- a/v2rayn/v2rayN/ServiceLib/Resx/ResUI.resx +++ b/v2rayn/v2rayN/ServiceLib/Resx/ResUI.resx @@ -1599,4 +1599,7 @@ Test real delay + + Auto add filtered configuration from subscription groups + \ No newline at end of file diff --git a/v2rayn/v2rayN/ServiceLib/Resx/ResUI.ru.resx b/v2rayn/v2rayN/ServiceLib/Resx/ResUI.ru.resx index 67067b9a02..14edb9b82b 100644 --- a/v2rayn/v2rayN/ServiceLib/Resx/ResUI.ru.resx +++ b/v2rayn/v2rayN/ServiceLib/Resx/ResUI.ru.resx @@ -1599,4 +1599,7 @@ Test real delay + + Auto add filtered configuration from subscription groups + \ No newline at end of file diff --git a/v2rayn/v2rayN/ServiceLib/Resx/ResUI.zh-Hans.resx b/v2rayn/v2rayN/ServiceLib/Resx/ResUI.zh-Hans.resx index 96c470c678..cfb89284ca 100644 --- a/v2rayn/v2rayN/ServiceLib/Resx/ResUI.zh-Hans.resx +++ b/v2rayn/v2rayN/ServiceLib/Resx/ResUI.zh-Hans.resx @@ -1596,4 +1596,7 @@ 一键测试真连接延迟 + + 自动从订阅分组添加过滤后的配置 + \ No newline at end of file diff --git a/v2rayn/v2rayN/ServiceLib/Resx/ResUI.zh-Hant.resx b/v2rayn/v2rayN/ServiceLib/Resx/ResUI.zh-Hant.resx index d03b0d20bb..4a3822b418 100644 --- a/v2rayn/v2rayN/ServiceLib/Resx/ResUI.zh-Hant.resx +++ b/v2rayn/v2rayN/ServiceLib/Resx/ResUI.zh-Hant.resx @@ -1596,4 +1596,7 @@ 一鍵測試真連線延遲 + + 自動從訂閱分組新增過濾後的配置 + \ No newline at end of file diff --git a/v2rayn/v2rayN/ServiceLib/ViewModels/AddGroupServerViewModel.cs b/v2rayn/v2rayN/ServiceLib/ViewModels/AddGroupServerViewModel.cs index b5bfe80dcc..5b0778a527 100644 --- a/v2rayn/v2rayN/ServiceLib/ViewModels/AddGroupServerViewModel.cs +++ b/v2rayn/v2rayN/ServiceLib/ViewModels/AddGroupServerViewModel.cs @@ -17,6 +17,14 @@ public class AddGroupServerViewModel : MyReactiveObject [Reactive] public string? PolicyGroupType { get; set; } + [Reactive] + public SubItem? SelectedSubItem { get; set; } + + [Reactive] + public string? Filter { get; set; } + + public IObservableCollection SubItems { get; } = new ObservableCollectionExtended(); + public IObservableCollection ChildItemsObs { get; } = new ObservableCollectionExtended(); //public ReactiveCommand AddCmd { get; } @@ -64,10 +72,14 @@ public class AddGroupServerViewModel : MyReactiveObject }); SelectedSource = profileItem.IndexId.IsNullOrEmpty() ? profileItem : JsonUtils.DeepCopy(profileItem); - CoreType = (SelectedSource?.CoreType ?? ECoreType.Xray).ToString(); - ProfileGroupItemManager.Instance.TryGet(profileItem.IndexId, out var profileGroup); + _ = Init(); + } + + public async Task Init() + { + ProfileGroupItemManager.Instance.TryGet(SelectedSource.IndexId, out var profileGroup); PolicyGroupType = (profileGroup?.MultipleLoad ?? EMultipleLoad.LeastPing) switch { EMultipleLoad.LeastPing => ResUI.TbLeastPing, @@ -78,15 +90,16 @@ public class AddGroupServerViewModel : MyReactiveObject _ => ResUI.TbLeastPing, }; - _ = Init(); - } + var subs = await AppManager.Instance.SubItems(); + subs.Add(new SubItem()); + SubItems.AddRange(subs); + SelectedSubItem = SubItems.Where(s => s.Id == profileGroup?.SubChildItems).FirstOrDefault(); + Filter = profileGroup?.Filter; - public async Task Init() - { var childItemMulti = ProfileGroupItemManager.Instance.GetOrCreateAndMarkDirty(SelectedSource?.IndexId); if (childItemMulti != null) { - var childIndexIds = childItemMulti.ChildItems.IsNullOrEmpty() ? new List() : Utils.String2List(childItemMulti.ChildItems); + var childIndexIds = Utils.String2List(childItemMulti.ChildItems) ?? []; foreach (var item in childIndexIds) { var child = await AppManager.Instance.GetProfileItem(item); @@ -181,7 +194,7 @@ public class AddGroupServerViewModel : MyReactiveObject NoticeManager.Instance.Enqueue(ResUI.PleaseFillRemarks); return; } - if (ChildItemsObs.Count == 0) + if (ChildItemsObs.Count == 0 && SelectedSubItem?.Id.IsNullOrEmpty() == true) { NoticeManager.Instance.Enqueue(ResUI.PleaseAddAtLeastOneServer); return; @@ -213,6 +226,9 @@ public class AddGroupServerViewModel : MyReactiveObject _ => EMultipleLoad.LeastPing, }; + profileGroup.SubChildItems = SelectedSubItem?.Id; + profileGroup.Filter = Filter; + var hasCycle = ProfileGroupItemManager.HasCycle(profileGroup.IndexId); if (hasCycle) { diff --git a/v2rayn/v2rayN/v2rayN.Desktop/Views/AddGroupServerWindow.axaml b/v2rayn/v2rayN/v2rayN.Desktop/Views/AddGroupServerWindow.axaml index e24fa67cb9..4279dc4ad7 100644 --- a/v2rayn/v2rayN/v2rayN.Desktop/Views/AddGroupServerWindow.axaml +++ b/v2rayn/v2rayN/v2rayN.Desktop/Views/AddGroupServerWindow.axaml @@ -38,7 +38,7 @@ + RowDefinitions="Auto,Auto,Auto,Auto,Auto,Auto,Auto"> + + + + + + + diff --git a/v2rayn/v2rayN/v2rayN.Desktop/Views/AddGroupServerWindow.axaml.cs b/v2rayn/v2rayN/v2rayN.Desktop/Views/AddGroupServerWindow.axaml.cs index a75f0e4374..a5692ffcbe 100644 --- a/v2rayn/v2rayN/v2rayN.Desktop/Views/AddGroupServerWindow.axaml.cs +++ b/v2rayn/v2rayN/v2rayN.Desktop/Views/AddGroupServerWindow.axaml.cs @@ -46,6 +46,9 @@ public partial class AddGroupServerWindow : WindowBase this.Bind(ViewModel, vm => vm.SelectedSource.Remarks, v => v.txtRemarks.Text).DisposeWith(disposables); this.Bind(ViewModel, vm => vm.CoreType, v => v.cmbCoreType.SelectedValue).DisposeWith(disposables); this.Bind(ViewModel, vm => vm.PolicyGroupType, v => v.cmbPolicyGroupType.SelectedValue).DisposeWith(disposables); + //this.OneWayBind(ViewModel, vm => vm.SubItems, v => v.cmbSubChildItems.ItemsSource).DisposeWith(disposables); + this.Bind(ViewModel, vm => vm.SelectedSubItem, v => v.cmbSubChildItems.SelectedItem).DisposeWith(disposables); + this.Bind(ViewModel, vm => vm.Filter, v => v.txtFilter.Text).DisposeWith(disposables); this.OneWayBind(ViewModel, vm => vm.ChildItemsObs, v => v.lstChild.ItemsSource).DisposeWith(disposables); this.Bind(ViewModel, vm => vm.SelectedChild, v => v.lstChild.SelectedItem).DisposeWith(disposables); diff --git a/v2rayn/v2rayN/v2rayN/Views/AddGroupServerWindow.xaml b/v2rayn/v2rayN/v2rayN/Views/AddGroupServerWindow.xaml index b1867be8fe..b46d3dcd06 100644 --- a/v2rayn/v2rayN/v2rayN/Views/AddGroupServerWindow.xaml +++ b/v2rayn/v2rayN/v2rayN/Views/AddGroupServerWindow.xaml @@ -59,6 +59,8 @@ + + @@ -130,6 +132,45 @@ materialDesign:HintAssist.Hint="{x:Static resx:ResUI.TbPolicyGroupType}" Style="{StaticResource DefComboBox}" /> + + + + + + + diff --git a/v2rayn/v2rayN/v2rayN/Views/AddGroupServerWindow.xaml.cs b/v2rayn/v2rayN/v2rayN/Views/AddGroupServerWindow.xaml.cs index ad3c7ac65f..e542c922cb 100644 --- a/v2rayn/v2rayN/v2rayN/Views/AddGroupServerWindow.xaml.cs +++ b/v2rayn/v2rayN/v2rayN/Views/AddGroupServerWindow.xaml.cs @@ -41,6 +41,9 @@ public partial class AddGroupServerWindow this.Bind(ViewModel, vm => vm.SelectedSource.Remarks, v => v.txtRemarks.Text).DisposeWith(disposables); this.Bind(ViewModel, vm => vm.CoreType, v => v.cmbCoreType.Text).DisposeWith(disposables); this.Bind(ViewModel, vm => vm.PolicyGroupType, v => v.cmbPolicyGroupType.Text).DisposeWith(disposables); + this.OneWayBind(ViewModel, vm => vm.SubItems, v => v.cmbSubChildItems.ItemsSource).DisposeWith(disposables); + this.Bind(ViewModel, vm => vm.SelectedSubItem, v => v.cmbSubChildItems.SelectedItem).DisposeWith(disposables); + this.Bind(ViewModel, vm => vm.Filter, v => v.txtFilter.Text).DisposeWith(disposables); this.OneWayBind(ViewModel, vm => vm.ChildItemsObs, v => v.lstChild.ItemsSource).DisposeWith(disposables); this.Bind(ViewModel, vm => vm.SelectedChild, v => v.lstChild.SelectedItem).DisposeWith(disposables); diff --git a/v2rayng/V2rayNG/app/src/main/java/com/v2ray/ang/handler/V2rayConfigManager.kt b/v2rayng/V2rayNG/app/src/main/java/com/v2ray/ang/handler/V2rayConfigManager.kt index 2ff46395bd..b7c44012a9 100644 --- a/v2rayng/V2rayNG/app/src/main/java/com/v2ray/ang/handler/V2rayConfigManager.kt +++ b/v2rayng/V2rayNG/app/src/main/java/com/v2ray/ang/handler/V2rayConfigManager.kt @@ -470,7 +470,7 @@ object V2rayConfigManager { ) } - if (MmkvManager.decodeSettingsBool(AppConfig.PREF_USE_HEV_TUNNEL) == false) { + if (MmkvManager.decodeSettingsBool(AppConfig.PREF_USE_HEV_TUNNEL ,true) == false) { // DNS inbound val remoteDns = SettingsManager.getRemoteDnsServers() diff --git a/v2rayng/V2rayNG/app/src/main/java/com/v2ray/ang/service/V2RayVpnService.kt b/v2rayng/V2rayNG/app/src/main/java/com/v2ray/ang/service/V2RayVpnService.kt index ee71e79b45..4afb63138e 100644 --- a/v2rayng/V2rayNG/app/src/main/java/com/v2ray/ang/service/V2RayVpnService.kt +++ b/v2rayng/V2rayNG/app/src/main/java/com/v2ray/ang/service/V2RayVpnService.kt @@ -295,7 +295,7 @@ class V2RayVpnService : VpnService(), ServiceControl { * Starts the tun2socks process with the appropriate parameters. */ private fun runTun2socks() { - if (MmkvManager.decodeSettingsBool(AppConfig.PREF_USE_HEV_TUNNEL) == true) { + if (MmkvManager.decodeSettingsBool(AppConfig.PREF_USE_HEV_TUNNEL, true) == true) { tun2SocksService = TProxyService( context = applicationContext, vpnInterface = mInterface, diff --git a/v2rayng/V2rayNG/app/src/main/java/com/v2ray/ang/ui/PerAppProxyActivity.kt b/v2rayng/V2rayNG/app/src/main/java/com/v2ray/ang/ui/PerAppProxyActivity.kt index 3835cff9db..473b7dc0c4 100644 --- a/v2rayng/V2rayNG/app/src/main/java/com/v2ray/ang/ui/PerAppProxyActivity.kt +++ b/v2rayng/V2rayNG/app/src/main/java/com/v2ray/ang/ui/PerAppProxyActivity.kt @@ -42,10 +42,30 @@ class PerAppProxyActivity : BaseActivity() { addCustomDividerToRecyclerView(binding.recyclerView, this, R.drawable.custom_divider) + initList() + + binding.switchPerAppProxy.setOnCheckedChangeListener { _, isChecked -> + MmkvManager.encodeSettings(AppConfig.PREF_PER_APP_PROXY, isChecked) + } + binding.switchPerAppProxy.isChecked = MmkvManager.decodeSettingsBool(AppConfig.PREF_PER_APP_PROXY, false) + + binding.switchBypassApps.setOnCheckedChangeListener { _, isChecked -> + MmkvManager.encodeSettings(AppConfig.PREF_BYPASS_APPS, isChecked) + } + binding.switchBypassApps.isChecked = MmkvManager.decodeSettingsBool(AppConfig.PREF_BYPASS_APPS, false) + + binding.layoutSwitchBypassAppsTips.setOnClickListener { + Toasty.info(this, R.string.summary_pref_per_app_proxy, Toast.LENGTH_LONG, true).show() + } + } + + private fun initList() { + binding.pbWaiting.show() + lifecycleScope.launch { try { - binding.pbWaiting.show() - val blacklist = MmkvManager.decodeSettingsStringSet(AppConfig.PREF_PER_APP_PROXY_SET) + val blacklist = + MmkvManager.decodeSettingsStringSet(AppConfig.PREF_PER_APP_PROXY_SET) val apps = withContext(Dispatchers.IO) { val appsList = AppManagerUtil.loadNetworkAppList(this@PerAppProxyActivity) @@ -75,26 +95,12 @@ class PerAppProxyActivity : BaseActivity() { appsAll = apps adapter = PerAppProxyAdapter(this@PerAppProxyActivity, apps, blacklist) binding.recyclerView.adapter = adapter - binding.pbWaiting.hide() } catch (e: Exception) { - binding.pbWaiting.hide() Log.e(ANG_PACKAGE, "Error loading apps", e) + } finally { + binding.pbWaiting.hide() } } - - binding.switchPerAppProxy.setOnCheckedChangeListener { _, isChecked -> - MmkvManager.encodeSettings(AppConfig.PREF_PER_APP_PROXY, isChecked) - } - binding.switchPerAppProxy.isChecked = MmkvManager.decodeSettingsBool(AppConfig.PREF_PER_APP_PROXY, false) - - binding.switchBypassApps.setOnCheckedChangeListener { _, isChecked -> - MmkvManager.encodeSettings(AppConfig.PREF_BYPASS_APPS, isChecked) - } - binding.switchBypassApps.isChecked = MmkvManager.decodeSettingsBool(AppConfig.PREF_BYPASS_APPS, false) - - binding.layoutSwitchBypassAppsTips.setOnClickListener { - Toasty.info(this, R.string.summary_pref_per_app_proxy, Toast.LENGTH_LONG, true).show() - } } override fun onPause() { @@ -120,14 +126,40 @@ class PerAppProxyActivity : BaseActivity() { }) } - return super.onCreateOptionsMenu(menu) } @SuppressLint("NotifyDataSetChanged") override fun onOptionsItemSelected(item: MenuItem) = when (item.itemId) { - R.id.select_all -> adapter?.let { it -> + R.id.select_all -> { + selectAllApp() + allowPerAppProxy() + true + } + + R.id.select_proxy_app -> { + selectProxyAppAuto() + allowPerAppProxy() + true + } + + R.id.import_proxy_app -> { + importProxyApp() + allowPerAppProxy() + true + } + + R.id.export_proxy_app -> { + exportProxyApp() + true + } + + else -> super.onOptionsItemSelected(item) + } + + private fun selectAllApp() { + adapter?.let { it -> val pkgNames = it.apps.map { it.packageName } if (it.blacklist.containsAll(pkgNames)) { it.apps.forEach { @@ -142,27 +174,10 @@ class PerAppProxyActivity : BaseActivity() { } it.notifyDataSetChanged() true - } == true - - R.id.select_proxy_app -> { - selectProxyApp() - true } - - R.id.import_proxy_app -> { - importProxyApp() - true - } - - R.id.export_proxy_app -> { - exportProxyApp() - true - } - - else -> super.onOptionsItemSelected(item) } - private fun selectProxyApp() { + private fun selectProxyAppAuto() { toast(R.string.msg_downloading_content) binding.pbWaiting.show() @@ -199,6 +214,10 @@ class PerAppProxyActivity : BaseActivity() { toastSuccess(R.string.toast_success) } + private fun allowPerAppProxy() { + binding.switchPerAppProxy.isChecked = true + } + @SuppressLint("NotifyDataSetChanged") private fun selectProxyApp(content: String, force: Boolean): Boolean { try { diff --git a/v2rayng/V2rayNG/app/src/main/java/com/v2ray/ang/ui/SettingsActivity.kt b/v2rayng/V2rayNG/app/src/main/java/com/v2ray/ang/ui/SettingsActivity.kt index 1a577db2a9..cf2f06c987 100644 --- a/v2rayng/V2rayNG/app/src/main/java/com/v2ray/ang/ui/SettingsActivity.kt +++ b/v2rayng/V2rayNG/app/src/main/java/com/v2ray/ang/ui/SettingsActivity.kt @@ -37,7 +37,7 @@ class SettingsActivity : BaseActivity() { class SettingsFragment : PreferenceFragmentCompat() { - private val perAppProxy by lazy { findPreference(AppConfig.PREF_PER_APP_PROXY) } +// private val perAppProxy by lazy { findPreference(AppConfig.PREF_PER_APP_PROXY) } private val localDns by lazy { findPreference(AppConfig.PREF_LOCAL_DNS_ENABLED) } private val fakeDns by lazy { findPreference(AppConfig.PREF_FAKE_DNS_ENABLED) } private val appendHttpProxy by lazy { findPreference(AppConfig.PREF_APPEND_HTTP_PROXY) } @@ -74,11 +74,11 @@ class SettingsActivity : BaseActivity() { override fun onCreatePreferences(bundle: Bundle?, s: String?) { addPreferencesFromResource(R.xml.pref_settings) - perAppProxy?.setOnPreferenceClickListener { - startActivity(Intent(activity, PerAppProxyActivity::class.java)) - perAppProxy?.isChecked = true - false - } +// perAppProxy?.setOnPreferenceClickListener { +// startActivity(Intent(activity, PerAppProxyActivity::class.java)) +// perAppProxy?.isChecked = true +// false +// } localDns?.setOnPreferenceChangeListener { _, any -> updateLocalDns(any as Boolean) true @@ -227,7 +227,7 @@ class SettingsActivity : BaseActivity() { dnsHosts?.summary = MmkvManager.decodeSettingsString(AppConfig.PREF_DNS_HOSTS) delayTestUrl?.summary = MmkvManager.decodeSettingsString(AppConfig.PREF_DELAY_TEST_URL, AppConfig.DELAY_TEST_URL) - updateHevTunSettings(MmkvManager.decodeSettingsBool(AppConfig.PREF_USE_HEV_TUNNEL, false)) + updateHevTunSettings(MmkvManager.decodeSettingsBool(AppConfig.PREF_USE_HEV_TUNNEL, true)) hevTunRwTimeout?.summary = MmkvManager.decodeSettingsString(AppConfig.PREF_HEV_TUNNEL_RW_TIMEOUT, AppConfig.HEVTUN_RW_TIMEOUT) initSharedPreference() @@ -254,6 +254,7 @@ class SettingsActivity : BaseActivity() { listOf( AppConfig.PREF_SNIFFING_ENABLED, + AppConfig.PREF_USE_HEV_TUNNEL ).forEach { key -> findPreference(key)?.isChecked = MmkvManager.decodeSettingsBool(key, true) @@ -269,8 +270,7 @@ class SettingsActivity : BaseActivity() { AppConfig.PREF_DOUBLE_COLUMN_DISPLAY, AppConfig.PREF_PREFER_IPV6, AppConfig.PREF_PROXY_SHARING, - AppConfig.PREF_ALLOW_INSECURE, - AppConfig.PREF_USE_HEV_TUNNEL + AppConfig.PREF_ALLOW_INSECURE ).forEach { key -> findPreference(key)?.isChecked = MmkvManager.decodeSettingsBool(key, false) @@ -298,8 +298,8 @@ class SettingsActivity : BaseActivity() { private fun updateMode(mode: String?) { val vpn = mode == VPN - perAppProxy?.isEnabled = vpn - perAppProxy?.isChecked = MmkvManager.decodeSettingsBool(AppConfig.PREF_PER_APP_PROXY, false) +// perAppProxy?.isEnabled = vpn +// perAppProxy?.isChecked = MmkvManager.decodeSettingsBool(AppConfig.PREF_PER_APP_PROXY, false) localDns?.isEnabled = vpn fakeDns?.isEnabled = vpn appendHttpProxy?.isEnabled = vpn diff --git a/v2rayng/V2rayNG/app/src/main/java/com/v2ray/ang/viewmodel/SettingsViewModel.kt b/v2rayng/V2rayNG/app/src/main/java/com/v2ray/ang/viewmodel/SettingsViewModel.kt index aec6c6c54a..5e211e96bf 100644 --- a/v2rayng/V2rayNG/app/src/main/java/com/v2ray/ang/viewmodel/SettingsViewModel.kt +++ b/v2rayng/V2rayNG/app/src/main/java/com/v2ray/ang/viewmodel/SettingsViewModel.kt @@ -75,20 +75,20 @@ class SettingsViewModel(application: Application) : AndroidViewModel(application AppConfig.PREF_APPEND_HTTP_PROXY, AppConfig.PREF_ALLOW_INSECURE, AppConfig.PREF_PREFER_IPV6, - AppConfig.PREF_PER_APP_PROXY, +// AppConfig.PREF_PER_APP_PROXY, AppConfig.PREF_BYPASS_APPS, AppConfig.PREF_CONFIRM_REMOVE, AppConfig.PREF_START_SCAN_IMMEDIATE, AppConfig.PREF_DOUBLE_COLUMN_DISPLAY, AppConfig.SUBSCRIPTION_AUTO_UPDATE, AppConfig.PREF_FRAGMENT_ENABLED, - AppConfig.PREF_MUX_ENABLED, - AppConfig.PREF_USE_HEV_TUNNEL + AppConfig.PREF_MUX_ENABLED -> { MmkvManager.encodeSettings(key, sharedPreferences.getBoolean(key, false)) } - AppConfig.PREF_SNIFFING_ENABLED -> { + AppConfig.PREF_SNIFFING_ENABLED, + AppConfig.PREF_USE_HEV_TUNNEL -> { MmkvManager.encodeSettings(key, sharedPreferences.getBoolean(key, true)) } diff --git a/v2rayng/V2rayNG/app/src/main/res/values-zh-rCN/strings.xml b/v2rayng/V2rayNG/app/src/main/res/values-zh-rCN/strings.xml index 974edcd01a..019c77b562 100644 --- a/v2rayng/V2rayNG/app/src/main/res/values-zh-rCN/strings.xml +++ b/v2rayng/V2rayNG/app/src/main/res/values-zh-rCN/strings.xml @@ -20,7 +20,7 @@ 启动服务失败 - 配置文件 + 配置项 添加配置 保存配置 删除配置 @@ -90,10 +90,10 @@ 没有数据 不正确的协议 解码失败 - 选择一个配置文件 + 选择一个配置 请安装一个文件管理器 自定义配置 - 无效的配置文件 + 无效的配置 内容 剪贴板中没有数据 无效的网址 @@ -205,8 +205,8 @@ 本地 DNS 端口 本地 DNS 端口 - 删除配置文件确认 - 删除配置文件是否需要用户二次确认 + 删除配置确认 + 删除配置是否需要用户二次确认 立即启动扫码 启动时立即打开相机扫描,否则可在工具栏选择扫码或选照片 @@ -215,7 +215,7 @@ 浏览器 / 一些支持的应用 将直接使用 HTTP 代理, 而不经过虚拟网卡设备 (Android 10+) 启用双列显示 - 配置文件列表以双列显示,允许在屏幕上显示更多内容。需要重启应用生效。 + 配置列表以双列显示,允许在屏幕上显示更多内容。需要重启应用生效。 反馈 @@ -266,16 +266,16 @@ 启用更新 启用自动更新 允许不安全的 HTTP 地址 - 前置代理配置文件别名 - 落地代理配置文件別名 - 请确保配置文件别名存在并唯一 + 前置代理配置别名 + 落地代理配置別名 + 请确保配置别名存在并唯一 更新当前组订阅 测试当前组配置 Tcping 测试当前组配置真连接 生成当前组智能选择配置 资源文件 按测试结果排序 - 过滤配置文件 + 过滤配置 所有分组 删除 %d 个重复配置 @@ -366,7 +366,7 @@ - 跟随配置文件 + 跟随配置 绕过 不绕过 diff --git a/v2rayng/V2rayNG/app/src/main/res/values/strings.xml b/v2rayng/V2rayNG/app/src/main/res/values/strings.xml index 13683b0df1..8630f00c6f 100644 --- a/v2rayng/V2rayNG/app/src/main/res/values/strings.xml +++ b/v2rayng/V2rayNG/app/src/main/res/values/strings.xml @@ -21,13 +21,13 @@ Start Services Failure - Configuration file - Add config - Save config - Delete config - Import config from QRcode - Import config from Clipboard - Import config from locally + Configuration + Add configuration + Save configuration + Delete configuration + Import configuration from QRcode + Import configuration from Clipboard + Import configuration from locally Type manually[VMess] Type manually[VLESS] Type manually[Shadowsocks] @@ -91,16 +91,16 @@ There is nothing Incorrect protocol Decoding failed - Select a Config File + Select a configuration Please install a File Manager. - Customize Config - Invalid Config + Customize configuration + Invalid configuration Content There is no data in the clipboard Invalid URL Please do not use the insecure HTTP protocol subscription address Ensure inbounds port is consistent with the settings - Config malformed + Configuration malformed Host(SNI)(Optional) Action not allowed Obfs password @@ -211,8 +211,8 @@ Local DNS port Local DNS port - Delete configuration file confirmation - Whether to delete the configuration file requires a second confirmation by the user + Delete configuration confirmation + Whether to delete the configuration requires a second confirmation by the user Start scanning immediately Open the camera to scan immediately at startup, otherwise you can choose to scan the code or select a photo in the toolbar @@ -281,7 +281,7 @@ Creating Intelligent Selection Current Group Configuration Asset files Sorting by test results - Filter configuration file + Filter configuration All groups Delete %d duplicate configurations Delete %d configurations @@ -378,7 +378,7 @@ - Follow config + Follow configuration Bypass Not Bypass diff --git a/v2rayng/V2rayNG/app/src/main/res/xml/pref_settings.xml b/v2rayng/V2rayNG/app/src/main/res/xml/pref_settings.xml index 2ad2679237..1715fb7c53 100644 --- a/v2rayng/V2rayNG/app/src/main/res/xml/pref_settings.xml +++ b/v2rayng/V2rayNG/app/src/main/res/xml/pref_settings.xml @@ -25,10 +25,10 @@ android:summary="@string/summary_pref_prefer_ipv6" android:title="@string/title_pref_prefer_ipv6" /> - + + + + diff --git a/xray-core/.github/workflows/release-win7.yml b/xray-core/.github/workflows/release-win7.yml index 0077802965..294a5e1bfb 100644 --- a/xray-core/.github/workflows/release-win7.yml +++ b/xray-core/.github/workflows/release-win7.yml @@ -132,7 +132,7 @@ jobs: mv build_assets Xray-${{ env.ASSET_NAME }} - name: Upload files to Artifacts - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v5 with: name: Xray-${{ env.ASSET_NAME }} path: | diff --git a/xray-core/.github/workflows/release.yml b/xray-core/.github/workflows/release.yml index eaf919b6c5..b717f3e948 100644 --- a/xray-core/.github/workflows/release.yml +++ b/xray-core/.github/workflows/release.yml @@ -238,7 +238,7 @@ jobs: mv build_assets Xray-${{ env.ASSET_NAME }} - name: Upload files to Artifacts - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v5 with: name: Xray-${{ env.ASSET_NAME }} path: | diff --git a/yt-dlp/.github/workflows/build.yml b/yt-dlp/.github/workflows/build.yml index fc89dbfe05..69f8eb0c8d 100644 --- a/yt-dlp/.github/workflows/build.yml +++ b/yt-dlp/.github/workflows/build.yml @@ -214,7 +214,7 @@ jobs: - name: Build Unix platform-independent binary run: | - make all tar + make all-extra tar - name: Verify --update-to if: vars.UPDATE_TO_VERIFICATION diff --git a/yt-dlp/.github/workflows/challenge-tests.yml b/yt-dlp/.github/workflows/challenge-tests.yml new file mode 100644 index 0000000000..89895eb07b --- /dev/null +++ b/yt-dlp/.github/workflows/challenge-tests.yml @@ -0,0 +1,77 @@ +name: Challenge Tests +on: + push: + paths: + - .github/workflows/challenge-tests.yml + - test/test_jsc/*.py + - yt_dlp/extractor/youtube/jsc/**.js + - yt_dlp/extractor/youtube/jsc/**.py + - yt_dlp/extractor/youtube/pot/**.py + - yt_dlp/utils/_jsruntime.py + pull_request: + paths: + - .github/workflows/challenge-tests.yml + - test/test_jsc/*.py + - yt_dlp/extractor/youtube/jsc/**.js + - yt_dlp/extractor/youtube/jsc/**.py + - yt_dlp/extractor/youtube/pot/**.py + - yt_dlp/utils/_jsruntime.py +permissions: + contents: read + +concurrency: + group: challenge-tests-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: ${{ github.event_name == 'pull_request' }} + +jobs: + tests: + name: Challenge Tests + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, windows-latest] + python-version: ['3.10', '3.11', '3.12', '3.13', '3.14', pypy-3.11] + env: + QJS_VERSION: '2025-04-26' # Earliest version with rope strings + steps: + - uses: actions/checkout@v5 + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v6 + with: + python-version: ${{ matrix.python-version }} + - name: Install Deno + uses: denoland/setup-deno@v2 + with: + deno-version: '2.0.0' # minimum supported version + - name: Install Bun + uses: oven-sh/setup-bun@v2 + with: + # minimum supported version is 1.0.31 but earliest available Windows version is 1.1.0 + bun-version: ${{ (matrix.os == 'windows-latest' && '1.1.0') || '1.0.31' }} + - name: Install Node + uses: actions/setup-node@v6 + with: + node-version: '20.0' # minimum supported version + - name: Install QuickJS (Linux) + if: matrix.os == 'ubuntu-latest' + run: | + wget "https://bellard.org/quickjs/binary_releases/quickjs-linux-x86_64-${QJS_VERSION}.zip" -O quickjs.zip + unzip quickjs.zip qjs + sudo install qjs /usr/local/bin/qjs + - name: Install QuickJS (Windows) + if: matrix.os == 'windows-latest' + shell: pwsh + run: | + Invoke-WebRequest "https://bellard.org/quickjs/binary_releases/quickjs-win-x86_64-${Env:QJS_VERSION}.zip" -OutFile quickjs.zip + unzip quickjs.zip + - name: Install test requirements + run: | + python ./devscripts/install_deps.py --print --only-optional-groups --include-group test > requirements.txt + python ./devscripts/install_deps.py --print -c certifi -c requests -c urllib3 -c yt-dlp-ejs >> requirements.txt + python -m pip install -U -r requirements.txt + - name: Run tests + timeout-minutes: 15 + run: | + python -m yt_dlp -v --js-runtimes node --js-runtimes bun --js-runtimes quickjs || true + python ./devscripts/run_tests.py test/test_jsc -k download diff --git a/yt-dlp/.github/workflows/core.yml b/yt-dlp/.github/workflows/core.yml index e813b8f629..ae3dc95e1b 100644 --- a/yt-dlp/.github/workflows/core.yml +++ b/yt-dlp/.github/workflows/core.yml @@ -7,6 +7,7 @@ on: - test/** - yt_dlp/**.py - '!yt_dlp/extractor/**.py' + - yt_dlp/extractor/youtube/**.py - yt_dlp/extractor/__init__.py - yt_dlp/extractor/common.py - yt_dlp/extractor/extractors.py @@ -17,6 +18,7 @@ on: - test/** - yt_dlp/**.py - '!yt_dlp/extractor/**.py' + - yt_dlp/extractor/youtube/**.py - yt_dlp/extractor/__init__.py - yt_dlp/extractor/common.py - yt_dlp/extractor/extractors.py diff --git a/yt-dlp/.github/workflows/release.yml b/yt-dlp/.github/workflows/release.yml index b8f1ed78ea..afe1d384b4 100644 --- a/yt-dlp/.github/workflows/release.yml +++ b/yt-dlp/.github/workflows/release.yml @@ -269,9 +269,10 @@ jobs: "[![Master](https://img.shields.io/badge/Master%20builds-lightblue.svg?style=for-the-badge)]" \ "(https://github.com/${MASTER_REPO}/releases/latest \"Master builds\")" >> ./RELEASE_NOTES fi - printf '\n\n%s\n\n%s%s\n\n---\n' \ + printf '\n\n%s\n\n%s%s%s\n\n---\n' \ "#### A description of the various files is in the [README](https://github.com/${REPOSITORY}#release-files)" \ - "The PyInstaller-bundled executables are subject to the licenses described in " \ + "The zipimport Unix executable contains code licensed under ISC and MIT. " \ + "The PyInstaller-bundled executables are subject to these and other licenses, all of which are compiled in " \ "[THIRD_PARTY_LICENSES.txt](https://github.com/${BASE_REPO}/blob/${HEAD_SHA}/THIRD_PARTY_LICENSES.txt)" >> ./RELEASE_NOTES python ./devscripts/make_changelog.py -vv --collapsible >> ./RELEASE_NOTES printf '%s\n\n' '**This is a pre-release build**' >> ./PRERELEASE_NOTES diff --git a/yt-dlp/.github/workflows/signature-tests.yml b/yt-dlp/.github/workflows/signature-tests.yml deleted file mode 100644 index 1b310db6aa..0000000000 --- a/yt-dlp/.github/workflows/signature-tests.yml +++ /dev/null @@ -1,41 +0,0 @@ -name: Signature Tests -on: - push: - paths: - - .github/workflows/signature-tests.yml - - test/test_youtube_signature.py - - yt_dlp/jsinterp.py - pull_request: - paths: - - .github/workflows/signature-tests.yml - - test/test_youtube_signature.py - - yt_dlp/jsinterp.py -permissions: - contents: read - -concurrency: - group: signature-tests-${{ github.event.pull_request.number || github.ref }} - cancel-in-progress: ${{ github.event_name == 'pull_request' }} - -jobs: - tests: - name: Signature Tests - runs-on: ${{ matrix.os }} - strategy: - fail-fast: false - matrix: - os: [ubuntu-latest, windows-latest] - python-version: ['3.10', '3.11', '3.12', '3.13', '3.14', pypy-3.11] - steps: - - uses: actions/checkout@v5 - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v6 - with: - python-version: ${{ matrix.python-version }} - - name: Install test requirements - run: python ./devscripts/install_deps.py --only-optional-groups --include-group test - - name: Run tests - timeout-minutes: 15 - run: | - python3 -m yt_dlp -v || true # Print debug head - python3 ./devscripts/run_tests.py test/test_youtube_signature.py diff --git a/yt-dlp/.gitignore b/yt-dlp/.gitignore index 40bb34d2aa..af6da639db 100644 --- a/yt-dlp/.gitignore +++ b/yt-dlp/.gitignore @@ -107,6 +107,7 @@ README.txt test/testdata/sigs/player-*.js test/testdata/thumbnails/empty.webp test/testdata/thumbnails/foo\ %d\ bar/foo_%d.* +.ejs-* # Binary /youtube-dl @@ -129,3 +130,6 @@ yt-dlp.zip # Plugins ytdlp_plugins/ yt-dlp-plugins + +# Packages +yt_dlp_ejs/ diff --git a/yt-dlp/Makefile b/yt-dlp/Makefile index 290955d209..88727219b8 100644 --- a/yt-dlp/Makefile +++ b/yt-dlp/Makefile @@ -1,4 +1,5 @@ all: lazy-extractors yt-dlp doc pypi-files +all-extra: lazy-extractors yt-dlp-extra doc pypi-files clean: clean-test clean-dist clean-all: clean clean-cache completions: completion-bash completion-fish completion-zsh @@ -15,7 +16,11 @@ pypi-files: AUTHORS Changelog.md LICENSE README.md README.txt supportedsites \ .PHONY: all clean clean-all clean-test clean-dist clean-cache \ completions completion-bash completion-fish completion-zsh \ doc issuetemplates supportedsites ot offlinetest codetest test \ - tar pypi-files lazy-extractors install uninstall + tar pypi-files lazy-extractors install uninstall \ + all-extra yt-dlp-extra current-ejs-version + +.IGNORE: current-ejs-version +.SILENT: current-ejs-version clean-test: rm -rf tmp/ *.annotations.xml *.aria2 *.description *.dump *.frag \ @@ -25,7 +30,8 @@ clean-test: test/testdata/sigs/player-*.js test/testdata/thumbnails/empty.webp "test/testdata/thumbnails/foo %d bar/foo_%d."* clean-dist: rm -rf yt-dlp.1.temp.md yt-dlp.1 README.txt MANIFEST build/ dist/ .coverage cover/ yt-dlp.tar.gz completions/ \ - yt_dlp/extractor/lazy_extractors.py *.spec CONTRIBUTING.md.tmp yt-dlp yt-dlp.exe yt_dlp.egg-info/ AUTHORS + yt_dlp/extractor/lazy_extractors.py *.spec CONTRIBUTING.md.tmp yt-dlp yt-dlp.exe yt_dlp.egg-info/ AUTHORS \ + yt-dlp.zip .ejs-* yt_dlp_ejs/ clean-cache: find . \( \ -type d -name ".*_cache" -o -type d -name __pycache__ -o -name "*.pyc" -o -name "*.class" \ @@ -81,28 +87,49 @@ test: offlinetest: codetest $(PYTHON) -m pytest -Werror -m "not download" -CODE_FOLDERS_CMD = find yt_dlp -type f -name '__init__.py' | sed 's,/__init__.py,,' | grep -v '/__' | sort -CODE_FOLDERS != $(CODE_FOLDERS_CMD) -CODE_FOLDERS ?= $(shell $(CODE_FOLDERS_CMD)) -CODE_FILES_CMD = for f in $(CODE_FOLDERS) ; do echo "$$f" | sed 's,$$,/*.py,' ; done -CODE_FILES != $(CODE_FILES_CMD) -CODE_FILES ?= $(shell $(CODE_FILES_CMD)) -yt-dlp: $(CODE_FILES) +PY_CODE_FOLDERS_CMD = find yt_dlp -type f -name '__init__.py' | sed 's|/__init__\.py||' | grep -v '/__' | sort +PY_CODE_FOLDERS != $(PY_CODE_FOLDERS_CMD) +PY_CODE_FOLDERS ?= $(shell $(PY_CODE_FOLDERS_CMD)) + +PY_CODE_FILES_CMD = for f in $(PY_CODE_FOLDERS) ; do echo "$$f" | sed 's|$$|/*.py|' ; done +PY_CODE_FILES != $(PY_CODE_FILES_CMD) +PY_CODE_FILES ?= $(shell $(PY_CODE_FILES_CMD)) + +JS_CODE_FOLDERS_CMD = find yt_dlp -type f -name '*.js' | sed 's|/[^/]\{1,\}\.js$$||' | uniq +JS_CODE_FOLDERS != $(JS_CODE_FOLDERS_CMD) +JS_CODE_FOLDERS ?= $(shell $(JS_CODE_FOLDERS_CMD)) + +JS_CODE_FILES_CMD = for f in $(JS_CODE_FOLDERS) ; do echo "$$f" | sed 's|$$|/*.js|' ; done +JS_CODE_FILES != $(JS_CODE_FILES_CMD) +JS_CODE_FILES ?= $(shell $(JS_CODE_FILES_CMD)) + +yt-dlp.zip: $(PY_CODE_FILES) $(JS_CODE_FILES) mkdir -p zip - for d in $(CODE_FOLDERS) ; do \ + for d in $(PY_CODE_FOLDERS) ; do \ mkdir -p zip/$$d ;\ cp -pPR $$d/*.py zip/$$d/ ;\ done - (cd zip && touch -t 200001010101 $(CODE_FILES)) - mv zip/yt_dlp/__main__.py zip/ - (cd zip && zip -q ../yt-dlp $(CODE_FILES) __main__.py) + for d in $(JS_CODE_FOLDERS) ; do \ + mkdir -p zip/$$d ;\ + cp -pPR $$d/*.js zip/$$d/ ;\ + done + (cd zip && touch -t 200001010101 $(PY_CODE_FILES) $(JS_CODE_FILES)) + rm -f zip/yt_dlp/__main__.py + (cd zip && zip -q ../yt-dlp.zip $(PY_CODE_FILES) $(JS_CODE_FILES)) rm -rf zip + +yt-dlp: yt-dlp.zip + mkdir -p zip + cp -pP yt_dlp/__main__.py zip/ + touch -t 200001010101 zip/__main__.py + (cd zip && zip -q ../yt-dlp.zip __main__.py) echo '#!$(PYTHON)' > yt-dlp cat yt-dlp.zip >> yt-dlp rm yt-dlp.zip chmod a+x yt-dlp + rm -rf zip -README.md: $(CODE_FILES) devscripts/make_readme.py +README.md: $(PY_CODE_FILES) devscripts/make_readme.py COLUMNS=80 $(PYTHON) yt_dlp/__main__.py --ignore-config --help | $(PYTHON) devscripts/make_readme.py CONTRIBUTING.md: README.md devscripts/make_contributing.py @@ -127,15 +154,15 @@ yt-dlp.1: README.md devscripts/prepare_manpage.py pandoc -s -f $(MARKDOWN) -t man yt-dlp.1.temp.md -o yt-dlp.1 rm -f yt-dlp.1.temp.md -completions/bash/yt-dlp: $(CODE_FILES) devscripts/bash-completion.in +completions/bash/yt-dlp: $(PY_CODE_FILES) devscripts/bash-completion.in mkdir -p completions/bash $(PYTHON) devscripts/bash-completion.py -completions/zsh/_yt-dlp: $(CODE_FILES) devscripts/zsh-completion.in +completions/zsh/_yt-dlp: $(PY_CODE_FILES) devscripts/zsh-completion.in mkdir -p completions/zsh $(PYTHON) devscripts/zsh-completion.py -completions/fish/yt-dlp.fish: $(CODE_FILES) devscripts/fish-completion.in +completions/fish/yt-dlp.fish: $(PY_CODE_FILES) devscripts/fish-completion.in mkdir -p completions/fish $(PYTHON) devscripts/fish-completion.py @@ -172,3 +199,45 @@ CONTRIBUTORS: Changelog.md echo 'Updating $@ from git commit history' ; \ $(PYTHON) devscripts/make_changelog.py -v -c > /dev/null ; \ fi + +# The following EJS_-prefixed variables are auto-generated by devscripts/update_ejs.py +# DO NOT EDIT! +EJS_VERSION = 0.3.0 +EJS_WHEEL_NAME = yt_dlp_ejs-0.3.0-py3-none-any.whl +EJS_WHEEL_HASH = sha256:abbf269fa1674cab7b7b266e51e89e0e60b01a11a0fdf3cd63528683190cdd07 +EJS_PY_FOLDERS = yt_dlp_ejs yt_dlp_ejs/yt yt_dlp_ejs/yt/solver +EJS_PY_FILES = yt_dlp_ejs/__init__.py yt_dlp_ejs/_version.py yt_dlp_ejs/yt/__init__.py yt_dlp_ejs/yt/solver/__init__.py +EJS_JS_FOLDERS = yt_dlp_ejs/yt/solver +EJS_JS_FILES = yt_dlp_ejs/yt/solver/core.min.js yt_dlp_ejs/yt/solver/lib.min.js + +yt-dlp-extra: current-ejs-version .ejs-$(EJS_VERSION) $(EJS_PY_FILES) $(EJS_JS_FILES) yt-dlp.zip + mkdir -p zip + for d in $(EJS_PY_FOLDERS) ; do \ + mkdir -p zip/$$d ;\ + cp -pPR $$d/*.py zip/$$d/ ;\ + done + for d in $(EJS_JS_FOLDERS) ; do \ + mkdir -p zip/$$d ;\ + cp -pPR $$d/*.js zip/$$d/ ;\ + done + (cd zip && touch -t 200001010101 $(EJS_PY_FILES) $(EJS_JS_FILES)) + (cd zip && zip -q ../yt-dlp.zip $(EJS_PY_FILES) $(EJS_JS_FILES)) + cp -pP yt_dlp/__main__.py zip/ + touch -t 200001010101 zip/__main__.py + (cd zip && zip -q ../yt-dlp.zip __main__.py) + echo '#!$(PYTHON)' > yt-dlp + cat yt-dlp.zip >> yt-dlp + rm yt-dlp.zip + chmod a+x yt-dlp + rm -rf zip + +.ejs-$(EJS_VERSION): + @echo Downloading yt-dlp-ejs + @echo "yt-dlp-ejs==$(EJS_VERSION) --hash $(EJS_WHEEL_HASH)" > .ejs-requirements.txt + $(PYTHON) -m pip download -d ./build --no-deps --require-hashes -r .ejs-requirements.txt + unzip -o build/$(EJS_WHEEL_NAME) "yt_dlp_ejs/*" + @touch .ejs-$(EJS_VERSION) + +current-ejs-version: + rm -rf .ejs-* + touch .ejs-$$($(PYTHON) -c 'import sys; sys.path = [""]; from yt_dlp_ejs import version; print(version)' 2>/dev/null) diff --git a/yt-dlp/README.md b/yt-dlp/README.md index 7b3cd0970d..4e7f442a60 100644 --- a/yt-dlp/README.md +++ b/yt-dlp/README.md @@ -145,9 +145,11 @@ While yt-dlp is licensed under the [Unlicense](LICENSE), many of the release fil Most notably, the PyInstaller-bundled executables include GPLv3+ licensed code, and as such the combined work is licensed under [GPLv3+](https://www.gnu.org/licenses/gpl-3.0.html). -See [THIRD_PARTY_LICENSES.txt](THIRD_PARTY_LICENSES.txt) for details. +The zipimport Unix executable (`yt-dlp`) contains [ISC](https://github.com/meriyah/meriyah/blob/main/LICENSE.md) licensed code from [`meriyah`](https://github.com/meriyah/meriyah) and [MIT](https://github.com/davidbonnet/astring/blob/main/LICENSE) licensed code from [`astring`](https://github.com/davidbonnet/astring). -The zipimport binary (`yt-dlp`), the source tarball (`yt-dlp.tar.gz`), and the PyPI source distribution & wheel only contain code licensed under the [Unlicense](LICENSE). +See [THIRD_PARTY_LICENSES.txt](THIRD_PARTY_LICENSES.txt) for more details. + +The git repository, the source tarball (`yt-dlp.tar.gz`), the PyPI source distribution and the PyPI built distribution (wheel) only contain code licensed under the [Unlicense](LICENSE). @@ -201,7 +203,7 @@ Python versions 3.10+ (CPython) and 3.11+ (PyPy) are supported. Other versions a On Windows, [Microsoft Visual C++ 2010 SP1 Redistributable Package (x86)](https://download.microsoft.com/download/1/6/5/165255E7-1014-4D0A-B094-B6A430A6BFFC/vcredist_x86.exe) is also necessary to run yt-dlp. You probably already have this, but if the executable throws an error due to missing `MSVCR100.dll` you need to install it manually. --> -While all the other dependencies are optional, `ffmpeg` and `ffprobe` are highly recommended +While all the other dependencies are optional, `ffmpeg`, `ffprobe`, `yt-dlp-ejs` and a JavaScript runtime are highly recommended ### Strongly recommended @@ -211,6 +213,10 @@ While all the other dependencies are optional, `ffmpeg` and `ffprobe` are highly **Important**: What you need is ffmpeg *binary*, **NOT** [the Python package of the same name](https://pypi.org/project/ffmpeg) +* [**yt-dlp-ejs**](https://github.com/yt-dlp/ejs) - Required for deciphering YouTube n/sig values. Licensed under [Unlicense](https://github.com/yt-dlp/ejs/blob/main/LICENSE), bundles [MIT](https://github.com/davidbonnet/astring/blob/main/LICENSE) and [ISC](https://github.com/meriyah/meriyah/blob/main/LICENSE.md) components. + + A JavaScript runtime like [**deno**](https://deno.land) (recommended), [**node.js**](https://nodejs.org), [**bun**](https://bun.sh), or [**QuickJS**](https://bellard.org/quickjs/) is also required to run yt-dlp-ejs. See [the wiki](https://github.com/yt-dlp/yt-dlp/wiki/EJS). + ### Networking * [**certifi**](https://github.com/certifi/python-certifi)\* - Provides Mozilla's root certificate bundle. Licensed under [MPLv2](https://github.com/certifi/python-certifi/blob/master/LICENSE) * [**brotli**](https://github.com/google/brotli)\* or [**brotlicffi**](https://github.com/python-hyper/brotlicffi) - [Brotli](https://en.wikipedia.org/wiki/Brotli) content encoding support. Both licensed under MIT [1](https://github.com/google/brotli/blob/master/LICENSE) [2](https://github.com/python-hyper/brotlicffi/blob/master/LICENSE) @@ -235,7 +241,7 @@ The following provide support for impersonating browser requests. This may be re ### Misc * [**pycryptodomex**](https://github.com/Legrandin/pycryptodome)\* - For decrypting AES-128 HLS streams and various other data. Licensed under [BSD-2-Clause](https://github.com/Legrandin/pycryptodome/blob/master/LICENSE.rst) -* [**phantomjs**](https://github.com/ariya/phantomjs) - Used in extractors where javascript needs to be run. Licensed under [BSD-3-Clause](https://github.com/ariya/phantomjs/blob/master/LICENSE.BSD) +* [**phantomjs**](https://github.com/ariya/phantomjs) - Used in some extractors where JavaScript needs to be run. No longer used for YouTube. To be deprecated in the near future. Licensed under [BSD-3-Clause](https://github.com/ariya/phantomjs/blob/master/LICENSE.BSD) * [**secretstorage**](https://github.com/mitya57/secretstorage)\* - For `--cookies-from-browser` to access the **Gnome** keyring while decrypting cookies of **Chromium**-based browsers on **Linux**. Licensed under [BSD-3-Clause](https://github.com/mitya57/secretstorage/blob/master/LICENSE) * Any external downloader that you want to use with `--downloader` @@ -362,6 +368,26 @@ Tip: Use `CTRL`+`F` (or `Command`+`F`) to search by keywords --no-plugin-dirs Clear plugin directories to search, including defaults and those provided by previous --plugin-dirs + --js-runtimes RUNTIME[:PATH] Additional JavaScript runtime to enable, + with an optional path to the runtime + location. This option can be used multiple + times to enable multiple runtimes. Supported + runtimes: deno, node, bun, quickjs. By + default, only "deno" runtime is enabled. + --no-js-runtimes Clear JavaScript runtimes to enable, + including defaults and those provided by + previous --js-runtimes + --remote-components COMPONENT Remote components to allow yt-dlp to fetch + when required. You can use this option + multiple times to allow multiple components. + Supported values: ejs:npm (external + JavaScript components from npm), ejs:github + (external JavaScript components from yt-dlp- + ejs GitHub). By default, no remote + components are allowed. + --no-remote-components Disallow fetching of all remote components, + including any previously allowed by + --remote-components or defaults. --flat-playlist Do not extract a playlist's URL result entries; some entry metadata may be missing and downloading may be bypassed @@ -1814,7 +1840,7 @@ The following extractors use this feature: #### youtube * `lang`: Prefer translated metadata (`title`, `description` etc) of this language code (case-sensitive). By default, the video primary language metadata is preferred, with a fallback to `en` translated. See [youtube/_base.py](https://github.com/yt-dlp/yt-dlp/blob/415b4c9f955b1a0391204bd24a7132590e7b3bdb/yt_dlp/extractor/youtube/_base.py#L402-L409) for the list of supported content language codes * `skip`: One or more of `hls`, `dash` or `translated_subs` to skip extraction of the m3u8 manifests, dash manifests and [auto-translated subtitles](https://github.com/yt-dlp/yt-dlp/issues/4090#issuecomment-1158102032) respectively -* `player_client`: Clients to extract video data from. The currently available clients are `web`, `web_safari`, `web_embedded`, `web_music`, `web_creator`, `mweb`, `ios`, `android`, `android_sdkless`, `android_vr`, `tv`, `tv_simply` and `tv_embedded`. By default, `android_sdkless,tv,web_safari,web` is used. `android_sdkless` is omitted if cookies are passed. If premium cookies are passed, `tv,web_creator,web_safari,web` is used instead. The `web_music` client is added for `music.youtube.com` URLs when logged-in cookies are used. The `web_embedded` client is added for age-restricted videos but only works if the video is embeddable. The `tv_embedded` and `web_creator` clients are added for age-restricted videos if account age-verification is required. Some clients, such as `web` and `web_music`, require a `po_token` for their formats to be downloadable. Some clients, such as `web_creator`, will only work with authentication. Not all clients support authentication via cookies. You can use `default` for the default clients, or you can use `all` for all clients (not recommended). You can prefix a client with `-` to exclude it, e.g. `youtube:player_client=default,-ios` +* `player_client`: Clients to extract video data from. The currently available clients are `web`, `web_safari`, `web_embedded`, `web_music`, `web_creator`, `mweb`, `ios`, `android`, `android_sdkless`, `android_vr`, `tv`, `tv_simply` and `tv_embedded`. By default, `tv,android_sdkless,web` is used. If no JavaScript runtime is available, then `android_sdkless,web_safari,web` is used. If logged-in cookies are passed to yt-dlp, then `tv,web_safari,web` is used for free accounts and `tv,web_creator,web` is used for premium accounts. The `web_music` client is added for `music.youtube.com` URLs when logged-in cookies are used. The `web_embedded` client is added for age-restricted videos but only works if the video is embeddable. The `tv_embedded` and `web_creator` clients are added for age-restricted videos if account age-verification is required. Some clients, such as `web` and `web_music`, require a `po_token` for their formats to be downloadable. Some clients, such as `web_creator`, will only work with authentication. Not all clients support authentication via cookies. You can use `default` for the default clients, or you can use `all` for all clients (not recommended). You can prefix a client with `-` to exclude it, e.g. `youtube:player_client=default,-ios` * `player_skip`: Skip some network requests that are generally needed for robust extraction. One or more of `configs` (skip client configs), `webpage` (skip initial webpage), `js` (skip js player), `initial_data` (skip initial data/next ep request). While these options can help reduce the number of requests needed or avoid some rate-limiting, they could cause issues such as missing formats or metadata. See [#860](https://github.com/yt-dlp/yt-dlp/pull/860) and [#12826](https://github.com/yt-dlp/yt-dlp/issues/12826) for more details * `webpage_skip`: Skip extraction of embedded webpage data. One or both of `player_response`, `initial_data`. These options are for testing purposes and don't skip any network requests * `player_params`: YouTube player parameters to use for player requests. Will overwrite any default ones set by yt-dlp. @@ -1833,6 +1859,10 @@ The following extractors use this feature: * `pot_trace`: Enable debug logging for PO Token fetching. Either `true` or `false` (default) * `fetch_pot`: Policy to use for fetching a PO Token from providers. One of `always` (always try fetch a PO Token regardless if the client requires one for the given context), `never` (never fetch a PO Token), or `auto` (default; only fetch a PO Token if the client requires one for the given context) * `playback_wait`: Duration (in seconds) to wait inbetween the extraction and download stages in order to ensure the formats are available. The default is `6` seconds +* `jsc_trace`: Enable debug logging for JS Challenge fetching. Either `true` or `false` (default) + +#### youtube-ejs +* `jitless`: Run suported Javascript engines in JIT-less mode. Supported runtimes are `deno`, `node` and `bun`. Provides better security at the cost of performance/speed. Do note that `node` and `bun` are still considered unsecure. Either `true` or `false` (default) #### youtubepot-webpo * `bind_to_visitor_id`: Whether to use the Visitor ID instead of Visitor Data for caching WebPO tokens. Either `true` (default) or `false` diff --git a/yt-dlp/THIRD_PARTY_LICENSES.txt b/yt-dlp/THIRD_PARTY_LICENSES.txt index 1040046541..f7977064a0 100644 --- a/yt-dlp/THIRD_PARTY_LICENSES.txt +++ b/yt-dlp/THIRD_PARTY_LICENSES.txt @@ -4431,3 +4431,43 @@ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + + +-------------------------------------------------------------------------------- +Meriyah | ISC +URL: https://github.com/meriyah/meriyah +-------------------------------------------------------------------------------- +ISC License + +Copyright (c) 2019 and later, KFlash and others. + +Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + + +-------------------------------------------------------------------------------- +Astring | MIT +URL: https://github.com/davidbonnet/astring/ +-------------------------------------------------------------------------------- +Copyright (c) 2015, David Bonnet + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/yt-dlp/devscripts/generate_third_party_licenses.py b/yt-dlp/devscripts/generate_third_party_licenses.py index db615d2e35..322d56f633 100644 --- a/yt-dlp/devscripts/generate_third_party_licenses.py +++ b/yt-dlp/devscripts/generate_third_party_licenses.py @@ -271,6 +271,19 @@ DEPENDENCIES: list[Dependency] = [ license_url='https://raw.githubusercontent.com/python-websockets/websockets/refs/heads/main/LICENSE', project_url='https://websockets.readthedocs.io/', ), + # Dependencies of yt-dlp-ejs + Dependency( + name='Meriyah', + license='ISC', + license_url='https://raw.githubusercontent.com/meriyah/meriyah/refs/heads/main/LICENSE.md', + project_url='https://github.com/meriyah/meriyah', + ), + Dependency( + name='Astring', + license='MIT', + license_url='https://raw.githubusercontent.com/davidbonnet/astring/refs/heads/main/LICENSE', + project_url='https://github.com/davidbonnet/astring/', + ), ] diff --git a/yt-dlp/devscripts/update_ejs.py b/yt-dlp/devscripts/update_ejs.py new file mode 100644 index 0000000000..cffb1aa2b4 --- /dev/null +++ b/yt-dlp/devscripts/update_ejs.py @@ -0,0 +1,164 @@ +#!/usr/bin/env python3 +from __future__ import annotations + +import contextlib +import io +import json +import hashlib +import pathlib +import urllib.request +import zipfile + + +TEMPLATE = '''\ +# This file is generated by devscripts/update_ejs.py. DO NOT MODIFY! + +VERSION = {version!r} +HASHES = {{ +{hash_mapping} +}} +''' +PREFIX = ' "yt-dlp-ejs==' +BASE_PATH = pathlib.Path(__file__).parent.parent +PYPROJECT_PATH = BASE_PATH / 'pyproject.toml' +PACKAGE_PATH = BASE_PATH / 'yt_dlp/extractor/youtube/jsc/_builtin/vendor' +RELEASE_URL = 'https://api.github.com/repos/yt-dlp/ejs/releases/latest' +ASSETS = { + 'yt.solver.lib.js': False, + 'yt.solver.lib.min.js': False, + 'yt.solver.deno.lib.js': True, + 'yt.solver.bun.lib.js': True, + 'yt.solver.core.min.js': False, + 'yt.solver.core.js': True, +} +MAKEFILE_PATH = BASE_PATH / 'Makefile' + + +def request(url: str): + return contextlib.closing(urllib.request.urlopen(url)) + + +def makefile_variables( + version: str | None = None, + name: str | None = None, + digest: str | None = None, + data: bytes | None = None, + keys_only: bool = False, +) -> dict[str, str | None]: + assert keys_only or all(arg is not None for arg in (version, name, digest, data)) + + return { + 'EJS_VERSION': None if keys_only else version, + 'EJS_WHEEL_NAME': None if keys_only else name, + 'EJS_WHEEL_HASH': None if keys_only else digest, + 'EJS_PY_FOLDERS': None if keys_only else list_wheel_contents(data, 'py', files=False), + 'EJS_PY_FILES': None if keys_only else list_wheel_contents(data, 'py', folders=False), + 'EJS_JS_FOLDERS': None if keys_only else list_wheel_contents(data, 'js', files=False), + 'EJS_JS_FILES': None if keys_only else list_wheel_contents(data, 'js', folders=False), + } + + +def list_wheel_contents( + wheel_data: bytes, + suffix: str | None = None, + folders: bool = True, + files: bool = True, +) -> str: + assert folders or files, 'at least one of "folders" or "files" must be True' + + path_gen = (zinfo.filename for zinfo in zipfile.ZipFile(io.BytesIO(wheel_data)).infolist()) + filtered = filter(lambda path: path.startswith('yt_dlp_ejs/'), path_gen) + if suffix: + filtered = filter(lambda path: path.endswith(f'.{suffix}'), filtered) + + files_list = list(filtered) + if not folders: + return ' '.join(files_list) + + folders_list = list(dict.fromkeys(path.rpartition('/')[0] for path in files_list)) + if not files: + return ' '.join(folders_list) + + return ' '.join(folders_list + files_list) + + +def main(): + current_version = None + with PYPROJECT_PATH.open() as file: + for line in file: + if not line.startswith(PREFIX): + continue + current_version, _, _ = line.removeprefix(PREFIX).partition('"') + + if not current_version: + print('yt-dlp-ejs dependency line could not be found') + return + + makefile_info = makefile_variables(keys_only=True) + prefixes = tuple(f'{key} = ' for key in makefile_info) + with MAKEFILE_PATH.open() as file: + for line in file: + if not line.startswith(prefixes): + continue + key, _, val = line.partition(' = ') + makefile_info[key] = val.rstrip() + + with request(RELEASE_URL) as resp: + info = json.load(resp) + + version = info['tag_name'] + if version == current_version: + print(f'yt-dlp-ejs is up to date! ({version})') + return + + print(f'Updating yt-dlp-ejs from {current_version} to {version}') + hashes = [] + wheel_info = {} + for asset in info['assets']: + name = asset['name'] + is_wheel = name.startswith('yt_dlp_ejs-') and name.endswith('.whl') + if not is_wheel and name not in ASSETS: + continue + with request(asset['browser_download_url']) as resp: + data = resp.read() + + # verify digest from github + digest = asset['digest'] + algo, _, expected = digest.partition(':') + hexdigest = hashlib.new(algo, data).hexdigest() + assert hexdigest == expected, f'downloaded attest mismatch ({hexdigest!r} != {expected!r})' + + if is_wheel: + wheel_info = makefile_variables(version, name, digest, data) + continue + + # calculate sha3-512 digest + asset_hash = hashlib.sha3_512(data).hexdigest() + hashes.append(f' {name!r}: {asset_hash!r},') + + if ASSETS[name]: + (PACKAGE_PATH / name).write_bytes(data) + + hash_mapping = '\n'.join(hashes) + for asset_name in ASSETS: + assert asset_name in hash_mapping, f'{asset_name} not found in release' + + assert all(wheel_info.get(key) for key in makefile_info), 'wheel info not found in release' + + (PACKAGE_PATH / '_info.py').write_text(TEMPLATE.format( + version=version, + hash_mapping=hash_mapping, + )) + + content = PYPROJECT_PATH.read_text() + updated = content.replace(PREFIX + current_version, PREFIX + version) + PYPROJECT_PATH.write_text(updated) + + makefile = MAKEFILE_PATH.read_text() + for key in wheel_info: + makefile = makefile.replace(f'{key} = {makefile_info[key]}', f'{key} = {wheel_info[key]}') + MAKEFILE_PATH.write_text(makefile) + + +if __name__ == '__main__': + main() diff --git a/yt-dlp/pyproject.toml b/yt-dlp/pyproject.toml index 1d6e573791..0f6202ca08 100644 --- a/yt-dlp/pyproject.toml +++ b/yt-dlp/pyproject.toml @@ -56,6 +56,7 @@ default = [ "requests>=2.32.2,<3", "urllib3>=2.0.2,<3", "websockets>=13.0", + "yt-dlp-ejs==0.3.0", ] curl-cffi = [ "curl-cffi>=0.5.10,!=0.6.*,!=0.7.*,!=0.8.*,!=0.9.*,<0.14; implementation_name=='cpython'", @@ -122,7 +123,12 @@ artifacts = [ [tool.hatch.build.targets.wheel] packages = ["yt_dlp"] -artifacts = ["/yt_dlp/extractor/lazy_extractors.py"] +artifacts = [ + "/yt_dlp/extractor/lazy_extractors.py", +] +exclude = [ + "/yt_dlp/**/*.md", +] [tool.hatch.build.targets.wheel.shared-data] "completions/bash/yt-dlp" = "share/bash-completion/completions/yt-dlp" diff --git a/yt-dlp/test/test_jsc/conftest.py b/yt-dlp/test/test_jsc/conftest.py new file mode 100644 index 0000000000..28d6734122 --- /dev/null +++ b/yt-dlp/test/test_jsc/conftest.py @@ -0,0 +1,60 @@ +import re +import pathlib + +import pytest + +import yt_dlp.globals +from yt_dlp import YoutubeDL +from yt_dlp.extractor.common import InfoExtractor + + +_TESTDATA_PATH = pathlib.Path(__file__).parent.parent / 'testdata/sigs' +_player_re = re.compile(r'^.+/player/(?P[a-zA-Z0-9_/.-]+)\.js$') +_player_id_trans = str.maketrans(dict.fromkeys('/.-', '_')) + + +@pytest.fixture +def ie() -> InfoExtractor: + runtime_names = yt_dlp.globals.supported_js_runtimes.value + ydl = YoutubeDL({'js_runtimes': {key: {} for key in runtime_names}}) + ie = ydl.get_info_extractor('Youtube') + + def _load_player(video_id, player_url, fatal=True): + match = _player_re.match(player_url) + test_id = match.group('id').translate(_player_id_trans) + cached_file = _TESTDATA_PATH / f'player-{test_id}.js' + + if cached_file.exists(): + return cached_file.read_text() + + if code := ie._download_webpage(player_url, video_id, fatal=fatal): + _TESTDATA_PATH.mkdir(exist_ok=True, parents=True) + cached_file.write_text(code) + return code + + return None + + ie._load_player = _load_player + return ie + + +class MockLogger: + def trace(self, message: str): + print(f'trace: {message}') + + def debug(self, message: str, *, once=False): + print(f'debug: {message}') + + def info(self, message: str): + print(f'info: {message}') + + def warning(self, message: str, *, once=False): + print(f'warning: {message}') + + def error(self, message: str): + print(f'error: {message}') + + +@pytest.fixture +def logger(): + return MockLogger() diff --git a/yt-dlp/test/test_jsc/test_ejs_integration.py b/yt-dlp/test/test_jsc/test_ejs_integration.py new file mode 100644 index 0000000000..7984810794 --- /dev/null +++ b/yt-dlp/test/test_jsc/test_ejs_integration.py @@ -0,0 +1,128 @@ +from __future__ import annotations + +import dataclasses +import enum +import importlib.util +import json + +import pytest + +from yt_dlp.extractor.youtube.jsc.provider import ( + JsChallengeRequest, + JsChallengeType, + JsChallengeProviderResponse, + JsChallengeResponse, + NChallengeInput, + NChallengeOutput, + SigChallengeInput, + SigChallengeOutput, +) +from yt_dlp.extractor.youtube.jsc._builtin.bun import BunJCP +from yt_dlp.extractor.youtube.jsc._builtin.deno import DenoJCP +from yt_dlp.extractor.youtube.jsc._builtin.node import NodeJCP +from yt_dlp.extractor.youtube.jsc._builtin.quickjs import QuickJSJCP + + +_has_ejs = bool(importlib.util.find_spec('yt_dlp_ejs')) +pytestmark = pytest.mark.skipif(not _has_ejs, reason='yt-dlp-ejs not available') + + +class Variant(enum.Enum): + main = 'player_ias.vflset/en_US/base.js' + tcc = 'player_ias_tcc.vflset/en_US/base.js' + tce = 'player_ias_tce.vflset/en_US/base.js' + es5 = 'player_es5.vflset/en_US/base.js' + es6 = 'player_es6.vflset/en_US/base.js' + tv = 'tv-player-ias.vflset/tv-player-ias.js' + tv_es6 = 'tv-player-es6.vflset/tv-player-es6.js' + phone = 'player-plasma-ias-phone-en_US.vflset/base.js' + tablet = 'player-plasma-ias-tablet-en_US.vflset/base.js' + + +@dataclasses.dataclass +class Challenge: + player: str + variant: Variant + type: JsChallengeType + values: dict[str, str] = dataclasses.field(default_factory=dict) + + def url(self, /): + return f'https://www.youtube.com/s/player/{self.player}/{self.variant.value}' + + +CHALLENGES: list[Challenge] = [ + Challenge('3d3ba064', Variant.tce, JsChallengeType.N, { + 'ZdZIqFPQK-Ty8wId': 'qmtUsIz04xxiNW', + '4GMrWHyKI5cEvhDO': 'N9gmEX7YhKTSmw', + }), + Challenge('3d3ba064', Variant.tce, JsChallengeType.SIG, { + 'gN7a-hudCuAuPH6fByOk1_GNXN0yNMHShjZXS2VOgsEItAJz0tipeavEOmNdYN-wUtcEqD3bCXjc0iyKfAyZxCBGgIARwsSdQfJ2CJtt': + 'ttJC2JfQdSswRAIgGBCxZyAfKyi0cjXCb3gqEctUw-NYdNmOEvaepit0zJAtIEsgOV2SXZjhSHMNy0NXNG_1kNyBf6HPuAuCduh-a7O', + }), + Challenge('5ec65609', Variant.tce, JsChallengeType.N, { + '0eRGgQWJGfT5rFHFj': '4SvMpDQH-vBJCw', + }), + Challenge('5ec65609', Variant.tce, JsChallengeType.SIG, { + 'AAJAJfQdSswRQIhAMG5SN7-cAFChdrE7tLA6grH0rTMICA1mmDc0HoXgW3CAiAQQ4=CspfaF_vt82XH5yewvqcuEkvzeTsbRuHssRMyJQ=I': + 'AJfQdSswRQIhAMG5SN7-cAFChdrE7tLA6grI0rTMICA1mmDc0HoXgW3CAiAQQ4HCspfaF_vt82XH5yewvqcuEkvzeTsbRuHssRMyJQ==', + }), + Challenge('6742b2b9', Variant.tce, JsChallengeType.N, { + '_HPB-7GFg1VTkn9u': 'qUAsPryAO_ByYg', + 'K1t_fcB6phzuq2SF': 'Y7PcOt3VE62mog', + }), + Challenge('6742b2b9', Variant.tce, JsChallengeType.SIG, { + 'MMGZJMUucirzS_SnrSPYsc85CJNnTUi6GgR5NKn-znQEICACojE8MHS6S7uYq4TGjQX_D4aPk99hNU6wbTvorvVVMgIARwsSdQfJAA': + 'AJfQdSswRAIgMVVvrovTbw6UNh99kPa4D_XQjGT4qYu7S6SHM8EjoCACIEQnz-nKN5RgG6iUTnNJC58csYPSrnS_SzricuUMJZGM', + }), + Challenge('2b83d2e0', Variant.main, JsChallengeType.N, { + '0eRGgQWJGfT5rFHFj': 'euHbygrCMLksxd', + }), + Challenge('2b83d2e0', Variant.main, JsChallengeType.SIG, { + 'MMGZJMUucirzS_SnrSPYsc85CJNnTUi6GgR5NKn-znQEICACojE8MHS6S7uYq4TGjQX_D4aPk99hNU6wbTvorvVVMgIARwsSdQfJA': + '-MGZJMUucirzS_SnrSPYsc85CJNnTUi6GgR5NKnMznQEICACojE8MHS6S7uYq4TGjQX_D4aPk99hNU6wbTvorvVVMgIARwsSdQfJ', + }), + Challenge('638ec5c6', Variant.main, JsChallengeType.N, { + 'ZdZIqFPQK-Ty8wId': '1qov8-KM-yH', + }), + Challenge('638ec5c6', Variant.main, JsChallengeType.SIG, { + 'gN7a-hudCuAuPH6fByOk1_GNXN0yNMHShjZXS2VOgsEItAJz0tipeavEOmNdYN-wUtcEqD3bCXjc0iyKfAyZxCBGgIARwsSdQfJ2CJtt': + 'MhudCuAuP-6fByOk1_GNXN7gNHHShjyXS2VOgsEItAJz0tipeav0OmNdYN-wUtcEqD3bCXjc0iyKfAyZxCBGgIARwsSdQfJ2CJtt', + }), +] + +requests: list[JsChallengeRequest] = [] +responses: list[JsChallengeProviderResponse] = [] +for test in CHALLENGES: + input_type, output_type = { + JsChallengeType.N: (NChallengeInput, NChallengeOutput), + JsChallengeType.SIG: (SigChallengeInput, SigChallengeOutput), + }[test.type] + + request = JsChallengeRequest(test.type, input_type(test.url(), list(test.values.keys())), test.player) + requests.append(request) + responses.append(JsChallengeProviderResponse(request, JsChallengeResponse(test.type, output_type(test.values)))) + + +@pytest.fixture(params=[BunJCP, DenoJCP, NodeJCP, QuickJSJCP]) +def jcp(request, ie, logger): + obj = request.param(ie, logger, None) + if not obj.is_available(): + pytest.skip(f'{obj.PROVIDER_NAME} is not available') + obj.is_dev = True + return obj + + +@pytest.mark.download +def test_bulk_requests(jcp): + assert list(jcp.bulk_solve(requests)) == responses + + +@pytest.mark.download +def test_using_cached_player(jcp): + first_player_requests = requests[:3] + player = jcp._get_player(first_player_requests[0].video_id, first_player_requests[0].input.player_url) + initial = json.loads(jcp._run_js_runtime(jcp._construct_stdin(player, False, first_player_requests))) + preprocessed = initial.pop('preprocessed_player') + result = json.loads(jcp._run_js_runtime(jcp._construct_stdin(preprocessed, True, first_player_requests))) + + assert initial == result diff --git a/yt-dlp/test/test_jsc/test_provider.py b/yt-dlp/test/test_jsc/test_provider.py new file mode 100644 index 0000000000..3342f77546 --- /dev/null +++ b/yt-dlp/test/test_jsc/test_provider.py @@ -0,0 +1,194 @@ + +import pytest + +from yt_dlp.extractor.youtube.jsc.provider import ( + JsChallengeProvider, + JsChallengeRequest, + JsChallengeProviderResponse, + JsChallengeProviderRejectedRequest, + JsChallengeType, + JsChallengeResponse, + NChallengeOutput, + NChallengeInput, + JsChallengeProviderError, + register_provider, + register_preference, +) +from yt_dlp.extractor.youtube.pot._provider import IEContentProvider +from yt_dlp.utils import ExtractorError +from yt_dlp.extractor.youtube.jsc._registry import _jsc_preferences, _jsc_providers + + +class ExampleJCP(JsChallengeProvider): + PROVIDER_NAME = 'example-provider' + PROVIDER_VERSION = '0.0.1' + BUG_REPORT_LOCATION = 'https://example.com/issues' + + _SUPPORTED_TYPES = [JsChallengeType.N] + + def is_available(self) -> bool: + return True + + def _real_bulk_solve(self, requests): + for request in requests: + results = dict.fromkeys(request.input.challenges, 'example-solution') + response = JsChallengeResponse( + type=request.type, + output=NChallengeOutput(results=results)) + yield JsChallengeProviderResponse(request=request, response=response) + + +PLAYER_URL = 'https://example.com/player.js' + + +class TestJsChallengeProvider: + # note: some test covered in TestPoTokenProvider which shares the same base class + def test_base_type(self): + assert issubclass(JsChallengeProvider, IEContentProvider) + + def test_create_provider_missing_bulk_solve_method(self, ie, logger): + class MissingMethodsJCP(JsChallengeProvider): + def is_available(self) -> bool: + return True + + with pytest.raises(TypeError, match='bulk_solve'): + MissingMethodsJCP(ie=ie, logger=logger, settings={}) + + def test_create_provider_missing_available_method(self, ie, logger): + class MissingMethodsJCP(JsChallengeProvider): + def _real_bulk_solve(self, requests): + raise JsChallengeProviderRejectedRequest('Not implemented') + + with pytest.raises(TypeError, match='is_available'): + MissingMethodsJCP(ie=ie, logger=logger, settings={}) + + def test_barebones_provider(self, ie, logger): + class BarebonesProviderJCP(JsChallengeProvider): + def is_available(self) -> bool: + return True + + def _real_bulk_solve(self, requests): + raise JsChallengeProviderRejectedRequest('Not implemented') + + provider = BarebonesProviderJCP(ie=ie, logger=logger, settings={}) + assert provider.PROVIDER_NAME == 'BarebonesProvider' + assert provider.PROVIDER_KEY == 'BarebonesProvider' + assert provider.PROVIDER_VERSION == '0.0.0' + assert provider.BUG_REPORT_MESSAGE == 'please report this issue to the provider developer at (developer has not provided a bug report location) .' + + def test_example_provider_success(self, ie, logger): + provider = ExampleJCP(ie=ie, logger=logger, settings={}) + + request = JsChallengeRequest( + type=JsChallengeType.N, + input=NChallengeInput(player_url=PLAYER_URL, challenges=['example-challenge'])) + + request_two = JsChallengeRequest( + type=JsChallengeType.N, + input=NChallengeInput(player_url=PLAYER_URL, challenges=['example-challenge-2'])) + + responses = list(provider.bulk_solve([request, request_two])) + assert len(responses) == 2 + assert all(isinstance(r, JsChallengeProviderResponse) for r in responses) + assert responses == [ + JsChallengeProviderResponse( + request=request, + response=JsChallengeResponse( + type=JsChallengeType.N, + output=NChallengeOutput(results={'example-challenge': 'example-solution'}), + ), + ), + JsChallengeProviderResponse( + request=request_two, + response=JsChallengeResponse( + type=JsChallengeType.N, + output=NChallengeOutput(results={'example-challenge-2': 'example-solution'}), + ), + ), + ] + + def test_provider_unsupported_challenge_type(self, ie, logger): + provider = ExampleJCP(ie=ie, logger=logger, settings={}) + request_supported = JsChallengeRequest( + type=JsChallengeType.N, + input=NChallengeInput(player_url=PLAYER_URL, challenges=['example-challenge'])) + request_unsupported = JsChallengeRequest( + type=JsChallengeType.SIG, + input=NChallengeInput(player_url=PLAYER_URL, challenges=['example-challenge'])) + responses = list(provider.bulk_solve([request_supported, request_unsupported, request_supported])) + assert len(responses) == 3 + # Requests are validated first before continuing to _real_bulk_solve + assert isinstance(responses[0], JsChallengeProviderResponse) + assert isinstance(responses[0].error, JsChallengeProviderRejectedRequest) + assert responses[0].request is request_unsupported + assert str(responses[0].error) == 'JS Challenge type "JsChallengeType.SIG" is not supported by example-provider' + + assert responses[1:] == [ + JsChallengeProviderResponse( + request=request_supported, + response=JsChallengeResponse( + type=JsChallengeType.N, + output=NChallengeOutput(results={'example-challenge': 'example-solution'}), + ), + ), + JsChallengeProviderResponse( + request=request_supported, + response=JsChallengeResponse( + type=JsChallengeType.N, + output=NChallengeOutput(results={'example-challenge': 'example-solution'}), + ), + ), + ] + + def test_provider_get_player(self, ie, logger): + ie._load_player = lambda video_id, player_url, fatal: (video_id, player_url, fatal) + provider = ExampleJCP(ie=ie, logger=logger, settings={}) + assert provider._get_player('video123', PLAYER_URL) == ('video123', PLAYER_URL, True) + + def test_provider_get_player_error(self, ie, logger): + def raise_error(video_id, player_url, fatal): + raise ExtractorError('Failed to load player') + + ie._load_player = raise_error + provider = ExampleJCP(ie=ie, logger=logger, settings={}) + with pytest.raises(JsChallengeProviderError, match='Failed to load player for JS challenge'): + provider._get_player('video123', PLAYER_URL) + + def test_require_class_end_with_suffix(self, ie, logger): + class InvalidSuffix(JsChallengeProvider): + PROVIDER_NAME = 'invalid-suffix' + + def _real_bulk_solve(self, requests): + raise JsChallengeProviderRejectedRequest('Not implemented') + + def is_available(self) -> bool: + return True + + provider = InvalidSuffix(ie=ie, logger=logger, settings={}) + + with pytest.raises(AssertionError): + provider.PROVIDER_KEY # noqa: B018 + + +def test_register_provider(ie): + + @register_provider + class UnavailableProviderJCP(JsChallengeProvider): + def is_available(self) -> bool: + return False + + def _real_bulk_solve(self, requests): + raise JsChallengeProviderRejectedRequest('Not implemented') + + assert _jsc_providers.value.get('UnavailableProvider') == UnavailableProviderJCP + _jsc_providers.value.pop('UnavailableProvider') + + +def test_register_preference(ie): + before = len(_jsc_preferences.value) + + @register_preference(ExampleJCP) + def unavailable_preference(*args, **kwargs): + return 1 + + assert len(_jsc_preferences.value) == before + 1 diff --git a/yt-dlp/test/test_pot/test_pot_framework.py b/yt-dlp/test/test_pot/test_pot_framework.py index d2de1dd290..fae6c80027 100644 --- a/yt-dlp/test/test_pot/test_pot_framework.py +++ b/yt-dlp/test/test_pot/test_pot_framework.py @@ -1,6 +1,6 @@ import pytest -from yt_dlp.extractor.youtube.pot._provider import IEContentProvider +from yt_dlp.extractor.youtube.pot._provider import IEContentProvider, configuration_arg from yt_dlp.cookies import YoutubeDLCookieJar from yt_dlp.utils.networking import HTTPHeaderDict from yt_dlp.extractor.youtube.pot.provider import ( @@ -627,3 +627,13 @@ def test_logger_log_level(logger): assert logger.LogLevel('debuG') == logger.LogLevel.DEBUG assert logger.LogLevel(10) == logger.LogLevel.DEBUG assert logger.LogLevel('UNKNOWN') == logger.LogLevel.INFO + + +def test_configuration_arg(): + config = {'abc': ['123D'], 'xyz': ['456a', '789B']} + + assert configuration_arg(config, 'abc') == ['123d'] + assert configuration_arg(config, 'abc', default=['default']) == ['123d'] + assert configuration_arg(config, 'ABC', default=['default']) == ['default'] + assert configuration_arg(config, 'abc', casesense=True) == ['123D'] + assert configuration_arg(config, 'xyz', casesense=False) == ['456a', '789b'] diff --git a/yt-dlp/test/test_youtube_signature.py b/yt-dlp/test/test_youtube_signature.py deleted file mode 100644 index 2e9c974db2..0000000000 --- a/yt-dlp/test/test_youtube_signature.py +++ /dev/null @@ -1,504 +0,0 @@ -#!/usr/bin/env python3 - -# Allow direct execution -import os -import sys -import unittest - -sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) - - -import contextlib -import re -import string -import urllib.request - -from test.helper import FakeYDL, is_download_test -from yt_dlp.extractor import YoutubeIE -from yt_dlp.jsinterp import JSInterpreter - -_SIG_TESTS = [ - ( - 'https://s.ytimg.com/yts/jsbin/html5player-vflHOr_nV.js', - 86, - '>=<;:/.-[+*)(\'&%$#"!ZYX0VUTSRQPONMLKJIHGFEDCBA\\yxwvutsrqponmlkjihgfedcba987654321', - ), - ( - 'https://s.ytimg.com/yts/jsbin/html5player-vfldJ8xgI.js', - 85, - '3456789a0cdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRS[UVWXYZ!"#$%&\'()*+,-./:;<=>?@', - ), - ( - 'https://s.ytimg.com/yts/jsbin/html5player-vfle-mVwz.js', - 90, - ']\\[@?>=<;:/.-,+*)(\'&%$#"hZYXWVUTSRQPONMLKJIHGFEDCBAzyxwvutsrqponmlkjiagfedcb39876', - ), - ( - 'https://s.ytimg.com/yts/jsbin/html5player-en_US-vfl0Cbn9e.js', - 84, - 'O1I3456789abcde0ghijklmnopqrstuvwxyzABCDEFGHfJKLMN2PQRSTUVW@YZ!"#$%&\'()*+,-./:;<=', - ), - ( - 'https://s.ytimg.com/yts/jsbin/html5player-en_US-vflXGBaUN.js', - '2ACFC7A61CA478CD21425E5A57EBD73DDC78E22A.2094302436B2D377D14A3BBA23022D023B8BC25AA', - 'A52CB8B320D22032ABB3A41D773D2B6342034902.A22E87CDD37DBE75A5E52412DC874AC16A7CFCA2', - ), - ( - 'https://s.ytimg.com/yts/jsbin/html5player-en_US-vflBb0OQx.js', - 84, - '123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQ0STUVWXYZ!"#$%&\'()*+,@./:;<=>', - ), - ( - 'https://s.ytimg.com/yts/jsbin/html5player-en_US-vfl9FYC6l.js', - 83, - '123456789abcdefghijklmnopqr0tuvwxyzABCDETGHIJKLMNOPQRS>UVWXYZ!"#$%&\'()*+,-./:;<=F', - ), - ( - 'https://s.ytimg.com/yts/jsbin/html5player-en_US-vflCGk6yw/html5player.js', - '4646B5181C6C3020DF1D9C7FCFEA.AD80ABF70C39BD369CCCAE780AFBB98FA6B6CB42766249D9488C288', - '82C8849D94266724DC6B6AF89BBFA087EACCD963.B93C07FBA084ACAEFCF7C9D1FD0203C6C1815B6B', - ), - ( - 'https://s.ytimg.com/yts/jsbin/html5player-en_US-vflKjOTVq/html5player.js', - '312AA52209E3623129A412D56A40F11CB0AF14AE.3EE09501CB14E3BCDC3B2AE808BF3F1D14E7FBF12', - '112AA5220913623229A412D56A40F11CB0AF14AE.3EE0950FCB14EEBCDC3B2AE808BF331D14E7FBF3', - ), - ( - 'https://www.youtube.com/s/player/6ed0d907/player_ias.vflset/en_US/base.js', - '2aq0aqSyOoJXtK73m-uME_jv7-pT15gOFC02RFkGMqWpzEICs69VdbwQ0LDp1v7j8xx92efCJlYFYb1sUkkBSPOlPmXgIARw8JQ0qOAOAA', - 'AOq0QJ8wRAIgXmPlOPSBkkUs1bYFYlJCfe29xx8j7v1pDL2QwbdV96sCIEzpWqMGkFR20CFOg51Tp-7vj_EMu-m37KtXJoOySqa0', - ), - ( - 'https://www.youtube.com/s/player/3bb1f723/player_ias.vflset/en_US/base.js', - '2aq0aqSyOoJXtK73m-uME_jv7-pT15gOFC02RFkGMqWpzEICs69VdbwQ0LDp1v7j8xx92efCJlYFYb1sUkkBSPOlPmXgIARw8JQ0qOAOAA', - 'MyOSJXtKI3m-uME_jv7-pT12gOFC02RFkGoqWpzE0Cs69VdbwQ0LDp1v7j8xx92efCJlYFYb1sUkkBSPOlPmXgIARw8JQ0qOAOAA', - ), - ( - 'https://www.youtube.com/s/player/2f1832d2/player_ias.vflset/en_US/base.js', - '2aq0aqSyOoJXtK73m-uME_jv7-pT15gOFC02RFkGMqWpzEICs69VdbwQ0LDp1v7j8xx92efCJlYFYb1sUkkBSPOlPmXgIARw8JQ0qOAOAA', - '0QJ8wRAIgXmPlOPSBkkUs1bYFYlJCfe29xxAj7v1pDL0QwbdV96sCIEzpWqMGkFR20CFOg51Tp-7vj_EMu-m37KtXJ2OySqa0q', - ), - ( - 'https://www.youtube.com/s/player/643afba4/tv-player-ias.vflset/tv-player-ias.js', - '2aq0aqSyOoJXtK73m-uME_jv7-pT15gOFC02RFkGMqWpzEICs69VdbwQ0LDp1v7j8xx92efCJlYFYb1sUkkBSPOlPmXgIARw8JQ0qOAOAA', - 'AAOAOq0QJ8wRAIgXmPlOPSBkkUs1bYFYlJCfe29xx8j7vgpDL0QwbdV06sCIEzpWqMGkFR20CFOS21Tp-7vj_EMu-m37KtXJoOy1', - ), - ( - 'https://www.youtube.com/s/player/363db69b/player_ias.vflset/en_US/base.js', - '2aq0aqSyOoJXtK73m-uME_jv7-pT15gOFC02RFkGMqWpzEICs69VdbwQ0LDp1v7j8xx92efCJlYFYb1sUkkBSPOlPmXgIARw8JQ0qOAOAA', - '0aqSyOoJXtK73m-uME_jv7-pT15gOFC02RFkGMqWpz2ICs6EVdbwQ0LDp1v7j8xx92efCJlYFYb1sUkkBSPOlPmXgIARw8JQ0qOAOAA', - ), - ( - 'https://www.youtube.com/s/player/363db69b/player_ias_tce.vflset/en_US/base.js', - '2aq0aqSyOoJXtK73m-uME_jv7-pT15gOFC02RFkGMqWpzEICs69VdbwQ0LDp1v7j8xx92efCJlYFYb1sUkkBSPOlPmXgIARw8JQ0qOAOAA', - '0aqSyOoJXtK73m-uME_jv7-pT15gOFC02RFkGMqWpz2ICs6EVdbwQ0LDp1v7j8xx92efCJlYFYb1sUkkBSPOlPmXgIARw8JQ0qOAOAA', - ), - ( - 'https://www.youtube.com/s/player/4fcd6e4a/player_ias.vflset/en_US/base.js', - '2aq0aqSyOoJXtK73m-uME_jv7-pT15gOFC02RFkGMqWpzEICs69VdbwQ0LDp1v7j8xx92efCJlYFYb1sUkkBSPOlPmXgIARw8JQ0qOAOAA', - 'wAOAOq0QJ8ARAIgXmPlOPSBkkUs1bYFYlJCfe29xx8q7v1pDL0QwbdV96sCIEzpWqMGkFR20CFOg51Tp-7vj_EMu-m37KtXJoOySqa0', - ), - ( - 'https://www.youtube.com/s/player/4fcd6e4a/player_ias_tce.vflset/en_US/base.js', - '2aq0aqSyOoJXtK73m-uME_jv7-pT15gOFC02RFkGMqWpzEICs69VdbwQ0LDp1v7j8xx92efCJlYFYb1sUkkBSPOlPmXgIARw8JQ0qOAOAA', - 'wAOAOq0QJ8ARAIgXmPlOPSBkkUs1bYFYlJCfe29xx8q7v1pDL0QwbdV96sCIEzpWqMGkFR20CFOg51Tp-7vj_EMu-m37KtXJoOySqa0', - ), - ( - 'https://www.youtube.com/s/player/20830619/player_ias.vflset/en_US/base.js', - '2aq0aqSyOoJXtK73m-uME_jv7-pT15gOFC02RFkGMqWpzEICs69VdbwQ0LDp1v7j8xx92efCJlYFYb1sUkkBSPOlPmXgIARw8JQ0qOAOAA', - '7AOq0QJ8wRAIgXmPlOPSBkkAs1bYFYlJCfe29xx8jOv1pDL0Q2bdV96sCIEzpWqMGkFR20CFOg51Tp-7vj_EMu-m37KtXJoOySqa0qaw', - ), - ( - 'https://www.youtube.com/s/player/20830619/player_ias_tce.vflset/en_US/base.js', - '2aq0aqSyOoJXtK73m-uME_jv7-pT15gOFC02RFkGMqWpzEICs69VdbwQ0LDp1v7j8xx92efCJlYFYb1sUkkBSPOlPmXgIARw8JQ0qOAOAA', - '7AOq0QJ8wRAIgXmPlOPSBkkAs1bYFYlJCfe29xx8jOv1pDL0Q2bdV96sCIEzpWqMGkFR20CFOg51Tp-7vj_EMu-m37KtXJoOySqa0qaw', - ), - ( - 'https://www.youtube.com/s/player/20830619/player-plasma-ias-phone-en_US.vflset/base.js', - '2aq0aqSyOoJXtK73m-uME_jv7-pT15gOFC02RFkGMqWpzEICs69VdbwQ0LDp1v7j8xx92efCJlYFYb1sUkkBSPOlPmXgIARw8JQ0qOAOAA', - '7AOq0QJ8wRAIgXmPlOPSBkkAs1bYFYlJCfe29xx8jOv1pDL0Q2bdV96sCIEzpWqMGkFR20CFOg51Tp-7vj_EMu-m37KtXJoOySqa0qaw', - ), - ( - 'https://www.youtube.com/s/player/20830619/player-plasma-ias-tablet-en_US.vflset/base.js', - '2aq0aqSyOoJXtK73m-uME_jv7-pT15gOFC02RFkGMqWpzEICs69VdbwQ0LDp1v7j8xx92efCJlYFYb1sUkkBSPOlPmXgIARw8JQ0qOAOAA', - '7AOq0QJ8wRAIgXmPlOPSBkkAs1bYFYlJCfe29xx8jOv1pDL0Q2bdV96sCIEzpWqMGkFR20CFOg51Tp-7vj_EMu-m37KtXJoOySqa0qaw', - ), - ( - 'https://www.youtube.com/s/player/8a8ac953/player_ias_tce.vflset/en_US/base.js', - '2aq0aqSyOoJXtK73m-uME_jv7-pT15gOFC02RFkGMqWpzEICs69VdbwQ0LDp1v7j8xx92efCJlYFYb1sUkkBSPOlPmXgIARw8JQ0qOAOAA', - 'IAOAOq0QJ8wRAAgXmPlOPSBkkUs1bYFYlJCfe29xx8j7v1pDL0QwbdV96sCIEzpWqMGkFR20CFOg51Tp-7vj_E2u-m37KtXJoOySqa0', - ), - ( - 'https://www.youtube.com/s/player/8a8ac953/tv-player-es6.vflset/tv-player-es6.js', - '2aq0aqSyOoJXtK73m-uME_jv7-pT15gOFC02RFkGMqWpzEICs69VdbwQ0LDp1v7j8xx92efCJlYFYb1sUkkBSPOlPmXgIARw8JQ0qOAOAA', - 'IAOAOq0QJ8wRAAgXmPlOPSBkkUs1bYFYlJCfe29xx8j7v1pDL0QwbdV96sCIEzpWqMGkFR20CFOg51Tp-7vj_E2u-m37KtXJoOySqa0', - ), - ( - 'https://www.youtube.com/s/player/e12fbea4/player_ias.vflset/en_US/base.js', - 'gN7a-hudCuAuPH6fByOk1_GNXN0yNMHShjZXS2VOgsEItAJz0tipeavEOmNdYN-wUtcEqD3bCXjc0iyKfAyZxCBGgIARwsSdQfJ2CJtt', - 'JC2JfQdSswRAIgGBCxZyAfKyi0cjXCb3DqEctUw-NYdNmOEvaepit0zJAtIEsgOV2SXZjhSHMNy0NXNG_1kOyBf6HPuAuCduh-a', - ), - ( - 'https://www.youtube.com/s/player/010fbc8d/player_es5.vflset/en_US/base.js', - 'gN7a-hudCuAuPH6fByOk1_GNXN0yNMHShjZXS2VOgsEItAJz0tipeavEOmNdYN-wUtcEqD3bCXjc0iyKfAyZxCBGgIARwsSdQfJ2CJtt', - 'ttJC2JfQdSswRAIgGBCxZyAfKyi0cjXCb3DqEctUw-NYdNmOEvaepit2zJAsIEggOVaSXZjhSHMNy0NXNG_1kOyBf6HPuAuCduh-', - ), - ( - 'https://www.youtube.com/s/player/010fbc8d/player_es6.vflset/en_US/base.js', - 'gN7a-hudCuAuPH6fByOk1_GNXN0yNMHShjZXS2VOgsEItAJz0tipeavEOmNdYN-wUtcEqD3bCXjc0iyKfAyZxCBGgIARwsSdQfJ2CJtt', - 'ttJC2JfQdSswRAIgGBCxZyAfKyi0cjXCb3DqEctUw-NYdNmOEvaepit2zJAsIEggOVaSXZjhSHMNy0NXNG_1kOyBf6HPuAuCduh-', - ), - ( - 'https://www.youtube.com/s/player/5ec65609/player_ias_tcc.vflset/en_US/base.js', - 'AAJAJfQdSswRAIgNSN0GDUcHnCIXkKcF61yLBgDHiX1sUhOJdY4_GxunRYCIDeYNYP_16mQTPm5f1OVq3oV1ijUNYPjP4iUSMAjO9bZ', - 'AJfQdSswRAIgNSN0GDUcHnCIXkKcF61ZLBgDHiX1sUhOJdY4_GxunRYCIDyYNYP_16mQTPm5f1OVq3oV1ijUNYPjP4iUSMAjO9be', - ), -] - -_NSIG_TESTS = [ - ( - 'https://www.youtube.com/s/player/7862ca1f/player_ias.vflset/en_US/base.js', - 'X_LCxVDjAavgE5t', 'yxJ1dM6iz5ogUg', - ), - ( - 'https://www.youtube.com/s/player/9216d1f7/player_ias.vflset/en_US/base.js', - 'SLp9F5bwjAdhE9F-', 'gWnb9IK2DJ8Q1w', - ), - ( - 'https://www.youtube.com/s/player/f8cb7a3b/player_ias.vflset/en_US/base.js', - 'oBo2h5euWy6osrUt', 'ivXHpm7qJjJN', - ), - ( - 'https://www.youtube.com/s/player/2dfe380c/player_ias.vflset/en_US/base.js', - 'oBo2h5euWy6osrUt', '3DIBbn3qdQ', - ), - ( - 'https://www.youtube.com/s/player/f1ca6900/player_ias.vflset/en_US/base.js', - 'cu3wyu6LQn2hse', 'jvxetvmlI9AN9Q', - ), - ( - 'https://www.youtube.com/s/player/8040e515/player_ias.vflset/en_US/base.js', - 'wvOFaY-yjgDuIEg5', 'HkfBFDHmgw4rsw', - ), - ( - 'https://www.youtube.com/s/player/e06dea74/player_ias.vflset/en_US/base.js', - 'AiuodmaDDYw8d3y4bf', 'ankd8eza2T6Qmw', - ), - ( - 'https://www.youtube.com/s/player/5dd88d1d/player-plasma-ias-phone-en_US.vflset/base.js', - 'kSxKFLeqzv_ZyHSAt', 'n8gS8oRlHOxPFA', - ), - ( - 'https://www.youtube.com/s/player/324f67b9/player_ias.vflset/en_US/base.js', - 'xdftNy7dh9QGnhW', '22qLGxrmX8F1rA', - ), - ( - 'https://www.youtube.com/s/player/4c3f79c5/player_ias.vflset/en_US/base.js', - 'TDCstCG66tEAO5pR9o', 'dbxNtZ14c-yWyw', - ), - ( - 'https://www.youtube.com/s/player/c81bbb4a/player_ias.vflset/en_US/base.js', - 'gre3EcLurNY2vqp94', 'Z9DfGxWP115WTg', - ), - ( - 'https://www.youtube.com/s/player/1f7d5369/player_ias.vflset/en_US/base.js', - 'batNX7sYqIJdkJ', 'IhOkL_zxbkOZBw', - ), - ( - 'https://www.youtube.com/s/player/009f1d77/player_ias.vflset/en_US/base.js', - '5dwFHw8aFWQUQtffRq', 'audescmLUzI3jw', - ), - ( - 'https://www.youtube.com/s/player/dc0c6770/player_ias.vflset/en_US/base.js', - '5EHDMgYLV6HPGk_Mu-kk', 'n9lUJLHbxUI0GQ', - ), - ( - 'https://www.youtube.com/s/player/113ca41c/player_ias.vflset/en_US/base.js', - 'cgYl-tlYkhjT7A', 'hI7BBr2zUgcmMg', - ), - ( - 'https://www.youtube.com/s/player/c57c113c/player_ias.vflset/en_US/base.js', - 'M92UUMHa8PdvPd3wyM', '3hPqLJsiNZx7yA', - ), - ( - 'https://www.youtube.com/s/player/5a3b6271/player_ias.vflset/en_US/base.js', - 'B2j7f_UPT4rfje85Lu_e', 'm5DmNymaGQ5RdQ', - ), - ( - 'https://www.youtube.com/s/player/7a062b77/player_ias.vflset/en_US/base.js', - 'NRcE3y3mVtm_cV-W', 'VbsCYUATvqlt5w', - ), - ( - 'https://www.youtube.com/s/player/dac945fd/player_ias.vflset/en_US/base.js', - 'o8BkRxXhuYsBCWi6RplPdP', '3Lx32v_hmzTm6A', - ), - ( - 'https://www.youtube.com/s/player/6f20102c/player_ias.vflset/en_US/base.js', - 'lE8DhoDmKqnmJJ', 'pJTTX6XyJP2BYw', - ), - ( - 'https://www.youtube.com/s/player/cfa9e7cb/player_ias.vflset/en_US/base.js', - 'aCi3iElgd2kq0bxVbQ', 'QX1y8jGb2IbZ0w', - ), - ( - 'https://www.youtube.com/s/player/8c7583ff/player_ias.vflset/en_US/base.js', - '1wWCVpRR96eAmMI87L', 'KSkWAVv1ZQxC3A', - ), - ( - 'https://www.youtube.com/s/player/b7910ca8/player_ias.vflset/en_US/base.js', - '_hXMCwMt9qE310D', 'LoZMgkkofRMCZQ', - ), - ( - 'https://www.youtube.com/s/player/590f65a6/player_ias.vflset/en_US/base.js', - '1tm7-g_A9zsI8_Lay_', 'xI4Vem4Put_rOg', - ), - ( - 'https://www.youtube.com/s/player/b22ef6e7/player_ias.vflset/en_US/base.js', - 'b6HcntHGkvBLk_FRf', 'kNPW6A7FyP2l8A', - ), - ( - 'https://www.youtube.com/s/player/3400486c/player_ias.vflset/en_US/base.js', - 'lL46g3XifCKUZn1Xfw', 'z767lhet6V2Skl', - ), - ( - 'https://www.youtube.com/s/player/20dfca59/player_ias.vflset/en_US/base.js', - '-fLCxedkAk4LUTK2', 'O8kfRq1y1eyHGw', - ), - ( - 'https://www.youtube.com/s/player/b12cc44b/player_ias.vflset/en_US/base.js', - 'keLa5R2U00sR9SQK', 'N1OGyujjEwMnLw', - ), - ( - 'https://www.youtube.com/s/player/3bb1f723/player_ias.vflset/en_US/base.js', - 'gK15nzVyaXE9RsMP3z', 'ZFFWFLPWx9DEgQ', - ), - ( - 'https://www.youtube.com/s/player/2f1832d2/player_ias.vflset/en_US/base.js', - 'YWt1qdbe8SAfkoPHW5d', 'RrRjWQOJmBiP', - ), - ( - 'https://www.youtube.com/s/player/9c6dfc4a/player_ias.vflset/en_US/base.js', - 'jbu7ylIosQHyJyJV', 'uwI0ESiynAmhNg', - ), - ( - 'https://www.youtube.com/s/player/e7567ecf/player_ias_tce.vflset/en_US/base.js', - 'Sy4aDGc0VpYRR9ew_', '5UPOT1VhoZxNLQ', - ), - ( - 'https://www.youtube.com/s/player/d50f54ef/player_ias_tce.vflset/en_US/base.js', - 'Ha7507LzRmH3Utygtj', 'XFTb2HoeOE5MHg', - ), - ( - 'https://www.youtube.com/s/player/074a8365/player_ias_tce.vflset/en_US/base.js', - 'Ha7507LzRmH3Utygtj', 'ufTsrE0IVYrkl8v', - ), - ( - 'https://www.youtube.com/s/player/643afba4/player_ias.vflset/en_US/base.js', - 'N5uAlLqm0eg1GyHO', 'dCBQOejdq5s-ww', - ), - ( - 'https://www.youtube.com/s/player/69f581a5/tv-player-ias.vflset/tv-player-ias.js', - '-qIP447rVlTTwaZjY', 'KNcGOksBAvwqQg', - ), - ( - 'https://www.youtube.com/s/player/643afba4/tv-player-ias.vflset/tv-player-ias.js', - 'ir9-V6cdbCiyKxhr', '2PL7ZDYAALMfmA', - ), - ( - 'https://www.youtube.com/s/player/363db69b/player_ias.vflset/en_US/base.js', - 'eWYu5d5YeY_4LyEDc', 'XJQqf-N7Xra3gg', - ), - ( - 'https://www.youtube.com/s/player/4fcd6e4a/player_ias.vflset/en_US/base.js', - 'o_L251jm8yhZkWtBW', 'lXoxI3XvToqn6A', - ), - ( - 'https://www.youtube.com/s/player/4fcd6e4a/player_ias_tce.vflset/en_US/base.js', - 'o_L251jm8yhZkWtBW', 'lXoxI3XvToqn6A', - ), - ( - 'https://www.youtube.com/s/player/20830619/tv-player-ias.vflset/tv-player-ias.js', - 'ir9-V6cdbCiyKxhr', '9YE85kNjZiS4', - ), - ( - 'https://www.youtube.com/s/player/20830619/player-plasma-ias-phone-en_US.vflset/base.js', - 'ir9-V6cdbCiyKxhr', '9YE85kNjZiS4', - ), - ( - 'https://www.youtube.com/s/player/20830619/player-plasma-ias-tablet-en_US.vflset/base.js', - 'ir9-V6cdbCiyKxhr', '9YE85kNjZiS4', - ), - ( - 'https://www.youtube.com/s/player/8a8ac953/player_ias_tce.vflset/en_US/base.js', - 'MiBYeXx_vRREbiCCmh', 'RtZYMVvmkE0JE', - ), - ( - 'https://www.youtube.com/s/player/8a8ac953/tv-player-es6.vflset/tv-player-es6.js', - 'MiBYeXx_vRREbiCCmh', 'RtZYMVvmkE0JE', - ), - ( - 'https://www.youtube.com/s/player/59b252b9/player_ias.vflset/en_US/base.js', - 'D3XWVpYgwhLLKNK4AGX', 'aZrQ1qWJ5yv5h', - ), - ( - 'https://www.youtube.com/s/player/fc2a56a5/player_ias.vflset/en_US/base.js', - 'qTKWg_Il804jd2kAC', 'OtUAm2W6gyzJjB9u', - ), - ( - 'https://www.youtube.com/s/player/fc2a56a5/tv-player-ias.vflset/tv-player-ias.js', - 'qTKWg_Il804jd2kAC', 'OtUAm2W6gyzJjB9u', - ), - ( - 'https://www.youtube.com/s/player/a74bf670/player_ias_tce.vflset/en_US/base.js', - 'kM5r52fugSZRAKHfo3', 'hQP7k1hA22OrNTnq', - ), - ( - 'https://www.youtube.com/s/player/6275f73c/player_ias_tce.vflset/en_US/base.js', - 'kM5r52fugSZRAKHfo3', '-I03XF0iyf6I_X0A', - ), - ( - 'https://www.youtube.com/s/player/20c72c18/player_ias_tce.vflset/en_US/base.js', - 'kM5r52fugSZRAKHfo3', '-I03XF0iyf6I_X0A', - ), - ( - 'https://www.youtube.com/s/player/9fe2e06e/player_ias_tce.vflset/en_US/base.js', - 'kM5r52fugSZRAKHfo3', '6r5ekNIiEMPutZy', - ), - ( - 'https://www.youtube.com/s/player/680f8c75/player_ias_tce.vflset/en_US/base.js', - 'kM5r52fugSZRAKHfo3', '0ml9caTwpa55Jf', - ), - ( - 'https://www.youtube.com/s/player/14397202/player_ias_tce.vflset/en_US/base.js', - 'kM5r52fugSZRAKHfo3', 'ozZFAN21okDdJTa', - ), - ( - 'https://www.youtube.com/s/player/5dcb2c1f/player_ias_tce.vflset/en_US/base.js', - 'kM5r52fugSZRAKHfo3', 'p7iTbRZDYAF', - ), - ( - 'https://www.youtube.com/s/player/a10d7fcc/player_ias_tce.vflset/en_US/base.js', - 'kM5r52fugSZRAKHfo3', '9Zue7DDHJSD', - ), - ( - 'https://www.youtube.com/s/player/8e20cb06/player_ias_tce.vflset/en_US/base.js', - 'kM5r52fugSZRAKHfo3', '5-4tTneTROTpMzba', - ), - ( - 'https://www.youtube.com/s/player/e12fbea4/player_ias_tce.vflset/en_US/base.js', - 'kM5r52fugSZRAKHfo3', 'XkeRfXIPOkSwfg', - ), - ( - 'https://www.youtube.com/s/player/ef259203/player_ias_tce.vflset/en_US/base.js', - 'rPqBC01nJpqhhi2iA2U', 'hY7dbiKFT51UIA', - ), - ( - 'https://www.youtube.com/s/player/010fbc8d/player_es5.vflset/en_US/base.js', - '0hlOAlqjFszVvF4Z', 'R-H23bZGAsRFTg', - ), - ( - 'https://www.youtube.com/s/player/010fbc8d/player_es6.vflset/en_US/base.js', - '0hlOAlqjFszVvF4Z', 'R-H23bZGAsRFTg', - ), - ( - 'https://www.youtube.com/s/player/5ec65609/player_ias_tcc.vflset/en_US/base.js', - '6l5CTNx4AzIqH4MXM', 'NupToduxHBew1g', - ), -] - - -@is_download_test -class TestPlayerInfo(unittest.TestCase): - def test_youtube_extract_player_info(self): - PLAYER_URLS = ( - ('https://www.youtube.com/s/player/4c3f79c5/player_ias.vflset/en_US/base.js', '4c3f79c5'), - ('https://www.youtube.com/s/player/64dddad9/player_ias.vflset/en_US/base.js', '64dddad9'), - ('https://www.youtube.com/s/player/64dddad9/player_ias.vflset/fr_FR/base.js', '64dddad9'), - ('https://www.youtube.com/s/player/64dddad9/player-plasma-ias-phone-en_US.vflset/base.js', '64dddad9'), - ('https://www.youtube.com/s/player/64dddad9/player-plasma-ias-phone-de_DE.vflset/base.js', '64dddad9'), - ('https://www.youtube.com/s/player/64dddad9/player-plasma-ias-tablet-en_US.vflset/base.js', '64dddad9'), - ('https://www.youtube.com/s/player/e7567ecf/player_ias_tce.vflset/en_US/base.js', 'e7567ecf'), - ('https://www.youtube.com/s/player/643afba4/tv-player-ias.vflset/tv-player-ias.js', '643afba4'), - # obsolete - ('https://www.youtube.com/yts/jsbin/player_ias-vfle4-e03/en_US/base.js', 'vfle4-e03'), - ('https://www.youtube.com/yts/jsbin/player_ias-vfl49f_g4/en_US/base.js', 'vfl49f_g4'), - ('https://www.youtube.com/yts/jsbin/player_ias-vflCPQUIL/en_US/base.js', 'vflCPQUIL'), - ('https://www.youtube.com/yts/jsbin/player-vflzQZbt7/en_US/base.js', 'vflzQZbt7'), - ('https://www.youtube.com/yts/jsbin/player-en_US-vflaxXRn1/base.js', 'vflaxXRn1'), - ('https://s.ytimg.com/yts/jsbin/html5player-en_US-vflXGBaUN.js', 'vflXGBaUN'), - ('https://s.ytimg.com/yts/jsbin/html5player-en_US-vflKjOTVq/html5player.js', 'vflKjOTVq'), - ) - for player_url, expected_player_id in PLAYER_URLS: - player_id = YoutubeIE._extract_player_info(player_url) - self.assertEqual(player_id, expected_player_id) - - -@is_download_test -class TestSignature(unittest.TestCase): - def setUp(self): - TEST_DIR = os.path.dirname(os.path.abspath(__file__)) - self.TESTDATA_DIR = os.path.join(TEST_DIR, 'testdata/sigs') - if not os.path.exists(self.TESTDATA_DIR): - os.mkdir(self.TESTDATA_DIR) - - def tearDown(self): - with contextlib.suppress(OSError): - for f in os.listdir(self.TESTDATA_DIR): - os.remove(f) - - -def t_factory(name, sig_func, url_pattern): - def make_tfunc(url, sig_input, expected_sig): - m = url_pattern.match(url) - assert m, f'{url!r} should follow URL format' - test_id = re.sub(r'[/.-]', '_', m.group('id') or m.group('compat_id')) - - def test_func(self): - basename = f'player-{test_id}.js' - fn = os.path.join(self.TESTDATA_DIR, basename) - - if not os.path.exists(fn): - urllib.request.urlretrieve(url, fn) - with open(fn, encoding='utf-8') as testf: - jscode = testf.read() - self.assertEqual(sig_func(jscode, sig_input, url), expected_sig) - - test_func.__name__ = f'test_{name}_js_{test_id}' - setattr(TestSignature, test_func.__name__, test_func) - return make_tfunc - - -def signature(jscode, sig_input, player_url): - func = YoutubeIE(FakeYDL())._parse_sig_js(jscode, player_url) - src_sig = ( - str(string.printable[:sig_input]) - if isinstance(sig_input, int) else sig_input) - return func(src_sig) - - -def n_sig(jscode, sig_input, player_url): - ie = YoutubeIE(FakeYDL()) - funcname = ie._extract_n_function_name(jscode, player_url=player_url) - jsi = JSInterpreter(jscode) - func = jsi.extract_function_from_code(*ie._fixup_n_function_code(*jsi.extract_function_code(funcname), jscode, player_url)) - return func([sig_input]) - - -make_sig_test = t_factory( - 'signature', signature, - re.compile(r'''(?x) - .+(?: - /player/(?P[a-zA-Z0-9_/.-]+)| - /html5player-(?:en_US-)?(?P[a-zA-Z0-9_-]+)(?:/watch_as3|/html5player)? - )\.js$''')) -for test_spec in _SIG_TESTS: - make_sig_test(*test_spec) - -make_nsig_test = t_factory( - 'nsig', n_sig, re.compile(r'.+/player/(?P[a-zA-Z0-9_/.-]+)\.js$')) -for test_spec in _NSIG_TESTS: - make_nsig_test(*test_spec) - - -if __name__ == '__main__': - unittest.main() diff --git a/yt-dlp/yt_dlp/YoutubeDL.py b/yt-dlp/yt_dlp/YoutubeDL.py index ef42ba68e3..539b10fe29 100644 --- a/yt-dlp/yt_dlp/YoutubeDL.py +++ b/yt-dlp/yt_dlp/YoutubeDL.py @@ -42,6 +42,8 @@ from .globals import ( plugin_pps, all_plugins_loaded, plugin_dirs, + supported_js_runtimes, + supported_remote_components, ) from .minicurses import format_text from .networking import HEADRequest, Request, RequestDirector @@ -533,6 +535,18 @@ class YoutubeDL: See "EXTRACTOR ARGUMENTS" for details. Argument values must always be a list of string(s). E.g. {'youtube': {'skip': ['dash', 'hls']}} + js_runtimes: A dictionary of JavaScript runtime keys (in lower case) to enable + and a dictionary of additional configuration for the runtime. + Currently supported runtimes are 'deno', 'node', 'bun', and 'quickjs'. + If None, the default runtime of "deno" will be enabled. + The runtime configuration dictionary can have the following keys: + - path: Path to the executable (optional) + E.g. {'deno': {'path': '/path/to/deno'} + remote_components: A list of remote components that are allowed to be fetched when required. + Supported components: + - ejs:npm (external JavaScript components from npm) + - ejs:github (external JavaScript components from yt-dlp-ejs GitHub) + By default, no remote components are allowed to be fetched. mark_watched: Mark videos watched (even with --simulate). Only for YouTube The following options are deprecated and may be removed in the future: @@ -717,6 +731,13 @@ class YoutubeDL: else: raise + # Note: this must be after plugins are loaded + self.params['js_runtimes'] = self.params.get('js_runtimes', {'deno': {}}) + self._clean_js_runtimes(self.params['js_runtimes']) + + self.params['remote_components'] = set(self.params.get('remote_components', ())) + self._clean_remote_components(self.params['remote_components']) + self.params['compat_opts'] = set(self.params.get('compat_opts', ())) self.params['http_headers'] = HTTPHeaderDict(std_headers, self.params.get('http_headers')) self._load_cookies(self.params['http_headers'].get('Cookie')) # compat @@ -829,6 +850,36 @@ class YoutubeDL: self.archive = preload_download_archive(self.params.get('download_archive')) + def _clean_js_runtimes(self, runtimes): + if not ( + isinstance(runtimes, dict) + and all(isinstance(k, str) and (v is None or isinstance(v, dict)) for k, v in runtimes.items()) + ): + raise ValueError('Invalid js_runtimes format, expected a dict of {runtime: {config}}') + + if unsupported_runtimes := runtimes.keys() - supported_js_runtimes.value.keys(): + self.report_warning( + f'Ignoring unsupported JavaScript runtime(s): {", ".join(unsupported_runtimes)}.' + f' Supported runtimes: {", ".join(supported_js_runtimes.value.keys())}.') + for rt in unsupported_runtimes: + runtimes.pop(rt) + + def _clean_remote_components(self, remote_components: set): + if unsupported_remote_components := set(remote_components) - set(supported_remote_components.value): + self.report_warning( + f'Ignoring unsupported remote component(s): {", ".join(unsupported_remote_components)}.' + f' Supported remote components: {", ".join(supported_remote_components.value)}.') + for rt in unsupported_remote_components: + remote_components.remove(rt) + + @functools.cached_property + def _js_runtimes(self): + runtimes = {} + for name, config in self.params.get('js_runtimes', {}).items(): + runtime_cls = supported_js_runtimes.value.get(name) + runtimes[name] = runtime_cls(path=config.get('path')) if runtime_cls else None + return runtimes + def warn_if_short_id(self, argv): # short YouTube ID starting with dash? idxs = [ @@ -4064,6 +4115,18 @@ class YoutubeDL: join_nonempty(*get_package_info(m)) for m in available_dependencies.values() })) or 'none')) + if not self.params.get('js_runtimes'): + write_debug('JS runtimes: none (disabled)') + else: + write_debug('JS runtimes: %s' % (', '.join(sorted( + f'{name} (unknown)' if runtime is None + else join_nonempty( + runtime.info.name, + runtime.info.version + (' (unsupported)' if runtime.info.supported is False else ''), + ) + for name, runtime in self._js_runtimes.items() if runtime is None or runtime.info is not None + )) or 'none')) + write_debug(f'Proxy map: {self.proxies}') write_debug(f'Request Handlers: {", ".join(rh.RH_NAME for rh in self._request_director.handlers.values())}') diff --git a/yt-dlp/yt_dlp/__init__.py b/yt-dlp/yt_dlp/__init__.py index 8aee126030..2f6ba47832 100644 --- a/yt-dlp/yt_dlp/__init__.py +++ b/yt-dlp/yt_dlp/__init__.py @@ -61,8 +61,15 @@ from .utils import ( shell_quote, variadic, write_string, + ) from .utils._utils import _UnsafeExtensionError +from .utils._jsruntime import ( + BunJsRuntime as _BunJsRuntime, + DenoJsRuntime as _DenoJsRuntime, + NodeJsRuntime as _NodeJsRuntime, + QuickJsRuntime as _QuickJsRuntime, +) from .YoutubeDL import YoutubeDL @@ -773,6 +780,10 @@ def parse_options(argv=None): else opts.audioformat if (opts.extractaudio and opts.audioformat in FFmpegExtractAudioPP.SUPPORTED_EXTS) else None) + js_runtimes = { + runtime.lower(): {'path': path} for runtime, path in ( + [*arg.split(':', 1), None][:2] for arg in opts.js_runtimes)} + return ParsedOptions(parser, opts, urls, { 'usenetrc': opts.usenetrc, 'netrc_location': opts.netrc_location, @@ -940,6 +951,8 @@ def parse_options(argv=None): 'geo_bypass_country': opts.geo_bypass_country, 'geo_bypass_ip_block': opts.geo_bypass_ip_block, 'useid': opts.useid or None, + 'js_runtimes': js_runtimes, + 'remote_components': opts.remote_components, 'warn_when_outdated': opts.update_self is None, '_warnings': warnings, '_deprecation_warnings': deprecation_warnings, @@ -1081,6 +1094,16 @@ def main(argv=None): from .extractor import gen_extractors, list_extractors +# Register JS runtimes and remote components +from .globals import supported_js_runtimes, supported_remote_components +supported_js_runtimes.value['deno'] = _DenoJsRuntime +supported_js_runtimes.value['node'] = _NodeJsRuntime +supported_js_runtimes.value['bun'] = _BunJsRuntime +supported_js_runtimes.value['quickjs'] = _QuickJsRuntime + +supported_remote_components.value.append('ejs:github') +supported_remote_components.value.append('ejs:npm') + __all__ = [ 'YoutubeDL', 'gen_extractors', diff --git a/yt-dlp/yt_dlp/__pyinstaller/hook-yt_dlp.py b/yt-dlp/yt_dlp/__pyinstaller/hook-yt_dlp.py index 8e7f42f596..0c4bf7d63b 100644 --- a/yt-dlp/yt_dlp/__pyinstaller/hook-yt_dlp.py +++ b/yt-dlp/yt_dlp/__pyinstaller/hook-yt_dlp.py @@ -34,3 +34,4 @@ print(f'Adding imports: {hiddenimports}') excludedimports = ['youtube_dl', 'youtube_dlc', 'test', 'ytdlp_plugins', 'devscripts', 'bundle'] datas = collect_data_files('curl_cffi', includes=['cacert.pem']) +datas += collect_data_files('yt_dlp_ejs', includes=['**/*.js']) diff --git a/yt-dlp/yt_dlp/dependencies/__init__.py b/yt-dlp/yt_dlp/dependencies/__init__.py index 0d58da2bd5..cf2bcfb37e 100644 --- a/yt-dlp/yt_dlp/dependencies/__init__.py +++ b/yt-dlp/yt_dlp/dependencies/__init__.py @@ -81,6 +81,12 @@ except ImportError: from . import Cryptodome +try: + import yt_dlp_ejs +except ImportError: + yt_dlp_ejs = None + + all_dependencies = {k: v for k, v in globals().items() if not k.startswith('_')} available_dependencies = {k: v for k, v in all_dependencies.items() if v} diff --git a/yt-dlp/yt_dlp/extractor/_extractors.py b/yt-dlp/yt_dlp/extractor/_extractors.py index 072169d48d..2646ed9ac9 100644 --- a/yt-dlp/yt_dlp/extractor/_extractors.py +++ b/yt-dlp/yt_dlp/extractor/_extractors.py @@ -143,6 +143,8 @@ from .archiveorg import ( from .arcpublishing import ArcPublishingIE from .ard import ( ARDIE, + ARDAudiothekIE, + ARDAudiothekPlaylistIE, ARDBetaMediathekIE, ARDMediathekCollectionIE, ) diff --git a/yt-dlp/yt_dlp/extractor/ard.py b/yt-dlp/yt_dlp/extractor/ard.py index 89d3299213..5bcf74e1d0 100644 --- a/yt-dlp/yt_dlp/extractor/ard.py +++ b/yt-dlp/yt_dlp/extractor/ard.py @@ -1,4 +1,5 @@ import functools +import json import re from .common import InfoExtractor @@ -15,11 +16,12 @@ from ..utils import ( remove_start, str_or_none, unified_strdate, + update_url, update_url_query, url_or_none, xpath_text, ) -from ..utils.traversal import traverse_obj +from ..utils.traversal import traverse_obj, value class ARDMediathekBaseIE(InfoExtractor): @@ -601,3 +603,163 @@ class ARDMediathekCollectionIE(InfoExtractor): return self.playlist_result( OnDemandPagedList(fetch_page, self._PAGE_SIZE), full_id, display_id=display_id, title=page_data.get('title'), description=page_data.get('synopsis')) + + +class ARDAudiothekBaseIE(InfoExtractor): + def _graphql_query(self, urn, query): + return self._download_json( + 'https://api.ardaudiothek.de/graphql', urn, + data=json.dumps({ + 'query': query, + 'variables': {'id': urn}, + }).encode(), headers={ + 'Content-Type': 'application/json', + })['data'] + + +class ARDAudiothekIE(ARDAudiothekBaseIE): + _VALID_URL = r'https:?//(?:www\.)?ardaudiothek\.de/episode/(?Purn:ard:(?:episode|section|extra):[a-f0-9]{16})' + + _TESTS = [{ + 'url': 'https://www.ardaudiothek.de/episode/urn:ard:episode:eabead1add170e93/', + 'info_dict': { + 'id': 'urn:ard:episode:eabead1add170e93', + 'ext': 'mp3', + 'upload_date': '20240717', + 'duration': 3339, + 'title': 'CAIMAN CLUB (S04E04): Cash Out', + 'thumbnail': 'https://api.ardmediathek.de/image-service/images/urn:ard:image:ed64411a07a4b405', + 'description': 'md5:0e5d127a3832ae59e8bab40a91a5dadc', + 'display_id': 'urn:ard:episode:eabead1add170e93', + 'timestamp': 1721181641, + 'series': '1LIVE Caiman Club', + 'channel': 'WDR', + 'episode': 'Episode 4', + 'episode_number': 4, + }, + }, { + 'url': 'https://www.ardaudiothek.de/episode/urn:ard:section:855c7a53dac72e0a/', + 'info_dict': { + 'id': 'urn:ard:section:855c7a53dac72e0a', + 'ext': 'mp4', + 'upload_date': '20241231', + 'duration': 3304, + 'title': 'Illegaler DDR-Detektiv: Doberschütz und die letzte Staatsjagd (1/2) - Wendezeit', + 'thumbnail': 'https://api.ardmediathek.de/image-service/images/urn:ard:image:b9b4f1e8b93da4dd', + 'description': 'md5:3552d571e1959754cff66c1da6c0fdae', + 'display_id': 'urn:ard:section:855c7a53dac72e0a', + 'timestamp': 1735629900, + 'series': 'Auf der Spur – Die ARD Ermittlerkrimis', + 'channel': 'ARD', + 'episode': 'Episode 1', + 'episode_number': 1, + }, + }, { + 'url': 'https://www.ardaudiothek.de/episode/urn:ard:extra:d2fe7303d2dcbf5d/', + 'info_dict': { + 'id': 'urn:ard:extra:d2fe7303d2dcbf5d', + 'ext': 'mp3', + 'title': 'Trailer: Fanta Vier Forever, Baby!?!', + 'description': 'md5:b64a586f2e976b8bb5ea0a79dbd8751c', + 'channel': 'SWR', + 'duration': 62, + 'thumbnail': 'https://api.ardmediathek.de/image-service/images/urn:ard:image:48d3c255969be803', + 'series': 'Fanta Vier Forever, Baby!?!', + 'timestamp': 1732108217, + 'upload_date': '20241120', + }, + }] + + _QUERY_ITEM = '''\ + query($id: ID!) { + item(id: $id) { + audioList { + href + distributionType + audioBitrate + audioCodec + } + show { + title + } + image { + url1X1 + } + programSet { + publicationService { + organizationName + } + } + description + title + duration + startDate + episodeNumber + } + }''' + + def _real_extract(self, url): + urn = self._match_id(url) + item = self._graphql_query(urn, self._QUERY_ITEM)['item'] + return { + 'id': urn, + **traverse_obj(item, { + 'formats': ('audioList', lambda _, v: url_or_none(v['href']), { + 'url': 'href', + 'format_id': ('distributionType', {str}), + 'abr': ('audioBitrate', {int_or_none}), + 'acodec': ('audioCodec', {str}), + 'vcodec': {value('none')}, + }), + 'channel': ('programSet', 'publicationService', 'organizationName', {str}), + 'description': ('description', {str}), + 'duration': ('duration', {int_or_none}), + 'series': ('show', 'title', {str}), + 'episode_number': ('episodeNumber', {int_or_none}), + 'thumbnail': ('image', 'url1X1', {url_or_none}, {update_url(query=None)}), + 'timestamp': ('startDate', {parse_iso8601}), + 'title': ('title', {str}), + }), + } + + +class ARDAudiothekPlaylistIE(ARDAudiothekBaseIE): + _VALID_URL = r'https:?//(?:www\.)?ardaudiothek\.de/sendung/(?P[\w-]+)/(?Purn:ard:show:[a-f0-9]{16})' + + _TESTS = [{ + 'url': 'https://www.ardaudiothek.de/sendung/mia-insomnia/urn:ard:show:c405aa26d9a4060a/', + 'info_dict': { + 'display_id': 'mia-insomnia', + 'title': 'Mia Insomnia', + 'id': 'urn:ard:show:c405aa26d9a4060a', + 'description': 'md5:d9ceb7a6b4d26a4db3316573bb564292', + }, + 'playlist_mincount': 37, + }, { + 'url': 'https://www.ardaudiothek.de/sendung/100-berlin/urn:ard:show:4d248e0806ce37bc/', + 'only_matching': True, + }] + + _QUERY_PLAYLIST = ''' + query($id: ID!) { + show(id: $id) { + title + description + items(filter: { isPublished: { equalTo: true } }) { + nodes { + url + } + } + } + }''' + + def _real_extract(self, url): + urn, playlist = self._match_valid_url(url).group('id', 'playlist') + playlist_info = self._graphql_query(urn, self._QUERY_PLAYLIST)['show'] + entries = [] + for url in traverse_obj(playlist_info, ('items', 'nodes', ..., 'url', {url_or_none})): + entries.append(self.url_result(url, ie=ARDAudiothekIE)) + return self.playlist_result(entries, urn, display_id=playlist, **traverse_obj(playlist_info, { + 'title': ('title', {str}), + 'description': ('description', {str}), + })) diff --git a/yt-dlp/yt_dlp/extractor/kika.py b/yt-dlp/yt_dlp/extractor/kika.py index e277564524..94798b9ac3 100644 --- a/yt-dlp/yt_dlp/extractor/kika.py +++ b/yt-dlp/yt_dlp/extractor/kika.py @@ -17,57 +17,60 @@ class KikaIE(InfoExtractor): _GEO_COUNTRIES = ['DE'] _TESTS = [{ - 'url': 'https://www.kika.de/logo/videos/logo-vom-samstag-einunddreissig-august-zweitausendvierundzwanzig-100', - 'md5': 'fbfc8da483719ef06f396e5e5b938c69', + # Video without season/episode info + 'url': 'https://www.kika.de/logo/videos/logo-vom-dienstag-achtundzwanzig-oktober-zweitausendfuenfundzwanzig-100', + 'md5': '4a9f6e0f9c6bfcc82394c294f186d6db', 'info_dict': { - 'id': 'logo-vom-samstag-einunddreissig-august-zweitausendvierundzwanzig-100', + 'id': 'logo-vom-dienstag-achtundzwanzig-oktober-zweitausendfuenfundzwanzig-100', 'ext': 'mp4', - 'upload_date': '20240831', - 'timestamp': 1725126600, - 'season_number': 2024, - 'modified_date': '20240831', - 'episode': 'Episode 476', - 'episode_number': 476, - 'season': 'Season 2024', - 'duration': 634, - 'title': 'logo! vom Samstag, 31. August 2024', - 'modified_timestamp': 1725129983, + 'title': 'logo! vom Dienstag, 28. Oktober 2025', + 'description': 'md5:4d28b92cef423bec99740ffaa3e7ec04', + 'duration': 651, + 'timestamp': 1761678000, + 'upload_date': '20251028', + 'modified_timestamp': 1761682624, + 'modified_date': '20251028', }, }, { + # Video with season/episode info + # Also: Video with subtitles 'url': 'https://www.kika.de/kaltstart/videos/video92498', - 'md5': '710ece827e5055094afeb474beacb7aa', + 'md5': 'e58073070acb195906c55c4ad31dceb3', 'info_dict': { 'id': 'video92498', 'ext': 'mp4', 'title': '7. Wo ist Leo?', 'description': 'md5:fb48396a5b75068bcac1df74f1524920', 'duration': 436, + 'season': 'Season 1', + 'season_number': 1, + 'episode': 'Episode 7', + 'episode_number': 7, 'timestamp': 1702926876, 'upload_date': '20231218', - 'episode_number': 7, - 'modified_date': '20240319', 'modified_timestamp': 1710880610, - 'episode': 'Episode 7', - 'season_number': 1, - 'season': 'Season 1', + 'modified_date': '20240319', + 'subtitles': 'count:1', }, }, { - 'url': 'https://www.kika.de/bernd-das-brot/astrobrot/videos/video90088', - 'md5': 'ffd1b700d7de0a6616a1d08544c77294', + # Video without subtitles + 'url': 'https://www.kika.de/die-pfefferkoerner/videos/abgezogen-102', + 'md5': '62e97961ce5343c19f0f330a1b6dd736', 'info_dict': { - 'id': 'video90088', + 'id': 'abgezogen-102', 'ext': 'mp4', - 'upload_date': '20221102', - 'timestamp': 1667390580, - 'duration': 197, - 'modified_timestamp': 1711093771, - 'episode_number': 8, - 'title': 'Es ist nicht leicht, ein Astrobrot zu sein', - 'modified_date': '20240322', - 'description': 'md5:d3641deaf1b5515a160788b2be4159a9', - 'season_number': 1, - 'episode': 'Episode 8', + 'title': '1. Abgezogen', + 'description': 'md5:42d87963364391f9f8eba8affcb30bd2', + 'duration': 1574, 'season': 'Season 1', + 'season_number': 1, + 'episode': 'Episode 1', + 'episode_number': 1, + 'timestamp': 1735382700, + 'upload_date': '20241228', + 'modified_timestamp': 1757344051, + 'modified_date': '20250908', + 'subtitles': 'count:0', }, }] @@ -78,16 +81,19 @@ class KikaIE(InfoExtractor): video_assets = self._download_json(doc['assets']['url'], video_id) subtitles = {} - if ttml_resource := url_or_none(video_assets.get('videoSubtitle')): - subtitles['de'] = [{ - 'url': ttml_resource, - 'ext': 'ttml', - }] - if webvtt_resource := url_or_none(video_assets.get('webvttUrl')): - subtitles.setdefault('de', []).append({ - 'url': webvtt_resource, - 'ext': 'vtt', - }) + # Subtitle API endpoints may be present in the JSON even if there are no subtitles. + # They then return HTTP 200 with invalid data. So we must check explicitly. + if doc.get('hasSubtitle'): + if ttml_resource := url_or_none(video_assets.get('videoSubtitle')): + subtitles['de'] = [{ + 'url': ttml_resource, + 'ext': 'ttml', + }] + if webvtt_resource := url_or_none(video_assets.get('webvttUrl')): + subtitles.setdefault('de', []).append({ + 'url': webvtt_resource, + 'ext': 'vtt', + }) return { 'id': video_id, diff --git a/yt-dlp/yt_dlp/extractor/nbc.py b/yt-dlp/yt_dlp/extractor/nbc.py index caa9dc0175..41811b8a20 100644 --- a/yt-dlp/yt_dlp/extractor/nbc.py +++ b/yt-dlp/yt_dlp/extractor/nbc.py @@ -63,7 +63,7 @@ class NBCUniversalBaseIE(ThePlatformBaseIE): # formats='mpeg4' will return either a working m3u8 URL or an m3u8 template for non-DRM HLS # formats='m3u+none,mpeg4' may return DRM HLS but w/the "folders" needed for non-DRM template query['formats'] = 'm3u+none,mpeg4' - m3u8_url = self._download_nbcu_smil_and_extract_m3u8_url(tp_path, video_id, query) + orig_m3u8_url = m3u8_url = self._download_nbcu_smil_and_extract_m3u8_url(tp_path, video_id, query) if mobj := re.fullmatch(self._M3U8_RE, m3u8_url): query['formats'] = 'mpeg4' @@ -76,7 +76,17 @@ class NBCUniversalBaseIE(ThePlatformBaseIE): if '/mpeg_cenc' in m3u8_url or '/mpeg_cbcs' in m3u8_url: self.report_drm(video_id) - return self._extract_m3u8_formats_and_subtitles(m3u8_url, video_id, 'mp4', m3u8_id='hls') + formats, subtitles = self._extract_m3u8_formats_and_subtitles( + m3u8_url, video_id, 'mp4', m3u8_id='hls', fatal=False) + + if not formats and m3u8_url != orig_m3u8_url: + orig_fmts, subtitles = self._extract_m3u8_formats_and_subtitles( + orig_m3u8_url, video_id, 'mp4', m3u8_id='hls', fatal=False) + formats = [f for f in orig_fmts if not f.get('has_drm')] + if orig_fmts and not formats: + self.report_drm(video_id) + + return formats, subtitles def _extract_nbcu_video(self, url, display_id, old_ie_key=None): webpage = self._download_webpage(url, display_id) diff --git a/yt-dlp/yt_dlp/extractor/youtube/_base.py b/yt-dlp/yt_dlp/extractor/youtube/_base.py index 17e942465d..062301b5ff 100644 --- a/yt-dlp/yt_dlp/extractor/youtube/_base.py +++ b/yt-dlp/yt_dlp/extractor/youtube/_base.py @@ -380,11 +380,15 @@ def short_client_name(client_name): return join_nonempty(main[:4], ''.join(x[0] for x in parts)).upper() -def build_innertube_clients(): - THIRD_PARTY = { +def _fix_embedded_ytcfg(ytcfg): + ytcfg['INNERTUBE_CONTEXT'].setdefault('thirdParty', {}).update({ 'embedUrl': 'https://www.youtube.com/', # Can be any valid URL - } - BASE_CLIENTS = ('ios', 'web', 'tv', 'mweb', 'android') + }) + + +def build_innertube_clients(): + # From highest to lowest priority + BASE_CLIENTS = ('tv', 'web', 'mweb', 'android', 'ios') priority = qualities(BASE_CLIENTS[::-1]) for client, ytcfg in tuple(INNERTUBE_CLIENTS.items()): @@ -405,10 +409,7 @@ def build_innertube_clients(): ytcfg['priority'] = 10 * priority(base_client) if variant == 'embedded': - ytcfg['INNERTUBE_CONTEXT']['thirdParty'] = THIRD_PARTY - ytcfg['priority'] -= 2 - elif variant: - ytcfg['priority'] -= 3 + _fix_embedded_ytcfg(ytcfg) build_innertube_clients() @@ -991,6 +992,10 @@ class YoutubeBaseInfoExtractor(InfoExtractor): ytcfg = self.extract_ytcfg(video_id, webpage) or {} + # See https://github.com/yt-dlp/yt-dlp/issues/14826 + if _split_innertube_client(client)[2] == 'embedded': + _fix_embedded_ytcfg(ytcfg) + # Workaround for https://github.com/yt-dlp/yt-dlp/issues/12563 # But it's not effective when logged-in if client == 'tv' and not self.is_authenticated: diff --git a/yt-dlp/yt_dlp/extractor/youtube/_video.py b/yt-dlp/yt_dlp/extractor/youtube/_video.py index 9d03254b85..8706439ae7 100644 --- a/yt-dlp/yt_dlp/extractor/youtube/_video.py +++ b/yt-dlp/yt_dlp/extractor/youtube/_video.py @@ -4,9 +4,7 @@ import collections import datetime as dt import functools import itertools -import json import math -import os.path import random import re import sys @@ -26,10 +24,11 @@ from ._base import ( _split_innertube_client, short_client_name, ) +from .jsc._builtin.ejs import _EJS_WIKI_URL +from .jsc._director import initialize_jsc_director +from .jsc.provider import JsChallengeRequest, JsChallengeType, NChallengeInput, SigChallengeInput from .pot._director import initialize_pot_director from .pot.provider import PoTokenContext, PoTokenRequest -from ..openload import PhantomJSwrapper -from ...jsinterp import JSInterpreter, LocalNameSpace from ...networking.exceptions import HTTPError from ...utils import ( NO_DEFAULT, @@ -39,13 +38,11 @@ from ...utils import ( clean_html, datetime_from_str, filesize_from_tbr, - filter_dict, float_or_none, format_field, get_first, int_or_none, join_nonempty, - js_to_json, mimetype2ext, orderedSet, parse_codecs, @@ -148,10 +145,11 @@ class YoutubeIE(YoutubeBaseInfoExtractor): r'\b(?Pvfl[a-zA-Z0-9_-]+)\b.*?\.js$', ) _SUBTITLE_FORMATS = ('json3', 'srv1', 'srv2', 'srv3', 'ttml', 'srt', 'vtt') - _DEFAULT_CLIENTS = ('android_sdkless', 'tv', 'web_safari', 'web') + _DEFAULT_CLIENTS = ('tv', 'android_sdkless', 'web') + _DEFAULT_JSLESS_CLIENTS = ('android_sdkless', 'web_safari', 'web') _DEFAULT_AUTHED_CLIENTS = ('tv', 'web_safari', 'web') # Premium does not require POT (except for subtitles) - _DEFAULT_PREMIUM_CLIENTS = ('tv', 'web_creator', 'web_safari', 'web') + _DEFAULT_PREMIUM_CLIENTS = ('tv', 'web_creator', 'web') _GEO_BYPASS = False @@ -1720,8 +1718,6 @@ class YoutubeIE(YoutubeBaseInfoExtractor): 'tablet': 'player-plasma-ias-tablet-en_US.vflset/base.js', } _INVERSE_PLAYER_JS_VARIANT_MAP = {v: k for k, v in _PLAYER_JS_VARIANT_MAP.items()} - _NSIG_FUNC_CACHE_ID = 'nsig func' - _DUMMY_STRING = 'dlp_wins' @classmethod def suitable(cls, url): @@ -1741,6 +1737,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor): def _real_initialize(self): super()._real_initialize() self._pot_director = initialize_pot_director(self) + self._jsc_director = initialize_jsc_director(self) def _prepare_live_from_start_formats(self, formats, video_id, live_start_time, url, webpage_url, smuggled_data, is_live): lock = threading.Lock() @@ -1758,7 +1755,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor): microformats = traverse_obj( prs, (..., 'microformat', 'playerMicroformatRenderer'), expected_type=dict) - _, live_status, _, formats, _ = self._list_formats(video_id, microformats, video_details, prs, player_url) + _, live_status, formats, _ = self._list_formats(video_id, microformats, video_details, prs, player_url) is_live = live_status == 'is_live' start_time = time.time() @@ -2006,10 +2003,6 @@ class YoutubeIE(YoutubeBaseInfoExtractor): variant = re.sub(r'[^a-zA-Z0-9]', '_', remove_end(player_path, '.js')) return f'{player_id}-{variant}' - def _signature_cache_id(self, example_sig): - """ Return a string representation of a signature """ - return '.'.join(str(len(part)) for part in example_sig.split('.')) - @classmethod def _extract_player_info(cls, player_url): for player_re in cls._PLAYER_INFO_RE: @@ -2031,53 +2024,35 @@ class YoutubeIE(YoutubeBaseInfoExtractor): self._code_cache[player_js_key] = code return self._code_cache.get(player_js_key) - def _extract_signature_function(self, video_id, player_url, example_sig): - # Read from filesystem cache - func_id = join_nonempty( - self._player_js_cache_key(player_url), self._signature_cache_id(example_sig)) - assert os.path.basename(func_id) == func_id + def _sig_spec_cache_id(self, player_url, spec_id): + return join_nonempty(self._player_js_cache_key(player_url), str(spec_id)) - self.write_debug(f'Extracting signature function {func_id}') - cache_spec, code = self.cache.load('youtube-sigfuncs', func_id, min_ver='2025.07.21'), None + def _load_sig_spec_from_cache(self, spec_cache_id): + # This is almost identical to _load_player_data_from_cache + # I hate it + if spec_cache_id in self._player_cache: + return self._player_cache[spec_cache_id] + spec = self.cache.load('youtube-sigfuncs', spec_cache_id, min_ver='2025.07.21') + if spec: + self._player_cache[spec_cache_id] = spec + return spec - if not cache_spec: - code = self._load_player(video_id, player_url) - if code: - res = self._parse_sig_js(code, player_url) - test_string = ''.join(map(chr, range(len(example_sig)))) - cache_spec = [ord(c) for c in res(test_string)] - self.cache.store('youtube-sigfuncs', func_id, cache_spec) + def _store_sig_spec_to_cache(self, spec_cache_id, spec): + if spec_cache_id not in self._player_cache: + self._player_cache[spec_cache_id] = spec + self.cache.store('youtube-sigfuncs', spec_cache_id, spec) - return lambda s: ''.join(s[i] for i in cache_spec) + def _load_player_data_from_cache(self, name, player_url): + cache_id = (f'youtube-{name}', self._player_js_cache_key(player_url)) - def _parse_sig_js(self, jscode, player_url): - # Examples where `sig` is funcname: - # sig=function(a){a=a.split(""); ... ;return a.join("")}; - # ;c&&(c=sig(decodeURIComponent(c)),a.set(b,encodeURIComponent(c)));return a}; - # {var l=f,m=h.sp,n=sig(decodeURIComponent(h.s));l.set(m,encodeURIComponent(n))} - # sig=function(J){J=J.split(""); ... ;return J.join("")}; - # ;N&&(N=sig(decodeURIComponent(N)),J.set(R,encodeURIComponent(N)));return J}; - # {var H=u,k=f.sp,v=sig(decodeURIComponent(f.s));H.set(k,encodeURIComponent(v))} - funcname = self._search_regex( - (r'\b(?P[a-zA-Z0-9_$]+)&&\((?P=var)=(?P[a-zA-Z0-9_$]{2,})\(decodeURIComponent\((?P=var)\)\)', - r'(?P[a-zA-Z0-9_$]+)\s*=\s*function\(\s*(?P[a-zA-Z0-9_$]+)\s*\)\s*{\s*(?P=arg)\s*=\s*(?P=arg)\.split\(\s*""\s*\)\s*;\s*[^}]+;\s*return\s+(?P=arg)\.join\(\s*""\s*\)', - r'(?:\b|[^a-zA-Z0-9_$])(?P[a-zA-Z0-9_$]{2,})\s*=\s*function\(\s*a\s*\)\s*{\s*a\s*=\s*a\.split\(\s*""\s*\)(?:;[a-zA-Z0-9_$]{2}\.[a-zA-Z0-9_$]{2}\(a,\d+\))?', - # Old patterns - r'\b[cs]\s*&&\s*[adf]\.set\([^,]+\s*,\s*encodeURIComponent\s*\(\s*(?P[a-zA-Z0-9$]+)\(', - r'\b[a-zA-Z0-9]+\s*&&\s*[a-zA-Z0-9]+\.set\([^,]+\s*,\s*encodeURIComponent\s*\(\s*(?P[a-zA-Z0-9$]+)\(', - r'\bm=(?P[a-zA-Z0-9$]{2,})\(decodeURIComponent\(h\.s\)\)', - # Obsolete patterns - r'("|\')signature\1\s*,\s*(?P[a-zA-Z0-9$]+)\(', - r'\.sig\|\|(?P[a-zA-Z0-9$]+)\(', - r'yt\.akamaized\.net/\)\s*\|\|\s*.*?\s*[cs]\s*&&\s*[adf]\.set\([^,]+\s*,\s*(?:encodeURIComponent\s*\()?\s*(?P[a-zA-Z0-9$]+)\(', - r'\b[cs]\s*&&\s*[adf]\.set\([^,]+\s*,\s*(?P[a-zA-Z0-9$]+)\(', - r'\bc\s*&&\s*[a-zA-Z0-9]+\.set\([^,]+\s*,\s*\([^)]*\)\s*\(\s*(?P[a-zA-Z0-9$]+)\('), - jscode, 'Initial JS player signature function name', group='sig') + if data := self._player_cache.get(cache_id): + return data - varname, global_list = self._interpret_player_js_global_var(jscode, player_url) - jsi = JSInterpreter(jscode) - initial_function = jsi.extract_function(funcname, filter_dict({varname: global_list})) - return lambda s: initial_function([s]) + data = self.cache.load(*cache_id, min_ver='2025.07.21') + if data: + self._player_cache[cache_id] = data + + return data def _cached(self, func, *cache_id): def inner(*args, **kwargs): @@ -2095,246 +2070,25 @@ class YoutubeIE(YoutubeBaseInfoExtractor): return ret return inner - def _load_player_data_from_cache(self, name, player_url): - cache_id = (f'youtube-{name}', self._player_js_cache_key(player_url)) - - if data := self._player_cache.get(cache_id): - return data - - data = self.cache.load(*cache_id, min_ver='2025.07.21') - if data: - self._player_cache[cache_id] = data - - return data - def _store_player_data_to_cache(self, name, player_url, data): cache_id = (f'youtube-{name}', self._player_js_cache_key(player_url)) if cache_id not in self._player_cache: self.cache.store(*cache_id, data) self._player_cache[cache_id] = data - def _decrypt_signature(self, s, video_id, player_url): - """Turn the encrypted s field into a working signature""" - extract_sig = self._cached( - self._extract_signature_function, 'sig', player_url, self._signature_cache_id(s)) - func = extract_sig(video_id, player_url, s) - return func(s) - - def _decrypt_nsig(self, s, video_id, player_url): - """Turn the encrypted n field into a working signature""" - if player_url is None: - raise ExtractorError('Cannot decrypt nsig without player_url') - player_url = urljoin('https://www.youtube.com', player_url) - - try: - jsi, _, func_code = self._extract_n_function_code(video_id, player_url) - except ExtractorError as e: - raise ExtractorError('Unable to extract nsig function code', cause=e) - - try: - extract_nsig = self._cached(self._extract_n_function_from_code, self._NSIG_FUNC_CACHE_ID, player_url) - ret = extract_nsig(jsi, func_code)(s) - except JSInterpreter.Exception as e: - try: - jsi = PhantomJSwrapper(self, timeout=5000) - except ExtractorError: - raise e - self.report_warning( - f'Native nsig extraction failed: Trying with PhantomJS\n' - f' n = {s} ; player = {player_url}', video_id) - self.write_debug(e, only_once=True) - - args, func_body = func_code - ret = jsi.execute( - f'console.log(function({", ".join(args)}) {{ {func_body} }}({s!r}));', - video_id=video_id, note='Executing signature code').strip() - - self.write_debug(f'Decrypted nsig {s} => {ret}') - # Only cache nsig func JS code to disk if successful, and only once - self._store_player_data_to_cache('nsig', player_url, func_code) - return ret - - def _extract_n_function_name(self, jscode, player_url=None): - varname, global_list = self._interpret_player_js_global_var(jscode, player_url) - if debug_str := traverse_obj(global_list, (lambda _, v: v.endswith('-_w8_'), any)): - pattern = r'''(?x) - \{\s*return\s+%s\[%d\]\s*\+\s*(?P[a-zA-Z0-9_$]+)\s*\} - ''' % (re.escape(varname), global_list.index(debug_str)) - if match := re.search(pattern, jscode): - pattern = r'''(?x) - \{\s*\)%s\(\s* - (?: - (?P[a-zA-Z0-9_$]+)\s*noitcnuf\s* - |noitcnuf\s*=\s*(?P[a-zA-Z0-9_$]+)(?:\s+rav)? - )[;\n] - ''' % re.escape(match.group('argname')[::-1]) - if match := re.search(pattern, jscode[match.start()::-1]): - a, b = match.group('funcname_a', 'funcname_b') - return (a or b)[::-1] - self.write_debug(join_nonempty( - 'Initial search was unable to find nsig function name', - player_url and f' player = {player_url}', delim='\n'), only_once=True) - - # Examples (with placeholders nfunc, narray, idx): - # * .get("n"))&&(b=nfunc(b) - # * .get("n"))&&(b=narray[idx](b) - # * b=String.fromCharCode(110),c=a.get(b))&&c=narray[idx](c) - # * a.D&&(b="nn"[+a.D],c=a.get(b))&&(c=narray[idx](c),a.set(b,c),narray.length||nfunc("") - # * a.D&&(PL(a),b=a.j.n||null)&&(b=narray[0](b),a.set("n",b),narray.length||nfunc("") - # * a.D&&(b="nn"[+a.D],vL(a),c=a.j[b]||null)&&(c=narray[idx](c),a.set(b,c),narray.length||nfunc("") - # * J.J="";J.url="";J.Z&&(R="nn"[+J.Z],mW(J),N=J.K[R]||null)&&(N=narray[idx](N),J.set(R,N))}}; - funcname, idx = self._search_regex( - r'''(?x) - (?: - \.get\("n"\)\)&&\(b=| - (?: - b=String\.fromCharCode\(110\)| - (?P[a-zA-Z0-9_$.]+)&&\(b="nn"\[\+(?P=str_idx)\] - ) - (?: - ,[a-zA-Z0-9_$]+\(a\))?,c=a\. - (?: - get\(b\)| - [a-zA-Z0-9_$]+\[b\]\|\|null - )\)&&\(c=| - \b(?P[a-zA-Z0-9_$]+)= - )(?P[a-zA-Z0-9_$]+)(?:\[(?P\d+)\])?\([a-zA-Z]\) - (?(var),[a-zA-Z0-9_$]+\.set\((?:"n+"|[a-zA-Z0-9_$]+)\,(?P=var)\))''', - jscode, 'n function name', group=('nfunc', 'idx'), default=(None, None)) - if not funcname: - self.report_warning(join_nonempty( - 'Falling back to generic n function search', - player_url and f' player = {player_url}', delim='\n'), only_once=True) - return self._search_regex( - r'''(?xs) - ;\s*(?P[a-zA-Z0-9_$]+)\s*=\s*function\([a-zA-Z0-9_$]+\) - \s*\{(?:(?!};).)+?return\s*(?P["'])[\w-]+_w8_(?P=q)\s*\+\s*[a-zA-Z0-9_$]+''', - jscode, 'Initial JS player n function name', group='name') - elif not idx: - return funcname - - return json.loads(js_to_json(self._search_regex( - rf'var {re.escape(funcname)}\s*=\s*(\[.+?\])\s*[,;]', jscode, - f'Initial JS player n function list ({funcname}.{idx})')))[int(idx)] - - def _interpret_player_js_global_var(self, jscode, player_url): - """Returns tuple of: variable name string, variable value list""" - extract_global_var = self._cached(self._search_regex, 'js global array', player_url) - varcode, varname, varvalue = extract_global_var( - r'''(?x) - (?P["\'])use\s+strict(?P=q1);\s* - (?P - var\s+(?P[a-zA-Z0-9_$]+)\s*=\s* - (?P - (?P["\'])(?:(?!(?P=q2)).|\\.)+(?P=q2) - \.split\((?P["\'])(?:(?!(?P=q3)).)+(?P=q3)\) - |\[\s*(?:(?P["\'])(?:(?!(?P=q4)).|\\.)*(?P=q4)\s*,?\s*)+\] - ) - )[;,] - ''', jscode, 'global variable', group=('code', 'name', 'value'), default=(None, None, None)) - if not varcode: - self.write_debug(join_nonempty( - 'No global array variable found in player JS', - player_url and f' player = {player_url}', delim='\n'), only_once=True) - return None, None - - jsi = JSInterpreter(varcode) - interpret_global_var = self._cached(jsi.interpret_expression, 'js global list', player_url) - return varname, interpret_global_var(varvalue, LocalNameSpace(), allow_recursion=10) - - def _fixup_n_function_code(self, argnames, nsig_code, jscode, player_url): - # Fixup global array - varname, global_list = self._interpret_player_js_global_var(jscode, player_url) - if varname and global_list: - nsig_code = f'var {varname}={json.dumps(global_list)}; {nsig_code}' - else: - varname = self._DUMMY_STRING - global_list = [] - - # Fixup typeof check - undefined_idx = global_list.index('undefined') if 'undefined' in global_list else r'\d+' - fixed_code = re.sub( - fr'''(?x) - ;\s*if\s*\(\s*typeof\s+[a-zA-Z0-9_$]+\s*===?\s*(?: - (["\'])undefined\1| - {re.escape(varname)}\[{undefined_idx}\] - )\s*\)\s*return\s+{re.escape(argnames[0])}; - ''', ';', nsig_code) - if fixed_code == nsig_code: - self.write_debug(join_nonempty( - 'No typeof statement found in nsig function code', - player_url and f' player = {player_url}', delim='\n'), only_once=True) - - # Fixup global funcs - jsi = JSInterpreter(fixed_code) - cache_id = (self._NSIG_FUNC_CACHE_ID, player_url) - try: - self._cached( - self._extract_n_function_from_code, *cache_id)(jsi, (argnames, fixed_code))(self._DUMMY_STRING) - except JSInterpreter.Exception: - self._player_cache.pop(cache_id, None) - - global_funcnames = jsi._undefined_varnames - debug_names = [] - jsi = JSInterpreter(jscode) - for func_name in global_funcnames: - try: - func_args, func_code = jsi.extract_function_code(func_name) - fixed_code = f'var {func_name} = function({", ".join(func_args)}) {{ {func_code} }}; {fixed_code}' - debug_names.append(func_name) - except Exception: - self.report_warning(join_nonempty( - f'Unable to extract global nsig function {func_name} from player JS', - player_url and f' player = {player_url}', delim='\n'), only_once=True) - - if debug_names: - self.write_debug(f'Extracted global nsig functions: {", ".join(debug_names)}') - - return argnames, fixed_code - - def _extract_n_function_code(self, video_id, player_url): - player_id = self._extract_player_info(player_url) - func_code = self._load_player_data_from_cache('nsig', player_url) - jscode = func_code or self._load_player(video_id, player_url) - jsi = JSInterpreter(jscode) - - if func_code: - return jsi, player_id, func_code - - func_name = self._extract_n_function_name(jscode, player_url=player_url) - - # XXX: Work around (a) global array variable, (b) `typeof` short-circuit, (c) global functions - func_code = self._fixup_n_function_code(*jsi.extract_function_code(func_name), jscode, player_url) - - return jsi, player_id, func_code - - def _extract_n_function_from_code(self, jsi, func_code): - func = jsi.extract_function_from_code(*func_code) - - def extract_nsig(s): - try: - ret = func([s]) - except JSInterpreter.Exception: - raise - except Exception as e: - raise JSInterpreter.Exception(traceback.format_exc(), cause=e) - - if ret.startswith('enhanced_except_') or ret.endswith(s): - raise JSInterpreter.Exception('Signature function returned an exception') - return ret - - return extract_nsig - def _extract_signature_timestamp(self, video_id, player_url, ytcfg=None, fatal=False): """ Extract signatureTimestamp (sts) Required to tell API what sig/player version is in use. """ + CACHE_ENABLED = False # TODO: enable when preprocessed player JS cache is solved/enabled + player_sts_override = self._get_player_js_version()[0] if player_sts_override: return int(player_sts_override) - if sts := traverse_obj(ytcfg, ('STS', {int_or_none})): + sts = traverse_obj(ytcfg, ('STS', {int_or_none})) + if sts: return sts if not player_url: @@ -2344,15 +2098,14 @@ class YoutubeIE(YoutubeBaseInfoExtractor): self.report_warning(error_msg) return None - sts = self._load_player_data_from_cache('sts', player_url) - if sts: + if CACHE_ENABLED and (sts := self._load_player_data_from_cache('sts', player_url)): return sts if code := self._load_player(video_id, player_url, fatal=fatal): sts = int_or_none(self._search_regex( r'(?:signatureTimestamp|sts)\s*:\s*(?P[0-9]{5})', code, 'JS player signature timestamp', group='sts', fatal=fatal)) - if sts: + if CACHE_ENABLED and sts: self._store_player_data_to_cache('sts', player_url, sts) return sts @@ -3020,9 +2773,11 @@ class YoutubeIE(YoutubeBaseInfoExtractor): def _get_requested_clients(self, url, smuggled_data, is_premium_subscriber): requested_clients = [] excluded_clients = [] + js_runtime_available = any(p.is_available() for p in self._jsc_director.providers.values()) default_clients = ( self._DEFAULT_PREMIUM_CLIENTS if is_premium_subscriber else self._DEFAULT_AUTHED_CLIENTS if self.is_authenticated + else self._DEFAULT_JSLESS_CLIENTS if not js_runtime_available else self._DEFAULT_CLIENTS ) allowed_clients = sorted( @@ -3039,6 +2794,14 @@ class YoutubeIE(YoutubeBaseInfoExtractor): self.report_warning(f'Skipping unsupported client "{client}"') else: requested_clients.append(client) + + if not (requested_clients or excluded_clients) and default_clients == self._DEFAULT_JSLESS_CLIENTS: + self.report_warning( + f'No supported JavaScript runtime could be found. YouTube extraction without ' + f'a JS runtime has been deprecated, and some formats may be missing. ' + f'See {_EJS_WIKI_URL} for details on installing one. To silence this warning, ' + f'you can use --extractor-args "youtube:player_client=default"', only_once=True) + if not requested_clients: requested_clients.extend(default_clients) for excluded_client in excluded_clients: @@ -3173,12 +2936,12 @@ class YoutubeIE(YoutubeBaseInfoExtractor): sd[STREAMING_DATA_INNERTUBE_CONTEXT] = innertube_context sd[STREAMING_DATA_FETCH_SUBS_PO_TOKEN] = fetch_subs_po_token_func sd[STREAMING_DATA_IS_PREMIUM_SUBSCRIBER] = is_premium_subscriber + sd[STREAMING_DATA_FETCHED_TIMESTAMP] = fetched_timestamp for f in traverse_obj(sd, (('formats', 'adaptiveFormats'), ..., {dict})): f[STREAMING_DATA_CLIENT_NAME] = client f[STREAMING_DATA_FETCH_GVS_PO_TOKEN] = fetch_gvs_po_token_func f[STREAMING_DATA_IS_PREMIUM_SUBSCRIBER] = is_premium_subscriber f[STREAMING_DATA_PLAYER_TOKEN_PROVIDED] = bool(player_po_token) - f[STREAMING_DATA_FETCHED_TIMESTAMP] = fetched_timestamp if deprioritize_pr: deprioritized_prs.append(pr) else: @@ -3258,12 +3021,13 @@ class YoutubeIE(YoutubeBaseInfoExtractor): else: self.report_warning(msg, only_once=True) - def _extract_formats_and_subtitles(self, streaming_data, video_id, player_url, live_status, duration): + def _extract_formats_and_subtitles(self, video_id, player_responses, player_url, live_status, duration): CHUNK_SIZE = 10 << 20 PREFERRED_LANG_VALUE = 10 original_language = None itags, stream_ids = collections.defaultdict(set), [] itag_qualities, res_qualities = {}, {0: None} + subtitles = {} q = qualities([ # Normally tiny is the smallest video-only formats. But # audio-only formats with unknown quality may get tagged as tiny @@ -3271,7 +3035,6 @@ class YoutubeIE(YoutubeBaseInfoExtractor): 'audio_quality_ultralow', 'audio_quality_low', 'audio_quality_medium', 'audio_quality_high', # Audio only formats 'small', 'medium', 'large', 'hd720', 'hd1080', 'hd1440', 'hd2160', 'hd2880', 'highres', ]) - streaming_formats = traverse_obj(streaming_data, (..., ('formats', 'adaptiveFormats'), ...)) format_types = self._configuration_arg('formats') all_formats = 'duplicate' in format_types if self._configuration_arg('include_duplicate_formats'): @@ -3279,6 +3042,9 @@ class YoutubeIE(YoutubeBaseInfoExtractor): self._downloader.deprecated_feature('[youtube] include_duplicate_formats extractor argument is deprecated. ' 'Use formats=duplicate extractor argument instead') + def solve_sig(s, spec): + return ''.join(s[i] for i in spec) + def build_fragments(f): return LazyList({ 'url': update_url_query(f['url'], { @@ -3298,279 +3064,361 @@ class YoutubeIE(YoutubeBaseInfoExtractor): # For handling potential pre-playback required waiting period playback_wait = int_or_none(self._configuration_arg('playback_wait', [None])[0], default=6) - for fmt in streaming_formats: - client_name = fmt[STREAMING_DATA_CLIENT_NAME] - available_at = fmt[STREAMING_DATA_FETCHED_TIMESTAMP] + playback_wait - if fmt.get('targetDurationSec'): + for pr in player_responses: + streaming_data = traverse_obj(pr, 'streamingData') + if not streaming_data: continue + fetch_po_token_func = streaming_data[STREAMING_DATA_FETCH_GVS_PO_TOKEN] + is_premium_subscriber = streaming_data[STREAMING_DATA_IS_PREMIUM_SUBSCRIBER] + player_token_provided = streaming_data[STREAMING_DATA_PLAYER_TOKEN_PROVIDED] + client_name = streaming_data.get(STREAMING_DATA_CLIENT_NAME) + available_at = streaming_data[STREAMING_DATA_FETCHED_TIMESTAMP] + playback_wait + streaming_formats = traverse_obj(streaming_data, (('formats', 'adaptiveFormats'), ...)) - itag = str_or_none(fmt.get('itag')) - audio_track = fmt.get('audioTrack') or {} - stream_id = (itag, audio_track.get('id'), fmt.get('isDrc')) - if not all_formats: - if stream_id in stream_ids: - continue + def get_stream_id(fmt_stream): + return str_or_none(fmt_stream.get('itag')), traverse_obj(fmt_stream, 'audioTrack', 'id'), fmt_stream.get('isDrc') - quality = fmt.get('quality') - height = int_or_none(fmt.get('height')) - if quality == 'tiny' or not quality: - quality = fmt.get('audioQuality', '').lower() or quality - # The 3gp format (17) in android client has a quality of "small", - # but is actually worse than other formats - if itag == '17': - quality = 'tiny' - if quality: - if itag: - itag_qualities[itag] = quality - if height: - res_qualities[height] = quality + def process_format_stream(fmt_stream, proto, missing_pot): + nonlocal original_language + itag = str_or_none(fmt_stream.get('itag')) + audio_track = fmt_stream.get('audioTrack') or {} + quality = fmt_stream.get('quality') + height = int_or_none(fmt_stream.get('height')) + if quality == 'tiny' or not quality: + quality = fmt_stream.get('audioQuality', '').lower() or quality + # The 3gp format (17) in android client has a quality of "small", + # but is actually worse than other formats + if itag == '17': + quality = 'tiny' + if quality: + if itag: + itag_qualities[itag] = quality + if height: + res_qualities[height] = quality - display_name = audio_track.get('displayName') or '' - is_original = 'original' in display_name.lower() - is_descriptive = 'descriptive' in display_name.lower() - is_default = audio_track.get('audioIsDefault') - language_code = audio_track.get('id', '').split('.')[0] - if language_code and (is_original or (is_default and not original_language)): - original_language = language_code + display_name = audio_track.get('displayName') or '' + is_original = 'original' in display_name.lower() + is_descriptive = 'descriptive' in display_name.lower() + is_default = audio_track.get('audioIsDefault') + language_code = audio_track.get('id', '').split('.')[0] + if language_code and (is_original or (is_default and not original_language)): + original_language = language_code - has_drm = bool(fmt.get('drmFamilies')) + has_drm = bool(fmt_stream.get('drmFamilies')) - # FORMAT_STREAM_TYPE_OTF(otf=1) requires downloading the init fragment - # (adding `&sq=0` to the URL) and parsing emsg box to determine the - # number of fragment that would subsequently requested with (`&sq=N`) - if fmt.get('type') == 'FORMAT_STREAM_TYPE_OTF' and not has_drm: - continue - - if has_drm: - msg = f'Some {client_name} client https formats have been skipped as they are DRM protected. ' - if client_name == 'tv': - msg += ( - f'{"Your account" if self.is_authenticated else "The current session"} may have ' - f'an experiment that applies DRM to all videos on the tv client. ' - f'See https://github.com/yt-dlp/yt-dlp/issues/12563 for more details.' - ) - self.report_warning(msg, video_id, only_once=True) - - fmt_url = fmt.get('url') - if not fmt_url: - sc = urllib.parse.parse_qs(fmt.get('signatureCipher')) - fmt_url = url_or_none(try_get(sc, lambda x: x['url'][0])) - encrypted_sig = try_get(sc, lambda x: x['s'][0]) - if not all((sc, fmt_url, player_url, encrypted_sig)): - msg = f'Some {client_name} client https formats have been skipped as they are missing a url. ' - if client_name in ('web', 'web_safari'): - msg += 'YouTube is forcing SABR streaming for this client. ' - else: + if has_drm: + msg = f'Some {client_name} client {proto} formats have been skipped as they are DRM protected. ' + if client_name == 'tv': msg += ( - f'YouTube may have enabled the SABR-only or Server-Side Ad Placement experiment for ' - f'{"your account" if self.is_authenticated else "the current session"}. ' + f'{"Your account" if self.is_authenticated else "The current session"} may have ' + f'an experiment that applies DRM to all videos on the tv client. ' + f'See https://github.com/yt-dlp/yt-dlp/issues/12563 for more details.' ) - msg += 'See https://github.com/yt-dlp/yt-dlp/issues/12482 for more details' self.report_warning(msg, video_id, only_once=True) - continue - try: - fmt_url += '&{}={}'.format( - traverse_obj(sc, ('sp', -1)) or 'signature', - self._decrypt_signature(encrypted_sig, video_id, player_url), - ) - except ExtractorError as e: + + tbr = float_or_none(fmt_stream.get('averageBitrate') or fmt_stream.get('bitrate'), 1000) + format_duration = traverse_obj(fmt_stream, ('approxDurationMs', {float_or_none(scale=1000)})) + # Some formats may have much smaller duration than others (possibly damaged during encoding) + # E.g. 2-nOtRESiUc Ref: https://github.com/yt-dlp/yt-dlp/issues/2823 + # Make sure to avoid false positives with small duration differences. + # E.g. __2ABJjxzNo, ySuUZEjARPY + is_damaged = try_call(lambda: format_duration < duration // 2) + if is_damaged: self.report_warning( - f'Signature extraction failed: Some formats may be missing\n' - f' player = {player_url}\n' - f' {bug_reports_message(before="")}', - video_id=video_id, only_once=True) - self.write_debug( - f'{video_id}: Signature extraction failure info:\n' - f' encrypted sig = {encrypted_sig}\n' - f' player = {player_url}') - self.write_debug(e, only_once=True) - continue + f'Some {client_name} client {proto} formats are possibly damaged. They will be deprioritized', video_id, only_once=True) - query = parse_qs(fmt_url) - if query.get('n'): - try: - decrypt_nsig = self._cached(self._decrypt_nsig, 'nsig', query['n'][0]) - fmt_url = update_url_query(fmt_url, { - 'n': decrypt_nsig(query['n'][0], video_id, player_url), - }) - except ExtractorError as e: - if player_url: - self.report_warning( - f'nsig extraction failed: Some formats may be missing\n' - f' n = {query["n"][0]} ; player = {player_url}\n' - f' {bug_reports_message(before="")}', - video_id=video_id, only_once=True) - self.write_debug(e, only_once=True) - else: - self.report_warning( - 'Cannot decrypt nsig without player_url: Some formats may be missing', - video_id=video_id, only_once=True) - continue + if missing_pot and 'missing_pot' not in self._configuration_arg('formats'): + self._report_pot_format_skipped(video_id, client_name, proto) + return None - tbr = float_or_none(fmt.get('averageBitrate') or fmt.get('bitrate'), 1000) - format_duration = traverse_obj(fmt, ('approxDurationMs', {float_or_none(scale=1000)})) - # Some formats may have much smaller duration than others (possibly damaged during encoding) - # E.g. 2-nOtRESiUc Ref: https://github.com/yt-dlp/yt-dlp/issues/2823 - # Make sure to avoid false positives with small duration differences. - # E.g. __2ABJjxzNo, ySuUZEjARPY - is_damaged = try_call(lambda: format_duration < duration // 2) - if is_damaged: - self.report_warning( - 'Some formats are possibly damaged. They will be deprioritized', video_id, only_once=True) - - fetch_po_token_func = fmt[STREAMING_DATA_FETCH_GVS_PO_TOKEN] - pot_policy: GvsPoTokenPolicy = self._get_default_ytcfg(client_name)['GVS_PO_TOKEN_POLICY'][StreamingProtocol.HTTPS] - - require_po_token = ( - itag not in ['18'] - and gvs_pot_required( - pot_policy, fmt[STREAMING_DATA_IS_PREMIUM_SUBSCRIBER], - fmt[STREAMING_DATA_PLAYER_TOKEN_PROVIDED])) - - po_token = ( - gvs_pots.get(client_name) - or fetch_po_token_func(required=require_po_token or pot_policy.recommended)) - - if po_token: - fmt_url = update_url_query(fmt_url, {'pot': po_token}) - if client_name not in gvs_pots: - gvs_pots[client_name] = po_token - - if not po_token and require_po_token and 'missing_pot' not in self._configuration_arg('formats'): - self._report_pot_format_skipped(video_id, client_name, 'https') - continue - - name = fmt.get('qualityLabel') or quality.replace('audio_quality_', '') or '' - fps = int_or_none(fmt.get('fps')) or 0 - dct = { - 'asr': int_or_none(fmt.get('audioSampleRate')), - 'filesize': int_or_none(fmt.get('contentLength')), - 'format_id': f'{itag}{"-drc" if fmt.get("isDrc") else ""}', - 'format_note': join_nonempty( - join_nonempty(display_name, is_default and ' (default)', delim=''), - name, fmt.get('isDrc') and 'DRC', - try_get(fmt, lambda x: x['projectionType'].replace('RECTANGULAR', '').lower()), - try_get(fmt, lambda x: x['spatialAudioType'].replace('SPATIAL_AUDIO_TYPE_', '').lower()), - is_damaged and 'DAMAGED', require_po_token and not po_token and 'MISSING POT', - (self.get_param('verbose') or all_formats) and short_client_name(client_name), - delim=', '), - # Format 22 is likely to be damaged. See https://github.com/yt-dlp/yt-dlp/issues/3372 - 'source_preference': (-5 if itag == '22' else -1) + (100 if 'Premium' in name else 0), - 'fps': fps if fps > 1 else None, # For some formats, fps is wrongly returned as 1 - 'audio_channels': fmt.get('audioChannels'), - 'height': height, - 'quality': q(quality) - bool(fmt.get('isDrc')) / 2, - 'has_drm': has_drm, - 'tbr': tbr, - 'filesize_approx': filesize_from_tbr(tbr, format_duration), - 'url': fmt_url, - 'width': int_or_none(fmt.get('width')), - 'language': join_nonempty(language_code, 'desc' if is_descriptive else '') or None, - 'language_preference': PREFERRED_LANG_VALUE if is_original else 5 if is_default else -10 if is_descriptive else -1, - # Strictly de-prioritize damaged and 3gp formats - 'preference': -10 if is_damaged else -2 if itag == '17' else None, - } - mime_mobj = re.match( - r'((?:[^/]+)/(?:[^;]+))(?:;\s*codecs="([^"]+)")?', fmt.get('mimeType') or '') - if mime_mobj: - dct['ext'] = mimetype2ext(mime_mobj.group(1)) - dct.update(parse_codecs(mime_mobj.group(2))) - if itag: - itags[itag].add(('https', dct.get('language'))) - stream_ids.append(stream_id) - single_stream = 'none' in (dct.get('acodec'), dct.get('vcodec')) - if single_stream and dct.get('ext'): - dct['container'] = dct['ext'] + '_dash' - - # For handling potential pre-playback required waiting period - if live_status not in ('is_live', 'post_live'): - dct['available_at'] = available_at - - if (all_formats or 'dashy' in format_types) and dct['filesize']: - yield { - **dct, - 'format_id': f'{dct["format_id"]}-dashy' if all_formats else dct['format_id'], - 'protocol': 'http_dash_segments', - 'fragments': build_fragments(dct), + name = fmt_stream.get('qualityLabel') or quality.replace('audio_quality_', '') or '' + fps = int_or_none(fmt_stream.get('fps')) or 0 + dct = { + 'asr': int_or_none(fmt_stream.get('audioSampleRate')), + 'filesize': int_or_none(fmt_stream.get('contentLength')), + 'format_id': f'{itag}{"-drc" if fmt_stream.get("isDrc") else ""}', + 'format_note': join_nonempty( + join_nonempty(display_name, is_default and ' (default)', delim=''), + name, fmt_stream.get('isDrc') and 'DRC', + try_get(fmt_stream, lambda x: x['projectionType'].replace('RECTANGULAR', '').lower()), + try_get(fmt_stream, lambda x: x['spatialAudioType'].replace('SPATIAL_AUDIO_TYPE_', '').lower()), + is_damaged and 'DAMAGED', missing_pot and 'MISSING POT', + (self.get_param('verbose') or all_formats) and short_client_name(client_name), + delim=', '), + # Format 22 is likely to be damaged. See https://github.com/yt-dlp/yt-dlp/issues/3372 + 'source_preference': (-5 if itag == '22' else -1) + (100 if 'Premium' in name else 0), + 'fps': fps if fps > 1 else None, # For some formats, fps is wrongly returned as 1 + 'audio_channels': fmt_stream.get('audioChannels'), + 'height': height, + 'quality': q(quality) - bool(fmt_stream.get('isDrc')) / 2, + 'has_drm': has_drm, + 'tbr': tbr, + 'filesize_approx': filesize_from_tbr(tbr, format_duration), + 'width': int_or_none(fmt_stream.get('width')), + 'language': join_nonempty(language_code, 'desc' if is_descriptive else '') or None, + 'language_preference': PREFERRED_LANG_VALUE if is_original else 5 if is_default else -10 if is_descriptive else -1, + # Strictly de-prioritize damaged and 3gp formats + 'preference': -10 if is_damaged else -2 if itag == '17' else None, } - if all_formats or 'dashy' not in format_types: - dct['downloader_options'] = {'http_chunk_size': CHUNK_SIZE} - yield dct + mime_mobj = re.match( + r'((?:[^/]+)/(?:[^;]+))(?:;\s*codecs="([^"]+)")?', fmt_stream.get('mimeType') or '') + if mime_mobj: + dct['ext'] = mimetype2ext(mime_mobj.group(1)) + dct.update(parse_codecs(mime_mobj.group(2))) - needs_live_processing = self._needs_live_processing(live_status, duration) - skip_bad_formats = 'incomplete' not in format_types + single_stream = 'none' in (dct.get('acodec'), dct.get('vcodec')) + if single_stream and dct.get('ext'): + dct['container'] = dct['ext'] + '_dash' - skip_manifests = set(self._configuration_arg('skip')) - if (needs_live_processing == 'is_live' # These will be filtered out by YoutubeDL anyway - or (needs_live_processing and skip_bad_formats)): - skip_manifests.add('hls') - if skip_bad_formats and live_status == 'is_live' and needs_live_processing != 'is_live': - skip_manifests.add('dash') + return dct - def process_manifest_format(f, proto, client_name, itag, missing_pot): - key = (proto, f.get('language')) - if not all_formats and key in itags[itag]: - return False + def process_https_formats(): + proto = 'https' + https_fmts = [] + for fmt_stream in streaming_formats: + if fmt_stream.get('targetDurationSec'): + continue - # For handling potential pre-playback required waiting period - if live_status not in ('is_live', 'post_live'): - f['available_at'] = available_at + # FORMAT_STREAM_TYPE_OTF(otf=1) requires downloading the init fragment + # (adding `&sq=0` to the URL) and parsing emsg box to determine the + # number of fragment that would subsequently requested with (`&sq=N`) + if fmt_stream.get('type') == 'FORMAT_STREAM_TYPE_OTF' and not bool(fmt_stream.get('drmFamilies')): + continue - if f.get('source_preference') is None: - f['source_preference'] = -1 + stream_id = get_stream_id(fmt_stream) + if not all_formats: + if stream_id in stream_ids: + continue - # Deprioritize since its pre-merged m3u8 formats may have lower quality audio streams - if client_name == 'web_safari' and proto == 'hls' and live_status != 'is_live': - f['source_preference'] -= 1 + pot_policy: GvsPoTokenPolicy = self._get_default_ytcfg(client_name)['GVS_PO_TOKEN_POLICY'][StreamingProtocol.HTTPS] - if missing_pot: - f['format_note'] = join_nonempty(f.get('format_note'), 'MISSING POT', delim=' ') - f['source_preference'] -= 20 + require_po_token = ( + stream_id[0] not in ['18'] + and gvs_pot_required(pot_policy, is_premium_subscriber, player_token_provided)) - itags[itag].add(key) + po_token = ( + gvs_pots.get(client_name) + or fetch_po_token_func(required=require_po_token or pot_policy.recommended)) + if po_token: + if client_name not in gvs_pots: + gvs_pots[client_name] = po_token - if itag and all_formats: - f['format_id'] = f'{itag}-{proto}' - elif any(p != proto for p, _ in itags[itag]): - f['format_id'] = f'{itag}-{proto}' - elif itag: - f['format_id'] = itag + fmt_url = fmt_stream.get('url') + encrypted_sig, sc = None, None + if not fmt_url: + sc = urllib.parse.parse_qs(fmt_stream.get('signatureCipher')) + fmt_url = url_or_none(try_get(sc, lambda x: x['url'][0])) + encrypted_sig = try_get(sc, lambda x: x['s'][0]) + if not all((sc, fmt_url, player_url, encrypted_sig)): + msg = f'Some {client_name} client https formats have been skipped as they are missing a url. ' + if client_name in ('web', 'web_safari'): + msg += 'YouTube is forcing SABR streaming for this client. ' + else: + msg += ( + f'YouTube may have enabled the SABR-only or Server-Side Ad Placement experiment for ' + f'{"your account" if self.is_authenticated else "the current session"}. ' + ) + msg += 'See https://github.com/yt-dlp/yt-dlp/issues/12482 for more details' + self.report_warning(msg, video_id, only_once=True) + continue - if original_language and f.get('language') == original_language: - f['format_note'] = join_nonempty(f.get('format_note'), '(default)', delim=' ') - f['language_preference'] = PREFERRED_LANG_VALUE + fmt = process_format_stream(fmt_stream, proto, missing_pot=require_po_token and not po_token) + if not fmt: + continue - if itag in ('616', '235'): - f['format_note'] = join_nonempty(f.get('format_note'), 'Premium', delim=' ') - f['source_preference'] += 100 + # signature + # Attempt to load sig spec from cache + if encrypted_sig: + spec_cache_id = self._sig_spec_cache_id(player_url, len(encrypted_sig)) + spec = self._load_sig_spec_from_cache(spec_cache_id) + if spec: + self.write_debug(f'Using cached signature function {spec_cache_id}', only_once=True) + fmt_url += '&{}={}'.format(traverse_obj(sc, ('sp', -1)) or 'signature', + solve_sig(encrypted_sig, spec)) + else: + fmt['_jsc_s_challenge'] = encrypted_sig + fmt['_jsc_s_sc'] = sc - f['quality'] = q(itag_qualities.get(try_get(f, lambda f: f['format_id'].split('-')[0]), -1)) - if f['quality'] == -1 and f.get('height'): - f['quality'] = q(res_qualities[min(res_qualities, key=lambda x: abs(x - f['height']))]) - if self.get_param('verbose') or all_formats: - f['format_note'] = join_nonempty( - f.get('format_note'), short_client_name(client_name), delim=', ') - if f.get('fps') and f['fps'] <= 1: - del f['fps'] + # n challenge + query = parse_qs(fmt_url) + if query.get('n'): + n_challenge = query['n'][0] + if n_challenge in self._player_cache: + fmt_url = update_url_query(fmt_url, {'n': self._player_cache[n_challenge]}) + else: + fmt['_jsc_n_challenge'] = n_challenge - if proto == 'hls' and f.get('has_drm'): - f['has_drm'] = 'maybe' - f['source_preference'] -= 5 - return True + if po_token: + fmt_url = update_url_query(fmt_url, {'pot': po_token}) - subtitles = {} - for sd in streaming_data: - client_name = sd[STREAMING_DATA_CLIENT_NAME] - fetch_pot_func = sd[STREAMING_DATA_FETCH_GVS_PO_TOKEN] - is_premium_subscriber = sd[STREAMING_DATA_IS_PREMIUM_SUBSCRIBER] - has_player_token = sd[STREAMING_DATA_PLAYER_TOKEN_PROVIDED] + fmt['url'] = fmt_url - hls_manifest_url = 'hls' not in skip_manifests and sd.get('hlsManifestUrl') + if stream_id[0]: + itags[stream_id[0]].add((proto, fmt.get('language'))) + stream_ids.append(stream_id) + + # For handling potential pre-playback required waiting period + if live_status not in ('is_live', 'post_live'): + fmt['available_at'] = available_at + + https_fmts.append(fmt) + + # Bulk process sig/n handling + # Retrieve all JSC Sig and n requests for this player response in one go + n_challenges = {} + s_challenges = {} + for fmt in https_fmts: + # This will de-duplicate requests + n_challenge = fmt.pop('_jsc_n_challenge', None) + if n_challenge is not None: + n_challenges.setdefault(n_challenge, []).append(fmt) + + s_challenge = fmt.pop('_jsc_s_challenge', None) + if s_challenge is not None: + s_challenges.setdefault(len(s_challenge), {}).setdefault(s_challenge, []).append(fmt) + + challenge_requests = [] + if n_challenges: + challenge_requests.append(JsChallengeRequest( + type=JsChallengeType.N, + video_id=video_id, + input=NChallengeInput(challenges=list(n_challenges.keys()), player_url=player_url))) + if s_challenges: + challenge_requests.append(JsChallengeRequest( + type=JsChallengeType.SIG, + video_id=video_id, + input=SigChallengeInput(challenges=[''.join(map(chr, range(spec_id))) for spec_id in s_challenges], player_url=player_url))) + + if challenge_requests: + for _challenge_request, challenge_response in self._jsc_director.bulk_solve(challenge_requests): + if challenge_response.type == JsChallengeType.SIG: + for challenge, result in challenge_response.output.results.items(): + spec_id = len(challenge) + spec = [ord(c) for c in result] + self._store_sig_spec_to_cache(self._sig_spec_cache_id(player_url, spec_id), spec) + s_challenge_data = s_challenges.pop(spec_id, {}) + if not s_challenge_data: + continue + for s_challenge, fmts in s_challenge_data.items(): + solved_challenge = solve_sig(s_challenge, spec) + for fmt in fmts: + sc = fmt.pop('_jsc_s_sc') + fmt['url'] += '&{}={}'.format( + traverse_obj(sc, ('sp', -1)) or 'signature', + solved_challenge) + + elif challenge_response.type == JsChallengeType.N: + for challenge, result in challenge_response.output.results.items(): + fmts = n_challenges.pop(challenge, []) + for fmt in fmts: + self._player_cache[challenge] = result + fmt['url'] = update_url_query(fmt['url'], {'n': result}) + + # Raise warning if any challenge requests remain + # Depending on type of challenge request + + help_message = ( + 'Ensure you have a supported JavaScript runtime and ' + 'challenge solver script distribution installed. ' + 'Review any warnings presented before this message. ' + f'For more details, refer to {_EJS_WIKI_URL}') + + if s_challenges: + self.report_warning( + f'Signature solving failed: Some formats may be missing. {help_message}', + video_id=video_id, only_once=True) + if n_challenges: + self.report_warning( + f'n challenge solving failed: Some formats may be missing. {help_message}', + video_id=video_id, only_once=True) + + for cfmts in list(s_challenges.values()) + list(n_challenges.values()): + for fmt in cfmts: + if fmt in https_fmts: + https_fmts.remove(fmt) + + for fmt in https_fmts: + if (all_formats or 'dashy' in format_types) and fmt['filesize']: + yield { + **fmt, + 'format_id': f'{fmt["format_id"]}-dashy' if all_formats else fmt['format_id'], + 'protocol': 'http_dash_segments', + 'fragments': build_fragments(fmt), + } + if all_formats or 'dashy' not in format_types: + fmt['downloader_options'] = {'http_chunk_size': CHUNK_SIZE} + yield fmt + + yield from process_https_formats() + + needs_live_processing = self._needs_live_processing(live_status, duration) + skip_bad_formats = 'incomplete' not in format_types + + skip_manifests = set(self._configuration_arg('skip')) + if (needs_live_processing == 'is_live' # These will be filtered out by YoutubeDL anyway + or (needs_live_processing and skip_bad_formats)): + skip_manifests.add('hls') + + if skip_bad_formats and live_status == 'is_live' and needs_live_processing != 'is_live': + skip_manifests.add('dash') + + def process_manifest_format(f, proto, client_name, itag, missing_pot): + key = (proto, f.get('language')) + if not all_formats and key in itags[itag]: + return False + + # For handling potential pre-playback required waiting period + if live_status not in ('is_live', 'post_live'): + f['available_at'] = available_at + + if f.get('source_preference') is None: + f['source_preference'] = -1 + + # Deprioritize since its pre-merged m3u8 formats may have lower quality audio streams + if client_name == 'web_safari' and proto == 'hls' and live_status != 'is_live': + f['source_preference'] -= 1 + + if missing_pot: + f['format_note'] = join_nonempty(f.get('format_note'), 'MISSING POT', delim=' ') + f['source_preference'] -= 20 + + itags[itag].add(key) + + if itag and all_formats: + f['format_id'] = f'{itag}-{proto}' + elif any(p != proto for p, _ in itags[itag]): + f['format_id'] = f'{itag}-{proto}' + elif itag: + f['format_id'] = itag + + if original_language and f.get('language') == original_language: + f['format_note'] = join_nonempty(f.get('format_note'), '(default)', delim=' ') + f['language_preference'] = PREFERRED_LANG_VALUE + + if itag in ('616', '235'): + f['format_note'] = join_nonempty(f.get('format_note'), 'Premium', delim=' ') + f['source_preference'] += 100 + + f['quality'] = q(itag_qualities.get(try_get(f, lambda f: f['format_id'].split('-')[0]), -1)) + if f['quality'] == -1 and f.get('height'): + f['quality'] = q(res_qualities[min(res_qualities, key=lambda x: abs(x - f['height']))]) + if self.get_param('verbose') or all_formats: + f['format_note'] = join_nonempty( + f.get('format_note'), short_client_name(client_name), delim=', ') + if f.get('fps') and f['fps'] <= 1: + del f['fps'] + + if proto == 'hls' and f.get('has_drm'): + f['has_drm'] = 'maybe' + f['source_preference'] -= 5 + return True + + hls_manifest_url = 'hls' not in skip_manifests and streaming_data.get('hlsManifestUrl') if hls_manifest_url: pot_policy: GvsPoTokenPolicy = self._get_default_ytcfg( client_name)['GVS_PO_TOKEN_POLICY'][StreamingProtocol.HLS] - require_po_token = gvs_pot_required(pot_policy, is_premium_subscriber, has_player_token) - po_token = gvs_pots.get(client_name, fetch_pot_func(required=require_po_token or pot_policy.recommended)) + require_po_token = gvs_pot_required(pot_policy, is_premium_subscriber, player_token_provided) + po_token = gvs_pots.get(client_name, fetch_po_token_func(required=require_po_token or pot_policy.recommended)) if po_token: hls_manifest_url = hls_manifest_url.rstrip('/') + f'/pot/{po_token}' if client_name not in gvs_pots: @@ -3590,12 +3438,12 @@ class YoutubeIE(YoutubeBaseInfoExtractor): r'/itag/(\d+)', f['url'], 'itag', default=None), require_po_token and not po_token): yield f - dash_manifest_url = 'dash' not in skip_manifests and sd.get('dashManifestUrl') + dash_manifest_url = 'dash' not in skip_manifests and streaming_data.get('dashManifestUrl') if dash_manifest_url: pot_policy: GvsPoTokenPolicy = self._get_default_ytcfg( client_name)['GVS_PO_TOKEN_POLICY'][StreamingProtocol.DASH] - require_po_token = gvs_pot_required(pot_policy, is_premium_subscriber, has_player_token) - po_token = gvs_pots.get(client_name, fetch_pot_func(required=require_po_token or pot_policy.recommended)) + require_po_token = gvs_pot_required(pot_policy, is_premium_subscriber, player_token_provided) + po_token = gvs_pots.get(client_name, fetch_po_token_func(required=require_po_token or pot_policy.recommended)) if po_token: dash_manifest_url = dash_manifest_url.rstrip('/') + f'/pot/{po_token}' if client_name not in gvs_pots: @@ -3615,7 +3463,6 @@ class YoutubeIE(YoutubeBaseInfoExtractor): r'/clen/(\d+)', f.get('fragment_base_url') or f['url'], 'file size', default=None)) if needs_live_processing: f['is_from_start'] = True - yield f yield subtitles @@ -3688,14 +3535,13 @@ class YoutubeIE(YoutubeBaseInfoExtractor): else 'was_live' if live_content else 'not_live' if False in (is_live, live_content) else None) - streaming_data = traverse_obj(player_responses, (..., 'streamingData')) - *formats, subtitles = self._extract_formats_and_subtitles(streaming_data, video_id, player_url, live_status, duration) + *formats, subtitles = self._extract_formats_and_subtitles(video_id, player_responses, player_url, live_status, duration) if all(f.get('has_drm') for f in formats): # If there are no formats that definitely don't have DRM, all have DRM for f in formats: f['has_drm'] = True - return live_broadcast_details, live_status, streaming_data, formats, subtitles + return live_broadcast_details, live_status, formats, subtitles def _download_initial_data(self, video_id, webpage, webpage_client, webpage_ytcfg): initial_data = None @@ -3855,8 +3701,9 @@ class YoutubeIE(YoutubeBaseInfoExtractor): or int_or_none(get_first(microformats, 'lengthSeconds')) or parse_duration(search_meta('duration')) or None) - live_broadcast_details, live_status, streaming_data, formats, automatic_captions = \ + live_broadcast_details, live_status, formats, automatic_captions = \ self._list_formats(video_id, microformats, video_details, player_responses, player_url, duration) + streaming_data = traverse_obj(player_responses, (..., 'streamingData')) if live_status == 'post_live': self.write_debug(f'{video_id}: Video is in Post-Live Manifestless mode') diff --git a/yt-dlp/yt_dlp/extractor/youtube/jsc/README.md b/yt-dlp/yt_dlp/extractor/youtube/jsc/README.md new file mode 100644 index 0000000000..1bd7a3ff8a --- /dev/null +++ b/yt-dlp/yt_dlp/extractor/youtube/jsc/README.md @@ -0,0 +1,132 @@ +# YoutubeIE JS Challenge Provider Framework + +As part of the YouTube extractor, we have a framework for solving n/sig JS Challenges programmatically. This can be used by plugins. + +> [!TIP] +> If publishing a JS Challenge Provider plugin to GitHub, add the [yt-dlp-jsc-provider](https://github.com/topics/yt-dlp-jsc-provider) topic to your repository to help users find it. + + +## Public APIs + +- `yt_dlp.extractor.youtube.jsc.provider` + +Everything else is **internal-only** and no guarantees are made about the API stability. + +> [!WARNING] +> We will try our best to maintain stability with the public APIs. +> However, due to the nature of extractors and YouTube, we may need to remove or change APIs in the future. +> If you are using these APIs outside yt-dlp plugins, please account for this by importing them safely. + +## JS Challenge Provider + +`yt_dlp.extractor.youtube.jsc.provider` + +```python +from yt_dlp.extractor.youtube.jsc.provider import ( + register_provider, + register_preference, + JsChallengeProvider, + JsChallengeRequest, + JsChallengeResponse, + JsChallengeProviderError, + JsChallengeProviderRejectedRequest, + JsChallengeType, + JsChallengeProviderResponse, + NChallengeOutput, +) +from yt_dlp.utils import traverse_obj, Popen +import json +import subprocess +import typing + +@register_provider +class MyJsChallengeProviderJCP(JsChallengeProvider): # Provider class name must end with "JCP" + PROVIDER_VERSION = '0.2.1' + # Define a unique display name for the provider + PROVIDER_NAME = 'my-provider' + BUG_REPORT_LOCATION = 'https://issues.example.com/report' + + # Set supported challenge types. + # If None, the provider will handle all types. + _SUPPORTED_TYPES = [JsChallengeType.N] + + def is_available(self) -> bool: + """ + Check if the provider is available (e.g. all required dependencies are available) + This is used to determine if the provider should be used and to provide debug information. + + IMPORTANT: This method SHOULD NOT make any network requests or perform any expensive operations. + + Since this is called multiple times, we recommend caching the result. + """ + return True + + def close(self): + # Optional close hook, called when YoutubeDL is closed. + pass + + def _real_bulk_solve(self, requests: list[JsChallengeRequest]) -> typing.Generator[JsChallengeProviderResponse, None, None]: + # ℹ️ If you need to do additional validation on the requests. + # Raise yt_dlp.extractor.youtube.jsc.provider.JsChallengeProviderRejectedRequest if the request is not supported. + if len("something") > 255: + raise JsChallengeProviderRejectedRequest('Challenges longer than 255 are not supported', expected=True) + + + # ℹ️ Settings are pulled from extractor args passed to yt-dlp with the key `youtubejsc-`. + # For this example, the extractor arg would be: + # `--extractor-args "youtubejsc-myjschallengeprovider:bin_path=/path/to/bin"` + bin_path = self._configuration_arg( + 'bin_path', default=['/path/to/bin'])[0] + + # See below for logging guidelines + self.logger.trace(f'Using bin path: {bin_path}') + + for request in requests: + # You can use the _get_player method to get the player JS code if needed. + # This shares the same caching as the YouTube extractor, so it will not make unnecessary requests. + player_js = self._get_player(request.video_id, request.input.player_url) + cmd = f'{bin_path} {request.input.challenges} {player_js}' + self.logger.info(f'Executing command: {cmd}') + stdout, _, ret = Popen.run(cmd, text=True, shell=True, stdout=subprocess.PIPE) + if ret != 0: + # ℹ️ If there is an error, raise JsChallengeProviderError. + # The request will be sent to the next provider if there is one. + # You can specify whether it is expected or not. If it is unexpected, + # the log will include a link to the bug report location (BUG_REPORT_LOCATION). + + # raise JsChallengeProviderError(f'Command returned error code {ret}', expected=False) + + # You can also only fail this specific request by returning a JsChallengeProviderResponse with the error. + # This will allow other requests to be processed by this provider. + yield JsChallengeProviderResponse( + request=request, + error=JsChallengeProviderError(f'Command returned error code {ret}', expected=False) + ) + + yield JsChallengeProviderResponse( + request=request, + response=JsChallengeResponse( + type=JsChallengeType.N, + output=NChallengeOutput(results=traverse_obj(json.loads(stdout))), + )) + + +# If there are multiple JS Challenge Providers that can handle the same JsChallengeRequest(s), +# you can define a preference function to increase/decrease the priority of providers. + +@register_preference(MyJsChallengeProviderJCP) +def my_provider_preference(provider: JsChallengeProvider, requests: list[JsChallengeRequest]) -> int: + return 50 +``` + +## Logging Guidelines + +- Use the `self.logger` object to log messages. +- When making HTTP requests or any other time-expensive operation, use `self.logger.info` to log a message to standard non-verbose output. + - This lets users know what is happening when a time-expensive operation is taking place. +- Technical information such as a command being executed should be logged to `self.logger.debug` +- Use `self.logger.trace` for very detailed information that is only useful for debugging to avoid cluttering the debug log. + +## Debugging + +- Use `-v --extractor-args "youtube:jsc_trace=true"` to enable JS Challenge debug output. diff --git a/yt-dlp/yt_dlp/extractor/youtube/jsc/__init__.py b/yt-dlp/yt_dlp/extractor/youtube/jsc/__init__.py new file mode 100644 index 0000000000..b0a0f037d0 --- /dev/null +++ b/yt-dlp/yt_dlp/extractor/youtube/jsc/__init__.py @@ -0,0 +1,5 @@ +# Trigger import of built-in providers +from ._builtin.bun import BunJCP as _BunJCP # noqa: F401 +from ._builtin.deno import DenoJCP as _DenoJCP # noqa: F401 +from ._builtin.node import NodeJCP as _NodeJCP # noqa: F401 +from ._builtin.quickjs import QuickJSJCP as _QuickJSJCP # noqa: F401 diff --git a/yt-dlp/yt_dlp/extractor/youtube/jsc/_builtin/__init__.py b/yt-dlp/yt_dlp/extractor/youtube/jsc/_builtin/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/yt-dlp/yt_dlp/extractor/youtube/jsc/_builtin/bun.py b/yt-dlp/yt_dlp/extractor/youtube/jsc/_builtin/bun.py new file mode 100644 index 0000000000..8b0a6e5510 --- /dev/null +++ b/yt-dlp/yt_dlp/extractor/youtube/jsc/_builtin/bun.py @@ -0,0 +1,150 @@ +from __future__ import annotations + +import os +import re +import shlex +import subprocess +import urllib.parse + +from yt_dlp.extractor.youtube.jsc._builtin.ejs import ( + _EJS_WIKI_URL, + EJSBaseJCP, + Script, + ScriptSource, + ScriptType, + ScriptVariant, +) +from yt_dlp.extractor.youtube.jsc._builtin.vendor import load_script +from yt_dlp.extractor.youtube.jsc.provider import ( + JsChallengeProvider, + JsChallengeProviderError, + JsChallengeRequest, + register_preference, + register_provider, +) +from yt_dlp.extractor.youtube.pot._provider import BuiltinIEContentProvider +from yt_dlp.extractor.youtube.pot.provider import provider_bug_report_message +from yt_dlp.utils import Popen +from yt_dlp.utils.networking import HTTPHeaderDict, clean_proxies + +# KNOWN ISSUES: +# - If node_modules is present and includes a requested lib, the version we request is ignored +# and whatever installed in node_modules is used. +# - No way to ignore existing node_modules, lock files, etc. +# - No sandboxing options available +# - Cannot detect if npm packages are cached without potentially downloading them. +# `--no-install` appears to disable the cache. +# - npm auto-install may fail with an integrity error when using HTTP proxies +# - npm auto-install HTTP proxy support may be limited on older Bun versions +# - Cannot disable the transpiler / specify lang for stdin + + +@register_provider +class BunJCP(EJSBaseJCP, BuiltinIEContentProvider): + PROVIDER_NAME = 'bun' + JS_RUNTIME_NAME = 'bun' + BUN_NPM_LIB_FILENAME = 'yt.solver.bun.lib.js' + SUPPORTED_PROXY_SCHEMES = ['http', 'https'] + + def _iter_script_sources(self): + yield from super()._iter_script_sources() + yield ScriptSource.BUILTIN, self._bun_npm_source + + def _bun_npm_source(self, script_type: ScriptType, /): + if script_type != ScriptType.LIB: + return None + if 'ejs:npm' not in self.ie.get_param('remote_components', []): + return self._skip_component('ejs:npm') + + # Check to see if the environment proxies are compatible with Bun npm source + if unsupported_scheme := self._check_env_proxies(self._get_env_options()): + self.logger.warning( + f'Bun NPM package downloads only support HTTP/HTTPS proxies; skipping remote NPM package downloads. ' + f'Provide another distribution of the challenge solver script or use ' + f'another JS runtime that supports "{unsupported_scheme}" proxies. ' + f'For more information and alternatives, refer to {_EJS_WIKI_URL}') + return None + + # Bun-specific lib scripts that uses Bun autoimport + # https://bun.com/docs/runtime/autoimport + error_hook = lambda e: self.logger.warning( + f'Failed to read bun challenge solver lib script: {e}{provider_bug_report_message(self)}') + code = load_script( + self.BUN_NPM_LIB_FILENAME, error_hook=error_hook) + if code: + return Script(script_type, ScriptVariant.BUN_NPM, ScriptSource.BUILTIN, self._SCRIPT_VERSION, code) + return None + + def _check_env_proxies(self, env): + # check that the schemes of both HTTP_PROXY and HTTPS_PROXY are supported + for key in ('HTTP_PROXY', 'HTTPS_PROXY'): + proxy = env.get(key) + if not proxy: + continue + scheme = urllib.parse.urlparse(proxy).scheme.lower() + if scheme not in self.SUPPORTED_PROXY_SCHEMES: + return scheme + return None + + def _get_env_options(self) -> dict[str, str]: + options = os.environ.copy() # pass through existing bun env vars + request_proxies = self.ie._downloader.proxies.copy() + clean_proxies(request_proxies, HTTPHeaderDict()) + + # Apply 'all' proxy first, then allow per-scheme overrides + if request_proxies.get('all') is not None: + options['HTTP_PROXY'] = options['HTTPS_PROXY'] = request_proxies['all'] + for key, env in (('http', 'HTTP_PROXY'), ('https', 'HTTPS_PROXY')): + val = request_proxies.get(key) + if val is not None: + options[env] = val + if self.ie.get_param('nocheckcertificate'): + options['NODE_TLS_REJECT_UNAUTHORIZED'] = '0' + + # Disable Bun transpiler cache + options['BUN_RUNTIME_TRANSPILER_CACHE_PATH'] = '0' + + # Prevent segfault: + options.pop('JSC_useJIT', None) + if self.ejs_setting('jitless', ['false']) != ['false']: + options['BUN_JSC_useJIT'] = '0' + + return options + + def _run_js_runtime(self, stdin: str, /) -> str: + # https://bun.com/docs/cli/run + options = ['--no-addons', '--prefer-offline'] + if self._lib_script.variant == ScriptVariant.BUN_NPM: + # Enable auto-install even if node_modules is present + options.append('--install=fallback') + else: + options.append('--no-install') + cmd = [self.runtime_info.path, '--bun', 'run', *options, '-'] + self.logger.debug(f'Running bun: {shlex.join(cmd)}') + + with Popen( + cmd, + text=True, + stdin=subprocess.PIPE, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + env=self._get_env_options(), + ) as proc: + stdout, stderr = proc.communicate_or_kill(stdin) + stderr = self._clean_stderr(stderr) + if proc.returncode or stderr: + msg = f'Error running bun process (returncode: {proc.returncode})' + if stderr: + msg = f'{msg}: {stderr.strip()}' + raise JsChallengeProviderError(msg) + return stdout + + def _clean_stderr(self, stderr): + return '\n'.join( + line for line in stderr.splitlines() + if not re.match(r'^Bun v\d+\.\d+\.\d+ \([\w\s]+\)$', line)) + + +@register_preference(BunJCP) +def preference(provider: JsChallengeProvider, requests: list[JsChallengeRequest]) -> int: + return 800 diff --git a/yt-dlp/yt_dlp/extractor/youtube/jsc/_builtin/deno.py b/yt-dlp/yt_dlp/extractor/youtube/jsc/_builtin/deno.py new file mode 100644 index 0000000000..55d8fc5ea4 --- /dev/null +++ b/yt-dlp/yt_dlp/extractor/youtube/jsc/_builtin/deno.py @@ -0,0 +1,131 @@ +from __future__ import annotations + +import os +import re +import shlex +import subprocess + +from yt_dlp.extractor.youtube.jsc._builtin.ejs import ( + EJSBaseJCP, + Script, + ScriptSource, + ScriptType, + ScriptVariant, +) +from yt_dlp.extractor.youtube.jsc._builtin.vendor import load_script +from yt_dlp.extractor.youtube.jsc.provider import ( + JsChallengeProvider, + JsChallengeProviderError, + JsChallengeRequest, + register_preference, + register_provider, +) +from yt_dlp.extractor.youtube.pot._provider import BuiltinIEContentProvider +from yt_dlp.extractor.youtube.pot.provider import provider_bug_report_message +from yt_dlp.utils import Popen, remove_terminal_sequences +from yt_dlp.utils.networking import HTTPHeaderDict, clean_proxies + +# KNOWN ISSUES: +# - Can't avoid analysis cache: https://github.com/yt-dlp/yt-dlp/pull/14849#issuecomment-3475840821 + + +@register_provider +class DenoJCP(EJSBaseJCP, BuiltinIEContentProvider): + PROVIDER_NAME = 'deno' + JS_RUNTIME_NAME = 'deno' + + _DENO_BASE_OPTIONS = [ + '--ext=js', '--no-code-cache', '--no-prompt', '--no-remote', + '--no-lock', '--node-modules-dir=none', '--no-config', + ] + DENO_NPM_LIB_FILENAME = 'yt.solver.deno.lib.js' + _NPM_PACKAGES_CACHED = False + + def _iter_script_sources(self): + yield from super()._iter_script_sources() + yield ScriptSource.BUILTIN, self._deno_npm_source + + def _deno_npm_source(self, script_type: ScriptType, /): + if script_type != ScriptType.LIB: + return None + # Deno-specific lib scripts that use Deno NPM imports + error_hook = lambda e: self.logger.warning( + f'Failed to read deno challenge solver lib script: {e}{provider_bug_report_message(self)}') + code = load_script( + self.DENO_NPM_LIB_FILENAME, error_hook=error_hook) + if not code: + return None + if 'ejs:npm' not in self.ie.get_param('remote_components', []): + # We may still be able to continue if the npm packages are available/cached + self._NPM_PACKAGES_CACHED = self._npm_packages_cached(code) + if not self._NPM_PACKAGES_CACHED: + return self._skip_component('ejs:npm') + return Script(script_type, ScriptVariant.DENO_NPM, ScriptSource.BUILTIN, self._SCRIPT_VERSION, code) + + def _npm_packages_cached(self, stdin: str) -> bool: + # Check if npm packages are cached, so we can run without --remote-components ejs:npm + self.logger.debug('Checking if npm packages are cached') + try: + self._run_deno(stdin, [*self._DENO_BASE_OPTIONS, '--cached-only']) + except JsChallengeProviderError as e: + self.logger.trace(f'Deno npm packages not cached: {e}') + return False + return True + + def _run_js_runtime(self, stdin: str, /) -> str: + options = [*self._DENO_BASE_OPTIONS] + if self._lib_script.variant == ScriptVariant.DENO_NPM and self._NPM_PACKAGES_CACHED: + options.append('--cached-only') + elif self._lib_script.variant != ScriptVariant.DENO_NPM: + options.append('--no-npm') + options.append('--cached-only') + if self.ie.get_param('nocheckcertificate'): + options.append('--unsafely-ignore-certificate-errors') + # XXX: Convert this extractor-arg into a general option if/when a JSI framework is implemented + if self.ejs_setting('jitless', ['false']) != ['false']: + options.append('--v8-flags=--jitless') + return self._run_deno(stdin, options) + + def _get_env_options(self) -> dict[str, str]: + options = os.environ.copy() # pass through existing deno env vars + request_proxies = self.ie._downloader.proxies.copy() + clean_proxies(request_proxies, HTTPHeaderDict()) + # Apply 'all' proxy first, then allow per-scheme overrides + if 'all' in request_proxies and request_proxies['all'] is not None: + options['HTTP_PROXY'] = options['HTTPS_PROXY'] = request_proxies['all'] + for key, env in (('http', 'HTTP_PROXY'), ('https', 'HTTPS_PROXY'), ('no', 'NO_PROXY')): + if key in request_proxies and request_proxies[key] is not None: + options[env] = request_proxies[key] + return options + + def _run_deno(self, stdin, options) -> str: + cmd = [self.runtime_info.path, 'run', *options, '-'] + self.logger.debug(f'Running deno: {shlex.join(cmd)}') + with Popen( + cmd, + text=True, + stdin=subprocess.PIPE, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + env=self._get_env_options(), + ) as proc: + stdout, stderr = proc.communicate_or_kill(stdin) + stderr = self._clean_stderr(stderr) + if proc.returncode or stderr: + msg = f'Error running deno process (returncode: {proc.returncode})' + if stderr: + msg = f'{msg}: {stderr.strip()}' + raise JsChallengeProviderError(msg) + return stdout + + def _clean_stderr(self, stderr): + return '\n'.join( + line for line in stderr.splitlines() + if not ( + re.match(r'^Download\s+https\S+$', remove_terminal_sequences(line)) + or re.match(r'DANGER: TLS certificate validation is disabled for all hostnames', remove_terminal_sequences(line)))) + + +@register_preference(DenoJCP) +def preference(provider: JsChallengeProvider, requests: list[JsChallengeRequest]) -> int: + return 1000 diff --git a/yt-dlp/yt_dlp/extractor/youtube/jsc/_builtin/ejs.py b/yt-dlp/yt_dlp/extractor/youtube/jsc/_builtin/ejs.py new file mode 100644 index 0000000000..52d7ecf170 --- /dev/null +++ b/yt-dlp/yt_dlp/extractor/youtube/jsc/_builtin/ejs.py @@ -0,0 +1,326 @@ +from __future__ import annotations + +import collections +import dataclasses +import enum +import functools +import hashlib +import json + +from yt_dlp.dependencies import yt_dlp_ejs as _has_ejs +from yt_dlp.extractor.youtube.jsc._builtin import vendor +from yt_dlp.extractor.youtube.jsc.provider import ( + JsChallengeProvider, + JsChallengeProviderError, + JsChallengeProviderRejectedRequest, + JsChallengeProviderResponse, + JsChallengeResponse, + JsChallengeType, + NChallengeOutput, + SigChallengeOutput, +) +from yt_dlp.extractor.youtube.pot._provider import configuration_arg +from yt_dlp.extractor.youtube.pot.provider import provider_bug_report_message +from yt_dlp.utils._jsruntime import JsRuntimeInfo + +if _has_ejs: + import yt_dlp_ejs.yt.solver + +TYPE_CHECKING = False +if TYPE_CHECKING: + from collections.abc import Callable, Generator + + from yt_dlp.extractor.youtube.jsc.provider import JsChallengeRequest + +_EJS_WIKI_URL = 'https://github.com/yt-dlp/yt-dlp/wiki/EJS' + + +class ScriptType(enum.Enum): + LIB = 'lib' + CORE = 'core' + + +class ScriptVariant(enum.Enum): + UNKNOWN = 'unknown' + MINIFIED = 'minified' + UNMINIFIED = 'unminified' + DENO_NPM = 'deno_npm' + BUN_NPM = 'bun_npm' + + +class ScriptSource(enum.Enum): + PYPACKAGE = 'python package' # PyPI, PyInstaller exe, zipimport binary, etc + CACHE = 'cache' # GitHub release assets (cached) + WEB = 'web' # GitHub release assets (downloaded) + BUILTIN = 'builtin' # vendored (full core script; import-only lib script + NPM cache) + + +@dataclasses.dataclass +class Script: + type: ScriptType + variant: ScriptVariant + source: ScriptSource + version: str + code: str + + @functools.cached_property + def hash(self, /) -> str: + return hashlib.sha3_512(self.code.encode()).hexdigest() + + def __str__(self, /): + return f'